flake.nix (4746B)
1 { 2 description = "Command-line interface for Radroots"; 3 4 inputs = { 5 nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; 6 rust-overlay = { 7 url = "github:oxalica/rust-overlay"; 8 inputs.nixpkgs.follows = "nixpkgs"; 9 }; 10 }; 11 12 outputs = 13 { nixpkgs, rust-overlay, ... }: 14 let 15 systems = [ 16 "aarch64-darwin" 17 "aarch64-linux" 18 "x86_64-darwin" 19 "x86_64-linux" 20 ]; 21 forAllSystems = 22 f: 23 nixpkgs.lib.genAttrs systems ( 24 system: 25 let 26 pkgs = import nixpkgs { 27 inherit system; 28 overlays = [ rust-overlay.overlays.default ]; 29 }; 30 rustToolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; 31 basePackages = 32 [ 33 pkgs.git 34 pkgs.rustup 35 rustToolchain 36 pkgs.clang 37 pkgs.llvmPackages.libclang 38 pkgs.pkg-config 39 ] 40 ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [ 41 pkgs.darwin.libiconv 42 ]; 43 libraryPath = pkgs.lib.makeLibraryPath basePackages; 44 includePath = pkgs.lib.makeSearchPathOutput "dev" "include" basePackages; 45 darwinLdFlags = pkgs.lib.optionalString pkgs.stdenv.isDarwin "-L${pkgs.darwin.libiconv}/lib"; 46 darwinRustFlags = pkgs.lib.optionalString pkgs.stdenv.isDarwin "-L native=${pkgs.darwin.libiconv}/lib"; 47 mkApp = 48 name: 49 { 50 runtimeInputs ? basePackages, 51 text, 52 }: 53 let 54 script = pkgs.writeShellApplication { 55 inherit name; 56 inherit runtimeInputs; 57 text = '' 58 set -euo pipefail 59 repo_root="$(git rev-parse --show-toplevel)" 60 cd "$repo_root" 61 export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib" 62 export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}" 63 export DYLD_FALLBACK_LIBRARY_PATH="${libraryPath}:''${DYLD_FALLBACK_LIBRARY_PATH:-}" 64 export LDFLAGS="${darwinLdFlags} ''${LDFLAGS:-}" 65 export NIX_LDFLAGS="${darwinLdFlags} ''${NIX_LDFLAGS:-}" 66 export RUSTFLAGS="${darwinRustFlags} ''${RUSTFLAGS:-}" 67 export CPATH="${includePath}:''${CPATH:-}" 68 ${text} 69 ''; 70 }; 71 in 72 { 73 type = "app"; 74 program = "${script}/bin/${name}"; 75 }; 76 in 77 f { 78 inherit 79 basePackages 80 darwinLdFlags 81 darwinRustFlags 82 includePath 83 libraryPath 84 mkApp 85 pkgs 86 rustToolchain 87 ; 88 } 89 ); 90 in 91 { 92 apps = forAllSystems ( 93 { 94 mkApp, 95 ... 96 }: 97 rec { 98 default = check; 99 check = mkApp "check" { 100 text = '' 101 cargo metadata --format-version 1 --no-deps 102 cargo check 103 ''; 104 }; 105 fmt = mkApp "fmt" { 106 text = '' 107 cargo fmt --package radroots_cli --check 108 ''; 109 }; 110 release-acceptance = mkApp "release-acceptance" { 111 text = '' 112 cargo fmt --package radroots_cli --check 113 cargo metadata --format-version 1 --no-deps 114 cargo check 115 cargo test -j1 -- --test-threads=1 116 ''; 117 }; 118 test = mkApp "test" { 119 text = '' 120 cargo test -j1 -- --test-threads=1 121 ''; 122 }; 123 } 124 ); 125 126 devShells = forAllSystems ( 127 { 128 basePackages, 129 darwinLdFlags, 130 darwinRustFlags, 131 includePath, 132 libraryPath, 133 pkgs, 134 ... 135 }: 136 { 137 default = pkgs.mkShell { 138 packages = basePackages; 139 shellHook = '' 140 export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib" 141 export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}" 142 export DYLD_FALLBACK_LIBRARY_PATH="${libraryPath}:''${DYLD_FALLBACK_LIBRARY_PATH:-}" 143 export LDFLAGS="${darwinLdFlags} ''${LDFLAGS:-}" 144 export NIX_LDFLAGS="${darwinLdFlags} ''${NIX_LDFLAGS:-}" 145 export RUSTFLAGS="${darwinRustFlags} ''${RUSTFLAGS:-}" 146 export CPATH="${includePath}:''${CPATH:-}" 147 ''; 148 }; 149 } 150 ); 151 }; 152 }