nix/home/email/default.nix
2025-12-02 23:00:51 -06:00

76 lines
2.2 KiB
Nix

{
pkgs,
lib,
config,
dots,
...
}:
{
options.custom.email = with lib; {
enable = mkEnableOption "Enable email";
davmail = mkEnableOption "Enable DavMail";
mbsync = mkEnableOption "Enable Mbsync";
neomutt = mkEnableOption "Enable NeoMutt";
mailcap = mkEnableOption "Enable mailcap";
};
config = lib.mkIf config.custom.email.enable {
# DavMail service (Exchange gateway)
services.davmail = {
enable = config.custom.email.davmail;
configFile = "${dots}/config/davmail/davmail.properties";
};
# Mbsync service (mail sync)
services.mbsync = {
enable = config.custom.email.mbsync;
configFile = "${dots}/config/mbsync/mbsyncrc";
frequency = "*:0/1";
};
# Install mail-related packages
home.packages =
with pkgs;
[
isync # mbsync
msmtp
sops # for password decryption
age # for sops age backend
]
++ lib.optionals config.custom.email.neomutt [
# Wrapper script for neomutt with truecolor support
(writeShellScriptBin "neomutt" ''
export TERMINFO_DIRS="${ncurses}/share/terminfo''${TERMINFO_DIRS:+:$TERMINFO_DIRS}"
exec env TERM=xterm-direct ${neomutt}/bin/neomutt "$@"
'')
]
++ lib.optionals config.custom.email.mailcap [
mailcap
w3m # HTML rendering
zathura # PDF viewer
kitty # for kitten icat
];
# Symlink config files
xdg.configFile = {
"msmtp".source = config.lib.file.mkOutOfStoreSymlink "${dots}/config/msmtp";
"neomutt".source = config.lib.file.mkOutOfStoreSymlink "${dots}/config/neomutt";
"isyncrc".source = config.lib.file.mkOutOfStoreSymlink "${dots}/config/mbsync/mbsyncrc";
};
# mailcap symlink
home.file = lib.mkIf config.custom.email.mailcap {
".mailcap".source = config.lib.file.mkOutOfStoreSymlink "${dots}/config/home/.mailcap";
};
# Create mail directories
home.activation.createMailDirs = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
mkdir -p ~/mail/personal/Inbox
mkdir -p ~/mail/uchicago/Inbox
mkdir -p ~/.cache/neomutt/headers
mkdir -p ~/.cache/neomutt/messages
mkdir -p ~/.local/state
'';
};
}