92 lines
2.3 KiB
Nix
92 lines
2.3 KiB
Nix
{
|
||
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}
|
||
'';
|
||
};
|
||
});
|
||
}
|