;;; email/notmuch/config.el -*- lexical-binding: t; -*- ;; FIXME This module is a WIP! (defvar +notmuch-home-function #'notmuch "Function for customizing the landing page for doom-emacs =notmuch.") (defvar +notmuch-sync-backend 'gmi "Which backend to use to synchrone email. Accepts a symbol or a shell command string. More specifically, this accepts one of the following symbols (see `+notmuch-get-sync-command' definition for details): `gmi' Use gmailieer (https://github.com/gauteh/lieer) `mbsync' Use isync (https://isync.sourceforge.io) `offlineimap' Use offlineimap (https://www.offlineimap.org) OR a shell command string such as \"path/to/some/shell-script.sh\" \"offlineimap && notmuch new && afew -n -t\" \"mbsync %s -a && notmuch new && afew -n -t\"") (defvar +notmuch-mail-folder "~/.mail/account.gmail" "Where your email folder is located (for use with gmailieer).") (defvar +notmuch-delete-tags '("+trash" "-inbox" "-unread") "Tags applied to mark email for deletion. When replacing the +trash tag by a different tag such as +deleted, you will need to update the notmuch-saved-searches variable accordingly.") (defvar +notmuch-spam-tags '("+spam" "-inbox" "-unread") "Tags applied to mark email as spam.") ;; ;;; Packages (use-package! notmuch :defer t :config (set-company-backend! 'notmuch-message-mode 'notmuch-company '(company-ispell company-yasnippet)) (set-popup-rule! "^\\*notmuch-hello" :side 'left :size 30 :ttl 0) (set-popup-rule! "^\\*subject:" :size 0.6 :ttl 0) (defadvice! +notmuch-search-show-thread-a (fn &rest args) "Give email buffers a sane name so they can be targeted via `display-buffer-alist' (and the :ui popup module)." :around #'notmuch-search-show-thread (letf! (defun notmuch-show (thread-id &optional elide-toggle parent-buffer query-context buffer-name) (funcall notmuch-show thread-id elide-toggle parent-buffer query-context (format "*subject:%s*" (substring buffer-name 1 -1)))) (apply fn args))) (setq notmuch-fcc-dirs nil message-kill-buffer-on-exit t message-send-mail-function 'message-send-mail-with-sendmail send-mail-function 'sendmail-send-it ;; sendmail-program "/usr/local/bin/msmtp" notmuch-search-result-format '(("date" . "%12s ") ("count" . "%-7s ") ("authors" . "%-30s ") ("subject" . "%-72s ") ("tags" . "(%s)")) notmuch-tag-formats '(("unread" (propertize tag 'face 'notmuch-tag-unread))) notmuch-saved-searches '((:name "inbox" :query "tag:inbox not tag:trash" :key "i") (:name "flagged" :query "tag:flagged" :key "f") (:name "sent" :query "tag:sent" :key "s") (:name "drafts" :query "tag:draft" :key "d")) notmuch-archive-tags '("-inbox" "-unread")) (setq-default notmuch-search-oldest-first nil) ;; only unfold unread messages in thread by default (add-hook 'notmuch-show-hook #'+notmuch-show-expand-only-unread-h) (add-hook 'doom-real-buffer-functions #'notmuch-interesting-buffer) (advice-add #'notmuch-start-notmuch-sentinel :around #'+notmuch-dont-confirm-on-kill-process-a) ;; modeline doesn't have much use in these modes (add-hook! '(notmuch-show-mode-hook notmuch-tree-mode-hook notmuch-search-mode-hook) #'hide-mode-line-mode) (map! :localleader :map (notmuch-hello-mode-map notmuch-search-mode-map notmuch-tree-mode-map notmuch-show-mode-map) :desc "Compose email" "c" #'+notmuch/compose :desc "Sync email" "u" #'+notmuch/update :desc "Quit notmuch" "q" #'+notmuch/quit :map notmuch-search-mode-map :desc "Mark as deleted" "d" #'+notmuch/search-delete :desc "Mark as spam" "s" #'+notmuch/search-spam :map notmuch-tree-mode-map :desc "Mark as deleted" "d" #'+notmuch/tree-delete :desc "Mark as spam" "s" #'+notmuch/tree-spam)) (use-package! org-mime :when (modulep! +org) :after (org notmuch) :config (setq org-mime-library 'mml)) (use-package! counsel-notmuch :when (modulep! :completion ivy) :commands counsel-notmuch :after notmuch) (use-package! helm-notmuch :when (modulep! :completion helm) :commands helm-notmuch :after notmuch) (use-package! consult-notmuch :when (modulep! :completion vertico) :commands consult-notmuch :after notmuch)