2019-08-26 12:42:59 +00:00
|
|
|
waybar-custom(5)
|
|
|
|
# NAME
|
|
|
|
|
|
|
|
waybar - custom module
|
|
|
|
|
|
|
|
# DESCRIPTION
|
|
|
|
|
|
|
|
The *custom* module displays either the output of a script or static text.
|
|
|
|
To display static text, specify only the *format* field.
|
|
|
|
|
|
|
|
# CONFIGURATION
|
|
|
|
|
|
|
|
Addressed by *custom/<name>*
|
|
|
|
|
|
|
|
*exec*: ++
|
|
|
|
typeof: string ++
|
|
|
|
The path to the script, which should be executed.
|
|
|
|
|
|
|
|
*exec-if*: ++
|
|
|
|
typeof: string ++
|
2023-07-30 15:33:02 +00:00
|
|
|
The path to a script, which determines if the script in *exec* should be executed. ++
|
2019-08-26 12:42:59 +00:00
|
|
|
*exec* will be executed if the exit code of *exec-if* equals 0.
|
|
|
|
|
2020-09-06 19:47:34 +00:00
|
|
|
*exec-on-event*: ++
|
|
|
|
typeof: bool ++
|
|
|
|
default: true ++
|
2023-07-30 15:33:02 +00:00
|
|
|
If an event command is set (e.g. *on-click* or *on-scroll-up*) then re-execute the script after executing the event command.
|
2020-09-06 19:47:34 +00:00
|
|
|
|
2019-08-26 12:42:59 +00:00
|
|
|
*return-type*: ++
|
|
|
|
typeof: string ++
|
|
|
|
See *return-type*
|
|
|
|
|
|
|
|
*interval*: ++
|
|
|
|
typeof: integer ++
|
2023-07-30 15:33:02 +00:00
|
|
|
The interval (in seconds) in which the information gets polled. ++
|
|
|
|
Use *once* if you want to execute the module only on startup. ++
|
2023-09-19 21:52:48 +00:00
|
|
|
You can update it manually with a signal. If no *interval* or *signal* is defined, it is assumed that the out script loops it self. ++
|
|
|
|
If a *signal* is defined then the script will run once on startup and will will only update with a signal.
|
2019-08-26 12:42:59 +00:00
|
|
|
|
2020-03-25 21:30:22 +00:00
|
|
|
*restart-interval*: ++
|
2020-03-25 21:25:27 +00:00
|
|
|
typeof: integer ++
|
2023-07-30 15:33:02 +00:00
|
|
|
The restart interval (in seconds). ++
|
|
|
|
Can't be used with the *interval* option, so only with continuous scripts. ++
|
2020-03-25 21:30:22 +00:00
|
|
|
Once the script exit, it'll be re-executed after the *restart-interval*.
|
2020-03-25 21:25:27 +00:00
|
|
|
|
2019-08-26 12:42:59 +00:00
|
|
|
*signal*: ++
|
|
|
|
typeof: integer ++
|
2023-07-30 15:33:02 +00:00
|
|
|
The signal number used to update the module. ++
|
2023-09-19 21:52:48 +00:00
|
|
|
The number is valid between 1 and N, where *SIGRTMIN+N* = *SIGRTMAX*. ++
|
|
|
|
If no interval is defined then a signal will be the only way to update the module.
|
2019-08-26 12:42:59 +00:00
|
|
|
|
|
|
|
*format*: ++
|
|
|
|
typeof: string ++
|
|
|
|
default: {} ++
|
|
|
|
The format, how information should be displayed. On {} data gets inserted.
|
|
|
|
|
|
|
|
*format-icons*: ++
|
|
|
|
typeof: array ++
|
|
|
|
Based on the set percentage, the corresponding icon gets selected. The order is *low* to *high*.
|
|
|
|
|
|
|
|
*rotate*: ++
|
|
|
|
typeof: integer ++
|
|
|
|
Positive value to rotate the text label.
|
|
|
|
|
|
|
|
*max-length*: ++
|
|
|
|
typeof: integer ++
|
|
|
|
The maximum length in character the module should display.
|
|
|
|
|
2021-02-01 16:34:51 +00:00
|
|
|
*min-length*: ++
|
2023-07-30 15:33:02 +00:00
|
|
|
typeof: integer ++
|
|
|
|
The minimum length in characters the module should take up.
|
2021-02-01 16:34:51 +00:00
|
|
|
|
|
|
|
*align*: ++
|
2023-07-30 15:33:02 +00:00
|
|
|
typeof: float ++
|
|
|
|
The alignment of the text, where 0 is left-aligned and 1 is right-aligned. If the module is rotated, it will follow the flow of the text.
|
2021-02-01 16:34:51 +00:00
|
|
|
|
2019-08-26 12:42:59 +00:00
|
|
|
*on-click*: ++
|
|
|
|
typeof: string ++
|
|
|
|
Command to execute when clicked on the module.
|
|
|
|
|
2019-12-29 04:21:03 +00:00
|
|
|
*on-click-middle*: ++
|
|
|
|
typeof: string ++
|
|
|
|
Command to execute when middle-clicked on the module using mousewheel.
|
|
|
|
|
2019-08-26 12:42:59 +00:00
|
|
|
*on-click-right*: ++
|
|
|
|
typeof: string ++
|
|
|
|
Command to execute when you right clicked on the module.
|
|
|
|
|
2020-04-12 16:35:41 +00:00
|
|
|
*on-update*: ++
|
|
|
|
typeof: string ++
|
|
|
|
Command to execute when the module is updated.
|
|
|
|
|
2019-08-26 12:42:59 +00:00
|
|
|
*on-scroll-up*: ++
|
|
|
|
typeof: string ++
|
|
|
|
Command to execute when scrolling up on the module.
|
|
|
|
|
|
|
|
*on-scroll-down*: ++
|
|
|
|
typeof: string ++
|
|
|
|
Command to execute when scrolling down on the module.
|
|
|
|
|
|
|
|
*smooth-scrolling-threshold*: ++
|
|
|
|
typeof: double ++
|
|
|
|
Threshold to be used when scrolling.
|
|
|
|
|
|
|
|
*tooltip*: ++
|
|
|
|
typeof: bool ++
|
|
|
|
default: true ++
|
|
|
|
Option to disable tooltip on hover.
|
|
|
|
|
|
|
|
*escape*: ++
|
|
|
|
typeof: bool ++
|
|
|
|
default: false ++
|
|
|
|
Option to enable escaping of script output.
|
|
|
|
|
|
|
|
# RETURN-TYPE
|
|
|
|
|
|
|
|
When *return-type* is set to *json*, Waybar expects the *exec*-script to output its data in JSON format.
|
|
|
|
This should look like this:
|
|
|
|
|
|
|
|
```
|
|
|
|
{"text": "$text", "tooltip": "$tooltip", "class": "$class", "percentage": $percentage }
|
|
|
|
```
|
|
|
|
|
|
|
|
The *class* parameter also accepts an array of strings.
|
|
|
|
|
|
|
|
If nothing or an invalid option is specified, Waybar expects i3blocks style output. Values are *newline* separated.
|
|
|
|
This should look like this:
|
|
|
|
|
|
|
|
```
|
|
|
|
$text\\n$tooltip\\n$class*
|
|
|
|
```
|
|
|
|
|
|
|
|
*class* is a CSS class, to apply different styles in *style.css*
|
|
|
|
|
|
|
|
# FORMAT REPLACEMENTS
|
|
|
|
|
|
|
|
*{}*: Output of the script.
|
|
|
|
|
|
|
|
*{percentage}* Percentage which can be set via a json return-type.
|
|
|
|
|
|
|
|
*{icon}*: An icon from 'format-icons' according to percentage.
|
|
|
|
|
|
|
|
# EXAMPLES
|
|
|
|
|
|
|
|
## Spotify:
|
|
|
|
|
|
|
|
```
|
|
|
|
"custom/spotify": {
|
|
|
|
"format": " {}",
|
|
|
|
"max-length": 40,
|
|
|
|
"interval": 30, // Remove this if your script is endless and write in loop
|
|
|
|
"exec": "$HOME/.config/waybar/mediaplayer.sh 2> /dev/null", // Script in resources folder
|
2022-02-02 05:01:18 +00:00
|
|
|
"exec-if": "pgrep spotify",
|
|
|
|
"return-type": "json"
|
2019-08-26 12:42:59 +00:00
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## mpd:
|
|
|
|
|
|
|
|
```
|
|
|
|
"custom/mpd": {
|
|
|
|
"format": "♪ {}",
|
|
|
|
//"max-length": 15,
|
|
|
|
"interval": 10,
|
|
|
|
"exec": "mpc current",
|
|
|
|
"exec-if": "pgrep mpd",
|
|
|
|
"on-click": "mpc toggle",
|
|
|
|
"on-click-right": "sonata"
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## cmus:
|
|
|
|
|
|
|
|
```
|
|
|
|
"custom/cmus": {
|
|
|
|
"format": "♪ {}",
|
|
|
|
//"max-length": 15,
|
|
|
|
"interval": 10,
|
|
|
|
"exec": "cmus-remote -C \"format_print '%a - %t'\"", // artist - title
|
|
|
|
"exec-if": "pgrep cmus",
|
|
|
|
"on-click": "cmus-remote -u", //toggle pause
|
|
|
|
"escape": true //handle markup entities
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## Pacman
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
"custom/pacman": {
|
|
|
|
"format": "{} ",
|
|
|
|
"interval": "once",
|
|
|
|
"exec": "pacman_packages",
|
|
|
|
"on-click": "update-system",
|
|
|
|
"signal": 8
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## Alternate Pacman
|
|
|
|
|
|
|
|
```
|
|
|
|
"custom/pacman": {
|
|
|
|
"format": "{} ",
|
|
|
|
"interval": 3600, // every hour
|
|
|
|
"exec": "checkupdates | wc -l", // # of updates
|
|
|
|
"exec-if": "exit 0", // always run; consider advanced run conditions
|
|
|
|
"on-click": "termite -e 'sudo pacman -Syu'; pkill -SIGRTMIN+8 waybar", // update system
|
|
|
|
"signal": 8
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
You can use the signal and update the number of available packages with *pkill -RTMIN+8 waybar*.
|
|
|
|
|
|
|
|
# STYLE
|
|
|
|
|
|
|
|
- *#custom-<name>*
|
|
|
|
- *#custom-<name>.<class>*
|
|
|
|
- *<class>* can be set by the script. For more information see *return-type*
|