swaync - Configuration file

NAME  CONFIGURATION  IF BUILT WITH SCRIPTING 

NAME

swaync - Configuration file

CONFIGURATION

Using a text editor with a JSON language server is recommended when editing the config file to be able to detect config errors

positionX

type: string

default: right

values: left, right, center

description: Horizontal position of control center and notification window

positionY

type: string

default: top

values: top, center, bottom

description: Vertical position of control center and notification window

layer

type: string

default: overlay

values: background, bottom, top, overlay

description: Layer of notification window relative to normal windows.

background is below all windows, overlay is above all windows.

layer-shell

type: bool

default: true

description: Wether or not the windows should be opened as layer-shell

surfaces. Note: Requires swaync restart to apply

cssPriority

type: string

default: application

values: application, user

description: Which GTK priority to use when loading the default and user

CSS files. Pick "user" to override XDG_CONFIG_HOME/gtk-3.0/gtk.css

control-center-margin-top

type: integer

default: 0

description: The margin (in pixels) at the top of the notification center. 0 to disable

control-center-margin-bottom

type: integer

default: 0

description: The margin (in pixels) at the bottom of the notification center. 0 to disable

control-center-margin-right

type: integer

default: 0

description: The margin (in pixels) at the right of the notification center. 0 to disable

control-center-margin-left

type: integer

default: 0

description: The margin (in pixels) at the left of the notification center. 0 to disable

control-center-layer

type: string

default: top

values: background, bottom, top, overlay

description: Layer of control center window relative to normal windows.

background is below all windows, overlay is above all windows.

notification-2fa-action

type: bool

default: true

description: If each notification should display a ’COPY "1234"’ action

timeout

type: integer

default: 10

description: The notification timeout for notifications with normal priority

timeout-low

type: integer

default: 5

description: The notification timeout for notifications with low priority

timeout-critical

type: integer

default: 0

description: The notification timeout for notifications with critical priority. 0 to disable

notification-window-width

type: integer

default: 500

description: Width of the notification in pixels

keyboard-shortcuts

type: bool

default: true

description: If control center should use keyboard shortcuts

image-visibility

type: string

default: always

values: always, when-available, never

description: An explanation about the purpose of this instance.

transition-time

type: integer

default: 200

description: The notification animation duration. 0 to disable

hide-on-clear

type: bool

default: false

description: Hides the control center after pressing "Clear All"

hide-on-action

type: bool

default: true

description: Hides the control center when clicking on notification action

fit-to-screen

type: bool

default: true

description: Whether the control center should expand vertically to fill the screen

control-center-height

type: integer

default: 500

description: The control centers height in pixels.

This setting is ignored when fit-to-screen it set to "true"

control-center-width

type: integer

default: 500

description: The control centers width in pixels

notification-visibility

type: object

visibility object properties:

state

type: string

optional: false

default: enabled

values: ignored, muted, transient, enabled

description: The notification visibility state.

override-urgency

type: string

optional: true

default: unset

values: unset, low, normal, critical

description: The new urgency for the notification if set.

app-name

type: string

optional: true

description: The app-name. Uses Regex.

desktop-entry

type: string

optional: true

description: The desktop-entry. Uses Regex.

summary

type: string

optional: true

description: The summary of the notification. Uses Regex.

body

type: string

optional: true

description: The body of the notification. Uses Regex.

urgency

type: string

optional: true

default: Normal

values: Low, Normal, Critical

description: The urgency of the notification.

category

type: string

optional: true

description: Which category the notification belongs to. Uses Regex.

description: Set the visibility or override urgency of each incoming

notification.

If the notification doesn’t include one of the properties, that

property will be ignored. All properties (except for state) use

regex. If all properties match the given notification, the

notification will be follow the provided state.

Only the first matching object will be used.

example:

{

"notification-visibility": {

"example-name": {

"state": "The notification state",

"app-name": "Notification app-name Regex",

"summary": "Notification summary Regex",

"body": "Notification body Regex",

"urgency": "Low or Normal or Critical",

"category": "Notification category Regex"

}

}

}

