dotfiles/.config/mail/mail-indicator.sh

44 lines
1.2 KiB
Bash
Executable file

#!/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