{ config, lib, ... }: let cfg = config.router; dhcpLans = lib.filter (l: l.dhcp.enable) (lib.attrValues cfg.lans); in { config = lib.mkIf (cfg.enable && dhcpLans != [ ]) { services.kea.dhcp4 = { enable = true; settings = { interfaces-config = { interfaces = map (l: l.interface) dhcpLans; # Interfaces are configured asynchronously by networkd. re-detect = true; }; lease-database = { type = "memfile"; persist = true; name = "/var/lib/kea/dhcp4.leases"; }; valid-lifetime = 3600; subnet4 = lib.imap1 (id: l: { inherit id; inherit (l.ipv4) subnet; interface = l.interface; pools = [ { pool = "${l.dhcp.pool.start} - ${l.dhcp.pool.end}"; } ]; option-data = [ { name = "routers"; data = l.ipv4.address; } { name = "domain-name-servers"; data = l.ipv4.address; } ]; }) dhcpLans; }; }; }; }