widgets
type: array
Default values: ["title", "dnd", "notifications"]
Valid array values (see widget-config for more information):
notifications

required: true
optional: false
title

optional: true
dnd

optional: true
label

optional: true
mpris

optional: true
menubar

optional: true
buttons-grid

optional: true
inhibitors

optional: true
description:
Which order and which widgets to display.
If the "notifications" widget isn’t specified, it
will be placed at the bottom.
multiple of same widget:
Append a # with any value to the end of the widget name.
Example: "title#TheMainTitle"
To address this widget specifically in the css file use the css class .TheMainTitle
example:

{

"widgets": [

"inhibitors",

"title",

"dnd",

"notifications"

]

}

widget-config
type: object
description: Configure specific widget properties.
multiple of same widget:
Append a # with any value to the end of the widget name.
Example: "title#TheMainTitle"
To address this widget specifically in the css file use the css class .TheMainTitle
Widgets to customize:
title

type: object
css class: widget-title
properties:
text:
type: string
optional: true
default: "Notifications"
description: The title of the widget
clear-all-button:
type: bool
optional: true
default: true
description: Whether to display a "Clear All" button
button-text:
type: string
optional: true
default: "Clear All"
description: "Clear All" button text
description: The notification visibility state.
dnd

type: object
css class: widget-dnd
properties:
text:
type: string
optional: true
default: "Do Not Disturb"
description: The title of the widget
description: Control Center Do Not Disturb Widget.
label

type: object
css class: widget-label
properties:
text:
type: string
optional: true
default: "Label Text"
description: The text content of the widget
clear-all-button:
type: integer
optional: true
default: 5
description: The maximum lines
description: A generic widget that allows the user to add custom text.
mpris

type: object
css classes:
widget-mpris
widget-mpris-player
widget-mpris-title
widget-mpris-subtitle
properties:
image-size:
type: integer
optional: true
default: 96
description: The size of the album art.
image-radius:
type: integer
optional: true
default: 12
description: The border radius of the album art.
description: A widget that displays multiple music players.
menubar

type: object
css classes:
widget-menubar
.widget-menubar>box>.menu-button-bar
name of element given after menu or buttons with #
patternProperties:
menu#<name>:
type: object
properties:
label:
type: string
optional: true
default: "Menu"
description: Label of button to show/hide menu dropdown
position:
type: string
optional: true
default: "right"
description: Horizontal position of the button in the bar
enum: ["right", "left"]
animation-type:
type: string
optional: true
default: "slide_down"
description: Animation type for menu
enum: ["slide_down", "slide_up", "none"]
animation-duration:
type: integer
optional: true
default: 250
description: Duration of animation in milliseconds
actions:
type: array
Default values: []
Valid array values:
type: object
properties:
label:
type: string
default: "label"
description: Text to be displayed in button
command:
type: string
default: ""
description: "Command to be executed on click"
description: A list of actions containing a label and a command
description: A button to reveal a dropdown with action-buttons
buttons#<name>:
type: object
properties:
position:
type: string
optional: true
default: "right"
description: Horizontal position of the buttons in the bar
enum: ["right", "left"]
actions:
type: array
Default values: []
Valid array values:
type: object
properties:
label:
type: string
default: "label"
description: Text to be displayed in button
command:
type: string
default: ""
description: "Command to be executed on click"
description: A list of actions containing a label and a command
description: A list of buttons to be displayed in the menu-button-bar
buttons-grid

type: object
css class: widget-buttons (access buttons with >flowbox>flowboxchild>button)
properties:
actions:
type: array
Default values: []
Valid array values:
type: object
properties:
label:
type: string
default: "label"
description: Text to be displayed in button
command:
type: string
default: ""
description: "Command to be executed on click"
description: A list of actions containing a label and a command
description: A grid of buttons that execute shell commands
volume

