Merge remote-tracking branch 'origin/master' into pr-4941

# Conflicts:
#	include/group.hpp
#	man/waybar.5.scd.in
This commit is contained in:
Alex
2026-07-04 00:36:57 +02:00
137 changed files with 5661 additions and 414 deletions
+14
View File
@@ -178,6 +178,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 +223,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*
+13 -5
View File
@@ -138,6 +138,11 @@ 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}'.
|[ *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*
@@ -180,6 +185,8 @@ 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
|[ *exec <cmd>*
:[ Execute the specified command
# FORMAT REPLACEMENTS
@@ -207,11 +214,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>",
+80
View File
@@ -0,0 +1,80 @@
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 ++
default: 10 ++
The interval in which the information gets polled.
*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*
+24
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 ++
@@ -112,6 +124,8 @@ The *cpu* module displays the current CPU utilization.
*{icon*{n}*}*: Icon for CPU core n usage. Use like {icon0}.
*{icon0}{icon1}{icon2}{icon3}*: All per-core icons concatenated. Equivalent to {icon0}{icon1}...{icon*N*} but adapts to the number of cores automatically.
# EXAMPLES
Basic configuration:
@@ -134,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*
+189
View File
@@ -0,0 +1,189 @@
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 or float ++
The restart interval (in seconds). ++
Minimum value is 0.001 (1ms). Values smaller than 1ms will be set to 1ms. ++
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.
*format*: ++
typeof: string ++
default: {text} ++
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*.
*rotate*: ++
typeof: integer ++
Positive value to rotate the text label (in 90 degree increments).
*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*. ++
Uses the same format replacements as *format*.
*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
*{text}*: Output of the script.
*{percentage}* Percentage which can be set via a json return type.
*{icon}*: An icon from 'format-icons' according to percentage.
# EXAMPLES
## 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*
+36 -9
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 ++
@@ -25,7 +20,7 @@ Addressed by *disk*
*format*: ++
typeof: string ++
default: "{percentage_used}%" ++
The format, how information should be displayed.
The format, how information for each disk should be displayed.
*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.
@@ -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.
@@ -143,10 +158,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
+7 -1
View File
@@ -21,6 +21,11 @@ Addressed by *dwl/tags*
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 +51,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
+14
View File
@@ -17,6 +17,16 @@ Addressed by *dwl/window*
default: {title} ++
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 +119,10 @@ If no expression matches, the format output is left unchanged.
Invalid expressions (e.g., mismatched parentheses) are skipped.
# STYLE
- *#window.active*
# EXAMPLES
```
+8
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.
@@ -52,6 +56,10 @@ Addressed by *hyprland/language*
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 ++
+9
View File
@@ -25,6 +25,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 ++
default: {title} ++
The format of the tooltip shown on hover. Supports the same replacements as *format*. Requires *tooltip* to be enabled.
*icon*: ++
typeof: bool ++
default: false ++
+28
View File
@@ -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.
@@ -98,6 +111,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 +131,11 @@ 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.
*all-outputs*: ++
typeof: bool ++
default: false ++
@@ -123,6 +146,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 ++
+42 -2
View File
@@ -76,6 +76,17 @@ screensaver, also known as "presentation mode".
typeof: double ++
The number of minutes the inhibition should last.
*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 ++
@@ -115,17 +126,46 @@ screensaver, also known as "presentation mode".
# EXAMPLES
Basic usage with timeout:
```
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "",
"deactivated": ""
"activated": "",
"deactivated": ""
},
"timeout": 30.5
}
```
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
}
```
# STYLE
- *#idle_inhibitor*
+35 -2
View File
@@ -26,7 +26,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 +71,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 +94,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*
+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"). This is also the default when no format is specified.
*{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)").
*{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: {symbol} ++
The default format, how the layout symbol should be displayed. *{symbol}* is 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.
* *#mango-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
```
#mango-layout {
color: #ffffff;
padding: 0 5px;
}
/* Specific color for the "S" layout */
#mango-layout.S {
color: #a6e3a1;
}
/* Specific color for the "M" layout */
#mango-layout.M {
color: #f38ba8;
}
```
+70
View File
@@ -0,0 +1,70 @@
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*
- *#window.empty* applied when no window is focused (module hidden by default)
- *#window.solo* applied when only one window is present on the active workspace
- *#window.<app-id>* applied when a single window with the given app ID is on the workspace
The classes *.empty*, *.solo*, and the appID class are set on the modules event box.
+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
@@ -29,6 +29,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 ++
+4
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.
+4
View File
@@ -48,6 +48,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
+34
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,11 @@ Addressed by *niri/workspaces*
default: false ++
If set to true, only the active or focused workspace will be shown.
*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.
@@ -63,6 +95,8 @@ as defined by niri.
*{output}*: Output where the workspace is located.
*{total}*: The total number of workspaces.
# ICONS
Additional to workspace name matching, the following *format-icons* can be set.
+4 -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
@@ -51,7 +51,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 +67,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": "",
+19 -2
View File
@@ -43,18 +43,35 @@ The volume can be controlled by dragging the slider across the bar or clicking o
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.
# EXAMPLES
```
"modules-right": [
"pulseaudio/slider",
"pulseaudio/slider#out",
"pulseaudio/slider#in",
],
"pulseaudio/slider": {
"pulseaudio/slider#out": {
"min": 0,
"max": 100,
"orientation": "horizontal",
"zero-on-mute": false,
"unmute-on-volume-change": false
},
"pulseaudio/slider#in": {
"min": 0,
"max": 100,
"orientation": "horizontal",
"target": "source"
}
```
+9
View File
@@ -117,6 +117,10 @@ Additionally, you can control the volume by scrolling *up* or *down* while the c
typeof: array ++
Sinks in this list will not be shown as active sink by Waybar. Entries should be the sink's description field.
*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 ++
Action that popups the menu.
@@ -135,6 +139,11 @@ 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.
+13 -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 ++
@@ -50,10 +58,14 @@ Addressed by *river/tags*
- *#tags button.occupied*
- *#tags button.focused*
- *#tags button.urgent*
- *#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 *output* style is applied when the river output (e.g. monitor) of the current bar is focused.
# SEE ALSO
waybar(5), river(1)
+9 -11
View File
@@ -57,18 +57,17 @@ 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:
Example of disabling the cursor on a custom module:
```
"custom/my-custom-module": {
@@ -77,13 +76,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",
}
```
+25
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 ++
@@ -110,6 +120,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 +163,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 +204,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 +221,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}*
+6 -1
View File
@@ -35,7 +35,12 @@ Addressed by *temperature*
*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 ++
+10
View File
@@ -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 ++
+23 -2
View File
@@ -63,6 +63,11 @@ 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'.
*on-click*: ++
typeof: string ++
Command to execute when clicked on the module.
@@ -107,7 +112,13 @@ 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.
*{node_name}*: The node's nickname as reported by WirePlumber (*node.nick* property)
@@ -123,7 +134,7 @@ The *wireplumber* module displays the current volume reported by WirePlumber.
}
```
## Separate Sink and Source Widgets
## Separate Sink and Source Widgets
```
"wireplumber#sink": {
@@ -143,6 +154,16 @@ 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*
+49
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,21 @@ 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'.
*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 ++
@@ -161,3 +178,35 @@ Invalid expressions (e.g., mismatched parentheses) are skipped.
- *#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);
}
```
+7
View File
@@ -380,6 +380,13 @@ A group may hide all but one element, showing them only on mouse hover. In order
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",