Omahub
← All plugins
W

Better Notifications

by WhiteWebDev

Omarchy's notifications with a visible dismiss button on every toast, plus an unread bell with a clearable dropdown.

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
fa73efd
Scanned
1 month ago

No potentially dangerous behavior detected in the analyzed commit.

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

None
AI risk level
None
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
fa73efd
Reviewed
1 month ago

The plugin is a transparent derivative of Omarchy's notification service, adding a dismiss button and an unread bell. It contains no network code, no obfuscation, and no destructive commands; it only reads and writes local state with proper validation and size limits. The deterministic scan found no issues, and our independent review agrees.

How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/WhiteWebDev/omarchy-better-notifications --enable
System #bar #quickshell #system

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.

The bell lit in the bar beside the clock, and a toast carrying its dismiss button

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. jq is 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.json only through Omarchy's own omarchy plugin commands, 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.