{
description = "kvsd";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/release-23.11";
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
};
crane = {
url = "github:ipetkov/crane";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-utils.url = "github:numtide/flake-utils";
advisory-db = {
url = "github:rustsec/advisory-db";
flake = false;
};
};
outputs = { self, nixpkgs, fenix, crane, flake-utils, advisory-db, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
overlays = [ fenix.overlays.default ];
pkgs = import nixpkgs { inherit system overlays; };
rustToolchain = fenix.packages.${system}.fromToolchainFile {
file = ./rust-toolchain.toml;
sha256 = "sha256-e4mlaJehWBymYxJGgnbuCObVlqMlQSilZ8FljG9zPHY=";
};
craneLib = crane.lib.${system}.overrideToolchain rustToolchain;
src = pkgs.lib.cleanSourceWith {
src = ./.; # The original, unfiltered source
filter = path: type:
# Default filter from crane (allow .rs files)
(craneLib.filterCargoSources path type);
};
darwinDeps = [
pkgs.libiconv
pkgs.darwin.apple_sdk.frameworks.Security
pkgs.darwin.apple_sdk.frameworks.SystemConfiguration
];
commonArgs = {
inherit src;
strictDeps = true;
pname = "kvsd-deps";
version = "0.1";
buildInputs = [ ]
++ pkgs.lib.optionals pkgs.stdenv.isDarwin darwinDeps;
};
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
kvsdCrate =
craneLib.crateNameFromCargoToml { cargoToml = ./Cargo.toml; };
kvsd = craneLib.buildPackage (commonArgs // {
inherit cargoArtifacts;
inherit (kvsdCrate) pname version;
doCheck = false;
});
# TODO: should parse .cargo/audit.toml
ignoreAdvisories = pkgs.lib.concatStrings
(pkgs.lib.strings.intersperse " " (map (x: "--ignore ${x}") [ ]));
checks = {
inherit kvsd;
clippy = craneLib.cargoClippy (commonArgs // {
inherit cargoArtifacts;
cargoClippyExtraArgs = "-- --deny warnings";
});
nextest = craneLib.cargoNextest (commonArgs // {
inherit cargoArtifacts;
cargoExtraArgs = "--no-capture";
});
audit = craneLib.cargoAudit {
inherit src advisory-db;
cargoAuditExtraArgs = "--ignore yanked ${ignoreAdvisories}";
};
fmt = craneLib.cargoFmt commonArgs;
};
ci_packages = with pkgs; [
just
nushell # just set nu as shell
typos
];
# Inherits from checks cargo-nextest, cargo-audit
dev_packages = with pkgs;
[ nixfmt git-cliff cargo-release oranda ] ++ ci_packages
## For cargo-release build
++ pkgs.lib.optionals pkgs.stdenv.isDarwin darwinDeps;
in {
inherit checks;
packages.default = self.packages."${system}".kvsd;
packages.kvsd = kvsd;
apps.default = flake-utils.lib.mkApp {
drv = kvsd;
name = "kvsd";
};
devShells.default = craneLib.devShell {
# Inherit inputs from checks
checks = self.checks.${system};
packages = dev_packages;
shellHook = ''
exec nu
'';
};
devShells.ci = craneLib.devShell { packages = ci_packages; };
});
nixConfig = {
extra-substituters = [ "https://kvsd.cachix.org" ];
extra-trusted-public-keys =
[ "kvsd.cachix.org-1:d4Vo1Qh1YC2H0kzCNapMJlP50J3JAydbP9cA+phQf/k=" ];
};
}