This repository has no description
2.7 kB
111 lines
1# Copied from stockholm krebs/3modules/htgen.nix (cc283503); htgen now comes
2# from stockholm's packages output instead of its overlay.
3{
4 config,
5 pkgs,
6 self,
7 ...
8}:
9
10with self.inputs.stockholm.lib;
11let
12 optionalAttr = name: value: if name != null then { ${name} = value; } else { };
13
14 cfg = config.krebs.htgen;
15
16 out = {
17 options.krebs.htgen = api;
18 config = imp;
19 };
20
21 api = mkOption {
22 default = { };
23 type = types.attrsOf (
24 types.submodule (
25 { config, ... }: {
26 options = {
27 enable = mkEnableOption "krebs.htgen-${config._module.args.name}";
28
29 name = mkOption {
30 type = types.username;
31 default = config._module.args.name;
32 };
33
34 package = mkOption {
35 default = self.inputs.stockholm.packages.${pkgs.stdenv.hostPlatform.system}.htgen;
36 type = types.package;
37 };
38
39 port = mkOption {
40 type = types.uint;
41 };
42
43 script = mkOption {
44 type = types.nullOr types.str;
45 default = null;
46 };
47
48 scriptFile = mkOption {
49 type = types.nullOr (types.either types.package types.pathname);
50 default = null;
51 };
52
53 user = mkOption {
54 type = types.user;
55 default = {
56 name = "htgen-${config.name}";
57 home = "/var/lib/htgen-${config.name}";
58 };
59 defaultText = {
60 name = "htgen-‹name›";
61 home = "/var/lib/htgen-‹name›";
62 };
63 };
64 };
65 }
66 )
67 );
68 };
69 imp = {
70
71 systemd.services = mapAttrs' (
72 name: htgen:
73 nameValuePair "htgen-${name}" {
74 wantedBy = [ "multi-user.target" ];
75 after = [ "network.target" ];
76 environment = {
77 HTGEN_PORT = toString htgen.port;
78 }
79 // optionalAttr "HTGEN_SCRIPT" htgen.script
80 // optionalAttr "HTGEN_SCRIPT_FILE" htgen.scriptFile;
81 serviceConfig = {
82 SyslogIdentifier = "htgen";
83 User = htgen.user.name;
84 PrivateTmp = true;
85 Restart = "always";
86 ExecStart = "${htgen.package}/bin/htgen --serve";
87 };
88 }
89 ) cfg;
90
91 users.users = mapAttrs' (
92 name: htgen:
93 nameValuePair htgen.user.name {
94 inherit (htgen.user) home name uid;
95 group = htgen.user.name;
96 createHome = true;
97 isSystemUser = true;
98 }
99 ) cfg;
100
101 users.groups = mapAttrs' (
102 _name: htgen:
103 nameValuePair htgen.user.name {
104 name = htgen.user.name;
105 gid = htgen.user.uid;
106 }
107 ) cfg;
108
109 };
110in
111out