A simple GTK based notification daemon for SwayWM
Go to file
2023-02-09 19:22:29 +01:00
.github a bunch of typo fixes (#187) 2022-12-13 12:14:11 +01:00
assets Panel image is correct image 2021-11-17 20:44:12 +01:00
build-aux/meson Replaced state cacher with gsettings 2022-06-19 14:01:22 +02:00
build-scripts Add COPYING and README to pkgbuild install (#200) 2023-01-14 13:05:02 +01:00
completions Add client flags to turn dnd on/off (#169) 2022-09-30 00:10:16 +02:00
data Replaced state cacher with gsettings 2022-06-19 14:01:22 +02:00
Dockerfiles Updated Ubuntu docker file to use 22.04 LTS 2022-07-24 00:57:24 +02:00
man Add ControllsWidget (#203) 2023-02-09 19:22:29 +01:00
services Fixes #152 2022-08-15 18:47:43 +02:00
src Add ControllsWidget (#203) 2023-02-09 19:22:29 +01:00
.gitignore Terminal completions (#44) 2021-12-24 21:53:28 +01:00
.uncrustify.cfg Notification.vala now follows vala coding style 2022-05-06 13:10:57 +02:00
.vala-lint.conf Line length lint now is error 2022-05-06 13:15:00 +02:00
COPYING Initial commit 2021-07-27 21:58:52 +02:00
meson_options.txt Man pages (#104) 2022-04-02 17:52:35 +02:00
meson.build Bump minimal meson version to 0.59.0, replace 'get_pkgconfig_variable' (#206) 2023-01-31 23:51:09 +01:00
README.md Add ControllsWidget (#203) 2023-02-09 19:22:29 +01:00

SwayNotificationCenter

Check build for Arch.

Check build for Fedora.

Check build for latest Ubuntu LTS.

Linting

A simple notification daemon with a GTK gui for notifications and the control center

Note: Only supports Desktops / Window Managers that support wlr_layer_shell_unstable_v1 like Sway or anything wlroots based

Screenshots

Screenshot of desktop notification

Screenshot of panel

Want to show off your sick config?

Post your setup here: Config flex 💪

Features

  • Keyboard shortcuts
  • Notification body markup with image support
  • A panel to view previous notifications
  • Show album art for notifications like Spotify
  • Do not disturb
  • Restores previous Do not disturb value after restart
  • Click notification to execute default action
  • Show alternative notification actions
  • Customization through a CSS file
  • Trackpad/mouse gesture to close notification
  • The same features as any other basic notification daemon
  • Basic configuration through a JSON config file
  • Hot-reload config through swaync-client
  • Customizable widgets

Available Widgets

These widgets can be customized, added, removed and even reordered

  • Title
  • Do Not Disturb
  • Notifications (Will always be visible)
  • Label
  • Mpris (Media player controls for Spotify, Firefox, Chrome, etc...)
  • Menubar with dropdown and buttons
  • Button grid

Planned Features

  • Slick animations 😎
  • Other build scripts than a PKGBUILD (debian and/or RHEL systems)

Install

Arch:

The package is available on the AUR:

Fedora:

The package is available on COPR:

dnf copr enable erikreider/SwayNotificationCenter
dnf install SwayNotificationCenter

Fedora Silverblue (and other rpm-ostree variants):

The package can be downloaded from COPR after adding the COPR repo as a ostree repo, and installed as a overlaid package:

ostree remote add SwayNotificationCenter https://download.copr.fedorainfracloud.org/results/erikreider/SwayNotificationCenter/fedora-$releasever-$basearch/
rpm-ostree install SwayNotificationCenter

Gentoo:

An unofficial ebuild is available in GURU

eselect repository enable guru
emaint sync -r guru
emerge --ask gui-apps/swaync

OpenSUSE Tumbleweed

sudo zypper install SwayNotificationCenter

Ubuntu:

Will be included in the official repos in the Lunar release.

Debian:

Will be included in the official repos in the Bookworm release.

Other:

meson build
ninja -C build
meson install -C build

Sway Usage

# Notification Daemon
exec swaync

# Toggle control center
bindsym $mod+Shift+n exec swaync-client -t -sw

Run

To start the daemon (remember to kill any other notification daemon before running)

./build/src/swaync

To toggle the panel

./build/src/swaync-client -t

To reload the config

./build/src/swaync-client -R

To reload css after changes

./build/src/swaync-client -rs

Control Center Shortcuts

  • Up/Down: Navigate notifications
  • Home: Navigate to the latest notification
  • End: Navigate to the oldest notification
  • Escape/Caps_Lock: Close notification panel
  • Return: Execute default action or close notification if none
  • Delete/BackSpace: Close notification
  • Shift+C: Close all notifications
  • Shift+D: Toggle Do Not Disturb
  • Buttons 1-9: Execute alternative actions
  • Left click button / actions: Activate notification action
  • Right click notification: Close notification

Configuring

The main config file is located in /etc/xdg/swaync/config.json. Copy it over to your .config/swaync/ folder to customize without needing root access. See swaync(5) man page for more information

To reload the config, you'll need to run swaync-client --reload-config

The main CSS style file is located in /etc/xdg/swaync/style.css. Copy it over to your ~/.config/swaync/ folder to customize without needing root access.

Scripting

Scripting rules and logic:

. Only one script can be fired per notification . Each script requires exec and at least one of the other properties . All listed properties must match the notification for the script to be ran . If any of the properties doesn't match, the script will be skipped . If a notification doesn't include one of the properties, that property will be skipped · If a script has run-on set to action, the script will only run when an action is taken on the notification

More information can be found in the swaync(5) man page

Notification information can be printed into a terminal by running G_MESSAGES_DEBUG=all swaync (when a notification appears).

Config properties:

{
  "scripts": {
    "example-script": {
      "exec": "Your shell command or script here...",
      "app-name": "Notification app-name Regex",
      "summary": "Notification summary Regex",
      "body": "Notification body Regex",
      "urgency": "Low or Normal or Critical",
      "category": "Notification category Regex"
    }
  }
  other non scripting properties...
}

config.json example:

{
  "scripts": {
    // This script will only run when Spotify sends a notification containing
    // that exact summary and body
    "example-script": {
      "exec": "/path/to/myRickRollScript.sh",
      "app-name": "Spotify"
      "summary": "Never Gonna Give You Up",
      "body": "Rick Astley - Whenever You Need Somebody"
    }
  }
  other non scripting properties...
}

Disable scripting

To completely disable scripting, the project needs to be built like so:

meson build -Dscripting=false
ninja -C build
meson install -C build

i3status-rs Example

Note

Ths requires i3status-rs version 0.30.0+

i3status-rs config

[[block]]
block = "notify"
format = " $icon {($notification_count.eng(1)) |}"
driver = "swaync"
[[block.click]]
button = "left"
action = "show"
[[block.click]]
button = "right"
action = "toggle_paused"

Waybar Example

This example requires NotoSansMono Nerd Font to get the icons looking right

Waybar config

  "custom/notification": {
    "tooltip": false,
    "format": "{icon}",
    "format-icons": {
      "notification": "<span foreground='red'><sup></sup></span>",
      "none": "",
      "dnd-notification": "<span foreground='red'><sup></sup></span>",
      "dnd-none": ""
    },
    "return-type": "json",
    "exec-if": "which swaync-client",
    "exec": "swaync-client -swb",
    "on-click": "swaync-client -t -sw",
    "on-click-right": "swaync-client -d -sw",
    "escape": true
  },

Waybar css file

#custom-notification {
  font-family: "NotoSansMono Nerd Font";
}

Alternatively, the number of notifications can be shown by adding {} anywhere in the format field in the Waybar config

  "custom/notification": {
    "format": "{} {icon}",
    ...
  },