70 lines
1.6 KiB
Nix
70 lines
1.6 KiB
Nix
{ pkgs, lib, ... }:
|
|
|
|
{
|
|
packages = with pkgs; [
|
|
bacon
|
|
cargo-deny
|
|
cargo-duplicates
|
|
cargo-expand
|
|
cargo-features-manager
|
|
cargo-flamegraph
|
|
cargo-geiger
|
|
cargo-generate
|
|
cargo-hack
|
|
cargo-insta
|
|
cargo-llvm-cov
|
|
cargo-machete
|
|
cargo-mutants
|
|
cargo-nextest
|
|
cargo-rr
|
|
cargo-udeps
|
|
cargo-vet
|
|
cargo-workspaces
|
|
git
|
|
sccache
|
|
tokio-console
|
|
vulkan-tools
|
|
];
|
|
env.RUSTC_WRAPPER = "sccache";
|
|
# Per-user sccache server socket. On the default shared TCP port (4226)
|
|
# the first user's server performs every rustc write for every user, so a
|
|
# second user's builds die with EACCES in their own target/ dir.
|
|
enterShell = ''
|
|
sccache_dir="''${XDG_RUNTIME_DIR:-/tmp/sccache-$(id -u)}"
|
|
mkdir -p "$sccache_dir"
|
|
export SCCACHE_SERVER_UDS="$sccache_dir/sccache.sock"
|
|
'';
|
|
# https://devenv.sh/languages/
|
|
languages.rust = {
|
|
enable = true;
|
|
channel = "stable";
|
|
clangLinker.enable = true;
|
|
mold.enable = true;
|
|
rustflags = lib.concatStringsSep " " [
|
|
];
|
|
components = [
|
|
"rustc"
|
|
"cargo"
|
|
"clippy"
|
|
"rustfmt"
|
|
"rust-analyzer"
|
|
];
|
|
};
|
|
tasks."devenv:git-hooks:prepare-shared-hooks-rust" = {
|
|
exec = ''
|
|
if hooks_dir="$(git rev-parse --git-path hooks 2>/dev/null)"; then
|
|
mkdir -p "$hooks_dir"
|
|
chmod u+rwx,g+rwx "$hooks_dir" 2>/dev/null || true
|
|
find "$hooks_dir" -maxdepth 1 -type f ! -user "$(id -un)" ! -name '*.sample' -delete 2>/dev/null || true
|
|
fi
|
|
'';
|
|
after = [ "devenv:files" ];
|
|
before = [ "devenv:git-hooks:install" ];
|
|
};
|
|
|
|
git-hooks.hooks = {
|
|
rustfmt.enable = true;
|
|
clippy.enable = true;
|
|
};
|
|
}
|