Files
nix-config/hosts/mail/mail.nix
Jordan Holt 59f771e4e4
All checks were successful
Check flake / build-amd64-linux (push) Successful in 1m15s
hosts/mail: add SMTP relay configuration
2025-05-26 21:43:55 +01:00

92 lines
1.9 KiB
Nix

{
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";
};
}