69 lines
2.4 KiB
Bash
69 lines
2.4 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
# notify a khal user via rofi about upcoming events
|
||
|
#
|
||
|
# dependencies: ·khal
|
||
|
# ·rofi >= 1.7.0 (-timeout-delay 60 -timeout-action "kb-cancel")
|
||
|
# ·column (eye candy only. can be removed without problems)
|
||
|
#
|
||
|
# usage: put it into a cronjob and let it run every 15 min or so
|
||
|
# -only events with reminders will trigger an alarm (shown in khal as: ⏰)
|
||
|
# -snoozed events will show up again on the next run
|
||
|
# -dismissed events will not trigger an alarm again
|
||
|
# -no alarm will be triggered if the script did never run
|
||
|
# for the duration of an event or in TIMESPAN beforehand
|
||
|
#
|
||
|
# rofi: -Shift+Return toggles item selection
|
||
|
# -if any item is selected, "cursor" position has no effect
|
||
|
# -timeout after 60 seconds; this snoozes all events
|
||
|
####################
|
||
|
|
||
|
|
||
|
# adjust cache file location to your liking
|
||
|
cache_file="${XDG_CACHE_HOME:-$HOME/.cache}/khal-events"
|
||
|
# events starting in the next TIMESPAN will trigger an alarm
|
||
|
timespan='60min'
|
||
|
####################
|
||
|
|
||
|
# this is needed for cronjobs and Xorg
|
||
|
export DISPLAY=":0"
|
||
|
snooze_string='💤 Snooze all.'
|
||
|
dismiss_string='✅ Dismiss all.'
|
||
|
# only show events with ⏰ symbol (=has alarm set)
|
||
|
# remove arrows for all-day events to only have one notification
|
||
|
# remove ⏰ symbol because it is obvious
|
||
|
events="$(khal list --format \
|
||
|
'{calendar}: {cancelled}{start-style}{to-style}{end-style} {title}{description-separator}{description}{location}{repeat-symbol}{alarm-symbol}' \
|
||
|
now "${timespan}" \
|
||
|
| sed -ne '/⏰/ p' \
|
||
|
| sed -e 's/⏰//g' -e 's/\(↦\|↔\|⇥\)[^[:blank:]]*/all-day/g' \
|
||
|
| column -tl 3)"
|
||
|
|
||
|
# get events that are new compared to cache file
|
||
|
new_events="$(diff -NwU 0 "${cache_file}" - << EOF | sed -ne '/^\+[^+]/ p' \
|
||
|
| sed -ne 's/^\+\([[:print:]].*\)$/\1/p'
|
||
|
${events}
|
||
|
EOF
|
||
|
)"
|
||
|
|
||
|
[ -z "${new_events}" ] && exit 0
|
||
|
|
||
|
action="$(dunstify --action="default,Dismiss" --action="snooze,Snooze" "${new_events}")"
|
||
|
|
||
|
# input="$(printf '%s\n%s\n%s' "${snooze_string}" \
|
||
|
# "${dismiss_string}" "${new_events}" \
|
||
|
# | rofi -timeout-delay 60 -timeout-action "kb-cancel" \
|
||
|
# -dmenu -i -u 2: -no-custom -multi-select -p \
|
||
|
# '⏰ Alarm! Select alarms to snooze. Rest will be dismissed.')"
|
||
|
|
||
|
case "${action}" in
|
||
|
"snooze")
|
||
|
;;
|
||
|
"default")
|
||
|
printf '%s' "${events}" > "${cache_file}"
|
||
|
;;
|
||
|
*)
|
||
|
printf '%s' "${events}" | grep -Fve "${input}" > "${cache_file}"
|
||
|
;;
|
||
|
esac
|