Important
This repository is archived. The code moved to Crown-OS/crownOs.
It is now crates/crownotify in the CrownOS workspace, with its history intact. The
crate name on crates.io is unchanged -- cargo add crownotify is unaffected by
where the source lives.
The nine desktop crates were merged because a change crossing two of them used to be two pull requests in two repositories that nothing built together. A schema change once broke the compositor for eight days before anyone noticed. One workspace, one lockfile, one CI run.
Issues and pull requests: https://github.com/Crown-OS/crownOs
This repository stays read-only so existing links keep resolving. Everything below describes the state at the time of the merge.
The notification daemon for CrownOS. Implements the freedesktop notification specification plus a CrownOS interface for rich notification types — calls, music and chat.
It is the only real D-Bus surface in the CrownOS desktop, and the only repository in the organization with integration tests.
Status: Partial. See Known limitations.
| Layer | Top |
| Anchor | TOP, RIGHT, BOTTOM |
| Width | 400 |
| Namespace | crownotify |
All on the session bus.
| Name | Path |
|---|---|
org.freedesktop.Notifications |
/org/freedesktop/Notifications |
io.crownos.crownotify |
/io/crownos/crownotify |
Owning the freedesktop name means any application that raises a desktop
notification works with CrownOS out of the box. The CrownOS interface adds
OpenNotificationCenter, CloseNotificationCenter and
Send{General,Call,Music,Chat}Notification.
| Name | Methods |
|---|---|
io.crownos.crowncrate |
PickupCall, DeclineCall |
Pressing pickup or decline on a call toast calls through to
crowncrate-linux.
That daemon has no D-Bus code at all — the service does not exist yet.
crownotifyimplements the calling side and tests it against a mock.
Any Wayland compositor supporting wlr-layer-shell, plus D-Bus.
Native dependencies (Arch):
sudo pacman -S --needed base-devel pkgconf dbus \
wayland wayland-protocols libxkbcommon \
vulkan-icd-loader mesa libglvnd fontconfigFull list, including Debian/Ubuntu: Prerequisites.
You need the dev overlay first.
crownotifydepends oncrownshell = "0.3", and 0.3 is not published — crates.io has onlycrownshell0.1.0 and 0.2.0. A fresh clone fails atcargo metadatauntil Cargo is pointed at a localcrownshellcheckout.
crownos-setup's./bootstrap.sh --devclones the repos side by side and writes a[patch.crates-io]overlay into a.cargo/config.tomlone directory above them:~/crownos/ ├── .cargo/config.toml # [patch.crates-io] crownshell = { path = "crownshell" } ├── crownotify/ └── crownshell/Cargo walks up from the working directory to find that file, and the paths in it are relative to the file's own directory. No particular layout inside a repo is required.
cargo runIt will fail to start if another notification daemon already owns
org.freedesktop.Notifications.
dbus-run-session -- cargo test -- --test-threads=1Both parts matter. The tests register real well-known names on the session
bus, so they need one to exist, and they must not run concurrently — the internal
OnceLock<Mutex<()>> is per-binary and there are two test binaries. They also
conflict with a real crownotify already holding the name.
An ignored test runs against a real phone-bridge daemon rather than a mock:
cargo test -- --ignored real_crowncrateA smol thread hosts zbus. Notifications land in an
Arc<Mutex<VecDeque<Notification>>> inbox, and a calloop::ping::Ping wakes the
crownshell event loop and requests a frame — the pattern crownshell's docs
recommend for getting a D-Bus signal onto the render thread.
- It ignores
notifications.ronentirely, including Do Not Disturb.toggle_dnd()exists and nothing calls it. - There is no notification centre.
OpenNotificationCenterandCloseNotificationCenteronly log. CloseNotificationdoes nothing and the three declared signals are never emitted.GetCapabilitiesover-advertises — it claimsaction-icons,actions,body-images,soundandpersistence; none are implemented.models/audio.rsandmodels/display.rsare empty structs, though theNotificationenum has variants for them.- Only
Generalnotifications expire. Everything else lives until dismissed. Notifydiscardsapp_iconandhints.
See the organization-wide
contribution guide.
Default branch here is main.
Licensed under the MIT License.