feat: Google Calendar integration via gws CLI#1275
Conversation
|
Oh neat, I'll check this out, but at first glance I'm not a fan of adding the upcoming as a new section in the dashboard to make it even taller, maybe if it was a carousel type thing yo navigate to in the calendar container itself. I had an early draft of a local calendar integration myself and handled it with UI by clicking into a day to add the events. The idea from there was to expose "upcoming event" in the sidebar under notifications instead. Here's what I had at that time, just never got back to it. 503612029.mp4 |
Yeah, gws is returning a simple JSON, so we could standardize into a format and then anything can get to with by simply formatting their JSON properly. |
Yeah, a making the calendar service an endpoint aggregator pretty much. Other than that, I do suggest using the sidebar for upcoming events :) oh and for context, this was my branch, it's outdated now but should still work? |
|
@xfalcox oh I did actually find that I had the sidebar events example still, but with kinda incomplete layout and styling there too, I was sure I had an expand/collapse on it, but I guess not. |
|
Added a scrollable container on the sidebar @PixelKhaos
|
66598fe to
c66fd1d
Compare
Add GCalendar service that fetches events using gws CLI, displays dot indicators on calendar days with events, shows upcoming events in a dedicated dashboard row, and sends desktop notifications before events start. Events are cached to disk for instant display on restart. Configurable via services.calendar in shell.json (disabled by default).
Add scrollable upcoming events widget to sidebar (below notifications), default on. Dashboard upcoming events default off. Split upcomingHours into dashUpcomingHours (24h) and sidebarUpcomingHours (5 days) for independent control. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
c66fd1d to
1d9388d
Compare
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix import order and move Component.onCompleted before child objects. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move Component.onCompleted after functions, before child objects. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use Layout.preferredWidth instead of width for layout-managed items. Add qmllint disable comments for Repeater delegate and unqualified Text. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
@soramanew would you consider this PR? Let me know what you think about it, I can change it to better fit your vision if necessary. |
| pragma ComponentBehavior: Bound | ||
|
|
||
| import "dash" | ||
| import QtQuick.Layouts |
There was a problem hiding this comment.
Missing import QtQuick for Item
|
Sorry I've kinda been putting this one off cause it's quite a large pr. I like the dots for the events, however the event display below makes the dashboard too tall. I'd much rather have a click to show events on that day instead. We can also maybe integrate a small daily event counter into the clock to the left (e.g. an icon then # events or something like that). On another note, is GWS cli required for this? Or is there some other way we can authenticate and pull data from Google calendar? And does this work with other calendars, or is it solely for google calendar? |
|
Weirdly enough, everyone was implementing this on their own. And now we are coming together. I think this is a sign we need this PR merged :D recording_20260404_01-50-45.mp4 |
Yeah, it started small but the service to fetch data added quite a bit quickly.
That is default disabled now.
That's lovely!
GWS cli is the easiest way I found to reliably get the data I needed. I guess it could be done via any other API. Given the easy JSON format, it means we can handle a pattern any source can easily adapt into.
There is scroll on the sidebar one! The opt-in top one doesn't because it defaults to a shorter horizon. But should be easy to add that.
Very nice @Gitkubikon !! Yeah, I think having reliable Calendar integration is a must, specially for people who use this shell for their day to day work. |





Summary
GCalendarservice that fetches events from Google Calendar using thegwsCLI (gws calendar +agenda)gcalendar.json) for instant display on shell restartservices.calendar,dashboard.showUpcoming, andsidebar.showUpcominginshell.json, calendar disabled by defaultConfiguration
{ "services": { "calendar": { "enabled": true, "command": "gws", "agendaDays": 30, "dashUpcomingHours": 24, "sidebarUpcomingHours": 120, "reminderMinutes": 10, "refreshInterval": 900 } }, "dashboard": { "showUpcoming": false }, "sidebar": { "showUpcoming": true } }services.calendar.enabledfalsegwsCLI in PATHservices.calendar.command"gws"services.calendar.agendaDays30services.calendar.dashUpcomingHours24services.calendar.sidebarUpcomingHours120services.calendar.reminderMinutes10services.calendar.refreshInterval900dashboard.showUpcomingfalsesidebar.showUpcomingtrueWhen
dashUpcomingHoursorsidebarUpcomingHoursexceeds 24, dates are shown as "Today", "Tomorrow", or "Wed, Mar 18" alongside the time.Screenshots
Calendar dots + upcoming events row
Events are shown in their own row below the calendar, so they don't stretch the DateTime/Resources columns.