]> Untitled Git - MarigoldOS/.git/blob - modules/nncp.nix
more 0x00 stuff moved over
[MarigoldOS/.git] / modules / nncp.nix
1 { config, pkgs, lib, ... }:
2 let
3   cfg = config.services.nncp;
4   settingsFormat = pkgs.formats.json { };
5 in
6 {
7   options.services.nncp = {
8     daemon = {
9       enable = lib.mkEnableOption "NNCP Daemon";
10       port = lib.mkOption {
11         type = lib.types.port;
12       };
13     };
14     caller = {
15       enable = lib.mkEnableOption "NNCP Caller";
16     };
17     configFile = lib.mkOption {
18       type = lib.types.path;
19       default = settingsFormat.generate "nncp.hjson" cfg.settings;
20     };
21     dataDir = lib.mkOption {
22       type = lib.types.path;
23       default = "/var/lib/nncp";
24     };
25     user = lib.mkOption {
26       type = lib.types.str;
27       default = "nncp";
28     };
29     group = lib.mkOption {
30       type = lib.types.str;
31       default = "nncp";
32     };
33     settings = lib.mkOption {
34     };
35   };
36   config = {
37     systemd.tmpfiles.rules = lib.mkIf (cfg.daemon.enable || cfg.caller.enable) [
38       "d '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group}"
39       "Z '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group}"
40       "d '/var/spool/nncp' 0770 ${cfg.user} ${cfg.group}"
41       "Z '/var/spool/nncp' 0770 ${cfg.user} ${cfg.group}"
42     ];
43     systemd.paths."nncp-watcher" = lib.mkIf (cfg.daemon.enable || cfg.caller.enable) {
44       wantedBy = [ "multi-user.target" ];
45       pathConfig = {
46         PathModified = "/run/keys/nncp";
47         Unit = "nncp-reloader.service";
48       };
49     };
50     systemd.services."nncp-reloader" = lib.mkIf (cfg.daemon.enable || cfg.caller.enable) {
51       after = [ "networking.target" ];
52       script = ''
53              exec ${pkgs.nncp}/bin/nncp-cfgdir -cfg ${cfg.configFile} -dump ${cfg.dataDir}
54              exec systemd-tmpfiles --create
55       '';
56       serviceConfig = {
57         Type = "oneshot";
58         WorkingDirectory = "${cfg.dataDir}";
59       };
60     };
61     systemd.services.nncp-daemon = lib.mkIf cfg.daemon.enable {
62       # wantedBy = [ "multi-user.target" ];
63       after = [ "nncp-reloader.service" ];
64       description = "Node to Node Copy Protocol Daemon";
65       serviceConfig = {
66         # DynamicUser = true;
67         User = cfg.user;
68         Group = cfg.group;
69         ExecStart = ''${pkgs.nncp}/bin/nncp-daemon -autotoss -noprogress -bind "0.0.0.0:${toString cfg.daemon.port}" -cfg ${cfg.dataDir}'';
70         Restart = "always";
71         Type = "simple";
72         RestartSec = 1;
73         StateDirectory = "nncp";
74         WorkingDirectory = "${cfg.dataDir}";
75       };
76     };
77     systemd.services.nncp-caller = lib.mkIf cfg.caller.enable {
78       # wantedBy = [ "multi-user.target" ];
79       after = [ "nncp-reloader.service" ];
80       description = "Node to Node Copy Protocol Caller";
81       serviceConfig = {
82         # DynamicUser = true;
83         User = cfg.user;
84         Group = cfg.group;
85         ExecStart = ''${pkgs.nncp}/bin/nncp-caller -autotoss -noprogress -cfg ${cfg.dataDir}'';
86         Restart = "always";
87         Type = "simple";
88         RestartSec = 1;
89         StateDirectory = "nncp";
90         WorkingDirectory = "${cfg.dataDir}";
91       };
92     };
93     users.users = lib.mkIf (cfg.user == "nncp") {
94       nncp = {
95         description = "NNCP daemon user";
96         isSystemUser = true;
97         group = cfg.group;
98         home = cfg.dataDir;
99       };
100     };
101     users.groups = lib.mkIf (cfg.group == "nncp") { nncp = { }; };
102   };
103 }