{pkgs, config}: let cfg = config.services.dhcpd; stateDir = "/var/lib/dhcp"; # Don't use /var/state/dhcp; not FHS-compliant. machines = pkgs.lib.concatStrings (map (machine: " host ${machine.hostName} { hardware ethernet ${machine.ethernetAddress}; fixed-address ${machine.ipAddress}; } ") cfg.machines); configFile = if cfg.configFile != null then cfg.configFile else pkgs.writeText "dhcpd.conf" " default-lease-time 600; max-lease-time 7200; authoritative; ddns-update-style ad-hoc; ${cfg.extraConfig} ${machines} "; in { name = "dhcpd"; job = " description \"DHCP server\" start on network-interfaces/started stop on network-interfaces/stop script mkdir -m 755 -p ${stateDir} touch ${stateDir}/dhcpd.leases exec ${pkgs.dhcp}/sbin/dhcpd -f -cf ${configFile} \\ -lf ${stateDir}/dhcpd.leases \\ ${toString cfg.interfaces} end script "; }