flake: { config, options, lib, pkgs, ...}: let cfg = config.services.qddns-server; pkg = flake.defaultPackage.${pkgs.system}; in { options.services.qddns-server = with lib; { enable = mkEnableOption "QDDNS"; db = mkOption { default = "postgresql:///pdns"; type = types.str; description = "Connection string for PDNS backend database"; }; sockUser = mkOption { default = cfg.user; type = types.str; description = "The desired owner of the listen socket"; }; user = mkOption { default = "qddns"; type = types.str; description = "The user to run QDDNS as"; }; group = mkOption { default = "qddns"; description = "The group to run QDDNS as"; type = types.str; }; }; config = lib.mkIf cfg.enable { systemd.sockets.qddns-server = { enable = true; listenStreams = [ "/run/qddns.sock" ]; wantedBy = [ "multi-user.target" ]; socketConfig = { SocketUser = cfg.sockUser; }; }; systemd.services.qddns-server = { enable = true; environment.QDDNS_SERVER = cfg.db; serviceConfig = { ExecStart = [ "${pkg}/bin/qddns-server" ]; DynamicUser="yes"; User = cfg.user; Group = cfg.group; }; }; }; }