]> Untitled Git - MarigoldOS/.git/blobdiff - modules/yggmail.nix
Port some stuff from 0x00 repo.
[MarigoldOS/.git] / modules / yggmail.nix
diff --git a/modules/yggmail.nix b/modules/yggmail.nix
new file mode 100644 (file)
index 0000000..5bf99c3
--- /dev/null
@@ -0,0 +1,63 @@
+{ config, pkgs, lib, ... }:
+with lib;
+let
+  cfg = config.services.yggmail;
+in {
+  options.services.yggmail = {
+    enable = mkEnableOption "yggmail mailserver";
+
+    peer = mkOption {
+      #default = "";
+      type = types.str; 
+      default = "tcp://127.0.0.1:6893";
+      example = "tcp://127.0.0.1:6893";
+      description = ''
+        Connect to a specific Yggdrasil static peer
+      '';
+    };
+
+    listenAddress = mkOption {
+      default = "localhost";
+      example = "127.0.0.1";
+      type = types.str;
+      description = ''
+        Interface address to listen on
+      '';
+    };
+
+    imapPort = mkOption {
+      default = "localhost:1143";
+      example = "localhost:1143";
+      type = types.port;
+      description = ''
+        Listen port for IMAP
+      '';
+    };
+
+    smtpPort = mkOption {
+      default = "localhost:1025";
+      example = "localhost:1025";
+      type = types.port;
+      description = ''
+        Listen port for SMTP
+      '';
+    };
+  };
+  config = mkIf cfg.enable {
+    systemd.services.yggmail = {
+      wantedBy = [ "multi-user.target" ];
+      after = [ "network.target" ];
+      description = "Start the yggmail daemon.";
+      serviceConfig = {
+        DynamicUser = true;
+        #AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" ];
+        #CapabilityBoundingSet = [ "CAP_NET_BIND_SERVICE" ];
+        ExecStart = ''${pkgs.nur.yggmail}/bin/yggmail -imap=${cfg.listenAddress}:${toString cfg.imapPort} -smtp=${cfg.listenAddress}:${toString cfg.smtpPort} -peer=${cfg.peer}'';
+        Restart = "always";
+        StateDirectory = "yggmail";
+        WorkingDirectory = "/var/lib/yggmail";
+      };
+    };
+  };
+}
+