{ pkgs, config, lib, tf, ... }: with lib; let ldapConfig = pkgs.writeText "dovecot-ldap.conf" '' uris = ldaps://auth.kittywit.ch:636 dn = cn=dovecot,dc=mail,dc=kittywit,dc=ch dnpass = "@ldap-password@" auth_bind = no ldap_version = 3 base = ou=users,dc=kittywit,dc=ch user_filter = (&(objectClass=mailAccount)(|(mail=%u)(uid=%u))) user_attrs = \ quota=quota_rule=*:bytes=%$, \ =home=/var/vmail/%d/%n/, \ =mail=maildir:/var/vmail/%d/%n/Maildir pass_attrs = mail=user,userPassword=password pass_filter = (&(objectClass=mailAccount)(mail=%u)) iterate_attrs = =user=%{ldap:mail} iterate_filter = (objectClass=mailAccount) scope = subtree default_pass_scheme = SSHA ''; ldapConfig-services = pkgs.writeText "dovecot-ldap.conf" '' uris = ldaps://auth.kittywit.ch:636 dn = cn=dovecot,dc=mail,dc=kittywit,dc=ch dnpass = "@ldap-password@" auth_bind = no ldap_version = 3 base = ou=services,dc=kittywit,dc=ch user_filter = (&(objectClass=mailAccount)(|(mail=%u)(uid=%u))) user_attrs = \ quota=quota_rule=*:bytes=%$, \ =home=/var/vmail/%d/%n/, \ =mail=maildir:/var/vmail/%d/%n/Maildir pass_attrs = mail=user,userPassword=password pass_filter = (&(objectClass=mailAccount)(mail=%u)) iterate_attrs = =user=%{ldap:mail} iterate_filter = (objectClass=mailAccount) scope = subtree default_pass_scheme = SSHA ''; in { networks.internet.extra_domains = [ "mail.kittywit.ch" "dork.dev" ]; users.groups.domain_auth.members = [ "postfix" "dovecot2" ]; services.dovecot2 = { enable = true; group = "domain_auth"; enableImap = true; enableLmtp = true; enablePAM = false; mailLocation = "maildir:/var/vmail/%d/%n/Maildir"; mailUser = "vmail"; mailGroup = "vmail"; extraConfig = '' ssl = yes ssl_cert = /run/dovecot2/ldap.conf sed -e "s!@ldap-password@!$(<${config.secrets.files.dovecot-ldap-password.path})!" ${ldapConfig-services} > /run/dovecot2/ldap-services.conf ''; networks.internet.tcp = [ 143 # imap 993 # imaps 4190 # sieve ]; }