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, alternative formats cycled on click, calendar menu
- Weather - OpenWeatherMap readout attached to the clock (
clock.show_weather+[weather]) - System Info - CPU, RAM, temperature, GPU, disk, network speeds; readouts auto-detected, also placeable as standalone CPU and Memory entries
- 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 updates applied right in the menu; on HyDE the clone itself is watched and updated alongside, branch selectable
- Clipboard - Clipboard history picker (cliphist by default)
- Privacy - Camera/microphone/screenshare indicators
- Keyboard Layout / Submap - Layout switching with custom labels, active submap
- App Launcher - Quick app launcher button
- Notifications - Notification center with selectable source: built-in popups, Hyprland, or the session daemon
- Screenshot - Screenshot and screen recording (grim/slurp/wf-recorder)
- Idle Inhibitor - One click toggle keeping the session awake
- Control Center - Quick settings panel: audio, network, bluetooth, power profile, power menu
- Settings - The bar's own settings window: module layout and appearance, written back to the config
- Themes / Wallpaper / HyDE Menu - Drive the HyDE desktop theme, cycle the wallpaper, open the HyDE menu tree
- 11 Built-in Themes - Catppuccin, Dracula, Nord, Gruvbox, Tokyo Night
- HyDE Integration - Follows the HyDE desktop theme by default (
follow_hyde), colours, font and radius included - Smooth Animations - Menu fade in/out, hover effects
- Multiple Styles - Islands, Solid, Gradient
- Opacity Control - Transparent backgrounds and menus
- Auto Scale - The bar magnifies itself for the screen it lands on (
auto_scale)
- Custom Modules - Extend with your own scripts
- Full Color Control - Customize every color
- Icon Overrides - Replace any built-in glyph via the
[icons]table - 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 hydebarnix 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
hover_duration_ms = 100
# 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"Without any appearance setting the bar follows the theme published by the
HyDE Project: colours, font and corner radius are read from the HyDE state
directories and the bar repaints on every theme switch. Set
follow_hyde = false under [appearance] to opt out.
- 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[control_center]
lock_cmd = "hyprlock &"
shutdown_cmd = "shutdown now"
suspend_cmd = "systemctl suspend"
reboot_cmd = "systemctl reboot"
logout_cmd = "loginctl kill-user $(whoami)"The section was previously named [settings]; that spelling is still accepted
as an alias.
Full configuration reference at docs/configuration.
Measured on a 4K output, release build (see docs/perf-baseline-2026-07.md):
- Fast Startup - ~53ms from launch to mapped surface
- Efficient - ~0.5% CPU when idle; a menu opening and settling costs the same
- Memory - ~127MB resident, dominated by the GPU rendering stack (wgpu over Vulkan)
- 100% Rust - Memory-safe, zero-cost abstractions
See PERFORMANCE.md for the full numbers and methodology.
git clone https://github.com/RAprogramm/hydebar.git
cd hydebar
cargo build --release
./target/release/hydebar-app./install.sh builds the release binary and installs it as hydebar, together
with the hydebar-theme-switch script. ./install.sh --hyde additionally
registers the bar as the HyDE session bar (see
docs/hyde-session.md).
Contributions are welcome! See CONTRIBUTING.md for detailed guidelines.
Quick links:
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 and submap
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
