The `workspaces` module displays the current active workspaces in your Wayland compositor.
Note: To use this module, your compositor has to implement the `ext-workspace-v1` Wayland protocol.
Waybar needs to be built with `-Dexperimental=true` for `ext/workspaces` to be available (see [#1766](https://github.com/Alexays/Waybar/issues/1766)).
# Config
| option | typeof | default | description |
|--------|:------:|:-------:|-------------|
| `format` | string | `{name}` | The format, how information should be displayed. |
| `format-icons` | array | | Based on the workspace name and state, the corresponding icon gets selected.
See [`Icons`](#module-workspaces-config-icons) |
| `sort-by-name` | bool | `true` | Should workspaces be sorted by name. |
| `sort-by-coordinates` | bool | `true` | Should workspaces be sorted by coordinates. Note that if both *sort-by-name* and *sort-by-coordinates* are true sort by name will be first. If both are false - sort by id will be performed. |
| `sort-by-number` | bool | `false` | If set to true, workspace names will be sorted numerically. Takes presedence over any other sort-by option. |
| `all-outputs` | bool | `false` | If set to false workspaces group will be shown only in assigned output. Otherwise all workspace groups are shown. |
| `active-only` | bool | `false` | If set to true only active or urgent workspaces will be shown. |
| `persistent-workspaces` | json (see below) | empty | Lists workspaces that should always be shown, even when non existant. Doesn't work when *all-outputs* is true or on `ext/workspaces` |
| `on-click` | Actions (see below) | | Can be used to activate or close workspaces when clicked on |
## Format replacements:
| string | replacement |
|--------|-------------|
| `{name}` | Name of workspace assigned by compositor. |
| `{icon}` | Icon, as defined in *format-icons*. |
#### Icons:
Additional to workspace name matching, the following `format-icons` can be set.
| port name | note |
| ------------ | ---- |
| `default` | Will be shown, when no string matches is found. |
| `urgent` | Will be shown, when workspace is flagged as urgent. |
| `active` | Will be shown, when workspace is active |
## Actions:
| string | action |
|--------|--------|
| `activate` | Switch to workspace. |
| `close` | Close the workspace. |
## Persistent workspaces:
Each entry of `persistent-workspace` names a workspace that should always be shown. Associated with that value is a list of outputs indicating *where* the workspace should be shown, an empty list denoting all outputs
```jsonc
"ext/workspaces": {
"persistent-workspaces": {
"3": [], // Always show a workspace with name '3', on all outputs if it does not exists
"4": ["eDP-1"], // Always show a workspace with name '4', on output 'eDP-1' if it does not exists
"5": ["eDP-1", "DP-2"] // Always show a workspace with name '5', on outputs 'eDP-1' and 'DP-2' if it does not exists
}
}
```
n.b.: This currently doesn't work if `all-outputs` is true.
## Example for [Sway](./Module:-Sway):
```jsonc
"sway/workspaces": {
"format": "{icon}",
"on-click": "activate",
"format-icons": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"urgent": "",
"active": "",
"default": ""
},
"sort-by-number": true
}
```
## Example for [Hyprland](https://github.com/Alexays/Waybar/wiki/Module:-Hyprland#workspaces):
```jsonc
"hyprland/workspaces": {
"format": "{icon}",
"on-click": "activate",
"format-icons": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"urgent": "",
"active": "",
"default": ""
},
"sort-by-number": true
}
```
- See the [full documentation here](https://github.com/Alexays/Waybar/wiki/Module:-Hyprland#workspaces).
## Example for Labwc:
```jsonc
"ext/workspaces": {
"format": "{name}",
"sort-by-number": true,
"on-click": "activate",
},
```
# Style
Note: Sway uses a different set of classes. Please see the [Sway](./Module:-Sway) module page.
- *#workspaces*
- *#workspaces button*
- *#workspaces button.active*
- *#workspaces button.visible*
- *#workspaces button.urgent*
- *#workspaces button.empty*
- *#workspaces button.persistent*
- *#workspaces button.hidden*