This commit is contained in:
2026-08-15 13:07:50 -07:00
275 changed files with 15644 additions and 2751 deletions
+18 -1
View File
@@ -29,13 +29,30 @@ The brightness can be controlled by dragging the slider across the bar or clicki
*device*: ++
typeof: string ++
The name of the preferred device to control. If left empty, a device will be chosen automatically.
The name of the preferred device to control. If left empty, a device will be chosen automatically. ++
Both screen backlights (the udev *backlight* subsystem) and keyboard backlights (LEDs in the udev *leds* subsystem, e.g. *white:kbd_backlight*) are supported; name such an LED here to control it. When left empty, a screen backlight is always preferred for automatic selection.
*interval*: ++
typeof: uint ++
default: 1000 ++
The interval in milliseconds at which the brightness is polled and the slider is updated.
*expand*: ++
typeof: bool ++
default: false ++
Enables this module to consume all left over space dynamically.
*Note*: As well as the JSON configuration, the slider modules are special in
that they *require* styling to work. You *need* to set *min-width* and/or
*min-height* (depending on whether your slider is vertical or not) for it to
display correctly. That is a GTK detail, not an issue with Waybar. See the
*STYLE* section below.
*Warning*: If *min* is set to *0* (default), the slider can set brightness to
*0*, which may completely disable the backlight on some devices, making the
screen fully black. Consider setting a small minimum value (e.g. *10*) or
configuring brightness keybinds as a fallback.
# EXAMPLES
```
+31 -1
View File
@@ -15,6 +15,11 @@ The *backlight* module displays the current backlight level.
default: 2 ++
The interval in which information gets polled.
*device*: ++
typeof: string ++
The name of the preferred backlight device to display. If left empty, a device will be chosen automatically. ++
Both screen backlights (the udev *backlight* subsystem) and keyboard backlights (LEDs in the udev *leds* subsystem, e.g. *white:kbd_backlight*) are supported; name such an LED here to control it. When left empty, a screen backlight is always preferred for automatic selection.
*format*: ++
typeof: string ++
default: {percent}% ++
@@ -74,7 +79,13 @@ The *backlight* module displays the current backlight level.
*reverse-scrolling*: ++
typeof: bool ++
Option to reverse the scroll direction.
default: false ++
Option to reverse the scroll direction for devices other than a mouse (touchpad, trackpad, etc).
*reverse-mouse-scrolling*: ++
typeof: bool ++
default: false ++
Option to reverse the scroll direction for mice.
*scroll-step*: ++
typeof: float ++
@@ -86,6 +97,15 @@ The *backlight* module displays the current backlight level.
default: 0.0 ++
The minimum brightness of the backlight.
*tooltip*: ++
typeof: bool ++
default: true ++
Option to disable tooltip on hover.
*tooltip-format*: ++
typeof: string ++
Text to be displayed in the tooltip.
*menu*: ++
typeof: string ++
Action that popups the menu.
@@ -104,6 +124,16 @@ The *backlight* module displays the current backlight level.
default: false ++
Enables this module to consume all left over space dynamically.
# FORMAT REPLACEMENTS
*{percent}*: The current brightness in percent.
*{percent_exp}*: The current brightness in percent, adjusted with a power curve to better match perceived brightness.
*{icon}*: The icon from *format-icons* chosen according to *{percent}*.
*{icon_exp}*: The icon from *format-icons* chosen according to *{percent_exp}*.
# EXAMPLE:
```
+45
View File
@@ -27,11 +27,26 @@ The *battery* module displays the current capacity and state (eg. charging) of y
default: false ++
Option to use the battery design capacity instead of its current maximal capacity.
*full-at-plugged*: ++
typeof: bool ++
default: false ++
When enabled, a battery that is *Full* while the adapter is online is reported with the *Plugged* status instead of *Full* (so you can style/format it separately). Disabled by default to preserve the existing *Full* behaviour.
*interval*: ++
typeof: integer ++
default: 60 ++
The interval in which the information gets polled.
*smooth-power*: ++
typeof: bool ++
default: false ++
Enable exponential smoothing of the battery power reading used to estimate the *{time}* remaining, so the estimate fluctuates less between refreshes.
*smooth-power-time-constant*: ++
typeof: double ++
default: 260.0 ++
The time constant (in seconds) of the *smooth-power* exponential filter. Only used when *smooth-power* is enabled. Values below 1.0 are clamped to 1.0.
*states*: ++
typeof: object ++
A number of battery states which get activated on certain capacity levels. See *waybar-states(5)*.
@@ -109,6 +124,11 @@ The *battery* module displays the current capacity and state (eg. charging) of y
default: true ++
Option to disable tooltip on hover.
*tooltip-format*: ++
typeof: string ++
default: {timeTo} ++
The tooltip format. See *CUSTOM FORMATS* for status/state-specific variants.
*bat-compatibility*: ++
typeof: bool ++
default: false ++
@@ -150,6 +170,12 @@ The *battery* module displays the current capacity and state (eg. charging) of y
*{health}*: The percentage of the highest-capacity battery's original maximum charge it can still hold.
The following additional replacement is available in *tooltip-format* (and its
custom variants) only:
*{timeTo}*: Either an estimate of time until full or empty, or "Full", "Plugged"
or "Empty" depending on the current battery status.
# TIME FORMAT
The *battery* module allows you to define how time should be formatted via *format-time*.
@@ -169,6 +195,11 @@ The *battery* module allows one to define custom formats based on up to two fact
*format-<status>-<state>*: You can also set a custom format depending on both values.
The tooltip format can be customized the same way. The best fitting from
*tooltip-format*, *tooltip-format-<state>*, *tooltip-format-<status>* and
*tooltip-format-<status>-<state>* will be used (using the same logic as
*format-\**).
# STATES
- Every entry (*state*) consists of a *<name>* (typeof: *string*) and a *<value>* (typeof: *integer*).
@@ -214,6 +245,20 @@ Where:
}
```
Custom icon set depending on the status (*format-icons* as an object):
```
"battery": {
"bat": "BAT2",
"interval": 60,
"format": "{capacity}% {icon}",
"format-icons": {
"default": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"],
"charging": ["󰢟", "󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅"]
}
}
```
# STYLE
- *#battery*
+19
View File
@@ -16,6 +16,10 @@ Addressed by *bluetooth*
typeof: string ++
Use the controller with the defined alias. Otherwise, a random controller is used. Recommended to define when there is more than 1 controller available to the system.
*controller-alias*: ++
typeof: string ++
Synonym for *controller*. If both are set, *controller-alias* takes precedence.
*format-device-preference*: ++
typeof: array ++
A ranking of bluetooth devices, addressed by their alias. The order is from *first displayed* to *last displayed*. ++
@@ -178,6 +182,9 @@ At the time of writing, the experimental features of BlueZ need to be turned on,
*{device_battery_percentage}*: Battery percentage of the displayed device if available. Use only in the config options defined below.
*{device_battery_percentage_peripheral}*: Battery percentage of the peripheral half of a split keyboard (e.g., ZMK keyboards with separate central and peripheral batteries). ++
This is read from GATT Battery Service characteristics that have a User Description descriptor. Use only in the config options defined below.
## CONFIGURATION
*format-connected-battery*: ++
@@ -220,6 +227,17 @@ At the time of writing, the experimental features of BlueZ need to be turned on,
}
```
Split keyboard with separate central/peripheral batteries (e.g., ZMK):
```
"bluetooth": {
"format-device-preference": [ "Keyball44" ],
"format": "",
"format-connected-battery": " {device_battery_percentage}%|{device_battery_percentage_peripheral}%",
"tooltip-format-connected": "{device_alias}\\nCentral: {device_battery_percentage}%\\nPeripheral: {device_battery_percentage_peripheral}%"
}
```
# STYLE
- *#bluetooth*
@@ -227,6 +245,7 @@ At the time of writing, the experimental features of BlueZ need to be turned on,
- *#bluetooth.off*
- *#bluetooth.on*
- *#bluetooth.connected*
- *#bluetooth.no-controller*
- *#bluetooth.discoverable*
- *#bluetooth.discovering*
- *#bluetooth.pairable*
+165 -156
View File
@@ -6,10 +6,10 @@ waybar - cava module
# DESCRIPTION
*cava* module for karlstav/cava project. See it on github: https://github.com/karlstav/cava.
Module supports two different frontends starting from the 0.15.0 release. The frontend that
will be used is managed by the method parameter in the [output] section of the cava configuration file.
The *cava* module integrates the *karlstav/cava* audio visualizer into Waybar.
It supports two frontends: a text-based *raw* frontend and a GPU-based *GLSL*
frontend. The active frontend is selected by the *method* option in the
*[output]* section of the cava configuration file.
# FILES
@@ -27,177 +27,194 @@ libcava lives in:
# CONFIGURATION
[- *Option*
:- *Typeof*
:- *Default*
:- *Description*
:[ *Type*
:[ *Default*
:[ *Description*
|[ *cava_config*
:[ string
:[
:< Path where cava configuration file is placed to
|[ *method* \[output\]
:[ string
:[
:< Manages which frontend Waybar cava module should use. Values: raw, sdl_glsl
:[ Path to the cava configuration file. When provided, cava settings are read from it first.
|[ *framerate*
:[ integer
:[ 30
:[ Frames per second. Is used as a replacement for *interval*
:[ Target frames per second. Replaces the generic *interval* option.
|[ *autosens*
:[ integer
:[ 1
:[ Will attempt to decrease sensitivity if the bars peak
:[ Automatically decrease sensitivity when the bars peak.
|[ *sensitivity*
:[ integer
:[ 100
:[ Manual sensitivity in %. If autosens is enabled, this will only be the initial value. 200 means double height. Accepts only non-negative values
:[ Manual sensitivity in %. If *autosens* is enabled, this is only the initial value. 200 means double height. Accepts only non-negative values.
|[ *bars*
:[ integer
:[ 12
:[ The number of bars
:[ The number of bars.
|[ *lower_cutoff_freq*
:[ long integer
:[ 50
:[ Lower cutoff frequencies for lowest bars the bandwidth of the visualizer
:[ Lower cutoff frequency for the visualizer bandwidth.
|[ *higher_cutoff_freq*
:[ long integer
:[ 10000
:[ Higher cutoff frequencies for highest bars the bandwidth of the visualizer
:[ Higher cutoff frequency for the visualizer bandwidth.
|[ *sleep_timer*
:[ integer
:[ 5
:[ Seconds with no input before cava main thread goes to sleep mode
:[ Seconds of silence before cava enters sleep mode.
|[ *hide_on_silence*
:[ bool
:[ false
:[ Hides the widget if no input (after sleep_timer elapsed)
:[ Hide the widget when silence lasts longer than *sleep_timer*.
|[ *format_silent*
:[ string
:[
:[ Widget's text after sleep_timer elapsed (hide_on_silence has to be false)
:[ Text shown when the module is silent and *hide_on_silence* is false. **Raw frontend only.**
|[ *format-icons*
:[ array
:[
:[ Array of characters used to render bar levels in the raw frontend. The number of items determines the dynamic range.
|[ *method* \[input\]
:[ string
:[ pulse
:[ Audio capturing method. Possible methods are: pipewire, pulse, alsa, fifo, sndio or shmem
:[ Audio capture backend. Supported values: pipewire, pulse, alsa, fifo, sndio, shmem.
|[ *source*
:[ string
:[ auto
:[ See cava configuration
:[ Audio source identifier. See the cava documentation for details.
|[ *sample_rate*
:[ long integer
:[ 44100
:[ See cava configuration
:[ See the cava documentation.
|[ *sample_bits*
:[ integer
:[ 16
:[ See cava configuration
:[ See the cava documentation.
|[ *stereo*
:[ bool
:[ true
:[ Visual channels
:[ Enable stereo visualization.
|[ *reverse*
:[ bool
:[ false
:[ Displays frequencies the other way around
:[ Reverse the bar order (highest frequencies on the left).
|[ *bar_delimiter*
:[ integer
:[ 0
:[ Each bar is separated by a delimiter. Use decimal value in ascii table(i.e. 59 = ";"). 0 means no delimiter
:[ Delimiter placed between bars in the raw output. Use a decimal ASCII value (e.g. 59 = ";"). 0 means no delimiter.
|[ *data_format*
:[ string
:[ ascii
:[ Raw data format. Can be 'binary' or 'ascii'. **Raw frontend only.**
|[ *raw_target*
:[ string
:[
:[ Raw output target. A fifo will be created if target does not exist. **Raw frontend only.**
|[ *monstercat*
:[ bool
:[ false
:[ Disables or enables the so-called "Monstercat smoothing" with or without "waves"
:[ Enable Monstercat smoothing.
|[ *waves*
:[ bool
:[ false
:[ Disables or enables the so-called "Monstercat smoothing" with or without "waves"
:[ Enable the waves effect alongside Monstercat smoothing.
|[ *noise_reduction*
:[ integer
:[ 77
:[ Range between 0 - 100. The raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth. 100 will be very slow and smooth, 0 will be fast but noisy
:[ double
:[ 0.77
:[ Smoothing factor between 0.0 and 1.0. Higher values produce slower, smoother animation; lower values are more reactive but noisy.
|[ *input_delay*
:[ integer
:[ 2
:[ Sets the delay before fetching audio source thread start working. On author's machine, Waybar starts much faster than pipewire audio server, and without a little delay cava module fails because pipewire is not ready
|[ *ascii_max_range*
:[ integer
:[ 7
:[ It's impossible to set it directly. The value is dictated by the number of icons in the array *format-icons*
|[ *data_format*
:[ string
:[ asci
:[ Raw data format. Can be 'binary' or 'ascii'
|[ *raw_target*
:[ string
:[ /dev/stdout
:[ Raw output target. A fifo will be created if target does not exist
|[ *menu*
:[ string
:[
:[ Action that popups the menu.
|[ *menu-file*
:[ string
:[
:[ Location of the menu descriptor file. There need to be an element of type GtkMenu with id *menu*
|[ *menu-actions*
:[ array
:[
:[ The actions corresponding to the buttons of the menu.
|[ *bar_spacing*
:[ integer
:[
:[ Bars' space between bars in number of characters
:[ 4
:[ Delay in seconds before starting audio capture. Increase this if Waybar starts before the audio server (e.g. PipeWire).
|[ *bar_width*
:[ integer
:[
:[ Bars' width between bars in number of characters
:[ Bar width in pixels. **Used by the GLSL frontend.**
|[ *bar_spacing*
:[ integer
:[
:[ Space between bars in pixels. **Used by the GLSL frontend.**
|[ *bar_height*
:[ integer
:[
:[ Useless. bar_height is only used for output in "noritake" format
|[ *background*
:[ Ignored by Waybar. Used only by cava's "noritake" output format.
|[ *menu*
:[ string
:[
:[ GLSL actual. Support hex code colors only. Must be within ''
|[ *foreground*
:[ Action that opens the menu.
|[ *menu-file*
:[ string
:[
:[ GLSL actual. Support hex code colors only. Must be within ''
|[ *gradient*
:[ integer
:[ 0
:[ GLSL actual. Gradient mode(0/1 - on/off)
|[ *gradient_count*
:[ integer
:[ 0
:[ GLSL actual. The count of colors for the gradient
|[ *gradient_color_N*
:[ string
:[ Location of the menu descriptor file. There must be a GtkMenu element with id *menu*.
|[ *menu-actions*
:[ array
:[
:[ GLSL actual. N - the number of the gradient color between 1 and 8. Only hex defined colors are supported. Must be within ''
:[ Actions corresponding to the buttons of the menu.
|[ *method* \[output\]
:[ string
:[ raw
:[ Cava output method. Set to *raw* for the text frontend or *sdl_glsl* for the GPU frontend. **This is set inside the *[output]* section of the cava configuration file, not in Waybar's JSON.**
|[ *sdl_width*
:[ integer
:[
:[ GLSL actual. Manages the width of the waybar cava GLSL frontend module
:[ GLSL frontend width in pixels. **GLSL only.**
|[ *sdl_height*
:[ integer
:[
:[ GLSL actual. Manages the height of the waybar cava GLSL frontend module
:[ GLSL frontend height in pixels. **GLSL only.**
|[ *min-length*
:[ integer
:[
:[ Requested width of the GLSL widget in pixels. If not set, falls back to *max-length*, then *sdl_width*. **GLSL only.**
|[ *max-length*
:[ integer
:[
:[ Fallback width of the GLSL widget if *min-length* is not set. **GLSL only.**
|[ *vertex_shader*
:[ string
:[
:[ Path to the vertex shader. **GLSL only; set in the *[output]* section of the cava configuration file.**
|[ *fragment_shader*
:[ string
:[
:[ Path to the fragment shader. **GLSL only; set in the *[output]* section of the cava configuration file.**
|[ *continuous_rendering*
:[ integer
:[ 0
:[ GLSL actual. Keep rendering even if no audio. Recommended to set to 1
:[ Continue rendering when silent. Set to 1 for smooth animation. **GLSL only; set in the *[output]* section of the cava configuration file.**
|[ *background*
:[ string
:[
:[ Background color as a '#RRGGBB' hex string (must be quoted). **GLSL only; set in the *[color]* section of the cava configuration file.**
|[ *foreground*
:[ string
:[
:[ Foreground color as a '#RRGGBB' hex string (must be quoted). **GLSL only; set in the *[color]* section of the cava configuration file.**
|[ *gradient*
:[ integer
:[ 0
:[ Enable gradient mode (0 = off, 1 = on). **GLSL only.** Can also be set in the *[color]* section of the cava configuration file.
|[ *gradient_count*
:[ integer
:[ 0
:[ Number of gradient colors (up to 8). **GLSL only.** Can also be set in the *[color]* section of the cava configuration file.
|[ *gradient_color_N*
:[ string
:[
:[ Gradient color N (18) as a '#RRGGBB' hex string (must be quoted). **GLSL only; set in the *[color]* section of the cava configuration file.**
Configuration can be provided as:
- The only cava configuration file which is provided through *cava_config*. The rest configuration can be skipped
- Without cava configuration file. In such case cava should be configured through provided list of the configuration option
- Mix. When provided both And cava configuration file And configuration options. In such case, waybar applies configuration file first and then overrides particular options by the provided list of configuration options
Configuration can be provided in three ways:
- **Cava config only**: set *cava_config* to a cava configuration file and omit all other options.
- **Waybar JSON only**: leave out *cava_config* and set every option in Waybar's module configuration.
- **Mixed**: provide a *cava_config* and also set specific options in Waybar's JSON. Waybar reads the file first, then overrides any values present in the JSON.
# ACTIONS
[- *String*
:- *Action*
:[ *Action*
|[ *mode*
:< Switch main cava thread and fetch audio source thread from/to pause/resume
:[ Toggle pause/resume for the audio capture and output threads.
# DEPENDENCIES
@@ -207,26 +224,32 @@ Configuration can be provided as:
# SOLVING ISSUES
. On start Waybar throws an exception "error while loading shared libraries: libcava.so: cannot open shared object file: No such file or directory".
It might happen when libcava for some reason hasn't been registered in the system. sudo ldconfig should help
. Waybar is starting but cava module doesn't react to the music
1. In such cases at first need to make sure usual cava application is working as well
2. If so, need to comment all configuration options. Uncomment cava_config and provide the path to the working cava config
3. You might set too huge or too small input_delay. Try to setup to 4 seconds, restart waybar, and check again 4 seconds past. Usual even on weak machines it should be enough
4. You might accidentally switch action mode to pause mode
. At startup Waybar fails with *"error while loading shared libraries: libcava.so: cannot open shared object file: No such file or directory"*.
This happens when libcava has not been registered in the system library cache. Run *sudo ldconfig* to refresh the cache.
This can also occur when Waybar is installed under */usr/local* but libcava is elsewhere. To fix it:
1. Remove the local libcava installation: *sudo rm -rfv /usr/local/include/cava /usr/local/lib64/pkgconfig/cava.pc /usr/local/lib64/libcava.so*
2. Reconfigure Waybar to use the system prefix: *meson configure build -Dprefix="/usr"*
3. Rebuild Waybar: *ninja -C build*
4. Install Waybar: *sudo meson install -C build*
# RISING ISSUES
. Waybar starts but the cava module does not react to audio.
1. First, verify that standalone cava works correctly.
2. If it does, comment out all Waybar cava options, uncomment *cava_config*, and point it to the working cava configuration file.
3. The *input_delay* may be too large or too small. Try setting it to 4 seconds, restart Waybar, and check again after that delay. This is usually sufficient, even on slower machines.
4. You may have accidentally toggled pause mode via an action.
For clear understanding: this module is a cava API's consumer. So for any bugs related to cava engine you should contact Cava upstream(https://github.com/karlstav/cava) ++
with the one Exception. Cava upstream doesn't provide cava as a shared library. For that, this module author made a fork libcava(https://github.com/LukashonakV/cava). ++
So the order is:
. cava upstream
. libcava upstream.
In case when cava releases new version and you're wanna get it, it should be raised an issue to libcava(https://github.com/LukashonakV/cava) with title ++
\[Bump\]x.x.x where x.x.x is cava release version.
# REPORTING ISSUES
This module is a consumer of the cava API. For bugs in the cava engine itself, please report them to [cava upstream](https://github.com/karlstav/cava) first.
Upstream cava does not provide a shared library. The Waybar cava module uses [libcava](https://github.com/LukashonakV/cava), a fork maintained by the module author, to provide one. If the issue is specific to the shared library packaging, report it to libcava.
When requesting a new upstream cava release to be packaged in libcava, open an issue at libcava with the title `[Bump] x.x.x`, where `x.x.x` is the desired cava version.
# EXAMPLES
## Raw frontend
```
"cava": {
//"cava_config": "$XDG_CONFIG_HOME/cava/cava.conf",
@@ -240,7 +263,6 @@ In case when cava releases new version and you're wanna get it, it should be rai
"source": "auto",
"stereo": true,
"reverse": false,
"bar_delimiter": 0,
"monstercat": false,
"waves": false,
"noise_reduction": 0.77,
@@ -251,36 +273,6 @@ In case when cava releases new version and you're wanna get it, it should be rai
}
},
```
# STYLE
- *#cava*
- *#cava.silent* Applied after no sound has been detected for sleep_timer seconds
- *#cava.updated* Applied when a new frame is shown
# FRONTENDS
## RAW
The cava raw frontend uses ASCII characters to visualize incoming audio data. Each ASCII symbol position corresponds to the value of the audio power pulse.
Under the hood:
```
. Incoming audio power pulse list is : 12684
. Configured array of ASCII codes is: ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" ]. See `format-icons` https://github.com/Alexays/Waybar/wiki/Module:-Cava#example
```
As a result cava frontend will give ▁▂▆█▄
Examples:
waybar config
```
"cava": {
"cava_config": "$XDG_CONFIG_HOME/cava/waybar_raw.conf",
"input_delay": 2,
"format-icons" : ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" ],
"actions": {
"on-click-right": "mode"
}
},
```
waybar_raw.conf
```
@@ -351,6 +343,7 @@ sleep_timer = 5
# README.md contains further information on how to setup CAVA for JACK.
#
# The options 'sample_rate', 'sample_bits', 'channels' and 'autoconnect' can be configured for some input methods:
# sample_rate: fifo, pipewire, sndio, oss
# sample_bits: fifo, pipewire, sndio, oss
@@ -452,7 +445,7 @@ bar_delimiter = 0
# Noise reduction, int 0 - 100. default 77
# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth
# 100 will be very slow and smooth, 0 will be fast but noisy.
# 100 will be very slow and smooth, 0 will be fast and noisy.
[eq]
@@ -461,33 +454,32 @@ bar_delimiter = 0
# Remember to uncomment more than one key! More keys = more precision.
# Look at readme.md on github for further explanations and examples.
```
## GLSL
The Cava GLSL frontend delegates the visualization of incoming audio data to the GPU via OpenGL.
There are some mandatory dependencies that need to be satisfied in order for Cava GLSL to be built and function properly:
## GLSL frontend
. epoxy library must be installed on the system
. Vertex and fragment shaders from the original project must be used. They should be downloaded, and the file paths must be configured correctly in the Waybar Cava configuration:
1. cava shaders [cava shaders](https://github.com/karlstav/cava/tree/master/output/shaders)
2. libcava shaders [libcava shaders](https://github.com/LukashonakV/cava/tree/master/output/shaders)
. It is highly recommended to have a separate cava configuration for the Waybar Cava GLSL module and to use this as the cava_config in the Waybar configuration.
. It is common for cava configurations to be placed in the XDG_CONFIG_HOME directory, including shaders as well. Consider keeping them in the $XDG_CONFIG_HOME/cava/shaders folder.
The GLSL frontend requires:
Key configuration options:
. The *epoxy* library.
. Vertex and fragment shaders from the cava project. Download them and place under _$XDG_CONFIG_HOME/cava/shaders_, then reference them in the cava configuration:
1. [cava shaders](https://github.com/karlstav/cava/tree/master/output/shaders)
2. [libcava shaders](https://github.com/LukashonakV/cava/tree/master/output/shaders)
. A separate cava configuration file is highly recommended.
. bars. The more values the parameter has, the more interesting the visualization becomes.
. method in output section must be set to sdl_glsl
. sdl_width and sdl_height manage the size of the module. Adjust them according to your needs.
. Shaders for sdl_glsl, located in $HOME/.config/cava/shaders. Example: "vertex_shader" = "pass_through.vert" "fragment_shader" = "spectrogram.frag"
. Set continuous_rendering to 1 to enable smooth rendering; set it to 0 otherwise. It is recommended to keep it set to 1.
. background, foreground, and gradient_color_N (where N is a number between 1 and 8) must be defined using hex code
Key cava configuration options for GLSL:
. *bars* — higher values produce more detailed visualization.
. *method* in *[output]* must be set to *sdl_glsl*.
. *sdl_width* and *sdl_height* control the module size.
. *vertex_shader* and *fragment_shader* point to the shader files under _$HOME/.config/cava/shaders_.
. *continuous_rendering* — set to 1 for smooth animation.
. *background*, *foreground*, and *gradient_color_N* must use hex codes inside single quotes.
Example:
waybar config
```
"cava": {
"cava_config": "$XDG_CONFIG_HOME/cava/waybar_cava#3.conf",
"cava_config": "$XDG_CONFIG_HOME/cava/waybar_cava.conf",
"input_delay": 2,
"actions": {
"on-click-right": "mode"
@@ -495,7 +487,7 @@ waybar config
},
```
waybar_raw.conf
waybar_cava.conf
```
## Configuration file for CAVA.
# Remove the ; to change parameters.
@@ -641,7 +633,7 @@ vertex_shader = pass_through.vert
fragment_shader = bar_spectrum.frag
; for glsl output mode, keep rendering even if no audio
continuous_rendering = 1;
continuous_rendering = 1
# disable console blank (screen saver) in tty
# (Not supported on FreeBSD)
@@ -705,4 +697,21 @@ gradient_color_2 = '#45475A'
# Look at readme.md on github for further explanations and examples.
```
Different waybar_cava#N.conf see at [cava GLSL](https://github.com/Alexays/Waybar/wiki/Module:-Cava:-GLSL)
More GLSL examples are available on the [cava GLSL wiki page](https://github.com/Alexays/Waybar/wiki/Module:-Cava:-GLSL).
# STYLE
- *#cava* Raw frontend widget
- *#cava.silent* Applied after no sound has been detected for *sleep_timer* seconds
- *#cava.updated* Applied when a new frame is shown
- *#cavaGLSL* GLSL frontend widget (used instead of *#cava* when the cava *method* is *sdl_glsl*)
- *#cavaGLSL.silent* Applied after no sound has been detected for *sleep_timer* seconds
- *#cavaGLSL.updated* Applied when a new frame is shown
# FRONTENDS
## RAW
The raw frontend maps each bar's amplitude to a character from *format-icons*. The final widget text is the concatenation of all characters, optionally separated by *bar_delimiter*. See the EXAMPLES section above for a complete configuration.
## GLSL
The GLSL frontend renders the visualization with OpenGL ES using user-provided shaders. It is selected by setting *method = sdl_glsl* in the cava configuration. See the EXAMPLES section above for a complete configuration.
+13
View File
@@ -37,6 +37,19 @@ Waybar config to enable the module:
```
# DEVELOPING CFFI MODULES
CFFI modules require a handful of functions and constants to be defined with C
linkage. The way to achieve this depends on the programming language being used
(search for FFI / Foreign Function Interface for that language).
The complete list of symbols to define can be found in the header file shipped with
Waybar at *resources/custom_modules/cffi_example/waybar_cffi_module.h*, and a full
example written in C is provided in *resources/custom_modules/cffi_example/*.
Language bindings exist for several languages, including Rust (the *waybar-cffi*
crate) and Zig.
# STYLE
The classes and IDs are managed by the cffi dynamic library.
+59 -11
View File
@@ -6,7 +6,16 @@ waybar - clock module
# DESCRIPTION
*clock* module displays current date and time
*clock* module displays current date and time.
There are two implementations:
- *clock*: Full-featured implementation, including the calendar and timezone
support described below. Enabled at build time when either C++20 concepts
(\_\_cpp\_concepts >= 201907, gcc >= 13) are available, or the HowardHinnant date
library <https://github.com/HowardHinnant/date> is installed.
- *simpleclock*: Fallback that provides date and time display only. Used when the
above build conditions are not met.
# FILES
@@ -27,7 +36,8 @@ $XDG_CONFIG_HOME/waybar/config ++
|[ *format*
:[ string
:[ *{:%H:%M}*
:[ The format, how the date and time should be displayed. See format options below
:[ The format, how the date and time should be displayed. See format options
below. Split the braces to insert literal text, e.g. *{0:%H}text{0:%M}*
|[ *timezone*
:[ string
:[
@@ -120,8 +130,9 @@ View all valid format options in *strftime(3)* or have a look https://en.cpprefe
:[ Calendar view mode. Possible values: year|month
|[ *mode-mon-col*
:[ integer
:[ 3
:[ Relevant for *mode=year*. Count of months per row
:[ 1
:[ Relevant for *mode=year*. Count of months per row. Must be a divisor of 12
(one of 1, 2, 3, 4, 6, 12); an invalid value falls back to 3
|[ *weeks-pos*
:[ string
:[
@@ -138,6 +149,18 @@ View all valid format options in *strftime(3)* or have a look https://en.cpprefe
:[ When enabled, the calendar follows the ISO 8601 standard: weeks begin on
Monday, and the first week of the year is numbered 1. The default week format is
'{:%V}'.
|[ *weeks-numbering*
:[ string
:[
:[ Override the week number calculation method, independent of *iso8601* and
locale settings. Possible values: *iso* (ISO 8601, {:%V}), *monday*
(Monday-based, {:%W}), *sunday* (Sunday-based, {:%U}). When not set, the
method is derived from *iso8601* or the locale.
|[ *first-day-of-week*
:[ integer
:[
:[ The first day of the week, where 0 is Sunday and 6 is Saturday.
When not set, the first day of the week is determined by the locale settings.
3. Addressed by *clock: calendar: format*
[- *Option*
@@ -155,8 +178,9 @@ View all valid format options in *strftime(3)* or have a look https://en.cpprefe
|[ *weeks*
:[ string
:[ *{:%U}*
:[ Format is applied to week numbers. When weekday format is not provided then
is used default format: '{:%W}' when week starts with Monday, '{:%U}' otherwise
:[ Format is applied to week numbers. The *{}* placeholder is replaced with the
format determined by *weeks-numbering* (if set), otherwise by *iso8601* or the
locale: '{:%V}' for ISO 8601, '{:%W}' when week starts with Monday, '{:%U}' otherwise
|[ *weekdays*
:[ string
:[
@@ -180,6 +204,10 @@ View all valid format options in *strftime(3)* or have a look https://en.cpprefe
:[ Switch to the next calendar month/year
|[ *shift_down*
:[ Switch to the previous calendar month/year
|[ *shift_reset*
:[ Reset the calendar shift back to the current month/year
|[ *exec <cmd>*
:[ Execute the specified command
# FORMAT REPLACEMENTS
@@ -207,11 +235,12 @@ View all valid format options in *strftime(3)* or have a look https://en.cpprefe
"format-alt": "{:%A, %B %d, %Y (%R)} 󰃰 ",
"tooltip-format": "<tt><small>{calendar}</small></tt>",
"calendar": {
"mode" : "year",
"mode-mon-col" : 3,
"weeks-pos" : "right",
"on-scroll" : 1,
"on-click-right": "mode",
"mode" : "year",
"mode-mon-col" : 3,
"weeks-pos" : "right",
"first-day-of-week": 1,
"on-scroll" : 1,
"on-click-right" : "mode",
"format": {
"months": "<span color='#ffead3'><b>{}</b></span>",
"days": "<span color='#ecc6d9'><b>{}</b></span>",
@@ -276,6 +305,21 @@ View all valid format options in *strftime(3)* or have a look https://en.cpprefe
- *#clock*
If displaying seconds causes other modules to shift side to side, the cause is
usually proportional-width digits. If your font supports it, add
*font-feature-settings: "tnum";* to the *#clock* style (or wherever you set the bar
font) to use fixed-width numbers.
The following classes are used only inside the *{calendar}* tooltip. Their
foreground *color* is read and applied to the corresponding calendar cells in
the tooltip markup:
- *.calendar-today*: The current day
- *.calendar-days*: The day numbers
- *.calendar-weeks*: The week numbers
- *.calendar-weekdays*: The weekday header (Su, Mo, ...)
- *.calendar-months*: The month header (January, February, ...)
# Troubleshooting
If clock module is disabled at startup with locale::facet::\_S\_create\_c\_locale ++
@@ -284,6 +328,10 @@ name not valid error message try one of the following:
- check if LC_TIME is set properly (glibc)
- set locale to C in the config file (musl)
When using *clock* instead of *simpleclock*, the locale defaults to *C* regardless
of the locale settings. To override this, prepend *L* to the format string, e.g.
*{:%a %m %d}* becomes *{:L%a %m %d}*.
The locale option must be set for {calendar} to use the correct start-of-week, regardless of system locale.
## Calendar in Chinese. Alignment
+85
View File
@@ -0,0 +1,85 @@
waybar-cpu-graph(5)
# NAME
waybar - cpu graph module
# DESCRIPTION
The *cpu graph* module displays a line graph with the CPU utilization.
# CONFIGURATION
*interval*: ++
typeof: integer or float ++
default: 5 ++
The interval in which the information gets polled.
*graph_type*: ++
typeof: string ++
default: line ++
The rendering style of the graph. One of 'line', 'bar', or 'gauge'.
*width*: ++
typeof: integer ++
The length in pixels the module should display.
*datapoints*: ++
typeof: integer ++
How many data points to show.
*on-click*: ++
typeof: string ++
Command to execute when clicked on the module.
*on-click-middle*: ++
typeof: string ++
Command to execute when middle-clicked on the module using mousewheel.
*on-click-right*: ++
typeof: string ++
Command to execute when you right-click on the module.
*on-update*: ++
typeof: string ++
Command to execute when the module is updated.
*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.
*expand*: ++
typeof: bool ++
default: false ++
Enables this module to consume all left over space dynamically.
# EXAMPLES
Basic configuration:
```
"cpu_graph": {
"interval": 2,
"width": 10
}
```
# STYLE
- *#cpu_graph*
- *.cpu-intensive*
- *.cpu-high*
- *.cpu-moderate*
+30
View File
@@ -83,6 +83,18 @@ The *cpu* module displays the current CPU utilization.
default: true ++
Option to disable tooltip on hover.
*tooltip-format*: ++
typeof: string ++
The format of the tooltip shown on hover. Supports the same replacements as *format*.
*format-<state>*: ++
typeof: string ++
The format to use when the given *state* (see *states*) is active. Supports the same replacements as *format*.
*tooltip-format-<state>*: ++
typeof: string ++
The tooltip format to use when the given *state* (see *states*) is active. Takes precedence over *tooltip-format*.
*expand*: ++
typeof: bool ++
default: false ++
@@ -92,6 +104,12 @@ The *cpu* module displays the current CPU utilization.
*{load}*: Current CPU load.
*{load1}*: CPU load average over the last minute.
*{load5}*: CPU load average over the last 5 minutes.
*{load15}*: CPU load average over the last 15 minutes.
*{usage}*: Current overall CPU usage.
*{usage*{n}*}*: Current CPU core n usage. Cores are numbered from zero, so first core will be {usage0} and 4th will be {usage3}.
@@ -106,6 +124,8 @@ The *cpu* module displays the current CPU utilization.
*{icon*{n}*}*: Icon for CPU core n usage. Use like {icon0}.
*{icons}*: All per-core icons concatenated. Equivalent to {icon0}{icon1}...{icon*N*} but adapts to the number of cores automatically.
# EXAMPLES
Basic configuration:
@@ -128,6 +148,16 @@ CPU usage per core rendered as icons:
},
```
Automatically determine number of icons according to number of logical cores:
```
"cpu": {
"interval": 1,
"format": "{icons} {usage:>2}% ",
"format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"],
},
```
# STYLE
- *#cpu*
+192
View File
@@ -0,0 +1,192 @@
waybar-custom-graph(5)
# NAME
waybar - custom graph module
# DESCRIPTION
The *custom-graph* module displays a graph with the percentage output of a script.
# CONFIGURATION
Addressed by *custom-graph/<name>*
*exec*: ++
typeof: string ++
The path to the script, which should be executed.
*exec-if*: ++
typeof: string ++
The path to a script, which determines if the script in *exec* should be executed. ++
*exec* will be executed if the exit code of *exec-if* equals 0.
*exec-on-event*: ++
typeof: bool ++
default: true ++
If an event command is set (e.g. *on-click* or *on-scroll-up*) then re-execute the script after executing the event command.
*return-type*: ++
typeof: string ++
See *return-type*
*interval*: ++
typeof: integer or float ++
The interval (in seconds) in which the information gets polled. ++
Minimum value is 0.001 (1ms). Values smaller than 1ms will be set to 1ms. ++
Use *once* if you want to execute the module only on startup. ++
You can update it manually with a signal. If no *interval* or *signal* is defined, it is assumed that the out script loops itself. ++
If a *signal* is defined then the script will run once on startup and will only update with a signal.
*restart-interval*: ++
typeof: integer ++
The restart interval (in whole seconds). ++
Can't be used with the *interval* option, so only with continuous scripts. ++
Once the script exits, it'll be re-executed after the *restart-interval*.
*signal*: ++
typeof: integer ++
The signal number used to update the module. ++
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.
*graph_type*: ++
typeof: string ++
default: line ++
The style of graph to render. One of *line*, *bar* or *gauge*.
*width*: ++
typeof: integer ++
default: 100 ++
The width of the graph in pixels.
*datapoints*: ++
typeof: integer ++
default: 20 ++
The number of most recent values to retain and plot on the graph.
*on-click*: ++
typeof: string ++
Command to execute when clicked on the module.
*on-click-middle*: ++
typeof: string ++
Command to execute when middle-clicked on the module using mousewheel.
*on-click-right*: ++
typeof: string ++
Command to execute when you right-click on the module.
*on-update*: ++
typeof: string ++
Command to execute when the module is updated.
*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.
*tooltip-format*: ++
typeof: string ++
The tooltip format. If specified, overrides any tooltip output from the script in *exec*. ++
See *FORMAT REPLACEMENTS*.
*escape*: ++
typeof: bool ++
default: false ++
Option to enable escaping of script output.
*menu*: ++
typeof: string ++
Action that popups the menu.
*menu-file*: ++
typeof: string ++
Location of the menu descriptor file. There need to be an element of type
GtkMenu with id *menu*
*menu-actions*: ++
typeof: array ++
The actions corresponding to the buttons of the menu.
*expand*: ++
typeof: bool ++
default: false ++
Enables this module to consume all left over space dynamically.
# 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
These replacements are available in *tooltip-format*.
*{text}*: Output of the script.
*{alt}*: The *alt* value from a json return type.
*{percentage}* Percentage which can be set via a json return type.
# EXAMPLES
## Memory:
```
"custom-graph/memory": {
"interval": 60,
"graph_type": "gauge",
"width": 52,
"exec": "/path/mem.sh",
"signal": 8,
"return-type": "json"
},
```
mem.sh:
```
#!/bin/bash
mem_info=$(cat /proc/meminfo)
mem_total=$(echo "$mem_info" | grep '^MemTotal:' | awk '{print $2}')
mem_available=$(echo "$mem_info" | grep '^MemAvailable:' | awk '{print $2}')
mem_used=$((mem_total - mem_available))
mem_percent=$((mem_used * 100 / mem_total))
echo "{\"text\": \"${mem_percent}%\", \"percentage\": ${mem_percent},\"tooltip\": \"Memory: ${mem_used}KB used / ${mem_total}KB total\"}'"
```
# STYLE
- *#custom-graph-<name>*
- *#custom-graph-<name>.<class>*
- *<class>* can be set by the script. For more information see *return-type*
+67 -3
View File
@@ -61,8 +61,11 @@ Addressed by *custom/<name>*
The format, how information should be displayed. On {text} data gets inserted.
*format-icons*: ++
typeof: array ++
Based on the set percentage, the corresponding icon gets selected. The order is *low* to *high*.
typeof: array or object or string ++
If the type is an array, then based on the set percentage, the corresponding icon gets selected (the order is *low* to *high*). ++
If the type is an object, then the icon is selected according to the *alt* string from the output. ++
If the type is a string, it is pasted as is. ++
Arrays can be nested into objects: icons are then selected first according to *alt*, then percentage.
*rotate*: ++
typeof: integer ++
@@ -145,17 +148,36 @@ Addressed by *custom/<name>*
default: false ++
Enables this module to consume all left over space dynamically.
*image-path*: ++
typeof: string ++
Path to an image file to display in the module.
*image-name*: ++
typeof: string ++
Name of a themed icon to display in the module.
*icon-size*: ++
typeof: integer ++
The size (in pixels) of the image set via *image-path* or *image-name*.
# 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 }
{"text": "$text", "alt": "$alt", "tooltip": "$tooltip", "class": "$class", "percentage": $percentage }
```
The whole JSON object must be printed on a single line. This can be achieved by
piping the output of your script through *jq --unbuffered --compact-output*.
The *class* parameter also accepts an array of strings.
To have multiline tooltips, use *\\r* in your script to separate the lines. If
using PowerShell for scripting, use the standard newline operator "\`n" in double
quotes; *\\r* and *\\n* will not work.
If nothing or an invalid option is specified, Waybar expects i3blocks style output. Values are *newline* separated.
This should look like this:
@@ -167,12 +189,21 @@ $text\\n$tooltip\\n$class*
# FORMAT REPLACEMENTS
*{}*: Output of the script. Equivalent to *{text}*.
*{text}*: Output of the script.
*{alt}*: The *alt* value from a json return type.
*{percentage}* Percentage which can be set via a json return type.
*{icon}*: An icon from 'format-icons' according to percentage.
The *{}* placeholder is special: it automatically displays the text output of your
script, but it cannot be combined with other placeholders like *{icon}* in the same
format string. To display both an icon and text, use *{icon}* together with *{text}*
explicitly (e.g. *"format": "{icon} {text}"*).
# EXAMPLES
## Spotify:
@@ -248,3 +279,36 @@ Under the premise that interval is not defined, you can use the signal and updat
- *#custom-<name>*
- *#custom-<name>.<class>*
- *<class>* can be set by the script. For more information see *return-type*
- *.flat* and *.text-button* are always applied to the module's label.
- *.image-button* is always applied to the module's image (see *image-path*/*image-name*).
# CONTINUOUS SCRIPTS
The *exec* script may be continuous (i.e. contain some kind of infinite loop). The
display is updated for each new line of data printed on stdout (following the chosen
*return-type*). The *interval* option does not apply to a continuous script; use
*restart-interval* instead to restart the script if it stops after some time.
Be aware that some languages buffer their output. If your module displays nothing
even though your script works as expected, the output may be held in a buffer. Look
up how to flush the output buffer for your language of choice (for example, in Ruby
call *$stdout.flush* after each print).
# OUTPUT NAME
The *exec* script is run with the *WAYBAR_OUTPUT_NAME* environment variable set to
the name of the output (monitor) the bar is displayed on.
# TROUBLESHOOTING
*Self-looping module does not show up*
If your module is self-looping and it does not even show up in the bar, check that:
- Its configuration does *not* include an *interval* parameter.
- Output to stdout is not buffered.
*Custom json class not displayed*
If a class set in your custom script is not picked up by *style.css*, ensure that
the output carrying the most variables is emitted first.
+61 -11
View File
@@ -6,17 +6,12 @@ waybar - disk module
# DESCRIPTION
The *disk* module displays the current disk space used.
The *disk* module displays information of multiple disks.
# CONFIGURATION
Addressed by *disk*
*path*: ++
typeof: string ++
default: "/" ++
Any path residing in the filesystem or mountpoint for which the information should be displayed.
*interval*: ++
typeof: integer++
default: 30 ++
@@ -24,8 +19,8 @@ Addressed by *disk*
*format*: ++
typeof: string ++
default: "{percentage_used}%" ++
The format, how information should be displayed.
default: "{}%" ++
The format, how information for each disk should be displayed. Note: in the default the positional field "{}" resolves to *{percentage_free}*.
*rotate*: ++
typeof: integer ++
@@ -75,6 +70,26 @@ Addressed by *disk*
typeof: string ++
Command to execute when scrolling down on the module.
*path*: ++
typeof: string ++
default: "/" ++
Deprecated path of filesystem or mountpoint to monitor.
*paths*: ++
typeof: array ++
default: ["/"] ++
Array of paths residing in the filesystem or mountpoint for which the information should be displayed.
*header*: ++
typeof: string ++
default: "" ++
Text to appear before the disk information defined in the format.
*separator*: ++
typeof: string ++
default: " " ++
Separator string between multiple disk information.
*smooth-scrolling-threshold*: ++
typeof: double ++
Threshold to be used when scrolling.
@@ -86,7 +101,7 @@ Addressed by *disk*
*tooltip-format*: ++
typeof: string ++
default: "{used} out of {total} used ({percentage_used}%)" ++
default: "{used} used out of {total} on {path} ({percentage_used}%)" ++
The format of the information displayed in the tooltip.
*unit*: ++
@@ -123,7 +138,7 @@ Addressed by *disk*
*{free}*: Amount of available disk space for normal users. Automatically selects unit based on size remaining.
*{path}*: The path specified in the configuration.
*{path}*: The path for each disk specified in the configuration.
*{specific_total}*: Total amount of space on the disk, partition, or mountpoint in a specific unit. Defaults to bytes.
@@ -131,6 +146,29 @@ Addressed by *disk*
*{specific_free}*: Amount of available disk space for normal users in a specific unit. Defaults to bytes.
# NUMBER FORMAT MODIFIERS
*{total}*, *{used}* and *{free}* auto-scale with a binary prefix (KiB, GiB, …).
Their rendering can be tuned with fmt-style modifiers, e.g. *"{free:>}"* or
*"{free:G}"*, combined in any order:
*<*, *=*, *>*: Alignment/padding (left, column-align, right).
*u* / *U*: Hide (*u*) or show (*U*) the unit suffix. Shown by default with an auto
scale, hidden by default when a scale is forced.
*#*, *k*, *M*, *G*, *T*, *P*: Force a fixed scale instead of auto-selecting
(*#* = base scale). Forcing a scale hides the scale prefix and, by default, the
unit. E.g. *"{free:G}"* always shows gibibytes.
*i*: Force integer display (no decimals).
*b* / *B*: Force decimal base 1000 (*b*) or binary base 1024 (*B*); disk values
are binary by default.
A trailing number is a fixed width for the coefficient when a scale is forced;
overflow is shown as *#* characters (e.g. *"{free:=3#}"**###*).
# EXAMPLES
```
@@ -143,10 +181,22 @@ Addressed by *disk*
```
"disk": {
"interval": 30,
"format": "{percentage_free}% free on {path}",
"header": "Disks: ",
"paths": ["/", "/home"],
"separator": " ",
}
```
```
"disk": {
"interval": 30,
"paths": ["/"],
"format": "{specific_free:0.2f} GB out of {specific_total:0.2f} GB available. Alternatively {free} out of {total} available",
"unit": "GB"
// 1434.25 GB out of 2000.00 GB available. Alternatively 1.4TiB out of 1.9TiB available.
}
// 1434.25 GB out of 2000.00 GB available. Alternatively 1.4TiB out of 1.9TiB available.
```
# STYLE
+12 -2
View File
@@ -8,6 +8,9 @@ waybar - dwl tags module
The *tags* module displays the current state of tags in dwl.
Using this module requires patching dwl with the IPC patch
<https://codeberg.org/dwl/dwl-patches/wiki/ipc>.
# CONFIGURATION
Addressed by *dwl/tags*
@@ -15,12 +18,18 @@ Addressed by *dwl/tags*
*num-tags*: ++
typeof: uint ++
default: 9 ++
The number of tags that should be displayed. Max 32.
The number of tags that should be displayed. Max 32. This should match the
number of tags configured in dwl.
*tag-labels*: ++
typeof: array ++
The label to display for each tag.
*hide-vacant*: ++
typeof: bool ++
default: false ++
If set to true, tags without clients and that are not active will be hidden.
*disable-click*: ++
typeof: bool ++
default: false ++
@@ -46,8 +55,9 @@ Addressed by *dwl/tags*
- *#tags button.empty*
- *#tags button.focused*
- *#tags button.urgent*
- *#tags button.output*
Note that occupied/focused/urgent status may overlap. That is, a tag may be
Note that occupied/focused/urgent/output status may overlap. That is, a tag may be
both occupied and focused at the same time.
# SEE ALSO
+18 -1
View File
@@ -8,15 +8,28 @@ waybar - dwl window module
The *window* module displays the title of the currently focused window in DWL
Using this module requires patching dwl with the IPC patch
<https://codeberg.org/dwl/dwl-patches/wiki/ipc>.
# CONFIGURATION
Addressed by *dwl/window*
*format*: ++
typeof: string ++
default: {title} ++
default: {} ++
The format, how information should be displayed.
*hide-empty*: ++
typeof: bool ++
default: false ++
Option to hide the module when the content would be empty.
*hide-inactive*: ++
typeof: bool ++
default: false ++
Option to hide the module when the window is unfocused.
*rotate*: ++
typeof: integer ++
Positive value to rotate the text label (in 90 degree increments).
@@ -109,6 +122,10 @@ If no expression matches, the format output is left unchanged.
Invalid expressions (e.g., mismatched parentheses) are skipped.
# STYLE
- *#window.active*
# EXAMPLES
```
+19
View File
@@ -8,6 +8,9 @@ waybar - wlr workspaces module
The *workspaces* module displays the currently used workspaces in wayland compositor.
To use this module, your compositor must implement the *ext-workspace-v1*
Wayland protocol.
# CONFIGURATION
Addressed by *ext/workspaces*
@@ -37,6 +40,10 @@ Addressed by *ext/workspaces*
default: false ++
Should workspaces be sorted by ID. Workspace ID will be sorted numerically when all ID are numbers. Takes precedence over any other sort-by option.
*sort-by-number*: ++
typeof: bool ++
Deprecated alias of *sort-by-id*. Setting it emits a warning; prefer *sort-by-id*.
*all-outputs*: ++
typeof: bool ++
default: false ++
@@ -52,6 +59,18 @@ Addressed by *ext/workspaces*
default: true ++
If set to false hidden workspaces will be shown.
*on-click*: ++
typeof: string ++
The action to perform on left-click. See *CLICK ACTIONS* for the possible values.
*on-click-middle*: ++
typeof: string ++
The action to perform on middle-click. See *CLICK ACTIONS* for the possible values.
*on-click-right*: ++
typeof: string ++
The action to perform on right-click. See *CLICK ACTIONS* for the possible values.
# FORMAT REPLACEMENTS
*{name}*: Name of workspace assigned by compositor.
+2 -2
View File
@@ -28,7 +28,7 @@ Feral Gamemode optimizations.
*tooltip-format*: ++
typeof: string ++
default: Games running: {glyph} ++
default: Games running: {count} ++
The text format of the tooltip.
*hide-not-running*: ++
@@ -54,7 +54,7 @@ Feral Gamemode optimizations.
*icon-size*: ++
typeof: unsigned integer ++
default: 20 ++
Defines the size of the icons.
Defines the size of the icons. Set to *0* for auto size.
*icon-spacing*: ++
typeof: unsigned integer ++
+5 -4
View File
@@ -26,7 +26,7 @@ libgps lives in:
*format*: ++
typeof: string ++
default: {glyph} ++
default: {mode} ++
The text format.
*tooltip*: ++
@@ -36,7 +36,7 @@ libgps lives in:
*tooltip-format*: ++
typeof: string ++
default: Games running: {glyph} ++
default: The value of *format* ++
The text format of the tooltip.
*interval*: ++
@@ -93,10 +93,10 @@ libgps lives in:
"gps": {
"format": "{mode}",
"format-disabled": "", // an empty format will hide the module
"format-no-fix": "No fix",
"format-fix-none": "No fix",
"format-fix-3d": "{status}",
"tooltip-format": "{mode}",
"tooltip-format-no-fix": "{satellites_visible} satellites visible",
"tooltip-format-fix-none": "{satellites_visible} satellites visible",
"tooltip-format-fix-2d": "{satellites_used}/{satellites_visible} satellites used",
"tooltip-format-fix-3d": "Altitude: {altitude_hae}m",
"hide-disconnected": false
@@ -106,6 +106,7 @@ libgps lives in:
- *#gps*
- *#gps.disabled* Applied when GPS is disabled.
- *#gps.disconnected* Applied when no GPS receiver is present.
- *#gps.fix-none* Applied when GPS is present, but there is no fix.
- *#gps.fix-2d* Applied when there is a 2D fix.
- *#gps.fix-3d* Applied when there is a 3D fix.
+46 -1
View File
@@ -21,6 +21,10 @@ Addressed by *hyprland/language*
typeof: string++
Provide an alternative name to display per language where <lang> is the language of your choosing. Can be passed multiple times with multiple languages as shown by the example below.
*format-<lang>-<variant>* ++
typeof: string ++
Like *format-<lang>* but also matches the layout variant, taking precedence over *format-<lang>* when both the language and variant match.
*keyboard-name*: ++
typeof: string ++
Specifies which keyboard to use from hyprctl devices output. Using the option that begins with "at-translated-set..." is recommended.
@@ -38,6 +42,24 @@ Addressed by *hyprland/language*
typeof: array ++
The actions corresponding to the buttons of the menu.
*tooltip*: ++
typeof: boolean ++
default: true ++
Enables or disables the tooltip for the language module. By default, the tooltip is enabled. Set to *false* to disable.
*tooltip-format*: ++
typeof: string ++
default: {long} ++
Specifies the format of the tooltip when it is enabled. It follows the same format replacement rules as the *format* key.
*tooltip-format-<lang>*: ++
typeof: string ++
Allows specifying a different tooltip format for each language. The *<lang>* should be replaced with the language code. This can be used to provide a custom tooltip for each language.
*tooltip-format-<lang>-<variant>*: ++
typeof: string ++
Like *tooltip-format-<lang>* but also matches the layout variant, taking precedence over *tooltip-format-<lang>* when both the language and variant match.
*expand*: ++
typeof: bool ++
default: false ++
@@ -46,7 +68,7 @@ Addressed by *hyprland/language*
# FORMAT REPLACEMENTS
*{short}*: Short name of layout (e.g. "us"). Equals to {}.
*{short}*: Short name of layout (e.g. "us").
*{shortDescription}*: Short description of layout (e.g. "en").
@@ -66,6 +88,29 @@ Addressed by *hyprland/language*
}
```
```
"hyprland/language": {
"format": "{}",
"format-en": "US",
"format-es": "ES",
"tooltip": true,
"tooltip-format": "{long}"
}
```
```
"hyprland/language": {
"format": "{}",
"format-en": "US",
"format-es": "ES",
"tooltip": true,
"tooltip-format": "{}",
"tooltip-format-es": "{Español}",
"tooltip-format-en": "{English (american)}"
}
```
# STYLE
- *#language*
- *#language.<layout>* (per-layout class derived from the layout short name, e.g. '.us')
+11 -3
View File
@@ -15,7 +15,7 @@ Addressed by *hyprland/submap*
*format*: ++
typeof: string ++
default: {} ++
The format, how information should be displayed. On {} the currently active submap is displayed.
The format, how information should be displayed. This format supports two placeholders: *{submap}* for the currently active submap name and *{icon}* for the icon associated with the submap.
*rotate*: ++
typeof: integer ++
@@ -80,6 +80,10 @@ Addressed by *hyprland/submap*
default: Default ++
Option to set the submap name to display when not in an active submap.
*icons*: ++
typeof: object ++
Based on the submap name, the corresponding icon will be selected from this map and made available as the *{icon}* placeholder in the format string. The keys are submap names, and the values are the icons or strings to display for those submaps.
*menu*: ++
typeof: string ++
Action that popups the menu.
@@ -103,9 +107,13 @@ Addressed by *hyprland/submap*
```
"hyprland/submap": {
"format": "✌️ {}",
"format": "{icon} {submap}",
"max-length": 8,
"tooltip": false
"tooltip": false,
"icons": {
"resize": "",
"pause": "",
}
}
```
+13
View File
@@ -17,6 +17,10 @@ Addressed by *hyprland/window*
default: {title} ++
The format, how information should be displayed. On {} the current window title is displayed.
*max-length*: ++
typeof: integer ++
The maximum length in character the module should display.
*rewrite*: ++
typeof: object ++
Rules to rewrite window title. See *rewrite rules*.
@@ -25,6 +29,15 @@ Addressed by *hyprland/window*
typeof: bool ++
Show the active window of the monitor the bar belongs to, instead of the focused window.
*fallback*: ++
typeof: string ++
Text to display when the focused window title is empty (for example when no window is focused).
*tooltip-format*: ++
typeof: string ++
The format of the tooltip shown on hover. Supports the same replacements as *format*. Requires *tooltip* to be enabled. When unset, the tooltip falls back to the formatted label text. ++
default: (the formatted label text)
*icon*: ++
typeof: bool ++
default: false ++
+134 -2
View File
@@ -14,11 +14,11 @@ Addressed by *hyprland/workspaces*
*format*: ++
typeof: string ++
default: {id} ++
default: {name} ++
The format, how information should be displayed.
*format-icons*: ++
typeof: array ++
typeof: object ++
Based on the workspace ID and state, the corresponding icon gets selected. See *icons*.
*window-rewrite*: ++
@@ -41,6 +41,19 @@ This setting is ignored if *workspace-taskbar.enable* is set to true.
The separator to be used between windows in a workspace. ++
This setting is ignored if *workspace-taskbar.enable* is set to true.
*window-rewrite-group-threshold*: ++
typeof: int ++
default: 0 ++
When a workspace contains at least this many windows with the same rewrite result, they are collapsed into a single one using *window-rewrite-group-format*. ++
Set to 0 to disable grouping. ++
This setting is ignored if *workspace-taskbar.enable* is set to true.
*window-rewrite-group-format*: ++
typeof: string ++
default: "{icon}×{count}" ++
The format used to represent a group of collapsed windows. Available placeholders are {icon} (the icon being grouped) and {count} (how many windows share it). ++
This setting is ignored if *workspace-taskbar.enable* is set to true.
*workspace-taskbar*: ++
typeof: object ++
Contains settings for the workspace taskbar, an alternative mode for the workspaces module which displays the window icons as images instead of text.
@@ -75,6 +88,11 @@ This setting is ignored if *workspace-taskbar.enable* is set to true.
default: 16 ++
Size of the icons in the workspace taskbar.
*max-icons*: ++
typeof: int ++
default: 0 (unlimited) ++
Maximum number of icons to show per workspace. When set, duplicate icons (windows with the same class) are removed first, then the list is trimmed to this limit. Set to 0 for unlimited icons.
*icon-theme*: ++
typeof: string | array ++
default: [] ++
@@ -98,6 +116,11 @@ This setting is ignored if *workspace-taskbar.enable* is set to true.
- {button} Pressed button number, see https://api.gtkd.org/gdk.c.types.GdkEventButton.button.html. ++
See https://github.com/Alexays/Waybar/wiki/Module:-Hyprland#workspace-taskbars-example for a full example.
*max-windows*: ++
typeof: int ++
default: 0 (unlimited) ++
Maximum number of windows to show per workspace. When set, newest windows beyond the limit are not shown. Set to 0 for unlimited windows.
*show-special*: ++
typeof: bool ++
default: false ++
@@ -113,6 +136,12 @@ This setting is ignored if *workspace-taskbar.enable* is set to true.
default: false ++
If set to true, only persistent workspaces will be shown on bar.
*persistent-workspaces*: ++
typeof: object ++
default: empty ++
Lists workspaces that should always be shown, even when they do not exist. Keys are workspace names and values are arrays of output names on which the workspace should be shown (an empty array means all outputs). See the examples below. ++
Note: for persistent workspaces to actually work you must also declare them in your Hyprland config, e.g. *workspace = 1, monitor:eDP-1, persistent:true*.
*all-outputs*: ++
typeof: bool ++
default: false ++
@@ -123,6 +152,11 @@ This setting is ignored if *workspace-taskbar.enable* is set to true.
default: false ++
If set to true, only the active workspace will be shown.
*hide-active*: ++
typeof: bool ++
default: false ++
If set to true, the active workspace will be hidden. Unless a workspace is persistent or special.
*move-to-monitor*: ++
typeof: bool ++
default: false ++
@@ -130,11 +164,24 @@ This setting is ignored if *workspace-taskbar.enable* is set to true.
Otherwise, the workspace will open on the monitor where it was previously assigned.
Analog to using `focusworkspaceoncurrentmonitor` dispatcher instead of `workspace` in Hyprland.
*unique-icons*: ++
typeof: bool ++
default: false ++
If set to true, only one instance of each window icon will be shown per workspace.
*enable-bar-scroll*: ++
typeof: bool ++
default: false ++
If set to false, you can't scroll to cycle throughout workspaces from the entire bar. If set to true this behaviour is enabled.
*on-scroll-up*: ++
typeof: string ++
Command to execute when scrolling up on the module. This replaces the default behaviour of workspace cycling.
*on-scroll-down*: ++
typeof: string ++
Command to execute when scrolling down on the module. This replaces the default behaviour of workspace cycling.
*ignore-workspaces*: ++
typeof: array ++
default: [] ++
@@ -149,6 +196,15 @@ This setting is ignored if *workspace-taskbar.enable* is set to true.
If set to special-centered, workspaces will sort by default with special workspaces in the center.
If none of those, workspaces will sort with default behavior.
*tooltip*: ++
typeof: bool ++
default: true ++
Option to disable tooltip on hover.
*tooltips*: ++
typeof: object ++
Based on the workspace ID and state, the corresponding tooltip gets selected. Selection works the same as *format-icons* do. Format replacements are supported. See *icons*.
*expand*: ++
typeof: bool ++
default: false ++
@@ -162,6 +218,34 @@ This setting is ignored if *workspace-taskbar.enable* is set to true.
*{icon}*: Icon, as defined in *format-icons*.
*{windows}*: The windows in the workspace, formatted according to *window-rewrite* and joined with *format-window-separator*.
# WINDOW REWRITE RULES
The rules in *window-rewrite* are regexes that may match against a window's
class, title, or both. There are four categories of rule, distinguished by how
they are written in the config:
[- *Rule*
:- *Category*
|[ *something*
:[ Vague
|[ *class<something>*
:[ Class-only
|[ *title<something>*
:[ Title-only
|[ *class<something1> title<something2>*
:[ Hybrid
When the config contains only "vague" rules, they are matched against window
*classes* only. This is both for backwards compatibility and for performance:
matching against the title requires listening to window title changes via
Hyprland's IPC, which is unnecessary when no title rule is in use.
When the config contains *at least one* "title-only" or "hybrid" rule, then all
"vague" rules match against *both* class and title. This lets you define vague
rules where it does not matter whether the class or the title matched.
# ICONS
Additional to workspace name matching, the following *format-icons* can be set.
@@ -172,6 +256,7 @@ Additional to workspace name matching, the following *format-icons* can be set.
- *empty*: Will be shown on non-active, non-special empty persistent workspaces
- *visible*: Will be shown on workspaces that are visible but not active. For example: this is useful if you want your visible workspaces on other monitors to have the same look as active.
- *persistent*: Will be shown on non-empty persistent workspaces
- *urgent*: Will be shown on non-active urgent workspaces
# EXAMPLES
@@ -238,6 +323,51 @@ Additional to workspace name matching, the following *format-icons* can be set.
}
```
```
"hyprland/workspaces": {
"format": "{icon}",
"format-window-separator": ", ",
"tooltip": true,
"tooltips": {
"default": "{name}: {windows}",
"empty": "" // Will result in no tooltip
}
"format-icons": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"active": "",
"default": ""
},
// Window rewrites omitted for brevity
}
```
```
"hyprland/workspaces": {
"format": "{icon}",
"format-window-separator": ", ",
"tooltip": true,
"tooltips": {
"1": "This is the first workspace",
"2": "This is the second",
"2": "And this is the third"
}
"format-icons": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"active": "",
"default": ""
},
// Window rewrites omitted for brevity
}
```
# Style
- *#workspaces*
@@ -248,6 +378,8 @@ Additional to workspace name matching, the following *format-icons* can be set.
- *#workspaces button.persistent*
- *#workspaces button.special*
- *#workspaces button.urgent*
- *#workspaces button.workspace-hover* (applied while the pointer is over the button)
- *#workspaces button.<workspace-name>* (per-workspace class derived from the workspace name, sanitized to a valid CSS class name, e.g. a workspace named "1" yields '.ws-1'; special workspaces also get the raw name class)
- *#workspaces button.hosting-monitor* (gets applied if workspace-monitor == waybar-monitor)
- *#workspaces .workspace-label*
- *#workspaces .taskbar-window* (each window in the taskbar, only if 'workspace-taskbar.enable' is true)
+76 -6
View File
@@ -41,15 +41,15 @@ screensaver, also known as "presentation mode".
*on-click*: ++
typeof: string ++
Command to execute when clicked on the module. A click also toggles the state
Command to execute when clicked on the module. A click also toggles the state (enable only if dynamic timeouts are enabled).
*on-click-middle*: ++
typeof: string ++
Command to execute when middle-clicked on the module using mousewheel.
Command to execute when middle-clicked on the module using mousewheel. (reset the timeout to the initial value if dynamic timeouts are enabled).
*on-click-right*: ++
typeof: string ++
Command to execute when you right-click on the module.
Command to execute when you right-click on the module. (deactivate the inhibit if dynamic timeouts are enabled).
*on-update*: ++
typeof: string ++
@@ -57,11 +57,11 @@ screensaver, also known as "presentation mode".
*on-scroll-up*: ++
typeof: string ++
Command to execute when scrolling up on the module.
Command to execute when scrolling up on the module. (increase the timeout if dynamic timeouts are enabled).
*on-scroll-down*: ++
typeof: string ++
Command to execute when scrolling down on the module.
Command to execute when scrolling down on the module. (decrease the timeout if dynamic timeouts are enabled).
*smooth-scrolling-threshold*: ++
typeof: double ++
@@ -76,6 +76,28 @@ screensaver, also known as "presentation mode".
typeof: double ++
The number of minutes the inhibition should last.
*timeout-step*: ++
typeof: double ++
default: 10 ++
The number of minutes to add or subtract when scrolling (when dynamic timeouts are enabled).
*dynamic-timeouts*: ++
typeof: bool ++
default: false ++
Option to enable dynamic timeouts. ++
The legacy singular spelling *dynamic-timeout* is also accepted as an alias.
*wait-for-activity*: ++
typeof: bool ++
default: *false* ++
When enabled, the idle inhibitor remains active as long as there is keyboard or mouse activity on the bar. If there is no activity for the duration specified in *timeout*, the inhibitor will automatically toggle off. This option requires *timeout* to be set.
*signal*: ++
typeof: integer ++
The signal number used to toggle the idle inhibitor externally. ++
The number is valid between 1 and N, where *SIGRTMIN+N* = *SIGRTMAX*. ++
Use `pkill -SIGRTMIN+N waybar` to toggle the idle inhibitor from scripts or keybindings.
*tooltip*: ++
typeof: bool ++
default: true ++
@@ -113,16 +135,64 @@ screensaver, also known as "presentation mode".
*{icon}*: Icon, as defined in *format-icons*
*{timeout}*: Timeout in minutes
*{timeleft}*: Time left in minutes
# EXAMPLES
Basic usage with timeout:
```
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "",
"deactivated": ""
},
"timeout": 30.5
}
```
With dynamic timeouts (scroll to adjust the timeout):
```
"idle_inhibitor": {
"format": "{status} {timeleft}/{timeout}",
"format-icons": {
"activated": "",
"deactivated": ""
},
"timeout": 30.5
"timeout": 480,
"dynamic-timeouts": true,
"timeout-step": 10
}
```
With external control via signals (can be toggled with `pkill -SIGRTMIN+8 waybar`):
```
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "",
"deactivated": ""
},
"signal": 8
}
```
With wait-for-activity feature:
```
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "",
"deactivated": ""
},
"timeout": 5.0,
"wait-for-activity": true
}
```
+179 -1
View File
@@ -6,10 +6,19 @@ waybar - image module
# DESCRIPTION
The *image* module displays an image from a path.
The *image* module displays container of images(or image) from a provided paths
# REMARK
This module has been rewritten to add multiple image rendering functionality.
To avoid users inconvenience of breaking changes, everything related to old(only
one *image*) implementation has been left untouched including configuration part. For this
reason this wiki page is split into two parts
# CONFIGURATION
For single *image*
*path*: ++
typeof: string ++
The path to the image.
@@ -91,7 +100,176 @@ $path\\n$tooltip
}
```
Using *exec* to fetch the image via a script:
```
"image#album-art": {
"exec": "~/.config/waybar/custom/spotify/album_art.sh",
"size": 32,
"interval": 30
}
```
Where *album\_art.sh* looks like this:
```
#!/bin/bash
album_art=$(playerctl -p spotify metadata mpris:artUrl)
if [[ -z $album_art ]]; then
# spotify is dead, we should die too.
exit
fi
curl -s "${album_art}" --output "/tmp/cover.jpeg"
echo "/tmp/cover.jpeg"
```
# STYLE
- *#image*
- *#image.empty*
# CONFIGURATION
For multiple *image*
*size*: ++
typeof: integer ++
default: 16 ++
Minumum size of the rendered image in pixels.
*interval*: ++
typeof: integer or float ++
The interval (in seconds) to re-render the module. ++
If set to a positive value, the minimum is 0.001 (1ms). Values smaller than 1ms will be set to 1ms. ++
Zero or negative values (and the literal "once") are treated as "once". ++
This is useful if image path or other property is being changed over time. ++
If no *interval* is provided, the module will only be rendered once.
*multiple*: ++
typeof: bool ++
default: false ++
this parameter is used to decide if old *image* implementation should be ++
used(therefore render only one image) or to pick a new implementation to ++
rended multiple images provided from this config. default value of this ++
parameter is false.
*signal*: ++
typeof: interger ++
default: 0 ++
The signal number is used to redraw the module. ++
This is used if *interval* is not provided and module should change ++
regularly depended on external events, e.g when clicking on it. ++
The provided value is valid between 1 and N, where SIGRTMIN+N <= SIGRTMAX. ++
e.g if *signal* = 7, 34 + 7 = 41, which means waybar process should ++
receive signal 41 to redraw this module, since SIGRTMIN = 34 (see 'kill -l').
*entries*: ++
typeof: array ++
default: empty array ++
Json array of objects consisting of several fields ++
this is a main part of configuration where per image properties are defined
*path*: ++
typeof: string ++
default: empty string ++
file path of picture to draw
*marker*: ++
typeof: string ++
default: empty string ++
user defined per image keyword(marker) to identify them, e.g in styles.css ++
e.g if you want to draw 3 pictures and one of them dimmed, you can give ++
*marker*: "dimmed" value and in styles.css write something like this ++
#image .dimmed { opacity: 0.3 }
*tooltip*: ++
typeof: string ++
default: empty string ++
description of the image displayed on hover
*on-click*: ++
typeof: string ++
default: empty string ++
action to perform when clicking on the image. ++
The action can be any system or custom binary/script ++
e.g if { "on-click": "notify-send \"hello world\"" } ++
"hello world" will appear as notification.
*exec*: ++
typeof: string ++
default: empty string ++
same as *entries* but provided from external script which should dynamically ++
return json array of objects consisting of same keys as *entries*. ++
This option is specifically useful in combination with *signal* option without *interval* provided.
# Examples
With entries
```
"image#wentr": {
"entries": [
{
"path": "/home/user/Pictures/idk1.png",
"marker": "dimmed",
"tooltip": "dimmed image",
"on-click": "notify-send \"hello world\""
},
{
"path": "/home/user/Pictures/idk2.png",
"marker": "normal",
"on-click": "myCustomScript.py"
}
],
"size": 32,
"interval": 1 // will redraw every 5 seconds
}
```
With exec
```
"image#wexec": {
"exec": "imageProvider.py",
"size": 32,
"signal": 7 // e.g 'pkill -n waybar --signal 41' will trigger redraw
}
```
where imageProvider.py looks like this
```
#!/usr/bin/python
import json
dir = "/home/user/Pictures/"
out = [
{"path": dir + "idk1.png", "marker": "clickable", "on-click": "echo 'hello world'"},
{"path": dir + "idk2.png", "marker": "normal", "tooltip": "sample tooltip"},
{"path": dir + "idk3.png", "marker": "important"},
]
res = json.dumps(out)
print(res)
```
## Example styles
```
#image .important {
opacity: 0.9;
}
#image button.important {
opacity: 0.2
}
#image .normal {
opacity: 0.3
}
```
# STYLE
- *#image*
- *#image*.empty /\*when image could not be rendered\*/
- *#image* button /\*when on-click is provided; a Gtk::Button is matched by the element selector, not a class\*/
- *#image*.*marker* /\*where *marker* is parameter from config\*/
- *#image* button.*marker*
+6
View File
@@ -100,6 +100,12 @@ See *systemd-inhibit*(1) for more information.
*{icon}*: Icon, as defined in *format-icons*
# STYLE
- *#inhibitor*
- *#inhibitor.activated*
- *#inhibitor.deactivated*
# EXAMPLES
```
+7 -1
View File
@@ -6,7 +6,13 @@ waybar - JACK module
# DESCRIPTION
The *jack* module displays the current state of the JACK server.
The *jack* module displays the current state of the JACK server. It supports both
the JACK2 <https://github.com/jackaudio/jack2> and PipeWire <https://pipewire.org/>
implementations of the JACK API.
PipeWire users are advised to run at least v0.3.57; earlier versions cause the
Waybar client to hang indefinitely if the server shuts down while the module is
running.
# CONFIGURATION
+37 -3
View File
@@ -8,7 +8,8 @@ waybar - keyboard-state module
The *keyboard-state* module displays the state of number lock, caps lock, and scroll lock.
You must be a member of the input group to use this module.
You must be a member of the input group to use this module. Add yourself with
*usermod -a -G input <username>* (as root), then reboot.
# CONFIGURATION
@@ -26,7 +27,10 @@ You must be a member of the input group to use this module.
*format-icons*: ++
typeof: object ++
default: {"locked": "locked", "unlocked": "unlocked"} ++
Based on the keyboard state, the corresponding icon gets selected. The same set of icons is used for number, caps, and scroll lock, but the icon is selected from the set independently for each. See *icons*.
Based on the keyboard state, the corresponding icon gets selected. Supports two syntaxes:
- Common format-icons: "locked" and "unlocked" keys apply to all lock types.
- Per-lock-type format-icons: per-lock-type objects with "numlock", "capslock", "scrolllock" keys, each containing "locked" and "unlocked" icons.
See *icons*.
*numlock*: ++
typeof: bool ++
@@ -68,15 +72,21 @@ You must be a member of the input group to use this module.
The following *format-icons* can be set.
## Common format-icons for all lock types:
- *locked*: Will be shown when the keyboard state is locked. Default "locked".
- *unlocked*: Will be shown when the keyboard state is not locked. Default "unlocked"
- *unlocked*: Will be shown when the keyboard state is not locked. Default "unlocked".
## Per-lock-type format-icons:
- *numlock*, *capslock*, *scrolllock*: Object containing "locked" and "unlocked" keys for lock-type-specific icons. Defaults to {"locked": "locked", "unlocked": "unlocked"} for each lock type.
# EXAMPLE:
## Common format-icons for all lock types:
```
"keyboard-state": {
"numlock": true,
"capslock": true,
"scrolllock": true,
"format": "{name} {icon}",
"format-icons": {
"locked": "",
@@ -85,6 +95,30 @@ The following *format-icons* can be set.
}
```
## Per-lock-type format-icons:
```
"keyboard-state": {
"numlock": true,
"capslock": true,
"scrolllock": true,
"format": "{name} {icon}",
"format-icons": {
"numlock": {
"locked": "1",
"unlocked": "0"
},
"capslock": {
"locked": "A",
"unlocked": "a"
},
"scrolllock": {
"locked": "S",
"unlocked": "s"
}
}
}
```
# STYLE
- *#keyboard-state*
+134
View File
@@ -0,0 +1,134 @@
waybar-load(5)
# NAME
waybar - load module
# DESCRIPTION
The *load* module displays the current CPU load.
# CONFIGURATION
Addressed by *load*
*interval*: ++
typeof: integer++
default: 10 ++
The interval in which the information gets polled.
*format*: ++
typeof: string ++
default: {load1} ++
The format, how information should be displayed.
*rotate*: ++
typeof: integer ++
Positive value to rotate the text label (in 90 degree increments).
*states*: ++
typeof: object ++
A number of load states which get activated on certain thresholds, based on `load1`. See *waybar-states(5)*.
*max-length*: ++
typeof: integer ++
The maximum length in character the module should display.
*min-length*: ++
typeof: integer ++
The minimum length in characters the module should accept.
*align*: ++
typeof: float ++
The alignment of the label within the module, where 0 is left-aligned and 1 is right-aligned. If the module is rotated, it will follow the flow of the text.
*justify*: ++
typeof: string ++
The alignment of the text within the module's label, allowing options 'left', 'right', or 'center' to define the positioning.
*on-click*: ++
typeof: string ++
Command to execute when clicked on the module.
*on-click-middle*: ++
typeof: string ++
Command to execute when middle-clicked on the module using mousewheel.
*on-click-right*: ++
typeof: string ++
Command to execute when you right-click on the module.
*on-update*: ++
typeof: string ++
Command to execute when the module is updated.
*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.
*tooltip-format*: ++
typeof: string ++
default: Load 1: {load1}\\nLoad 5: {load5}\\nLoad 15: {load15} ++
The format of the tooltip shown on hover. Supports the same replacements as *format*.
*menu*: ++
typeof: string ++
Action that popups the menu.
*menu-file*: ++
typeof: string ++
Location of the menu descriptor file. There need to be an element of type
GtkMenu with id *menu*
*menu-actions*: ++
typeof: array ++
The actions corresponding to the buttons of the menu.
*expand*: ++
typeof: bool ++
default: false ++
Enables this module to consume all left over space dynamically.
# FORMAT REPLACEMENTS
*{}*: Equivalent to `{load1}`
*{load1}*: Current CPU load average over the last minute
*{load5}*: Current CPU load average over the last 5 minutes
*{load15}*: Current CPU load average over the last 15 minutes
# EXAMPLES
```
"load": {
"interval": 10,
"format": "load: {load1}",
"max-length": 10
}
```
```
"load": {
"interval": 1,
"format": "load: {load1} {load5} {load15}"
}
```
# STYLE
- *#load*
+63
View File
@@ -0,0 +1,63 @@
waybar-mango-keymode(5)
# NAME
waybar - mango keymode module
# DESCRIPTION
The *keymode* module displays the current keyboard mode (e.g. "resize", "default") in the Mango compositor. It is hidden when no mode is active.
# CONFIGURATION
Addressed by *mango/keymode*
*format*: ++
typeof: string ++
default: {} ++
The format, how the mode should be displayed. *{mode}* is replaced by the current mode name.
*format-<mode>*: ++
typeof: string ++
Provide a custom format for a specific keymode. *<mode>* is the mode name as reported by Mango (e.g. "resize"). The value can contain *{mode}* as a placeholder.
If this option is set, it overrides the main *format* for that mode.
*menu*: ++
typeof: string ++
Action that pops up a menu.
*menu-file*: ++
typeof: string ++
Location of the menu descriptor file.
*menu-actions*: ++
typeof: array ++
Actions for the menu buttons.
*expand*: ++
typeof: bool ++
default: false ++
Enables the module to consume all leftover space.
# FORMAT REPLACEMENTS
*{mode}*: The name of the current keymode.
# EXAMPLES
```
"mango/keymode": {
"format": "[{mode}]",
"format-resize": " Resizing"
}
```
# STYLE
- *#keymode*
A CSS class with the current mode name (e.g. *.resize*) is added to the widget, allowing permode styling:
```
#keymode.resize { background: #ff0000; }
```
+78
View File
@@ -0,0 +1,78 @@
waybar-mango-language(5)
# NAME
waybar - mango language module
# DESCRIPTION
The *language* module displays the currently active keyboard layout in the Mango compositor.
# CONFIGURATION
Addressed by *mango/language*
*format*: ++
typeof: string ++
default: {} ++
The format, how the layout should be displayed. See *FORMAT REPLACEMENTS*.
*format-<lang>*: ++
typeof: string ++
Provide an alternative format string for a given language.
<lang> is the short description of the layout (e.g. "us", "de").
The value is used as the replacement for *{}* in the main *format*.
This option can be repeated for multiple languages.
*format-<lang>-<variant>*: ++
typeof: string ++
Like *format-<lang>* but also matches the layout variant, taking precedence over *format-<lang>* when both the language and variant match.
*menu*: ++
typeof: string ++
Action that pops up a menu.
*menu-file*: ++
typeof: string ++
Location of the menu descriptor file. It must contain an element of type GtkMenu with id *menu*.
*menu-actions*: ++
typeof: array ++
Actions corresponding to the buttons of the menu.
*expand*: ++
typeof: bool ++
default: false ++
Enables this module to consume all leftover space dynamically.
# FORMAT REPLACEMENTS
*{short}*: Short name of the layout (e.g. "us").
*{shortDescription}*: Short description of the layout (same as *{short}* in most cases).
*{long}*: Full name of the layout as reported by Mango (e.g. "English (US)"). The empty positional *{}* in the default format resolves to this value, so the long name is shown when no *format* is specified.
*{variant}*: Variant of the layout, if any.
# EXAMPLES
```
"mango/language": {
"format": " {long} ",
"format-us": "US",
"format-de": "DE"
}
```
# STYLE
- *#language*
A CSS class matching the current layout's short name is added to the widget.
This allows perlayout styling:
```
#language.us { color: #00ff00; }
#language.de { color: #ff0000; }
```
+75
View File
@@ -0,0 +1,75 @@
waybar-mango-layout(5)
# NAME
waybar - mango layout module
# DESCRIPTION
The *layout* module displays the current layout symbol of the monitor (e.g. "S", "M") in the Mango compositor.
It supports dynamic CSS classes and custom formats based on the active layout symbol.
# CONFIGURATION
Addressed by *mango/layout*
*format*: ++
typeof: string ++
default: {} ++
The default format, how the layout symbol should be displayed. The positional *{}* (the default) and *{symbol}* are both replaced by the current layout symbol.
*format-<symbol>*: ++
typeof: string ++
default: *none* ++
The custom format to use when a specific layout symbol is active (e.g., *format-S*, *format-M*). Note that the symbol string is strictly case-sensitive. If no match is found, it falls back to *format*.
*expand*: ++
typeof: bool ++
default: false ++
Enables the module to consume all leftover space.
# FORMAT REPLACEMENTS
*{symbol}*: The layout symbol reported by Mango (e.g., "S", "M", "Dwindle").
# CUSTOM FORMATS
You can define specific formats for different layouts by appending the exact layout symbol to the *format-* key in your configuration.
For example, if your Mango compositor reports the symbol "S" for a spiral layout and "M" for a master layout, you can use *format-S* and *format-M* to define unique icons or text for each. Keep in mind that JSON keys are case-sensitive, so if the compositor sends "S", the key must be exactly *format-S*.
# STYLE
The layout module provides dynamic CSS classes based on the current layout symbol, allowing you to style each layout differently.
* *#layout*
* *.<symbol>* - The current layout symbol is dynamically added as a CSS class name (e.g., *.S*, *.M*).
# EXAMPLES
```
"mango/layout": {
"format": "[] {symbol}",
"format-S": "󰌌 {symbol}",
"format-M": "󰕰 {symbol}"
}
```
## CSS Example
```
#layout {
color: #ffffff;
padding: 0 5px;
}
/* Specific color for the "S" layout */
#layout.S {
color: #a6e3a1;
}
/* Specific color for the "M" layout */
#layout.M {
color: #f38ba8;
}
```
+73
View File
@@ -0,0 +1,73 @@
waybar-mango-window(5)
# NAME
waybar - mango window module
# DESCRIPTION
The *window* module displays the title and app ID of the currently focused window in the Mango compositor.
# CONFIGURATION
Addressed by *mango/window*
*format*: ++
typeof: string ++
default: {title} ++
The format string. See *FORMAT REPLACEMENTS*.
*rewrite*: ++
typeof: object ++
Rules to rewrite the window title. Each key is a regular expression and its value is the replacement string. Captures can be used with *$1*, *$2*, etc.
*icon*: ++
typeof: bool ++
default: false ++
Whether to show the application icon.
*icon-size*: ++
typeof: integer ++
default: 24 ++
Size of the application icon in pixels.
*expand*: ++
typeof: bool ++
default: false ++
Enables the module to consume all leftover space.
# FORMAT REPLACEMENTS
*{title}*: The current window title.
*{app_id}*: The app ID of the focused window.
# REWRITE RULES
If the title matches a regular expression from the *rewrite* object, it is replaced by the corresponding value. Regular expression syntax follows ECMAScript rules. Unmatched titles are left unchanged.
# EXAMPLES
```
"mango/window": {
"format": "{title}",
"rewrite": {
"(.*) - Mozilla Firefox": "🌎 $1",
"(.*) - zsh": "> [$1]"
},
"icon": true,
"icon-size": 20
}
```
# STYLE
- *#window*
The following classes are set on the module's event box (the container that
wraps *#window*), not on *#window* itself. Target them directly or with a
descendant selector such as *.solo #window*:
- *.empty* applied when no window is focused (module hidden by default)
- *.solo* applied when only one window is present on the active workspace
- *.<app-id>* applied when a single window with the given app ID is on the workspace
+112
View File
@@ -0,0 +1,112 @@
waybar-mango-workspaces(5)
# NAME
waybar - mango workspaces module
# DESCRIPTION
The *workspaces* module displays the tags (workspaces) of the Mango compositor. It shows an overview button when the overview mode is active (active tag is 0), and individual tag buttons otherwise.
# CONFIGURATION
Addressed by *mango/workspaces*
*format*: ++
typeof: string ++
default: {value} ++
The format for each tag button. See *FORMAT REPLACEMENTS*.
*format-icons*: ++
typeof: object ++
Icons to be used instead of the workspace index or name. Keys can be a workspace index (as a string), or one of the following special state keys: *default*, *active*, *urgent*, *empty*.
*disable-markup*: ++
typeof: bool ++
default: false ++
If true, the button label will not be interpreted as Pango markup.
*current-only*: ++
typeof: bool ++
default: false ++
If true, only the currently active workspace button is shown.
*hide-empty*: ++
typeof: bool ++
default: false ++
If true, buttons for empty (client_count == 0) workspaces are hidden, unless the workspace is active.
*on-click*: ++
typeof: string ++
Command to execute on left click. Typically set to *activate* or *toggle*.
*on-click-middle*: ++
typeof: string ++
Command for middle click. Same actions as *on-click*.
*on-click-right*: ++
typeof: string ++
Command for right click. Same actions as *on-click*.
*overview-label*: ++
typeof: string ++
default: "OVERVIEW" ++
Label shown on the overview button when the overview is active.
*expand*: ++
typeof: bool ++
default: false ++
Enables the module to consume leftover space.
# FORMAT REPLACEMENTS
*{value}*: Workspace index (same as *{index}* for unnamed workspaces).
*{name}*: Workspace name (equal to the index for unnamed workspaces in Mango).
*{icon}*: Icon selected from *format-icons* based on workspace index and state.
*{index}*: Numeric index of the workspace.
*{output}*: Name of the output where the workspace is located.
# CLICK ACTIONS
When a tag button is clicked, the action from *on-click* (or its middle/right variants) is evaluated.
Supported actions:
- *activate*: dispatch view,<index>
- *toggle*: dispatch toggleview,<index>
When the overview button is clicked, the actions change to:
- *activate*: dispatch overview
- *toggle*: dispatch toggleoverview
# EXAMPLES
```
"mango/workspaces": {
"format": "{icon}",
"format-icons": {
"1": "一",
"2": "二",
"active": "",
"default": "",
"urgent": "",
"empty": ""
},
"on-click": "activate",
"on-click-right": "toggle",
"overview-label": ""
}
```
# STYLE
- *#workspaces button*
- *#workspaces button.active* the workspace is active (visible) on its output.
- *#workspaces button.urgent* the workspace has at least one urgent window.
- *#workspaces button.empty* the workspace contains no clients.
- *#workspaces button.current_output* the workspace belongs to the output where the bar is shown.
- *#workspaces button.overview* the overview button (visible in overview mode).
+5
View File
@@ -84,6 +84,11 @@ Addressed by *memory*
default: true ++
Option to disable tooltip on hover.
*tooltip-format*: ++
typeof: string ++
default: {used:0.1f}GiB used ++
The format of the tooltip shown on hover. Supports the same replacements as *format*.
*menu*: ++
typeof: string ++
Action that popups the menu.
+1 -1
View File
@@ -67,7 +67,7 @@ A module that implements a 'menu' needs 3 properties defined in its config :
GtkMenu with id *menu*.
*menu-actions*: ++
typeof: array ++
typeof: object ++
The actions corresponding to the buttons of the menu. The identifiers of
each actions needs to exists as an id in the 'menu-file' for it to be linked
properly.
+14 -2
View File
@@ -8,17 +8,19 @@ waybar - mpd module
The *mpd* module displays information about a running "Music Player Daemon" instance.
Note that Waybar must be compiled with MPD support in order to use this module.
# CONFIGURATION
Addressed by *mpd*
*server*: ++
typeof: string ++
The network address or Unix socket path of the MPD server. If empty, connect to the default host.
The network address or Unix socket path of the MPD server. If empty, connect to the default host (`MPD_HOST`).
*port*: ++
typeof: integer ++
The port MPD listens to. If empty, use the default port.
The port MPD listens to. If empty, use the default port (`MPD_PORT`).
*password*: ++
typeof: string ++
@@ -29,6 +31,11 @@ Addressed by *mpd*
default: 5 ++
The interval in which the connection to the MPD server is retried
*playing-interval*: ++
typeof: integer++
default: 1000 ++
The interval (in milliseconds) in which the playing state is updated.
*timeout*: ++
typeof: integer++
default: 30 ++
@@ -89,6 +96,11 @@ Addressed by *mpd*
typeof: integer ++
Maximum length of the Title tag.
*ellipsis*: ++
typeof: string ++
default: "" ++
The string appended to the Artist, Album, Album Artist and Title tags when they are truncated by the corresponding length option (`artist-len`, `album-len`, `album-artist-len`, `title-len`).
*rotate*: ++
typeof: integer ++
Positive value to rotate the text label (in 90 degree increments).
+19 -2
View File
@@ -26,7 +26,7 @@ The *mpris* module displays currently playing media via libplayerctl.
*format*: ++
typeof: string ++
default: {player} ({status}) {dynamic} ++
default: {player} ({status}): {dynamic} ++
The text format.
*format-[status]*: ++
@@ -40,7 +40,7 @@ The *mpris* module displays currently playing media via libplayerctl.
*tooltip-format*: ++
typeof: string ++
default: {player} ({status}) {dynamic} ++
default: {player} ({status}): {dynamic} ++
The tooltip text format.
*tooltip-format-[status]*: ++
@@ -140,6 +140,21 @@ The *mpris* module displays currently playing media via libplayerctl.
default: next track ++
Overwrite default action toggles.
*on-click-backward*: ++
typeof: string ++
default: previous track ++
Overwrite the default action for the backward mouse button (button 8).
*on-click-forward*: ++
typeof: string ++
default: next track ++
Overwrite the default action for the forward mouse button (button 9).
*prefer-album-artist*: ++
typeof: bool ++
default: false ++
When true, use the album artist instead of the track artist for the _{artist}_ and _{dynamic}_ tags, falling back to the track artist when no album artist is available.
*player-icons*: ++
typeof: map[string]string ++
Allows setting _{player_icon}_ based on player-name property.
@@ -168,6 +183,8 @@ The *mpris* module displays currently playing media via libplayerctl.
*{length}*: Length of the track, formatted as HH:MM:SS
*{position}*: Current playback position of the track, formatted as HH:MM:SS
*{dynamic}*: Use _{artist}_, _{album}_, _{title}_ and _{length}_, automatically omit++
empty values
+44
View File
@@ -56,6 +56,10 @@ Addressed by *network*
typeof: string ++
This format is used when rfkill is blocking wlan interfaces.
*format-alt*: ++
typeof: string ++
On click, toggle between this format and the regular format. The click button is set with *format-alt-click* (defaults to the left button).
*format-icons*: ++
typeof: array/object ++
Based on the current signal strength, the corresponding icon gets selected. ++
@@ -176,6 +180,8 @@ Addressed by *network*
*{signaldBm}*: Signal strength of the wireless network in dBm.
*{signalStrengthApp}*: Human-readable descriptor of the wireless connectivity derived from the signal strength (e.g. "Great Connectivity", "Streaming", "Poor Connectivity").
*{frequency}*: Frequency of the wireless network in GHz.
*{bandwidthUpBits}*: Instant up speed in bits/seconds.
@@ -194,10 +200,48 @@ Addressed by *network*
*{bandwidthDownBytes}*: Instant down speed in bytes/seconds.
*{bandwidthUpBytesCompact}*: Instant up speed in bytes/seconds, formatted compactly (e.g. 1.2K).
*{bandwidthDownBytesCompact}*: Instant down speed in bytes/seconds, formatted compactly (e.g. 1.2K).
*{bandwidthTotalBytes}*: Instant total speed in bytes/seconds.
*{txBitrate}*: Link transmit bitrate (e.g., 866.7 Mb/s).
*{rxBitrate}*: Link receive bitrate (e.g., 866.7 Mb/s).
*{linkSpeed}*: Ethernet link speed.
*{icon}*: Icon, as defined in *format-icons*.
# NUMBER FORMAT MODIFIERS
The bandwidth/bitrate replacements above (*{bandwidth\*}*, *{txBitrate}*,
*{rxBitrate}*, *{linkSpeed}*) auto-scale the number with an SI prefix (k, M, G,
…). Their rendering can be tuned with fmt-style modifiers, e.g.
*"{bandwidthDownBits:>}"* or *"{bandwidthDownBits:M}"*. Modifiers may be combined
in any order:
*<*, *=*, *>*: Alignment/padding (left, column-align, right) — as before.
*u* / *U*: Hide (*u*) or show (*U*) the unit suffix. The unit is shown by default
with an auto scale and hidden by default when a scale is forced (see below).
*#*, *k*, *M*, *G*, *T*, *P*: Force a fixed scale instead of auto-selecting one
(*#* = base scale, no prefix). Forcing a scale hides the scale prefix and, by
default, the unit (re-enable it with *U*). E.g. *"{bandwidthDownBits:M}"* always
shows the value in megabits.
*i*: Force integer display (no decimals).
*b* / *B*: Force decimal base 1000 (*b*) or binary base 1024 with an *i* marker
(*B*), overriding the module default.
A trailing number is a fixed width for the coefficient when a scale is forced; if
the value does not fit, it is shown as *#* characters (e.g. *"{bandwidthDownBits:=3#}"*
*###*). Without a forced scale the number is ignored (kept for config
compatibility).
# EXAMPLES
```
+6 -2
View File
@@ -21,6 +21,10 @@ Addressed by *niri/language*
typeof: string++
Provide an alternative name to display per language where <lang> is the language of your choosing. Can be passed multiple times with multiple languages as shown by the example below.
*format-<lang>-<variant>* ++
typeof: string ++
Like *format-<lang>* but also matches the layout variant, taking precedence over *format-<lang>* when both the language and variant match.
*menu*: ++
typeof: string ++
Action that popups the menu.
@@ -40,11 +44,11 @@ Addressed by *niri/language*
# FORMAT REPLACEMENTS
*{short}*: Short name of layout (e.g. "us"). Equals to {}.
*{short}*: Short name of layout (e.g. "us").
*{shortDescription}*: Short description of layout (e.g. "en").
*{long}*: Long name of layout (e.g. "English (Dvorak)").
*{long}*: Long name of layout (e.g. "English (Dvorak)"). Equals to {}.
*{variant}*: Variant of layout (e.g. "dvorak").
+9
View File
@@ -40,6 +40,11 @@ Addressed by *niri/window*
default: false ++
Enables this module to consume all left over space dynamically.
*show-empty*: ++
typeof: bool ++
default: false ++
When no window is focused (empty workspace or all windows closed), keep the module visible and render *format* with empty {title}/{app_id} and {col}/{max_col} set to -1. When false (the default), the module is hidden while no window is focused.
# FORMAT REPLACEMENTS
See the output of "niri msg windows" for examples
@@ -48,6 +53,10 @@ See the output of "niri msg windows" for examples
*{app_id}*: The current app ID of the focused window.
*{col}*: The current column of the focused window in the workspace.
*{max_col}*: The maximum column inside the workspace of the focused window.
# REWRITE RULES
*rewrite* is an object where keys are regular expressions and values are
+113 -11
View File
@@ -17,6 +17,28 @@ Addressed by *niri/workspaces*
default: false ++
If set to false, workspaces will only be shown on the output they are on. If set to true all workspaces will be shown on every output.
*sort-by-name*: ++
typeof: bool ++
default: false ++
Sort workspaces by name (numeric sort when all names are numbers). Unnamed workspaces fall back to their index on the output.
*sort-by-coordinates*: ++
typeof: bool ++
default: false ++
Sort workspaces by output and index. If both *sort-by-name* and *sort-by-coordinates* are true, sorting by name is applied.
*sort-by-id*: ++
typeof: bool ++
default: false ++
Sort workspaces by id, taking precedence over other sort options.
*sort-by-number*: ++
typeof: bool ++
default: false ++
Deprecated alias for *sort-by-id*; prefer *sort-by-id* instead.
If none of the sorting options are enabled, workspaces keep their output/index order.
*format*: ++
typeof: string ++
default: {value} ++
@@ -31,6 +53,11 @@ Addressed by *niri/workspaces*
default: false ++
If set to false, you can click to change workspace. If set to true this behaviour is disabled.
*enable-bar-scroll*: ++
typeof: bool ++
default: false ++
If set to false, you can't scroll to cycle throughout workspaces from the entire bar. If set to true this behaviour is enabled.
*disable-markup*: ++
typeof: bool ++
default: false ++
@@ -41,6 +68,21 @@ Addressed by *niri/workspaces*
default: false ++
If set to true, only the active or focused workspace will be shown.
*display-condition*: ++
typeof: string ++
oneof: "show-all", "keep-named", "only-populated" ++
default: "show-all" ++
Specifies the conditions for showing workspace widgets. ++
++
*show-all*: displays widgets for all workspaces. ++
*keep-named*: always displays named workspaces, irrespective of whether they contain windows or not. ++
*only-populated*: only displays widgets for workspaces that have windows.
*hide-empty*: ++
typeof: bool ++
default: false ++
If set to true, empty workspaces will not be shown.
*on-update*: ++
typeof: string ++
Command to execute when the module is updated.
@@ -49,6 +91,40 @@ Addressed by *niri/workspaces*
typeof: bool ++
default: false ++
Enables this module to consume all left over space dynamically.
*workspace-taskbar*: ++
typeof: object ++
Contains settings for the workspace taskbar, which displays app icons within each workspace.
*enable*: ++
typeof: bool ++
default: false ++
Enables the workspace taskbar mode.
*icon-size*: ++
typeof: int ++
default: 16 ++
Size of the icons in the workspace taskbar.
*ignore-workspaces*: ++
typeof: array ++
default: [] ++
Regexes to match against workspaces names and index's. If there's a match, the workspace will not be shown.
*format-window-separator*: ++
typeof: string ++
default: " " ++
Separator used between window representations generated by *window-rewrite*.
*window-rewrite*: ++
typeof: object ++
default: {} ++
Rules to map window app_id and/or title to a specific string representation (e.g., an icon). Keys are regular expressions matching `app_id<regex>` and/or `title<regex>`. Values are the replacement strings, which can contain `{app_id}` and `{title}` placeholders.
*window-rewrite-default*: ++
typeof: string ++
default: "?" ++
The default representation for windows that don't match any rule in *window-rewrite*.
# FORMAT REPLACEMENTS
@@ -63,6 +139,10 @@ as defined by niri.
*{output}*: Output where the workspace is located.
*{total}*: The total number of workspaces.
*{windows}*: Concatenated representation of windows in the workspace, using *window-rewrite* rules and *format-window-separator*.
# ICONS
Additional to workspace name matching, the following *format-icons* can be set.
@@ -77,18 +157,36 @@ Additional to workspace name matching, the following *format-icons* can be set.
```
"niri/workspaces": {
"format": "{icon}",
"format-icons": {
// Named workspaces
// (you need to configure them in niri)
"browser": "",
"discord": "",
"chat": "<b></b>",
"format": "{icon} {windows}",
"format-window-separator": "|",
"window-rewrite-default": "",
"window-rewrite": {
"app_id<firefox>": "",
"app_id<foot>": "",
"app_id<org.gnome.Nautilus> title<.*Downloads.*>": "",
"app_id<org.gnome.Nautilus>": ""
},
"format-icons": {
// Named workspaces
// (you need to configure them in niri)
"browser": "",
"discord": "",
"chat": "<b></b>",
// Icons by state
"active": "",
"default": ""
}
// Icons by state
"active": "",
"default": ""
}
}
```
```
"niri/workspaces": {
"format": "{icon}",
"workspace-taskbar": {
"enable": true,
"icon-size": 18
}
}
```
@@ -103,3 +201,7 @@ Additional to workspace name matching, the following *format-icons* can be set.
the bar that it is displayed on.
- *#workspaces button#niri-workspace-<name>*: Workspaces named this, or index
for unnamed workspaces.
- *#workspaces button.niri-workspace*: The main container for the workspace.
- *#workspaces button .niri-taskbar-btn*: The icon buttons within the taskbar.
- *#workspaces button .niri-taskbar-btn.focused*: The taskbar icon button of the
currently focused window.
+25 -4
View File
@@ -25,8 +25,8 @@ $XDG_CONFIG_HOME/waybar/config
:[ Message displayed on the bar. {icon} and {profile} are respectively substituted with the icon representing the active profile and its full name.
|[ *tooltip-format*
:[ string
:[ "Power profile: {profile}\\nDriver: {driver}"
:[ Messaged displayed in the module tooltip. {icon} and {profile} are respectively substituted with the icon representing the active profile and its full name.
:[ "Power profile: {profile}\\nCPU driver: {cpu_driver}\\nPlatform driver: {platform_driver}"
:[ Messaged displayed in the module tooltip. {icon} and {profile} are respectively substituted with the icon representing the active profile and its full name. {cpu_driver} and {platform_driver} are substituted with the CPU and platform drivers reported by recent power-profiles-daemon versions. {driver} is kept for backward compatibility: it resolves to the legacy single driver on older daemons and falls back to the CPU driver on recent ones.
|[ *tooltip*
:[ bool
:[ true
@@ -44,6 +44,18 @@ $XDG_CONFIG_HOME/waybar/config
# FORMAT REPLACEMENTS
*{profile}*: Active profile full name.
*{icon}*: Icon (from *format-icons*) representing the active profile.
*{cpu_driver}*: The CPU driver reported by recent power-profiles-daemon versions. *(tooltip)*
*{platform_driver}*: The platform driver reported by recent power-profiles-daemon versions. *(tooltip)*
*{driver}*: Kept for backward compatibility: resolves to the legacy single driver on older daemons and falls back to the CPU driver on recent ones. *(tooltip)*
# CONFIGURATION EXAMPLES
Compact display (default config):
@@ -51,7 +63,7 @@ Compact display (default config):
```
"power-profiles-daemon": {
"format": "{icon}",
"tooltip-format": "Power profile: {profile}\nDriver: {driver}",
"tooltip-format": "Power profile: {profile}\nCPU driver: {cpu_driver}\nPlatform driver: {platform_driver}",
"tooltip": true,
"format-icons": {
"default": "",
@@ -67,7 +79,7 @@ Display the full profile name:
```
"power-profiles-daemon": {
"format": "{icon} {profile}",
"tooltip-format": "Power profile: {profile}\nDriver: {driver}",
"tooltip-format": "Power profile: {profile}\nCPU driver: {cpu_driver}\nPlatform driver: {platform_driver}",
"tooltip": true,
"format-icons": {
"default": "",
@@ -77,3 +89,12 @@ Display the full profile name:
}
}
```
# STYLE
- *#power-profiles-daemon*
- *#power-profiles-daemon.performance* Applied when the *performance* profile is active.
- *#power-profiles-daemon.balanced* Applied when the *balanced* profile is active.
- *#power-profiles-daemon.power-saver* Applied when the *power-saver* profile is active.
*Note*: the module applies a CSS class equal to the name of the active profile, so any additional profile exposed by power-profiles-daemon can be styled by its name.
+13 -3
View File
@@ -19,7 +19,7 @@ the screen or playing audio.
*icon-size*: ++
typeof: integer ++
default: 20 ++
The size of each privacy icon.
The size of each privacy icon. Set to *0* for auto size.
*transition-duration*: ++
typeof: integer ++
@@ -28,7 +28,7 @@ the screen or playing audio.
*modules* ++
typeof: array of objects ++
default: [{"type": "screenshare"}, {"type": "audio-in"}] ++
default: [{"type": "screenshare"}, {"type": "audio-in"}, {"type": "location"}] ++
Which privacy modules to monitor. See *MODULES CONFIGURATION* for++
more information.
@@ -52,9 +52,14 @@ the screen or playing audio.
*type*: ++
typeof: string ++
values: "screenshare", "audio-in", "audio-out" ++
values: "screenshare", "audio-in", "audio-out", "location" ++
Specifies which module to use and configure.
*icon-name*: ++
typeof: string ++
If set, changes the modules icon. Accepts any valid GTK icon name. ++
Note: the icon is only visible when the resource is actively in use; the item is hidden when idle.
*tooltip*: ++
typeof: bool ++
default: true ++
@@ -95,6 +100,10 @@ the screen or playing audio.
"type": "audio-in",
"tooltip": true,
"tooltip-icon-size": 24
},
{
"type": "location",
"icon-name": "location-services-active-symbolic"
}
],
"ignore-monitor": true,
@@ -118,3 +127,4 @@ the screen or playing audio.
- *#privacy-item.screenshare*
- *#privacy-item.audio-in*
- *#privacy-item.audio-out*
- *#privacy-item.location*
+59 -6
View File
@@ -22,36 +22,85 @@ The volume can be controlled by dragging the slider across the bar or clicking o
default: 100 ++
The maximum volume value the slider should display and set.
*target*: ++
typeof: string ++
default: sink ++
Whether the slider will control the default audio source or default audio sink. ++
Valid values are either "sink" or "source".
*orientation*: ++
typeof: string ++
default: horizontal ++
The orientation of the slider. Can be either `horizontal` or `vertical`.
*expand*: ++
typeof: bool ++
default: false ++
Enables this module to consume all left over space dynamically.
typeof: bool ++
default: false ++
Enables this module to consume all left over space dynamically.
*zero-on-mute*: ++
typeof: bool ++
default: true ++
`true` = The slider will be set to `min` when the source/sink is muted. ++
`false` = The slider will continue to show the unmuted volume level when the source/sink is muted.
*unmute-on-volume-change*: ++
typeof: bool ++
default: true ++
Specifies whether to unmute a muted souce/sink when its volume is changed by the user moving the slider.
*target*: ++
typeof: string ++
default: sink ++
The audio target to control. Can be either `sink` (output/speakers) or `source` (input/microphone).
*ignored-sinks*: ++
typeof: array ++
default: empty ++
A list of sink descriptions to ignore when tracking the default sink, so switching to those sinks does not update the slider.
*sink-mapping*: ++
typeof: object ++
Sinks named by the values of this mapping will be considered to be the current sink instead of the sinks named by the respective keys.
# EXAMPLES
```
"modules-right": [
"pulseaudio/slider",
"pulseaudio/slider#out",
"pulseaudio/slider#in",
],
"pulseaudio/slider": {
"pulseaudio/slider#out": {
"min": 0,
"max": 100,
"orientation": "horizontal"
"orientation": "horizontal",
"zero-on-mute": false,
"unmute-on-volume-change": false
},
"pulseaudio/slider#in": {
"min": 0,
"max": 100,
"orientation": "horizontal",
"target": "source"
}
```
# STYLE
Unlike most modules, the slider modules *require* styling to display correctly.
In particular you *need* to set *min-width* and/or *min-height* (depending on
whether the slider is vertical or horizontal) on the *trough* node, otherwise
the slider renders too small to be usable. This is a GTK detail, not a Waybar
issue.
The slider is a component with multiple CSS Nodes, of which the following are exposed:
*#pulseaudio-slider*: ++
Controls the style of the box *around* the slider and bar.
*#pulseaudio-slider.muted*: ++
Controls the style when the audio source/sink is muted.
*#pulseaudio-slider slider*: ++
Controls the style of the slider handle.
@@ -85,4 +134,8 @@ The slider is a component with multiple CSS Nodes, of which the following are ex
border-radius: 5px;
background: green;
}
#pulseaudio-slider.muted highlight {
background-color: orange;
}
```
+22 -1
View File
@@ -108,6 +108,10 @@ Additionally, you can control the volume by scrolling *up* or *down* while the c
default: true ++
Option to disable tooltip on hover.
*tooltip-format*: ++
typeof: string ++
The format of the tooltip shown on hover. When unset, the tooltip shows the current sink's description.
*max-volume*: ++
typeof: integer ++
default: 100 ++
@@ -115,7 +119,11 @@ Additionally, you can control the volume by scrolling *up* or *down* while the c
*ignored-sinks*: ++
typeof: array ++
Sinks in this list will not be shown as active sink by Waybar. Entries should be the sink's description field.
Sinks in this list will not be shown as active sink by Waybar. Entries should be the sink's description field. Use *pactl list sinks* to find the correct description.
*sink-mapping*: ++
typeof: object ++
Sinks named by the values of this mapping will be considered to be the current sink instead of the sinks named by the respective keys.
*menu*: ++
typeof: string ++
@@ -135,12 +143,21 @@ Additionally, you can control the volume by scrolling *up* or *down* while the c
default: false ++
Enables this module to consume all left over space dynamically.
*target*: ++
typeof: string ++
default: sink ++
The audio target to control when scrolling. Can be either `sink` (output/speakers) or `source` (input/microphone).
# FORMAT REPLACEMENTS
*{desc}*: Pulseaudio port's description, for bluetooth it'll be the device name.
*{volume}*: Volume in percentage.
*{source_volume}*: Source (input/microphone) volume in percentage.
*{source_desc}*: Source's description, for bluetooth it'll be the device name.
*{icon}*: Icon, as defined in *format-icons*.
*{format_source}*: Source format, *format-source*, *format-source-muted*.
@@ -151,6 +168,8 @@ The following strings for *format-icons* are supported.
- the device name
The device name looks something like *alsa\_output.pci-0000\_00\_1f.3.analog-stereo*. You can find it with a PulseAudio frontend such as *pacmd list-sinks* or *pamixer --list-sinks*.
If they are found in the current PulseAudio port name, the corresponding icons will be selected.
- *default* (Shown, when no other port is found)
@@ -196,3 +215,5 @@ to be selected when the corresponding audio device is muted. This applies to *de
- *#pulseaudio*
- *#pulseaudio.bluetooth*
- *#pulseaudio.muted*
- *#pulseaudio.sink-muted*
- *#pulseaudio.source-muted*
+30 -3
View File
@@ -19,6 +19,10 @@ Addressed by *river/layout*
default: {} ++
The format, how information should be displayed. On {} data gets inserted.
*format-icons*: ++
typeof: array ++
Based on the current layout, the corresponding icon gets selected.
*rotate*: ++
typeof: integer ++
Positive value to rotate the text label (in 90 degree increments).
@@ -69,16 +73,39 @@ Addressed by *river/layout*
default: false ++
Enables this module to consume all left over space dynamically.
# EXAMPLE
# FORMAT REPLACEMENTS
*{layout}*: Layout, as defined by your layout generator. By default this will be *rivertile(1)*
*{icon}*: Icon, as defined in *format-icons*
# EXAMPLES
With layout name:
```
"river/layout": {
"format": "{}",
"format": "{layout}",
"min-length": 4,
"align": "right"
}
```
With icons, this sets icons for the 4 layouts available in rivertile:
```
"river/layout": {
"format": "{icon}",
"min-length": 3,
"format-icons": {
"left": "[]=",
"bottom": "TTT",
"top": "ꓕꓕꓕ",
"right": "=[]",
}
}
```
# STYLE
- *#layout*
@@ -87,4 +114,4 @@ Addressed by *river/layout*
# SEE ALSO
waybar(5), river(1)
waybar(5), river(1), rivertile(1)
+30 -1
View File
@@ -26,6 +26,14 @@ Addressed by *river/tags*
default: false ++
If set to false, you can left-click to set focused tag. Right-click to toggle tag focus. If set to true this behaviour is disabled.
*set-tags*: ++
typeof: array ++
An array of tag bitmasks, one per tag button. Left-clicking a tag sets the focused tags to the corresponding bitmask instead of the single tag. Requires *disable-click* to be false.
*toggle-tags*: ++
typeof: array ++
An array of tag bitmasks, one per tag button. Right-clicking a tag toggles the corresponding bitmask in the focused tags instead of the single tag. Requires *disable-click* to be false.
*expand*: ++
typeof: bool ++
default: false ++
@@ -44,6 +52,23 @@ Addressed by *river/tags*
}
```
Sticky tag: this enables 5 tags and, to support a sticky tag (tag 32),
*set-tags* is given bitmasks with the 32nd bit set so that tag stays selected
whichever button is clicked.
```
"river/tags": {
"num-tags": 5,
"set-tags": [
2147483649,
2147483650,
2147483652,
2147483656,
2147483664
]
}
```
# STYLE
- *#tags button*
@@ -51,12 +76,16 @@ Addressed by *river/tags*
- *#tags button.focused*
- *#tags button.urgent*
- *#tags button.current-view*
- *#tags button.output*
- *#tags button.tag-N*
Note that occupied/focused/urgent status may overlap. That is, a tag may be
Note that occupied/focused/urgent/output status may overlap. That is, a tag may be
both occupied and focused at the same time.
The current view is set on all tags on which the current view is visible.
The *output* style is applied when the river output (e.g. monitor) of the current bar is focused.
# SEE ALSO
waybar(5), river(1)
+5
View File
@@ -53,6 +53,11 @@ Addressed by *river/window*
typeof: string ++
Command to execute when you right-click on the module.
*tooltip*: ++
typeof: bool ++
default: true ++
Option to enable tooltip on hover. The tooltip shows the same text as the module label.
*menu*: ++
typeof: string ++
Action that popups the menu.
+1 -1
View File
@@ -14,7 +14,7 @@ apply a class when the value matches the declared state value.
Every entry (*state*) consists of a *<name>* (typeof: *string*) and a *<value>* (typeof: *integer*).
- The state can be addressed as a CSS class in the *style.css*. The name of the CSS class is the *<name>* of the state.
Each class gets activated when the current value is equal to or less than the configured *<value>* for the *battery* module, or equal to or greater than the configured *<value>* for all other modules.
Each class gets activated when the current value is equal to or less than the configured *<value>* for the *battery*, *pulseaudio* and *wireplumber* modules, or equal to or greater than the configured *<value>* for all other modules.
- Also, each state can have its own *format*.
Those can be configured via *format-<name>*, or if you want to differentiate a bit more, as *format-<status>-<state>*.
+35 -18
View File
@@ -8,20 +8,34 @@ waybar-styles - using stylesheets for waybar
Waybar uses Cascading Style Sheets (CSS) to configure its appearance.
It uses the first file found in this search order:
When the system appearance is light, Waybar first looks for *style-light.css*.
When the system appearance is dark, Waybar first looks for *style-dark.css*.
If no appearance-specific stylesheet is found, it falls back to *style.css*.
- *$XDG_CONFIG_HOME/waybar/style.css*
- *~/.config/waybar/style.css*
- *~/waybar/style.css*
- */etc/xdg/waybar/style.css*
- *@sysconfdir@/xdg/waybar/style.css*
Waybar uses the first file found in this search order for each stylesheet name:
- *$XDG_CONFIG_HOME/waybar/<stylesheet>*
- *~/.config/waybar/<stylesheet>*
- *~/waybar/<stylesheet>*
- */etc/xdg/waybar/<stylesheet>*
- *@sysconfdir@/xdg/waybar/<stylesheet>*
For example, a light theme is loaded from the first available file among:
- *$XDG_CONFIG_HOME/waybar/style-light.css*
- *~/.config/waybar/style-light.css*
- *~/waybar/style-light.css*
- */etc/xdg/waybar/style-light.css*
- *@sysconfdir@/xdg/waybar/style-light.css*
If no file is found there, Waybar repeats the same search using *style.css*.
# EXAMPLE
An example user-controlled stylesheet that just changes the color of the clock to be green on black, while keeping the rest of the system config the same would be:
```
@import url("file:///etc/xdg/waybar/style.css")
@import url("file:///etc/xdg/waybar/style.css");
#clock {
background: #000000;
@@ -43,18 +57,22 @@ You can apply special styling to any module for when the cursor hovers it.
Most, if not all, module types support setting the `cursor` option. This is
configured in your `config.jsonc`. If set to `false`, when hovering the module a
"pointer"(as commonly known from web CSS styling `cursor: pointer`) style cursor
"pointer" (as commonly known from web CSS styling `cursor: pointer`) style cursor
will not be shown. Default behavior is to indicate an interaction event is
available.
There are more cursor types to choose from by setting the `cursor` option to
a number, see Gdk3 official docs for all possible cursor types:
https://docs.gtk.org/gdk3/enum.CursorType.html.
However, note that not all cursor options listed may be available on
your system. If you attempt to use a cursor which is not available, the
application will crash.
If set to a string value, it must be a valid cursor name
(e.g. `"pointer"`, `"default"`, `"grab"`, `"text"`, `"crosshair"`, etc.),
see the cursor-shape-v1 protocol for all possible cursor types:
https://wayland.app/protocols/cursor-shape-v1#wp_cursor_shape_device_v1:enum:shape.
Depending on the compositor and cursor theme used, cursors not listed in the protocol may also work.
Example of disabling pointer(`Gdk::Hand2`) cursor type on a custom module:
Prior to 0.16.0 the `cursor` option accepted a numeric _Gdk::CursorType_ value
(e.g. `"cursor": 8`). Numeric values are deprecated but still honored for
backward compatibility; a cursor-shape-v1 name string (e.g. `"grab"`) is now
preferred.
Example of disabling the cursor on a custom module:
```
"custom/my-custom-module": {
@@ -63,13 +81,12 @@ Example of disabling pointer(`Gdk::Hand2`) cursor type on a custom module:
}
```
Example of setting cursor type to `Gdk::Boat`(according to
https://docs.gtk.org/gdk3/enum.CursorType.html#boat):
Example of setting the cursor type to `"grab"`:
```
"custom/my-custom-module": {
...
"cursor": 8,
"cursor": "grab",
}
```
+14
View File
@@ -32,6 +32,18 @@ Addressed by *sway/language*
default: true ++
Option to disable tooltip on hover.
*on-click*: ++
typeof: string ++
Command to execute when clicked on the module.
*on-click-middle*: ++
typeof: string ++
Command to execute when you middle clicked on the module using mousewheel.
*on-click-right*: ++
typeof: string ++
Command to execute when you right clicked on the module.
*menu*: ++
typeof: string ++
Action that popups the menu.
@@ -67,6 +79,7 @@ Addressed by *sway/language*
```
"sway/language": {
"format": "{}",
"on-click": "swaymsg input type:keyboard xkb_switch_layout next",
},
"sway/language": {
@@ -77,3 +90,4 @@ Addressed by *sway/language*
# STYLE
- *#language*
- *#language.<layout-short-name>* Where *layout-short-name* is the short name of the active layout (e.g. *#language.us* or *#language.de*).
+20 -2
View File
@@ -14,7 +14,7 @@ Addressed by *sway/window*
*format*: ++
typeof: string ++
default: {title} ++
default: {} ++
The format, how information should be displayed.
*rotate*: ++
@@ -101,13 +101,23 @@ Addressed by *sway/window*
*icon*: ++
typeof: bool ++
default: false ++
Option to hide the application icon.
Option to display the application icon.
*icon-size*: ++
typeof: integer ++
default: 24 ++
Option to change the size of the application icon.
*icon-spacing*: ++
typeof: integer ++
default: 8 ++
Spacing between the application icon and the label.
*swap-icon-label*: ++
typeof: bool ++
default: false ++
Option to swap the order of the application icon and the label.
*expand*: ++
typeof: bool ++
default: false ++
@@ -163,3 +173,11 @@ window widget:
- *window#waybar.tabbed* When there is more than one window in the workspace and the workspace layout is tabbed
- *window#waybar.tiled* When there is more than one window in the workspace and the workspace layout is splith or splitv
- *window#waybar.<app_id>* Where *app_id* is the app_id or *instance* name like (*chromium*) of the only window in the workspace
These additional classes are applied to the whole Waybar (an element with the
name *window* and the id *waybar*) rather than to the module widget itself (an
element with the name *box* and the id *window*). In most cases you therefore
want to target *window#waybar.<stylename> #window* to style the module.
Switching layouts does not change the style unless the focus is changed. Sway
does not provide events for layout switching and the module does not poll.
+34
View File
@@ -22,6 +22,11 @@ Addressed by *sway/workspaces*
default: {value} ++
The format, how information should be displayed.
*format-for-negative-index*: ++
typeof: string ++
default: *format* ++
An alternative format, which will be used for workspaces with no explict or negative index ("num" in sway terms). Requires *format* to be set.
*format-icons*: ++
typeof: array ++
Based on the workspace name and state, the corresponding icon gets selected. See *icons*.
@@ -65,6 +70,11 @@ Addressed by *sway/workspaces*
default: false ++
If set to true. Only focused workspaces will be shown.
*ignore-workspaces*: ++
typeof: array ++
default: empty ++
List of regular expressions. Workspaces whose name matches any of the given patterns are not shown.
*persistent-workspaces*: ++
typeof: json (see below) ++
default: empty ++
@@ -78,10 +88,19 @@ Addressed by *sway/workspaces*
typeof: bool ++
Whether to disable *workspace_auto_back_and_forth* when clicking on workspaces. If this is set to *true*, clicking on a workspace you are already on won't do anything, even if *workspace_auto_back_and_forth* is enabled in the Sway configuration.
*no-switch-output*: ++
typeof: bool ++
Whether to disable switching output when clicking on workspaces. If this is set to *true*, then clicking on a workspace on a different output will bring it to the current output instead of switching to that output.
*alphabetical_sort*: ++
typeof: bool ++
Whether to sort workspaces alphabetically. Please note this can make "swaymsg workspace prev/next" move to workspaces inconsistent with the ordering shown in Waybar.
*custom-sort*: ++
typeof: array ++
default: [] ++
Defines an explicit ordering for workspace names. Entries earlier in the array appear first. Both full names and the trimmed portion after ":" are matched. Any workspace not listed here falls back to the default ordering (or alphabetical ordering when *alphabetical_sort* is true).
warp-on-scroll: ++
typeof: bool ++
default: true ++
@@ -110,6 +129,12 @@ warp-on-scroll: ++
default: false ++
Enables this module to consume all left over space dynamically.
*output-classes*: ++
typeof: array ++
Specify additional CSS classes to be added to workspace indicators based on the output on which the associated workspace is located.
Keys are output names and values are class names like *${output}: {output-class}*.
Assignment in config is used to keep the stylesheet independent of the available outputs.
# FORMAT REPLACEMENTS
@@ -147,6 +172,7 @@ an empty list denoting all outputs.
"3": [], // Always show a workspace with name '3', on all outputs if it does not exist
"4": ["eDP-1"], // Always show a workspace with name '4', on output 'eDP-1' if it does not exist
"5": ["eDP-1", "DP-2"] // Always show a workspace with name '5', on outputs 'eDP-1' and 'DP-2' if it does not exist
"6": ["MonitorMaker 3000 ABC0123"], // Always show a workspace with name '6' on outputs with an identifier 'MonitorMaker 3000 ABC0123' (usually a triple of vendor/model/serial)
}
}
```
@@ -187,6 +213,13 @@ n.b.: the list of outputs can be obtained from command line using *swaymsg -t ge
}
```
```
"sway/workspaces": {
"format": "{index} - {name}",
"format-for-negative-index": "{name}"
}
```
# Style
- *#workspaces button*
@@ -197,3 +230,4 @@ n.b.: the list of outputs can be obtained from command line using *swaymsg -t ge
- *#workspaces button.empty*
- *#workspaces button.current_output*
- *#workspaces button#sway-workspace-${name}*
- *#workspaces button.${output-class}*
+3 -1
View File
@@ -84,7 +84,9 @@ Addressed by *systemd-failed-units*
*{overall_state}:* Overall state of the systemd and user session. ("ok" or "degraded")
*{failed_units_list}:* Bulleted list of failed units using *tooltip-unit-format*. Empty when
there are no failed units.
there are no failed units. This replacement is only available in *tooltip-format* and
*tooltip-format-ok*; it is not supplied to *format*/*format-ok* and using it there breaks
label rendering.
The *tooltip-unit-format* string supports the following replacements:
+35 -1
View File
@@ -27,9 +27,20 @@ Addressed by *temperature*
The path of the hwmon-directory of the device, e.g. */sys/devices/pci0000:00/0000:00:18.3/hwmon*. (Note that the subdirectory *hwmon/hwmon#*, where *#* is a number is not part of the path!) Has to be used together with *input-filename*.
This can also be an array of strings, for which, it just works like *hwmon-path*.
*hwmon-name*: ++
typeof: string ++
Select a hwmon device by its name (from /sys/class/hwmon/\*/name), e.g. *amdgpu*.
Requires *input-filename* to be set.
Cannot be used together with *hwmon-path* or *hwmon-path-abs*.
*input-filename*: ++
typeof: string ++
The temperature filename of your *hwmon-path-abs*, e.g. *temp1_input*
The temperature filename of your *hwmon-path-abs* (also used by *hwmon-by-name*), e.g. *temp1_input*
*hwmon-by-name*: ++
typeof: string ++
The substring to search for in */sys/class/hwmon/hwmonX/name* (where hwmonX is any folder in */sys/class/hwmon/*).
Waybar will search for every directory in */sys/class/hwmon/* and uses the directory in which the *name* matches *hwmon-by-name*.
*warning-threshold*: ++
typeof: integer ++
@@ -145,6 +156,8 @@ Addressed by *temperature*
*{temperatureK}*: Temperature in Kelvin.
*{icon}*: Icon, as selected from *format-icons* based on the current temperature.
# EXAMPLES
```
@@ -162,3 +175,24 @@ Addressed by *temperature*
- *#temperature*
- *#temperature.warning*
- *#temperature.critical*
# TROUBLESHOOTING
## Finding your thermal zone
To list all the thermal zone types, run:
```
for i in /sys/class/thermal/thermal_zone*; do echo "$i: $(<$i/type)"; done
```
## Finding an hwmon path
If you do not have a thermal zone, use *sensors* to find the preferred
temperature source, then run:
```
for i in /sys/class/hwmon/hwmon*/temp*_input; do echo "$(<$(dirname $i)/name): $(cat ${i%_*}_label 2>/dev/null || echo $(basename ${i%_*})) $(readlink -f $i)"; done
```
to find the path to the desired file, then set it in *hwmon-path*.
+45 -7
View File
@@ -42,16 +42,40 @@ Addressed by *tray*
default: false ++
Enables this module to consume all left over space dynamically.
*icons*: ++
typeof: object ++
Per-application icon customization. Keys are application IDs (e.g., "spotify", "blueman"). ++
Values can be: ++
- *string*: Custom icon name or path to icon file ++
- *false*: Hide this application's tray icon completely
*orders*: ++
typeof: object ++
Orders for items to be placed in tray. When not set, orders are controlled by DBus. ++
Key: name of item. ++
Value: integer, higher value means to place this item to the right.
Note: custom *icons* only work with actual image files, not font-based icons. They
might not work for some Electron apps (see https://github.com/electron/electron/issues/40936).
*ignore-list*: ++
typeof: array ++
List of strings used to hide matching tray items. An item is hidden when any string in the list is found (as a substring) in the item's bus name, category, icon name, id or title.
# EXAMPLES
```
"tray": {
"icon-size": 21,
"spacing": 10,
"icons": {
"blueman": "bluetooth",
"TelegramDesktop": "$HOME/.local/share/icons/hicolor/16x16/apps/telegram.png"
}
"icons": {
"blueman": "bluetooth",
"TelegramDesktop": "$HOME/.local/share/icons/hicolor/16x16/apps/telegram.png",
"spotify": false
},
"orders": {
"wechat": 99
}
}
```
@@ -59,6 +83,20 @@ Addressed by *tray*
# STYLE
- *#tray*
- *#tray > .passive*
- *#tray > .active*
- *#tray > .needs-attention*
- *#tray menu* for the context menu
- *#tray widget>image* for icons
- *#tray > .passive* for icons with status *Passive*
- *#tray > .active* for icons with status *Active*
- *#tray > .needs-attention* for icons with status *NeedsAttention*
# TRAY APPLETS
The following applets are known to work with the *tray* module:
- *NetworkManager*: install networkmanager, enable it with
*systemctl enable NetworkManager.service*, and start the applet with
*nm-applet --indicator*.
- *Blueman*: enable the Bluetooth daemon, install blueman, and start
*blueman-applet*.
- *Electron apps*: apps like Slack, Telegram, Caprine and Discord should work
out of the box.
+13 -1
View File
@@ -26,7 +26,7 @@ compatible devices in the tooltip.
*icon-size*: ++
typeof: integer ++
default: 20 ++
Defines the size of the icons.
Defines the size of the icons. Set to *0* for automatic sizing.
*format*: ++
typeof: string ++
@@ -59,6 +59,12 @@ compatible devices in the tooltip.
default: 4 ++
Defines the spacing between the tooltip window edge and the tooltip content.
*tooltip-format*: ++
typeof: string ++
default: ++
The format used for each device line shown in the tooltip. Accepts the ++
same replacements as *format*.
*on-click*: ++
typeof: string ++
Command to execute when clicked on the module.
@@ -88,6 +94,12 @@ compatible devices in the tooltip.
*{time}*: An estimated time either until empty or until fully charged ++
depending on the charging state.
*{temperature}*: The battery temperature in degrees Celsius.
*{model}*: The model name of the device.
*{native-path}*: The native path of the device.
# EXAMPLES
```
+94
View File
@@ -0,0 +1,94 @@
waybar-user(5) "waybar-user" "User Manual"
# NAME
waybar - user module
# DESCRIPTION
The *user* module displays the currently logged in user, the system uptime and,
optionally, the user's avatar image.
# CONFIGURATION
Addressed by *user*
[- *Option*
:- *Typeof*
:- *Default*
:- *Description*
|[ *interval*
:[ integer
:[ 60
:[ The interval in which the information gets polled
|[ *format*
:[ string
:[ *{user} {work_H}:{work_M}*
:[ The format, how the information should be displayed. See *FORMAT REPLACEMENTS* below
|[ *icon*
:[ bool
:[ false
:[ When enabled, displays the user's avatar image next to the label
|[ *avatar*
:[ string
:[ *$HOME/.face*
:[ Path to the avatar image to display. Only used when *icon* is enabled. When unset, the default path *$HOME/.face* is used
|[ *height*
:[ integer
:[ 20
:[ The height of the avatar image in pixels
|[ *width*
:[ integer
:[ 20
:[ The width of the avatar image in pixels
|[ *open-on-click*
:[ bool
:[ false
:[ When enabled, left-clicking the module opens the user's home directory (or *open-path*) with the default file manager
|[ *open-path*
:[ string
:[
:[ Overrides the path that is opened when *open-on-click* is enabled. When empty, the user's home directory is used
|[ *rotate*
:[ integer
:[
:[ Positive value to rotate the text label (in 90 degree increments)
|[ *tooltip*
:[ bool
:[ true
:[ Option to enable tooltip on hover
# FORMAT REPLACEMENTS
- *{user}*: The login name of the currently logged in user, in uppercase
- *{work_d}*: Whole days the system has been up
- *{work_H}*: Hours part of the system uptime (00-23)
- *{work_M}*: Minutes part of the system uptime (00-59)
- *{work_S}*: Seconds part of the system uptime (00-59)
- *{up_H}*: Hour the system was booted (00-23)
- *{up_M}*: Minute the system was booted (00-59)
- *{up_d}*: Day of the month the system was booted (01-31)
- *{up_m}*: Month the system was booted (01-12)
- *{up_Y}*: Year the system was booted
# EXAMPLES
```
"user": {
"format": "{user} up {work_H}:{work_M}:{work_S}",
"interval": 60,
"icon": true,
"avatar": "/home/alice/.face",
"height": 24,
"width": 24,
"open-on-click": true
}
```
# STYLE
- *#user*
# AUTHOR
Alexis Rouillard <contact@arouillard.fr>
+12 -2
View File
@@ -14,11 +14,11 @@ Addressed by *wayfire/workspaces*
*format*: ++
typeof: string ++
default: {value} ++
default: {index} ++
The format, how information should be displayed.
*format-icons*: ++
typeof: array ++
typeof: object ++
Based on the workspace name, index and state, the corresponding icon gets selected. See *icons*.
*disable-click*: ++
@@ -26,6 +26,16 @@ Addressed by *wayfire/workspaces*
default: false ++
If set to false, you can click to change workspace. If set to true this behaviour is disabled.
*disable-scroll*: ++
typeof: bool ++
default: false ++
If set to false, you can scroll to cycle through workspaces. If set to true this behaviour is disabled.
*enable-bar-scroll*: ++
typeof: bool ++
default: false ++
If set to false, you can't scroll to cycle through workspaces from the entire bar. If set to true this behaviour is enabled.
*disable-markup*: ++
typeof: bool ++
default: false ++
+74 -2
View File
@@ -19,11 +19,37 @@ The *wireplumber* module displays the current volume reported by WirePlumber.
typeof: string ++
This format is used when the sound is muted.
*format-bluetooth*: ++
typeof: string ++
This format is used when the active sink is a Bluetooth device (its node name contains *bluez* or *a2dp-sink*).
*format-bluetooth-muted*: ++
typeof: string ++
This format is used when the active sink is a Bluetooth device and the sound is muted.
*format-source*: ++
typeof: string ++
default: *{volume}%* ++
The format used to render the source (microphone) volume sub-string that is exposed through the *{format_source}* replacement.
*format-source-muted*: ++
typeof: string ++
The format used for the *{format_source}* sub-string when the source (microphone) is muted.
*format-icons*: ++
typeof: array ++
Based on the current volume, the corresponding icon gets selected. The order is *low* to *high*.
*node-type*: ++
typeof: string ++
default: *Audio/Sink* ++
The WirePlumber node type to attach to. Use *Audio/Source* to manage microphones etc.
*only-physical*: ++
typeof: bool ++
default: *false* ++
When enabled, resolve through virtual/filter-chain sinks to the underlying physical sink and report its volume instead.
*tooltip*: ++
typeof: bool ++
default: *true* ++
@@ -63,6 +89,19 @@ The *wireplumber* module displays the current volume reported by WirePlumber.
default: 1.0 ++
The speed at which to change the volume when scrolling.
*scroll-scale*: ++
typeof: string ++
default: cubic_percent
The scale to use for the scrolling volume change. Options are 'linear', 'db', 'cubic', and 'cubic_percent'.
*reverse-scrolling*: ++
typeof: bool ++
Option to reverse the scroll direction for touchpads.
*reverse-mouse-scrolling*: ++
typeof: bool ++
Option to reverse the scroll direction for mice.
*on-click*: ++
typeof: string ++
Command to execute when clicked on the module.
@@ -107,10 +146,30 @@ The *wireplumber* module displays the current volume reported by WirePlumber.
# FORMAT REPLACEMENTS
*{volume}*: Volume in percentage.
*{volume}*: Volume in percentage, cubic scale as integer.
*{volume_linear}*: Volume in linear scale as float.
*{volume_cubic}*: Volume in cubic scale as float.
*{volume_db}*: Volume in decibel scale as float.
*{icon}*: Icon, as defined in *format-icons*.
*{node_name}*: The node's nickname as reported by WirePlumber (*node.nick* property)
*{source_volume}*: Source (microphone) volume in percentage, cubic scale as integer.
*{source_volume_linear}*: Source (microphone) volume in linear scale as float.
*{source_volume_cubic}*: Source (microphone) volume in cubic scale as float.
*{source_volume_db}*: Source (microphone) volume in decibel scale as float.
*{source_desc}*: The source node's nickname/description as reported by WirePlumber.
*{format_source}*: The pre-rendered source (microphone) volume sub-string, formatted with *format-source*/*format-source-muted*.
# EXAMPLES
## Basic:
@@ -123,7 +182,7 @@ The *wireplumber* module displays the current volume reported by WirePlumber.
}
```
## Separate Sink and Source Widgets
## Separate Sink and Source Widgets
```
"wireplumber#sink": {
@@ -143,7 +202,20 @@ The *wireplumber* module displays the current volume reported by WirePlumber.
}
```
## Use a Different Scale
```
"wireplumber": {
"format": "{volume_db:.2f}dB",
"scroll-scale": "db",
"scroll-step": 2.5
}
```
# STYLE
- *#wireplumber*
- *#wireplumber.muted*
- *#wireplumber.sink-muted*
- *#wireplumber.source-muted*
- *#wireplumber.bluetooth*
+76
View File
@@ -18,6 +18,13 @@ Addressed by *wlr/taskbar*
default: false ++
If set to false applications on the waybar's current output will be shown. Otherwise, all applications are shown.
*bar-css-states*: ++
typeof: bool ++
default: false ++
If set to true, application state is exposed as CSS classes on the Waybar
window. Maximized and fullscreen state is aggregated across applications
known to belong to the active workspace. See *Bar state style* below.
*format*: ++
typeof: string ++
default: {icon} ++
@@ -52,11 +59,36 @@ Addressed by *wlr/taskbar*
default: false ++
If set to true, always reorder the tasks in the taskbar so that the currently active one is first. Otherwise don't reorder.
*active-only*: ++
typeof: bool ++
default: false ++
If set to true, only the currently active application button is shown.
Other applications remain tracked and reappear when activated.
*sort-by-app-id*: ++
typeof: bool ++
default: false ++
If set to true, group tasks by their app_id. Cannot be used with 'active-first'.
*homogeneous*: ++
typeof: bool ++
default: false ++
If set to true, distribute every task button evenly across the taskbar's allocated width. Buttons will automatically resize so that 'N' visible tasks each take '1/N' of the width.
*justify*: ++
typeof: string ++
The alignment of the text within the module's box, allowing options 'left', 'right', or 'center' to define the positioning.
*expand*: ++
typeof: bool ++
default: false ++
If set to true, task buttons stretch to fill the available space in the taskbar and long titles are ellipsized to fit. Only takes effect on a horizontal bar; on a vertical bar the buttons keep their content-based size. If set to false, buttons are sized to their content.
*truncate*: ++
typeof: bool ++
default: false ++
If set to true, the task button text will be ellipsized (truncated with …) when the available button width is smaller than the label text.
*on-click*: ++
typeof: string ++
The action which should be triggered when clicking on the application button with the left mouse button.
@@ -77,6 +109,10 @@ Addressed by *wlr/taskbar*
typeof: array ++
List of app_id/titles to be invisible.
*squash-list*: ++
typeof: array ++
List of app_id/titles whose multiple instances are collapsed into a single button. When more than one instance of a listed app is open, only one button is shown; when one instance closes, the next hidden instance reappears. The special value '\*' matches all applications.
*app_ids-mapping*: ++
typeof: object ++
Dictionary of app_id to be replaced with
@@ -99,6 +135,11 @@ Addressed by *wlr/taskbar*
*{short_state}*: The state (minimize == m, maximized == M, active == A, fullscreen == F) represented as one character of the application.
As with all format replacements in Waybar, a length limit such as *{title:.15}* is
measured in bytes, not characters. This may produce invalid text if a multi-byte
character is split, or (when *markup* is true) if the truncation cuts through a
value that must be escaped in XML.
# CLICK ACTIONS
*activate*: Bring the application into foreground.
@@ -121,6 +162,8 @@ captures of the expression.
Regular expression and replacement follow ECMA-script rules.
An expression must match the format output *fully* to trigger its replacement.
If no expression matches, the format output is left unchanged.
Invalid expressions (e.g., mismatched parentheses) are skipped.
@@ -151,8 +194,41 @@ Invalid expressions (e.g., mismatched parentheses) are skipped.
# Style
- *#taskbar*
- *#taskbar.empty*
- *#taskbar button*
- *#taskbar button.maximized*
- *#taskbar button.minimized*
- *#taskbar button.active*
- *#taskbar button.fullscreen*
# Bar state style
When *bar-css-states* is enabled, the following classes are added to
*window#waybar*:
- *window#waybar.toplevel-active*
- *window#waybar.toplevel-maximized*
- *window#waybar.toplevel-minimized*
- *window#waybar.toplevel-fullscreen*
The active, minimized classes describe the active application. The maximized
and fullscreen classes are set if any non-minimized application known to belong
to the active workspace has that state.
Workspace membership is learned when an application is activated and requires
the compositor to support *ext-workspace-v1*. Before an application has been
activated during the current Waybar session, its workspace may be unknown. On
compositors without *ext-workspace-v1*, these classes fall back to the active
application's state.
For example:
```
window#waybar {
background-color: rgba(0, 0, 0, 0.5);
}
window#waybar.toplevel-maximized {
background-color: rgba(0, 0, 0, 1);
}
```
+162
View File
@@ -0,0 +1,162 @@
waybar-wwan(5) "waybar-wwan" "User Manual"
# NAME
waybar - wwan module
# DESCRIPTION
*wwan* module for ModemManager.
# FILES
$XDG_CONFIG_HOME/waybar/config ++
Per user configuration file
# ADDITIONAL FILES
libmm-glib lives in:
. /usr/lib/libmm-glib.so or /usr/lib64/libmm-glib.so
. /usr/lib/pkgconfig/libmm-glib.pc or /usr/lib64/pkgconfig/libmm-glib.pc
. /usr/include/libmm-glib
# CONFIGURATION
*format*: ++
typeof: string ++
default: *{state}* ++
The format, how information should be displayed. This format is used when other formats aren't specified.
*format-failed*: ++
typeof: string ++
This format is used when the modem cannot start.
*format-locked*: ++
typeof: string ++
This format is used when the SIM on the modem is locked.
*format-disabled*: ++
typeof: string ++
This format is used when the modem is disabled.
*format-enabled*: ++
typeof: string ++
This format is used when the modem is enabled, but isn't registered to any carrier network.
*format-searching*: ++
typeof: string ++
This format is used when the modem is looking for a carrier network to register to.
*format-registered*: ++
typeof: string ++
This format is used when the modem is registered to a network, but no data connection is active.
*format-connected*: ++
typeof: string ++
This format is used when the modem is registered to a network, and there is an active data connection.
*format-icons*: ++
typeof: array/object ++
Based on the current signal strength, the corresponding icon gets selected. ++
The order is *low* to *high*. Or by the state if it is an object.
*tooltip*: ++
typeof: bool ++
default: true ++
Option to disable tooltip on hover.
*tooltip-format*: ++
typeof: strirng ++
default: {state} ++
The format, how information should be displayed in the tooltip. This format is used when other formats aren't specified.
*tooltip-format-failed*: ++
typeof: string ++
This format is used when the modem cannot start.
*tooltip-format-locked*: ++
typeof: string ++
This format is used when the SIM on the modem is locked.
*tooltip-format-disabled*: ++
typeof: string ++
This format is used when the modem is disabled.
*tooltip-format-enabled*: ++
typeof: string ++
This format is used when the modem is enabled, but isn't registered to any carrier network.
*tooltip-format-searching*: ++
typeof: string ++
This format is used when the modem is looking for a carrier network to register to.
*tooltip-format-registered*: ++
typeof: string ++
This format is used when the modem is registered to a network, but no data connection is active.
*tooltip-format-connected*: ++
typeof: string ++
This format is used when the modem is registered to a network, and there is an active data connection.
*interval*: ++
typeof: integer ++
default: 5 ++
The interval in which the WWAN information gets polled (e.g. carrier name).
*imei*: ++
typeof: string ++
Select only the modem with the corresponding imei.
*path*: ++
typeof: string ++
Select only the modem with the corresponding hardware path.
*hide-disconnected*: ++
typeof: bool ++
default: true ++
Defines if the module should be hidden while the modem does not have an active data connection.
# FORMAT REPLACEMENTS
*{state}*: Modem state.
*{current_modes}*: List of all the currently active connection modes.
*{preferred_mode}*: The preferred connection mode in use.
*{signal_quality}*: Signal quality (0-100).
*{operator_name}*: Name of the network operator.
*{icon}*: Icon selected from *format-icons* according to the signal quality.
*{power_state}*: Modem power state (On/Off/Low/Unknown).
*{imei}*: Modem equipment identifier (IMEI).
# EXAMPLES
```
"wwan": {
"format": "{state}",
"format-disabled": "", // an empty format will hide the module
"format-locked": "SIM Locked",
"format-connected": "{operator_name} {preferred_mode} | {signal_quality}%"
"tooltip-format": "{preferred_mode}",
"tooltip-format-connected": "{current_modes}",
"hide-disconnected": false
}
```
# STYLE
- *#wwan*
- *#wwan.failed* Applied when the modem cannot start.
- *#wwan.locked* Applied when the SIM on the modem is locked.
- *#wwan.disabled* Applied when the modem is disabled.
- *#wwan.enabled* Applied when the modem is enabled, but isn't registered to any carrier network.
- *#wwan.searching* Applied when the modem is looking for a carrier network to register to.
- *#wwan.registered* Applied when the modem is registered to a network, but no data connection is active.
- *#wwan.connected* Applied when the modem is registered to a network, and there is an active data connection.
+61 -2
View File
@@ -19,7 +19,7 @@ Valid locations for this file are:
A good starting point is the default configuration found at https://github.com/Alexays/Waybar/blob/master/resources/config.jsonc
Also, a minimal example configuration can be found at the bottom of this man page.
The visual display elements for waybar use a CSS stylesheet, see *waybar-styles(5)* for details.
The visual display elements for waybar use a CSS stylesheet. Waybar supports *style.css* and the appearance-specific *style-light.css* and *style-dark.css* files; see *waybar-styles(5)* for details.
# BAR CONFIGURATION
@@ -50,6 +50,10 @@ The visual display elements for waybar use a CSS stylesheet, see *waybar-styles(
Output specification follows sway's and can either be the output port such as "HDMI-A-1" or a string consisting of the make, model, and serial such as "Some Company ABC123 0x00000000". See *sway-output(5)* for details.
In an array, star '*\**' can be used at the end to accept all outputs, in case all previous entries are exclusions.
*output-dimensions* ++
typeof: string|array ++
If *output* is not specified, allows selecting outputs by dimensions. Format "(width/height) (</>) (value)", e.g. "width > 1080". Multiple conditions can be chained.
*position* ++
typeof: string ++
default: top ++
@@ -168,6 +172,7 @@ The visual display elements for waybar use a CSS stylesheet, see *waybar-styles(
# MODULE FORMAT
You can use PangoMarkupFormat (See https://developer.gnome.org/pango/stable/PangoMarkupFormat.html#PangoMarkupFormat).
Tooltip appearance is generally controlled globally via CSS and cannot be truly scoped per module. Some modules (such as the clock) provide limited workarounds for customization.
e.g.
@@ -355,9 +360,19 @@ A group may hide all but one element, showing them only on mouse hover. In order
*children-class*: ++
typeof: string ++
default: "hidden" ++
default: "drawer-child" ++
Defines the CSS class to be applied to the hidden elements.
*always-visible-class*: ++
typeof: string ++
default: "" ++
Defines the CSS class that marks a child module as always visible. The module carrying this class remains shown while the drawer is collapsed and drives the drawer's visibility management. When empty, the leader (first) module is used.
*reveal-delay*: ++
typeof: integer ++
default: 0 ++
Delay in milliseconds to wait after the mouse enters the group before revealing the drawer. When 0, the drawer is revealed immediately.
*click-to-reveal*: ++
typeof: bool ++
default: false ++
@@ -378,6 +393,18 @@ A group may hide all but one element, showing them only on mouse hover. In order
typeof: integer ++
If set, when waybar recives SIGRTMIN+N (where N is this value) it will toggle the visibility of the drawer.
*empty-if-drawer-empty*: ++
typeof: bool ++
default: false ++
Defines whether the group should be assigned the "empty" CSS class when all modules inside the drawer are hidden or missing. If false, the group will not receive the "empty" class as long as the leader module remains visible. This allows users to dynamically style or hide the entire group using CSS when its drawer contents are unavailable.
*reveal-by-default*: ++
typeof: bool ++
default: false ++
Whether the child should be revealed when Waybar starts up. This has to be used with click-to-reveal to take effect.
Group drawers are also given the `.expanded` CSS class when they are expanded.
```
"group/power": {
"orientation": "inherit",
@@ -394,6 +421,37 @@ A group may hide all but one element, showing them only on mouse hover. In order
]
},
```
To hide the power group if it is empty, apply to #power and all its children:
```
#power.empty,
#power.empty * {
min-width: 0px;
min-height: 0px;
padding: 0px;
margin: 0px;
border: none;
font-size: 0px;
opacity: 0;
}
```
## Select outputs by dimensions
```
{
"layer": "top",
"output-dimensions": "width > 1080",
...
}
```
```
{
"layer": "top",
"output-dimensions": ["width < 3840", "height < 2160"],
...
}
```
# SUPPORTED MODULES
@@ -420,6 +478,7 @@ A group may hide all but one element, showing them only on mouse hover. In order
- *waybar-inhibitor(5)*
- *waybar-jack(5)*
- *waybar-keyboard-state(5)*
- *waybar-load(5)*
- *waybar-memory(5)*
- *waybar-mpd(5)*
- *waybar-mpris(5)*