normcap: fix on GNOME wayland when used via keybind or alt-f2 (#351763)
[NixPkgs.git] / nixos / modules / services / networking / powerdns.nix
blobed4ec232b8d191fa273166118df32dfc4f8daada
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
8 with lib;
10 let
11   cfg = config.services.powerdns;
12   configDir = pkgs.writeTextDir "pdns.conf" "${cfg.extraConfig}";
13   finalConfigDir = if cfg.secretFile == null then configDir else "/run/pdns";
16   options = {
17     services.powerdns = {
18       enable = mkEnableOption "PowerDNS domain name server";
20       extraConfig = mkOption {
21         type = types.lines;
22         default = "launch=bind";
23         description = ''
24           PowerDNS configuration. Refer to
25           <https://doc.powerdns.com/authoritative/settings.html>
26           for details on supported values.
27         '';
28       };
30       secretFile = mkOption {
31         type = types.nullOr types.path;
32         default = null;
33         example = "/run/keys/powerdns.env";
34         description = ''
35           Environment variables from this file will be interpolated into the
36           final config file using envsubst with this syntax: `$ENVIRONMENT`
37           or `''${VARIABLE}`.
38           The file should contain lines formatted as `SECRET_VAR=SECRET_VALUE`.
39           This is useful to avoid putting secrets into the nix store.
40         '';
41       };
42     };
43   };
45   config = mkIf cfg.enable {
47     environment.etc.pdns.source = finalConfigDir;
49     systemd.packages = [ pkgs.pdns ];
51     systemd.services.pdns = {
52       wantedBy = [ "multi-user.target" ];
53       after = [
54         "network.target"
55         "mysql.service"
56         "postgresql.service"
57         "openldap.service"
58       ];
60       serviceConfig = {
61         EnvironmentFile = lib.optional (cfg.secretFile != null) cfg.secretFile;
62         ExecStartPre = lib.optional (cfg.secretFile != null) (
63           pkgs.writeShellScript "pdns-pre-start" ''
64             umask 077
65             ${pkgs.envsubst}/bin/envsubst -i "${configDir}/pdns.conf" > ${finalConfigDir}/pdns.conf
66           ''
67         );
68         ExecStart = [
69           ""
70           "${pkgs.pdns}/bin/pdns_server --config-dir=${finalConfigDir} --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no"
71         ];
72       };
73     };
75     users.users.pdns = {
76       isSystemUser = true;
77       group = "pdns";
78       description = "PowerDNS";
79     };
81     users.groups.pdns = { };
83   };