Highlights - No need to update flake for every machine anymore, just add a properties.nix file. - Roles are automatically generated from all machine configurations. - Roles and their secrets automatically are grouped and show up in agenix secrets.nix - Machines and their service configs may now query the properties of all machines. - Machine configuration and secrets are now competely isolated into each machine's directory. - Safety checks to ensure no mixing of luks unlocking secrets and hosts with primary ones. - SSH pubkeys no longer centrally stored but instead per machine where the private key lies for better cleanup.
20 lines
424 B
Nix
20 lines
424 B
Nix
{ config, lib, ... }:
|
|
|
|
# Maps roles to their hosts
|
|
|
|
{
|
|
options.machines.roles = lib.mkOption {
|
|
type = lib.types.attrsOf (lib.types.listOf lib.types.str);
|
|
};
|
|
|
|
config = {
|
|
machines.roles = lib.zipAttrs
|
|
(lib.mapAttrsToList
|
|
(host: cfg:
|
|
lib.foldl (lib.mergeAttrs) { }
|
|
(builtins.map (role: { ${role} = host; })
|
|
cfg.systemRoles))
|
|
config.machines.hosts);
|
|
};
|
|
}
|