{
description = "knot-static: read-only static Tangled knot (nginx + immutable files)";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, fenix, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
rustPlatform = pkgs.makeRustPlatform {
inherit (fenix.packages.${system}.stable) rustc cargo;
};
in
{
packages.knot-static = rustPlatform.buildRustPackage {
pname = "knot-static";
version = "2.0.0";
src = pkgs.lib.fileset.toSource {
root = ./.;
fileset = pkgs.lib.fileset.unions [
./Cargo.toml
./Cargo.lock
./knot-static.toml.example
./src
./vendor
./benches
./tests
];
};
cargoLock = {
lockFile = ./Cargo.lock;
allowBuiltinFetchGit = true;
};
nativeBuildInputs = [ pkgs.cmake pkgs.perl pkgs.pkg-config ];
doCheck = false;
meta.mainProgram = "knot-static";
};
packages.knot-static-firehose = rustPlatform.buildRustPackage {
pname = "knot-static-firehose";
version = "2.0.0";
src = ./firehose;
cargoLock = {
lockFile = ./firehose/Cargo.lock;
};
doCheck = false;
meta.mainProgram = "knot-static-firehose";
};
packages.default = self.packages.${system}.knot-static;
# every unit that can activate runs the reload command and git from its own PATH
checks = pkgs.lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux {
module-units-can-activate =
let
nixos = nixpkgs.lib.nixosSystem {
inherit system;
modules = [
self.nixosModules.knot-static
{
services.knot-static = {
enable = true;
hostname = "knot.test";
owner = "did:plc:owner";
};
boot.loader.grub.enable = false;
fileSystems."/" = {
device = "none";
fsType = "tmpfs";
};
system.stateVersion = "25.11";
}
];
};
conf = nixos.config.environment.etc."knot-static/config.toml".source;
units = [ "knot-static-cgi" "knot-static-drain" "knot-static-prepare" ];
check = unit: ''
echo "checking ${unit}"
env -i PATH='${nixos.config.systemd.services.${unit}.environment.PATH}' sh -c 'command -v git' >/dev/null
env -i PATH='${nixos.config.systemd.services.${unit}.environment.PATH}' sh -c "$reload"
'';
in
pkgs.runCommand "knot-static-module-units-can-activate" { nativeBuildInputs = [ pkgs.python3 ]; } ''
reload=$(python3 -c 'import sys, tomllib; print(tomllib.load(open(sys.argv[1], "rb"))["activate"]["reload_command"])' ${conf})
${pkgs.lib.concatMapStrings check units}
touch $out
'';
};
devShells.default = pkgs.mkShell {
packages = [ (fenix.packages.${system}.stable.toolchain) pkgs.cmake pkgs.perl pkgs.pkg-config pkgs.gitoxide pkgs.cargo-nextest ];
};
})
// {
nixosModules.knot-static = import ./nix/module.nix self;
nixosModules.default = self.nixosModules.knot-static;
};
}