A better Rust ATProto crate
at 117b66ade1632ecba80b22bca633bb72d8ea2595 151 lines 4.6 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 nativeBuildInputs = [pkgs.installShellFiles]; 82 doCheck = false; # Tests require lexicon corpus files not available in nix build 83 postInstall = '' 84 # Install man pages and completions from build script output 85 for outdir in target/release/build/jacquard-lexicon-*/out; do 86 if [ -d "$outdir/man" ]; then 87 installManPage $outdir/man/*.1 88 fi 89 if [ -d "$outdir/completions" ]; then 90 # Install completions for both binaries 91 for completion in $outdir/completions/*; do 92 case "$(basename "$completion")" in 93 *.bash) installShellCompletion --bash "$completion" ;; 94 *.fish) installShellCompletion --fish "$completion" ;; 95 _*) installShellCompletion --zsh "$completion" ;; 96 esac 97 done 98 fi 99 done 100 101 # Install example lexicons.kdl config 102 install -Dm644 ${./../../crates/jacquard-lexicon/lexicons.kdl.example} $out/share/doc/jacquard-lexicon/lexicons.kdl.example 103 ''; 104 }; 105 }; 106 }; 107 "jacquard-api" = { 108 imports = [globalCrateConfig]; 109 autoWire = ["crate" "clippy"]; 110 path = ./../../crates/jacquard-api; 111 crane = { 112 args = { 113 buildInputs = commonBuildInputs; 114 }; 115 }; 116 }; 117 "jacquard-identity" = { 118 imports = [globalCrateConfig]; 119 autoWire = ["crate" "clippy"]; 120 path = ./../../crates/jacquard-identity; 121 crane = { 122 args = { 123 buildInputs = commonBuildInputs; 124 }; 125 }; 126 }; 127 "jacquard-oauth" = { 128 imports = [globalCrateConfig]; 129 autoWire = ["crate" "clippy"]; 130 path = ./../../crates/jacquard-oauth; 131 crane = { 132 args = { 133 buildInputs = commonBuildInputs; 134 }; 135 }; 136 }; 137 "jacquard-axum" = { 138 imports = [globalCrateConfig]; 139 autoWire = ["crate" "clippy"]; 140 path = ./../../crates/jacquard-axum; 141 crane = { 142 args = { 143 buildInputs = commonBuildInputs; 144 }; 145 }; 146 }; 147 }; 148 }; 149 packages.default = self'.packages.jacquard-lexicon; 150 }; 151}