#!/bin/bash # Next calcurse item for xmobar: pink " 10:15 | " for an appointment later today, a cyan icon for a whole-day # event today, a pink icon alone when the next appointment is tomorrow; empty otherwise. # With "list": show today's and tomorrow's items in a notification (for a click on the bar) set -uo pipefail icon=$'\xf3\xb0\x83\xad' # nf-md-calendar, as UTF-8 bytes so the locale doesn't matter today=$(date +%F) query() { calcurse -Q --filter-type cal --days 2 --output-datefmt %F "$@" } if [[ ${1:-} == list ]]; then tomorrow=$(date -d tomorrow +%F) body=$(query --format-apt '%S–%E %m\n' --format-recur-apt '%S–%E %m\n' \ --format-event 'all day %m\n' --format-recur-event 'all day %m\n' | sed -e 's/&/\&/g; s//\>/g' -e "s/^$today:$/Today:/; s/^$tomorrow:$/Tomorrow:/") notify-send -a calcurse -i x-office-calendar "Calendar" "${body:-Nothing today or tomorrow}" exit fi now=$(date +%s) day="" next="" event=false while read -r kind start; do case $kind in *:) day=${kind%:} ;; A) [[ -z $next ]] && ((start > now)) && next=$start ;; E) [[ $day == "$today" ]] && event=true ;; esac done < <(query --format-apt 'A %s\n' --format-recur-apt 'A %s\n' --format-event 'E\n' --format-recur-event 'E\n') if [[ -n $next && $(date -d "@$next" +%F) == "$today" ]]; then text="$icon $(date -d "@$next" +%H:%M)" elif $event; then text="$icon" elif [[ -n $next ]]; then text="$icon" else exit 0 fi echo "$text | "