.dotfiles/templates/rust/flake.nix
2024-12-31 17:48:44 +01:00

70 lines
1.8 KiB
Nix

# heavily inspired by https://github.com/nulladmin1/nix-flake-templates/blob/main/rust-fenix-naersk/flake.nix
{
description = "Rust Flake using Fenix and Naersk";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
systems.url = "github:nix-systems/default";
naersk.url = "github:nix-community/naersk";
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{ self
, nixpkgs
, naersk
, fenix
, systems
, ...
}:
let
forEachSystem = nixpkgs.lib.genAttrs (import systems);
pkgsFor = forEachSystem (system:
import nixpkgs {
inherit system;
overlays = [
fenix.overlays.default
];
});
rust-toolchain = forEachSystem (system: pkgsFor.${system}.fenix.stable);
in
{
formatter = forEachSystem (system: pkgsFor.${system}.nixpkgs-fmt);
devShells = forEachSystem (system: {
default = pkgsFor.${system}.mkShell {
packages = with rust-toolchain.${system}; [
cargo
rustc
clippy
rustfmt
rust-analyzer
];
env = {
RUST_BACKTRACE = "full";
};
RUST_SRC_PATH = "${rust-toolchain.${system}.rust-src}/lib/rustlib/src/rust/library";
};
});
packages = forEachSystem (system: {
default =
(pkgsFor.${system}.callPackage naersk {
inherit (rust-toolchain.${system}) cargo rustc;
}).buildPackage {
src = ./.;
};
});
apps = forEachSystem (system: {
default = {
type = "app";
program = "${self.packages.${system}.default}/bin/rust";
};
});
};
}