Group storage and vmail user options at mailserver.storage
Create a nicer option structure that deals with the mail storage and its owner, uid, group and gid. Also includes the directory layout as a property of how mails are stored..
This commit is contained in:
+78
-43
@@ -25,6 +25,7 @@ let
|
||||
inherit (lib)
|
||||
literalExpression
|
||||
literalMD
|
||||
mkChangedOptionModule
|
||||
mkEnableOption
|
||||
mkOption
|
||||
mkOptionType
|
||||
@@ -783,53 +784,80 @@ in
|
||||
default = [ ];
|
||||
};
|
||||
|
||||
vmailUID = mkOption {
|
||||
type = types.int;
|
||||
default = 5000;
|
||||
description = ''
|
||||
The unix UID of the virtual mail user. Be mindful that if this is
|
||||
changed, you will need to manually adjust the permissions of
|
||||
`mailDirectory`.
|
||||
'';
|
||||
};
|
||||
storage = {
|
||||
path = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/vmail";
|
||||
description = ''
|
||||
Path on disk where mail home directories are stored.
|
||||
'';
|
||||
};
|
||||
|
||||
vmailUserName = mkOption {
|
||||
type = types.str;
|
||||
default = "virtualMail";
|
||||
description = ''
|
||||
The user name and group name of the user that owns the directory where all
|
||||
the mail is stored.
|
||||
'';
|
||||
};
|
||||
directoryLayout = mkOption {
|
||||
type = types.enum [
|
||||
"fs"
|
||||
"maildir++"
|
||||
];
|
||||
default = "maildir++";
|
||||
description = ''
|
||||
Sets whether dovecot should organize mail in subdirectories:
|
||||
|
||||
vmailGroupName = mkOption {
|
||||
type = types.str;
|
||||
default = "virtualMail";
|
||||
description = ''
|
||||
The user name and group name of the user that owns the directory where all
|
||||
the mail is stored.
|
||||
'';
|
||||
};
|
||||
- /var/vmail/example.com/user/.folder.subfolder/ (Maildir++ layout)
|
||||
- /var/vmail/example.com/user/folder/subfolder/ (FS layout)
|
||||
|
||||
mailDirectory = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/vmail";
|
||||
description = ''
|
||||
Where to store the mail.
|
||||
'';
|
||||
};
|
||||
See <https://doc.dovecot.org/main/core/config/mailbox_formats/maildir.html#directory-layout>
|
||||
See https://doc.dovecot.org/main/core/config/mailbox_formats/maildir.html#maildir-mailbox-format for details.
|
||||
'';
|
||||
};
|
||||
|
||||
useFsLayout = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Sets whether dovecot should organize mail in subdirectories:
|
||||
uid = mkOption {
|
||||
type = types.ints.positive;
|
||||
default = 5000;
|
||||
description = ''
|
||||
The user id assigned to the vmail user.
|
||||
|
||||
- /var/vmail/example.com/user/.folder.subfolder/ (default layout)
|
||||
- /var/vmail/example.com/user/folder/subfolder/ (FS layout)
|
||||
This user owns the mail storage files and directories and is used by
|
||||
services accessing the mail store.
|
||||
|
||||
See https://doc.dovecot.org/main/core/config/mailbox_formats/maildir.html#maildir-mailbox-format for details.
|
||||
'';
|
||||
:::{warning}
|
||||
If you change this value you also need to manually adjust the
|
||||
permissions of your :option:`mailserver.storage.path`.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
owner = mkOption {
|
||||
type = types.str;
|
||||
default = "virtualMail";
|
||||
description = ''
|
||||
The name of the user that owns the :option:`mailserver.storage.path`.
|
||||
'';
|
||||
};
|
||||
|
||||
gid = mkOption {
|
||||
type = types.ints.positive;
|
||||
default = 5000;
|
||||
description = ''
|
||||
The group id of the primary group of the vmail user.
|
||||
|
||||
This group owns the mail storage directories. Access can be delegated
|
||||
to other users via group membership.
|
||||
|
||||
:::{warning}
|
||||
If you change this value you also need to manually adjust the
|
||||
permissions of your :option:`mailserver.storage.path`.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
type = types.str;
|
||||
default = "virtualMail";
|
||||
description = ''
|
||||
The primary group name of the user that owns the
|
||||
:option:`mailserver.storage.path`.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
useUTF8FolderNames = mkOption {
|
||||
@@ -1513,8 +1541,8 @@ in
|
||||
|
||||
locations = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [ cfg.mailDirectory ];
|
||||
defaultText = literalExpression "[ config.mailserver.mailDirectory ]";
|
||||
default = [ cfg.storage.path ];
|
||||
defaultText = literalExpression "[ config.mailserver.storage.path ]";
|
||||
description = "The locations that are to be backed up by borg.";
|
||||
};
|
||||
|
||||
@@ -1715,5 +1743,12 @@ in
|
||||
)
|
||||
(mkRenamedOptionModule [ "mailserver" "extraVirtualAliases" ] [ "mailserver" "aliases" ])
|
||||
(mkRenamedOptionModule [ "mailserver" "loginAccounts" ] [ "mailserver" "accounts" ])
|
||||
(mkRenamedOptionModule [ "mailserver" "vmailUID" ] [ "mailserver" "storage" "uid" ])
|
||||
(mkRenamedOptionModule [ "mailserver" "vmailUserName" ] [ "mailserver" "storage" "owner" ])
|
||||
(mkRenamedOptionModule [ "mailserver" "vmailGroupName" ] [ "mailserver" "storage" "group" ])
|
||||
(mkRenamedOptionModule [ "mailserver" "mailDirectory" ] [ "mailserver" "storage" "path" ])
|
||||
(mkChangedOptionModule [ "mailserver" "useFSLayout" ] [ "mailserver" "storage" "directoryLayout" ] (
|
||||
config: if config.mailserver.useFSLayout then "fs" else "maildir++"
|
||||
))
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user