{ self, nixpkgs, system }: let inherit (self.lib) config; pkgs = nixpkgs.legacyPackages.${system}; export-config-file = builtins.toFile "config.nix" ( nixpkgs.lib.generators.toPretty {} config ); export-config = pkgs.runCommandLocal "config.nix" {} '' cp ${export-config-file} $out ''; salt-pillar-file = hostName: builtins.toFile "${hostName}.yaml" ( nixpkgs.lib.generators.toPretty {} (self.lib.saltPillarFor hostName) ); salt-pillars = builtins.foldl' (result: hostName: result // { "${hostName}-pillar" = pkgs.runCommandLocal "${hostName}-pillar.nix" {} '' cp ${salt-pillar-file hostName} $out ''; }) {} ( builtins.filter (hostName: builtins.elem config.site.hosts.${hostName}.role [ "server" "container" ] ) (builtins.attrNames config.site.hosts) ); mkRootfs = hostName: self.nixosConfigurations.${hostName}.config.system.build.toplevel; rootfs-packages = builtins.foldl' (rootfs: hostName: rootfs // { "${hostName}-rootfs" = mkRootfs hostName; }) {} ( builtins.attrNames ( nixpkgs.lib.filterAttrs (_: { role, ... }: builtins.elem role ["server" "container"]) config.site.hosts ) ); vm-packages = builtins.foldl' (rootfs: hostName: rootfs // { "${hostName}-vm" = self.nixosConfigurations.${hostName}.config.system.build.vm .overrideAttrs (oa: { meta.mainProgram = "run-${hostName}-vm"; }); }) {} ( builtins.attrNames ( nixpkgs.lib.filterAttrs (_: { role, ... }: role == "server") config.site.hosts ) ); device-templates = import ./device-templates.nix { inherit self nixpkgs system; }; dns-slaves = import ./dns-slaves.nix { inherit self nixpkgs system; }; in salt-pillars // rootfs-packages // vm-packages // device-templates // { inherit export-config dns-slaves; }