A better Rust ATProto crate
at main 5.1 kB view raw
1{inputs, ...}: { 2 imports = [ 3 inputs.rust-flake.flakeModules.default 4 inputs.rust-flake.flakeModules.nixpkgs 5 # inputs.process-compose-flake.flakeModule 6 # inputs.cargo-doc-live.flakeModule 7 ]; 8 perSystem = { 9 config, 10 self', 11 pkgs, 12 lib, 13 ... 14 }: let 15 inherit (pkgs.stdenv) isDarwin; 16 inherit (pkgs.darwin) apple_sdk; 17 18 # Common configuration for all crates 19 globalCrateConfig = { 20 crane.clippy.enable = false; 21 }; 22 23 # Common build inputs for all crates 24 commonBuildInputs = with pkgs; 25 [ 26 ] 27 ++ lib.optionals 28 isDarwin ( 29 with apple_sdk.frameworks; [ 30 IOKit 31 Security 32 SystemConfiguration 33 ] 34 ); 35 in { 36 rust-project = { 37 # Source filtering to avoid unnecessary rebuilds 38 src = lib.cleanSourceWith { 39 src = inputs.self; 40 filter = config.rust-project.crane-lib.filterCargoSources; 41 }; 42 crates = { 43 "jacquard" = { 44 imports = [globalCrateConfig]; 45 autoWire = ["crate" "clippy"]; 46 path = ./../../crates/jacquard; 47 crane = { 48 args = { 49 buildInputs = commonBuildInputs; 50 }; 51 }; 52 }; 53 54 "jacquard-common" = { 55 imports = [globalCrateConfig]; 56 autoWire = ["crate" "clippy"]; 57 path = ./../../crates/jacquard-common; 58 crane = { 59 args = { 60 buildInputs = commonBuildInputs; 61 }; 62 }; 63 }; 64 "jacquard-derive" = { 65 imports = [globalCrateConfig]; 66 autoWire = ["crate" "clippy"]; 67 path = ./../../crates/jacquard-derive; 68 crane = { 69 args = { 70 buildInputs = commonBuildInputs; 71 }; 72 }; 73 }; 74 "jacquard-lexicon" = { 75 imports = [globalCrateConfig]; 76 autoWire = ["crate" "clippy"]; 77 path = ./../../crates/jacquard-lexicon; 78 crane = { 79 args = { 80 buildInputs = commonBuildInputs; 81 }; 82 }; 83 }; 84 "jacquard-lexgen" = { 85 imports = [globalCrateConfig]; 86 autoWire = ["crate" "clippy"]; 87 path = ./../../crates/jacquard-lexgen; 88 crane = { 89 args = { 90 buildInputs = commonBuildInputs; 91 nativeBuildInputs = [pkgs.installShellFiles]; 92 doCheck = false; # Tests require lexicon corpus files not available in nix build 93 postInstall = '' 94 # Install man pages and completions from build script output 95 for outdir in target/release/build/jacquard-lexgen-*/out; do 96 if [ -d "$outdir/man" ]; then 97 installManPage $outdir/man/*.1 98 fi 99 if [ -d "$outdir/completions" ]; then 100 # Install completions for both binaries 101 for completion in $outdir/completions/*; do 102 case "$(basename "$completion")" in 103 *.bash) installShellCompletion --bash "$completion" ;; 104 *.fish) installShellCompletion --fish "$completion" ;; 105 _*) installShellCompletion --zsh "$completion" ;; 106 esac 107 done 108 fi 109 done 110 111 # Install example lexicons.kdl config 112 install -Dm644 ${./../../crates/jacquard-lexgen/lexicons.kdl.example} $out/share/doc/jacquard-lexgen/lexicons.kdl.example 113 ''; 114 }; 115 }; 116 }; 117 "jacquard-api" = { 118 imports = [globalCrateConfig]; 119 autoWire = ["crate" "clippy"]; 120 path = ./../../crates/jacquard-api; 121 crane = { 122 args = { 123 buildInputs = commonBuildInputs; 124 }; 125 }; 126 }; 127 "jacquard-identity" = { 128 imports = [globalCrateConfig]; 129 autoWire = ["crate" "clippy"]; 130 path = ./../../crates/jacquard-identity; 131 crane = { 132 args = { 133 buildInputs = commonBuildInputs; 134 }; 135 }; 136 }; 137 "jacquard-oauth" = { 138 imports = [globalCrateConfig]; 139 autoWire = ["crate" "clippy"]; 140 path = ./../../crates/jacquard-oauth; 141 crane = { 142 args = { 143 buildInputs = commonBuildInputs; 144 }; 145 }; 146 }; 147 "jacquard-axum" = { 148 imports = [globalCrateConfig]; 149 autoWire = ["crate" "clippy"]; 150 path = ./../../crates/jacquard-axum; 151 crane = { 152 args = { 153 buildInputs = commonBuildInputs; 154 }; 155 }; 156 }; 157 "jacquard-repo" = { 158 imports = [globalCrateConfig]; 159 autoWire = ["crate" "clippy"]; 160 path = ./../../crates/jacquard-repo; 161 crane = { 162 args = { 163 buildInputs = commonBuildInputs; 164 }; 165 }; 166 }; 167 }; 168 }; 169 packages.default = self'.packages.jacquard-lexgen; 170 }; 171}