diff options
Diffstat (limited to 'modules/communication/neomutt/neomutt-sync-daemon.sh')
| -rw-r--r-- | modules/communication/neomutt/neomutt-sync-daemon.sh | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/modules/communication/neomutt/neomutt-sync-daemon.sh b/modules/communication/neomutt/neomutt-sync-daemon.sh index 301eb98..d5eea63 100644 --- a/modules/communication/neomutt/neomutt-sync-daemon.sh +++ b/modules/communication/neomutt/neomutt-sync-daemon.sh @@ -1,22 +1,27 @@ #!/usr/bin/env bash -# systemd daemon: sync quick channels on first run, then full channels every 10 minutes -# while neomutt is open. Started/stopped by the wrapped neomutt launcher. +# systemd daemon: sync quick groups on first run, then full groups every 5 +# minutes while neomutt is open. Started/stopped by the wrapped neomutt +# launcher. set -uo pipefail -INTERVAL="$((10 * 60))" -MBSYNCRC="${MBSYNCRC:-$HOME/.config/mbsync/.mbsyncrc}" +# Comma-separated group names, substituted at build time +QUICK_GROUPS="@@QUICK_GROUPS@@" +FULL_GROUPS="@@FULL_GROUPS@@" -QUICK_CHANNELS_STR="@@QUICK_CHANNELS@@" -FULL_CHANNELS_STR="@@FULL_CHANNELS@@" +INTERVAL="$((5 * 60))" -IFS=',' read -ra QUICK_CHANNELS <<<"$QUICK_CHANNELS_STR" -IFS=',' read -ra FULL_CHANNELS <<<"$FULL_CHANNELS_STR" +IFS=',' read -ra QUICK <<<"$QUICK_GROUPS" +IFS=',' read -ra FULL <<<"$FULL_GROUPS" -sync_once() { - echo "Syncing: $*" +# sync_groups <group>...: sync the given mbsync groups, then index +sync_groups() { + if (($# == 0)); then + return 0 + fi - mbsync -c "$MBSYNCRC" "$@" + echo "Syncing: $*" + mbsync "$@" local status=$? if ((status != 0)); then echo "mbsync failed (status $status) for: $*" >&2 @@ -24,19 +29,20 @@ sync_once() { fi echo "Indexing new mail with notmuch..." - notmuch new --quiet + notmuch new } -first_run=true +first=true while true; do - if [[ $first_run == true ]]; then - sync_once "${QUICK_CHANNELS[@]}" - first_run=false - else - sync_once "${FULL_CHANNELS[@]}" + if $first; then + # Quick pass first so new mail shows up before the slower full sync + sync_groups "${QUICK[@]}" + first=false fi + sync_groups "${FULL[@]}" + # Safety net: the launcher stops this service when neomutt exits; if that # didn't happen (hard kill), bail out once neomutt is gone. if ! pgrep -x neomutt-launche >/dev/null; then |
