// --// standalone two-bar cava rig — hand-maintained, NOT HyDE-generated (see README "Waybar") //-- // [ { // sourced from header module // "layer": "top", "position": "top", "height": 33, "exclusive": true, "passthrough": false, "gtk-layer-shell": true, "reload_style_on_change": true, // positions generated based on config.ctl // "modules-left": ["custom/l_end","custom/power","custom/r_end","hyprland/workspaces", "custom/sl_end","hyprland/window","custom/sr_end","custom/l_end","custom/wallchange","custom/cliphist","custom/r_end"], "modules-center": ["wlr/taskbar"], "modules-right": ["custom/l_end","backlight","pulseaudio","pulseaudio#microphone","mpris","custom/r_end","custom/l_end","memory","cpu","custom/cpuinfo","battery","custom/r_end","custom/l_end","network","tray","custom/r_end","custom/l_end","idle_inhibitor","clock","custom/r_end"], // sourced from modules based on config.ctl // "tray": { // exactly 22: Tela only has fixed-size monochrome icons in {16,22,24}/panel — any // other size makes GTK fall through to scalable/devices, whose icons are colored // circles (the blue nm-applet blob). An exact panel match keeps the tray flat/white. "icon-size": 22, "rotate": 0, "spacing": 5 }, // NOTE: keep in sync with modules/window.jsonc — this layout is launched standalone // (waybar -c), so the modules/ file is NOT read here; this inline copy is what renders. "hyprland/window": { "format": " {}", "rotate": 0, "separate-outputs": true, "max-length": 1000, "rewrite": { "(.*) — Kitty": " $1", "(.*)~": " $1", "(.*) — Mozilla Firefox": "󰈹 $1", "(.*)Mozilla Firefox": "󰈹 Firefox", "(.*) — LibreWolf": "󰈹 $1", "(.*)LibreWolf": "󰈹 LibreWolf", "(.*) — Chromium": " $1", "(.*)Chromium": " Chromium", "(.*) - VSCodium": "󰨞 $1", "(.*)VSCodium": "󰨞 VSCodium", "(.*)Code - OSS": "󰨞 $1", "(.*) - Visual Studio Code": "󰨞 $1", "(.*)Visual Studio Code": "󰨞 Code", "(.*) — Dolphin": "󰉋 $1", "(.*) - Obsidian(.*)": "󰠮 $1", "(.*)Ferdium": "󰭻 Ferdium", "(.*)FreeTube": " FreeTube", "(.*) - VLC media player": "󰕼 $1", "(.*)Steam": "󰓓 Steam", "(.*)Neovide": " Nvim", "(.*)Neovim": " Nvim", "(.*)Nvim": " Nvim", "(.*)Gajim": "󰭹 Gajim", "(.*)KeePassXC": " KeePassXC", "(.*)Betterbird": "󰇮 Betterbird", // --- apps in use on this rig (glyphs verified against JetBrainsMono NF v3) --- "nvim (.*)": " $1", "nvim": " Nvim", "(.*)PyRadio - Playing: (.*)": "󰐹 $2", "(.*)PyRadio(.*)": "󰐹 PyRadio", "(.*) - mpv": "󰿎 $1", "(.*)mpv": "󰿎 mpv", "(.*) — Zen Browser": "󰖟 $1", "(.*)Zen Browser(.*)": "󰖟 Zen", "(.*) - Thorium": " $1", "(.*)Thorium(.*)": " Thorium", "(.*)Ghostty(.*)": "󰊠 Ghostty", "(.*)zellij(.*)": "󰆍 zellij", "(.*)btop(.*)": "󰨇 btop", "(.*)lazydocker(.*)": "󰡨 lazydocker", "(.*)Dolphin(.*)": "󰉋 Dolphin", "(.*)qBittorrent(.*)": "󰇚 qBittorrent", "(.*)GIMP(.*)": "󱇣 GIMP", "(.*)LibreOffice(.*)": "󰈙 LibreOffice", "(.*)KiCad(.*)": "󰘚 KiCad", "(.*)QGroundControl(.*)": "󰐴 QGroundControl", "(.*)Foxglove(.*)": "󰚩 Foxglove", "(.*)Bruno(.*)": "󱂛 Bruno", "(.*)RustDesk(.*)": "󰢹 RustDesk", "(.*)scrcpy(.*)": "󰄜 scrcpy", "(.*)Vial(.*)": "󰌌 Vial", "(.*)Volume Control(.*)": "󰕾 Volume Control", "(.*)Satty(.*)": "󰹑 Satty" } }, "hyprland/workspaces": { "window-rewrite-default":"", "all-outputs": true, "active-only": false, "on-click": "activate", "disable-scroll": false, "on-scroll-up": "hyprctl dispatch workspace -1", "on-scroll-down": "hyprctl dispatch workspace +1", "persistent-workspaces": {} }, "cpu": { "interval": 10, "format": "󰍛 {usage}%", "format-alt": "{icon0}{icon1}{icon2}{icon3}", "format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"] }, "custom/cpuinfo": { "exec": " cpuinfo.sh", "return-type": "json", "format": "{}", "rotate": 0, "interval": 5, // once every 5 seconds "tooltip": true, "max-length": 1000 }, "memory": { "states": { "c": 90, // critical "h": 60, // high "m": 30 // medium }, "interval": 30, "rotate": 0, "format": "󰾆 {used:0.1f}GB", "format-m": "󰾅 {used:0.1f}GB", "format-h": "󰓅 {used:0.1f}GB", "format-c": " {used:0.1f}GB", "format-alt": "󰾆 {percentage}%", "max-length": 10, "tooltip": true, "tooltip-format": "󰾆 {percentage}%\n {used:0.1f}GB/{total:0.1f}GB" }, "custom/power": { "format": "{}", "rotate": 0, "exec": "echo ; echo  logout", "on-click": "logoutlaunch.sh 2", "on-click-right": "logoutlaunch.sh 1", "interval" : 86400, // once every day "tooltip": true }, "wlr/taskbar": { "format": "{icon}", "rotate": 0, "icon-size": 19, "icon-theme": "Tela-circle-dracula", "spacing": 0, "tooltip-format": "{title}", "on-click": "activate", "on-click-middle": "close", "ignore-list": [ "Alacritty" ], "app_ids-mapping": { "firefoxdeveloperedition": "firefox-developer-edition" } }, "idle_inhibitor": { "format": "{icon}", "rotate": 0, "format-icons": { "activated": "󰅶", "deactivated": "󰛊" } }, "clock": { "format": "{:%H:%M}", "rotate": 0, "format-alt": "{:%R 󰃭 %d·%m·%y}", "tooltip-format": "{calendar}", "calendar": { "mode": "month", "mode-mon-col": 3, "on-scroll": 1, "on-click-right": "mode", "format": { "months": "{}", "weekdays": "{}", "today": "{}" } }, "actions": { "on-click-right": "mode", "on-click-forward": "tz_up", "on-click-backward": "tz_down", "on-scroll-up": "shift_up", "on-scroll-down": "shift_down" } }, "custom/cliphist": { "format": "{}", "rotate": 0, "exec": "echo ; echo 󰅇 clipboard history", "on-click": "sleep 0.1 && cliphist.sh c", "on-click-right": "sleep 0.1 && cliphist.sh d", "on-click-middle": "sleep 0.1 && cliphist.sh w", "interval" : 86400, // once every day "tooltip": true }, "custom/wallchange": { "format": "󰸉{}", "rotate": 0, "exec": "echo ; echo 󰆊 switch wallpaper", // HyDE 26.x removed swwwallpaper.sh/swwwallselect.sh; hyde-shell wallpaper is the // replacement (same calls as upstream's custom-wallchange module) "on-click": "hyde-shell wallpaper -n", "on-click-right": "hyde-shell wallpaper -p", "on-click-middle": "sleep 0.1 && hyde-shell wallpaper --select", "interval" : 86400, // once every day "tooltip": true }, "pulseaudio": { "format": "{icon} {volume}", "rotate": 0, "format-muted": "󰝟", "on-click": "pavucontrol -t 3", "on-click-right": "volumecontrol.sh -s ''", "on-click-middle": "volumecontrol.sh -o m", "on-scroll-up": "volumecontrol.sh -o i", "on-scroll-down": "volumecontrol.sh -o d", "tooltip-format": "{icon} {desc} // {volume}%", "scroll-step": 5, "format-icons": { "headphone": "", "hands-free": "", "headset": "", "phone": "", "portable": "", "car": "", "default": ["", "", ""] } }, "pulseaudio#microphone": { "format": "{format_source}", "rotate": 0, "format-source": "", "format-source-muted": "", "on-click": "pavucontrol -t 4", "on-click-middle": "volumecontrol.sh -i m", "on-scroll-up": "volumecontrol.sh -i i", "on-scroll-down": "volumecontrol.sh -i d", "tooltip-format": "{format_source} {source_desc} // {source_volume}%", "scroll-step": 5 }, "mpris": { "format": "{player_icon} {dynamic}", "rotate": 0, "format-paused": "{status_icon} {dynamic}", "player-icons": { "default": "▶", "mpv": "󰝚", "spotify": "󰓇", "firefox": "󰈹", "vlc": "󰕼" }, "status-icons": { "paused": "" }, "max-length": 1000, "interval": 1 }, "battery": { // Pinned to the laptop battery on purpose. Unpinned, waybar 0.15 scans every // /sys/class/power_supply node, and a flapping one (the DualShock's // ps-controller-battery-* appearing at login while opensdd/scc-daemon wake it) // makes refreshBatteries() throw off its worker thread → SIGABRT, killing the // whole bar (battery.cpp:142 uncaught; all 5 of 2026-08-17's coredumps). The pin // (battery.cpp:117) gates every read/watch of non-matching nodes. On wm no BAT0 // exists so the module stays hidden — same as before. On lw verify the name with // `ls /sys/class/power_supply` and correct here if it's BAT1 (its old default-config // log already ruled out BAT2); a wrong name only hides the module, never crashes. "bat": "BAT0", "states": { "good": 95, "warning": 30, "critical": 20 }, "format": "{icon} {capacity}%", "rotate": 0, "format-charging": " {capacity}%", "format-plugged": " {capacity}%", "format-alt": "{time} {icon}", "format-icons": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"] }, // added 2026-08-14 — the rig never had a network indicator ("ethernet icon not working"). // Same def as HyDE's ~/.local/share/waybar/modules/network.jsonc, inline like everything // else here; click toggles a bandwidth readout, tooltip carries the connection details. "network": { "tooltip": true, "format-wifi": " ", "rotate": 0, "format-ethernet": "󰈀 ", "tooltip-format": "Network: {essid}\nSignal strength: {signaldBm}dBm ({signalStrength}%)\nFrequency: {frequency}MHz\nInterface: {ifname}\nIP: {ipaddr}/{cidr}\nGateway: {gwaddr}\nNetmask: {netmask}", "format-linked": "󰈀 {ifname} (No IP)", "format-disconnected": "󰖪 ", "tooltip-format-disconnected": "Disconnected", "format-alt": " {bandwidthDownBytes}  {bandwidthUpBytes}", "on-click-right": "nm-connection-editor", // replaces the hidden nm-applet tray menu "interval": 2 }, "backlight": { "device": "intel_backlight", "rotate": 0, "format": "{icon} {percent}%", "format-icons": ["", "", "", "", "", "", "", "", ""], "on-scroll-up": "brightnessctl set 1%+", "on-scroll-down": "brightnessctl set 1%-", "min-length": 6 }, // modules for padding // "custom/l_end": { "format": " ", "interval" : "once", "tooltip": false }, "custom/r_end": { "format": " ", "interval" : "once", "tooltip": false }, "custom/sl_end": { "format": " ", "interval" : "once", "tooltip": false }, "custom/sr_end": { "format": " ", "interval" : "once", "tooltip": false }, "custom/rl_end": { "format": " ", "interval" : "once", "tooltip": false }, "custom/rr_end": { "format": " ", "interval" : "once", "tooltip": false }, "custom/padd": { "format": " ", "interval" : "once", "tooltip": false } }, // full-width cava visualizer layered behind the main bar // { "name": "cavabar", "layer": "bottom", "position": "top", "height": 36, "margin-top": -33, "exclusive": false, "passthrough": true, "modules-center": ["custom/cava"], "custom/cava": { "format": "{}", "exec": "bash $HOME/.config/waybar/cava-waybar.sh $(cat $HOME/.config/waybar/cava.width 2>/dev/null || echo 94)", // per-host cava.width (bars, even; ~screen_px / (font-size*0.6)). gui default 94; wm overrides to 218 "restart-interval": 1, "hide-empty-text": true } } ]