Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/matiasOliva64/dotfiles-Hyprland-fedora/llms.txt

Use this file to discover all available pages before exploring further.

Waybar sits at the top of the screen and serves as the primary status bar for the Hyprland desktop. It displays the active workspaces with per-app icons on the left, a clock in the center, and system metrics — network throughput, audio volume, CPU load, memory usage, and temperature — on the right. A power button in the far-right corner opens the wlogout power menu. The bar is styled with the Dracula color palette and uses JetBrainsMono Nerd Font for icons throughout.

Bar layout

The bar is 32 pixels tall and anchored to the top of the screen. Modules are split across three zones:
{
  "layer": "top",
  "position": "top",
  "height": 32,

  "modules-left": [
    "hyprland/workspaces",
    "hyprland/window"
  ],

  "modules-center": [
    "clock"
  ],

  "modules-right": [
    "network",
    "pulseaudio",
    "cpu",
    "memory",
    "custom/temp",
    "tray",
    "custom/power"
  ]
}
The active window title appears directly beside the workspace indicators on the left, truncated to 50 characters:
"hyprland/window": {
  "format": "{title}",
  "max-length": 50
}

Workspace icons

The workspaces module shows each workspace name followed by icons for every open window. Icons are resolved from the application’s Wayland class name using window-rewrite. Five persistent workspaces are always visible on every output.
"hyprland/workspaces": {
  "disable-scroll": false,
  "all-outputs": true,
  "format": "{name} {windows}",
  "format-icons": {
    "active": "",
    "default": "",
    "urgent": ""
  },
  "window-rewrite-default": "",
  "window-rewrite": {
    "class<xwaylandvideobridge>": "",
    "class<org.mozilla.firefox>": "",
    "class<discord>": "",
    "class<kitty>": "",
    "class<code>": "󰨞",
    "class<org.kde.dolphin>": "",
    "class<spotify>": "",
    "class<org.prismlauncher.PrismLauncher>": "󰍳",
    "class<com.obsproject.Studio>": "",
    "class<jetbrains-idea>": "",
    "class<org.kde.okular>": "",
    "class<org.kde.kcalc>": "󰪚",
    "class<steam>": "󰓓",
    "class<org.kde.plasma-systemmonitor>": "󰨇",
    "class<libreoffice-writer>": "",
    "class<libreoffice-impress>": "󱎐",
    "class<libreoffice-calc>": "󱎏",
    "class<CurseForge>": "󰍳",
    "class<Postman>": "󱂛",
    "class<org.kde.kate>": ""
  },
  "persistent-workspaces": {
    "*": 5
  }
}
Any application whose class is not in the map falls back to the window-rewrite-default icon (""). xwaylandvideobridge is mapped to an empty string so it produces no visible icon, keeping the workspace label clean during screen-sharing sessions.

System monitoring

CPU

"cpu": {
  "interval": 2,
  "format": " {usage}%",
  "on-click": "plasma-systemmonitor",
  "states": {
    "warning": 70,
    "critical": 90
  }
}
The CPU module refreshes every 2 seconds and launches KDE Plasma System Monitor on click. The CSS in style.css applies a slow yellow pulse animation when usage is above 70% and a fast red pulse when it is above 90%.

Memory

"memory": {
  "interval": 2,
  "format": " {used:0.1f}G",
  "on-click": "plasma-systemmonitor",
  "states": {
    "warning": 70,
    "critical": 90
  }
}
Memory usage is displayed in gigabytes with one decimal place. The same warning/critical thresholds and animations apply as for the CPU module.

Temperature (custom/temp)

"custom/temp": {
  "exec": "~/.config/waybar/scripts/temp.sh",
  "return-type": "json",
  "format": "{}",
  "interval": 10,
  "tooltip": true
}
The temperature module calls temp.sh every 10 seconds. The script reads raw values from the kernel’s hwmon subsystem, converts them from millidegrees to degrees Celsius, and emits a JSON object containing the display text, a tooltip with per-device detail, and a CSS class (normal, warning, or critical) based on the CPU temperature.
Hovering over the temperature widget shows a tooltip with three lines: CPU temperature (from hwmon2), GPU temperature (from the amdgpu hwmon node), and NVMe SSD temperature.

