Better Notifications
Two small fixes to Omarchy's notifications, in one plugin: a visible dismiss button on every toast, and an unread bell in the bar that clears and stays cleared.

Companion plugin. Better Notifications pairs with Flat Tray, which shows every system-tray icon directly in the bar instead of hiding them behind a drawer. They are independent and either works alone, but they are designed together and installing both is recommended: the bell handles what arrives, the tray handles what is already running. They stay separate plugins on purpose, so each can be placed anywhere in the bar on its own.
On your privacy. Nothing here is a new route for the content of your notifications. There is no network code anywhere in this plugin, so no title, body, or app name is ever sent, uploaded, or phoned home, and nothing is logged, indexed, or analysed. The bell reads Omarchy's own history only to draw the dropdown on screen, and keeps none of it: its own state is two timestamps and a list of filenames, never the text. The service is Omarchy's own daemon and handles notifications exactly as it already did; the code added to it draws a dismiss button and nothing else. This is quality of life on top of what Omarchy already keeps, not a new place your content goes.
The problem
Toasts have no visible way to close them. Omarchy's popups can be dismissed, with a right-click, but nothing on screen says so. A critical toast, like a crash notification, sits there until it times out, and a first-time user has no way to guess the gesture exists.
A cleared notification list does not stay cleared. Notification-center plugins typically keep their own archive copied out of Omarchy's history. That opens a specific failure: clear empties the copy, then the next time the watcher restarts (a shell restart, a plugin reload) it re-syncs from Omarchy's history files, which are still sitting on disk, and silently resurrects everything you just cleared.
The solution
A dismiss button, and no second copy of the data.
The toast gets a small "X" in its corner. That is the entire change to the popup: the notification daemon, DND, queueing, and the history panel are Omarchy's own code, untouched. It looks like it shipped that way because, apart from the button, it did.
The bell keeps no archive of its own. bin/notify-bell reads straight from ~/.local/state/omarchy/notifications on every call and filters the result against two small timestamp floors it owns, seen and cleared. There is no separate copy for a later sync to refill from, so a clear stays cleared across shell restarts. Nothing here writes to Omarchy's notification directories; it only reads them.
The bell lights up only when something is unread and stays dim otherwise. Click it for a dropdown of what arrived, with a remove button per row and a Clear-all.
Install
omarchy plugin add https://github.com/WhiteWebDev/omarchy-better-notifications.git --enable
omarchy plugin disable omarchy.notifications
The second command retires Omarchy's stock notification service, which would otherwise compete with this one for the same D-Bus name. It is a separate, explicit step on purpose: see Why not clonedFrom.
The bell lands in the centre section of the bar. Move it anywhere with:
omarchy bar move whitewebdev.better-notifications --after omarchy.clock
Dependencies
jq only, which is a hard dependency of the omarchy package itself, so it is already installed on every Omarchy system. This plugin installs nothing and pulls in nothing.
Why not clonedFrom
A plugin can declare omarchy.clonedFrom to have Omarchy retire the stock component automatically. This plugin deliberately does not, because it is a bar-widget and a service, and the stock component it replaces is a pure service. In that combination Omarchy's clone-restore writes the cloned service id into the bar layout when the plugin is disabled, which leaves a stray entry in your bar and also hijacks placement, so the bell can never honour its default section. One explicit command is a better trade than a corrupted bar.
Uninstall
omarchy plugin disable whitewebdev.better-notifications
omarchy plugin enable omarchy.notifications
omarchy restart shell
To remove the files as well:
omarchy plugin remove whitewebdev.better-notifications
The bell's backing script
State lives in ~/.local/state/omarchy-notify-bell/: two timestamp files and a short list of individually-removed keys, pruned automatically. The script is small bash and jq:
notify-bell list # current notifications as JSON, newest first
notify-bell unread # count of unread notifications
notify-bell seen # mark now as "seen" (bell goes dim)
notify-bell clear # hide everything up to now
notify-bell remove KEY # hide one notification by its key
What this plugin does and does not do
Stated plainly, for your peace of mind and for reviewers:
- The repository is public and contains both installation and removal instructions.
- The license is MIT and every external dependency is documented above.
jqis the only one, and Omarchy already requires it. - All code here is either Omarchy's own first-party code, redistributed under its license, or original work by the author, who has the right to publish it.
- It does not overwrite your configuration without your consent. Enabling or disabling the plugin changes
shell.jsononly through Omarchy's ownomarchy plugincommands, the same as any other plugin, and disabling it leaves no stray entries behind. - It writes exactly what stock Omarchy writes, and one small file of its own. The service is Omarchy's notification daemon, so it maintains
~/.local/state/omarchy/notifications/just as the stock service does. The bell only reads that directory, never writes to it, and keeps its own state in~/.local/state/omarchy-notify-bell/: two timestamps and a list of the filenames you dismissed. No notification text is copied anywhere. - There is no network code anywhere in this plugin. Nothing is sent, uploaded, or phoned home.
- Retiring the stock notification service is your explicit second command, never something this plugin does behind your back.
- Listing on the Omarchy plugin marketplace is a listing decision, not a security audit. Read the source before you install it.
Security note
This replaces Omarchy's own notification daemon. It is a derivative of first-party code and only adds a UI element, with no change to how notifications are received, queued, or dispatched. Read Service.qml, components/NotificationCard.qml, and bin/notify-bell yourself before installing, as with any shell plugin.
Credit
Derivative work of Omarchy's own omarchy.notifications service (part of Omarchy by David Heinemeier Hansson / Basecamp), redistributed under the MIT License. See LICENSE.