Base nix-based rust project

This commit is contained in:
bluepython508
2023-10-08 14:46:11 +01:00
commit f34b975c88
8 changed files with 328 additions and 0 deletions

89
flake.nix Normal file
View File

@@ -0,0 +1,89 @@
{
description = "sablono";
inputs = {
nixpkgs.url = "flake:nixpkgs";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
treefmt-nix = {
url = "github:numtide/treefmt-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
crane = {
url = "github:ipetkov/crane";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
self,
nixpkgs,
rust-overlay,
treefmt-nix,
crane,
systems,
}: let
inherit (nixpkgs) lib;
eachSystem = f:
lib.genAttrs (import systems) (system:
f (lib.getAttrs (lib.attrNames (lib.functionArgs f)) rec {
inherit system;
pkgs = import nixpkgs {
inherit system;
overlays = [rust-overlay.overlays.default];
};
ownPkgs = self.packages.${system};
toolchain = pkgs.rust-bin.fromRustupToolchainFile ./toolchain.toml;
craneLib = (crane.mkLib pkgs).overrideToolchain toolchain;
craneArgs = rec {
src = craneLib.cleanCargoSource (craneLib.path ./.);
cargoArtifacts = craneLib.buildDepsOnly {
inherit src;
};
};
treefmt =
(treefmt-nix.lib.evalModule pkgs {
projectRootFile = "flake.nix";
programs = {
alejandra.enable = true;
rustfmt = {
enable = true;
package = toolchain;
};
};
})
.config
.build;
}));
in {
packages = eachSystem ({
craneLib,
craneArgs,
}: {
default = craneLib.buildPackage craneArgs;
});
devShells = eachSystem ({
pkgs,
toolchain,
ownPkgs,
}: {
default = pkgs.mkShell {
inputsFrom = [ownPkgs.default];
packages = [toolchain pkgs.bacon];
};
});
formatter = eachSystem ({treefmt}: treefmt.wrapper);
checks = eachSystem ({
craneLib,
craneArgs,
ownPkgs,
treefmt,
}: {
build = ownPkgs.default;
formatting = treefmt.check self;
clippy = craneLib.cargoClippy craneArgs;
});
};
}