base/export/nixosConfigurations.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