-1. a working notmuch on one computer (let's call that computer
-"server"). The notmuch should be at least version 0.2.
-2. a working notmuch emacs interface on another computer (let's call
-that computer "client")
-3. password-free login (public key authentication) from client to
-server. [Here](http://sial.org/howto/openssh/publickey-auth/) is a
-good page on how to set it up.
-4. a reasonably fast connection. (This isn't really *neccessary*, but
-if your connection is too slow, this won't be very pleasant to use,
-and certainly won't seem transparent.)
-
-##Write a wrapper shell script##
-Now we will need to write a simple shell script that does two things:
-
-1. replaces the call to the notmuch binary with a call to notmuch
-over ssh.
-2. offers, via the "--get" option, a utility for downloading raw
-message text over scp (this is necessary for attachments) and
-caching for future use.
-
-Note that this shell script also pauses briefly after every message
-entries. This is currently necessary so that the emacs process-filter
-doesn't chop off messages. It's an obvious hack, and hopefully won't
-be necessary in the furture.
-
- #!/usr/bin/env bash
- SSH_BIN="/path/to/ssh/on/client"
- USER="user_name"
- SSH_HOST="server_name"
- NOTMUCH_REMOTE_BIN="/path/to/notmuch/on/server"
- CACHE=${HOME}/.notmuch-cache.d
-
- notmuch_run ()
- {
- if [ $1 = "search" ]; then
- OUT=$($SSH_BIN $USER@$SSH_HOST $NOTMUCH_REMOTE_BIN $@)
- echo "$OUT" | while read line; do
- echo "$line";
- sleep 0.1;
- done
- else
- $SSH_BIN $USER@$SSH_HOST $NOTMUCH_REMOTE_BIN $@
- fi
- }
-
- check_for_file_name ()
- {
- [ -f "${CACHE}/${1}" ]
- }
-
- fetch_file ()
- {
- FILE_DIR="${CACHE}/$(dirname ${1})"
- [ -d "${FILE_DIR}" ] || mkdir -p "${FILE_DIR}"
- scp ${SSH_HOST}:${1} "${FILE_DIR}" > /dev/null 2>&1
- retcode="${?}"
- if [ "${retcode}" -ne "0" ]; then
- echo "Failed to fetch file" 1>&2
- exit ${retcode}
- fi
- }
-
- notmuch_get ()
- {
- [ -d "${CACHE}" ] || mkdir -p "${CACHE}"
-
- check_for_file_name ||
- fetch_file ${1} &&
- printf "${CACHE}/${1}\n"
- }
-
- if [ ${1} = "--get" ]; then
- notmuch_get $2
- else
- notmuch_run $@
- fi
-
-Save this to a file, "remote-notmuch.sh", in your path.
-
-Now you can run "remote-notmuch.sh new". You can call the script
-anything you like. If you don't have a notmuch instance on your client
-computer, you can even call it "notmuch" and have totally transparent
-usage. (Since I run "new" from an emacs keybinding, I've never
-bothered with this renaming.)
-
-##Configure your emacs client##
-
-Add the following to your .emacs (this is on your client machine):