The crane library can be instantiated with a specific version of nixpkgs as follows. For more information, see the API docs for mkLib.

# Instantiating for a specific `system` crane.mkLib (import nixpkgs { system = "armv7l-linux"; })
# Instantiating for cross compiling crane.mkLib (import nixpkgs { localSystem = "x86_64-linux"; crossSystem = "aarch64-linux"; })

The crane library can also be instantiated with a particular rust toolchain:

# For example, using rust-overlay let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; overlays = [ (import rust-overlay) ]; }; in (crane.mkLib pkgs).overrideToolchain (p: p.rust-bin.stable.latest.default.override { targets = [ "wasm32-wasi" ]; })

Finally, specific inputs can be overridden for the entire library via the overrideScope API as follows. For more information, see the API docs for mkLib/overrideToolchain, or checkout the custom-toolchain example.

(crane.mkLib pkgs).overrideScope (final: prev: { cargo-tarpaulin = myCustomCargoTarpaulinVersion; })