{ pkgs, lib, config, dots, xdg-config-dir, ... }: { 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"; extraPackages = with pkgs; [ sops ]; environment = { SOPS_AGE_KEY_FILE = "${xdg-config-dir}/sops/age/keys.txt"; }; }; # 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" '' exec env TERM=xterm-direct ${neomutt}/bin/neomutt "$@" '') ] ++ lib.optionals config.custom.email.mailcap [ mailcap w3m # HTML rendering zathura # PDF viewer chafa # terminal image viewer ]; # 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 ''; }; }