aboutsummaryrefslogtreecommitdiffstats
path: root/modules/communication/neomutt/neomutt-sync-daemon.sh
diff options
context:
space:
mode:
authorArpit Chakladar <arpitchakladar@gmail.com>2026-09-24 04:40:56 +0530
committerArpit Chakladar <arpitchakladar@gmail.com>2026-09-24 04:40:56 +0530
commit9254d170236eeb9d9e113915c89ec4cab34a5f98 (patch)
tree3abd9baca5b20db9903b1d652e1f3c0c7a3157a7 /modules/communication/neomutt/neomutt-sync-daemon.sh
parent3a6e45ad18c519b21c9cadb2d374148647886b05 (diff)
downloadhome-manager-config-9254d170236eeb9d9e113915c89ec4cab34a5f98.tar.gz
home-manager-config-9254d170236eeb9d9e113915c89ec4cab34a5f98.zip
feat(communication/neomutt): added auto syncing daemon that runs with the client
Diffstat (limited to 'modules/communication/neomutt/neomutt-sync-daemon.sh')
-rw-r--r--modules/communication/neomutt/neomutt-sync-daemon.sh39
1 files changed, 39 insertions, 0 deletions
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 <mbsync-channel> [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