Repository navigation
Notifications
ii-p3drovfx doesn't use a notification daemon — it is one. The shell implements the freedesktop notification service itself (via Quickshell's notification stack), which is why notifications feel native everywhere: popups, the Dashboard, the Dynamic Island, the lock screen and the dock all draw from the same live model, with grouping, history and privacy rules applied consistently.
Don't install mako, dunst or swaync alongside — two daemons would fight over the same D-Bus name.
- See what you missed — press Super + N: the notification list lives in the middle of the Dashboard. Dismiss one, a whole app group, or everything.
- Silence popups — the silent quick toggle in the Dashboard turns on Do Not Disturb; notifications keep collecting quietly for later.
- Move or retune popups — Settings (Super + I) → Notifications: position, timeout, zoom, monitor pinning.
- Notifications while locked — off by default; opt in under the Lock Screen settings, ideally with redacted privacy mode. Details below.
- Popups — Material 3 notification popups with a configurable screen position (top/bottom, left/right), timeout (7 s by default) and zoom (50–200%). On multi-monitor setups they follow the focused monitor, or can be pinned to one specific monitor.
- The Sidebar Dashboard — the notification list lives in the center of the Dashboard, acting as your notification center.
- The Dynamic Island — with the notification notch enabled, notifications land in the island, contracted to a glance and expandable to full content and actions.
- The Bar & Dock — a bar indicator shows pending notifications; dock icons can carry notification badges (and the dock's launch-bounce fires on new ones).
- The lock screen — optionally, with serious privacy controls (below).
Notifications are grouped by application, sorted by most recent activity. Each one carries its full payload: summary, body, app icon, images, urgency, and actions — buttons you can click right from the popup or list (the shell can also attach its own contextual actions, e.g. for screenshots). Transient notifications (the kind apps mark as fleeting) are shown but deliberately not kept in history.
Progress hints embedded in notifications feed the Dynamic Island's Live Progress system, so a download notification can become a proper progress activity instead of a stream of updates.
History is persistent — the list survives shell restarts, and you can discard individual notifications, whole app groups, or everything at once.
Two layers of quiet:
- Manual DND — the silent toggle (in the Dashboard quick toggles) mutes popups; notifications still collect in the list for later.
- Auto-DND on fullscreen — enabled by default: when the focused window is fullscreen (game, movie, presentation), popups hold their fire automatically. There's also an Auto DND quick toggle for rule-based quiet time.
Notification sounds run through the shell's sound service — apps can request specific sounds via hints, and DND mutes them all.
Off by default, because showing notifications on a locked screen is a real privacy trade-off. When you opt in, you get a very complete rule system:
-
Privacy mode —
fullcontent,redacted(app + presence only), orcountOnly - Only since lock — show just what arrived while locked (default), not your whole backlog
- Per-app rules — a default policy (show/hide) plus always-show and never-show app lists
- Filters — skip transient notifications, skip low-urgency ones, and decide whether critical notifications override the redaction (default: they do — a dying battery deserves full text)
- Position, zoom and a maximum count round it out
Settings → Notifications covers position, timeout, zoom, monitor pinning and auto-DND; the lock-screen block lives with the Lock Screen settings. Persistent options: Config.options.notifications and Config.options.lock.notifications.
services/Notifications.qml is the heart: it wraps Quickshell's notification server with persistent storage, popup timeout management, app grouping, DND logic and discard signals that every surface listens to. modules/ii/notificationPopup/ renders the popups; the Dashboard's CenterWidgetGroup, the island's FloatingNotchNotification and the lock screen's notification view are all just different lenses on the same model — which is exactly why dismissing something in one place dismisses it everywhere.