Merge #361424: refactor lib.packagesFromDirectoryRecursive (v2)
[NixPkgs.git] / nixos / modules / services / networking / pdnsd.nix
blobcda55cc2a7e8b1c021e514ae38cd9c2c4e9d8fe8
2   config,
3   pkgs,
4   lib,
5   ...
6 }:
8 with lib;
10 let
11   cfg = config.services.pdnsd;
12   pdnsd = pkgs.pdnsd;
13   pdnsdUser = "pdnsd";
14   pdnsdGroup = "pdnsd";
15   pdnsdConf = pkgs.writeText "pdnsd.conf" ''
16     global {
17       run_as=${pdnsdUser};
18       cache_dir="${cfg.cacheDir}";
19       ${cfg.globalConfig}
20     }
22     server {
23       ${cfg.serverConfig}
24     }
25     ${cfg.extraConfig}
26   '';
30   options = {
31     services.pdnsd = {
32       enable = mkEnableOption "pdnsd";
34       cacheDir = mkOption {
35         type = types.str;
36         default = "/var/cache/pdnsd";
37         description = "Directory holding the pdnsd cache";
38       };
40       globalConfig = mkOption {
41         type = types.lines;
42         default = "";
43         description = ''
44           Global configuration that should be added to the global directory
45           of `pdnsd.conf`.
46         '';
47       };
49       serverConfig = mkOption {
50         type = types.lines;
51         default = "";
52         description = ''
53           Server configuration that should be added to the server directory
54           of `pdnsd.conf`.
55         '';
56       };
58       extraConfig = mkOption {
59         type = types.lines;
60         default = "";
61         description = ''
62           Extra configuration directives that should be added to
63           `pdnsd.conf`.
64         '';
65       };
66     };
67   };
69   config = mkIf cfg.enable {
70     users.users.${pdnsdUser} = {
71       uid = config.ids.uids.pdnsd;
72       group = pdnsdGroup;
73       description = "pdnsd user";
74     };
76     users.groups.${pdnsdGroup} = {
77       gid = config.ids.gids.pdnsd;
78     };
80     systemd.services.pdnsd = {
81       wantedBy = [ "multi-user.target" ];
82       after = [ "network.target" ];
83       preStart = ''
84         mkdir -p "${cfg.cacheDir}"
85         touch "${cfg.cacheDir}/pdnsd.cache"
86         chown -R ${pdnsdUser}:${pdnsdGroup} "${cfg.cacheDir}"
87       '';
88       description = "pdnsd";
89       serviceConfig = {
90         ExecStart = "${pdnsd}/bin/pdnsd -c ${pdnsdConf}";
91       };
92     };
93   };