# notifications The balloon renderer for the notification daemon (`notifyd`, a separate repo). It reads the daemon's published files through the `Notify` singleton and draws one balloon per live notification, bottom-right of `DP-1`. ## Suppression lives here The daemon does not know about DND, snooze or mute. This component withholds balloons: `status.dnd` suppresses low and normal (and critical too when `dndPassCritical` is off), a muted app is always withheld, and `notifyd/snooze` suppresses everything. The drawer's reserved space lists every live notification anyway. Placement, mute and the DND rule come from `~/.config/notifyd/config.json`, edited from the settings window (Desktop → Notifications). ## Sounds Played with `pw-play`, once per new or replaced notification, and only when its balloon would show: the drawer, snooze, mute and DND that withhold the balloon silence it too. Precedence: `silent` (the app's suppress-sound), then the app's own `sound`, then `sounds[urgency]` from the config. A restart records the queue without playing it. There is one player, so a new sound cuts the last. The status registry's quiet mode (`status.quiet`) silences every sound and leaves the balloons, as it does for the Claude and opencode hooks. ## The files are the interface $XDG_RUNTIME_DIR/notifyd/queue.json the live queue $XDG_RUNTIME_DIR/notifyd/history.json the ring of 20 $XDG_RUNTIME_DIR/notifyd/drawer "1" while the drawer holds the space $XDG_RUNTIME_DIR/notifyd/snooze an epoch second while snoozing ~/.config/notifyd/config.json settings, shared with the daemon `notifyctl` and `notify-snooze.sh` are in `~/bin`; without them the balloons draw but close and actions do nothing. ## Blur Hyprland blurs a layer surface only when a rule names its namespace. This component sets `keystone-notifications`; the rule is in `~/.config/hypr/sections/decorations.lua`. ## History rows The spec calls history rows closable individually. `notifyctl` has no per-id history delete, only `clear-history`, so the history page ships a clear all and inert rows. The daemon verb and the renderer row it needs are tracked in the `notifyd` repo's `TODO.md`; when that ships, the row's X is wired to `notifyctl history-remove`.