Indexing all messages can be very expensive, so some time can be saved by only indexing new messages.
136 lines
4.8 KiB
EmacsLisp
136 lines
4.8 KiB
EmacsLisp
;;; 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
|
|
:init
|
|
(after! org
|
|
(add-to-list 'org-modules 'ol-notmuch))
|
|
: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)
|
|
|
|
;;HACK temporary fix until notmuch stops abusing the completing-read-multiple api upstream
|
|
(when (featurep! :completion vertico)
|
|
(advice-add #'notmuch-read-tag-changes :filter-return (lambda (x) (mapcar #'string-trim x))))
|
|
|
|
;; 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 (featurep! +org)
|
|
:after (org notmuch)
|
|
:config (setq org-mime-library 'mml))
|
|
|
|
|
|
(use-package! counsel-notmuch
|
|
:when (featurep! :completion ivy)
|
|
:commands counsel-notmuch
|
|
:after notmuch)
|
|
|
|
|
|
(use-package! helm-notmuch
|
|
:when (featurep! :completion helm)
|
|
:commands helm-notmuch
|
|
:after notmuch)
|
|
|
|
|
|
(use-package! consult-notmuch
|
|
:when (featurep! :completion vertico)
|
|
:commands consult-notmuch
|
|
:after notmuch)
|