A fast, beautiful Wayland status bar for Hyprland
β‘ Blazing fast β’ π¨ Beautiful themes β’ π§ Easy configuration
- πͺ Workspaces - Hyprland workspace integration
- π Window Title - Active window information
- β° Clock - Customizable date/time format
- π System Info - CPU, RAM, temperature, disk, network speeds
- π Battery - Battery status and power profiles
- π‘ Network - WiFi with signal strength %, VPN, connection management
- π Audio - Volume control with inline sliders, sink/source selection
- π΅ Media Player - MPRIS integration with playback controls
- π‘ Brightness - Screen brightness control with inline slider
- π΅ Bluetooth - Device management with quick connect/disconnect, battery levels
- π Tray - System tray support
- π Updates - Package update notifications
- π Privacy - Camera/microphone/screenshare indicators
- β¨οΈ Keyboard Layout - Layout switching with custom labels
- π App Launcher - Quick app launcher button
- π Notifications - Notification center with D-Bus integration, DND mode
- πΈ Screenshot - Screenshot and screen recording (grim/slurp/wf-recorder)
- β Idle Inhibitor - One click toggle keeping the session awake
- βοΈ Settings Panel - Comprehensive settings menu
- π¨ 11 Built-in Themes - Catppuccin, Dracula, Nord, Gruvbox, Tokyo Night
- β¨ Smooth Animations - Menu fade in/out, hover effects
- ποΈ Multiple Styles - Islands, Solid, Gradient
- π Opacity Control - Transparent backgrounds and menus
- π¦ Custom Modules - Extend with your own scripts
- π¨ Full Color Control - Customize every color
- π Flexible Layout - Position modules left/center/right
- π Hot Reload - Config changes apply instantly
# Stable release
paru -S hydebar
# Development version
paru -S hydebar-gitsudo apt-get install hydebar# Stable
nix profile install github:RAprogramm/hydebar?ref=0.6.7
# Latest
nix profile install github:RAprogramm/hydebarSee Installation Guide for more options.
Create ~/.config/hydebar/config.toml:
# Use a preset theme
appearance = "catppuccin-mocha"
# Or customize colors
[appearance]
style = "Islands"
opacity = 0.95
background_color = "#1e1e2e"
primary_color = "#cba6f7"
text_color = "#cdd6f4"
# Configure animations
[appearance.animations]
enabled = true
menu_fade_duration_ms = 200
# Module layout
[modules]
left = ["Workspaces"]
center = ["WindowTitle"]
right = [["Privacy", "Notifications", "Screenshot"], "Clock", "Settings"]# Catppuccin variants
appearance = "catppuccin-mocha" # Dark purple
appearance = "catppuccin-macchiato" # Dark blue
appearance = "catppuccin-frappe" # Lighter purple
appearance = "catppuccin-latte" # Light theme
# Other popular themes
appearance = "dracula" # Dark purple/pink
appearance = "nord" # Cool blue
appearance = "gruvbox-dark" # Warm retro dark
appearance = "gruvbox-light" # Warm retro light
appearance = "tokyo-night" # Dark with neon accents
appearance = "tokyo-night-storm"
appearance = "tokyo-night-light"| Catppuccin Mocha | Dracula |
|---|---|
![]() |
![]() |
| Settings Panel | Power Menu |
|---|---|
![]() |
![]() |
| Network Menu | Bluetooth Menu |
|---|---|
![]() |
![]() |
- π Configuration Guide - All configuration options
- π¨ Theme Guide - Creating custom themes
- π§ Module Reference - Module-specific settings
- π Troubleshooting - Common issues
[[CustomModule]]
name = "CustomNotifications"
icon = ""
command = "swaync-client -t -sw"
command_right = "swaync-client -d -sw"
command_middle = "swaync-client -C"
listen_cmd = "swaync-client -swb"
icons.'dnd.*' = ""
alert = ".*notification"listen_cmd keeps a process alive and reads one JSON object per line. When the
data comes from a command that exits instead, use exec together with
interval (seconds) and, optionally, signal:
[[CustomModule]]
name = "cpuinfo"
command = ""
exec = "hyde-shell cpuinfo"
interval = 5
[[CustomModule]]
name = "updates"
command = "hyde-shell app system.update.sh up"
exec = "hyde-shell system.update"
interval = 86400
signal = 20exec runs once at startup and again on every interval tick. signal = 20
registers SIGRTMIN+20, so pkill -RTMIN+20 hydebar refreshes the module
immediately β the same contract Waybar scripts use.
A module can open a menu on a right press instead of running a command. Each entry carries a label, the command it runs and optionally a glyph:
[[CustomModule]]
name = "power"
icon = ""
command = "hyde-shell logoutlaunch 1"
[[CustomModule.menu]]
label = "Lock"
icon = "σ°"
command = "hyde-shell lockscreen.sh"
[[CustomModule.menu]]
label = "Shutdown"
icon = "σ°¦"
command = "systemctl poweroff"The menu is anchored under the module, and selecting an entry runs its command
and closes the menu. Declaring at least one entry takes precedence over
command_right, which is then ignored: one press cannot both open a menu and
run a command.
The module needs no configuration: it looks the machine over and draws load,
memory and whichever temperatures the hardware actually reports. A processor
temperature appears where a processor chip reports one, a graphics temperature
and a graphics load appear where a graphics device reports them, and a machine
that reports neither simply shows neither - no blank, no dash, no log line.
The reading of a graphics block built into the processor is tagged iGPU, so
it is never mistaken for a card.
Configuration only overrides that: indicators pins the readouts and their
order, hide drops one from the automatic selection, and [system.gpu] names
which device to watch on a machine with more than one.
[system]
# Optional: pin the readouts and their order.
indicators = ["Cpu", "Memory", "CpuTemperature", "GpuTemperature", {"disk" = "/"}]
# Optional: drop a readout the panel would otherwise draw.
hide = ["GpuUsage"]
[system.cpu]
warn_threshold = 60
alert_threshold = 80
[system.gpu]
# Optional: "amd", "intel", "nvidia", a driver name, "discrete" or "integrated".
device = "discrete"
warn_threshold = 70
alert_threshold = 85[settings]
lock_cmd = "hyprlock &"
shutdown_cmd = "shutdown now"
suspend_cmd = "systemctl suspend"
reboot_cmd = "systemctl reboot"
logout_cmd = "loginctl kill-user $(whoami)"Full configuration reference at docs/configuration.
- π Fast Startup - < 50ms first paint
- πΎ Low Memory - < 5MB idle
- β‘ Efficient - < 1% CPU when idle
- π¦ 100% Rust - Memory-safe, zero-cost abstractions
See PERFORMANCE.md for benchmarks.
git clone https://github.com/RAprogramm/hydebar.git
cd hydebar
cargo build --release
./target/release/hydebar-appContributions are welcome! See CONTRIBUTING.md for detailed guidelines.
Quick links:
- π¨ Submit new themes
- π Report bugs
- β¨ Request features
- π» Development workflow
- π Roadmap
If you experience transparency or rendering issues:
WGPU_BACKEND=gl hydebarThis forces OpenGL instead of Vulkan.
Starting hydebar while another copy is running does not add a second bar: the new process asks the running one to quit, waits for it to take its surfaces off the screen and then takes over. If the running bar does not go away within two seconds the newcomer prints an error and exits without drawing anything.
Ownership is recorded in $XDG_RUNTIME_DIR/hydebar/instance.lock, or in
/tmp/hydebar-$UID/instance.lock when the session exports no runtime
directory. The identity is the user, not the configuration file, because a bar
claims the surfaces of every requested output; --config-path therefore selects
which configuration the single instance reads rather than starting a second bar.
A lock file left behind by a crashed bar never blocks a restart.
Currently relies on hyprland-rs for:
- Active window information
- Workspace management
- Keyboard layout
Support for other compositors is planned but not yet implemented.
hydebar evolved from ideas initially explored in the ashell project. The current architecture benefits from those early prototypes.
Licensed under the MIT License. See LICENSE for details.
Made with β€οΈ for the Hyprland community
Website β’ Issues β’ Discussions






