{ config, lib, pkgs, ... }: let mkThunderbirdAutoconfig = domain: pkgs.writeText "autoconfig-${domain}.xml" '' ${domain} ${domain} ${domain} ${config.mailserver.fqdn} 993 SSL %EMAILADDRESS% password-cleartext ${config.mailserver.fqdn} 587 STARTTLS %EMAILADDRESS% password-cleartext ''; mkOutlookAutodiscover = domain: pkgs.writeText "autodiscover-${domain}.xml" '' email settings IMAP ${config.mailserver.fqdn} 993 %EMAILADDRESS% on on SMTP ${config.mailserver.fqdn} 587 %EMAILADDRESS% on TLS on off ''; mailDiscoveryVirtualHosts = lib.listToAttrs ( lib.concatMap ( domain: let autoconfigXml = mkThunderbirdAutoconfig domain; autodiscoverXml = mkOutlookAutodiscover domain; in [ { name = "autoconfig.${domain}"; value = { enableACME = true; forceSSL = true; locations."= /mail/config-v1.1.xml".extraConfig = '' default_type application/xml; alias ${autoconfigXml}; ''; }; } { name = "autodiscover.${domain}"; value = { enableACME = true; forceSSL = true; locations."= /autodiscover/autodiscover.xml".extraConfig = '' default_type application/xml; alias ${autodiscoverXml}; ''; }; } ] ) config.mailserver.domains ); in { services.nginx.virtualHosts = mailDiscoveryVirtualHosts // { ${config.mailserver.fqdn}.enableACME = true; }; }