#!/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 MBSYNC_PRE="imapfilter -c /home/marty/.config/imapfilter/config.lua" MBSYNC_POST="notmuch 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() { $MBSYNC_PRE 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 $MBSYNC_POST } main