waybar-hyprland-workspaces(5)
π waybar-hyprland-workspaces(5) β the waybar hyprland workspaces module, bestie edition π
okay so this is the manual page for waybar-hyprland-workspaces, from the File Formats Manual, and it's literally the whole guide to making your workspaces look cute on Hyprland. grab a strawberry π and let's go.
πΈ NAME πΈ
waybar β hyprland workspaces module. that's it, that's the name, we move.
β¨ DESCRIPTION β¨
The workspaces module displays the currently used workspaces in hyprland compositor. that's the whole vibe: your workspaces, on your bar, looking gorgeous. π
π CONFIGURATION π
You reach this module by addressing it as hyprland/workspaces in your config. no cap.
format- typeof:
string - default:
{id} - The format, how information should be displayed. this is the main character of your setup fr.
- typeof:
format-icons- typeof:
array - Based on the workspace ID and state, the corresponding icon gets selected. See icons. (yes, there's a whole ICONS section below, patience bestie π )
- typeof:
window-rewrite- typeof:
object - Regex rules to map window class to an icon or preferred method of representation for a workspace's window.
- Keys are the rules, while the values are the methods of representation. Values may use the placeholders
{class}and{title}to use the window's original class and/or title respectively. Rules may specifyclass<...>,title<...>, or both in order to fine-tune the matching. You may assign an empty value to a rule to have it ignored from generating any representation in workspaces. - This setting is ignored if
workspace-taskbar.enableis set totrue. (so if you turned on the taskbar, this one's just sitting there like π)
- Keys are the rules, while the values are the methods of representation. Values may use the placeholders
- typeof:
window-rewrite-default- typeof:
string - default:
"?" - The default method of representation for a workspace's window. This will be used for windows whose classes do not match any of the rules in
window-rewrite. - This setting is ignored if
workspace-taskbar.enableis set totrue.
- typeof:
format-window-separator- typeof:
string - default:
" " - The separator to be used between windows in a workspace.
- This setting is ignored if
workspace-taskbar.enableis set totrue.
- typeof:
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. iconic, honestly. πΌοΈ
enable- typeof:
bool - default:
false - Enables the workspace taskbar mode.
- typeof:
update-active-window- typeof:
bool - default:
false - If
true, the active/focused window will have an 'active' class. - Could cause higher CPU usage due to more frequent redraws. β οΈ (your fans will be screaming, just so you know)
- typeof:
reverse-direction- typeof:
bool - default:
false - If
true, the taskbar windows will be added in reverse order (right to left if orientation is horizontal, bottom to top if vertical).
- typeof:
active-window-position- typeof:
"none" | "first" | "last" - default:
"none" - If set to
"first", the active window will be moved at the beginning of the taskbar. If set to"last", it will be moved at the end. It will only work ifupdate-active-windowis set totrue. (noupdate-active-window, no reordering, that's the deal π€)
- typeof:
format- typeof:
string - default:
{icon} - Format to use for each window in the workspace taskbar.
- Available placeholders are
{icon}and{title}.
- typeof:
icon-size- typeof:
int - default:
16 - Size of the icons in the workspace taskbar.
- typeof:
icon-theme- typeof:
string | array - default:
[] - Icon theme to use for the workspace taskbar. If an array is provided, the first theme that is found for a given icon will be used. If no theme is found (or the array is empty), the default icon theme is used.
- typeof:
orientation- typeof:
"horizontal" | "vertical" - default:
horizontal - Direction in which the workspace taskbar is displayed.
- typeof:
ignore-list- typeof:
array - default:
[] - Regex patterns to match against window class or window title. If a window's class OR title matches any of the patterns, it will not be shown. (bye bye π not on my bar)
- typeof:
on-click-window- typeof:
string - default:
"" - Command to run when a window is clicked. Available placeholders are:
{address}Hyprland address of the clicked window.{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. π«Ά
- typeof:
- typeof:
show-special- typeof:
bool - default:
false - If set to
true, special workspaces will be shown.
- typeof:
special-visible-only- typeof:
bool - default:
false - If this and
show-specialare totrue, special workspaces will be shown only if visible.
- typeof:
persistent-only- typeof:
bool - default:
false - If set to
true, only persistent workspaces will be shown on bar.
- typeof:
all-outputs- typeof:
bool - default:
false - If set to
falseworkspaces group will be shown only in assigned output. Otherwise, all workspace groups are shown.
- typeof:
active-only- typeof:
bool - default:
false - If set to
true, only the active workspace will be shown. minimalism era β¨
- typeof:
move-to-monitor- typeof:
bool - default:
false - If set to
true, open the workspace on the current monitor when clicking on a workspace button.- Otherwise, the workspace will open on the monitor where it was previously assigned. Analog to using
focusworkspaceoncurrentmonitordispatcher instead ofworkspacein Hyprland.
- Otherwise, the workspace will open on the monitor where it was previously assigned. Analog to using
- typeof:
ignore-workspaces- typeof:
array - default:
[] - Regexes to match against workspaces names. If there's a match, the workspace will not be shown. This takes precedence over
show-special,all-outputs, andactive-only. (it wins, periodt π )
- typeof:
sort-by- typeof:
string - default:
"default" - If set to
number, workspaces will sort by number.- If set to
name, workspaces will sort by name. If set toid, workspaces will sort by id. If set tospecial-centered, workspaces will sort by default with special workspaces in the center. If none of those, workspaces will sort with default behavior.
- If set to
- typeof:
expand- typeof:
bool - default:
false - Enables this module to consume all left over space dynamically. greedy little module, we love that for it π
- typeof:
π¦ FORMAT REPLACEMENTS π¦
{id}: id of workspace assigned by compositor{name}: workspace name assigned by compositor{icon}: Icon, as defined informat-icons.
β ICONS β
Additional to workspace name matching, the following format-icons can be set. so like, on top of matching workspace names, you also get these states:
default: Will be shown, when no string match is found and none of the below conditions have defined icons.active: Will be shown, when workspace is activespecial: Will be shown on non-active special workspacesempty: Will be shown on non-active, non-special empty persistent workspacesvisible: 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
π EXAMPLES π
okay these are the good part, look at them closely bestie π
"hyprland/workspaces": {
"format": "{name}: {icon}",
"format-icons": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"active": "",
"default": ""
},
"persistent-workspaces": {
"*": 5, // 5 workspaces by default on every monitor
"HDMI-A-1": 3 // but only three on HDMI-A-1
}
}
"hyprland/workspaces": {
"format": "{name}: {icon}",
"format-icons": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"active": "",
"default": ""
},
"persistent-workspaces": {
"*": [ 2,3,4,5 ], // 2-5 on every monitor
"HDMI-A-1": [ 1 ] // but only workspace 1 on HDMI-A-1
}
}
"hyprland/workspaces": {
"format": "{name}n{windows}",
"format-window-separator": "n",
"window-rewrite-default": "",
"window-rewrite": {
"title<.*youtube.*>": "", // Windows whose titles contain "youtube"
"class<firefox>": "", // Windows whose classes are "firefox"
"class<firefox> title<.*github.*>": "", // Windows whose class is "firefox" and title contains "github". Note that "class" always comes first.
"foot": "", // Windows that contain "foot" in either class or title. For optimization reasons, it will only match against a title if at least one other window explicitly matches against a title.
"code": "σ°¨",
"title<.* - (.*) - VSCodium>": "codium $1" // captures part of the window title and formats it into output
}
}
"hyprland/workspaces": {
// Formatting omitted for brevity
"ignore-workspaces": [
"(special:)?chrome-sharing-indicator"
]
}
π Style π
these are the CSS selectors you can style, go off π
#workspaces#workspaces button#workspaces button.active#workspaces button.empty#workspaces button.visible#workspaces button.persistent#workspaces button.special#workspaces button.urgent#workspaces button.hosting-monitor(gets applied ifworkspace-monitor == waybar-monitor)#workspaces .workspace-label#workspaces .taskbar-window(each window in the taskbar, only if 'workspace-taskbar.enable' istrue)#workspaces .taskbar-window.active(applied to the focused window, only if 'workspace-taskbar.update-active-window' istrue)
aaaand that's the whole page bestie π«Ά this came from the waybar-hyprland-workspaces(5) page, dated 2026-02-08, and it's part of the waybar docs. now go make your bar gorgeous, i'm literally obsessed with you πβ¨π
π¦ where this page comes from
- ubuntu resolute: waybar 0.15.0-1 Β· MIT
- ubuntu stonking: waybar 0.15.0-1 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms