#!/bin/env bash # mailboxes to monitor MAILBOXES=("personal" "school") # named pipe for receiving refresh events # from mail sync script PIPE="/tmp/email_refresh_pipe" COUNT="/tmp/email_count" # Create pipe if doesn't exist [[ -p "$PIPE" ]] || mkfifo "$PIPE" [[ -e "$COUNT" ]] || echo "0" > "$COUNT" # Get unread counts and format for waybar get_unread_counts() { for mailbox in "${MAILBOXES[@]}"; do count=$(notmuch count --output=messages "tag:unread and path:$mailbox/**") printf "%s: %s " "$mailbox" "$count" done # we print a newline to let waybar know to display # what we just printed printf "|\n" } # run once for initial output echo "mail init" # begin event loop while true; do # cat blocks until data comes through pipe # redirecting to null b.c. we don't want the # pipe's contents to be printed to stdout PAYLOAD=$(cat /tmp/email_refresh_pipe) if [ "$PAYLOAD" == "new" ]; then count=$(cat "$COUNT") ((count++)) > "$COUNT" elif [ "$PAYLOAD" == "reset" ]; then "0" > "$COUNT" elif [ "$PAYLOAD" == "show_precise" ]; then get_unread_counts elif [ "$PAYLOAD" == "show_since" ]; then echo "new: $(cat "$COUNT")" fi done