Introducing ical-buddy.el
Table of Contents
1. Why?
I want to track my work Google Calendar events in org-agenda. My work calendar
is sandboxed:
- It is only accessible via the UI
- It does not provide a private export link
- I don't have access to Google Workspace or Google Cloud for the account
I only need read-only, unidirectional access: Google -> local.
If your calendar isn't sandboxed, you don't need any of this. You should just use other amazing packages that exist.
2. Existing solutions
There are a few packages that seem like they'd work, but each hits the same wall.
| Package | Why it fails |
|---|---|
org-caldav |
Needs a CalDAV URL; sandboxed Google accounts don't expose one |
org-gcal |
Requires Google Cloud OAuth credentials; unavailable for managed accounts |
org-ics-import |
Needs a private ICS export link; sandboxed calendars don't provide one |
3. So, what now?
I was able to add my work calendar to Calendar.app, which can
authenticate via OAuth and pull events just fine.
This opens a door. If Calendar.app could export an ICS file over the CLI, I
could pipe that into org-ics-import. It can't, though, which is why
ical-buddy.el exists.
Calendar.app itself was too heavy just for ICS export, so I looked for a
minimal CLI tool that could connect to online calendar accounts and spit out
calendar data. I didn't find one.
What I did find was icalBuddy: a CLI interface to Calendar.app. Since
Calendar.app already handles the OAuth and syncing, icalBuddy can simply read
from it, and that's all I need.
ical-buddy.el wraps icalBuddy to fetch events from Calendar.app and parse them
into an org file that org-agenda can track. The parsing happens on demand; I
trigger it while interacting with org-agenda, though a cron job works too.
See the README for usage.