{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, rust-overlay, nixpkgs, flake-utils, }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [rust-overlay.overlays.default]; }; osxDependencies = with pkgs; lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security darwin.apple_sdk.frameworks.CoreServices darwin.apple_sdk.frameworks.SystemConfiguration ]; cargoTomlContents = builtins.readFile ./Cargo.toml; version = (builtins.fromTOML cargoTomlContents).package.version; rustVersion = (builtins.fromTOML cargoTomlContents).package."rust-version"; rustToolchain = pkgs.rust-bin.stable.${rustVersion}.default; rustPlatform = pkgs.makeRustPlatform { cargo = rustToolchain; rustc = rustToolchain; }; my-crate = rustPlatform.buildRustPackage { inherit version; name = "my-crate"; buildInputs = with pkgs; [openssl] ++ osxDependencies; nativeBuildInputs = with pkgs; [pkg-config openssl.dev]; src = pkgs.lib.cleanSourceWith {src = self;}; doCheck = false; # don’t run cargo test CARGO_BUILD_TESTS = "false"; # don’t even compile test binaries cargoLock.lockFile = ./Cargo.lock; GIT_COMMIT_HASH_SHORT = self.shortRev or "unknown"; }; packages = { my-crate = my-crate; default = packages.my-crate; }; overlays.default = final: prev: {my-crate = packages.my-crate;}; gitRev = if (builtins.hasAttr "rev" self) then self.rev else "dirty"; in { inherit packages overlays; devShell = pkgs.mkShell { buildInputs = with pkgs; [ pkg-config openssl cargo-insta (rustToolchain.override { extensions = ["rust-src" "clippy" "rustfmt" "rust-analyzer"]; }) ] ++ osxDependencies; shellHook = '' export GIT_REVISION=${gitRev} ''; }; }); }