Skip to content
locainin edited this page Jul 1, 2026 · 3 revisions

Rules

Rules apply per-notification overrides based on app metadata and notification fields. All matches are case-insensitive substring matches.

Fields

  • name: optional rule label for logging.
  • app: app name match.
  • summary: summary match.
  • body: body match.
  • category: category hint match.
  • urgency: low, normal, critical (or 0, 1, 2).
  • no_popup: suppress popups.
  • silent: suppress sound.
  • force_urgency: override urgency (low, normal, critical).
  • expire_timeout_ms: override timeout (-1 default, 0 never expire).
  • resident: force resident flag.
  • transient: force transient flag.

Urgency values accept either strings or numbers:

  • low or 0
  • normal or 1
  • critical or 2

Invalid urgency values make config loading fail instead of being guessed.

Order

Rules are evaluated in order. Later rules can override earlier ones.

Rules are applied after the notification payload has been sanitized and before popup, sound, and expiration decisions are made. That means a rule can:

  • silence a notification before sound playback
  • suppress a popup while still allowing history storage
  • force critical urgency before DND popup filtering runs
  • change timeout behavior for matching notifications

Dismissed notifications are not archived. Transient notifications are archived only when [history].transient_to_history = true, even if a rule marks the notification transient.

Examples

[[rules]]
name = "quiet-slack"
app = "slack"
no_popup = true
silent = true

[[rules]]
name = "critical-alerts"
summary = "alert"
force_urgency = "critical"
expire_timeout_ms = 10000

Clone this wiki locally