A macOS tool to fetch (the next) calendar events as json
- return JSON by default
- for emoji lovers: separate leading emojis from event title, giving you the emoji, short and full title
- ignore events based on tags e.g.
tag:example
within the event notes - return start and end time in relative and absolute terms
- return an
ical
URL that can be used toopen $URL
to show the particular event in Calendar.app - parse Google meet URLs from notes
- print out calendar entries with a templating engine
Example output in JSON
plan next
[
{
"id": "9675DF46-4040-4762-A70B-6CD65DC01C36:CC525CBD-F5A3-4EBB-970E-7A0EC2D2370D",
"calendar": {
"id": "C5AE5024-78BD-4965-BB0D-0E43E1024368",
"color": "#E195DA",
"label": "Some calendar",
"type": "caldav"
},
"title": {
"full": "🏆 Release plan",
"description": "Release plan",
"icon": "🏆"
},
"schedule": {
"start": {
"at": "2024-09-02T18:00:00+02:00",
"in": 30
},
"end": {
"at": "2024-09-02T19:00:00+02:00",
"in": 90
}
},
"services": [
{ "ical": "ical://ekevent/9675DF46-4040-4762-A70B-6CD65DC01C36?method=show&options=more" }
],
"tags": [ "timeblock" ]
}
]
plan today --template-path path/to/template.md
With template.md
:
{% for e in events %}- {{ e.schedule.start.at|format:"HH:mm"}} - {{ e.schedule.end.at|format:"HH:mm"}}{{ e.title.full }} [ ]({{e.services["ical"]}}) #{{ e.calendar.label|lowercase }}
{% endfor %}
You get
- 12:15 - 12:45 🥗 Lunch [ ](ical://ekevent/CC23ADF2-9303-42C4-A854-BE12F2081E16?method=show&options=more) #private
- 13:00 - 14:00 🕐 Meeting [ ](ical://ekevent/59856934-5D89-45A2-9C11-0E3877F1B082?method=show&options=more) #work
For more details, consult Docs/Templating.
Example commands (use plan --help
for full usage)
plan calendars
List available calendarsplan next
Returns the current or next event within the next hourplan today
Returns all events for todayplan watch
Trigger Sketchybar event on calendar changes. See Docs/Sketchybar for more.
plan
can help with your "productivity" setup. It plays very well with Sketchybar and Obsidian.
But with the default output being JSON, and the templating engine, you can easily make plan
fit your individual needs.
You can use it with Sketchybar to show the next event. For more details, consult Docs/Sketchybar.
You can use it with Obsidian to inject today's schedule into your notes. For more details, consult Docs/Templating.
For more details, consult Docs/Templating.
Via GitHub
- installs to
$HOME/.local/bin/plan
(make sure it's in$PATH
)
git clone git@github.com:oschrenk/plan.swift.git
cd plan.swift
task install
Via Homebrew
brew tap oschrenk/made git@github.com:oschrenk/homebrew-made
brew install oschrenk/made/plan