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
'';
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";
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
separator = +
subscriptions = yes
}
- mail_plugins = $mail_plugins virtual
namespace Virtual {
prefix = Virtual+
separator = +
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
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.
# #fts_dovecot_fs = posix:prefix=%h/fts/
#}
- mail_plugins = $mail_plugins quota
plugin {
quota = maildir:User quota
quota_rule = *:storage=256M
protocol lda {
hostname = ${networking.domain}
- mail_plugins = $mail_plugins sieve
postmaster_address = root+dovecot+lda@${networking.domain}
syslog_facility = mail
}
lda_mailbox_autosubscribe = yes
protocol lmtp {
- mail_plugins = $mail_plugins sieve
postmaster_address = root+dovecot+lmtp@${networking.domain}
}
service lmtp {
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
}
}
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
}
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.