{ config, lib, pkgs, ... }: with lib; let hostname = config.instance.hostname; mailserver = "locum"; primaryNameserver = "locum"; defaultHost = "locum"; authentikHost = "locum"; lemmyHost = "locum"; userdbPasswd = pkgs.lib.passwd.stablerandom-passwd-file "userdb-passwd" config.instance.build-seed; inherit (pkgs.lib) getDomainHosts getHostIpv4 getHostFqdn; in { imports = [ (import ./informis.land/authentik.nix { inherit authentikHost; }) ]; config = { fudo = { acme.host-domains = { "imap.informis.land".extra-domains = [ "mail.informis.land" ]; "smtp.informis.land".extra-domains = [ "mail.informis.land" ]; }; zones."informis.land" = let mailserverIps = config.fudo.zones."informis.land".hosts."${mailserver}"; in { hosts = { imap = { ipv4-address = mailserverIps.ipv4-address; ipv6-address = mailserverIps.ipv6-address; }; smtp = { ipv4-address = mailserverIps.ipv4-address; ipv6-address = mailserverIps.ipv6-address; }; mail = { ipv4-address = mailserverIps.ipv4-address; ipv6-address = mailserverIps.ipv6-address; }; }; verbatim-dns-records = [ '' mail._domainkey IN TXT ( "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKiTSUDxDPwMxLMT7wzR0ZaGuGzU1xnhti0zqi6xGJVxe9O8wfpX1vTSAasGYGzg5r24Hc8tSTogUgy0uJXsIbPBiqXj3WsoL/vf7+tAmrmZA4DQn1hN+C0R/7knhTNPWKnIAMqReAH/yf3XvFGmBMpU3UGRNGc2MoCQ4iXBcbsQIDAQAB" ) ; ----- DKIM key mail for all-domains-generic-key'' ]; }; services = { authoritative-dns = { enable = hostname == primaryNameserver; nameservers.primary = primaryNameserver; ip-host-map = let networkHosts = getDomainHosts "informis.land"; ipHostPairs = map (host: nameValuePair (getHostIpv4 host) (getHostFqdn host)) networkHosts; in listToAttrs ipHostPairs; zones."informis.land" = { default-host = { inherit (config.fudo.zones."informis.land".hosts."${defaultHost}") ipv4-address ipv6-address sshfp-records; description = "informis.land"; }; ksk = config.fudo.secrets.files.dns.key-signing-keys."informis.land"; mail = { smtp-servers = [ "smtp.informis.land" ]; imap-servers = [ "imap.informis.land" ]; }; reverse-zones = [ "172.86.179.17/29" "190.2.134.0/24" ]; }; }; lemmy = { enable = hostname == lemmyHost; hostname = "informis.land"; site-name = "Informis"; smtp.host = "mail.informis.land"; }; }; postgresql.package = pkgs.postgresql_15_gssapi; system-users.userdb = { description = "User Database Lookup."; ldap-hashed-password = pkgs.lib.passwd.hash-ldap-passwd "userdb-passwd.hashed" userdbPasswd; }; secrets.host-secrets."${hostname}".userdbPasswd = { source-file = userdbPasswd; target-file = "/run/ldap/userdbPasswd"; }; mail = { enable = hostname == mailserver; debug = false; primary-domain = "informis.land"; sasl-domain = "INFORMIS.LAND"; trusted-networks = config.instance.local-networks; smtp = { hostname = "smtp.informis.land"; ssl-directory = config.security.acme.certs."smtp.informis.land".directory; }; imap = { hostname = "imap.informis.land"; ssl-directory = config.security.acme.certs."imap.informis.land".directory; }; ldap = { authentik-host = "https://authentik.informis.land"; outpost-token = readFile config.fudo.secrets.files.service-secrets."${hostname}"."authentik-ldap.token"; base = "dc=informis,dc=land"; bind-dn = "cn=userdb,ou=users,dc=informis,dc=land"; bind-password-file = config.fudo.secrets.files.service-passwords.locum.userdb; }; aliases = { alias-users = let admins = config.instance.local-admins; in { admin = admins; dmarc-reports = admins; ftp = admins; hostmaster = admins; irc = admins; postmaster = admins; root = admins; system = admins; webmaster = admins; www-data = admins; }; user-aliases = let hasAliases = _: userOpts: userOpts.email-aliases != [ ]; in mapAttrs (user: userOpts: userOpts.email-aliases) (filterAttrs hasAliases config.fudo.users); }; }; }; services.nginx = mkIf (hostname == mailserver) { enable = true; virtualHosts = { "smtp.informis.land" = { enableACME = true; forceSSL = true; locations."/".return = "404"; }; "imap.informis.land" = { enableACME = true; forceSSL = true; locations."/".return = "404"; }; }; }; }; }