#!/bin/bash ALERT_IF_IN_NEXT_MINUTES=10 ALERT_POPUP_BEFORE_SECONDS=10 NERD_FONT_FREE="󱁕 " NERD_FONT_MEETING="󰤙" get_attendees() { attendees=$( icalBuddy \ --includeEventProps "attendees" \ --propertyOrder "datetime,title" \ --noCalendarNames \ --dateFormat "%A" \ --includeOnlyEventsFromNowOn \ --limitItems 1 \ --excludeAllDayEvents \ --separateByDate \ --excludeEndDates \ --bullet "" \ --excludeCals "training,omerxx@gmail.com" \ eventsToday ) } parse_attendees() { attendees_array=() for line in $attendees; do attendees_array+=("$line") done number_of_attendees=$((${#attendees_array[@]} - 3)) } get_next_meeting() { next_meeting=$(icalBuddy \ --includeEventProps "title,datetime" \ --propertyOrder "datetime,title" \ --noCalendarNames \ --dateFormat "%A" \ --includeOnlyEventsFromNowOn \ --limitItems 1 \ --excludeAllDayEvents \ --separateByDate \ --bullet "" \ --excludeCals "training,omerxx@gmail.com" \ eventsToday) } get_next_next_meeting() { end_timestamp=$(date +"%Y-%m-%d ${end_time}:01 %z") tonight=$(date +"%Y-%m-%d 23:59:00 %z") next_next_meeting=$( icalBuddy \ --includeEventProps "title,datetime" \ --propertyOrder "datetime,title" \ --noCalendarNames \ --dateFormat "%A" \ --limitItems 1 \ --excludeAllDayEvents \ --separateByDate \ --bullet "" \ --excludeCals "training,omerxx@gmail.com" \ eventsFrom:"${end_timestamp}" to:"${tonight}" ) } parse_result() { array=() for line in $1; do array+=("$line") done time="${array[2]}" end_time="${array[4]}" title="${array[*]:5:30}" } calculate_times() { epoc_meeting=$(date -j -f "%T" "$time:00" +%s) epoc_now=$(date +%s) epoc_diff=$((epoc_meeting - epoc_now)) minutes_till_meeting=$((epoc_diff / 60)) } display_popup() { tmux display-popup \ -S "fg=#eba0ac" \ -w50% \ -h50% \ -d '#{pane_current_path}' \ -T meeting \ icalBuddy \ --propertyOrder "datetime,title" \ --noCalendarNames \ --formatOutput \ --includeEventProps "title,datetime,notes,url,attendees" \ --includeOnlyEventsFromNowOn \ --limitItems 1 \ --excludeAllDayEvents \ --excludeCals "training" \ eventsToday } print_tmux_status() { if [[ $minutes_till_meeting -lt $ALERT_IF_IN_NEXT_MINUTES && $minutes_till_meeting -gt -60 ]]; then echo "$NERD_FONT_MEETING \ $time $title ($minutes_till_meeting minutes)" else echo "$NERD_FONT_FREE" fi if [[ $epoc_diff -gt $ALERT_POPUP_BEFORE_SECONDS && epoc_diff -lt $ALERT_POPUP_BEFORE_SECONDS+10 ]]; then display_popup fi } main() { get_attendees parse_attendees get_next_meeting parse_result "$next_meeting" calculate_times if [[ "$next_meeting" != "" && $number_of_attendees -lt 2 ]]; then get_next_next_meeting parse_result "$next_next_meeting" calculate_times fi print_tmux_status # echo "$minutes_till_meeting | $number_of_attendees" } main