39 lines
1.1 KiB
Nix
39 lines
1.1 KiB
Nix
|
{ hostName, config, lib, ... }:
|
||
|
|
||
|
let
|
||
|
dhcpNets =
|
||
|
lib.filterAttrs (_: { dhcp, ... }:
|
||
|
dhcp != null &&
|
||
|
dhcp.server == hostName
|
||
|
) config.site.net;
|
||
|
|
||
|
enabled = builtins.length (builtins.attrNames dhcpNets) > 0;
|
||
|
in
|
||
|
{
|
||
|
services.dhcpd4 = lib.optionalAttrs enabled {
|
||
|
enable = true;
|
||
|
|
||
|
interfaces = builtins.attrNames dhcpNets;
|
||
|
|
||
|
extraConfig = ''
|
||
|
option domain-name-servers 172.20.73.8, 9.9.9.9;
|
||
|
${builtins.concatStringsSep "\n" (
|
||
|
builtins.attrValues (
|
||
|
builtins.mapAttrs (net: { dhcp, subnet4Net, subnet4Len, ...}:
|
||
|
''
|
||
|
subnet ${subnet4Net} netmask ${lib.netmasks.${toString subnet4Len}} {
|
||
|
range ${dhcp.start} ${dhcp.end};
|
||
|
default-lease-time ${toString dhcp.time};
|
||
|
max-lease-time ${toString dhcp.max-time};
|
||
|
option routers ${config.site.net.${net}.hosts4.${builtins.replaceStrings [".${net}"] [""] dhcp.router}};
|
||
|
option domain-name "${dhcp.domainName}";
|
||
|
}
|
||
|
''
|
||
|
) dhcpNets
|
||
|
)
|
||
|
)}
|
||
|
'';
|
||
|
# TODO: fixed-hosts
|
||
|
};
|
||
|
}
|