61 lines
1.6 KiB
Nix
61 lines
1.6 KiB
Nix
{
|
|
nixosUsers ? { },
|
|
nixosGroups ? { },
|
|
nixosModules,
|
|
hmModules ? {
|
|
default = { };
|
|
},
|
|
...
|
|
}@flake:
|
|
{ ... }@inputs:
|
|
{ host, ... }@imports:
|
|
let
|
|
pre-switch-check =
|
|
{ pkgs, lib, config, ... }:
|
|
{
|
|
config.system.preSwitchChecks.nvd = ''
|
|
${lib.getExe pkgs.nvd} --nix-bin-dir ${config.nix.package}/bin diff /run/current-system "''${1}"
|
|
if [[ -t 0 ]]; then
|
|
printf 'really %s to %s? [y]es/[N]o ' "''${2}" "''${1}"
|
|
read -r nvd_check
|
|
else
|
|
nvd_check=y
|
|
fi
|
|
[[ "''${nvd_check}" == y ]]
|
|
'';
|
|
};
|
|
|
|
system =
|
|
hostname:
|
|
{
|
|
namespace ? "fbs42",
|
|
nixpkgs ? "nixpkgs",
|
|
}:
|
|
inputs.${nixpkgs}.lib.nixosSystem {
|
|
specialArgs = { inherit inputs flake namespace; };
|
|
modules =
|
|
builtins.concatLists (
|
|
map (
|
|
base: builtins.attrValues (flake.lib.scan { base = "${base}/host/${hostname}"; })
|
|
) flake.lib.schema.base
|
|
)
|
|
++ [ pre-switch-check ]
|
|
++ [ { config.networking.hostName = hostname; } ]
|
|
++ [ nixosModules.default ]
|
|
++ inputs.${nixpkgs}.lib.optional (inputs ? home-manager) {
|
|
imports = [ inputs.home-manager.nixosModules.default ];
|
|
config.home-manager = {
|
|
sharedModules = [ hmModules.default ];
|
|
extraSpecialArgs = { inherit flake namespace; };
|
|
};
|
|
}
|
|
++ builtins.attrValues nixosUsers
|
|
++ builtins.attrValues nixosGroups;
|
|
};
|
|
|
|
in
|
|
builtins.mapAttrs (
|
|
name: value:
|
|
assert builtins.length value == 1;
|
|
system name (builtins.head value)
|
|
) host
|