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