uvms/profiles/debug-closure.nix
Else, Someone 28d3f89ad4 pkgs.writeErofsLayers,profiles/ch-runner: MVE
$ nix-build -A examples.dummy.config.debug.closure.erofs.list | xargs
cat | xargs du -h
749M    /nix/store/bzfv5x6lycq6hzhjv6d6vlk1q8fdg9di-base0.erofs
24M     /nix/store/hp41jfq36y0mmjrzqilyh3jfsvqic3kb-nixos.erofs

$ nix run -f . examples.dummy.config.uvms.cloud-hypervisor.runner
...
<<< Welcome to NixOS 25.11pre-git (x86_64) - ttyS0 >>>

nixos login:

The definition of the `pkgs` fixpoint was moved to pkgs/default.nix.
For that, dirToAttrs was moved to lib/, imported ad hoc
2025-09-21 00:57:11 +03:00

85 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;
};
};
}