commit 2414dd4b55b71b9096c22c6829e0ddc592832512
parent 93e04bb8349cb936259eb7a8d9baf62e7977841b
Author: Daniel Barlow <dan@telent.net>
Date: Sat, 5 Aug 2023 14:16:54 +0100
convert ntp to serviceDefn
Diffstat:
4 files changed, 49 insertions(+), 52 deletions(-)
diff --git a/examples/rotuer.nix b/examples/rotuer.nix
@@ -90,7 +90,7 @@ in rec {
];
};
- services.ntp = svc.ntp {
+ services.ntp = svc.ntp.build {
pools = { "pool.ntp.org" = ["iburst"]; };
makestep = { threshold = 1.0; limit = 3; };
};
diff --git a/modules/ntp/default.nix b/modules/ntp/default.nix
@@ -1,14 +1,56 @@
{ lib, pkgs, config, ...}:
let
inherit (lib) mkOption types;
+ inherit (pkgs) liminix;
+ serverOpts = types.listOf types.str;
in {
options = {
system.service.ntp = mkOption {
- type = types.functionTo types.package;
+ type = liminix.lib.types.serviceDefn;
};
};
config = {
- system.service.ntp = pkgs.callPackage ./service.nix {};
+ system.service.ntp = liminix.callService ./service.nix {
+ user = mkOption {
+ type = types.str;
+ default = "ntp";
+ };
+ servers = mkOption { type = types.attrsOf serverOpts; default = {}; };
+ pools = mkOption { type = types.attrsOf serverOpts; default = {}; };
+ peers = mkOption { type = types.attrsOf serverOpts; default = {}; };
+ makestep = mkOption {
+ default = null;
+ type = types.nullOr
+ (types.submodule {
+ options = {
+ threshold = mkOption { type = types.number; default = null;};
+ limit = mkOption { type = types.number; };
+ };
+ });
+ };
+ allow = mkOption {
+ description = "subnets from which NTP clients are allowed to access the server";
+ type = types.listOf types.str;
+ default = [];
+ };
+ bindaddress = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ };
+ binddevice = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ };
+ dumpdir = mkOption {
+ internal = true;
+ type = types.path;
+ default = "/run/chrony";
+ };
+ extraConfig = mkOption {
+ type = types.lines;
+ default = "";
+ };
+ };
users.ntp = {
uid = 52; gid= 52; gecos = "Unprivileged NTP user";
dir = "/run/ntp";
diff --git a/modules/ntp/service.nix b/modules/ntp/service.nix
@@ -5,6 +5,7 @@
, lib
, writeText
}:
+params:
let
inherit (liminix.services) longrun;
inherit (lib) concatStringsSep mapAttrsToList;
@@ -12,50 +13,7 @@ let
inherit (lib) mkOption types;
serverOpts = types.listOf types.str;
- t = {
- user = mkOption {
- type = types.str;
- default = "ntp";
- };
- servers = mkOption { type = types.attrsOf serverOpts; default = {}; };
- pools = mkOption { type = types.attrsOf serverOpts; default = {}; };
- peers = mkOption { type = types.attrsOf serverOpts; default = {}; };
- makestep = mkOption {
- default = null;
- type = types.nullOr
- (types.submodule {
- options = {
- threshold = mkOption { type = types.number; default = null;};
- limit = mkOption { type = types.number; };
- };
- });
- };
- allow = mkOption {
- description = "subnets from which NTP clients are allowed to access the server";
- type = types.listOf types.str;
- default = [];
- };
- bindaddress = mkOption {
- type = types.nullOr types.str;
- default = null;
- };
- binddevice = mkOption {
- type = types.nullOr types.str;
- default = null;
- };
- dumpdir = mkOption {
- internal = true;
- type = types.path;
- default = "/run/chrony";
- };
- extraConfig = mkOption {
- type = types.lines;
- default = "";
- };
- };
configFile = p:
- assert (builtins.trace p.makestep true);
-
(mapAttrsToList (name: opts: "server ${name} ${concatStringsSep "" opts}")
p.servers)
++
@@ -71,12 +29,9 @@ let
++ (lib.optional (p.binddevice != null) "binddevice ${p.binddevice}")
++ (lib.optional (p.dumpdir != null) "dumpdir ${p.dumpdir}")
++ [p.extraConfig];
-in
-params:
-let
+
config = writeText "chrony.conf"
- (concatStringsSep "\n"
- (configFile (typeChecked "" t params)));
+ (concatStringsSep "\n" (configFile params));
in longrun {
name = "ntp"; # bad name, needs to be unique
run = "${chrony}/bin/chronyd -f ${config} -d";
diff --git a/vanilla-configuration.nix b/vanilla-configuration.nix
@@ -37,7 +37,7 @@ in rec {
dependencies = [iface];
};
- services.ntp = config.system.service.ntp {
+ services.ntp = config.system.service.ntp.build {
pools = { "pool.ntp.org" = ["iburst"] ; };
};