about summary refs log tree commit diff
path: root/nixos/modules/services/mail
diff options
context:
space:
mode:
authorWeijia Wang <9713184+wegank@users.noreply.github.com>2024-04-13 19:10:53 +0200
committerWeijia Wang <9713184+wegank@users.noreply.github.com>2024-04-13 19:10:53 +0200
commitf3a1652b098bbe33e5ab8a827ff3778b3c2120b8 (patch)
tree243f5d1e82706ad3d727a26692bd1d53d9373776 /nixos/modules/services/mail
parent561b7b74f8e5783f29bb589482b3ed60ce2c1318 (diff)
parentc0c2f2903f310dd5efb86f02b4b5f824183f5173 (diff)
Merge branch 'master' into staging-next
Diffstat (limited to 'nixos/modules/services/mail')
-rw-r--r--nixos/modules/services/mail/clamsmtp.nix37
-rw-r--r--nixos/modules/services/mail/davmail.nix6
-rw-r--r--nixos/modules/services/mail/dkimproxy-out.nix15
-rw-r--r--nixos/modules/services/mail/dovecot.nix68
-rw-r--r--nixos/modules/services/mail/dspam.nix14
-rw-r--r--nixos/modules/services/mail/exim.nix12
-rw-r--r--nixos/modules/services/mail/goeland.nix8
-rw-r--r--nixos/modules/services/mail/listmonk.nix36
-rw-r--r--nixos/modules/services/mail/maddy.nix34
-rw-r--r--nixos/modules/services/mail/mail.nix2
-rw-r--r--nixos/modules/services/mail/mailcatcher.nix12
-rw-r--r--nixos/modules/services/mail/mailhog.nix12
-rw-r--r--nixos/modules/services/mail/mailman.nix54
-rw-r--r--nixos/modules/services/mail/mlmmj.nix12
-rw-r--r--nixos/modules/services/mail/nullmailer.nix34
-rw-r--r--nixos/modules/services/mail/offlineimap.nix10
-rw-r--r--nixos/modules/services/mail/opendkim.nix16
-rw-r--r--nixos/modules/services/mail/opensmtpd.nix10
-rw-r--r--nixos/modules/services/mail/pfix-srsd.nix6
-rw-r--r--nixos/modules/services/mail/postfix.nix116
-rw-r--r--nixos/modules/services/mail/postfixadmin.nix18
-rw-r--r--nixos/modules/services/mail/postgrey.nix38
-rw-r--r--nixos/modules/services/mail/postsrsd.nix20
-rw-r--r--nixos/modules/services/mail/public-inbox.nix76
-rw-r--r--nixos/modules/services/mail/roundcube.nix24
-rw-r--r--nixos/modules/services/mail/rspamd-trainer.nix6
-rw-r--r--nixos/modules/services/mail/rspamd.nix50
-rw-r--r--nixos/modules/services/mail/rss2email.nix14
-rw-r--r--nixos/modules/services/mail/schleuder.nix14
-rw-r--r--nixos/modules/services/mail/spamassassin.nix8
-rw-r--r--nixos/modules/services/mail/stalwart-mail.nix4
-rw-r--r--nixos/modules/services/mail/sympa.nix50
-rw-r--r--nixos/modules/services/mail/zeyple.nix12
33 files changed, 417 insertions, 431 deletions
diff --git a/nixos/modules/services/mail/clamsmtp.nix b/nixos/modules/services/mail/clamsmtp.nix
index a0de25962845f..5bcf8ecdde1ac 100644
--- a/nixos/modules/services/mail/clamsmtp.nix
+++ b/nixos/modules/services/mail/clamsmtp.nix
@@ -12,17 +12,16 @@ in
       enable = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to enable clamsmtp.";
