A full man<->code consistency audit surfaced options, format placeholders
and CSS classes that were implemented but undocumented, documented but not
implemented (some causing fmt crashes when copied from examples), and
defaults that disagreed with the code. This aligns the docs with the code
and fixes a few genuine code gaps.
Docs:
- Add the missing waybar-user(5) man page (and register it in meson.build)
- Document previously-undocumented options/placeholders/CSS across many
modules (custom image-path/image-name/icon-size, graph_type/width/
datapoints; battery smooth-power; wireplumber format-source/only-physical;
mpris {position}/prefer-album-artist; network {signalStrengthApp}/compact
bandwidth; pulseaudio {source_volume}/{source_desc}; upower {temperature}/
{model}/{native-path}; wwan {power_state}/{imei}; tray ignore-list; and
many CSS state classes: .sink-muted, .source-muted, .workspace-hover, etc.)
- Correct documented defaults to match the code (hyprland format {name},
gamemode {count}, cpu-graph interval 5, cava input_delay 4, niri taskbar
icon-size 16, disk/gps/wayfire formats, menu-actions object type, ...)
- Remove placeholders/options that do not apply (custom-graph {icon}/format/
format-icons/rotate) and fix crashing examples (wwan {mode}, gps
format-no-fix); note cava background/foreground/continuous_rendering are
cava-config-file options
Code:
- bluetooth: accept the documented `controller` key as a synonym of
`controller-alias` (the option was silently ignored)
- mango/workspaces: supply the documented `{name}` fmt arg (was missing ->
fmt::format threw)
- privacy: read `tooltip` as a bool (was guarded on isString(), so the
documented `tooltip: false` was silently ignored)
All man pages validated with scdoc 1.11.4. Not compiled locally (no gtkmm);
C++ build relies on CI.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
214 lines
5.3 KiB
Scdoc
214 lines
5.3 KiB
Scdoc
waybar-pulseaudio(5)
|
|
|
|
# NAME
|
|
|
|
waybar - pulseaudio module
|
|
|
|
# DESCRIPTION
|
|
|
|
The *pulseaudio* module displays the current volume reported by PulseAudio.
|
|
|
|
Additionally, you can control the volume by scrolling *up* or *down* while the cursor is over the module.
|
|
|
|
# CONFIGURATION
|
|
|
|
*format*: ++
|
|
typeof: string ++
|
|
default: {volume}% ++
|
|
The format, how information should be displayed. This format is used when other formats aren't specified.
|
|
|
|
*format-bluetooth*: ++
|
|
typeof: string ++
|
|
This format is used when using bluetooth speakers.
|
|
|
|
*format-muted*: ++
|
|
typeof: string ++
|
|
This format is used when the sound is muted.
|
|
|
|
*format-source*: ++
|
|
typeof: string ++
|
|
default: {volume}% ++
|
|
This format used for the source.
|
|
|
|
*format-source-muted*: ++
|
|
typeof: string ++
|
|
This format is used when the source is muted.
|
|
|
|
*format-icons*: ++
|
|
typeof: array ++
|
|
Based on the current port name and volume, the corresponding icon gets selected. The order is *low* to *high*. See *Icons*.
|
|
|
|
*rotate*: ++
|
|
typeof: integer ++
|
|
Positive value to rotate the text label (in 90 degree increments).
|
|
|
|
*states*: ++
|
|
typeof: object ++
|
|
A number of volume states which get activated on certain volume levels. 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.
|
|
|
|
*scroll-step*: ++
|
|
typeof: float ++
|
|
default: 1.0 ++
|
|
The speed at which to change the volume when scrolling.
|
|
|
|
*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. This replaces the default behaviour of volume control.
|
|
|
|
*on-scroll-down*: ++
|
|
typeof: string ++
|
|
Command to execute when scrolling down on the module. This replaces the default behaviour of volume control.
|
|
|
|
*smooth-scrolling-threshold*: ++
|
|
typeof: double ++
|
|
Threshold to be used when scrolling.
|
|
|
|
*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.
|
|
|
|
*tooltip*: ++
|
|
typeof: bool ++
|
|
default: true ++
|
|
Option to disable tooltip on hover.
|
|
|
|
*max-volume*: ++
|
|
typeof: integer ++
|
|
default: 100 ++
|
|
The maximum volume that can be set, in percentage.
|
|
|
|
*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.
|
|
|
|
*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.
|
|
|
|
*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.
|
|
|
|
*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*.
|
|
|
|
# ICONS:
|
|
|
|
The following strings for *format-icons* are supported.
|
|
|
|
- the device name
|
|
|
|
If they are found in the current PulseAudio port name, the corresponding icons will be selected.
|
|
|
|
- *default* (Shown, when no other port is found)
|
|
- *headphone*
|
|
- *speaker*
|
|
- *hdmi*
|
|
- *headset*
|
|
- *hands-free*
|
|
- *portable*
|
|
- *car*
|
|
- *hifi*
|
|
- *phone*
|
|
|
|
Additionally, suffixing a device name or port with *-muted* will cause the icon
|
|
to be selected when the corresponding audio device is muted. This applies to *default* as well.
|
|
|
|
# EXAMPLES
|
|
|
|
```
|
|
"pulseaudio": {
|
|
"format": "{volume}% {icon}",
|
|
"format-bluetooth": "{volume}% {icon}",
|
|
"format-muted": "",
|
|
"format-icons": {
|
|
"alsa_output.pci-0000_00_1f.3.analog-stereo": "",
|
|
"alsa_output.pci-0000_00_1f.3.analog-stereo-muted": "",
|
|
"headphone": "",
|
|
"hands-free": "",
|
|
"headset": "",
|
|
"phone": "",
|
|
"phone-muted": "",
|
|
"portable": "",
|
|
"car": "",
|
|
"default": ["", ""]
|
|
},
|
|
"scroll-step": 1,
|
|
"on-click": "pavucontrol"
|
|
}
|
|
```
|
|
|
|
# STYLE
|
|
|
|
- *#pulseaudio*
|
|
- *#pulseaudio.bluetooth*
|
|
- *#pulseaudio.muted*
|
|
- *#pulseaudio.sink-muted*
|
|
- *#pulseaudio.source-muted*
|