vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / networking / pdnsd.nix
blob50b9b9d2028918d6098a895b19488a1eed1ee0f6
1 { config, pkgs, lib, ... }:
3 with lib;
5 let
6   cfg = config.services.pdnsd;
7   pdnsd = pkgs.pdnsd;
8   pdnsdUser = "pdnsd";
9   pdnsdGroup = "pdnsd";
10   pdnsdConf = pkgs.writeText "pdnsd.conf"
11     ''
12       global {
13         run_as=${pdnsdUser};
14         cache_dir="${cfg.cacheDir}";
15         ${cfg.globalConfig}
16       }
18       server {
19         ${cfg.serverConfig}
20       }
21       ${cfg.extraConfig}
22     '';
25 { options =
26     { services.pdnsd =
27         { enable = mkEnableOption "pdnsd";
29           cacheDir = mkOption {
30             type = types.str;
31             default = "/var/cache/pdnsd";
32             description = "Directory holding the pdnsd cache";
33           };
35           globalConfig = mkOption {
36             type = types.lines;
37             default = "";
38             description = ''
39               Global configuration that should be added to the global directory
40               of `pdnsd.conf`.
41             '';
42           };
44           serverConfig = mkOption {
45             type = types.lines;
46             default = "";
47             description = ''
48               Server configuration that should be added to the server directory
49               of `pdnsd.conf`.
50             '';
51           };
53           extraConfig = mkOption {
54             type = types.lines;
55             default = "";
56             description = ''
57               Extra configuration directives that should be added to
58               `pdnsd.conf`.
59             '';
60           };
61         };
62     };
64   config = mkIf cfg.enable {
65     users.users.${pdnsdUser} = {
66       uid = config.ids.uids.pdnsd;
67       group = pdnsdGroup;
68       description = "pdnsd user";
69     };
71     users.groups.${pdnsdGroup} = {
72       gid = config.ids.gids.pdnsd;
73     };
75     systemd.services.pdnsd =
76       { wantedBy = [ "multi-user.target" ];
77         after = [ "network.target" ];
78         preStart =
79           ''
80             mkdir -p "${cfg.cacheDir}"
81             touch "${cfg.cacheDir}/pdnsd.cache"
82             chown -R ${pdnsdUser}:${pdnsdGroup} "${cfg.cacheDir}"
83           '';
84         description = "pdnsd";
85         serviceConfig =
86           {
87             ExecStart = "${pdnsd}/bin/pdnsd -c ${pdnsdConf}";
88           };
89       };
90   };