diff options
Diffstat (limited to 'mac/.config/sketchybar.mon/sketchybar/plugins/calendar.sh')
| -rwxr-xr-x | mac/.config/sketchybar.mon/sketchybar/plugins/calendar.sh | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/mac/.config/sketchybar.mon/sketchybar/plugins/calendar.sh b/mac/.config/sketchybar.mon/sketchybar/plugins/calendar.sh new file mode 100755 index 0000000..013e3db --- /dev/null +++ b/mac/.config/sketchybar.mon/sketchybar/plugins/calendar.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash + +# Source colors for consistent theming +source "$CONFIG_DIR/colors.sh" + +# Get next calendar event +get_next_event() { + # Use EventKit to get calendar events + local event_info=$(osascript << 'EOF' +tell application "Calendar" + set currentDate to current date + set endOfDay to currentDate + (1 * days) + + set allEvents to {} + repeat with cal in calendars + set calEvents to (events of cal whose start date ≥ currentDate and start date ≤ endOfDay) + set allEvents to allEvents & calEvents + end repeat + + if (count of allEvents) > 0 then + set nextEvent to item 1 of allEvents + set eventStart to start date of nextEvent + set eventTitle to summary of nextEvent + + # Find the earliest upcoming event + repeat with evt in allEvents + if start date of evt < eventStart and start date of evt ≥ currentDate then + set nextEvent to evt + set eventStart to start date of evt + set eventTitle to summary of evt + end if + end repeat + + # Format the time properly + set eventHour to hours of eventStart + set eventMinute to minutes of eventStart + + # Convert to 12-hour format + if eventHour = 0 then + set displayHour to 12 + set ampm to "AM" + else if eventHour < 12 then + set displayHour to eventHour + set ampm to "AM" + else if eventHour = 12 then + set displayHour to 12 + set ampm to "PM" + else + set displayHour to eventHour - 12 + set ampm to "PM" + end if + + # Format minutes with leading zero if needed + if eventMinute < 10 then + set minuteStr to "0" & eventMinute + else + set minuteStr to eventMinute as string + end if + + set formattedTime to displayHour & ":" & minuteStr & " " & ampm + + set eventDate to date string of eventStart + set todayDate to date string of currentDate + + if eventDate = todayDate then + return eventTitle & "|" & formattedTime + else + return eventTitle & "|Tomorrow " & formattedTime + end if + else + return "No events" + end if +end tell +EOF +) + + echo "$event_info" +} + +# Get calendar information +EVENT_INFO=$(get_next_event 2>/dev/null) + +if [[ "$EVENT_INFO" == "No events" ]] || [[ -z "$EVENT_INFO" ]]; then + # No upcoming events + ICON="" + COLOR=$GREY + LABEL="No Events" +else + # Parse event information + IFS='|' read -r event_title event_time <<< "$EVENT_INFO" + + # Set icon and color based on time + if [[ "$event_time" == "Tomorrow"* ]]; then + ICON="" + COLOR=$ACCENT_QUATERNARY + else + ICON="" + COLOR=$ACCENT_PRIMARY + fi + + # Truncate long event titles + if [[ ${#event_title} -gt 15 ]]; then + event_title="${event_title:0:15}..." + fi + + # Create multi-line label using actual newline + LABEL="$event_title +$event_time" +fi + +# Update the Calendar item +sketchybar --set "$NAME" icon="$ICON" \ + icon.color="$COLOR" \ + label="$LABEL" \ + label.color=$WHITE \ + label.font="SF Pro:Medium:12.0" \ + label.max_chars=20 |
