{ 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"; notmuch = mkEnableOption "Enable notmuch"; 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/5"; extraPackages = with pkgs; [ sops ] ++ lib.optionals config.custom.email.notmuch [ notmuch ]; postExec = lib.mkIf config.custom.email.notmuch "${pkgs.notmuch}/bin/notmuch new"; environment = { SOPS_AGE_KEY_FILE = "${xdg-config-dir}/sops/age/keys.txt"; } // lib.optionalAttrs config.custom.email.notmuch { NOTMUCH_CONFIG = "${xdg-config-dir}/notmuch/config"; }; }; # 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.notmuch [ notmuch ] ++ lib.optionals config.custom.email.mailcap [ mailcap w3m # HTML rendering zathura # PDF viewer chafa # terminal image viewer bat # text viewer with syntax highlighting ]; # 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"; } // lib.optionalAttrs config.custom.email.notmuch { "notmuch/config".source = config.lib.file.mkOutOfStoreSymlink "${dots}/config/notmuch/config"; }; # 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 ''; # Set NOTMUCH_CONFIG environment variable custom.environment.variables = lib.mkIf config.custom.email.notmuch { NOTMUCH_CONFIG = "${xdg-config-dir}/notmuch/config"; }; }; }