A simple GTK based notification daemon for SwayWM
Go to file
2022-08-15 18:47:43 +02:00
.github/workflows Separate arch and ubuntu GH Actions into their own files. Fixes #151 2022-08-01 23:15:55 +02: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 Removed depends versions from PKGBUILD 2022-06-29 18:09:22 +02:00
completions Fixed swaync-client zsh completions 2022-05-11 19:16:54 +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 Customize and reorder widgets in Control Center (#150) 2022-08-03 17:02:09 +02:00
services Fixes #152 2022-08-15 18:47:43 +02:00
src Fixed Control Center sometimes dismissing when clicking inside of CC 2022-08-06 16:23:35 +02: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 Fix gschema not being compiled on install (#138) 2022-06-29 22:38:11 +02:00
README.md Customize and reorder widgets in Control Center (#150) 2022-08-03 17:02:09 +02:00
swaync.rpkg.spec CI: Add Fedora builds (#144) (#148) 2022-07-23 15:48:52 +02:00

SwayNotificationCenter

Building

Linting

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

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

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

Gentoo: An unofficial ebuild is available in GURU

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

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(1) 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 propeties doesn't match, the script will be skipped . If a notification doesn't include one of the properties, that property will be skipped

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": "~/.config/swaync/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

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}",
    ...
  },

Screenshots

Screenshot of desktop notification

Screenshot of panel

I wonder how this would look with some blur 🤔