Releases: x3me/omacal
Release list
omacal v0.20.0
What's new
A meeting link in the description becomes a Join button. Google files a Meet link as structured data, and a Zoom or Teams link usually sits in location — but plenty of invites put the link only in the description text, and until now nothing looked there. Now the app, the Omarchy bar widget and the CLI all resolve the same way: structured data first, then location, then the description. The scan is safe over the HTML Google actually stores, tries every link rather than the first, and keeps location ahead of the description when both carry one. On one real calendar this lit 40 meetings that had no Join button anywhere. Thanks to @mattlibera, who wrote it (#35), the second half of his earlier fix.
The window frame is a choice, and Settings has an Appearance tab. omacal drew no title bar on any Linux desktop because on Hyprland, where it was built, the compositor tiles the window and closes or moves it from the keyboard — but on GNOME or KDE that left a window with nothing to grab. Settings → Appearance → Window frame: Follow the desktop (no frame under Hyprland, a frame everywhere else), Shown, or Hidden, taking effect as you pick. The new Appearance tab also holds the theme and the Week view control; General keeps what the app does — sync, defaults, clocks, the tray, login. Thanks to @xmha97 for the report (#36).
Dark dropdown menus and checkboxes in the AppImage. The AppImage's launch hook exported a light GTK theme into the process, which silently overrode the dark hint omacal has set since v0.18.0 — so the Week view menu opened white on a dark theme, and checkboxes came out white with a blue tick. omacal now drops that variable at startup and keeps the widget theme on Adwaita in the variant the palette asks for. Checkboxes are drawn by omacal itself, in your theme's accent, everywhere they appear. The two time-zone boxes in Settings, the last inputs there still wearing the engine's own look, match their neighbours now.
Install / update: on v0.4.0+, click Update in the header's notice. Or:
curl -fsSL https://extremelabs.io/omacal/install.sh | sh
omacal skill install
omacal v0.19.0
What's new
Place a new event by hand, the way you move an existing one. The dashed draft that appears on the grid while the event form is open is no longer just a picture of what you typed — grab it. Drag the body to move it to another time or another day; drag either edge to make it longer or shorter. The form's Start and End follow as you go, so what you see on the grid and what will be saved never disagree.
It works wherever that draft appears: a new event (n, a click, or a swept-out span), a pasted copy (Ctrl+V), and an event you are already editing. Day view too — it is the same grid.
Everything the gesture knows it learned from dragging a real event: the same snapping, the same rule about crossing days, the same Escape to put it back. An all-day draft stays as it was, placed by sweeping sideways across the days it covers.
Install / update: on v0.4.0+, click Update in the header's notice. Or:
curl -fsSL https://extremelabs.io/omacal/install.sh | sh
omacal skill install
omacal v0.18.1
What's fixed
A link written with words keeps its destination. A description saying "read the [pre-read] first" — where the link's text is words rather than the URL itself — used to lose the link entirely: the words stayed, the destination did not, and nothing on screen said a link had ever been there. Now the words are the link.
Measured on a real calendar before and after: of 217 links across 351 descriptions, 45 were losing their destination this way. The other 168 are links whose text is already their own URL; those look exactly as they did.
The way it is done matters more than the fix: descriptions arrive from whoever put the event on your calendar, so omacal never turns one into markup. A link's label and its destination are now carried as two separate pieces of data, so the label survives without any HTML being produced — and javascript:, data: and file: addresses still become plain words rather than links.
Install / update: on v0.4.0+, click Update in the header's notice. Or:
curl -fsSL https://extremelabs.io/omacal/install.sh | sh
omacal skill install
omacal v0.18.0
What's new
A light theme, for the desktops that are not Omarchy. Settings → General → Appearance: follow the desktop theme, Light, or Dark. omacal has never had a theme of its own — it wears Omarchy's and follows it as you switch — and that quietly meant every other desktop got dark and had no way to ask for anything else. Now it does. Following the desktop stays the default, so nothing changes unless you choose it, and the change takes effect as you pick it, with no restart. Thanks to @xmha97 for the report (#30).
The three-day view is on the list you are already reading. Week view used to be two settings, and the second only appeared once the first said "Today" — so the rolling three- and five-day views existed and could not be found. They are one control now:
Whole week, from Monday / Sunday / Saturday
3 days from today
5 days from today
7 days from today
Month, Year and the year ribbon keep their own weekday alignment while Week rolls. Thanks to @xmha97 for asking for a feature that was already there and unfindable (#31).
The forecast high in Fahrenheit. Settings → General → Show temperature as, beside the weather toggle. Celsius stays the default. Thanks to @chadhs, who filed it and then wrote it (#32) — including the part that is easy to get wrong: the reading is now rounded once, at display, in whichever unit it is printing, because rounding first and converting after disagrees with the thermometer about half the time.
Install / update: on v0.4.0+, click Update in the header's notice. Or:
curl -fsSL https://extremelabs.io/omacal/install.sh | sh
omacal skill install
omacal v0.17.0
What's new
Zoom, Teams and Webex meetings get their Join button back. A meeting attached through Google Calendar's "Add conferencing" keeps its join link in a different field from a Meet call, and omacal only ever read the Meet one — so those events showed no way to join at all, however plainly the invitation said where the meeting was. They join now, like everything else. Thanks to @mattlibera, who found it and fixed it.
A CalDAV server with your own certificate authority works. If you run your own CalDAV server behind a certificate from a CA you installed yourself, omacal could not reach it — and this was our fault in a way worth being precise about: omacal never consulted your machine's certificate store at all, only the list of public authorities baked into the binary. So a server every other client on your computer trusted was refused by this one. It now trusts what your operating system trusts. Nothing is turned off and there is no switch to find: the certificate still has to chain to something you already trust. Thanks to @xmha97 for the report (#29).
Documentation: how to keep omacal up to date. There is now a section that says it, instead of a fact buried in the install paragraph — the in-app Update button, re-running the install line, replacing a .deb or .rpm, and the AppImage managers that v0.15.0's update metadata serves. Thanks to @chadhs (#33).
Under the surface, last release's move-between-calendars is now covered end to end against a real CalDAV server, master and exception together, which it was not when it shipped.
Install / update: on v0.4.0+, click Update in the header's notice. Or:
curl -fsSL https://extremelabs.io/omacal/install.sh | sh
omacal skill install
omacal v0.16.0
What's new
An event can be moved to another calendar. Open it, pick a different calendar from the dot beside the title, and save. Until now that control was disabled on an edit: an event created on the wrong calendar could only be fixed by deleting it and making it again, which for anything with guests threw away every answer they had given and mailed them a fresh invitation. "Be careful where you create it" was the workaround, and it should not have been one.
The event keeps its identity through the move — its guest list, and every RSVP already on it, come with it. A recurring event moves whole: neither Google nor CalDAV can re-file a single occurrence and leave the rest behind, so choosing another calendar for a series applies to every occurrence, and the form says so rather than letting you find out after saving.
Calendars on a different account are not offered, deliberately. Between accounts there is no move — only a copy that takes a new event id and re-invites everyone — so omacal refuses that instead of doing it quietly under the same button.
Thanks to Plamen Haralambiev, who found this by living with omacal for a week.
Install / update: on v0.4.0+, click Update in the header's notice. Or:
curl -fsSL https://extremelabs.io/omacal/install.sh | sh
omacal skill install
omacal v0.15.0
What's new
A CalDAV server on your own network connects. A self-hosted Radicale, Baïkal or Nextcloud on your LAN was refused three different ways at once: the account field demanded something shaped like an email address, so a plain username could not even be submitted; plain http:// was accepted only for localhost, which is not where anyone's home server actually lives; and when omacal turned an address down it said "Sync failed. See the application log for details." rather than why. All three are fixed. The field is now "Email or account name", http:// works for addresses that can only be on your own wire — loopback, 192.168.x.x, 10.x.x.x, 172.16–31.x.x, and names like nas, *.local or *.home.arpa — and a refusal now tells you what it wants. A public http:// address is still turned down: the password rides on every request in the clear. Thanks to @xmha97 for reporting it (#28).
Closing the window can quit omacal. Settings → General → Closing the window quits omacal, off by default. Off is still the right default — reminders only fire while omacal is running, so an app that ends with its window is one whose notifications quietly stop — but "I closed it, I'm done with it" is a fair way to want a desktop app to behave, and until now the only way out was a tray icon you may have turned off yourself. Thanks to @xmha97 for asking (#26).
The AppImage now says what it is, and where to update from. It carries the X-AppImage-* desktop keys — name, version, architecture, homepage — so AppImage managers can recognise it and notice a new release, and it now ships with real AppImage update information plus the matching .zsync file beside it, which is what AppImageUpdate, appimaged and AppManager actually fetch to update in place. omacal's own in-app Update button is unchanged and still the simplest route. Thanks to @xmha97 for the request (#27).
Install / update: on v0.4.0+, click Update in the header's notice. Or:
curl -fsSL https://extremelabs.io/omacal/install.sh | sh
omacal skill install
omacal v0.14.0
What's new
You decide what a login does with omacal. Settings → General → When you log in now offers three answers: don't start it, start it, or start it in the background — running and syncing, reminders firing, the bar widget's feed current, and no window on your screen. Open it whenever you want from the widget, the tray, or your app launcher; launching omacal yourself always shows the window.
And turning it off now sticks. Until this release omacal rewrote its own launch entry on every single start, so deleting ~/.config/autostart/omacal.desktop (or the macOS LaunchAgent) by hand achieved nothing — it came straight back the next time you opened the app. Choosing "Don't start omacal" removes it there and then, and leaves it removed. Thanks to @xmha97 for reporting it (#22).
Starting stays the default: a reminder can only fire while omacal is running, so an omacal that waits to be opened is one whose notifications quietly do not arrive.
Install / update: on v0.4.0+, click Update in the header's notice. Or:
curl -fsSL https://extremelabs.io/omacal/install.sh | sh
omacal skill install
omacal v0.13.0
What's new
The draft on the grid wears its calendar's colour. Start a new event and the dashed placeholder is now painted in the colour of the calendar it would be written to — so the grid says which calendar you are creating on, not just the dot in the form. Switch calendar in the form and the tile follows. The sweep you draw before the form opens is already that colour too.
Enter takes the only guest the autocomplete found. Type a name fragment, and if exactly one person comes up, Return invites them — no arrow key first. Typing a full address still invites exactly the address you typed, and two or more matches still wait to be told which.
Install / update: on v0.4.0+, click Update in the header's notice. Or:
curl -fsSL https://extremelabs.io/omacal/install.sh | sh
omacal skill install
omacal v0.12.1
What's new
The multi-day ribbon stays put while you name the event. Sweep sideways to block out days and the bar you drew no longer disappears the moment the form opens — it becomes the dashed draft, in the same place, across the same days, until you save or cancel. Same as a timed event has always behaved.
The all-day band shows four rows instead of two. A week with three people on leave was spending its whole band saying "+1 more". The band sizes itself to what it holds, so the rows it was hiding weren't buying the grid anything.
Install / update: on v0.4.0+, click Update in the header's notice. Or:
curl -fsSL https://extremelabs.io/omacal/install.sh | sh
omacal skill install