{
description = "SelfCI";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
flake-utils.url = "github:numtide/flake-utils";
flakebox.url = "github:rustshop/flakebox?rev=62af969ab344229d2a0d585a482293b3f186b221";
bundlers = {
url = "github:NixOS/bundlers";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
flake-utils,
flakebox,
bundlers,
}:
{
bundlers = bundlers.bundlers;
}
// flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
projectName = "selfci";
flakeboxLib = flakebox.lib.mkLib pkgs {
config = {
github.ci.buildOutputs = [ ".#ci.${projectName}" ];
just.importPaths = [ "justfile.selfci.just" ];
toolchain.channel = "latest";
rust.rustfmt.enable = false;
linker.wild.enable = true;
};
};
toolchainArgs = {
extraRustFlags = "-Z threads=0";
};
stdToolchains = (flakeboxLib.mkStdToolchains (toolchainArgs // { }));
toolchainAll = (
flakeboxLib.mkFenixToolchain (
toolchainArgs
// {
targets = pkgs.lib.getAttrs [ "default" ] (flakeboxLib.mkStdTargets { });
}
)
);
buildPaths = [
"Cargo.toml"
"Cargo.lock"
"src"
"share"
"tests"
".*\.rs"
];
buildSrc = flakeboxLib.filterSubPaths {
root = builtins.path {
name = projectName;
path = ./.;
};
paths = buildPaths;
};
multiBuild =
(flakeboxLib.craneMultiBuild {
toolchains = stdToolchains;
})
(
craneLib':
let
craneLib = (
craneLib'.overrideArgs {
pname = projectName;
src = buildSrc;
}
);
in
rec {
workspaceDeps = craneLib.buildWorkspaceDepsOnly { };
workspace = craneLib.buildWorkspace {
cargoArtifacts = workspaceDeps;
};
selfci = craneLib.buildPackage {
cargoArtifacts = workspace;
meta.mainProgram = "selfci";
};
tests = craneLib.cargoNextest {
cargoArtifacts = workspace;
nativeBuildInputs = with pkgs; [
git
jujutsu
];
env = {
NEXTEST_SHOW_PROGRESS = "none";
};
};
clippy = craneLib.cargoClippy {
# must be deps, otherwise it will not rebuild
# anything and thus not detect anything
cargoArtifacts = workspaceDeps;
cargoClippyExtraArgs = "--all-targets -- -D warnings";
};
}
);
selfci = multiBuild.selfci;
in
{
packages = {
inherit selfci;
default = selfci;
};
legacyPackages = multiBuild;
devShells = flakeboxLib.mkShells {
toolchain = toolchainAll;
packages = [ ];
};
}
);
}