System/home-manager/services/email.nix

99 lines
2.8 KiB
Nix

{ config, nixosConfig, lib, pkgs, ... }:
with lib; {
config = mkIf config.nathan.services.email.enable {
# Packages used for mbsync + mu + protonmail-bridge
home.packages = with pkgs; [
pass
protonmail-bridge
mu
];
# Configure protonmail as a service
systemd.user.services.protonmail-bridge = {
Unit = {
Description = "Proton Mail Bridge";
After = [ "graphical-session-pre.target" ];
Before = [ "mbsync.service" ];
PartOf = [ "graphical-session.target" ];
};
Service = {
Type = "simple";
ExecStart = ''
${pkgs.protonmail-bridge}/bin/protonmail-bridge --noninteractive
'';
};
};
# Setup accounts
accounts.email = {
maildirBasePath = ".mail";
accounts = {
"nathan@mccarty.io" = {
maildir = {
path = "nathan@mccarty.io";
};
address = "nathan@mccarty.io";
primary = true;
realName = "Nathan McCarty";
userName = "nathan@mccarty.io";
# TODO: Move into `pass`
passwordCommand = "${pkgs.pass}/bin/pass protonmail-bridge-password";
aliases = [
"thatonelutenist@protonmail.com"
"nathan@asuran.rs"
"nathan@community.rs"
];
imap = {
host = "127.0.0.1";
port = 1143;
tls = {
useStartTls = true;
certificatesFile = ../../certificates/protonmail-${nixosConfig.networking.hostName}.pem;
};
};
smtp = {
host = "127.0.0.1";
port = 1025;
tls = {
useStartTls = true;
certificatesFile = ../../certificates/protonmail-${nixosConfig.networking.hostName}.pem;
};
};
mbsync = {
enable = true;
create = "maildir";
};
mu.enable = true;
msmtp = {
enable = true;
};
};
};
};
## Enable email applications
# Setup mbsync for incoming emails
# For fun reasons this requires enabling the program and the service
programs.mbsync = {
enable = true;
};
services.mbsync = {
enable = true;
# Index manually with mu if we don't have emacs setup, but if we have the emacs service setup,
# run through emacsclient, as it will have the lock
postExec =
if config.nathan.programs.emacs.service
then
''${config.nathan.programs.emacs.package}/bin/emacsclient --eval "(mu4e-update-mail-and-index t)"''
else
"${pkgs.mu}/bin/mu index";
};
# Setup mu for indexing emails
programs.mu = {
enable = true;
};
# Setup msmtp for outbound emails
programs.msmtp = {
enable = true;
};
};
}