2020-05-09 21:41:30 -05:00
#+TITLE : email/notmuch
2020-05-10 18:26:33 -04:00
#+DATE : May 5, 2019
#+SINCE : v2.0
2020-05-09 21:41:30 -05:00
#+STARTUP : inlineimages
* Table of Contents :TOC:
- [[#description ][Description ]]
- [[#module-flags ][Module Flags ]]
- [[#plugins ][Plugins ]]
- [[#prerequisites ][Prerequisites ]]
- [[#macos ][MacOS ]]
- [[#arch-linux ][Arch Linux ]]
- [[#nixos ][NixOS ]]
- [[#opensuse ][openSUSE ]]
- [[#debianubuntu ][Debian/Ubuntu ]]
- [[#features ][Features ]]
- [[#configuration ][Configuration ]]
2021-03-05 22:16:43 -05:00
- [[#downloading-your-email ][Downloading your email ]]
2020-09-12 12:53:21 -07:00
- [[#customize-notmuch-hello-buffer ][Customize =*notmuch-hello*= buffer ]]
- [[#changing-the-notmuch-landing-page ][Changing the =notmuch= landing page ]]
2020-05-09 21:41:30 -05:00
- [[#troubleshooting ][Troubleshooting ]]
* Description
2021-05-06 22:25:48 -07:00
This module turns Emacs into an email client using ~notmuch~ .
2020-05-09 21:41:30 -05:00
** Module Flags
2021-03-05 22:16:43 -05:00
+ =+afew= Enables integration with =afew= .
2020-05-09 21:41:30 -05:00
** Plugins
+ [[https://notmuchmail.org/ ][notmuch ]]
+ [[https://github.com/org-mime/org-mime ][org-mime ]]
2021-03-05 22:16:43 -05:00
+ [[https://github.com/fuxialexander/counsel-notmuch ][counsel-notmuch ]]*
+ [[https://github.com/emacs-helm/helm-notmuch ][helm-notmuch ]]*
2020-05-09 21:41:30 -05:00
* Prerequisites
This module requires:
2020-09-12 12:53:21 -07:00
+ Either ~[[https://github.com/gauteh/lieer][gmailieer]]~ (default), ~mbsync~ or ~offlineimap~ (to sync mail with)
+ ~[[https://notmuchmail.org/][notmuch]]~ , to index and tag your downloaded messages.
2020-05-09 21:41:30 -05:00
+ ~afew~ , optionally to initially tag your downloaded messages.
** TODO MacOS
2020-11-26 09:49:22 -08:00
** Arch Linux
Run one of the following commands.
2021-03-05 20:57:25 -05:00
#+BEGIN_SRC sh
pacman -S isync notmuch #mbsync
#+END_SRC
2020-11-26 09:49:22 -08:00
#+BEGIN_SRC sh
2021-03-05 20:57:25 -05:00
pacman -S offlineimap notmuch
#+END_SRC
2020-09-12 12:53:21 -07:00
See: [[https://wiki.archlinux.org/index.php/Notmuch ][Arch Wiki - Notmuch ]]
2020-05-09 21:41:30 -05:00
** NixOS
#+BEGIN_SRC nix
environment.systemPackages = with pkgs; [
notmuch
# And one of the following
gmailieer
isync
offlineimap
];
#+END_SRC
[[https://github.com/Emiller88/dotfiles/blob/319841bd3b89e59b01d169137cceee3183aba4fc/modules/shell/mail.nix ][An example of setting up mbsync and notmuch with home-manager ]]
** TODO openSUSE
** TODO Debian/Ubuntu
2020-09-12 12:53:21 -07:00
2021-05-06 22:27:08 -07:00
* Features
| Keymap | Command | Description |
| ~SPC m u~ | =+notmuch/update= | Download, sync, and index emails with notmuch |
| ~SPC m c~ | =+notmuch/compose= | Compose new email |
2020-05-09 21:41:30 -05:00
* Configuration
2021-03-05 22:16:43 -05:00
** Downloading your email
To download your email you need a sync backend. Out of the box, this module
supports =Gmailier= (the default), =mbsync= , and =offlineimap= (ordered by
speed). You may define a custom one as well. The guides below will walk you
through setting them up with notmuch.
Later, once you've set up a sync backend and downloaded your email, you must
index your email for the first time:
#+BEGIN_SRC sh
notmuch new
#+END_SRC
2021-05-06 22:34:20 -07:00
*** lieer
[[https://github.com/gauteh/lieer ][Lieer ]], formerly called Gmailieer, is the indexing tool used by default. To install lieer, see the [[https://github.com/gauteh/lieer#installation ][installation docs ]].
2021-03-05 22:16:43 -05:00
*** offlineimap
To use [[https://www.offlineimap.org/ ][offlineimap ]], change ~+notmuch-sync-backend~ :
2020-05-09 21:41:30 -05:00
#+BEGIN_SRC emacs-lisp
2021-03-05 22:16:43 -05:00
;; add to ~/.doom.d/config.el
2020-05-09 21:41:30 -05:00
(setq +notmuch-sync-backend 'offlineimap)
#+END_SRC
2021-03-05 22:16:43 -05:00
Next, write a configuration file for =offlineimap= . [[https://github.com/OfflineIMAP/offlineimap/blob/master/offlineimap.conf][Here is a comprehensive
example]] and [[https://github.com/OfflineIMAP/offlineimap/blob/master/offlineimap.conf.minimal ][another minimal one ]].
2020-05-09 21:41:30 -05:00
2021-03-05 22:16:43 -05:00
As a real world example, [[https://github.com/hlissner/dotfiles/blob/5f146b6c39552c0cf38025406f5dba7389542b0a/shell/mu/.offlineimaprc ][here is my old config ]], where it is configured to
download mail to ~\~ /.mail~. I used [[https:/ /www.passwordstore.org/ ][unix pass]] to securely store my login
credentials.
2020-05-09 21:41:30 -05:00
2021-03-05 22:16:43 -05:00
Finally, download your email with ~offlineimap -o~ . This may take a while,
especially if you have thousands of emails.
2020-05-09 21:41:30 -05:00
2021-03-05 22:16:43 -05:00
*** mbsync
To use [[https://isync.sourceforge.io/ ][mbsync ]], change ~+notmuch-sync-backend~ :
2020-05-09 21:41:30 -05:00
#+BEGIN_SRC emacs-lisp
(setq +notmuch-sync-backend 'mbsync)
2021-03-05 22:16:43 -05:00
;; Use `mbsync-xdg' if your mbsync config lives in $XDG_CONFIG_HOME/isync:
(setq +notmuch-sync-backend 'mbsync-xdg)
2020-05-09 21:41:30 -05:00
#+END_SRC
2021-03-05 22:16:43 -05:00
The steps needed to set up =notmuch= with =mbsync= are similar to the ones for
2020-05-09 21:41:30 -05:00
[[*offlineimap ][offlineimap ]].
2021-03-05 22:16:43 -05:00
Start with writing a ~\~ /.mbsyncrc~ to store your configuration. An example for
GMAIL can be found on the [[https://wiki.archlinux.org/index.php/isync#Configuring ][ArchWiki ]] which will also explain how its integration
with notmuch for auto synchronization. A non-GMAIL example is available as a
gist [[https://gist.github.com/agraul/60977cc497c3aec44e10591f94f49ef0 ][here ]].
2020-05-09 21:41:30 -05:00
2021-03-05 22:16:43 -05:00
Finally, download your email with ~mbsync --all~ . This may take a while, but
will be quicker than =offlineimap= .
2020-05-09 21:41:30 -05:00
2021-03-05 22:16:43 -05:00
*** Custom method
If you have a unique method for synchronizing your email, you can define your
own backend:
2020-05-09 21:41:30 -05:00
2021-03-05 22:16:43 -05:00
#+BEGIN_SRC emacs-lisp
(setq +notmuch-sync-backend 'custom
;; Set this to an arbitrary shell command
+notmuch-sync-command "my-notmuch-sync-cmd")
2020-05-09 21:41:30 -05:00
#+END_SRC
2020-09-12 12:53:21 -07:00
** Customize =*notmuch-hello*= buffer
It is possible to change the =*notmuch-hello*= buffer if you want to.
#+BEGIN_SRC emacs-lisp
2021-03-05 20:57:25 -05:00
(after! notmuch
2020-09-12 12:53:21 -07:00
(setq notmuch-show-log nil
notmuch-hello-sections `(notmuch-hello-insert-saved-searches
notmuch-hello-insert-alltags)
2021-03-05 22:16:43 -05:00
;; To hide headers while composing an email
2020-09-12 12:53:21 -07:00
notmuch-message-headers-visible nil))
#+END_SRC
** Changing the =notmuch= landing page
2021-03-05 20:57:25 -05:00
You may want to forego the =*notmuch-hello*= buffer by having ~M-x =notmuch~ or
~SPC o m~ take you straight to a search page.
2020-09-12 12:53:21 -07:00
2021-03-05 20:57:25 -05:00
When using ~SPC o m~ the =+notmuch-home-function= is called. By default it uses
the =notmuch= function and so has the same familiar behavior of running a
vanilla install of notmuch-emacs. But, by overwriting this function you can run
a custom search as your landing page.
2020-09-12 12:53:21 -07:00
#+BEGIN_SRC emacs-lisp
(setq +notmuch-home-function (lambda () (notmuch-search "tag:inbox")))
#+END_SRC
2021-03-05 22:16:43 -05:00
* TODO Troubleshooting