Im having a hard time with a rust-overlay
.
Consider this flake.nix file:
{
inputs = {
flake-utils.url = "https://flakehub.com/f/numtide/flake-utils/0.1.*.tar.gz";
naersk.url = "https://flakehub.com/f/nix-community/naersk/0.1.*.tar.gz";
nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1.*.tar.gz";
rust-overlay = {
url = "https://flakehub.com/f/oxalica/rust-overlay/0.1.*.tar.gz";
inputs.nixpkgs.follows = "nixpkgs";
};
pre-commit-hooks.url = "github:cachix/git-hooks.nix";
};
outputs =
{ self
, flake-utils
, naersk
, nixpkgs
, rust-overlay
, pre-commit-hooks
}:
flake-utils.lib.eachDefaultSystem (system:
let
rustOverlay = final: prev: {
rustToolchain = prev.rust-bin.stable."1.85.0".default.override {
extensions = [
"rust-src"
"rustfmt"
];
targets = [ ];
};
};
naerskOverlay = final: prev: {
naersk = prev.callPackage naersk {
rustc = final.rustToolchain;
cargo = final.rustToolchain;
};
};
pkgs = import nixpkgs {
inherit system;
overlays = [
rust-overlay.overlays.default
rustOverlay
naerskOverlay
];
};
naersk' = pkgs.callPackage naersk { };
preCommitCheck = pre-commit-hooks.lib.${system}.run
{
src = ./.;
hooks = {
elm-format.enable = true;
nixpkgs-fmt.enable = true;
clippy = {
enable = true;
package = pkgs.rustToolchain;
settings.allFeatures = true;
};
};
settings = {
rust = {
check.cargoDeps = pkgs.rustPlatform.importCargoLock {
lockFile = ./Cargo.lock;
};
};
};
};
in
rec {
packages = {
myApp = naersk'.buildPackage {
src = ./.;
};
default = packages.myApp;
};
apps.default = {
type = "app";
program = "${packages.myApp}/bin/myApp";
};
devShells = {
default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [
rustToolchain
cargo-deny
cargo-edit
cargo-watch
openssl
pkg-config
pre-commit-hooks.packages.${system}.default
];
RUST_SRC_PATH = "${pkgs.rustToolchain}/lib/rustlib/src/rust/library";
pre-commit-hook = preCommitCheck.shellHook;
};
};
checks.pre-commit-check = preCommitCheck;
}
);
}
The goal was bascly. to make sure that I use Rust 1.85.0. This so far worked quite alright, but when trying to add git-hooks.nix
to the project, I really run into trouble. With the above setup, running
nix develop -c pre-commit run --all-files
works just fine, but when I run
nix flake check --all-systems
I run into issues with clippy
error[E0514]: found crate semver compiled by an incompatible version of rustc
--> src/archive.rs:6:5
|
6 | use semver::Version;
| ^^^^^^
|
= note: the following crate versions were found:
crate semver compiled by rustc 1.82.0 (f6e511eec 2024-10-15) (built from a source tarball): /private/tmp/nix-build-pre-commit-run.drv-0/xsd4j4b1nj7m6xfpvrbz8rg8w35pgsbz-source/target/debug/deps/libsemver-1e5f4778f27232cd.rmeta
= help: please recompile that crate using this compiler (rustc 1.85.0 (4d91de4e4 2025-02-17))
So there seems to be a difference between the devShell
that I create and what is used when running nix flake check
, but I don’t really understand what is wrong.
Any idea on how to fix this?