nebula: sourcephile.fr: add verify
[sourcephile-nix.git] / hosts / mermet / dovecot.nix
index 2c0c6d8e78547975b109a774b7463899aa6ad78a..4180b1315c6ffa8e3fb4683f0e072c0e95521094 100644 (file)
@@ -6,14 +6,6 @@ let
 
   stateDir = "/var/lib/dovecot";
 
-  sieve_pipe_bin_dir = pkgs.buildEnv {
-    name = "sieve_pipe_bin_dir";
-    pathsToLink = [ "/bin" ];
-    paths = [
-      learn-spam
-      learn-ham
-    ];
-  };
   learn-spam = pkgs.writeShellScriptBin "learn-spam.sh" ''
     exec ${pkgs.rspamd}/bin/rspamc -h /run/rspamd/learner.sock learn_spam
   '';
@@ -21,22 +13,8 @@ let
     exec ${pkgs.rspamd}/bin/rspamc -h /run/rspamd/learner.sock learn_ham
   '';
 
-  dovecot-virtual = pkgs.buildEnv {
-    name = "dovecot-virtual";
-    pathsToLink = [ "/" ];
-    paths = [
-      dovecot-virtual-all
-      dovecot-virtual-recents
-    ];
-  };
-  dovecot-virtual-all = pkgs.writeTextFile {
-    name = "dovecot-virtual-all";
-    destination = "/All/dovecot-virtual";
-    text = ''
-      *
-        all
-    '';
-  };
+  dovecot-virtual = pkgs.buildEnv { name = "dovecot-virtual"; pathsToLink = [ "/" ]; paths = [ dovecot-virtual-all dovecot-virtual-recents ]; };
+  dovecot-virtual-all = pkgs.writeTextFile { name = "dovecot-virtual-all"; destination = "/All/dovecot-virtual"; text = '' * all ''; };
   dovecot-virtual-recents = pkgs.writeTextFile {
     name = "dovecot-virtual-recents";
     destination = "/Recents/dovecot-virtual";
@@ -123,8 +101,49 @@ in
     mailUser = "";
     mailGroup = "";
     sslServerCert = null;
-    sieveScripts = {
-      global = dovecot/sieve/global;
+    sieve = {
+      plugins = [
+        #"sieve_extprograms"
+        "sieve_imapsieve"
+      ];
+      extensions = [
+        "copy"
+        "envelope"
+        "environment"
+        "fileinto"
+        "imap4flags"
+        "imapsieve"
+        "include"
+        "mailbox"
+        "subaddress"
+        "variables"
+        "vnd.dovecot.environment"
+      ];
+      globalExtensions = [
+        "vnd.dovecot.pipe"
+      ];
+      pipeBins = builtins.map lib.getExe [
+        learn-ham
+        learn-spam
+      ];
+      scripts = {
+        global = dovecot/sieve/global;
+      };
+    };
+    mailPlugins = {
+      globally.enable = [
+        "virtual"
+        "acl"
+        "quota"
+        #"fts"
+        #"fts_xapian"
+      ];
+      perProtocol = {
+        lda.enable = [ "sieve" ];
+        lmtp.enable = [ "sieve" ];
+        imap.enable = [ "imap_acl" "imap_quota" "imap_sieve" "virtual" ];
+        pop3.enable = [ "virtual" ];
+      };
     };
     extraConfig = ''
       #auth_verbose = yes
@@ -225,7 +244,6 @@ in
         separator = +
         subscriptions = yes
       }
-      mail_plugins = $mail_plugins virtual
       namespace Virtual {
         prefix = Virtual+
         separator = +
@@ -235,7 +253,6 @@ in
         location = virtual:${dovecot-virtual}:UTF-8:INDEX=${stateDir}/index/%d/%n/virtual
       }
 
-      mail_plugins = $mail_plugins acl
       plugin {
         acl = vfile:/etc/dovecot/acl/global
         acl_anyone = allow
@@ -245,7 +262,6 @@ in
         acl_shared_dict = file:${stateDir}/acl/%d/acl.db
       }
 
-      #mail_plugins = $mail_plugins fts fts_xapian
       # Default VSZ (virtual memory size) limit for service processes. This is mainly
       # intended to catch and kill processes that leak memory before they eat up everything.
       # Increased for fts_xapian.
@@ -268,7 +284,6 @@ in
       #  #fts_dovecot_fs = posix:prefix=%h/fts/
       #}
 
-      mail_plugins = $mail_plugins quota
       plugin {
         quota = maildir:User quota
         quota_rule = *:storage=256M
@@ -282,7 +297,6 @@ in
 
       protocol lda {
         hostname = ${networking.domain}
-        mail_plugins = $mail_plugins sieve
         postmaster_address = root+dovecot+lda@${networking.domain}
         syslog_facility = mail
       }
@@ -290,7 +304,6 @@ in
       lda_mailbox_autosubscribe = yes
 
       protocol lmtp {
-        mail_plugins = $mail_plugins sieve
         postmaster_address = root+dovecot+lmtp@${networking.domain}
       }
       service lmtp {
@@ -330,7 +343,6 @@ in
       imapc_features = $imapc_features fetch-headers
       protocol imap {
         #mail_max_userip_connections = 10
-        mail_plugins = $mail_plugins imap_acl imap_quota imap_sieve virtual
         imap_metadata = yes
 
         # DOC: https://wiki.dovecot.org/MailboxSettings
@@ -412,13 +424,9 @@ in
         }
       }
       plugin {
-        sieve_plugins = sieve_imapsieve sieve_extprograms
-        sieve_global_extensions = +vnd.dovecot.environment +vnd.dovecot.pipe
-        #sieve_extensions = +editheader
         sieve = file:~/sieve;active=~/active.sieve
         sieve_default = file:${stateDir}/sieve/global/default.sieve
         sieve_default_name = main
-        sieve_pipe_bin_dir = ${sieve_pipe_bin_dir}/bin
         sieve_max_script_size = 1M
         sieve_quota_max_scripts = 0
         sieve_quota_max_storage = 10M
@@ -508,7 +516,6 @@ in
       }
 
       protocol pop3 {
-        mail_plugins = $mail_plugins virtual
         #mail_max_userip_connections = 10
         # Virtual namespace for the virtual INBOX.
         # Use a global directory for dovecot-virtual files.