vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / networking / ntp / ntpd-rs.nix
blob296c89c4c6f54db3d2bb9da9cf422232a1e6718a
1 { lib, config, pkgs, ... }:
3 let
4   cfg = config.services.ntpd-rs;
5   format = pkgs.formats.toml { };
6   configFile = format.generate "ntpd-rs.toml" cfg.settings;
7 in
9   options.services.ntpd-rs = {
10     enable = lib.mkEnableOption "Network Time Service (ntpd-rs)";
11     metrics.enable = lib.mkEnableOption "ntpd-rs Prometheus Metrics Exporter";
13     package = lib.mkPackageOption pkgs "ntpd-rs" { };
15     useNetworkingTimeServers = lib.mkOption {
16       type = lib.types.bool;
17       default = true;
18       description = ''
19         Use source time servers from {var}`networking.timeServers` in config.
20       '';
21     };
23     settings = lib.mkOption {
24       type = lib.types.submodule {
25         freeformType = format.type;
26       };
27       default = { };
28       description = ''
29         Settings to write to {file}`ntp.toml`
31         See <https://docs.ntpd-rs.pendulum-project.org/man/ntp.toml.5>
32         for more information about available options.
33       '';
34     };
35   };
37   config = lib.mkIf cfg.enable {
38     assertions = [
39       {
40         assertion = !config.services.timesyncd.enable;
41         message = ''
42           `ntpd-rs` is not compatible with `services.timesyncd`. Please disable one of them.
43         '';
44       }
45     ];
47     environment.systemPackages = [ cfg.package ];
48     systemd.packages = [ cfg.package ];
50     services.timesyncd.enable = false;
51     systemd.services.systemd-timedated.environment = {
52       SYSTEMD_TIMEDATED_NTP_SERVICES = "ntpd-rs.service";
53     };
55     services.ntpd-rs.settings = {
56       observability = {
57         observation-path = lib.mkDefault "/var/run/ntpd-rs/observe";
58       };
59       source = lib.mkIf cfg.useNetworkingTimeServers (map
60         (ts: {
61           mode = "server";
62           address = ts;
63         })
64         config.networking.timeServers);
65     };
67     systemd.services.ntpd-rs = {
68       wantedBy = [ "multi-user.target" ];
69       serviceConfig = {
70         User = "";
71         Group = "";
72         DynamicUser = true;
73         ExecStart = [ "" "${lib.makeBinPath [ cfg.package ]}/ntp-daemon --config=${configFile}" ];
74       };
75     };
77     systemd.services.ntpd-rs-metrics = lib.mkIf cfg.metrics.enable {
78       wantedBy = [ "multi-user.target" ];
79       serviceConfig = {
80         User = "";
81         Group = "";
82         DynamicUser = true;
83         ExecStart = [ "" "${lib.makeBinPath [ cfg.package ]}/ntp-metrics-exporter --config=${configFile}" ];
84       };
85     };
86   };
88   meta.maintainers = with lib.maintainers; [ fpletz ];