An Omarchy Quattro menu-bar calendar powered by Chroncal.
- Shows every overlapping current event, or the next upcoming event.
- Uses relative labels near an event (
in 5m,12m left) and explicit weekday labels for later events (Mon 09:00). - Handles timed, all-day, overlapping, upcoming, and in-progress events.
- Uses Chroncal calendar colors in the label, agenda, and progress indicator.
- Hides itself when no visible event remains in the configured preview window.
- Hovering shows nothing. Left click opens the agenda, middle click opens the next event URL, and right click refreshes.
- Groups events under Today, Tomorrow, and later dates.
- Filters hidden calendars and supports per-calendar inclusion.
- Searches titles, descriptions, locations, calendar names, and participants.
- Shows the event date, location, notes, conferencing links, attendees, RSVP state, and who organized the event.
- Turns http(s) URLs in notes into clickable links colored with the Omarchy theme accent.
- Opens Google Meet links as the calendar owner account (
authuser). - Wraps long titles instead of cropping them.
- Opens maps from an open-link icon at the end of the location name.
- Shows Join on the left when the event has a link, Edit and Delete on the right, and copy/RSVP confirmations beside Join.
- Optionally shows Open in Chroncal at the end of event details (
chroncal --event); off by default, withgstill available. - Copies complete event details to the clipboard with
p. - Creates, edits, and deletes Chroncal events without shell interpolation.
- Preserves omitted fields during edits and never reinterprets unchanged event times.
- Confirms deletion before changing Chroncal data.
- Shows an enabled edit pencil for every event with a usable identity.
- Loads and edits the whole recurring series for generated occurrences.
- Edits stored recurrence overrides as that override only.
- Creates and edits recurrence with Chroncal Repeat presets and inline Custom fields.
- Leaves stored override Repeat rules on the series; open the series editor to change them.
- Deletes this event, this and following, or all events in a recurring series from the panel confirm.
- Replies Yes, Maybe, or No from a Going control on event details when the calendar owner is an invited attendee.
This is menu-bar parity, not a replacement for Chroncal's full TUI. Timezone-sensitive time changes, alarms, availability, sync configuration, account management, and advanced calendar operations remain in Chroncal.
- Omarchy Quattro
- Chroncal 0.7.4 or newer on
PATH - A Chroncal build that includes
chroncal event rsvpfor Yes/No/Maybe replies (not in 0.7.4) - A Chroncal build that includes
chroncal --eventto open the TUI on the selected event bash,jq, GNUdate, and GNUtimeoutxdg-openfor links and mapswl-copyfor copy actionsnotify-sendfor helper errors
Install Chroncal with mise if needed:
mise use -g github:DouglasdeMoura/chroncal@0.7.4That pin is enough for the rest of the bar. Yes/No/Maybe needs a Chroncal newer than 0.7.4, or a local build of feat/event-rsvp-cli.
Authenticate and configure calendars in the Chroncal TUI before expecting events on the bar:
chroncalomarchy plugin add https://github.com/DouglasdeMoura/chroncal-bar.git --enable
omarchy bar move douglasdemoura.chroncal-bar --section right --after omarchy.trayThe second command is optional. It places the widget beside the tray in the right-aligned bar group.
| Key | Context | Action |
|---|---|---|
↑ / ↓, j / k |
Agenda | Move selection |
← / →, h / l |
Agenda | Previous or next day |
t |
Agenda | Jump to today's first event |
Enter / Space |
Agenda | Open selected event |
/ |
Agenda | Open search |
c |
Agenda or details | Create event |
e |
Agenda or details | Edit event or recurring series |
x or Delete |
Agenda or details | Delete this event, this and following, or all events |
v |
Event details | Join or open event URL |
p |
Event details | Copy event details |
g |
Event details | Open this event in Chroncal |
y / n / m |
Event details | RSVP yes, no, or maybe |
s |
Agenda | Refresh |
C or , |
Agenda | Open settings |
? |
Agenda | Open shortcut help |
Ctrl+S |
Event editor | Save event or series |
Esc or q |
Any panel view | Back, cancel, or close |
Search opens with /. Subviews share one header back arrow. Settings, shortcut help, and Create are the agenda header actions. Refresh happens when the panel opens, on s, and on bar right-click. Event-detail buttons cover the rest.
Open the agenda and press C or ,, or click the settings cog in the header. Available settings:
- Days ahead (1–30) and refresh interval.
- Maximum bar-title length and the relative-countdown window.
- Included calendars; all are selected automatically until you customize the selection.
- Show or hide time and title in the bar.
- Include or exclude all-day events.
- Include or exclude events without participants.
- Include or exclude events without a physical location or meeting link.
- Show or hide the Open in Chroncal button on event details (off by default).
Calendar selection has two states. Default mode selects every current calendar and automatically includes calendars added later. The first checkbox change stores an exact custom selection; selecting none hides every event. Use Use default (all calendars) to discard the custom selection and return to automatic default mode.
Settings persist on the widget entry in ~/.config/omarchy/shell.json. They can also be changed from the command line:
omarchy bar set douglasdemoura.chroncal-bar interval 60
omarchy bar set douglasdemoura.chroncal-bar lookaheadDays 7
omarchy bar set douglasdemoura.chroncal-bar showTitle On
omarchy bar set douglasdemoura.chroncal-bar showOpenInChroncal On
omarchy bar set douglasdemoura.chroncal-bar relativeLeadMinutes 10Force a refresh:
omarchy-shell douglasdemoura.chroncal-bar refreshThe plugin runs inside Omarchy's long-running Quickshell process with your user permissions. Its QML timer starts a one-shot agenda helper at the configured interval; the helper emits one normalized JSON document and exits. The plugin does not start another Quickshell process, install packages, request elevated privileges, or run a remote installer.
Chroncal remains the source of truth. The plugin calls its CLI to read calendar and event data and to perform explicitly requested create, update, and delete actions. Helpers also read ~/.local/state/chroncal/state.json for hidden calendar IDs.
Chroncal's optional chroncal service run process is separate. This plugin neither installs nor controls that service.
omarchy plugin remove douglasdemoura.chroncal-barRemoval deletes only the plugin. It does not remove Chroncal, calendar state, or any separate Chroncal service.
TZ=UTC bun tests/test-model.js
tests/test-agenda.sh
tests/test-open-url.sh
bash -n scripts/chroncal-exec scripts/chroncal-bar-agenda scripts/chroncal-next-event scripts/chroncal-open-next-event-url
omarchy plugin validate .
/usr/lib/qt6/bin/qmllint -I /usr/share/omarchy/shell \
BarWidget.qml Panel.qml components/*.qmlqmllint exits successfully but reports unresolved qs.Commons and qs.Ui types outside the running Omarchy shell. Runtime smoke tests cover the real plugin host.
