2021-10-11 04:41:31 +00:00
|
|
|
{ path, nixpkgs, nixosModule }:
|
2021-06-05 06:22:38 +00:00
|
|
|
let
|
|
|
|
|
2021-10-28 19:01:50 +00:00
|
|
|
inherit (builtins) mapAttrs attrValues attrNames readDir foldl' listToAttrs;
|
2021-06-05 06:22:38 +00:00
|
|
|
|
2021-10-28 19:01:50 +00:00
|
|
|
# grab a list of systems, with associated hostnames
|
|
|
|
# { x86_64-linux = [ "host1" "host2" ]; }
|
|
|
|
sysToHosts = mapAttrs
|
2021-10-28 20:24:50 +00:00
|
|
|
(system: _: attrNames (readDir (path + "/${system}")))
|
2021-10-28 19:01:50 +00:00
|
|
|
(readDir path);
|
|
|
|
|
|
|
|
# invert the attrset, from {sys=[name]} to {name=sys}
|
|
|
|
# { host1 = "x86_64-linux"; host2 = "x86_64-linux"; }
|
|
|
|
hostToSys = foldl' (a: b: a // b) { }
|
|
|
|
(attrValues
|
|
|
|
(mapAttrs
|
|
|
|
(system: hosts: listToAttrs (map (name: { inherit name; value = system; }) hosts))
|
|
|
|
sysToHosts));
|
|
|
|
|
|
|
|
# build system configurations
|
|
|
|
# { host1 = <nixosConfiguration>; host2 = <nixosConfiguration>; }
|
|
|
|
hostToConfig = mapAttrs
|
|
|
|
(hostName: system: nixpkgs.lib.nixosSystem {
|
|
|
|
inherit system;
|
|
|
|
modules = [
|
|
|
|
(nixosModule)
|
2021-10-28 20:24:50 +00:00
|
|
|
(path + "/${system}/${hostName}")
|
2021-10-28 19:01:50 +00:00
|
|
|
(_: { networking.hostName = hostName; })
|
|
|
|
];
|
|
|
|
})
|
|
|
|
hostToSys;
|
2021-06-05 06:22:38 +00:00
|
|
|
|
|
|
|
in
|
2021-10-28 19:01:50 +00:00
|
|
|
hostToConfig
|