{ pkgs, config, lib, ... }: let service = "dnsmasq"; cfg = config.homelab.${service}; in { options.homelab.${service} = { enable = lib.mkEnableOption "enables ${service}"; port = lib.mkOption { type = lib.types.int; default = 53; description = "set port for ${service} (default: ${toString cfg.port}"; }; upstream = lib.mkOption { type = lib.types.str; default = "10.10.0.1"; description = "set upstream dns server for ${service} (default: $cfg.upstream}"; }; motd = lib.mkOption { type = lib.types.nullOr lib.types.str; default = service; }; }; config = lib.mkIf cfg.enable { # enable the ${service} service services.${service} = { enable = true; alwaysKeepRunning = true; settings = { no-resolv = true; listen-address = config.homelab.host_ip; # your LAN IP #interface = "enp89s0"; bind-interfaces = true; # address = [ # "/snowbelle.blakedheld.xyz/10.10.0.10" # "/lumiose.blakedheld.xyz/10.10.0.10" # "/bebe.blakedheld.xyz/10.10.0.1" # ]; server = [ # upstream dns cfg.upstream ]; }; }; systemd.services.dnsmasq.serviceConfig = { RestartSec = "5s"; StartLimitBurst = 10; }; # open firewall networking.firewall.allowedTCPPorts = [cfg.port]; networking.firewall.allowedUDPPorts = [cfg.port]; }; }