No description
  • QML 62.7%
  • JavaScript 37.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Erik Straub d30167f0a4 fix: render event times in local time, not UTC
formatEventTime used getUTCHours/getUTCMinutes, so every displayed
event time (agenda rows, and the {nextTime} bar token) was off by the
local UTC offset for any non-UTC user. countdownLabel already parsed
the same event.start as a true instant, so the two could disagree on
the same row. Caught during live re-review verification of the
final-review fix wave; the existing test suite couldn't see it since
it pins TZ=UTC process-wide, where local and UTC hours are identical.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-16 17:51:32 -04:00
docs/superpowers/plans docs: add calagenda-plugin implementation plan 2026-08-10 19:17:38 -04:00
test fix: render event times in local time, not UTC 2026-08-16 17:51:32 -04:00
.gitignore chore: gitignore local sdd workspace 2026-08-10 19:17:57 -04:00
Agenda.qml fix: keep agenda countdowns ticking instead of frozen at first paint 2026-08-16 17:33:37 -04:00
BarWidget.qml fix: stop bar label token text being re-parsed as a Qt format string 2026-08-16 17:31:12 -04:00
CalendarStore.qml fix: trigger a calagenda resync when the calendar panel opens 2026-08-16 17:32:14 -04:00
EventRow.qml fix: only show the join button for events that have a meeting link 2026-08-16 17:31:49 -04:00
manifest.json feat: settings schema for day dots/join buttons; docs 2026-08-11 01:36:07 -04:00
Model.js fix: render event times in local time, not UTC 2026-08-16 17:51:32 -04:00
Panel.qml fix: trigger a calagenda resync when the calendar panel opens 2026-08-16 17:32:14 -04:00
README.md feat: settings schema for day dots/join buttons; docs 2026-08-11 01:36:07 -04:00
WorldClocks.qml refactor: move UTC offset parsing out of WorldClocks into Model.js 2026-08-16 17:33:10 -04:00

calagenda-plugin

An Omarchy 4 bar plugin: a fork of the stock omarchy.clock with a real calendar agenda, day dots, day selection, meeting-join buttons, and world clocks below the month grid.

Requires calagenda — a small CLI that fetches and expands calendar events into JSON. Without it installed, the plugin still works: month grid, rails, and world clocks all function; only the agenda section shows an install hint.

Install

omarchy plugin add https://git.straub.dev/erik/calagenda-plugin.git
omarchy plugin enable erik.calagenda center

Then install and configure calagenda per its README — the short version:

pacman -S calagenda   # after adding the Forgejo Arch registry, see calagenda's README
$EDITOR ~/.config/calagenda/config.toml
systemctl --user enable --now calagenda-sync.timer

Settings

Set via omarchy bar set erik.calagenda <key> <value> [--json], or by hand-editing this plugin's entry in ~/.config/omarchy/shell.json:

Key Default Meaning
format / formatAlt inherited from the clock bar label format; right-click cycles through built-ins plus {next}, {nextTime}, {nextIn}, {count}
agendaDays 7 how many upcoming days the agenda covers
maxAgendaEvents 12 cap on total agenda rows before the list truncates
showDayDots true small colored dots on grid days with events
showJoinButtons true one-click join for detected Meet/Zoom/Teams/Webex/Jitsi/Whereby links
worldClocks [] e.g. [{"label":"Work","tz":"America/New_York"}]

Local development

The shell's plugin watcher may not follow a symlinked plugin directory for hot-reload (see this repo's implementation plan, Task 1, Step 6) — if edits don't show up live, run omarchy-shell shell rescanPlugins after saving. Note that rescanPlugins alone is not reliable for verifying changes to an already-open popup's QML content — for that, restart the shell with omarchy-restart-shell instead.

Run the JS unit tests: node --test test/model.test.js.