#!/usr/bin/env sh # runs mbsync, with pre-hooks and post-hooks # by default, first runs imapfilter # and after indexes with notmuch # # To run without invoking any hooks or retry attempts, # run `checkmail raw` # this will simply invoke a single isync run on all # boxes with the correct config file set. # # for more advanced, per-account/channel hooks, see # https://sourceforge.net/p/isync/feature-requests/8/ MBSYNC_MAX_TRIES=3 prehook() { if [ -n "$MBSYNC_PRE" ]; then eval "$MBSYNC_PRE" return 0 fi imapfilter -c "${XDG_CONFIG_HOME:-/home/marty/.config}/imapfilter/config.lua" } posthook() { if [ -n "$MBSYNC_POST" ]; then eval "$MBSYNC_POST" return 0 fi notmuch new --quiet 2>/dev/null afew --tag --new } # fail the routine and optionally send a message why fail() { [ -n "$1" ] && echo "$1" exit 1 } checkmail() { mbsync -c "$XDG_CONFIG_HOME/isync/mbsyncrc" -a } checkonline() { # Ping 1.1.1.1 to confirm that we are on the internet ping -c 1 "1.1.1.1" >/dev/null 2>/dev/null || fail "checkmail can not access the internet." } # Routine start # check # skip any retries and pre/post hooks, just run mbsync if [ "$1" = "raw" ]; then checkmail exit fi main() { prehook tries=0 while true; do if checkmail; then break fi tries=$((tries + 1)) if [ $tries -gt $MBSYNC_MAX_TRIES ]; then fail "maximum retries reached without success." fi done unset tries posthook } notmuch_foldertags() { notmuch tag +dump -inbox -deleted -- folder:Dump and not folder:Inbox notmuch tag +archived -inbox -deleted -- folder:Archive and not folder:Inbox notmuch tag +deleted -inbox -archived -- folder:Trash and not folder:Inbox } main notmuch_foldertags