]> Untitled Git - MarigoldOS/.git/blobdiff - modules/nncp.nix
more 0x00 stuff moved over
[MarigoldOS/.git] / modules / nncp.nix
diff --git a/modules/nncp.nix b/modules/nncp.nix
new file mode 100644 (file)
index 0000000..6d1f015
--- /dev/null
@@ -0,0 +1,103 @@
+{ config, pkgs, lib, ... }:
+let
+  cfg = config.services.nncp;
+  settingsFormat = pkgs.formats.json { };
+in
+{
+  options.services.nncp = {
+    daemon = {
+      enable = lib.mkEnableOption "NNCP Daemon";
+      port = lib.mkOption {
+        type = lib.types.port;
+      };
+    };
+    caller = {
+      enable = lib.mkEnableOption "NNCP Caller";
+    };
+    configFile = lib.mkOption {
+      type = lib.types.path;
+      default = settingsFormat.generate "nncp.hjson" cfg.settings;
+    };
+    dataDir = lib.mkOption {
+      type = lib.types.path;
+      default = "/var/lib/nncp";
+    };
+    user = lib.mkOption {
+      type = lib.types.str;
+      default = "nncp";
+    };
+    group = lib.mkOption {
+      type = lib.types.str;
+      default = "nncp";
+    };
+    settings = lib.mkOption {
+    };
+  };
+  config = {
+    systemd.tmpfiles.rules = lib.mkIf (cfg.daemon.enable || cfg.caller.enable) [
+      "d '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group}"
+      "Z '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group}"
+      "d '/var/spool/nncp' 0770 ${cfg.user} ${cfg.group}"
+      "Z '/var/spool/nncp' 0770 ${cfg.user} ${cfg.group}"
+    ];
+    systemd.paths."nncp-watcher" = lib.mkIf (cfg.daemon.enable || cfg.caller.enable) {
+      wantedBy = [ "multi-user.target" ];
+      pathConfig = {
+        PathModified = "/run/keys/nncp";
+        Unit = "nncp-reloader.service";
+      };
+    };
+    systemd.services."nncp-reloader" = lib.mkIf (cfg.daemon.enable || cfg.caller.enable) {
+      after = [ "networking.target" ];
+      script = ''
+             exec ${pkgs.nncp}/bin/nncp-cfgdir -cfg ${cfg.configFile} -dump ${cfg.dataDir}
+             exec systemd-tmpfiles --create
+      '';
+      serviceConfig = {
+        Type = "oneshot";
+        WorkingDirectory = "${cfg.dataDir}";
+      };
+    };
+    systemd.services.nncp-daemon = lib.mkIf cfg.daemon.enable {
+      # wantedBy = [ "multi-user.target" ];
+      after = [ "nncp-reloader.service" ];
+      description = "Node to Node Copy Protocol Daemon";
+      serviceConfig = {
+        # DynamicUser = true;
+        User = cfg.user;
+        Group = cfg.group;
+        ExecStart = ''${pkgs.nncp}/bin/nncp-daemon -autotoss -noprogress -bind "0.0.0.0:${toString cfg.daemon.port}" -cfg ${cfg.dataDir}'';
+        Restart = "always";
+        Type = "simple";
+        RestartSec = 1;
+        StateDirectory = "nncp";
+        WorkingDirectory = "${cfg.dataDir}";
+      };
+    };
+    systemd.services.nncp-caller = lib.mkIf cfg.caller.enable {
+      # wantedBy = [ "multi-user.target" ];
+      after = [ "nncp-reloader.service" ];
+      description = "Node to Node Copy Protocol Caller";
+      serviceConfig = {
+        # DynamicUser = true;
+        User = cfg.user;
+        Group = cfg.group;
+        ExecStart = ''${pkgs.nncp}/bin/nncp-caller -autotoss -noprogress -cfg ${cfg.dataDir}'';
+        Restart = "always";
+        Type = "simple";
+        RestartSec = 1;
+        StateDirectory = "nncp";
+        WorkingDirectory = "${cfg.dataDir}";
+      };
+    };
+    users.users = lib.mkIf (cfg.user == "nncp") {
+      nncp = {
+        description = "NNCP daemon user";
+        isSystemUser = true;
+        group = cfg.group;
+        home = cfg.dataDir;
+      };
+    };
+    users.groups = lib.mkIf (cfg.group == "nncp") { nncp = { }; };
+  };
+}