# Crustace Notifier

`crustace-notifier` is the notification daemon for the Crustace desktop. It
claims the `org.freedesktop.Notifications` D-Bus name and paints toasts on a
Crustace layer-shell surface using [ltk](../ltk).

It lives in the desktop layer (alongside the portal backend), not in the OS —
the same way GNOME Shell and Plasma each ship their own notification UI. See the
project layering: Eydos = OS, Crustace = desktop, Forge = compositor.

## Features

- Implements the freedesktop Notifications spec: `Notify`, `CloseNotification`,
  `GetCapabilities`, `GetServerInformation`, plus the `NotificationClosed` /
  `ActionInvoked` signals.
- Claims the name with `REPLACE_EXISTING | ALLOW_REPLACEMENT`, so it can take
  over from gnome-shell / mako / dunst.
- Renders toasts on a full-screen transparent Overlay layer-shell surface;
  cards anchor top-right, clearing the Forge topbar. The input region is empty
  when the stack is empty, so clicks fall through to the apps below.
- `expire_timeout` per spec: `-1` → 5 s default, `0` → long-timeout placeholder,
  `>0` → literal ms. Dismissals re-emit `NotificationClosed` with the correct
  reason (1 expired, 2 user, 3 closed-by-call).
- D-Bus runs on a tokio worker thread (zbus is async); ltk owns the main thread.
  A one-way channel carries `Show` / `Dismiss` to the UI; an async channel flows
  dismissals back.

## Building

```bash
cargo build --release
```

## Running

Installed as a systemd `--user` unit with D-Bus activation (see `data/`), so it
starts on demand the first time a client sends a notification:

```bash
systemctl --user start crustace-notifier.service
```

## License

LGPL-2.1-only. See [LICENSE](LICENSE).
