+# Advanced tips and tweaks
+
+## Use separate emacs lisp file for notmuch configuration
+
+Instead of adding notmuch configuration code to `.emacs`, there
+is an option to collect those to a separate file (which is only
+loaded when `notmuch` is invoked). To do this, write, for example
+a file called `~/.emacs.d/my-notmuch.el`:
+
+ ;; my-notmuch.el -- my notmuch mail configuration
+ ;;
+
+ ;; add here stuff required to be configured *before*
+ ;; notmuch is loaded;
+
+ ; uncomment and modify in case some elisp files are not found in load-path
+ ; (add-to-list 'load-path "~/vc/ext/notmuch/emacs")
+
+ ;; load notmuch
+ (require 'notmuch)
+
+ ;; add here stuff required to be configured *after*
+ ;; notmuch is loaded;
+
+ ;(setq user-mail-address (notmuch-user-primary-email)
+ ; user-full-name (notmuch-user-name))
+
+ ; uncomment & modify if you want to use external smtp server to send mail
+ ; (setq smtpmail-smtp-server "smtp.server.tld"
+ ; message-send-mail-function 'message-smtpmail-send-it)
+
+Then, add to `.emacs`:
+
+ (autoload 'notmuch "~/.emacs.d/my-notmuch" "notmuch mail" t)
+
+
+## Add a key binding to add/remove/toggle a tag
+
+The `notmuch-{search,show}-{add,remove}-tag` functions are very useful
+for making quick tag key bindings. For instance, here's an example
+of how to make a key binding to add the "spam" tag and remove the
+"inbox" tag in notmuch-show-mode:
+
+ (define-key notmuch-show-mode-map "S"
+ (lambda ()
+ "mark message as spam"
+ (interactive)
+ (notmuch-show-add-tag "spam")
+ (notmuch-show-remove-tag "inbox")))
+
+You can do the same for threads in `notmuch-search-mode` by just
+replacing "show" with "search" in the called functions.
+
+The definition above makes use of a lambda function, but you could
+also define a separate function first:
+
+ (defun notmuch-show-tag-spam()
+ "mark message as spam"
+ (interactive)
+ (notmuch-show-add-tag "spam")
+ (notmuch-show-remove-tag "inbox")))
+ (define-key notmuch-show-mode-map "S" 'notmuch-show-tag-spam)
+
+Here's a more complicated example of how to add a toggle "deleted"
+key:
+
+ (define-key notmuch-show-mode-map "d"
+ (lambda ()
+ "toggle deleted tag for message"
+ (interactive)
+ (if (member "deleted" (notmuch-show-get-tags))
+ (notmuch-show-remove-tag "deleted")
+ (notmuch-show-add-tag "deleted"))))
+
+## Restore reply-to-all key binding to 'r'
+
+Starting from notmuch 0.12 the 'r' key is bound to reply-to-sender instead of
+reply-to-all. Here's how to swap the reply to sender/all bindings in show mode: