395 lines
14 KiB
JSON
395 lines
14 KiB
JSON
// --// 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": "<span>{calendar}</span>",
|
|
"calendar": {
|
|
"mode": "month",
|
|
"mode-mon-col": 3,
|
|
"on-scroll": 1,
|
|
"on-click-right": "mode",
|
|
"format": {
|
|
"months": "<span color='#ffead3'><b>{}</b></span>",
|
|
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
|
|
"today": "<span color='#ff6699'><b>{}</b></span>"
|
|
}
|
|
},
|
|
"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} <i>{dynamic}</i>",
|
|
"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": "<span size='150%'> </span>",
|
|
"rotate": 0,
|
|
"format-ethernet": "<span size='150%'> </span>",
|
|
"tooltip-format": "Network: <big><b>{essid}</b></big>\nSignal strength: <b>{signaldBm}dBm ({signalStrength}%)</b>\nFrequency: <b>{frequency}MHz</b>\nInterface: <b>{ifname}</b>\nIP: <b>{ipaddr}/{cidr}</b>\nGateway: <b>{gwaddr}</b>\nNetmask: <b>{netmask}</b>",
|
|
"format-linked": " {ifname} (No IP)",
|
|
"format-disconnected": "<span size='150%'> </span>",
|
|
"tooltip-format-disconnected": "Disconnected",
|
|
"format-alt": "<span foreground='#99ffdd'> {bandwidthDownBytes}</span> <span foreground='#ffcc66'> {bandwidthUpBytes}</span>",
|
|
"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
|
|
}
|
|
}
|
|
]
|
|
|