Network module

"network": {
  "interval": 2,
  "format-wifi": " {bandwidthUpBytes}  {bandwidthDownBytes} ",
  "format-ethernet": "󰈀 {bandwidthUpBytes}  {bandwidthDownBytes} ",
  "format-disconnected": "⚠ offline",
  "tooltip-format": "{ifname}: {ipaddr}/{cidr}",
  "format-linked": "{ifname} (No IP)",
  "max-length": 50
}
Live upload and download throughput are shown for both Wi-Fi and Ethernet, updating every 2 seconds. Hovering the module displays the interface name and assigned IP address with its CIDR prefix length. When no network is available, the label shows ⚠ offline.

Audio

"pulseaudio": {
  "format": "{icon} {volume}%",
  "format-muted": "󰝟 Muted",
  "format-icons": {
    "headphone": "󰋋",
    "hands-free": "󰋋",
    "headset": "󰋋",
    "phone": "",
    "portable": "",
    "car": "",
    "default": ["", "", ""]
  },
  "on-click": "pavucontrol"
}
The audio module selects its icon based on the active sink type. The three default icons cycle from low to high volume. Clicking the module opens PulseAudio Volume Control (pavucontrol), which is pre-configured as a floating centered window via Hyprland window rules.

Clock

"clock": {
  "timezone": "America/Argentina/Cordoba",
  "format": " {:%H:%M   %a, %b %d}",
  "tooltip-format": "<big>{:%B %Y}</big>\n\n<tt>{calendar}</tt>",
  "on-click": "xdg-open https://calendar.google.com",
  "calendar": {
    "mode": "month",
    "on-scroll": 1,
    "format": {
      "months": "<span color='#ffffff'><b>{}</b></span>",
      "weekdays": "<span color='#aaaaaa'>{}</span>",
      "today": "<span color='#ff5555'><b>{}</b></span>"
    }
  }
}
The clock is hard-set to the America/Argentina/Cordoba timezone and displays a 24-hour time alongside the abbreviated weekday, month, and day. Hovering shows a month calendar in a tooltip, with today’s date highlighted in Dracula red (#ff5555). Clicking opens Google Calendar in the default browser.

Custom scripts

Reads CPU temperature from /sys/class/hwmon/hwmon2/temp1_input, then dynamically locates the AMD GPU and NVMe sensor nodes by searching for their names under /sys/class/hwmon/hwmon*/name. All three raw millidegree values are divided by 1000 to produce integer Celsius values.The script outputs a single JSON line:
{
  "text": " 52°C",
  "tooltip": "󰻠 CPU: 52°C\n󰢮 GPU: 48°C\n󱛟 SSD: 35°C",
  "class": "normal"
}
The class field is normal below 65°C, warning from 65–79°C, and critical at 80°C or above. Waybar uses this class to apply the corresponding CSS animation defined in style.css.
An alternative workspace renderer that uses hyprctl clients and hyprctl activeworkspace to build a Pango-formatted string for workspaces 1–7. App class names are matched in a case statement and converted to Nerd Font icons — the same set used in the window-rewrite map above.The script avoids duplicate icons within a single workspace and uses socat to subscribe to the Hyprland IPC socket, re-rendering instantly on workspace, openwindow, closewindow, and movewindow events.
socat -u "UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" - \
  | while read -r line; do
      case "$line" in
        workspace* | focusedmon* | openwindow* | closewindow* | movewindow*)
          generate_output ;;
      esac
    done
This script is wired to the custom/workspaces module in the config but that module is not included in modules-left in the current layout — the native hyprland/workspaces module with window-rewrite is used instead. workspaces.sh is kept as an alternative.

Build docs developers (and LLMs) love