86 lines
2.2 KiB
Nix
86 lines
2.2 KiB
Nix
![]() |
{
|
||
|
config,
|
||
|
lib,
|
||
|
pkgs,
|
||
|
modulesPath,
|
||
|
...
|
||
|
}:
|
||
|
|
||
|
let
|
||
|
cfg = config.debug.closure;
|
||
|
inherit (lib.types) package;
|
||
|
inherit (config.system.build) toplevel;
|
||
|
|
||
|
ps = pkgs.callPackage ../pkgs { };
|
||
|
inherit (ps) writeErofsLayers;
|
||
|
emptySystem = import (pkgs.path + "/nixos/lib/eval-config.nix") {
|
||
|
modules = [
|
||
|
(modulesPath + "/profiles/minimal.nix")
|
||
|
{
|
||
|
system.stateVersion = config.system.stateVersion;
|
||
|
fileSystems."/".fsType = "tmpfs";
|
||
|
boot.loader.grub.enable = false;
|
||
|
networking.hostName = "base";
|
||
|
networking.nftables.enable = true;
|
||
|
networking.useNetworkd = true;
|
||
|
systemd.network.enable = true;
|
||
|
}
|
||
|
];
|
||
|
};
|
||
|
in
|
||
|
{
|
||
|
options.debug.closure = {
|
||
|
info = lib.mkOption {
|
||
|
type = package;
|
||
|
description = "closureInfo { rootPaths = [ toplevel ]; }";
|
||
|
};
|
||
|
write = lib.mkOption {
|
||
|
type = package;
|
||
|
description = "writeClosure [ toplevel ]";
|
||
|
};
|
||
|
extraLayers = lib.mkOption {
|
||
|
type = lib.types.listOf package;
|
||
|
description = "Roots from which to generate `erofs.layers`";
|
||
|
defaultText = ''
|
||
|
[
|
||
|
(nixosSystem { modules = [ ]; }).config.system.build.toplevel
|
||
|
# implicitly appended: config.system.build.toplevel
|
||
|
]
|
||
|
'';
|
||
|
};
|
||
|
erofs.layers = lib.mkOption {
|
||
|
type = lib.types.listOf package;
|
||
|
description = "writeErofs [ ... ]";
|
||
|
readOnly = true;
|
||
|
};
|
||
|
erofs.list = lib.mkOption {
|
||
|
type = package;
|
||
|
description = "writeClosure [ (writeErofs [ ... ])... ]";
|
||
|
};
|
||
|
};
|
||
|
config.debug.closure = {
|
||
|
info = pkgs.closureInfo { rootPaths = [ toplevel ]; };
|
||
|
write = pkgs.writeClosure [ toplevel ];
|
||
|
|
||
|
erofs.list =
|
||
|
pkgs.runCommand "layers"
|
||
|
{
|
||
|
__structuredAttrs = true;
|
||
|
inherit (cfg.erofs) layers;
|
||
|
}
|
||
|
''
|
||
|
printf "%s\n" "''${layers[@]}" > "$out"
|
||
|
'';
|
||
|
extraLayers = lib.mkMerge [
|
||
|
(lib.mkBefore [ emptySystem.config.system.build.toplevel ])
|
||
|
# (lib.mkAfter [config.system.build.toplevel])
|
||
|
];
|
||
|
erofs.layers = writeErofsLayers {
|
||
|
layers = cfg.extraLayers ++ [
|
||
|
toplevel
|
||
|
];
|
||
|
labelUpper = config.networking.hostName;
|
||
|
};
|
||
|
};
|
||
|
}
|