wispd should support a daemon-level Do Not Disturb / Focus mode that suppresses popup notifications without dropping notification delivery/state.
Why
This fits the current direction of the project:
Desired behavior
When DND/focus mode is enabled, wispd should:
- suppress normal popup notifications
- still accept notifications over
org.freedesktop.Notifications
- still retain them in history
- still make them available to the future notification center
- preserve
replaces_id behavior for updated notifications
Bypass policy should be defined, for example:
- allow critical urgency through
- optionally allow configured exceptions based on notification metadata such as
app_name, desktop-entry, and category
When DND is disabled, suppressed notifications should not be replayed as a burst of old popups by default; they should remain available via history/center.
Possible config shape
[dnd]
enabled = true
allow_critical = true
[[dnd.allow]]
desktop_entry = "org.signal.Signal"
[[dnd.allow]]
app_name = "Calendar"
[[dnd.allow]]
category = "alarm"
Config naming is flexible, but the idea is:
app_name matches the Notify call field
desktop_entry maps to the desktop-entry notification hint
category maps to the category notification hint
Control surface
This should support runtime:
- enable
- disable
- toggle
- status query
This likely belongs in the control path planned in #3, e.g. wispctl dnd on|off|toggle|status.
State model
DND should be a presentation policy, not a delivery failure:
- notifications are still received
- popup suppression is separate from dismissal/removal
- history/center state remains intact
Acceptance criteria
- users can enable/disable DND/focus mode
- normal notifications are suppressed from the live popup stack while active
- suppressed notifications are still received and retained
replaces_id continues to work correctly during DND
- bypass behavior is clearly defined
- runtime control/query is available, ideally via the future control CLI/API
wispdshould support a daemon-level Do Not Disturb / Focus mode that suppresses popup notifications without dropping notification delivery/state.Why
This fits the current direction of the project:
Desired behavior
When DND/focus mode is enabled,
wispdshould:org.freedesktop.Notificationsreplaces_idbehavior for updated notificationsBypass policy should be defined, for example:
app_name,desktop-entry, andcategoryWhen DND is disabled, suppressed notifications should not be replayed as a burst of old popups by default; they should remain available via history/center.
Possible config shape
Config naming is flexible, but the idea is:
app_namematches theNotifycall fielddesktop_entrymaps to thedesktop-entrynotification hintcategorymaps to thecategorynotification hintControl surface
This should support runtime:
This likely belongs in the control path planned in #3, e.g.
wispctl dnd on|off|toggle|status.State model
DND should be a presentation policy, not a delivery failure:
Acceptance criteria
replaces_idcontinues to work correctly during DND