{ inputs, config, ... }: let domains = [ "h0lt.com" "jdholt.com" "jordanholt.xyz" "vimium.co" "vimium.com" "vimium.co.uk" "vimium.info" "vimium.net" "vimium.org" "vimium.xyz" ]; in { imports = [ inputs.nixos-mailserver.nixosModule ]; age.secrets = { "files/services/postfix/sasl_passwd".file = "${inputs.secrets}/files/services/postfix/sasl_passwd.age"; "passwords/users/jordan".file = "${inputs.secrets}/passwords/users/jordan.age"; }; services.roundcube = { enable = true; hostName = config.mailserver.fqdn; extraConfig = '' $config['smtp_server'] = "tls://${config.mailserver.fqdn}"; $config['smtp_user'] = "%u"; $config['smtp_pass'] = "%p"; ''; plugins = [ "contextmenu" ]; }; services.nginx.enable = true; networking.firewall.allowedTCPPorts = [ 80 443 ]; mailserver = { enable = true; fqdn = "mail.vimium.com"; domains = domains; indexDir = "/var/lib/dovecot/indices"; certificateDomains = [ "imap.vimium.com" "smtp.vimium.com" ]; certificateScheme = "acme-nginx"; fullTextSearch.enable = true; loginAccounts = { "jordan@vimium.com" = { hashedPasswordFile = config.age.secrets."passwords/users/jordan".path; catchAll = domains; }; }; extraVirtualAliases = { "hostmaster@vimium.com" = "jordan@vimium.com"; "postmaster@vimium.com" = "jordan@vimium.com"; "webmaster@vimium.com" = "jordan@vimium.com"; "abuse@vimium.com" = "jordan@vimium.com"; }; }; services.postfix.config = { relayhost = "[mail.smtp2go.com]:2525"; smtp_sasl_auth_enable = "yes"; smtp_sasl_password_maps = "texthash:${ config.age.secrets."files/services/postfix/sasl_passwd".path }"; smtp_sasl_security_options = "noanonymous"; smtp_destination_concurrency_limit = "20"; header_size_limit = "4096000"; }; }