about summary refs log tree commit diff
path: root/nixos/modules/services/mail/dovecot.nix
diff options
context:
space:
mode:
authorMaximilian Bosch <maximilian@mbosch.me>2020-06-04 16:10:32 +0200
committerMaximilian Bosch <maximilian@mbosch.me>2020-06-17 22:05:58 +0200
commite826a6ce03dcee02ba2696e169dbb18711f73917 (patch)
tree0646b4c575a2e0d9f7e21843e616c1bcae20a4d0 /nixos/modules/services/mail/dovecot.nix
parentfc179ef8a6968a171a51de4b69bbd9b147f4cb7e (diff)
downloadnixlib-e826a6ce03dcee02ba2696e169dbb18711f73917.tar
nixlib-e826a6ce03dcee02ba2696e169dbb18711f73917.tar.gz
nixlib-e826a6ce03dcee02ba2696e169dbb18711f73917.tar.bz2
nixlib-e826a6ce03dcee02ba2696e169dbb18711f73917.tar.lz
nixlib-e826a6ce03dcee02ba2696e169dbb18711f73917.tar.xz
nixlib-e826a6ce03dcee02ba2696e169dbb18711f73917.tar.zst
nixlib-e826a6ce03dcee02ba2696e169dbb18711f73917.zip
nixos/dovecot2: refactor mailboxes option
Specifying mailboxes as a list isn't a good approach since this makes it
impossible to override values. For backwards-compatibility, it's still
possible to declare a list of mailboxes, but a deprecation warning will
be shown.
Diffstat (limited to 'nixos/modules/services/mail/dovecot.nix')
-rw-r--r--nixos/modules/services/mail/dovecot.nix24
1 files changed, 20 insertions, 4 deletions
diff --git a/nixos/modules/services/mail/dovecot.nix b/nixos/modules/services/mail/dovecot.nix
index ee797f9c42f1..51cbcbf1cbc8 100644
--- a/nixos/modules/services/mail/dovecot.nix
+++ b/nixos/modules/services/mail/dovecot.nix
@@ -134,8 +134,9 @@ let
   mailboxes = { ... }: {
     options = {
       name = mkOption {
-        type = types.strMatching ''[^"]+'';
+        type = types.nullOr (types.strMatching ''[^"]+'');
         example = "Spam";
+        default = null;
         description = "The name of the mailbox.";
       };
       auto = mkOption {
@@ -334,9 +335,24 @@ in
     };
 
     mailboxes = mkOption {
-      type = types.listOf (types.submodule mailboxes);
-      default = [];
-      example = [ { name = "Spam"; specialUse = "Junk"; auto = "create"; } ];
+      type = with types; let m = submodule mailboxes; in either (listOf m) (attrsOf m);
+      default = {};
+      apply = x:
+        if isList x then warn "Declaring `services.dovecot2.mailboxes' as a list is deprecated and will break eval in 21.03!" x
+        else mapAttrsToList (name: value:
+          if value.name != null
+            then throw ''
+              When specifying dovecot2 mailboxes as attributes, declaring
+              a `name'-attribute is prohibited! The name ${value.name} should
+              be the attribute key!
+            ''
+          else value // { inherit name; }
+        ) x;
+      example = literalExample ''
+        {
+          Spam = { specialUse = "Junk"; auto = "create"; };
+        }
+      '';
       description = "Configure mailboxes and auto create or subscribe them.";
     };