forked from DGNum/liminix
69 lines
1.9 KiB
Nix
69 lines
1.9 KiB
Nix
## NTP
|
|
## ===
|
|
##
|
|
## A network time protocol implementation so that your Liminix device
|
|
## may synchronize its clock with an accurate time source, and
|
|
## optionally also provide time service to its peers. The
|
|
## implementation used in Liminix is Chrony
|
|
|
|
{ lib, pkgs, config, ...}:
|
|
let
|
|
inherit (lib) mkOption types;
|
|
inherit (pkgs) liminix;
|
|
serverOpts = types.listOf types.str;
|
|
in {
|
|
options = {
|
|
system.service.ntp = mkOption {
|
|
type = liminix.lib.types.serviceDefn;
|
|
};
|
|
};
|
|
config = {
|
|
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";
|
|
shell = "/bin/false";
|
|
};
|
|
# groups.system.usernames = ["ntp"];
|
|
};
|
|
}
|