Add external host support

This commit is contained in:
SebastianStork 2026-02-08 20:55:46 +01:00
parent f93908d157
commit 28e704ceff
Signed by: SebastianStork
SSH key fingerprint: SHA256:tRrGdjYOwgHxpSc/wTOZQZEjxcb15P0tyXRsbAfd+2Q
11 changed files with 31 additions and 21 deletions

View file

@ -6,21 +6,31 @@
}:
let
mkHost =
hostName:
hostDir:
inputs.nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs self; };
modules =
(lib.singleton { networking = { inherit hostName; }; })
(lib.singleton { networking.hostName = lib.baseNameOf hostDir; })
++ (
"${self}/hosts/${hostName}"
hostDir
|> builtins.readDir
|> lib.attrNames
|> lib.filter (file: file |> lib.hasSuffix ".nix")
|> lib.map (file: "${self}/hosts/${hostName}/${file}")
|> lib.filter (lib.hasSuffix ".nix")
|> lib.map (file: "${hostDir}/${file}")
);
};
mkHosts =
baseDir:
baseDir
|> builtins.readDir
|> lib.filterAttrs (_: type: type == "directory")
|> lib.mapAttrs (hostName: _: mkHost "${baseDir}/${hostName}");
in
{
flake.nixosConfigurations =
"${self}/hosts" |> self.lib.listDirectoryNames |> self.lib.genAttrs mkHost;
flake = {
nixosConfigurations = mkHosts "${self}/hosts";
externalConfigurations = mkHosts "${self}/external-hosts";
allHosts = self.nixosConfigurations // self.externalConfigurations;
};
}

View file

@ -18,14 +18,14 @@
};
hostCreationRules =
self.nixosConfigurations
self.allHosts
|> lib.attrValues
|> lib.map (host: host.config.custom.sops)
|> lib.filter (sops: sops.enable)
|> lib.map mkCreationRule;
userCreationRules =
self.nixosConfigurations
self.allHosts
|> lib.attrValues
|> lib.filter (host: host.config |> lib.hasAttr "home-manager")
|> lib.map (host: host.config.home-manager.users.seb.custom.sops)

View file

@ -16,7 +16,7 @@ repair:
nix-store --verify --check-contents --repair
repl host='$(hostname)':
nix repl .#nixosConfigurations.{{ host }}
nix repl .#allHosts.{{ host }}
[group('rebuild')]
rebuild mode:

View file

@ -18,7 +18,7 @@ in
nodes = lib.mkOption {
type = lib.types.anything;
default =
self.nixosConfigurations
self.allHosts
|> lib.attrValues
|> lib.map (host: host.config.custom.networking)
|> lib.map (

View file

@ -57,7 +57,7 @@ in
dnsServers = lib.mkOption {
type = lib.types.anything;
default =
self.nixosConfigurations
self.allHosts
|> lib.attrValues
|> lib.filter (host: host.config.custom.services.dns.enable)
|> lib.map (host: host.config.custom.networking.overlay.address);

View file

@ -27,7 +27,7 @@ in
netCfg.nodes
|> lib.map (node: "\"${node.hostName}.${node.overlay.domain}. A ${node.overlay.address}\"");
serviceRecords =
self.nixosConfigurations
self.allHosts
|> lib.attrValues
|> lib.concatMap (
host:

View file

@ -41,7 +41,7 @@ in
};
users.users.seb.openssh.authorizedKeys.keyFiles =
self.nixosConfigurations
self.allHosts
|> lib.attrValues
|> lib.filter (host: host.config.networking.hostName != netCfg.hostName)
|> lib.filter (host: host.config |> lib.hasAttr "home-manager")

View file

@ -87,7 +87,7 @@ in
settings =
let
hosts =
self.nixosConfigurations
self.allHosts
|> lib.filterAttrs (_: host: host.config.networking.hostName != config.networking.hostName)
|> lib.filterAttrs (_: host: host.config.custom.services.syncthing.enable);
in

View file

@ -173,7 +173,7 @@ in
web-services.gatus.endpoints =
let
defaultEndpoints =
self.nixosConfigurations
self.allHosts
|> lib.mapAttrs (
_: host:
host.config.custom.services.caddy.virtualHosts |> lib.attrValues |> lib.map (vHost: vHost.domain)

View file

@ -9,7 +9,7 @@ pkgs.writeShellApplication {
];
text = ''
hosts="$(nix eval .#nixosConfigurations --apply 'builtins.attrNames' --json | jq -r '.[]')"
hosts="$(nix eval .#allHosts --apply 'builtins.attrNames' --json | jq -r '.[]')"
if ! declare -px BW_SESSION >/dev/null 2>&1; then
BW_SESSION="$(bw unlock --raw || bw login --raw)"

View file

@ -14,11 +14,11 @@ pkgs.writeShellApplication {
fi
host="$1"
address="$(nix eval --raw ".#nixosConfigurations.$host.config.custom.networking.overlay.cidr")"
groups="$(nix eval --raw ".#nixosConfigurations.$host.config.custom.services.nebula.groups" --apply 'builtins.concatStringsSep ","')"
address="$(nix eval --raw ".#allHosts.$host.config.custom.networking.overlay.cidr")"
groups="$(nix eval --raw ".#allHosts.$host.config.custom.services.nebula.groups" --apply 'builtins.concatStringsSep ","')"
ca_cert='modules/system/services/nebula/ca.crt'
host_pub="$(nix eval --raw ".#nixosConfigurations.$host.config.custom.services.nebula.publicKeyPath")"
host_cert="$(nix eval --raw ".#nixosConfigurations.$host.config.custom.services.nebula.certificatePath")"
host_pub="$(nix eval --raw ".#allHosts.$host.config.custom.services.nebula.publicKeyPath")"
host_cert="$(nix eval --raw ".#allHosts.$host.config.custom.services.nebula.certificatePath")"
host_cert="''${host_cert#*-source/}"
if [[ $# -eq 2 ]]; then