Rust overlay and pre-commit hooks

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?