tailwindcss-language-server: 0.0.27 -> 0.14.1 (#377703)
[NixPkgs.git] / nixos / modules / services / networking / ntp / openntpd.nix
blobc4ad630826b5c1f9adb61d13aeeef939d8df8f43
2   pkgs,
3   lib,
4   config,
5   options,
6   ...
7 }:
9 with lib;
11 let
12   cfg = config.services.openntpd;
14   package = pkgs.openntpd_nixos;
16   configFile = ''
17     ${concatStringsSep "\n" (map (s: "server ${s}") cfg.servers)}
18     ${cfg.extraConfig}
19   '';
21   pidFile = "/run/openntpd.pid";
25   ###### interface
27   options.services.openntpd = {
28     enable = mkEnableOption "OpenNTP time synchronization server";
30     servers = mkOption {
31       default = config.services.ntp.servers;
32       defaultText = literalExpression "config.services.ntp.servers";
33       type = types.listOf types.str;
34       inherit (options.services.ntp.servers) description;
35     };
37     extraConfig = mkOption {
38       type = with types; lines;
39       default = "";
40       example = ''
41         listen on 127.0.0.1
42         listen on ::1
43       '';
44       description = ''
45         Additional text appended to {file}`openntpd.conf`.
46       '';
47     };
49     extraOptions = mkOption {
50       type = with types; separatedString " ";
51       default = "";
52       example = "-s";
53       description = ''
54         Extra options used when launching openntpd.
55       '';
56     };
57   };
59   ###### implementation
61   config = mkIf cfg.enable {
62     meta.maintainers = with lib.maintainers; [ thoughtpolice ];
63     services.timesyncd.enable = mkForce false;
65     # Add ntpctl to the environment for status checking
66     environment.systemPackages = [ package ];
68     environment.etc."ntpd.conf".text = configFile;
70     users.users.ntp = {
71       isSystemUser = true;
72       group = "ntp";
73       description = "OpenNTP daemon user";
74       home = "/var/empty";
75     };
76     users.groups.ntp = { };
78     systemd.services.openntpd = {
79       description = "OpenNTP Server";
80       wantedBy = [ "multi-user.target" ];
81       wants = [
82         "network-online.target"
83         "time-sync.target"
84       ];
85       before = [ "time-sync.target" ];
86       after = [
87         "dnsmasq.service"
88         "bind.service"
89         "network-online.target"
90       ];
91       serviceConfig = {
92         ExecStart = "${package}/sbin/ntpd -p ${pidFile} ${cfg.extraOptions}";
93         Type = "forking";
94         PIDFile = pidFile;
95       };
96     };
97   };