mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-09-30 01:17:28 +03:00
nixos/dovecot: add an option to enable mail_plugins
Motivation: if enableQuota is true, mail plugins cannot be enabled in extraConfig because of the problem described here: https://doc.dovecot.org/configuration_manual/config_file/config_file_syntax/#variable-expansion doveconf: Warning: /etc/dovecot/dovecot.conf line 8: Global setting mail_plugins won't change the setting inside an earlier filter at /etc/dovecot/dovecot.conf line 5 (if this is intentional, avoid this warning by moving the global setting before /etc/dovecot/dovecot.conf line 5)
This commit is contained in:
parent
9300e2038d
commit
0da7a14f16
@ -14,8 +14,16 @@ let
|
|||||||
base_dir = ${baseDir}
|
base_dir = ${baseDir}
|
||||||
protocols = ${concatStringsSep " " cfg.protocols}
|
protocols = ${concatStringsSep " " cfg.protocols}
|
||||||
sendmail_path = /run/wrappers/bin/sendmail
|
sendmail_path = /run/wrappers/bin/sendmail
|
||||||
|
# defining mail_plugins must be done before the first protocol {} filter because of https://doc.dovecot.org/configuration_manual/config_file/config_file_syntax/#variable-expansion
|
||||||
|
mail_plugins = $mail_plugins ${concatStringsSep " " cfg.mailPlugins.globally.enable}
|
||||||
''
|
''
|
||||||
|
|
||||||
|
(concatStringsSep "\n" (mapAttrsToList (protocol: plugins: ''
|
||||||
|
protocol ${protocol} {
|
||||||
|
mail_plugins = $mail_plugins ${concatStringsSep " " plugins.enable}
|
||||||
|
}
|
||||||
|
'') cfg.mailPlugins.perProtocol))
|
||||||
|
|
||||||
(if cfg.sslServerCert == null then ''
|
(if cfg.sslServerCert == null then ''
|
||||||
ssl = no
|
ssl = no
|
||||||
disable_plaintext_auth = no
|
disable_plaintext_auth = no
|
||||||
@ -72,7 +80,6 @@ let
|
|||||||
'')
|
'')
|
||||||
|
|
||||||
(optionalString cfg.enableQuota ''
|
(optionalString cfg.enableQuota ''
|
||||||
mail_plugins = $mail_plugins quota
|
|
||||||
service quota-status {
|
service quota-status {
|
||||||
executable = ${dovecotPkg}/libexec/dovecot/quota-status -p postfix
|
executable = ${dovecotPkg}/libexec/dovecot/quota-status -p postfix
|
||||||
inet_listener {
|
inet_listener {
|
||||||
@ -81,10 +88,6 @@ let
|
|||||||
client_limit = 1
|
client_limit = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
protocol imap {
|
|
||||||
mail_plugins = $mail_plugins imap_quota
|
|
||||||
}
|
|
||||||
|
|
||||||
plugin {
|
plugin {
|
||||||
quota_rule = *:storage=${cfg.quotaGlobalPerUser}
|
quota_rule = *:storage=${cfg.quotaGlobalPerUser}
|
||||||
quota = maildir:User quota # per virtual mail user quota # BUG/FIXME broken, we couldn't get this working
|
quota = maildir:User quota # per virtual mail user quota # BUG/FIXME broken, we couldn't get this working
|
||||||
@ -183,6 +186,40 @@ in
|
|||||||
description = "Additional entries to put verbatim into Dovecot's config file.";
|
description = "Additional entries to put verbatim into Dovecot's config file.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mailPlugins =
|
||||||
|
let plugins = hint: types.submodule {
|
||||||
|
options = {
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [];
|
||||||
|
description = "mail plugins to enable as a list of strings to append to the ${hint} <literal>$mail_plugins</literal> configuration variable";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
mkOption {
|
||||||
|
type = with types; submodule {
|
||||||
|
options = {
|
||||||
|
globally = mkOption {
|
||||||
|
type = plugins "top-level";
|
||||||
|
example = { enable =[ "virtual" ]; };
|
||||||
|
default = { enable = []; };
|
||||||
|
};
|
||||||
|
perProtocol = mkOption {
|
||||||
|
type = attrsOf (plugins "corresponding per-protocol");
|
||||||
|
default = {};
|
||||||
|
example = { imap = [ "imap_acl" ]; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
description = "Additional entries to add to the mail_plugins variable, globally and per protocol";
|
||||||
|
example = {
|
||||||
|
globally.enable = [ "acl" ];
|
||||||
|
perProtocol.imap.enable = [ "imap_acl" ];
|
||||||
|
};
|
||||||
|
default = { globally.enable = []; perProtocol = {};};
|
||||||
|
};
|
||||||
|
|
||||||
configFile = mkOption {
|
configFile = mkOption {
|
||||||
type = types.nullOr types.path;
|
type = types.nullOr types.path;
|
||||||
default = null;
|
default = null;
|
||||||
@ -310,6 +347,11 @@ in
|
|||||||
++ optional cfg.enablePop3 "pop3"
|
++ optional cfg.enablePop3 "pop3"
|
||||||
++ optional cfg.enableLmtp "lmtp";
|
++ optional cfg.enableLmtp "lmtp";
|
||||||
|
|
||||||
|
services.dovecot2.mailPlugins = mkIf cfg.enableQuota {
|
||||||
|
globally.enable = [ "quota" ];
|
||||||
|
perProtocol.imap.enable = [ "imap_quota" ];
|
||||||
|
};
|
||||||
|
|
||||||
users.users = {
|
users.users = {
|
||||||
dovenull =
|
dovenull =
|
||||||
{ uid = config.ids.uids.dovenull2;
|
{ uid = config.ids.uids.dovenull2;
|
||||||
|
Loading…
Reference in New Issue
Block a user