let basePkgs = import ./nix/nixpkgs.nix { }; rust_overlay = with basePkgs; import (fetchFromGitHub (lib.importJSON ./nix/oxalica_rust_overlay.json)); pkgs = import ./nix/nixpkgs.nix { overlays = [ rust_overlay ]; }; nightlyToolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal.override { extensions = [ "rustfmt" ]; }); stableToolchain = pkgs.rust-bin.stable."1.56.1".minimal.override { extensions = [ "clippy" "llvm-tools-preview" "rust-src" ]; }; pre-commit-check = pkgs.callPackage ./nix/pre-commit.nix { }; in with pkgs; mkShell { buildInputs = [ argbash openssl pkgconfig git stableToolchain nightlyToolchain ] ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ]; shellHook = '' export RUST_BACKTRACE=full export PATH="$PATH:$(pwd)/target/debug:$(pwd)/target/release" # Ensure `cargo fmt` uses `rustfmt` from nightly. export RUSTFMT="${nightlyToolchain}/bin/rustfmt" # install pre-commit hooks ${pre-commit-check.shellHook} ''; }