{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, rust-overlay }:
let
lib = nixpkgs.lib;
systems = [
"x86_64-linux"
"aarch64-linux"
"aarch64-darwin"
];
pkgsFor = system: import nixpkgs {
inherit system;
overlays = [ (import rust-overlay) ];
};
in
{
devShells = lib.genAttrs systems (system:
let
pkgs = pkgsFor system;
rustTarget = pkgs.stdenv.hostPlatform.rust.rustcTarget;
toolchain = (pkgs.rust-bin.stable.latest.minimal.override {
extensions = [ "clippy" "rustfmt" "rust-src" "llvm-tools" ];
});
ciToolchain = (pkgs.rust-bin.stable.latest.minimal.override {
extensions = [ "clippy" "rustfmt" ];
});
in
{
default = pkgs.mkShell {
packages = [
toolchain
pkgs.rust-analyzer
pkgs.bacon
pkgs.cargo-edit
pkgs.cargo-deny
pkgs.cargo-machete
pkgs.cargo-llvm-cov
pkgs.release-plz
];
RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust";
shellHook = ''
export LLVM_COV="${toolchain}/lib/rustlib/${rustTarget}/bin/llvm-cov"
export LLVM_PROFDATA="${toolchain}/lib/rustlib/${rustTarget}/bin/llvm-profdata"
'';
};
ci = pkgs.mkShell {
packages = [
ciToolchain
pkgs.cargo-deny
pkgs.cargo-machete
];
};
release = pkgs.mkShell {
packages = [
ciToolchain
pkgs.release-plz
];
};
renovate = pkgs.mkShell {
packages = [
pkgs.renovate
pkgs.git
];
};
});
};
}