Hyprland Wiki
Contribute to the Wiki!Toggle Dark/Light/Auto modeToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeBack to homepage

Status Bars

Table of contents


Waybar is a GTK status bar made specifically for wlroots compositors and supports Hyprland by default. To use it, it’s recommended to use your distro’s package.

If you want to use the workspaces module, first, copy the configuration files from /etc/xdg/waybar/ into ~/.config/waybar/. Then, in ~/.config/waybar/config replace all the references to sway/workspaces with hyprland/workspaces.

For more info regarding configuration, see The Waybar Wiki.

How to launch

After getting everything set up, you might want to check if Waybar is configured to your liking. To launch it, simply type waybar into your terminal. If you would like waybar to launch alongside hyprland, you can do this by adding a line to your hyprland configuration that reads exec-once=waybar

Waybar popups render behind the windows

In ~/.config/waybar/config, make sure that you have the layer configuration set to top and not bottom.

Active workspace doesn’t show up

Replace #workspaces button.focused with #workspaces button.active in ~/.config/waybar/style.css.

Scrolling through workspaces

Since there a lot of configuration options from sway/workspaces are missing, you should deduce some of them by yourself. In the case of scrolling, it should look like this:

"hyprland/workspaces": {
     "format": "{icon}",
     "on-scroll-up": "hyprctl dispatch workspace e+1",
     "on-scroll-down": "hyprctl dispatch workspace e-1"

Clicking on a workspace icon does not work!

On the hyprland/workspaces module, add "on-click": "activate". That’s the purpose of the sed command used before building Waybar: the default way to select a workspace by clicking uses the swaymsg’s way, and thus it is required to edit this function to make it work with hyprctl.

Window title is missing

Follow the above instructions to make sure everything is working. The prefix for the window module that provides the title is hyprland not wlr. In your waybar config, insert this module:

"modules-center": ["hyprland/window"],

If you are using a multiple monitors, you may want to also insert this module configuration:

"hyprland/window": {
    "max-length": 200,
    "separate-outputs": true


In order to use Eww, you first have to install it, either using your distro’s package manager, by searching eww-wayland, or by manually compiling. In the latter case, you can follow the instructions.


After you’ve successfully installed Eww, you can move onto configuring it. There are a few examples listed in the Readme. It’s also highly recommended to read through the Configuration options.

Read the Wayland section carefully before asking why your bar doesn’t work.

Here are some example widgets that might be useful for Hyprland:

Workspaces widget

This widget displays a list of workspaces 1-10. Each workspace can be clicked on to jump to it, and scrolling over the widget cycles through them. It supports different styles for the current workspace, occupied workspaces, and empty workspaces. It requires bash, awk, stdbuf, grep, seq, socat, jq, and Python 3.


(deflisten workspaces :initial "[]" "bash ~/.config/eww/scripts/get-workspaces")
(deflisten current_workspace :initial "1" "bash ~/.config/eww/scripts/get-active-workspace")
(defwidget workspaces []
  (eventbox :onscroll "bash ~/.config/eww/scripts/change-active-workspace {} ${current_workspace}" :class "workspaces-widget"
    (box :space-evenly true
      (label :text "${workspaces}${current_workspace}" :visible false)
      (for workspace in workspaces
        (eventbox :onclick "hyprctl dispatch workspace ${workspace.id}"
          (box :class "workspace-entry ${workspace.id == current_workspace ? "current" : ""} ${workspace.windows > 0 ? "occupied" : "empty"}"
            (label :text "${workspace.id}")


#!/usr/bin/env bash
function clamp {
	python -c "print(max($min, min($val, $max)))"

if test "$direction" = "down"
	target=$(clamp 1 10 $(($current+1)))
	echo "jumping to $target"
	hyprctl dispatch workspace $target
elif test "$direction" = "up"
	target=$(clamp 1 10 $(($current-1)))
	echo "jumping to $target"
	hyprctl dispatch workspace $target


#!/usr/bin/env bash

hyprctl monitors -j | jq '.[] | select(.focused) | .activeWorkspace.id'

socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - |
  stdbuf -o0 awk -F '>>|,' -e '/^workspace>>/ {print $2}' -e '/^focusedmon>>/ {print $3}'


#!/usr/bin/env bash

spaces (){
	WORKSPACE_WINDOWS=$(hyprctl workspaces -j | jq 'map({key: .id | tostring, value: .windows}) | from_entries')
	seq 1 10 | jq --argjson windows "${WORKSPACE_WINDOWS}" --slurp -Mc 'map(tostring) | map({id: ., windows: ($windows[.]//0)})'

socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do
Active window title widget

This widget simply displays the title of the active window. It requires awk, stdbuf, socat, and jq.


(deflisten window :initial "..." "sh ~/.config/eww/scripts/get-window-title")
(defwidget window_w []
    (label :text "${window}"


hyprctl activewindow -j | jq --raw-output .title
socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | stdbuf -o0 awk -F '>>|,' '/^activewindow>>/{print $3}'


Like Waybar, Hybrid is a GTK status bar mainly focused for wlroots compositors.

You can install it from the AUR by the name hybrid-bar.


The configuration is done through JSON, more information is available here.

How to launch

After configuring HybridBar, you can launch it by typing hybrid-bar into your terminal to try it out. It is also possible to set it to launch at start, to do this you can add a line to your hyprland configuration that reads exec-once=hybrid-bar


To activate blur, set blurls=NAMESPACE in your hyprland configuration, where NAMESPACE is the gtk-layer-shell namespace of your HybridBar. The default namespace is gtk-layer-shell and can be changed in the HybridBar configuration at

     "hybrid" {
          "namespace": "namespace name"