From 2414dd4b55b71b9096c22c6829e0ddc592832512 Mon Sep 17 00:00:00 2001 From: Daniel Barlow Date: Sat, 5 Aug 2023 14:16:54 +0100 Subject: [PATCH] convert ntp to serviceDefn --- examples/rotuer.nix | 2 +- modules/ntp/default.nix | 46 +++++++++++++++++++++++++++++++++-- modules/ntp/service.nix | 51 +++------------------------------------ vanilla-configuration.nix | 2 +- 4 files changed, 49 insertions(+), 52 deletions(-) diff --git a/examples/rotuer.nix b/examples/rotuer.nix index ac7576e..293546c 100644 --- 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 index 2a4e6b3..7c15dc0 100644 --- 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 index c8eba9f..9fe5a5a 100644 --- 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 index 29c5731..5c69908 100644 --- 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"] ; }; };