glassosd — one daemon for notifications, the volume/brightness OSD and a control centre

I’ve been building a Wayland notification daemon that also draws the volume/brightness OSD and a notification centre, so the three share one stylesheet instead of being three programs that look nothing like each other. It’s my first public release and I’d like to be told what’s wrong with it.

What made me start: dunst and swaync each had half of what I wanted. dunst has rate limiting and handles a wake-from-suspend burst properly; swaync has a real control centre. Neither had both, and neither touched the OSD.

The behaviour I care most about is what happens when things get busy. Thirty notifications arriving at once should become one card that says thirty, not thirty popups you sit through. That took several attempts to get right.

Being straight about what it does to Plasma: it takes over org.freedesktop.Notifications, and to avoid double popups you turn Plasma’s own OSD off. That is a real trade and I don’t want to undersell it — if you like Plasma’s notifications, this is not for you. Plasma integration is detected at runtime and never required at build time, so it also runs on Hyprland, sway and other wlroots compositors, where the caps/num lock OSD is the one thing that can’t work (org_kde_kwin_keystate is KWin-only).

It’s GPL-2.0-or-later, not by preference — src/osdmodel.cpp is a port of shell/osd.cpp from plasma-workspace, and the original authors’ copyright is carried in that file.


One thing worth knowing even if you never install it

While debugging why some apps’ notifications never arrived, I found something that affects dunst and swaync identically: on KDE, Flatpaks don’t talk to org.freedesktop.Notifications directly. They go through xdg-desktop-portal, and the KDE backend plasmanotify delivers straight into plasmashell’s own notification system. Those notifications never reach the notification daemon at all — they appear in Plasma’s popups instead, and nothing in the daemon’s log mentions them.

grep -r "impl.portal.Notification" /usr/share/xdg-desktop-portal/ ~/.config/xdg-desktop-portal/

If that says plasmanotify and you run any third-party notification daemon, that’s why some apps seem to ignore it. Routing org.freedesktop.impl.portal.Notification to the gtk backend fixes it.

I don’t know whether that’s considered a bug or intended — I’d genuinely like to know, and it’s the main reason I’m posting here rather than somewhere else.


Install (Fedora 43/44/Rawhide):

sudo dnf copr enable smalltardigrade/glassosd

sudo dnf install glassosd

Needs wlr-layer-shell-unstable-v1, so Plasma, Hyprland, sway, river, Wayfire and similar. Not GNOME, not X11.

Repo, screenshots and the full configuration reference: GitHub - SmallTardigrade/glassosd: Glass notification daemon, OSD and notification centre for Wayland — one visual language for notifications, volume/brightness OSD and a notification centre. Plasma, Hyprland, sway. · GitHub

There’s a man glassosdrc with every setting in it. Themes are JSON rather than CSS — QML has no CSS engine and I didn’t want to ship a fake one.

I’m a second-year student and this is the first thing I’ve released publicly, so I expect there’s plenty I’ve got wrong. Happy to hear it.