2023-03-26 19:24:38 +02:00
|
|
|
|
{
|
|
|
|
|
|
config,
|
|
|
|
|
|
lib,
|
|
|
|
|
|
pkgs,
|
|
|
|
|
|
...
|
2025-12-19 12:44:58 +01:00
|
|
|
|
}:
|
|
|
|
|
|
|
|
|
|
|
|
let
|
|
|
|
|
|
optionalAttr = name: value: if name != null then { ${name} = value; } else { };
|
|
|
|
|
|
|
|
|
|
|
|
cfg = config.services.htgen;
|
|
|
|
|
|
|
|
|
|
|
|
out = {
|
|
|
|
|
|
options.services.htgen = api;
|
|
|
|
|
|
config = imp;
|
2023-03-26 19:24:38 +02:00
|
|
|
|
};
|
2025-12-19 12:44:58 +01:00
|
|
|
|
|
|
|
|
|
|
htgen = pkgs.callPackage ../packages/htgen.nix { };
|
|
|
|
|
|
|
|
|
|
|
|
api =
|
|
|
|
|
|
with lib;
|
|
|
|
|
|
mkOption {
|
|
|
|
|
|
default = { };
|
|
|
|
|
|
type = types.attrsOf (
|
|
|
|
|
|
types.submodule (
|
|
|
|
|
|
{ config, ... }:
|
|
|
|
|
|
{
|
|
|
|
|
|
options = {
|
|
|
|
|
|
enable = mkEnableOption "services.htgen-${config._module.args.name}";
|
|
|
|
|
|
|
|
|
|
|
|
name = mkOption {
|
|
|
|
|
|
type = types.str;
|
|
|
|
|
|
default = config._module.args.name;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
package = mkOption {
|
|
|
|
|
|
default = htgen;
|
|
|
|
|
|
type = types.package;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
port = mkOption {
|
|
|
|
|
|
type = types.port;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
script = mkOption {
|
|
|
|
|
|
type = types.nullOr types.str;
|
|
|
|
|
|
default = null;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
scriptFile = mkOption {
|
|
|
|
|
|
type = types.nullOr (types.either types.package types.pathname);
|
|
|
|
|
|
default = null;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
user = mkOption {
|
|
|
|
|
|
default = {
|
|
|
|
|
|
name = "htgen-${config.name}";
|
|
|
|
|
|
home = "/var/lib/htgen-${config.name}";
|
|
|
|
|
|
};
|
|
|
|
|
|
defaultText = {
|
|
|
|
|
|
name = "htgen-‹name›";
|
|
|
|
|
|
home = "/var/lib/htgen-‹name›";
|
|
|
|
|
|
};
|
|
|
|
|
|
};
|
2023-03-26 19:24:38 +02:00
|
|
|
|
};
|
|
|
|
|
|
}
|
2025-12-19 12:44:58 +01:00
|
|
|
|
)
|
|
|
|
|
|
);
|
|
|
|
|
|
};
|
|
|
|
|
|
imp = {
|
|
|
|
|
|
|
|
|
|
|
|
systemd.services = lib.mapAttrs' (
|
|
|
|
|
|
name: htgen:
|
|
|
|
|
|
lib.nameValuePair "htgen-${name}" {
|
|
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
|
|
after = [ "network.target" ];
|
|
|
|
|
|
environment = {
|
|
|
|
|
|
HTGEN_PORT = toString htgen.port;
|
|
|
|
|
|
}
|
|
|
|
|
|
// optionalAttr "HTGEN_SCRIPT" htgen.script
|
|
|
|
|
|
// optionalAttr "HTGEN_SCRIPT_FILE" htgen.scriptFile;
|
|
|
|
|
|
serviceConfig = {
|
|
|
|
|
|
SyslogIdentifier = "htgen";
|
|
|
|
|
|
User = htgen.user.name;
|
|
|
|
|
|
PrivateTmp = true;
|
|
|
|
|
|
Restart = "always";
|
|
|
|
|
|
ExecStart = "${htgen.package}/bin/htgen --serve";
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
) cfg;
|
|
|
|
|
|
|
|
|
|
|
|
users.users = lib.mapAttrs' (
|
|
|
|
|
|
name: htgen:
|
|
|
|
|
|
lib.nameValuePair htgen.user.name {
|
|
|
|
|
|
inherit (htgen.user) home name;
|
|
|
|
|
|
group = htgen.user.name;
|
|
|
|
|
|
createHome = true;
|
|
|
|
|
|
isSystemUser = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
) cfg;
|
|
|
|
|
|
|
|
|
|
|
|
users.groups = lib.mapAttrs' (
|
|
|
|
|
|
name: htgen:
|
|
|
|
|
|
lib.nameValuePair htgen.user.name {
|
|
|
|
|
|
name = htgen.user.name;
|
|
|
|
|
|
}
|
|
|
|
|
|
) cfg;
|
2023-03-26 19:24:38 +02:00
|
|
|
|
};
|
2025-12-19 12:44:58 +01:00
|
|
|
|
in
|
|
|
|
|
|
out
|