flake.nix (4339B)
1 { 2 description = "myc"; 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 rustToolchain 35 pkgs.clang 36 pkgs.llvmPackages.libclang 37 pkgs.libsodium 38 pkgs.openssl 39 pkgs.pkg-config 40 pkgs.sqlite 41 ] 42 ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [ 43 pkgs.darwin.libiconv 44 ]; 45 libraryPath = pkgs.lib.makeLibraryPath basePackages; 46 includePath = pkgs.lib.makeSearchPathOutput "dev" "include" basePackages; 47 darwinLdFlags = pkgs.lib.optionalString pkgs.stdenv.isDarwin "-L${pkgs.darwin.libiconv}/lib"; 48 darwinRustFlags = pkgs.lib.optionalString pkgs.stdenv.isDarwin "-L native=${pkgs.darwin.libiconv}/lib"; 49 mkApp = 50 name: text: 51 let 52 script = pkgs.writeShellApplication { 53 inherit name; 54 runtimeInputs = basePackages; 55 text = '' 56 set -euo pipefail 57 repo_root="$(git rev-parse --show-toplevel)" 58 cd "$repo_root" 59 export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib" 60 export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}" 61 export DYLD_FALLBACK_LIBRARY_PATH="${libraryPath}:''${DYLD_FALLBACK_LIBRARY_PATH:-}" 62 export LDFLAGS="${darwinLdFlags} ''${LDFLAGS:-}" 63 export NIX_LDFLAGS="${darwinLdFlags} ''${NIX_LDFLAGS:-}" 64 export RUSTFLAGS="${darwinRustFlags} ''${RUSTFLAGS:-}" 65 export CPATH="${includePath}:''${CPATH:-}" 66 ${text} 67 ''; 68 }; 69 in 70 { 71 type = "app"; 72 program = "${script}/bin/${name}"; 73 }; 74 in 75 f { 76 inherit 77 basePackages 78 darwinLdFlags 79 darwinRustFlags 80 includePath 81 libraryPath 82 mkApp 83 pkgs 84 rustToolchain 85 ; 86 } 87 ); 88 in 89 { 90 apps = forAllSystems ( 91 { mkApp, ... }: 92 rec { 93 default = check; 94 check = mkApp "check" '' 95 cargo metadata --format-version 1 --no-deps 96 cargo check --locked 97 ''; 98 fmt = mkApp "fmt" '' 99 cargo fmt --all --check 100 ''; 101 release-acceptance = mkApp "release-acceptance" '' 102 ./scripts/release-acceptance.sh 103 ''; 104 test = mkApp "test" '' 105 cargo test --locked 106 ''; 107 } 108 ); 109 110 devShells = forAllSystems ( 111 { 112 basePackages, 113 darwinLdFlags, 114 darwinRustFlags, 115 includePath, 116 libraryPath, 117 pkgs, 118 ... 119 }: 120 { 121 default = pkgs.mkShell { 122 packages = basePackages; 123 shellHook = '' 124 export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib" 125 export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}" 126 export DYLD_FALLBACK_LIBRARY_PATH="${libraryPath}:''${DYLD_FALLBACK_LIBRARY_PATH:-}" 127 export LDFLAGS="${darwinLdFlags} ''${LDFLAGS:-}" 128 export NIX_LDFLAGS="${darwinLdFlags} ''${NIX_LDFLAGS:-}" 129 export RUSTFLAGS="${darwinRustFlags} ''${RUSTFLAGS:-}" 130 export CPATH="${includePath}:''${CPATH:-}" 131 ''; 132 }; 133 } 134 ); 135 }; 136 }