swaync - A simple notification daemon with a GTK gui for notifications and the control center
swaync [option]
-h, --help
Show help options
-v, --version
Prints version
-s, --style <CSS file>
Use a custom Stylesheet file
-c, --config <Config file>
Use a custom config file
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
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.
To reload the config, you’ll need to run swaync-client --reload-config
For information on the config file format, see swaync(5)
Scripting rules and logic:
1. Only
one script can be fired per notification
2. Each script requires ‘exec‘ and at least one
of the other properties
3. All listed properties must match the notification for the
script to be ran
4. If any of the properties doesn’t match, the script
will be skipped
5. If a notification doesn’t include one of the
properties, that property will be skipped
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... |
}
To completely disable scripting, the project needs to be built like so:
meson build
-Dscripting=false
ninja -C build
meson install -C build
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": "ï·", | |||
"inhibited-notification": "ï¢<span foreground=’red’><sup>ï</sup></span>", | |||
"inhibited-none": "ï¢", | |||
"dnd-inhibited-notification": "ï·<span foreground=’red’><sup>ï</sup></span>", | |||
"dnd-inhibited-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"; |
}