+        description = "Whether to enable clamsmtp.";
       };
 
       instances = mkOption {
-        description = lib.mdDoc "Instances of clamsmtp to run.";
+        description = "Instances of clamsmtp to run.";
         type = types.listOf (types.submodule { options = {
           action = mkOption {
             type = types.enum [ "bounce" "drop" "pass" ];
             default = "drop";
-            description =
-              lib.mdDoc ''
+            description = ''
                 Action to take when a virus is detected.
 
                 Note that viruses often spoof sender addresses, so bouncing is
@@ -34,8 +33,7 @@ in
             type = types.str;
             default = "";
             example = "X-Virus-Scanned: ClamAV using ClamSMTP";
-            description =
-              lib.mdDoc ''
+            description = ''
                 A header to add to scanned messages. See clamsmtpd.conf(5) for
                 more details. Empty means no header.
               '';
@@ -44,8 +42,7 @@ in
           keepAlives = mkOption {
             type = types.int;
             default = 0;
-            description =
-              lib.mdDoc ''
+            description = ''
                 Number of seconds to wait between each NOOP sent to the sending
                 server. 0 to disable.
 
@@ -57,8 +54,7 @@ in
           listen = mkOption {
             type = types.str;
             example = "127.0.0.1:10025";
-            description =
-              lib.mdDoc ''
+            description = ''
                 Address to wait for incoming SMTP connections on. See
                 clamsmtpd.conf(5) for more details.
               '';
@@ -67,8 +63,7 @@ in
           quarantine = mkOption {
             type = types.bool;
             default = false;
-            description =
-              lib.mdDoc ''
+            description = ''
                 Whether to quarantine files that contain viruses by leaving them
                 in the temporary directory.
               '';
@@ -77,13 +72,12 @@ in
           maxConnections = mkOption {
             type = types.int;
             default = 64;
-            description = lib.mdDoc "Maximum number of connections to accept at once.";
+            description = "Maximum number of connections to accept at once.";
           };
 
           outAddress = mkOption {
             type = types.str;
-            description =
-              lib.mdDoc ''
+            description = ''
                 Address of the SMTP server to send email to once it has been
                 scanned.
               '';
@@ -92,8 +86,7 @@ in
           tempDirectory = mkOption {
             type = types.str;
             default = "/tmp";
-            description =
-              lib.mdDoc ''
+            description = ''
                 Temporary directory that needs to be accessible to both clamd
                 and clamsmtpd.
               '';
@@ -102,20 +95,19 @@ in
           timeout = mkOption {
             type = types.int;
             default = 180;
-            description = lib.mdDoc "Time-out for network connections.";
+            description = "Time-out for network connections.";
           };
 
           transparentProxy = mkOption {
             type = types.bool;
             default = false;
-            description = lib.mdDoc "Enable clamsmtp's transparent proxy support.";
+            description = "Enable clamsmtp's transparent proxy support.";
           };
 
           virusAction = mkOption {
             type = with types; nullOr path;
             default = null;
-            description =
-              lib.mdDoc ''
+            description = ''
                 Command to run when a virus is found. Please see VIRUS ACTION in
                 clamsmtpd(8) for a discussion of this option and its safe use.
               '';
@@ -124,8 +116,7 @@ in
           xClient = mkOption {
             type = types.bool;
             default = false;
-            description =
-              lib.mdDoc ''
+            description = ''
                 Send the XCLIENT command to the receiving server, for forwarding
                 client addresses and connection information if the receiving
                 server supports this feature.
diff --git a/nixos/modules/services/mail/davmail.nix b/nixos/modules/services/mail/davmail.nix
index 9cdb435af4a11..46ddaedd4bf69 100644
--- a/nixos/modules/services/mail/davmail.nix
+++ b/nixos/modules/services/mail/davmail.nix
@@ -25,18 +25,18 @@ in
 
   {
     options.services.davmail = {
-      enable = mkEnableOption (lib.mdDoc "davmail, an MS Exchange gateway");
+      enable = mkEnableOption "davmail, an MS Exchange gateway";
 
       url = mkOption {
         type = types.str;
-        description = lib.mdDoc "Outlook Web Access URL to access the exchange server, i.e. the base webmail URL.";
+        description = "Outlook Web Access URL to access the exchange server, i.e. the base webmail URL.";
         example = "https://outlook.office365.com/EWS/Exchange.asmx";
       };
 
       config = mkOption {
         type = configType;
         default = {};
-        description = lib.mdDoc ''
+        description = ''
           Davmail configuration. Refer to
           <http://davmail.sourceforge.net/serversetup.html>
           and <http://davmail.sourceforge.net/advanced.html>
diff --git a/nixos/modules/services/mail/dkimproxy-out.nix b/nixos/modules/services/mail/dkimproxy-out.nix
index 6f9cbc4e9d4da..48ccf2dda6013 100644
--- a/nixos/modules/services/mail/dkimproxy-out.nix
+++ b/nixos/modules/services/mail/dkimproxy-out.nix
@@ -14,8 +14,7 @@ in
       enable = mkOption {
         type = types.bool;
         default = false;
-        description =
-          lib.mdDoc ''
+        description = ''
             Whether to enable dkimproxy_out.
 
             Note that a key will be auto-generated, and can be found in
@@ -26,26 +25,25 @@ in
       listen = mkOption {
         type = types.str;
         example = "127.0.0.1:10027";
-        description = lib.mdDoc "Address:port DKIMproxy should listen on.";
+        description = "Address:port DKIMproxy should listen on.";
       };
 
       relay = mkOption {
         type = types.str;
         example = "127.0.0.1:10028";
-        description = lib.mdDoc "Address:port DKIMproxy should forward mail to.";
+        description = "Address:port DKIMproxy should forward mail to.";
       };
 
       domains = mkOption {
         type = with types; listOf str;
         example = [ "example.org" "example.com" ];
-        description = lib.mdDoc "List of domains DKIMproxy can sign for.";
+        description = "List of domains DKIMproxy can sign for.";
       };
 
       selector = mkOption {
         type = types.str;
         example = "selector1";
-        description =
-          lib.mdDoc ''
+        description = ''
             The selector to use for DKIM key identification.
 
             For example, if 'selector1' is used here, then for each domain
@@ -58,8 +56,7 @@ in
       keySize = mkOption {
         type = types.int;
         default = 2048;
-        description =
-          lib.mdDoc ''
+        description = ''
             Size of the RSA key to use to sign outgoing emails. Note that the
             maximum mandatorily verified as per RFC6376 is 2048.
           '';
diff --git a/nixos/modules/services/mail/dovecot.nix b/nixos/modules/services/mail/dovecot.nix
index 71baa2bb18524..b2a6b3ab6784b 100644
--- a/nixos/modules/services/mail/dovecot.nix
+++ b/nixos/modules/services/mail/dovecot.nix
@@ -195,25 +195,25 @@ let
         example = "Spam";
         default = name;
         readOnly = true;
-        description = lib.mdDoc "The name of the mailbox.";
+        description = "The name of the mailbox.";
       };
       auto = mkOption {
         type = types.enum [ "no" "create" "subscribe" ];
         default = "no";
         example = "subscribe";
-        description = lib.mdDoc "Whether to automatically create or create and subscribe to the mailbox or not.";
+        description = "Whether to automatically create or create and subscribe to the mailbox or not.";
       };
       specialUse = mkOption {
         type = types.nullOr (types.enum [ "All" "Archive" "Drafts" "Flagged" "Junk" "Sent" "Trash" ]);
         default = null;
         example = "Junk";
-        description = lib.mdDoc "Null if no special use flag is set. Other than that every use flag mentioned in the RFC is valid.";
+        description = "Null if no special use flag is set. Other than that every use flag mentioned in the RFC is valid.";
       };
       autoexpunge = mkOption {
         type = types.nullOr types.str;
         default = null;
         example = "60d";
-        description = lib.mdDoc ''
+        description = ''
           To automatically remove all email from the mailbox which is older than the
           specified time.
         '';
@@ -228,37 +228,37 @@ in
   ];
 
   options.services.dovecot2 = {
-    enable = mkEnableOption (lib.mdDoc "the dovecot 2.x POP3/IMAP server");
+    enable = mkEnableOption "the dovecot 2.x POP3/IMAP server";
 
-    enablePop3 = mkEnableOption (lib.mdDoc "starting the POP3 listener (when Dovecot is enabled)");
+    enablePop3 = mkEnableOption "starting the POP3 listener (when Dovecot is enabled)";
 
-    enableImap = mkEnableOption (lib.mdDoc "starting the IMAP listener (when Dovecot is enabled)") // { default = true; };
+    enableImap = mkEnableOption "starting the IMAP listener (when Dovecot is enabled)" // { default = true; };
 
-    enableLmtp = mkEnableOption (lib.mdDoc "starting the LMTP listener (when Dovecot is enabled)");
+    enableLmtp = mkEnableOption "starting the LMTP listener (when Dovecot is enabled)";
 
     protocols = mkOption {
       type = types.listOf types.str;
       default = [];
-      description = lib.mdDoc "Additional listeners to start when Dovecot is enabled.";
+      description = "Additional listeners to start when Dovecot is enabled.";
     };
 
     user = mkOption {
       type = types.str;
       default = "dovecot2";
-      description = lib.mdDoc "Dovecot user name.";
+      description = "Dovecot user name.";
     };
 
     group = mkOption {
       type = types.str;
       default = "dovecot2";
-      description = lib.mdDoc "Dovecot group name.";
+      description = "Dovecot group name.";
     };
 
     extraConfig = mkOption {
       type = types.lines;
       default = "";
       example = "mail_debug = yes";
-      description = lib.mdDoc "Additional entries to put verbatim into Dovecot's config file.";
+      description = "Additional entries to put verbatim into Dovecot's config file.";
     };
 
     mailPlugins =
@@ -268,7 +268,7 @@ in
             enable = mkOption {
               type = types.listOf types.str;
               default = [];
-              description = lib.mdDoc "mail plugins to enable as a list of strings to append to the ${hint} `$mail_plugins` configuration variable";
+              description = "mail plugins to enable as a list of strings to append to the ${hint} `$mail_plugins` configuration variable";
             };
           };
         };
@@ -277,20 +277,20 @@ in
           type = with types; submodule {
             options = {
               globally = mkOption {
-                description = lib.mdDoc "Additional entries to add to the mail_plugins variable for all protocols";
+                description = "Additional entries to add to the mail_plugins variable for all protocols";
                 type = plugins "top-level";
                 example = { enable = [ "virtual" ]; };
                 default = { enable = []; };
               };
               perProtocol = mkOption {
-                description = lib.mdDoc "Additional entries to add to the mail_plugins variable, per protocol";
+                description = "Additional entries to add to the mail_plugins variable, per protocol";
                 type = attrsOf (plugins "corresponding per-protocol");
                 default = {};
                 example = { imap = [ "imap_acl" ]; };
               };
             };
           };
-          description = lib.mdDoc "Additional entries to add to the mail_plugins variable, globally and per protocol";
+          description = "Additional entries to add to the mail_plugins variable, globally and per protocol";
           example = {
             globally.enable = [ "acl" ];
             perProtocol.imap.enable = [ "imap_acl" ];
@@ -301,7 +301,7 @@ in
     configFile = mkOption {
       type = types.nullOr types.path;
       default = null;
-      description = lib.mdDoc "Config file used for the whole dovecot configuration.";
+      description = "Config file used for the whole dovecot configuration.";
       apply = v: if v != null then v else pkgs.writeText "dovecot.conf" dovecotConf;
     };
 
@@ -309,7 +309,7 @@ in
       type = types.str;
       default = "maildir:/var/spool/mail/%u"; /* Same as inbox, as postfix */
       example = "maildir:~/mail:INBOX=/var/spool/mail/%u";
-      description = lib.mdDoc ''
+      description = ''
         Location that dovecot will use for mail folders. Dovecot mail_location option.
       '';
     };
@@ -317,24 +317,24 @@ in
     mailUser = mkOption {
       type = types.nullOr types.str;
       default = null;
-      description = lib.mdDoc "Default user to store mail for virtual users.";
+      description = "Default user to store mail for virtual users.";
     };
 
     mailGroup = mkOption {
       type = types.nullOr types.str;
       default = null;
-      description = lib.mdDoc "Default group to store mail for virtual users.";
+      description = "Default group to store mail for virtual users.";
     };
 
-    createMailUser = mkEnableOption (lib.mdDoc ''automatically creating the user
+    createMailUser = mkEnableOption ''automatically creating the user
       given in {option}`services.dovecot.user` and the group
-      given in {option}`services.dovecot.group`.'') // { default = true; };
+      given in {option}`services.dovecot.group`.'' // { default = true; };
 
     modules = mkOption {
       type = types.listOf types.package;
       default = [];
       example = literalExpression "[ pkgs.dovecot_pigeonhole ]";
-      description = lib.mdDoc ''
+      description = ''
         Symlinks the contents of lib/dovecot of every given package into
         /etc/dovecot/modules. This will make the given modules available
         if a dovecot package with the module_dir patch applied is being used.
@@ -344,26 +344,26 @@ in
     sslCACert = mkOption {
       type = types.nullOr types.str;
       default = null;
-      description = lib.mdDoc "Path to the server's CA certificate key.";
+      description = "Path to the server's CA certificate key.";
     };
 
     sslServerCert = mkOption {
       type = types.nullOr types.str;
       default = null;
-      description = lib.mdDoc "Path to the server's public key.";
+      description = "Path to the server's public key.";
     };
 
     sslServerKey = mkOption {
       type = types.nullOr types.str;
       default = null;
-      description = lib.mdDoc "Path to the server's private key.";
+      description = "Path to the server's private key.";
     };
 
-    enablePAM = mkEnableOption (lib.mdDoc "creating a own Dovecot PAM service and configure PAM user logins") // { default = true; };
+    enablePAM = mkEnableOption "creating a own Dovecot PAM service and configure PAM user logins" // { default = true; };
 
-    enableDHE = mkEnableOption (lib.mdDoc "ssl_dh and generation of primes for the key exchange") // { default = true; };
+    enableDHE = mkEnableOption "ssl_dh and generation of primes for the key exchange" // { default = true; };
 
-    showPAMFailure = mkEnableOption (lib.mdDoc "showing the PAM failure message on authentication error (useful for OTPW)");
+    showPAMFailure = mkEnableOption "showing the PAM failure message on authentication error (useful for OTPW)";
 
     mailboxes = mkOption {
       type = with types; coercedTo
@@ -376,15 +376,15 @@ in
           Spam = { specialUse = "Junk"; auto = "create"; };
         }
       '';
-      description = lib.mdDoc "Configure mailboxes and auto create or subscribe them.";
+      description = "Configure mailboxes and auto create or subscribe them.";
     };
 
-    enableQuota = mkEnableOption (lib.mdDoc "the dovecot quota service");
+    enableQuota = mkEnableOption "the dovecot quota service";
 
     quotaPort = mkOption {
       type = types.str;
       default = "12340";
-      description = lib.mdDoc ''
+      description = ''
         The Port the dovecot quota service binds to.
         If using postfix, add check_policy_service inet:localhost:12340 to your smtpd_recipient_restrictions in your postfix config.
       '';
@@ -393,7 +393,7 @@ in
       type = types.str;
       default = "100G";
       example = "10G";
-      description = lib.mdDoc "Quota limit for the user in bytes. Supports suffixes b, k, M, G, T and %.";
+      description = "Quota limit for the user in bytes. Supports suffixes b, k, M, G, T and %.";
     };
 
 
@@ -505,7 +505,7 @@ in
       scripts = mkOption {
         type = types.attrsOf types.path;
         default = {};
-        description = lib.mdDoc "Sieve scripts to be executed. Key is a sequence, e.g. 'before2', 'after' etc.";
+        description = "Sieve scripts to be executed. Key is a sequence, e.g. 'before2', 'after' etc.";
       };
 
       pipeBins = mkOption {
diff --git a/nixos/modules/services/mail/dspam.nix b/nixos/modules/services/mail/dspam.nix
index 4fccd452a4fec..b81fe26524022 100644
--- a/nixos/modules/services/mail/dspam.nix
+++ b/nixos/modules/services/mail/dspam.nix
@@ -38,43 +38,43 @@ in {
       enable = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to enable the dspam spam filter.";
+        description = "Whether to enable the dspam spam filter.";
       };
 
       user = mkOption {
         type = types.str;
         default = "dspam";
-        description = lib.mdDoc "User for the dspam daemon.";
+        description = "User for the dspam daemon.";
       };
 
       group = mkOption {
         type = types.str;
         default = "dspam";
-        description = lib.mdDoc "Group for the dspam daemon.";
+        description = "Group for the dspam daemon.";
       };
 
       storageDriver = mkOption {
         type = types.str;
         default = "hash";
-        description =  lib.mdDoc "Storage driver backend to use for dspam.";
+        description = "Storage driver backend to use for dspam.";
       };
 
       domainSocket = mkOption {
         type = types.nullOr types.path;
         default = defaultSock;
-        description = lib.mdDoc "Path to local domain socket which is used for communication with the daemon. Set to null to disable UNIX socket.";
+        description = "Path to local domain socket which is used for communication with the daemon. Set to null to disable UNIX socket.";
       };
 
       extraConfig = mkOption {
         type = types.lines;
         default = "";
-        description = lib.mdDoc "Additional dspam configuration.";
+        description = "Additional dspam configuration.";
       };
 
       maintenanceInterval = mkOption {
         type = types.nullOr types.str;
         default = null;
-        description = lib.mdDoc "If set, maintenance script will be run at specified (in systemd.timer format) interval";
+        description = "If set, maintenance script will be run at specified (in systemd.timer format) interval";
       };
 
     };
diff --git a/nixos/modules/services/mail/exim.nix b/nixos/modules/services/mail/exim.nix
index 63d3fa54b23d5..0a5ba9d76d157 100644
--- a/nixos/modules/services/mail/exim.nix
+++ b/nixos/modules/services/mail/exim.nix
@@ -17,13 +17,13 @@ in
       enable = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to enable the Exim mail transfer agent.";
+        description = "Whether to enable the Exim mail transfer agent.";
       };
 
       config = mkOption {
         type = types.lines;
         default = "";
-        description = lib.mdDoc ''
+        description = ''
           Verbatim Exim configuration.  This should not contain exim_user,
           exim_group, exim_path, or spool_directory.
         '';
@@ -32,7 +32,7 @@ in
       user = mkOption {
         type = types.str;
         default = "exim";
-        description = lib.mdDoc ''
+        description = ''
           User to use when no root privileges are required.
           In particular, this applies when receiving messages and when doing
           remote deliveries.  (Local deliveries run as various non-root users,
@@ -44,7 +44,7 @@ in
       group = mkOption {
         type = types.str;
         default = "exim";
-        description = lib.mdDoc ''
+        description = ''
           Group to use when no root privileges are required.
         '';
       };
@@ -52,7 +52,7 @@ in
       spoolDir = mkOption {
         type = types.path;
         default = "/var/spool/exim";
-        description = lib.mdDoc ''
+        description = ''
           Location of the spool directory of exim.
         '';
       };
@@ -66,7 +66,7 @@ in
       queueRunnerInterval = mkOption {
         type = types.str;
         default = "5m";
-        description = lib.mdDoc ''
+        description = ''
           How often to spawn a new queue runner.
         '';
       };
diff --git a/nixos/modules/services/mail/goeland.nix b/nixos/modules/services/mail/goeland.nix
index a39d0d27d537b..158b9ef982cc5 100644
--- a/nixos/modules/services/mail/goeland.nix
+++ b/nixos/modules/services/mail/goeland.nix
@@ -8,10 +8,10 @@ let
 in
 {
   options.services.goeland = {
-    enable = mkEnableOption (mdDoc "goeland, an alternative to rss2email");
+    enable = mkEnableOption "goeland, an alternative to rss2email";
 
     settings = mkOption {
-      description = mdDoc ''
+      description = ''
         Configuration of goeland.
         See the [example config file](https://github.com/slurdge/goeland/blob/master/cmd/asset/config.default.toml) for the available options.
       '';
@@ -22,12 +22,12 @@ in
       type = types.str;
       default = "12h";
       example = "Mon, 00:00:00";
-      description = mdDoc "How often to run goeland, in systemd time format.";
+      description = "How often to run goeland, in systemd time format.";
     };
     stateDir = mkOption {
       type = types.path;
       default = "/var/lib/goeland";
-      description = mdDoc ''
+      description = ''
         The data directory for goeland where the database will reside if using the unseen filter.
         If left as the default value this directory will automatically be created before the goeland
         server starts, otherwise you are responsible for ensuring the directory exists with
diff --git a/nixos/modules/services/mail/listmonk.nix b/nixos/modules/services/mail/listmonk.nix
index d6399304cc108..482bc42696f98 100644
--- a/nixos/modules/services/mail/listmonk.nix
+++ b/nixos/modules/services/mail/listmonk.nix
@@ -35,20 +35,20 @@ let
       "app.notify_emails" = mkOption {
         type = listOf str;
         default = [ ];
-        description = lib.mdDoc "Administrator emails for system notifications";
+        description = "Administrator emails for system notifications";
       };
 
       "privacy.exportable" = mkOption {
         type = listOf str;
         default = [ "profile" "subscriptions" "campaign_views" "link_clicks" ];
-        description = lib.mdDoc
+        description =
           "List of fields which can be exported through an automatic export request";
       };
 
       "privacy.domain_blocklist" = mkOption {
         type = listOf str;
         default = [ ];
-        description = lib.mdDoc
+        description =
           "E-mail addresses with these domains are disallowed from subscribing.";
       };
 
@@ -57,30 +57,29 @@ let
           freeformType = with types; attrsOf anything;
 
           options = {
-            enabled = mkEnableOption (lib.mdDoc "this SMTP server for listmonk");
+            enabled = mkEnableOption "this SMTP server for listmonk";
             host = mkOption {
               type = types.str;
-              description = lib.mdDoc "Hostname for the SMTP server";
+              description = "Hostname for the SMTP server";
             };
             port = mkOption {
               type = types.port;
-              description = lib.mdDoc "Port for the SMTP server";
+              description = "Port for the SMTP server";
             };
             max_conns = mkOption {
               type = types.int;
-              description = lib.mdDoc
+              description =
                 "Maximum number of simultaneous connections, defaults to 1";
               default = 1;
             };
             tls_type = mkOption {
               type = types.enum [ "none" "STARTTLS" "TLS" ];
-              description =
-                lib.mdDoc "Type of TLS authentication with the SMTP server";
+              description = "Type of TLS authentication with the SMTP server";
             };
           };
         });
 
-        description = lib.mdDoc "List of outgoing SMTP servers";
+        description = "List of outgoing SMTP servers";
       };
 
       # TODO: refine this type based on the smtp one.
@@ -88,13 +87,13 @@ let
         type = listOf
           (submodule { freeformType = with types; listOf (attrsOf anything); });
         default = [ ];
-        description = lib.mdDoc "List of bounce mailboxes";
+        description = "List of bounce mailboxes";
       };
 
       messengers = mkOption {
         type = listOf str;
         default = [ ];
-        description = lib.mdDoc
+        description =
           "List of messengers, see: <https://github.com/knadh/listmonk/blob/master/models/settings.go#L64-L74> for options.";
       };
     };
@@ -103,26 +102,25 @@ in {
   ###### interface
   options = {
     services.listmonk = {
-      enable = mkEnableOption
-        (lib.mdDoc "Listmonk, this module assumes a reverse proxy to be set");
+      enable = mkEnableOption "Listmonk, this module assumes a reverse proxy to be set";
       database = {
         createLocally = mkOption {
           type = types.bool;
           default = false;
-          description = lib.mdDoc
+          description =
             "Create the PostgreSQL database and database user locally.";
         };
 
         settings = mkOption {
           default = null;
           type = with types; nullOr (submodule databaseSettingsOpts);
-          description = lib.mdDoc
+          description =
             "Dynamic settings in the PostgreSQL database, set by a SQL script, see <https://github.com/knadh/listmonk/blob/master/schema.sql#L177-L230> for details.";
         };
         mutableSettings = mkOption {
           type = types.bool;
           default = true;
-          description = lib.mdDoc ''
+          description = ''
             Database settings will be reset to the value set in this module if this is not enabled.
             Enable this if you want to persist changes you have done in the application.
           '';
@@ -131,7 +129,7 @@ in {
       package = mkPackageOption pkgs "listmonk" {};
       settings = mkOption {
         type = types.submodule { freeformType = tomlFormat.type; };
-        description = lib.mdDoc ''
+        description = ''
           Static settings set in the config.toml, see <https://github.com/knadh/listmonk/blob/master/config.toml.sample> for details.
           You can set secrets using the secretFile option with environment variables following <https://listmonk.app/docs/configuration/#environment-variables>.
         '';
@@ -139,7 +137,7 @@ in {
       secretFile = mkOption {
         type = types.nullOr types.str;
         default = null;
-        description = lib.mdDoc
+        description =
           "A file containing secrets as environment variables. See <https://listmonk.app/docs/configuration/#environment-variables> for details on supported values.";
       };
     };
diff --git a/nixos/modules/services/mail/maddy.nix b/nixos/modules/services/mail/maddy.nix
index 2c4d75e8391a4..7c67d4e6135e1 100644
--- a/nixos/modules/services/mail/maddy.nix
+++ b/nixos/modules/services/mail/maddy.nix
@@ -138,12 +138,12 @@ in {
   options = {
     services.maddy = {
 
-      enable = mkEnableOption (lib.mdDoc "Maddy, a free an open source mail server");
+      enable = mkEnableOption "Maddy, a free an open source mail server";
 
       user = mkOption {
         default = "maddy";
         type = with types; uniq str;
-        description = lib.mdDoc ''
+        description = ''
           User account under which maddy runs.
 
           ::: {.note}
@@ -157,7 +157,7 @@ in {
       group = mkOption {
         default = "maddy";
         type = with types; uniq str;
-        description = lib.mdDoc ''
+        description = ''
           Group account under which maddy runs.
 
           ::: {.note}
@@ -172,7 +172,7 @@ in {
         default = "localhost";
         type = with types; uniq str;
         example = ''example.com'';
-        description = lib.mdDoc ''
+        description = ''
           Hostname to use. It should be FQDN.
         '';
       };
@@ -181,7 +181,7 @@ in {
         default = "localhost";
         type = with types; uniq str;
         example = ''mail.example.com'';
-        description = lib.mdDoc ''
+        description = ''
           Primary MX domain to use. It should be FQDN.
         '';
       };
@@ -194,7 +194,7 @@ in {
           "example.com"
           "other.example.com"
         ];
-        description = lib.mdDoc ''
+        description = ''
           Define list of allowed domains.
         '';
       };
@@ -202,7 +202,7 @@ in {
       config = mkOption {
         type = with types; nullOr lines;
         default = defaultConfig;
-        description = lib.mdDoc ''
+        description = ''
           Server configuration, see
           [https://maddy.email](https://maddy.email) for
           more information. The default configuration of this module will setup
@@ -218,7 +218,7 @@ in {
         loader = mkOption {
           type = with types; nullOr (enum [ "off" "file" "acme" ]);
           default = "off";
-          description = lib.mdDoc ''
+          description = ''
             TLS certificates are obtained by modules called "certificate
             loaders".
 
@@ -243,14 +243,14 @@ in {
               keyPath = mkOption {
                 type = types.path;
                 example = "/etc/ssl/mx1.example.org.key";
-                description = lib.mdDoc ''
+                description = ''
                   Path to the private key used for TLS.
                 '';
               };
               certPath = mkOption {
                 type = types.path;
                 example = "/etc/ssl/mx1.example.org.crt";
-                description = lib.mdDoc ''
+                description = ''
                   Path to the certificate used for TLS.
                 '';
               };
@@ -263,7 +263,7 @@ in {
               certPath = "/etc/ssl/mx1.example.org.crt";
             }]
           '';
-          description = lib.mdDoc ''
+          description = ''
             A list of attribute sets containing paths to TLS certificates and
             keys. Maddy will use SNI if multiple pairs are selected.
           '';
@@ -271,7 +271,7 @@ in {
 
         extraConfig = mkOption {
           type = with types; nullOr lines;
-          description = lib.mdDoc ''
+          description = ''
             Arguments for the specified certificate loader.
 
             In case the `tls` loader is set, the defaults are considered secure
@@ -287,7 +287,7 @@ in {
       openFirewall = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc ''
+        description = ''
           Open the configured incoming and outgoing mail server ports.
         '';
       };
@@ -295,7 +295,7 @@ in {
       ensureAccounts = mkOption {
         type = with types; listOf str;
         default = [];
-        description = lib.mdDoc ''
+        description = ''
           List of IMAP accounts which get automatically created. Note that for
           a complete setup, user credentials for these accounts are required
           and can be created using the `ensureCredentials` option.
@@ -309,7 +309,7 @@ in {
 
       ensureCredentials = mkOption {
         default = {};
-        description = lib.mdDoc ''
+        description = ''
           List of user accounts which get automatically created if they don't
           exist yet. Note that for a complete setup, corresponding mail boxes
           have to get created using the `ensureAccounts` option.
@@ -325,7 +325,7 @@ in {
               type = types.path;
               example = "/path/to/file";
               default = null;
-              description = lib.mdDoc ''
+              description = ''
                 Specifies the path to a file containing the
                 clear text password for the user.
               '';
@@ -336,7 +336,7 @@ in {
 
       secrets = lib.mkOption {
         type = with types; listOf path;
-        description = lib.mdDoc ''
+        description = ''
           A list of files containing the various secrets. Should be in the format
           expected by systemd's `EnvironmentFile` directory. Secrets can be
           referenced in the format `{env:VAR}`.
diff --git a/nixos/modules/services/mail/mail.nix b/nixos/modules/services/mail/mail.nix
index 8e1424595b51a..fcc7ff6db91bc 100644
--- a/nixos/modules/services/mail/mail.nix
+++ b/nixos/modules/services/mail/mail.nix
@@ -14,7 +14,7 @@ with lib;
         type = types.nullOr options.security.wrappers.type.nestedTypes.elemType;
         default = null;
         internal = true;
-        description = lib.mdDoc ''
+        description = ''
           Configuration for the sendmail setuid wapper.
         '';
       };
diff --git a/nixos/modules/services/mail/mailcatcher.nix b/nixos/modules/services/mail/mailcatcher.nix
index 60abf3f2c5a02..6728bbcd3b8e2 100644
--- a/nixos/modules/services/mail/mailcatcher.nix
+++ b/nixos/modules/services/mail/mailcatcher.nix
@@ -11,37 +11,37 @@ in
   options = {
 
     services.mailcatcher = {
-      enable = mkEnableOption (lib.mdDoc "MailCatcher, an SMTP server and web interface to locally test outbound emails");
+      enable = mkEnableOption "MailCatcher, an SMTP server and web interface to locally test outbound emails";
 
       http.ip = mkOption {
         type = types.str;
         default = "127.0.0.1";
-        description = lib.mdDoc "The ip address of the http server.";
+        description = "The ip address of the http server.";
       };
 
       http.port = mkOption {
         type = types.port;
         default = 1080;
-        description = lib.mdDoc "The port address of the http server.";
+        description = "The port address of the http server.";
       };
 
       http.path = mkOption {
         type = with types; nullOr str;
         default = null;
-        description = lib.mdDoc "Prefix to all HTTP paths.";
+        description = "Prefix to all HTTP paths.";
         example = "/mailcatcher";
       };
 
       smtp.ip = mkOption {
         type = types.str;
         default = "127.0.0.1";
-        description = lib.mdDoc "The ip address of the smtp server.";
+        description = "The ip address of the smtp server.";
       };
 
       smtp.port = mkOption {
         type = types.port;
         default = 1025;
-        description = lib.mdDoc "The port address of the smtp server.";
+        description = "The port address of the smtp server.";
       };
     };
 
diff --git a/nixos/modules/services/mail/mailhog.nix b/nixos/modules/services/mail/mailhog.nix
index 14df891fbb1a4..455e5095495e3 100644
--- a/nixos/modules/services/mail/mailhog.nix
+++ b/nixos/modules/services/mail/mailhog.nix
@@ -27,36 +27,36 @@ in
   options = {
 
     services.mailhog = {
-      enable = mkEnableOption (lib.mdDoc "MailHog, web and API based SMTP testing");
+      enable = mkEnableOption "MailHog, web and API based SMTP testing";
 
       storage = mkOption {
         type = types.enum [ "maildir" "memory" ];
         default = "memory";
-        description = lib.mdDoc "Store mails on disk or in memory.";
+        description = "Store mails on disk or in memory.";
       };
 
       apiPort = mkOption {
         type = types.port;
         default = 8025;
-        description = lib.mdDoc "Port on which the API endpoint will listen.";
+        description = "Port on which the API endpoint will listen.";
       };
 
       smtpPort = mkOption {
         type = types.port;
         default = 1025;
-        description = lib.mdDoc "Port on which the SMTP endpoint will listen.";
+        description = "Port on which the SMTP endpoint will listen.";
       };
 
       uiPort = mkOption {
         type = types.port;
         default = 8025;
-        description = lib.mdDoc "Port on which the HTTP UI will listen.";
+        description = "Port on which the HTTP UI will listen.";
       };
 
       extraArgs = mkOption {
         type = types.listOf types.str;
         default = [];
-        description = lib.mdDoc "List of additional arguments to pass to the MailHog process.";
+        description = "List of additional arguments to pass to the MailHog process.";
       };
     };
   };
diff --git a/nixos/modules/services/mail/mailman.nix b/nixos/modules/services/mail/mailman.nix
index 76035625fbe17..7e7ca7e4060ec 100644
--- a/nixos/modules/services/mail/mailman.nix
+++ b/nixos/modules/services/mail/mailman.nix
@@ -88,29 +88,29 @@ in {
       enable = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Enable Mailman on this host. Requires an active MTA on the host (e.g. Postfix).";
+        description = "Enable Mailman on this host. Requires an active MTA on the host (e.g. Postfix).";
       };
 
       ldap = {
-        enable = mkEnableOption (lib.mdDoc "LDAP auth");
+        enable = mkEnableOption "LDAP auth";
         serverUri = mkOption {
           type = types.str;
           example = "ldaps://ldap.host";
-          description = lib.mdDoc ''
+          description = ''
             LDAP host to connect against.
           '';
         };
         bindDn = mkOption {
           type = types.str;
           example = "cn=root,dc=nixos,dc=org";
-          description = lib.mdDoc ''
+          description = ''
             Service account to bind against.
           '';
         };
         bindPasswordFile = mkOption {
           type = types.str;
           example = "/run/secrets/ldap-bind";
-          description = lib.mdDoc ''
+          description = ''
             Path to the file containing the bind password of the service account
             defined by [](#opt-services.mailman.ldap.bindDn).
           '';
@@ -119,7 +119,7 @@ in {
           type = types.nullOr types.str;
           default = null;
           example = "cn=admin,ou=groups,dc=nixos,dc=org";
-          description = lib.mdDoc ''
+          description = ''
             Group where a user must be a member of to gain superuser rights.
           '';
         };
@@ -127,14 +127,14 @@ in {
           query = mkOption {
             type = types.str;
             example = "(&(objectClass=inetOrgPerson)(|(uid=%(user)s)(mail=%(user)s)))";
-            description = lib.mdDoc ''
+            description = ''
               Query to find a user in the LDAP database.
             '';
           };
           ou = mkOption {
             type = types.str;
             example = "ou=users,dc=nixos,dc=org";
-            description = lib.mdDoc ''
+            description = ''
               Organizational unit to look up a user.
             '';
           };
@@ -148,21 +148,21 @@ in {
             ];
             default = "posixGroup";
             apply = v: "${toUpper (substring 0 1 v)}${substring 1 (stringLength v) v}Type";
-            description = lib.mdDoc ''
+            description = ''
               Type of group to perform a group search against.
             '';
           };
           query = mkOption {
             type = types.str;
             example = "(objectClass=groupOfNames)";
-            description = lib.mdDoc ''
+            description = ''
               Query to find a group associated to a user in the LDAP database.
             '';
           };
           ou = mkOption {
             type = types.str;
             example = "ou=groups,dc=nixos,dc=org";
-            description = lib.mdDoc ''
+            description = ''
               Organizational unit to look up a group.
             '';
           };
@@ -171,28 +171,28 @@ in {
           username = mkOption {
             default = "uid";
             type = types.str;
-            description = lib.mdDoc ''
+            description = ''
               LDAP-attribute that corresponds to the `username`-attribute in mailman.
             '';
           };
           firstName = mkOption {
             default = "givenName";
             type = types.str;
-            description = lib.mdDoc ''
+            description = ''
               LDAP-attribute that corresponds to the `firstName`-attribute in mailman.
             '';
           };
           lastName = mkOption {
             default = "sn";
             type = types.str;
-            description = lib.mdDoc ''
+            description = ''
               LDAP-attribute that corresponds to the `lastName`-attribute in mailman.
             '';
           };
           email = mkOption {
             default = "mail";
             type = types.str;
-            description = lib.mdDoc ''
+            description = ''
               LDAP-attribute that corresponds to the `email`-attribute in mailman.
             '';
           };
@@ -203,7 +203,7 @@ in {
         type = types.bool;
         default = true;
         example = false;
-        description = lib.mdDoc ''
+        description = ''
           Enable Postfix integration. Requires an active Postfix installation.
 
           If you want to use another MTA, set this option to false and configure
@@ -216,7 +216,7 @@ in {
       siteOwner = mkOption {
         type = types.str;
         example = "postmaster@example.org";
-        description = lib.mdDoc ''
+        description = ''
           Certain messages that must be delivered to a human, but which can't
           be delivered to a list owner (e.g. a bounce from a list owner), will
           be sent to this address. It should point to a human.
@@ -226,7 +226,7 @@ in {
       webHosts = mkOption {
         type = types.listOf types.str;
         default = [];
-        description = lib.mdDoc ''
+        description = ''
           The list of hostnames and/or IP addresses from which the Mailman Web
           UI will accept requests. By default, "localhost" and "127.0.0.1" are
           enabled. All additional names under which your web server accepts
@@ -238,7 +238,7 @@ in {
       webUser = mkOption {
         type = types.str;
         default = "mailman-web";
-        description = lib.mdDoc ''
+        description = ''
           User to run mailman-web as
         '';
       };
@@ -246,7 +246,7 @@ in {
       webSettings = mkOption {
         type = types.attrs;
         default = {};
-        description = lib.mdDoc ''
+        description = ''
           Overrides for the default mailman-web Django settings.
         '';
       };
@@ -254,43 +254,43 @@ in {
       restApiPassFile = mkOption {
         default = null;
         type = types.nullOr types.str;
-        description = lib.mdDoc ''
+        description = ''
           Path to the file containing the value for `MAILMAN_REST_API_PASS`.
         '';
       };
 
       serve = {
-        enable = mkEnableOption (lib.mdDoc "automatic nginx and uwsgi setup for mailman-web");
+        enable = mkEnableOption "automatic nginx and uwsgi setup for mailman-web";
 
         virtualRoot = mkOption {
           default = "/";
           example = lib.literalExpression "/lists";
           type = types.str;
-          description = lib.mdDoc ''
+          description = ''
             Path to mount the mailman-web django application on.
           '';
         };
       };
 
       extraPythonPackages = mkOption {
-        description = lib.mdDoc "Packages to add to the python environment used by mailman and mailman-web";
+        description = "Packages to add to the python environment used by mailman and mailman-web";
         type = types.listOf types.package;
         default = [];
       };
 
       settings = mkOption {
-        description = lib.mdDoc "Settings for mailman.cfg";
+        description = "Settings for mailman.cfg";
         type = types.attrsOf (types.attrsOf types.str);
         default = {};
       };
 
       hyperkitty = {
-        enable = mkEnableOption (lib.mdDoc "the Hyperkitty archiver for Mailman");
+        enable = mkEnableOption "the Hyperkitty archiver for Mailman";
 
         baseUrl = mkOption {
           type = types.str;
           default = "http://localhost:18507/archives/";
-          description = lib.mdDoc ''
+          description = ''
             Where can Mailman connect to Hyperkitty's internal API, preferably on
             localhost?
           '';
diff --git a/nixos/modules/services/mail/mlmmj.nix b/nixos/modules/services/mail/mlmmj.nix
index 66106a14499bd..80fd6d9f4e571 100644
--- a/nixos/modules/services/mail/mlmmj.nix
+++ b/nixos/modules/services/mail/mlmmj.nix
@@ -56,37 +56,37 @@ in
       enable = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Enable mlmmj";
+        description = "Enable mlmmj";
       };
 
       user = mkOption {
         type = types.str;
         default = "mlmmj";
-        description = lib.mdDoc "mailinglist local user";
+        description = "mailinglist local user";
       };
 
       group = mkOption {
         type = types.str;
         default = "mlmmj";
-        description = lib.mdDoc "mailinglist local group";
+        description = "mailinglist local group";
       };
 
       listDomain = mkOption {
         type = types.str;
         default = "localhost";
-        description = lib.mdDoc "Set the mailing list domain";
+        description = "Set the mailing list domain";
       };
 
       mailLists = mkOption {
         type = types.listOf types.str;
         default = [];
-        description = lib.mdDoc "The collection of hosted maillists";
+        description = "The collection of hosted maillists";
       };
 
       maintInterval = mkOption {
         type = types.str;
         default = "20min";
-        description = lib.mdDoc ''
+        description = ''
           Time interval between mlmmj-maintd runs, see
           {manpage}`systemd.time(7)` for format information.
         '';
diff --git a/nixos/modules/services/mail/nullmailer.nix b/nixos/modules/services/mail/nullmailer.nix
index 4fd0026dbe4eb..55a85a3544524 100644
--- a/nixos/modules/services/mail/nullmailer.nix
+++ b/nixos/modules/services/mail/nullmailer.nix
@@ -10,13 +10,13 @@ with lib;
       enable = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to enable nullmailer daemon.";
+        description = "Whether to enable nullmailer daemon.";
       };
 
       user = mkOption {
         type = types.str;
         default = "nullmailer";
-        description = lib.mdDoc ''
+        description = ''
           User to use to run nullmailer-send.
         '';
       };
@@ -24,7 +24,7 @@ with lib;
       group = mkOption {
         type = types.str;
         default = "nullmailer";
-        description = lib.mdDoc ''
+        description = ''
           Group to use to run nullmailer-send.
         '';
       };
@@ -32,13 +32,13 @@ with lib;
       setSendmail = mkOption {
         type = types.bool;
         default = true;
-        description = lib.mdDoc "Whether to set the system sendmail to nullmailer's.";
+        description = "Whether to set the system sendmail to nullmailer's.";
       };
 
       remotesFile = mkOption {
         type = types.nullOr types.str;
         default = null;
-        description = lib.mdDoc ''
+        description = ''
           Path to the `remotes` control file. This file contains a
           list of remote servers to which to send each message.
 
@@ -51,7 +51,7 @@ with lib;
         adminaddr = mkOption {
           type = types.nullOr types.str;
           default = null;
-          description = lib.mdDoc ''
+          description = ''
             If set, all recipients to users at either "localhost" (the literal string)
             or the canonical host name (from the me control attribute) are remapped to this address.
             This is provided to allow local daemons to be able to send email to
@@ -64,7 +64,7 @@ with lib;
         allmailfrom = mkOption {
           type = types.nullOr types.str;
           default = null;
-          description = lib.mdDoc ''
+          description = ''
             If set, content will override the envelope sender on all messages.
           '';
         };
@@ -72,7 +72,7 @@ with lib;
         defaultdomain = mkOption {
           type = types.nullOr types.str;
           default = null;
-          description = lib.mdDoc ''
+          description = ''
              The content of this attribute is appended to any host name that
              does not contain a period (except localhost), including defaulthost
              and idhost. Defaults to the value of the me attribute, if it exists,
@@ -83,7 +83,7 @@ with lib;
         defaulthost = mkOption {
           type = types.nullOr types.str;
           default = null;
-          description = lib.mdDoc ''
+          description = ''
              The content of this attribute is appended to any address that
              is missing a host name. Defaults to the value of the me control
              attribute, if it exists, otherwise the literal name defaulthost.
@@ -93,7 +93,7 @@ with lib;
         doublebounceto = mkOption {
           type = types.nullOr types.str;
           default = null;
-          description = lib.mdDoc ''
+          description = ''
             If the original sender was empty (the original message was a
             delivery status or disposition notification), the double bounce
             is sent to the address in this attribute.
@@ -103,7 +103,7 @@ with lib;
         helohost = mkOption {
           type = types.nullOr types.str;
           default = null;
-          description = lib.mdDoc ''
+          description = ''
             Sets  the  environment variable $HELOHOST which is used by the
             SMTP protocol module to set the parameter given to the HELO command.
             Defaults to the value of the me configuration attribute.
@@ -113,7 +113,7 @@ with lib;
         idhost = mkOption {
           type = types.nullOr types.str;
           default = null;
-          description = lib.mdDoc ''
+          description = ''
             The content of this attribute is used when building the message-id
             string for the message. Defaults to the canonicalized value of defaulthost.
           '';
@@ -122,7 +122,7 @@ with lib;
         maxpause = mkOption {
           type = with types; nullOr (oneOf [ str int ]);
           default = null;
-          description = lib.mdDoc ''
+          description = ''
              The maximum time to pause between successive queue runs, in seconds.
              Defaults to 24 hours (86400).
           '';
@@ -131,7 +131,7 @@ with lib;
         me = mkOption {
           type = types.nullOr types.str;
           default = null;
-          description = lib.mdDoc ''
+          description = ''
              The fully-qualifiled host name of the computer running nullmailer.
              Defaults to the literal name me.
           '';
@@ -140,7 +140,7 @@ with lib;
         pausetime = mkOption {
           type = with types; nullOr (oneOf [ str int ]);
           default = null;
-          description = lib.mdDoc ''
+          description = ''
             The minimum time to pause between successive queue runs when there
             are messages in the queue, in seconds. Defaults to 1 minute (60).
             Each time this timeout is reached, the timeout is doubled to a
@@ -153,7 +153,7 @@ with lib;
         remotes = mkOption {
           type = types.nullOr types.str;
           default = null;
-          description = lib.mdDoc ''
+          description = ''
             A list of remote servers to which to send each message. Each line
             contains a remote host name or address followed by an optional
             protocol string, separated by white space.
@@ -170,7 +170,7 @@ with lib;
         sendtimeout = mkOption {
           type = with types; nullOr (oneOf [ str int ]);
           default = null;
-          description = lib.mdDoc ''
+          description = ''
             The  time to wait for a remote module listed above to complete sending
             a message before killing it and trying again, in seconds.
             Defaults to 1 hour (3600).  If this is set to 0, nullmailer-send
diff --git a/nixos/modules/services/mail/offlineimap.nix b/nixos/modules/services/mail/offlineimap.nix
index 0166ec4e8d4e1..f1517232c48d8 100644
--- a/nixos/modules/services/mail/offlineimap.nix
+++ b/nixos/modules/services/mail/offlineimap.nix
@@ -7,12 +7,12 @@ let
 in {
 
   options.services.offlineimap = {
-    enable = mkEnableOption (lib.mdDoc "OfflineIMAP, a software to dispose your mailbox(es) as a local Maildir(s)");
+    enable = mkEnableOption "OfflineIMAP, a software to dispose your mailbox(es) as a local Maildir(s)";
 
     install = mkOption {
       type = types.bool;
       default = false;
-      description = lib.mdDoc ''
+      description = ''
         Whether to install a user service for Offlineimap. Once
         the service is started, emails will be fetched automatically.
 
@@ -28,19 +28,19 @@ in {
       type = types.listOf types.path;
       default = [];
       example = literalExpression "[ pkgs.pass pkgs.bash pkgs.notmuch ]";
-      description = lib.mdDoc "List of derivations to put in Offlineimap's path.";
+      description = "List of derivations to put in Offlineimap's path.";
     };
 
     onCalendar = mkOption {
       type = types.str;
       default = "*:0/3"; # every 3 minutes
-      description = lib.mdDoc "How often is offlineimap started. Default is '*:0/3' meaning every 3 minutes. See systemd.time(7) for more information about the format.";
+      description = "How often is offlineimap started. Default is '*:0/3' meaning every 3 minutes. See systemd.time(7) for more information about the format.";
     };
 
     timeoutStartSec = mkOption {
       type = types.str;
       default = "120sec"; # Kill if still alive after 2 minutes
-      description = lib.mdDoc "How long waiting for offlineimap before killing it. Default is '120sec' meaning every 2 minutes. See systemd.time(7) for more information about the format.";
+      description = "How long waiting for offlineimap before killing it. Default is '120sec' meaning every 2 minutes. See systemd.time(7) for more information about the format.";
     };
   };
   config = mkIf (cfg.enable || cfg.install) {
diff --git a/nixos/modules/services/mail/opendkim.nix b/nixos/modules/services/mail/opendkim.nix
index a377fccc7bd28..0460764ef0944 100644
--- a/nixos/modules/services/mail/opendkim.nix
+++ b/nixos/modules/services/mail/opendkim.nix
@@ -31,25 +31,25 @@ in {
       enable = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to enable the OpenDKIM sender authentication system.";
+        description = "Whether to enable the OpenDKIM sender authentication system.";
       };
 
       socket = mkOption {
         type = types.str;
         default = defaultSock;
-        description = lib.mdDoc "Socket which is used for communication with OpenDKIM.";
+        description = "Socket which is used for communication with OpenDKIM.";
       };
 
       user = mkOption {
         type = types.str;
         default = "opendkim";
-        description = lib.mdDoc "User for the daemon.";
+        description = "User for the daemon.";
       };
 
       group = mkOption {
         type = types.str;
         default = "opendkim";
-        description = lib.mdDoc "Group for the daemon.";
+        description = "Group for the daemon.";
       };
 
       domains = mkOption {
@@ -57,7 +57,7 @@ in {
         default = "csl:${config.networking.hostName}";
         defaultText = literalExpression ''"csl:''${config.networking.hostName}"'';
         example = "csl:example.com,mydomain.net";
-        description = lib.mdDoc ''
+        description = ''
           Local domains set (see `opendkim(8)` for more information on datasets).
           Messages from them are signed, not verified.
         '';
@@ -65,7 +65,7 @@ in {
 
       keyPath = mkOption {
         type = types.path;
-        description = lib.mdDoc ''
+        description = ''
           The path that opendkim should put its generated private keys into.
           The DNS settings will be found in this directory with the name selector.txt.
         '';
@@ -74,13 +74,13 @@ in {
 
       selector = mkOption {
         type = types.str;
-        description = lib.mdDoc "Selector to use when signing.";
+        description = "Selector to use when signing.";
       };
 
       configFile = mkOption {
         type = types.nullOr types.path;
         default = null;
-        description = lib.mdDoc "Additional opendkim configuration.";
+        description = "Additional opendkim configuration.";
       };
 
     };
diff --git a/nixos/modules/services/mail/opensmtpd.nix b/nixos/modules/services/mail/opensmtpd.nix
index a65c8e05a9ce8..88e7bc0193b5a 100644
--- a/nixos/modules/services/mail/opensmtpd.nix
+++ b/nixos/modules/services/mail/opensmtpd.nix
@@ -28,7 +28,7 @@ in {
       enable = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to enable the OpenSMTPD server.";
+        description = "Whether to enable the OpenSMTPD server.";
       };
 
       package = mkPackageOption pkgs "opensmtpd" { };
@@ -36,14 +36,14 @@ in {
       setSendmail = mkOption {
         type = types.bool;
         default = true;
-        description = lib.mdDoc "Whether to set the system sendmail to OpenSMTPD's.";
+        description = "Whether to set the system sendmail to OpenSMTPD's.";
       };
 
       extraServerArgs = mkOption {
         type = types.listOf types.str;
         default = [];
         example = [ "-v" "-P mta" ];
-        description = lib.mdDoc ''
+        description = ''
           Extra command line arguments provided when the smtpd process
           is started.
         '';
@@ -55,7 +55,7 @@ in {
           listen on lo
           accept for any deliver to lmtp localhost:24
         '';
-        description = lib.mdDoc ''
+        description = ''
           The contents of the smtpd.conf configuration file. See the
           OpenSMTPD documentation for syntax information.
         '';
@@ -64,7 +64,7 @@ in {
       procPackages = mkOption {
         type = types.listOf types.package;
         default = [];
-        description = lib.mdDoc ''
+        description = ''
           Packages to search for filters, tables, queues, and schedulers.
 
           Add OpenSMTPD-extras here if you want to use the filters, etc. from
diff --git a/nixos/modules/services/mail/pfix-srsd.nix b/nixos/modules/services/mail/pfix-srsd.nix
index 237f36945e4b8..7ad2b20454d08 100644
--- a/nixos/modules/services/mail/pfix-srsd.nix
+++ b/nixos/modules/services/mail/pfix-srsd.nix
@@ -12,17 +12,17 @@ with lib;
       enable = mkOption {
         default = false;
         type = types.bool;
-        description = lib.mdDoc "Whether to run the postfix sender rewriting scheme daemon.";
+        description = "Whether to run the postfix sender rewriting scheme daemon.";
       };
 
       domain = mkOption {
-        description = lib.mdDoc "The domain for which to enable srs";
+        description = "The domain for which to enable srs";
         type = types.str;
         example = "example.com";
       };
 
       secretsFile = mkOption {
-        description = lib.mdDoc ''
+        description = ''
           The secret data used to encode the SRS address.
           to generate, use a command like:
           `for n in $(seq 5); do dd if=/dev/urandom count=1 bs=1024 status=none | sha256sum | sed 's/  -$//' | sed 's/^/          /'; done`
diff --git a/nixos/modules/services/mail/postfix.nix b/nixos/modules/services/mail/postfix.nix
index 209e066a19ef8..fd78c98d0cb41 100644
--- a/nixos/modules/services/mail/postfix.nix
+++ b/nixos/modules/services/mail/postfix.nix
@@ -45,7 +45,7 @@ let
         type = types.str;
         default = name;
         example = "smtp";
-        description = lib.mdDoc ''
+        description = ''
           The name of the service to run. Defaults to the attribute set key.
         '';
       };
@@ -54,13 +54,13 @@ let
         type = types.enum [ "inet" "unix" "unix-dgram" "fifo" "pass" ];
         default = "unix";
         example = "inet";
-        description = lib.mdDoc "The type of the service";
+        description = "The type of the service";
       };
 
       private = mkOption {
         type = types.bool;
         example = false;
-        description = lib.mdDoc ''
+        description = ''
           Whether the service's sockets and storage directory is restricted to
           be only available via the mail system. If `null` is
           given it uses the postfix default `true`.
@@ -70,13 +70,13 @@ let
       privileged = mkOption {
         type = types.bool;
         example = true;
-        description = lib.mdDoc "";
+        description = "";
       };
 
       chroot = mkOption {
         type = types.bool;
         example = true;
-        description = lib.mdDoc ''
+        description = ''
           Whether the service is chrooted to have only access to the
           {option}`services.postfix.queueDir` and the closure of
           store paths specified by the {option}`program` option.
@@ -86,7 +86,7 @@ let
       wakeup = mkOption {
         type = types.int;
         example = 60;
-        description = lib.mdDoc ''
+        description = ''
           Automatically wake up the service after the specified number of
           seconds. If `0` is given, never wake the service
           up.
@@ -96,7 +96,7 @@ let
       wakeupUnusedComponent = mkOption {
         type = types.bool;
         example = false;
-        description = lib.mdDoc ''
+        description = ''
           If set to `false` the component will only be woken
           up if it is used. This is equivalent to postfix' notion of adding a
           question mark behind the wakeup time in
@@ -107,7 +107,7 @@ let
       maxproc = mkOption {
         type = types.int;
         example = 1;
-        description = lib.mdDoc ''
+        description = ''
           The maximum number of processes to spawn for this service. If the
           value is `0` it doesn't have any limit. If
           `null` is given it uses the postfix default of
@@ -119,7 +119,7 @@ let
         type = types.str;
         default = name;
         example = "smtpd";
-        description = lib.mdDoc ''
+        description = ''
           A program name specifying a Postfix service/daemon process.
           By default it's the attribute {option}`name`.
         '';
@@ -129,7 +129,7 @@ let
         type = types.listOf types.str;
         default = [];
         example = [ "-o" "smtp_helo_timeout=5" ];
-        description = lib.mdDoc ''
+        description = ''
           Arguments to pass to the {option}`command`. There is no shell
           processing involved and shell syntax is passed verbatim to the
           process.
@@ -140,7 +140,7 @@ let
         type = types.listOf types.str;
         default = [];
         internal = true;
-        description = lib.mdDoc ''
+        description = ''
           The raw configuration line for the {file}`master.cf`.
         '';
       };
@@ -221,13 +221,13 @@ let
         type = types.str;
         default = "/^.*/";
         example = "/^X-Mailer:/";
-        description = lib.mdDoc "A regexp pattern matching the header";
+        description = "A regexp pattern matching the header";
       };
       action = mkOption {
         type = types.str;
         default = "DUNNO";
         example = "BCC mail@example.com";
-        description = lib.mdDoc "The action to be executed when the pattern is matched";
+        description = "The action to be executed when the pattern is matched";
       };
     };
   };
@@ -267,25 +267,25 @@ in
       enable = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to run the Postfix mail server.";
+        description = "Whether to run the Postfix mail server.";
       };
 
       enableSmtp = mkOption {
         type = types.bool;
         default = true;
-        description = lib.mdDoc "Whether to enable smtp in master.cf.";
+        description = "Whether to enable smtp in master.cf.";
       };
 
       enableSubmission = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to enable smtp submission.";
+        description = "Whether to enable smtp submission.";
       };
 
       enableSubmissions = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc ''
+        description = ''
           Whether to enable smtp submission via smtps.
 
           According to RFC 8314 this should be preferred
@@ -308,7 +308,7 @@ in
           smtpd_client_restrictions = "permit_sasl_authenticated,reject";
           milter_macro_daemon_name = "ORIGINATING";
         };
-        description = lib.mdDoc "Options for the submission config in master.cf";
+        description = "Options for the submission config in master.cf";
       };
 
       submissionsOptions = mkOption {
@@ -324,7 +324,7 @@ in
           smtpd_client_restrictions = "permit_sasl_authenticated,reject";
           milter_macro_daemon_name = "ORIGINATING";
         };
-        description = lib.mdDoc ''
+        description = ''
           Options for the submission config via smtps in master.cf.
 
           smtpd_tls_security_level will be set to encrypt, if it is missing
@@ -337,25 +337,25 @@ in
       setSendmail = mkOption {
         type = types.bool;
         default = true;
-        description = lib.mdDoc "Whether to set the system sendmail to postfix's.";
+        description = "Whether to set the system sendmail to postfix's.";
       };
 
       user = mkOption {
         type = types.str;
         default = "postfix";
-        description = lib.mdDoc "What to call the Postfix user (must be used only for postfix).";
+        description = "What to call the Postfix user (must be used only for postfix).";
       };
 
       group = mkOption {
         type = types.str;
         default = "postfix";
-        description = lib.mdDoc "What to call the Postfix group (must be used only for postfix).";
+        description = "What to call the Postfix group (must be used only for postfix).";
       };
 
       setgidGroup = mkOption {
         type = types.str;
         default = "postdrop";
-        description = lib.mdDoc ''
+        description = ''
           How to call postfix setgid group (for postdrop). Should
           be uniquely used group.
         '';
@@ -365,7 +365,7 @@ in
         type = types.nullOr (types.listOf types.str);
         default = null;
         example = ["192.168.0.1/24"];
-        description = lib.mdDoc ''
+        description = ''
           Net masks for trusted - allowed to relay mail to third parties -
           hosts. Leave empty to use mynetworks_style configuration or use
           default (localhost-only).
@@ -375,7 +375,7 @@ in
       networksStyle = mkOption {
         type = types.str;
         default = "";
-        description = lib.mdDoc ''
+        description = ''
           Name of standard way of trusted network specification to use,
           leave blank if you specify it explicitly or if you want to use
           default (localhost-only).
@@ -385,7 +385,7 @@ in
       hostname = mkOption {
         type = types.str;
         default = "";
-        description = lib.mdDoc ''
+        description = ''
           Hostname to use. Leave blank to use just the hostname of machine.
           It should be FQDN.
         '';
@@ -394,7 +394,7 @@ in
       domain = mkOption {
         type = types.str;
         default = "";
-        description = lib.mdDoc ''
+        description = ''
           Domain to use. Leave blank to use hostname minus first component.
         '';
       };
@@ -402,7 +402,7 @@ in
       origin = mkOption {
         type = types.str;
         default = "";
-        description = lib.mdDoc ''
+        description = ''
           Origin to use in outgoing e-mail. Leave blank to use hostname.
         '';
       };
@@ -411,7 +411,7 @@ in
         type = types.nullOr (types.listOf types.str);
         default = null;
         example = ["localhost"];
-        description = lib.mdDoc ''
+        description = ''
           Full (!) list of domains we deliver locally. Leave blank for
           acceptable Postfix default.
         '';
@@ -421,7 +421,7 @@ in
         type = types.nullOr (types.listOf types.str);
         default = null;
         example = ["localdomain"];
-        description = lib.mdDoc ''
+        description = ''
           List of domains we agree to relay to. Default is empty.
         '';
       };
@@ -429,7 +429,7 @@ in
       relayHost = mkOption {
         type = types.str;
         default = "";
-        description = lib.mdDoc ''
+        description = ''
           Mail relay for outbound mail.
         '';
       };
@@ -437,7 +437,7 @@ in
       relayPort = mkOption {
         type = types.int;
         default = 25;
-        description = lib.mdDoc ''
+        description = ''
           SMTP port for relay mail relay.
         '';
       };
@@ -445,7 +445,7 @@ in
       lookupMX = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc ''
+        description = ''
           Whether relay specified is just domain whose MX must be used.
         '';
       };
@@ -453,7 +453,7 @@ in
       postmasterAlias = mkOption {
         type = types.str;
         default = "root";
-        description = lib.mdDoc ''
+        description = ''
           Who should receive postmaster e-mail. Multiple values can be added by
           separating values with comma.
         '';
@@ -462,7 +462,7 @@ in
       rootAlias = mkOption {
         type = types.str;
         default = "";
-        description = lib.mdDoc ''
+        description = ''
           Who should receive root e-mail. Blank for no redirection.
           Multiple values can be added by separating values with comma.
         '';
@@ -471,7 +471,7 @@ in
       extraAliases = mkOption {
         type = types.lines;
         default = "";
-        description = lib.mdDoc ''
+        description = ''
           Additional entries to put verbatim into aliases file, cf. man-page aliases(8).
         '';
       };
@@ -480,12 +480,12 @@ in
         type = with types; enum [ "hash" "regexp" "pcre" ];
         default = "hash";
         example = "regexp";
-        description = lib.mdDoc "The format the alias map should have. Use regexp if you want to use regular expressions.";
+        description = "The format the alias map should have. Use regexp if you want to use regular expressions.";
       };
 
       config = mkOption {
         type = with types; attrsOf (oneOf [ bool str (listOf str) ]);
-        description = lib.mdDoc ''
+        description = ''
           The main.cf configuration file as key value set.
         '';
         example = {
@@ -497,7 +497,7 @@ in
       extraConfig = mkOption {
         type = types.lines;
         default = "";
-        description = lib.mdDoc ''
+        description = ''
           Extra lines to be added verbatim to the main.cf configuration file.
         '';
       };
@@ -506,7 +506,7 @@ in
         type = types.str;
         default = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
         defaultText = literalExpression ''"''${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"'';
-        description = lib.mdDoc ''
+        description = ''
           File containing trusted certification authorities (CA) to verify certificates of mailservers contacted for mail delivery. This basically sets smtp_tls_CAfile and enables opportunistic tls. Defaults to NixOS trusted certification authorities.
         '';
       };
@@ -514,20 +514,20 @@ in
       sslCert = mkOption {
         type = types.str;
         default = "";
-        description = lib.mdDoc "SSL certificate to use.";
+        description = "SSL certificate to use.";
       };
 
       sslKey = mkOption {
         type = types.str;
         default = "";
-        description = lib.mdDoc "SSL key to use.";
+        description = "SSL key to use.";
       };
 
       recipientDelimiter = mkOption {
         type = types.str;
         default = "";
         example = "+";
-        description = lib.mdDoc ''
+        description = ''
           Delimiter for address extension: so mail to user+test can be handled by ~user/.forward+test
         '';
       };
@@ -535,7 +535,7 @@ in
       canonical = mkOption {
         type = types.lines;
         default = "";
-        description = lib.mdDoc ''
+        description = ''
           Entries for the {manpage}`canonical(5)` table.
         '';
       };
@@ -543,7 +543,7 @@ in
       virtual = mkOption {
         type = types.lines;
         default = "";
-        description = lib.mdDoc ''
+        description = ''
           Entries for the virtual alias map, cf. man-page virtual(5).
         '';
       };
@@ -551,7 +551,7 @@ in
       virtualMapType = mkOption {
         type = types.enum ["hash" "regexp" "pcre"];
         default = "hash";
-        description = lib.mdDoc ''
+        description = ''
           What type of virtual alias map file to use. Use `"regexp"` for regular expressions.
         '';
       };
@@ -559,7 +559,7 @@ in
       localRecipients = mkOption {
         type = with types; nullOr (listOf str);
         default = null;
-        description = lib.mdDoc ''
+        description = ''
           List of accepted local users. Specify a bare username, an
           `"@domain.tld"` wild-card, or a complete
           `"user@domain.tld"` address. If set, these names end
@@ -572,7 +572,7 @@ in
       transport = mkOption {
         default = "";
         type = types.lines;
-        description = lib.mdDoc ''
+        description = ''
           Entries for the transport map, cf. man-page transport(8).
         '';
       };
@@ -580,13 +580,13 @@ in
       dnsBlacklists = mkOption {
         default = [];
         type = with types; listOf str;
-        description = lib.mdDoc "dns blacklist servers to use with smtpd_client_restrictions";
+        description = "dns blacklist servers to use with smtpd_client_restrictions";
       };
 
       dnsBlacklistOverrides = mkOption {
         default = "";
         type = types.lines;
-        description = lib.mdDoc "contents of check_client_access for overriding dnsBlacklists";
+        description = "contents of check_client_access for overriding dnsBlacklists";
       };
 
       masterConfig = mkOption {
@@ -598,7 +598,7 @@ in
               args = [ "-o" "smtpd_tls_security_level=encrypt" ];
             };
           };
-        description = lib.mdDoc ''
+        description = ''
           An attribute set of service options, which correspond to the service
           definitions usually done within the Postfix
           {file}`master.cf` file.
@@ -609,46 +609,46 @@ in
         type = types.lines;
         default = "";
         example = "submission inet n - n - - smtpd";
-        description = lib.mdDoc "Extra lines to append to the generated master.cf file.";
+        description = "Extra lines to append to the generated master.cf file.";
       };
 
       enableHeaderChecks = mkOption {
         type = types.bool;
         default = false;
         example = true;
-        description = lib.mdDoc "Whether to enable postfix header checks";
+        description = "Whether to enable postfix header checks";
       };
 
       headerChecks = mkOption {
         type = types.listOf (types.submodule headerCheckOptions);
         default = [];
         example = [ { pattern = "/^X-Spam-Flag:/"; action = "REDIRECT spam@example.com"; } ];
-        description = lib.mdDoc "Postfix header checks.";
+        description = "Postfix header checks.";
       };
 
       extraHeaderChecks = mkOption {
         type = types.lines;
         default = "";
         example = "/^X-Spam-Flag:/ REDIRECT spam@example.com";
-        description = lib.mdDoc "Extra lines to /etc/postfix/header_checks file.";
+        description = "Extra lines to /etc/postfix/header_checks file.";
       };
 
       aliasFiles = mkOption {
         type = types.attrsOf types.path;
         default = {};
-        description = lib.mdDoc "Aliases' tables to be compiled and placed into /var/lib/postfix/conf.";
+        description = "Aliases' tables to be compiled and placed into /var/lib/postfix/conf.";
       };
 
       mapFiles = mkOption {
         type = types.attrsOf types.path;
         default = {};
-        description = lib.mdDoc "Maps to be compiled and placed into /var/lib/postfix/conf.";
+        description = "Maps to be compiled and placed into /var/lib/postfix/conf.";
       };
 
       useSrs = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to enable sender rewriting scheme";
+        description = "Whether to enable sender rewriting scheme";
       };
 
     };
diff --git a/nixos/modules/services/mail/postfixadmin.nix b/nixos/modules/services/mail/postfixadmin.nix
index e7ebb6fbd6480..87a9f963b1956 100644
--- a/nixos/modules/services/mail/postfixadmin.nix
+++ b/nixos/modules/services/mail/postfixadmin.nix
@@ -13,7 +13,7 @@ in
     enable = mkOption {
       type = types.bool;
       default = false;
-      description = lib.mdDoc ''
+      description = ''
         Whether to enable postfixadmin.
 
         Also enables nginx virtual host management.
@@ -25,13 +25,13 @@ in
     hostName = mkOption {
       type = types.str;
       example = "postfixadmin.example.com";
-      description = lib.mdDoc "Hostname to use for the nginx vhost";
+      description = "Hostname to use for the nginx vhost";
     };
 
     adminEmail = mkOption {
       type = types.str;
       example = "postmaster@example.com";
-      description = lib.mdDoc ''
+      description = ''
         Defines the Site Admin's email address.
         This will be used to send emails from to create mailboxes and
         from Send Email / Broadcast message pages.
@@ -40,7 +40,7 @@ in
 
     setupPasswordFile = mkOption {
       type = types.path;
-      description = lib.mdDoc ''
+      description = ''
         Password file for the admin.
         Generate with `php -r "echo password_hash('some password here', PASSWORD_DEFAULT);"`
       '';
@@ -50,7 +50,7 @@ in
       username = mkOption {
         type = types.str;
         default = "postfixadmin";
-        description = lib.mdDoc ''
+        description = ''
           Username for the postgresql connection.
           If `database.host` is set to `localhost`, a unix user and group of the same name will be created as well.
         '';
@@ -58,7 +58,7 @@ in
       host = mkOption {
         type = types.str;
         default = "localhost";
-        description = lib.mdDoc ''
+        description = ''
           Host of the postgresql server. If this is not set to
           `localhost`, you have to create the
           postgresql user and database yourself, with appropriate
@@ -67,19 +67,19 @@ in
       };
       passwordFile = mkOption {
         type = types.path;
-        description = lib.mdDoc "Password file for the postgresql connection. Must be readable by user `nginx`.";
+        description = "Password file for the postgresql connection. Must be readable by user `nginx`.";
       };
       dbname = mkOption {
         type = types.str;
         default = "postfixadmin";
-        description = lib.mdDoc "Name of the postgresql database";
+        description = "Name of the postgresql database";
       };
     };
 
     extraConfig = mkOption {
       type = types.lines;
       default = "";
-      description = lib.mdDoc "Extra configuration for the postfixadmin instance, see postfixadmin's config.inc.php for available options.";
+      description = "Extra configuration for the postfixadmin instance, see postfixadmin's config.inc.php for available options.";
     };
   };
 
diff --git a/nixos/modules/services/mail/postgrey.nix b/nixos/modules/services/mail/postgrey.nix
index fdfa08946ddf0..7c206e3725e6b 100644
--- a/nixos/modules/services/mail/postgrey.nix
+++ b/nixos/modules/services/mail/postgrey.nix
@@ -15,12 +15,12 @@ with lib; let
         type = nullOr str;
         default = null;
         example = "127.0.0.1";
-        description = lib.mdDoc "The address to bind to. Localhost if null";
+        description = "The address to bind to. Localhost if null";
       };
       port = mkOption {
         type = natural';
         default = 10030;
-        description = lib.mdDoc "Tcp port to bind to";
+        description = "Tcp port to bind to";
       };
     };
   };
@@ -30,13 +30,13 @@ with lib; let
       path = mkOption {
         type = path;
         default = "/run/postgrey.sock";
-        description = lib.mdDoc "Path of the unix socket";
+        description = "Path of the unix socket";
       };
 
       mode = mkOption {
         type = str;
         default = "0777";
-        description = lib.mdDoc "Mode of the unix socket";
+        description = "Mode of the unix socket";
       };
     };
   };
@@ -59,7 +59,7 @@ in {
       enable = mkOption {
         type = bool;
         default = false;
-        description = lib.mdDoc "Whether to run the Postgrey daemon";
+        description = "Whether to run the Postgrey daemon";
       };
       socket = mkOption {
         type = socket;
@@ -71,73 +71,73 @@ in {
           addr = "127.0.0.1";
           port = 10030;
         };
-        description = lib.mdDoc "Socket to bind to";
+        description = "Socket to bind to";
       };
       greylistText = mkOption {
         type = str;
         default = "Greylisted for %%s seconds";
-        description = lib.mdDoc "Response status text for greylisted messages; use %%s for seconds left until greylisting is over and %%r for mail domain of recipient";
+        description = "Response status text for greylisted messages; use %%s for seconds left until greylisting is over and %%r for mail domain of recipient";
       };
       greylistAction = mkOption {
         type = str;
         default = "DEFER_IF_PERMIT";
-        description = lib.mdDoc "Response status for greylisted messages (see access(5))";
+        description = "Response status for greylisted messages (see access(5))";
       };
       greylistHeader = mkOption {
         type = str;
         default = "X-Greylist: delayed %%t seconds by postgrey-%%v at %%h; %%d";
-        description = lib.mdDoc "Prepend header to greylisted mails; use %%t for seconds delayed due to greylisting, %%v for the version of postgrey, %%d for the date, and %%h for the host";
+        description = "Prepend header to greylisted mails; use %%t for seconds delayed due to greylisting, %%v for the version of postgrey, %%d for the date, and %%h for the host";
       };
       delay = mkOption {
         type = natural;
         default = 300;
-        description = lib.mdDoc "Greylist for N seconds";
+        description = "Greylist for N seconds";
       };
       maxAge = mkOption {
         type = natural;
         default = 35;
-        description = lib.mdDoc "Delete entries from whitelist if they haven't been seen for N days";
+        description = "Delete entries from whitelist if they haven't been seen for N days";
       };
       retryWindow = mkOption {
         type = either str natural;
         default = 2;
         example = "12h";
-        description = lib.mdDoc "Allow N days for the first retry. Use string with appended 'h' to specify time in hours";
+        description = "Allow N days for the first retry. Use string with appended 'h' to specify time in hours";
       };
       lookupBySubnet = mkOption {
         type = bool;
         default = true;
-        description = lib.mdDoc "Strip the last N bits from IP addresses, determined by IPv4CIDR and IPv6CIDR";
+        description = "Strip the last N bits from IP addresses, determined by IPv4CIDR and IPv6CIDR";
       };
       IPv4CIDR = mkOption {
         type = natural;
         default = 24;
-        description = lib.mdDoc "Strip N bits from IPv4 addresses if lookupBySubnet is true";
+        description = "Strip N bits from IPv4 addresses if lookupBySubnet is true";
       };
       IPv6CIDR = mkOption {
         type = natural;
         default = 64;
-        description = lib.mdDoc "Strip N bits from IPv6 addresses if lookupBySubnet is true";
+        description = "Strip N bits from IPv6 addresses if lookupBySubnet is true";
       };
       privacy = mkOption {
         type = bool;
         default = true;
-        description = lib.mdDoc "Store data using one-way hash functions (SHA1)";
+        description = "Store data using one-way hash functions (SHA1)";
       };
       autoWhitelist = mkOption {
         type = nullOr natural';
         default = 5;
-        description = lib.mdDoc "Whitelist clients after successful delivery of N messages";
+        description = "Whitelist clients after successful delivery of N messages";
       };
       whitelistClients = mkOption {
         type = listOf path;
         default = [];
-        description = lib.mdDoc "Client address whitelist files (see postgrey(8))";
+        description = "Client address whitelist files (see postgrey(8))";
       };
       whitelistRecipients = mkOption {
         type = listOf path;
         default = [];
-        description = lib.mdDoc "Recipient address whitelist files (see postgrey(8))";
+        description = "Recipient address whitelist files (see postgrey(8))";
       };
     };
   };
diff --git a/nixos/modules/services/mail/postsrsd.nix b/nixos/modules/services/mail/postsrsd.nix
index 41301c8697d7c..2ebc675ab10af 100644
--- a/nixos/modules/services/mail/postsrsd.nix
+++ b/nixos/modules/services/mail/postsrsd.nix
@@ -17,24 +17,24 @@ in {
       enable = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to enable the postsrsd SRS server for Postfix.";
+        description = "Whether to enable the postsrsd SRS server for Postfix.";
       };
 
       secretsFile = mkOption {
         type = types.path;
         default = "/var/lib/postsrsd/postsrsd.secret";
-        description = lib.mdDoc "Secret keys used for signing and verification";
+        description = "Secret keys used for signing and verification";
       };
 
       domain = mkOption {
         type = types.str;
-        description = lib.mdDoc "Domain name for rewrite";
+        description = "Domain name for rewrite";
       };
 
       separator = mkOption {
         type = types.enum ["-" "=" "+"];
         default = "=";
-        description = lib.mdDoc "First separator character in generated addresses";
+        description = "First separator character in generated addresses";
       };
 
       # bindAddress = mkOption { # uncomment once 1.5 is released
@@ -46,37 +46,37 @@ in {
       forwardPort = mkOption {
         type = types.int;
         default = 10001;
-        description = lib.mdDoc "Port for the forward SRS lookup";
+        description = "Port for the forward SRS lookup";
       };
 
       reversePort = mkOption {
         type = types.int;
         default = 10002;
-        description = lib.mdDoc "Port for the reverse SRS lookup";
+        description = "Port for the reverse SRS lookup";
       };
 
       timeout = mkOption {
         type = types.int;
         default = 1800;
-        description = lib.mdDoc "Timeout for idle client connections in seconds";
+        description = "Timeout for idle client connections in seconds";
       };
 
       excludeDomains = mkOption {
         type = types.listOf types.str;
         default = [];
-        description = lib.mdDoc "Origin domains to exclude from rewriting in addition to primary domain";
+        description = "Origin domains to exclude from rewriting in addition to primary domain";
       };
 
       user = mkOption {
         type = types.str;
         default = "postsrsd";
-        description = lib.mdDoc "User for the daemon";
+        description = "User for the daemon";
       };
 
       group = mkOption {
         type = types.str;
         default = "postsrsd";
-        description = lib.mdDoc "Group for the daemon";
+        description = "Group for the daemon";
       };
 
     };
diff --git a/nixos/modules/services/mail/public-inbox.nix b/nixos/modules/services/mail/public-inbox.nix
index bab4e8bb8d107..14a2ab48fa250 100644
--- a/nixos/modules/services/mail/public-inbox.nix
+++ b/nixos/modules/services/mail/public-inbox.nix
@@ -16,12 +16,12 @@ let
     args = mkOption {
       type = with types; listOf str;
       default = [];
-      description = lib.mdDoc "Command-line arguments to pass to {manpage}`public-inbox-${proto}d(1)`.";
+      description = "Command-line arguments to pass to {manpage}`public-inbox-${proto}d(1)`.";
     };
     port = mkOption {
       type = with types; nullOr (either str port);
       default = defaultPort;
-      description = lib.mdDoc ''
+      description = ''
         Listening port.
         Beware that public-inbox uses well-known ports number to decide whether to enable TLS or not.
         Set to null and use `systemd.sockets.public-inbox-${proto}d.listenStreams`
@@ -32,13 +32,13 @@ let
       type = with types; nullOr str;
       default = null;
       example = "/path/to/fullchain.pem";
-      description = lib.mdDoc "Path to TLS certificate to use for connections to {manpage}`public-inbox-${proto}d(1)`.";
+      description = "Path to TLS certificate to use for connections to {manpage}`public-inbox-${proto}d(1)`.";
     };
     key = mkOption {
       type = with types; nullOr str;
       default = null;
       example = "/path/to/key.pem";
-      description = lib.mdDoc "Path to TLS key to use for connections to {manpage}`public-inbox-${proto}d(1)`.";
+      description = "Path to TLS key to use for connections to {manpage}`public-inbox-${proto}d(1)`.";
     };
   };
 
@@ -143,19 +143,19 @@ in
 
 {
   options.services.public-inbox = {
-    enable = mkEnableOption (lib.mdDoc "the public-inbox mail archiver");
+    enable = mkEnableOption "the public-inbox mail archiver";
     package = mkPackageOption pkgs "public-inbox" { };
     path = mkOption {
       type = with types; listOf package;
       default = [];
       example = literalExpression "with pkgs; [ spamassassin ]";
-      description = lib.mdDoc ''
+      description = ''
         Additional packages to place in the path of public-inbox-mda,
         public-inbox-watch, etc.
       '';
     };
     inboxes = mkOption {
-      description = lib.mdDoc ''
+      description = ''
         Inboxes to configure, where attribute names are inbox names.
       '';
       default = {};
@@ -164,40 +164,40 @@ in
         options.inboxdir = mkOption {
           type = types.str;
           default = "${stateDir}/inboxes/${name}";
-          description = lib.mdDoc "The absolute path to the directory which hosts the public-inbox.";
+          description = "The absolute path to the directory which hosts the public-inbox.";
         };
         options.address = mkOption {
           type = with types; listOf str;
           example = "example-discuss@example.org";
-          description = lib.mdDoc "The email addresses of the public-inbox.";
+          description = "The email addresses of the public-inbox.";
         };
         options.url = mkOption {
           type = types.nonEmptyStr;
           example = "https://example.org/lists/example-discuss";
-          description = lib.mdDoc "URL where this inbox can be accessed over HTTP.";
+          description = "URL where this inbox can be accessed over HTTP.";
         };
         options.description = mkOption {
           type = types.str;
           example = "user/dev discussion of public-inbox itself";
-          description = lib.mdDoc "User-visible description for the repository.";
+          description = "User-visible description for the repository.";
           apply = pkgs.writeText "public-inbox-description-${name}";
         };
         options.newsgroup = mkOption {
           type = with types; nullOr str;
           default = null;
-          description = lib.mdDoc "NNTP group name for the inbox.";
+          description = "NNTP group name for the inbox.";
         };
         options.watch = mkOption {
           type = with types; listOf str;
           default = [];
-          description = lib.mdDoc "Paths for {manpage}`public-inbox-watch(1)` to monitor for new mail.";
+          description = "Paths for {manpage}`public-inbox-watch(1)` to monitor for new mail.";
           example = [ "maildir:/path/to/test.example.com.git" ];
         };
         options.watchheader = mkOption {
           type = with types; nullOr str;
           default = null;
           example = "List-Id:<test@example.com>";
-          description = lib.mdDoc ''
+          description = ''
             If specified, {manpage}`public-inbox-watch(1)` will only process
             mail containing a matching header.
           '';
@@ -207,20 +207,20 @@ in
             description = "list of coderepo names";
           };
           default = [];
-          description = lib.mdDoc "Nicknames of a 'coderepo' section associated with the inbox.";
+          description = "Nicknames of a 'coderepo' section associated with the inbox.";
         };
       }));
     };
     imap = {
-      enable = mkEnableOption (lib.mdDoc "the public-inbox IMAP server");
+      enable = mkEnableOption "the public-inbox IMAP server";
     } // publicInboxDaemonOptions "imap" 993;
     http = {
-      enable = mkEnableOption (lib.mdDoc "the public-inbox HTTP server");
+      enable = mkEnableOption "the public-inbox HTTP server";
       mounts = mkOption {
         type = with types; listOf str;
         default = [ "/" ];
         example = [ "/lists/archives" ];
-        description = lib.mdDoc ''
+        description = ''
           Root paths or URLs that public-inbox will be served on.
           If domain parts are present, only requests to those
           domains will be accepted.
@@ -231,7 +231,7 @@ in
         type = with types; nullOr (either str port);
         default = 80;
         example = "/run/public-inbox-httpd.sock";
-        description = lib.mdDoc ''
+        description = ''
           Listening port or systemd's ListenStream= entry
           to be used as a reverse proxy, eg. in nginx:
           `locations."/inbox".proxyPass = "http://unix:''${config.services.public-inbox.http.port}:/inbox";`
@@ -241,25 +241,25 @@ in
       };
     };
     mda = {
-      enable = mkEnableOption (lib.mdDoc "the public-inbox Mail Delivery Agent");
+      enable = mkEnableOption "the public-inbox Mail Delivery Agent";
       args = mkOption {
         type = with types; listOf str;
         default = [];
-        description = lib.mdDoc "Command-line arguments to pass to {manpage}`public-inbox-mda(1)`.";
+        description = "Command-line arguments to pass to {manpage}`public-inbox-mda(1)`.";
       };
     };
-    postfix.enable = mkEnableOption (lib.mdDoc "the integration into Postfix");
+    postfix.enable = mkEnableOption "the integration into Postfix";
     nntp = {
-      enable = mkEnableOption (lib.mdDoc "the public-inbox NNTP server");
+      enable = mkEnableOption "the public-inbox NNTP server";
     } // publicInboxDaemonOptions "nntp" 563;
     spamAssassinRules = mkOption {
       type = with types; nullOr path;
       default = "${cfg.package.sa_config}/user/.spamassassin/user_prefs";
       defaultText = literalExpression "\${cfg.package.sa_config}/user/.spamassassin/user_prefs";
-      description = lib.mdDoc "SpamAssassin configuration specific to public-inbox.";
+      description = "SpamAssassin configuration specific to public-inbox.";
     };
     settings = mkOption {
-      description = lib.mdDoc ''
+      description = ''
         Settings for the [public-inbox config file](https://public-inbox.org/public-inbox-config.html).
       '';
       default = {};
@@ -267,7 +267,7 @@ in
         freeformType = gitIni.type;
         options.publicinbox = mkOption {
           default = {};
-          description = lib.mdDoc "public inboxes";
+          description = "public inboxes";
           type = types.submodule {
             # Support both global options like `services.public-inbox.settings.publicinbox.imapserver`
             # and inbox specific options like `services.public-inbox.settings.publicinbox.foo.address`.
@@ -276,30 +276,30 @@ in
             options.css = mkOption {
               type = with types; listOf str;
               default = [];
-              description = lib.mdDoc "The local path name of a CSS file for the PSGI web interface.";
+              description = "The local path name of a CSS file for the PSGI web interface.";
             };
             options.imapserver = mkOption {
               type = with types; listOf str;
               default = [];
               example = [ "imap.public-inbox.org" ];
-              description = lib.mdDoc "IMAP URLs to this public-inbox instance";
+              description = "IMAP URLs to this public-inbox instance";
             };
             options.nntpserver = mkOption {
               type = with types; listOf str;
               default = [];
               example = [ "nntp://news.public-inbox.org" "nntps://news.public-inbox.org" ];
-              description = lib.mdDoc "NNTP URLs to this public-inbox instance";
+              description = "NNTP URLs to this public-inbox instance";
             };
             options.pop3server = mkOption {
               type = with types; listOf str;
               default = [];
               example = [ "pop.public-inbox.org" ];
-              description = lib.mdDoc "POP3 URLs to this public-inbox instance";
+              description = "POP3 URLs to this public-inbox instance";
             };
             options.wwwlisting = mkOption {
               type = with types; enum [ "all" "404" "match=domain" ];
               default = "404";
-              description = lib.mdDoc ''
+              description = ''
                 Controls which lists (if any) are listed for when the root
                 public-inbox URL is accessed over HTTP.
               '';
@@ -309,7 +309,7 @@ in
         options.publicinboxmda.spamcheck = mkOption {
           type = with types; enum [ "spamc" "none" ];
           default = "none";
-          description = lib.mdDoc ''
+          description = ''
             If set to spamc, {manpage}`public-inbox-watch(1)` will filter spam
             using SpamAssassin.
           '';
@@ -317,7 +317,7 @@ in
         options.publicinboxwatch.spamcheck = mkOption {
           type = with types; enum [ "spamc" "none" ];
           default = "none";
-          description = lib.mdDoc ''
+          description = ''
             If set to spamc, {manpage}`public-inbox-watch(1)` will filter spam
             using SpamAssassin.
           '';
@@ -326,29 +326,29 @@ in
           type = with types; nullOr str;
           default = null;
           example = "maildir:/path/to/spam";
-          description = lib.mdDoc ''
+          description = ''
             If set, mail in this maildir will be trained as spam and
             deleted from all watched inboxes
           '';
         };
         options.coderepo = mkOption {
           default = {};
-          description = lib.mdDoc "code repositories";
+          description = "code repositories";
           type = types.attrsOf (types.submodule {
             freeformType = types.attrsOf iniAtom;
             options.cgitUrl = mkOption {
               type = types.str;
-              description = lib.mdDoc "URL of a cgit instance";
+              description = "URL of a cgit instance";
             };
             options.dir = mkOption {
               type = types.str;
-              description = lib.mdDoc "Path to a git repository";
+              description = "Path to a git repository";
             };
           });
         };
       };
     };
-    openFirewall = mkEnableOption (lib.mdDoc "opening the firewall when using a port option");
+    openFirewall = mkEnableOption "opening the firewall when using a port option";
   };
   config = mkIf cfg.enable {
     assertions = [
diff --git a/nixos/modules/services/mail/roundcube.nix b/nixos/modules/services/mail/roundcube.nix
index 3f1a695ab91ae..4499532ace897 100644
--- a/nixos/modules/services/mail/roundcube.nix
+++ b/nixos/modules/services/mail/roundcube.nix
@@ -14,7 +14,7 @@ in
     enable = mkOption {
       type = types.bool;
       default = false;
-      description = lib.mdDoc ''
+      description = ''
         Whether to enable roundcube.
 
         Also enables nginx virtual host management.
@@ -26,7 +26,7 @@ in
     hostName = mkOption {
       type = types.str;
       example = "webmail.example.com";
-      description = lib.mdDoc "Hostname to use for the nginx vhost";
+      description = "Hostname to use for the nginx vhost";
     };
 
     package = mkPackageOption pkgs "roundcube" {
@@ -37,7 +37,7 @@ in
       username = mkOption {
         type = types.str;
         default = "roundcube";
-        description = lib.mdDoc ''
+        description = ''
           Username for the postgresql connection.
           If `database.host` is set to `localhost`, a unix user and group of the same name will be created as well.
         '';
@@ -45,7 +45,7 @@ in
       host = mkOption {
         type = types.str;
         default = "localhost";
-        description = lib.mdDoc ''
+        description = ''
           Host of the postgresql server. If this is not set to
           `localhost`, you have to create the
           postgresql user and database yourself, with appropriate
@@ -54,12 +54,12 @@ in
       };
       password = mkOption {
         type = types.str;
-        description = lib.mdDoc "Password for the postgresql connection. Do not use: the password will be stored world readable in the store; use `passwordFile` instead.";
+        description = "Password for the postgresql connection. Do not use: the password will be stored world readable in the store; use `passwordFile` instead.";
         default = "";
       };
       passwordFile = mkOption {
         type = types.str;
-        description = lib.mdDoc ''
+        description = ''
           Password file for the postgresql connection.
           Must be formatted according to PostgreSQL .pgpass standard (see https://www.postgresql.org/docs/current/libpq-pgpass.html)
           but only one line, no comments and readable by user `nginx`.
@@ -69,14 +69,14 @@ in
       dbname = mkOption {
         type = types.str;
         default = "roundcube";
-        description = lib.mdDoc "Name of the postgresql database";
+        description = "Name of the postgresql database";
       };
     };
 
     plugins = mkOption {
       type = types.listOf types.str;
       default = [];
-      description = lib.mdDoc ''
+      description = ''
         List of roundcube plugins to enable. Currently, only those directly shipped with Roundcube are supported.
       '';
     };
@@ -85,7 +85,7 @@ in
       type = types.listOf types.package;
       default = [];
       example = literalExpression "with pkgs.aspellDicts; [ en fr de ]";
-      description = lib.mdDoc ''
+      description = ''
         List of aspell dictionaries for spell checking. If empty, spell checking is disabled.
       '';
     };
@@ -93,7 +93,7 @@ in
     maxAttachmentSize = mkOption {
       type = types.int;
       default = 18;
-      description = lib.mdDoc ''
+      description = ''
         The maximum attachment size in MB.
 
         Note: Since roundcube only uses 70% of max upload values configured in php
@@ -105,13 +105,13 @@ in
     configureNginx = lib.mkOption {
       type = lib.types.bool;
       default = true;
-      description = lib.mdDoc "Configure nginx as a reverse proxy for roundcube.";
+      description = "Configure nginx as a reverse proxy for roundcube.";
     };
 
     extraConfig = mkOption {
       type = types.lines;
       default = "";
-      description = lib.mdDoc "Extra configuration for roundcube webmail instance";
+      description = "Extra configuration for roundcube webmail instance";
     };
   };
 
diff --git a/nixos/modules/services/mail/rspamd-trainer.nix b/nixos/modules/services/mail/rspamd-trainer.nix
index bb78ddf9dd471..81a0c460f0c30 100644
--- a/nixos/modules/services/mail/rspamd-trainer.nix
+++ b/nixos/modules/services/mail/rspamd-trainer.nix
@@ -10,11 +10,11 @@ let
 in {
   options.services.rspamd-trainer = {
 
-    enable = mkEnableOption (mdDoc "Spam/ham trainer for rspamd");
+    enable = mkEnableOption "Spam/ham trainer for rspamd";
 
     settings = mkOption {
       default = { };
-      description = mdDoc ''
+      description = ''
         IMAP authentication configuration for rspamd-trainer. For supplying
         the IMAP password, use the `secrets` option.
       '';
@@ -32,7 +32,7 @@ in {
 
     secrets = lib.mkOption {
       type = with types; listOf path;
-      description = lib.mdDoc ''
+      description = ''
         A list of files containing the various secrets. Should be in the
         format expected by systemd's `EnvironmentFile` directory. For the
         IMAP account password use `PASSWORD = mypassword`.
diff --git a/nixos/modules/services/mail/rspamd.nix b/nixos/modules/services/mail/rspamd.nix
index ca88d81221798..c61ddcac954ad 100644
--- a/nixos/modules/services/mail/rspamd.nix
+++ b/nixos/modules/services/mail/rspamd.nix
@@ -13,24 +13,24 @@ let
       socket = mkOption {
         type = types.str;
         example = "localhost:11333";
-        description = lib.mdDoc ''
+        description = ''
           Socket for this worker to listen on in a format acceptable by rspamd.
         '';
       };
       mode = mkOption {
         type = types.str;
         default = "0644";
-        description = lib.mdDoc "Mode to set on unix socket";
+        description = "Mode to set on unix socket";
       };
       owner = mkOption {
         type = types.str;
         default = "${cfg.user}";
-        description = lib.mdDoc "Owner to set on unix socket";
+        description = "Owner to set on unix socket";
       };
       group = mkOption {
         type = types.str;
         default = "${cfg.group}";
-        description = lib.mdDoc "Group to set on unix socket";
+        description = "Group to set on unix socket";
       };
       rawEntry = mkOption {
         type = types.str;
@@ -52,18 +52,18 @@ let
       enable = mkOption {
         type = types.nullOr types.bool;
         default = null;
-        description = lib.mdDoc "Whether to run the rspamd worker.";
+        description = "Whether to run the rspamd worker.";
       };
       name = mkOption {
         type = types.nullOr types.str;
         default = name;
-        description = lib.mdDoc "Name of the worker";
+        description = "Name of the worker";
       };
       type = mkOption {
         type = types.nullOr (types.enum [
           "normal" "controller" "fuzzy" "rspamd_proxy" "lua" "proxy"
         ]);
-        description = lib.mdDoc ''
+        description = ''
           The type of this worker. The type `proxy` is
           deprecated and only kept for backwards compatibility and should be
           replaced with `rspamd_proxy`.
@@ -77,7 +77,7 @@ let
       bindSockets = mkOption {
         type = types.listOf (types.either types.str (types.submodule bindSocketOpts));
         default = [];
-        description = lib.mdDoc ''
+        description = ''
           List of sockets to listen, in format acceptable by rspamd
         '';
         example = [{
@@ -94,21 +94,21 @@ let
       count = mkOption {
         type = types.nullOr types.int;
         default = null;
-        description = lib.mdDoc ''
+        description = ''
           Number of worker instances to run
         '';
       };
       includes = mkOption {
         type = types.listOf types.str;
         default = [];
-        description = lib.mdDoc ''
+        description = ''
           List of files to include in configuration
         '';
       };
       extraConfig = mkOption {
         type = types.lines;
         default = "";
-        description = lib.mdDoc "Additional entries to put verbatim into worker section of rspamd config file.";
+        description = "Additional entries to put verbatim into worker section of rspamd config file.";
       };
     };
     config = mkIf (name == "normal" || name == "controller" || name == "fuzzy" || name == "rspamd_proxy") {
@@ -186,7 +186,7 @@ let
       enable = mkOption {
         type = types.bool;
         default = true;
-        description = lib.mdDoc ''
+        description = ''
           Whether this file ${prefix} should be generated.  This
           option allows specific ${prefix} files to be disabled.
         '';
@@ -195,12 +195,12 @@ let
       text = mkOption {
         default = null;
         type = types.nullOr types.lines;
-        description = lib.mdDoc "Text of the file.";
+        description = "Text of the file.";
       };
 
       source = mkOption {
         type = types.path;
-        description = lib.mdDoc "Path of the source file.";
+        description = "Path of the source file.";
       };
     };
     config = {
@@ -227,18 +227,18 @@ in
 
     services.rspamd = {
 
-      enable = mkEnableOption (lib.mdDoc "rspamd, the Rapid spam filtering system");
+      enable = mkEnableOption "rspamd, the Rapid spam filtering system";
 
       debug = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to run the rspamd daemon in debug mode.";
+        description = "Whether to run the rspamd daemon in debug mode.";
       };
 
       locals = mkOption {
         type = with types; attrsOf (submodule (configFileModule "locals"));
         default = {};
-        description = lib.mdDoc ''
+        description = ''
           Local configuration files, written into {file}`/etc/rspamd/local.d/{name}`.
         '';
         example = literalExpression ''
@@ -251,7 +251,7 @@ in
       overrides = mkOption {
         type = with types; attrsOf (submodule (configFileModule "overrides"));
         default = {};
-        description = lib.mdDoc ''
+        description = ''
           Overridden configuration files, written into {file}`/etc/rspamd/override.d/{name}`.
         '';
         example = literalExpression ''
@@ -264,7 +264,7 @@ in
       localLuaRules = mkOption {
         default = null;
         type = types.nullOr types.path;
-        description = lib.mdDoc ''
+        description = ''
           Path of file to link to {file}`/etc/rspamd/rspamd.local.lua` for local
           rules written in Lua
         '';
@@ -272,7 +272,7 @@ in
 
       workers = mkOption {
         type = with types; attrsOf (submodule workerOpts);
-        description = lib.mdDoc ''
+        description = ''
           Attribute set of workers to start.
         '';
         default = {
@@ -301,7 +301,7 @@ in
       extraConfig = mkOption {
         type = types.lines;
         default = "";
-        description = lib.mdDoc ''
+        description = ''
           Extra configuration to add at the end of the rspamd configuration
           file.
         '';
@@ -310,7 +310,7 @@ in
       user = mkOption {
         type = types.str;
         default = "rspamd";
-        description = lib.mdDoc ''
+        description = ''
           User to use when no root privileges are required.
         '';
       };
@@ -318,7 +318,7 @@ in
       group = mkOption {
         type = types.str;
         default = "rspamd";
-        description = lib.mdDoc ''
+        description = ''
           Group to use when no root privileges are required.
         '';
       };
@@ -327,12 +327,12 @@ in
         enable = mkOption {
           type = types.bool;
           default = false;
-          description = lib.mdDoc "Add rspamd milter to postfix main.conf";
+          description = "Add rspamd milter to postfix main.conf";
         };
 
         config = mkOption {
           type = with types; attrsOf (oneOf [ bool str (listOf str) ]);
-          description = lib.mdDoc ''
+          description = ''
             Addon to postfix configuration
           '';
           default = {
diff --git a/nixos/modules/services/mail/rss2email.nix b/nixos/modules/services/mail/rss2email.nix
index 4939f979cafbe..c3327f7b436cd 100644
--- a/nixos/modules/services/mail/rss2email.nix
+++ b/nixos/modules/services/mail/rss2email.nix
@@ -15,24 +15,24 @@ in {
       enable = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to enable rss2email.";
+        description = "Whether to enable rss2email.";
       };
 
       to = mkOption {
         type = types.str;
-        description = lib.mdDoc "Mail address to which to send emails";
+        description = "Mail address to which to send emails";
       };
 
       interval = mkOption {
         type = types.str;
         default = "12h";
-        description = lib.mdDoc "How often to check the feeds, in systemd interval format";
+        description = "How often to check the feeds, in systemd interval format";
       };
 
       config = mkOption {
         type = with types; attrsOf (oneOf [ str int bool ]);
         default = {};
-        description = lib.mdDoc ''
+        description = ''
           The configuration to give rss2email.
 
           Default will use system-wide `sendmail` to send the
@@ -49,18 +49,18 @@ in {
       };
 
       feeds = mkOption {
-        description = lib.mdDoc "The feeds to watch.";
+        description = "The feeds to watch.";
         type = types.attrsOf (types.submodule {
           options = {
             url = mkOption {
               type = types.str;
-              description = lib.mdDoc "The URL at which to fetch the feed.";
+              description = "The URL at which to fetch the feed.";
             };
 
             to = mkOption {
               type = with types; nullOr str;
               default = null;
-              description = lib.mdDoc ''
+              description = ''
                 Email address to which to send feed items.
 
                 If `null`, this will not be set in the
diff --git a/nixos/modules/services/mail/schleuder.nix b/nixos/modules/services/mail/schleuder.nix
index 2991418dd8042..ca07b879071ca 100644
--- a/nixos/modules/services/mail/schleuder.nix
+++ b/nixos/modules/services/mail/schleuder.nix
@@ -18,10 +18,10 @@ let
 in
 {
   options.services.schleuder = {
-    enable = lib.mkEnableOption (lib.mdDoc "Schleuder secure remailer");
-    enablePostfix = lib.mkEnableOption (lib.mdDoc "automatic postfix integration") // { default = true; };
+    enable = lib.mkEnableOption "Schleuder secure remailer";
+    enablePostfix = lib.mkEnableOption "automatic postfix integration" // { default = true; };
     lists = lib.mkOption {
-      description = lib.mdDoc ''
+      description = ''
         List of list addresses that should be handled by Schleuder.
 
         Note that this is only handled by the postfix integration, and
@@ -42,7 +42,7 @@ in
       };
     */
     settings = lib.mkOption {
-      description = lib.mdDoc ''
+      description = ''
         Settings for schleuder.yml.
 
         Check the [example configuration](https://0xacab.org/schleuder/schleuder/blob/master/etc/schleuder.yml) for possible values.
@@ -51,7 +51,7 @@ in
         freeformType = settingsFormat.type;
         options.keyserver = lib.mkOption {
           type = lib.types.str;
-          description = lib.mdDoc ''
+          description = ''
             Key server from which to fetch and update keys.
 
             Note that NixOS uses a different default from upstream, since the upstream default sks-keyservers.net is deprecated.
@@ -62,12 +62,12 @@ in
       default = { };
     };
     extraSettingsFile = lib.mkOption {
-      description = lib.mdDoc "YAML file to merge into the schleuder config at runtime. This can be used for secrets such as API keys.";
+      description = "YAML file to merge into the schleuder config at runtime. This can be used for secrets such as API keys.";
       type = lib.types.nullOr lib.types.path;
       default = null;
     };
     listDefaults = lib.mkOption {
-      description = lib.mdDoc ''
+      description = ''
         Default settings for lists (list-defaults.yml).
 
         Check the [example configuration](https://0xacab.org/schleuder/schleuder/-/blob/master/etc/list-defaults.yml) for possible values.
diff --git a/nixos/modules/services/mail/spamassassin.nix b/nixos/modules/services/mail/spamassassin.nix
index 072172e31451a..e51cc0239a820 100644
--- a/nixos/modules/services/mail/spamassassin.nix
+++ b/nixos/modules/services/mail/spamassassin.nix
@@ -12,17 +12,17 @@ in
   options = {
 
     services.spamassassin = {
-      enable = mkEnableOption (lib.mdDoc "the SpamAssassin daemon");
+      enable = mkEnableOption "the SpamAssassin daemon";
 
       debug = mkOption {
         type = types.bool;
         default = false;
-        description = lib.mdDoc "Whether to run the SpamAssassin daemon in debug mode";
+        description = "Whether to run the SpamAssassin daemon in debug mode";
       };
 
       config = mkOption {
         type = types.lines;
-        description = lib.mdDoc ''
+        description = ''
           The SpamAssassin local.cf config
 
           If you are using this configuration:
@@ -57,7 +57,7 @@ in
 
       initPreConf = mkOption {
         type = with types; either str path;
-        description = lib.mdDoc "The SpamAssassin init.pre config.";
+        description = "The SpamAssassin init.pre config.";
         apply = val: if builtins.isPath val then val else pkgs.writeText "init.pre" val;
         default =
         ''
diff --git a/nixos/modules/services/mail/stalwart-mail.nix b/nixos/modules/services/mail/stalwart-mail.nix
index 8ab3497f7a175..9cc919fd117d6 100644
--- a/nixos/modules/services/mail/stalwart-mail.nix
+++ b/nixos/modules/services/mail/stalwart-mail.nix
@@ -10,13 +10,13 @@ let
 
 in {
   options.services.stalwart-mail = {
-    enable = mkEnableOption (mdDoc "the Stalwart all-in-one email server");
+    enable = mkEnableOption "the Stalwart all-in-one email server";
     package = mkPackageOption pkgs "stalwart-mail" { };
 
     settings = mkOption {
       inherit (configFormat) type;
       default = { };
-      description = mdDoc ''
+      description = ''
         Configuration options for the Stalwart email server.
         See <https://stalw.art/docs/category/configuration> for available options.
 
diff --git a/nixos/modules/services/mail/sympa.nix b/nixos/modules/services/mail/sympa.nix
index 13fc8656a2b5a..fa8d3b82aaa0b 100644
--- a/nixos/modules/services/mail/sympa.nix
+++ b/nixos/modules/services/mail/sympa.nix
@@ -80,13 +80,13 @@ in
   ###### interface
   options.services.sympa = with types; {
 
-    enable = mkEnableOption (lib.mdDoc "Sympa mailing list manager");
+    enable = mkEnableOption "Sympa mailing list manager";
 
     lang = mkOption {
       type = str;
       default = "en_US";
       example = "cs";
-      description = lib.mdDoc ''
+      description = ''
         Default Sympa language.
         See <https://github.com/sympa-community/sympa/tree/sympa-6.2/po/sympa>
         for available options.
@@ -96,7 +96,7 @@ in
     listMasters = mkOption {
       type = listOf str;
       example = [ "postmaster@sympa.example.org" ];
-      description = lib.mdDoc ''
+      description = ''
         The list of the email addresses of the listmasters
         (users authorized to perform global server commands).
       '';
@@ -106,7 +106,7 @@ in
       type = nullOr str;
       default = null;
       example = "lists.example.org";
-      description = lib.mdDoc ''
+      description = ''
         Main domain to be used in {file}`sympa.conf`.
         If `null`, one of the {option}`services.sympa.domains` is chosen for you.
       '';
@@ -119,7 +119,7 @@ in
             type = nullOr str;
             default = null;
             example = "archive.example.org";
-            description = lib.mdDoc ''
+            description = ''
               Domain part of the web interface URL (no web interface for this domain if `null`).
               DNS record of type A (or AAAA or CNAME) has to exist with this value.
             '';
@@ -128,7 +128,7 @@ in
             type = str;
             default = "/";
             example = "/sympa";
-            description = lib.mdDoc "URL path part of the web interface.";
+            description = "URL path part of the web interface.";
           };
           settings = mkOption {
             type = attrsOf (oneOf [ str int bool ]);
@@ -136,7 +136,7 @@ in
             example = {
               default_max_list_members = 3;
             };
-            description = lib.mdDoc ''
+            description = ''
               The {file}`robot.conf` configuration file as key value set.
               See <https://sympa-community.github.io/gpldoc/man/sympa.conf.5.html>
               for list of configuration parameters.
@@ -149,7 +149,7 @@ in
         };
       }));
 
-      description = lib.mdDoc ''
+      description = ''
         Email domains handled by this instance. There have
         to be MX records for keys of this attribute set.
       '';
@@ -172,13 +172,13 @@ in
         type = enum [ "SQLite" "PostgreSQL" "MySQL" ];
         default = "SQLite";
         example = "MySQL";
-        description = lib.mdDoc "Database engine to use.";
+        description = "Database engine to use.";
       };
 
       host = mkOption {
         type = nullOr str;
         default = null;
-        description = lib.mdDoc ''
+        description = ''
           Database host address.
 
           For MySQL, use `localhost` to connect using Unix domain socket.
@@ -194,14 +194,14 @@ in
       port = mkOption {
         type = nullOr port;
         default = null;
-        description = lib.mdDoc "Database port. Use `null` for default port.";
+        description = "Database port. Use `null` for default port.";
       };
 
       name = mkOption {
         type = str;
         default = if cfg.database.type == "SQLite" then "${dataDir}/sympa.sqlite" else "sympa";
         defaultText = literalExpression ''if database.type == "SQLite" then "${dataDir}/sympa.sqlite" else "sympa"'';
-        description = lib.mdDoc ''
+        description = ''
           Database name. When using SQLite this must be an absolute
           path to the database file.
         '';
@@ -210,14 +210,14 @@ in
       user = mkOption {
         type = nullOr str;
         default = user;
-        description = lib.mdDoc "Database user. The system user name is used as a default.";
+        description = "Database user. The system user name is used as a default.";
       };
 
       passwordFile = mkOption {
         type = nullOr path;
         default = null;
         example = "/run/keys/sympa-dbpassword";
-        description = lib.mdDoc ''
+        description = ''
           A file containing the password for {option}`services.sympa.database.name`.
         '';
       };
@@ -225,7 +225,7 @@ in
       createLocally = mkOption {
         type = bool;
         default = true;
-        description = lib.mdDoc "Whether to create a local database automatically.";
+        description = "Whether to create a local database automatically.";
       };
     };
 
@@ -233,13 +233,13 @@ in
       enable = mkOption {
         type = bool;
         default = true;
-        description = lib.mdDoc "Whether to enable Sympa web interface.";
+        description = "Whether to enable Sympa web interface.";
       };
 
       server = mkOption {
         type = enum [ "nginx" "none" ];
         default = "nginx";
-        description = lib.mdDoc ''
+        description = ''
           The webserver used for the Sympa web interface. Set it to `none` if you want to configure it yourself.
           Further nginx configuration can be done by adapting
           {option}`services.nginx.virtualHosts.«name»`.
@@ -249,7 +249,7 @@ in
       https = mkOption {
         type = bool;
         default = true;
-        description = lib.mdDoc ''
+        description = ''
           Whether to use HTTPS. When nginx integration is enabled, this option forces SSL and enables ACME.
           Please note that Sympa web interface always uses https links even when this option is disabled.
         '';
@@ -258,7 +258,7 @@ in
       fcgiProcs = mkOption {
         type = ints.positive;
         default = 2;
-        description = lib.mdDoc "Number of FastCGI processes to fork.";
+        description = "Number of FastCGI processes to fork.";
       };
     };
 
@@ -266,7 +266,7 @@ in
       type = mkOption {
         type = enum [ "postfix" "none" ];
         default = "postfix";
-        description = lib.mdDoc ''
+        description = ''
           Mail transfer agent (MTA) integration. Use `none` if you want to configure it yourself.
 
           The `postfix` integration sets up local Postfix instance that will pass incoming
@@ -285,7 +285,7 @@ in
           viewlogs_page_size = 50;
         }
       '';
-      description = lib.mdDoc ''
+      description = ''
         The {file}`sympa.conf` configuration file as key value set.
         See <https://sympa-community.github.io/gpldoc/man/sympa.conf.5.html>
         for list of configuration parameters.
@@ -298,16 +298,16 @@ in
           enable = mkOption {
             type = bool;
             default = true;
-            description = lib.mdDoc "Whether this file should be generated. This option allows specific files to be disabled.";
+            description = "Whether this file should be generated. This option allows specific files to be disabled.";
           };
           text = mkOption {
             default = null;
             type = nullOr lines;
-            description = lib.mdDoc "Text of the file.";
+            description = "Text of the file.";
           };
           source = mkOption {
             type = path;
-            description = lib.mdDoc "Path of the source file.";
+            description = "Path of the source file.";
           };
         };
 
@@ -321,7 +321,7 @@ in
           };
         }
       '';
-      description = lib.mdDoc "Set of files to be linked in {file}`${dataDir}`.";
+      description = "Set of files to be linked in {file}`${dataDir}`.";
     };
   };
 
diff --git a/nixos/modules/services/mail/zeyple.nix b/nixos/modules/services/mail/zeyple.nix
index 9d4bc7f712d69..6f6a1799bc0a4 100644
--- a/nixos/modules/services/mail/zeyple.nix
+++ b/nixos/modules/services/mail/zeyple.nix
@@ -16,12 +16,12 @@ let
   '';
 in {
   options.services.zeyple = {
-    enable = mkEnableOption (lib.mdDoc "Zeyple, an utility program to automatically encrypt outgoing emails with GPG");
+    enable = mkEnableOption "Zeyple, an utility program to automatically encrypt outgoing emails with GPG";
 
     user = mkOption {
       type = types.str;
       default = "zeyple";
-      description = lib.mdDoc ''
+      description = ''
         User to run Zeyple as.
 
         ::: {.note}
@@ -35,7 +35,7 @@ in {
     group = mkOption {
       type = types.str;
       default = "zeyple";
-      description = lib.mdDoc ''
+      description = ''
         Group to use to run Zeyple.
 
         ::: {.note}
@@ -49,7 +49,7 @@ in {
     settings = mkOption {
       type = ini.type;
       default = { };
-      description = lib.mdDoc ''
+      description = ''
         Zeyple configuration. refer to
         <https://github.com/infertux/zeyple/blob/master/zeyple/zeyple.conf.example>
         for details on supported values.
@@ -58,13 +58,13 @@ in {
 
     keys = mkOption {
       type = with types; listOf path;
-      description = lib.mdDoc "List of public key files that will be imported by gpg.";
+      description = "List of public key files that will be imported by gpg.";
     };
 
     rotateLogs = mkOption {
       type = types.bool;
       default = true;
-      description = lib.mdDoc "Whether to enable rotation of log files.";
+      description = "Whether to enable rotation of log files.";
     };
   };