type: object
css class:
widget-volume
per-app-volume
properties:
label:
type: string
optional: true
default: "Volume"
description: Text displayed in front of the volume slider
show-per-app:
type: bool
optional: true
default: false
description: Show per app volume control
empty-list-label:
type: string
optional: true
default: "No active sink input"
description: Text displayed when there are not active sink inputs
expand-button-label:
type: string
optional: true
default: "â§"
description: Label displayed on button to show per app volume control
collapse-button-label:
type: string
optional: true
default: "â©"
description: Label displayed on button to hide per app volume control
icon-size:
type: integer
optional: true
default: 24
description: Size of the application icon in per app volume control
animation-type:
type: string
optional: true
default: "slide_down"
description: Animation type for the per app volume control
enum: ["slide_down", "slide_up", "none"]
animation-duration:
type: integer
optional: true
default: 250
description: Duration of animation in milliseconds
description: Slider to control pulse volume
backlight

type: object
css class: widget-backlight
properties:
label:
type: string
optional: true
default: "Brightness"
description: Text displayed in front of the backlight slider
device:
type: string
optional: true
default: "intel_backlight"
description: Device in ‘/sys/class/backlight‘ or ‘/sys/class/leds‘
subsystem:
type: string
optional: true
default: "backlight"
description: Kernel subsystem for brightness control
enum: ["backlight", "leds"]
min:
type: integer
optional: true
default: 0
description: Lowest possible value for brightness
description: Slider to control screen brightness
inhibitors

type: object
css class: widget-inhibitors
properties:
text:
type: string
optional: true
default: "Inhibitors"
description: The title of the widget
clear-all-button:
type: bool
optional: true
default: true
description: Whether to display a "Clear All" button
button-text:
type: string
optional: true
default: "Clear All"
description: "Clear All" button text
description: Displayed if notifications are inhibited.

example:
{

"widget-config": {

"title": {

"text": "Notifications",

"clear-all-button": true,

"button-text": "Clear All"

},

"dnd": {

"text": "Do Not Disturb"

},

"label": {

"max-lines": 5,

"text": "Label Text"

},

"mpris": {

"image-size": 96,

"image-radius": 12

},

"menubar": {

"menu#power": {

"label": "Power",

"position": "right",

"actions": [

{

"label": "Shut down",

"command": "systemctl poweroff"

},

...

]

},

"buttons#screenshot": {

"position": "left",

"actions": [

{

"label": "Screenshot",

"command": "grim"

},

...

]

}

},

"buttons": {

"actions": [

{

"label": "wifi",

"command": "rofi-wifi-menu"

},

...

]

}

}

}

IF BUILT WITH SCRIPTING

script-fail-notify
type: bool
default: true
description: Sends a notification if a script fails to run

scripts
type: object
script object properties:
exec

type: string
optional: false
description: The script to run. Can also run regular shell commands.
app-name

type: string
optional: true
description: The app-name. Uses Regex.
desktop-entry

type: string
optional: true
description: The desktop-entry. Uses Regex.
summary

type: string
optional: true
description: The summary of the notification. Uses Regex.
body

type: string
optional: true
description: The body of the notification. Uses Regex.
urgency

type: string
optional: true
default: Normal
values: Low, Normal, Critical
description: The urgency of the notification.
category

type: string
optional: true
description: Which category the notification belongs to. Uses Regex.
run-on

type: string
optional: true
values: action, receive
default: receive
description: Whether to run this action when the notification is
received, or when an action is taken on it.
description: Which scripts to check and potentially run for every
notification. If the notification doesn’t include one of the properties,
that property will be ignored. All properties (except for exec) use regex.
If all properties match the given notification, the script will be run.
Only the first matching script will be run.
example:

{

"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"

}

}

}

You can also use these environment variables in your script:
SWAYNC_BODY="Notification body content"
SWAYNC_DESKTOP_ENTRY="Desktop entry"
SWAYNC_URGENCY="Notification urgency"
SWAYNC_TIME="Notification time"
SWAYNC_APP_NAME="Notification app name"
SWAYNC_CATEGORY="SwayNC notification category"
SWAYNC_REPLACES_ID="ID of notification to replace"
SWAYNC_ID="SwayNC notification ID"
SWAYNC_SUMMARY="Notification summary"


Updated 2024-01-29 - jenkler.se | uex.se