From 9254d170236eeb9d9e113915c89ec4cab34a5f98 Mon Sep 17 00:00:00 2001 From: Arpit Chakladar Date: Thu, 24 Sep 2026 04:40:56 +0530 Subject: feat(communication/neomutt): added auto syncing daemon that runs with the client --- .../communication/neomutt/neomutt-sync-daemon.sh | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 modules/communication/neomutt/neomutt-sync-daemon.sh (limited to 'modules/communication/neomutt/neomutt-sync-daemon.sh') diff --git a/modules/communication/neomutt/neomutt-sync-daemon.sh b/modules/communication/neomutt/neomutt-sync-daemon.sh new file mode 100644 index 0000000..a78ef5f --- /dev/null +++ b/modules/communication/neomutt/neomutt-sync-daemon.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +# systemd daemon: full-sync the -full channels every 10 minutes while +# neomutt is open. Started/stopped by the wrapped neomutt launcher. + +set -uo pipefail + +INTERVAL="$((10 * 60))" +MBSYNCRC="${MBSYNCRC:-$HOME/.config/mbsync/.mbsyncrc}" + +if [[ $# -eq 0 ]]; then + echo "Usage: $0 [channel...]" >&2 + exit 2 +fi + +sync_once() { + echo "Syncing: $*" + + mbsync -c "$MBSYNCRC" "$@" + local status=$? + if ((status != 0)); then + echo "mbsync failed (status $status) for: $*" >&2 + return "$status" + fi + + echo "Indexing new mail with notmuch..." + notmuch new --quiet +} + +while true; do + sync_once "$@" + sleep "$INTERVAL" + + # 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 >/dev/null; then + echo "neomutt is not running; stopping sync daemon" >&2 + exit 0 + fi +done -- cgit v1.2.3