A modular, high-performance Waybar configuration designed with a Utilitarian Brutalism / Tactical Amber Monolith aesthetic. Features auto-detection of the running compositor and dynamic color sync via Matugen β your bar colors adapt to every wallpaper change automatically.
The bar automatically extracts accent colors from your current wallpaper. Here are examples with different wallpapers:
- Auto-Compositor Detection: A single entry-point script (
launch.sh) automatically detects if you are running Hyprland, Sway, Niri, or generic wlroots compositors and loads the appropriate workspace/window module configurations. - Dynamic Color Sync (Matugen): Colors are extracted from your current wallpaper using Matugen β accent, text, borders, backgrounds all shift to match the artwork's palette. Amber fallback when Matugen is not installed.
- Dynamic Distro Icon: Dynamically detects the running Linux distribution (Fedora, Arch Linux, Debian, Ubuntu, etc.) and displays its corresponding Nerd Font icon in the system menu.
- Segmented Tactical Panels: Built using sharp-grid layouts, dark base layers, and high-visibility amber highlights.
- System Metrics Drawer: Includes a collapsible grid toggle (
cpu,memory,disk) using Waybar's native group drawer. - Audio Visualizer (caway): A live spectrum analyzer (
scripts/caway) rendered from CAVA output, parked beside the clock. It auto-hides when no audio is playing and reappears the moment sound is detected (via real CAVA levels orplayerctlplayback status), with a debounce to prevent flicker. Click = play/pause, scroll = previous/next track. - Rofi Launcher: The system menu uses Rofi (
rofi -show drun) with a dynamic distro icon β no extra launcher fallback. - Tactical Taskbar:
wlr/taskbartruncates window titles to 15 characters (...) so long titles stay compact across the bar. - Clean Modular Config: Separated configuration blocks (
modules.jsonc, compositor configs, andstyle.css) for easy maintenance and customization.
This theme is designed to be distro-agnostic and compositor-flexible.
To display icons correctly and enable all interactive functions, ensure the required dependencies are installed for your distro:
yay -S waybar pavucontrol wireplumber network-manager-applet wlogout otf-jetbrains-mono-nerd rofi-wayland cava playerctl
# Optional β dynamic colors:
yay -S matugen-binsudo dnf install waybar pavucontrol wireplumber network-manager-applet wlogout jetbrains-mono-fonts-all rofi-wayland cava playerctl
# Optional β dynamic colors:
sudo dnf copr enable heus-sueh/packages && sudo dnf install matugensudo apt install waybar pavucontrol wireplumber network-manager-gnome wlogout fonts-jetbrains-mono rofi playerctl
# Optional β cava visualizer (PPA):
sudo add-apt-repository ppa:hsheth2/ppa && sudo apt update && sudo apt install cava
# Optional β dynamic colors (requires Rust):
cargo install matugensudo zypper install waybar pavucontrol wireplumber NetworkManager-connection-editor wlogout jetbrains-mono-fonts rofi-wayland cava playerctlsudo apk add waybar pavucontrol wireplumber network-manager-applet wlogout font-jetbrains-mono-nerd rofi-wayland cava playerctlsudo xbps-install -S Waybar pavucontrol wireplumber NetworkManager wlogout ttf-jetbrains-mono-nerd rofi-wayland cava playerctl- Hyprland: Uses native
hyprland/workspaces(with persistent workspaces up to 5) andwlr/taskbarfor active application tabs. - Sway: Uses native
sway/workspacesandsway/windowmodules. - Niri: Uses native
niri/workspacesandniri/windowmodules. - Other Compositors (Wayfire, River, Labwc, Mangowm, etc.): Automatically falls back to the Generic wlroots configuration using
wlr/workspacesandwlr/taskbarfor window management. No extra scripts are required for other compositors!
The Audio Visualizer (caway) and Rofi launcher are included in every compositor profile, so the center caway + clock pair and the launcher stay consistent across Hyprland, Sway, Niri, and generic setups.
Clone the repository and run the interactive installer:
git clone https://github.com/Raka-coder/waybar-cyber-industrial.git
cd waybar-cyber-industrial
./install.sh- Symlink (Option 1): Symlinks the entire theme directory. Highly recommended if you plan to update or modify the configuration using Git.
- Copy (Option 2 - Minimal): Copies configuration files directly. It automatically detects your active compositor and offers a minimal installation (only copies the configs needed for your active session, leaving other files out for a cleaner setup).
The installer will:
- Copy/symlink all theme files to
~/.config/waybar/cyber-industrial/ - Generate a default Amber
colors.cssso your bar works out of the box - Copy Matugen template + config to
~/.config/matugen/(if you have Matugen installed)
Wallpaper change
β
βΌ
ββ Matugen βββββββββββββββββββββββββββ
β Extract Material You colors β
β β scheme-vibrant (saturated accent)β
β β Fill template.css β
β β Write colors.css β
β β Run post_hook β
βββββββββββββ¬βββββββββββββββββββββββββ
β
βΌ
ββ style.css βββββββββββββββββββββββββββ
β @import url("matugen/colors.css") β
β β Waybar picks up new colors β
ββββββββββββββββββββββββββββββββββββββββ
- A wallpaper change triggers Matugen with
scheme-vibrant - Matugen extracts saturated Material You colors from the image
- Fills
matugen/template.cssβ writesmatugen/colors.css - Post-hook kills & restarts Waybar β new colors apply instantly
Why scheme-vibrant? Matugen's default tonal-spot scheme produces muted pastels that barely differ between wallpapers. vibrant extracts saturated accent colors β each wallpaper gives a distinctly different, visible color shift.
If Matugen is not installed, the bar uses a built-in Amber scheme (#ffb000 accent). The launch.sh script auto-generates this fallback on every start.
Matugen runs whenever your wallpaper changes. How you trigger it depends on your wallpaper tool:
If you use Noctalia, use the included watcher script:
# Copy watcher to system
cp waybar/cyber-industrial/scripts/matugen-watcher.sh ~/.config/mango/scripts/matugen-watcher.sh
# Create systemd user service
mkdir -p ~/.config/systemd/user
cp waybar/cyber-industrial/matugen/matugen-watcher.service ~/.config/systemd/user/
# Enable and start
systemctl --user daemon-reload
systemctl --user enable --now matugen-watcher.serviceThe watcher polls Noctalia every 3 seconds and triggers Matugen on wallpaper change.
# Add matugen to your swww script
swww img "$wallpaper"
matugen image "$wallpaper" --type scheme-vibrant --contrast 0.25 --prefer darkness# Add to your wallpaper script
hyprctl hyprpaper wallpaper ",$wallpaper"
matugen image "$wallpaper" --type scheme-vibrant --contrast 0.25 --prefer darkness# Wrap your wallpaper setter
matugen image "$1" --type scheme-vibrant --contrast 0.25 --prefer darkness
swaybg -i "$1" &matugen image /path/to/your/wallpaper.jpg --type scheme-vibrant --contrast 0.25 --prefer darknessRemove or comment out the @import line in style.css. The built-in @define-color fallback block (Amber scheme) above it will take effect.
You can launch the bar manually at any time:
~/.config/waybar/cyber-industrial/launch.shAdd the launch script to your compositor's startup file to run it automatically on login:
exec-once = ~/.config/waybar/cyber-industrial/launch.shexec ~/.config/waybar/cyber-industrial/launch.sh
spawn-at-startup "~/.config/waybar/cyber-industrial/launch.sh"With Matugen active, colors come from your wallpaper β edit matugen/template.css to control how Material You colors map to Cyber-Industrial variables:
/* matugen/template.css β adjust the mapping */
@define-color accent @mat-primary; /* Main accent from wallpaper */
@define-color accent-dim @mat-secondary; /* Dimmed variant */
@define-color bg-base alpha(@mat-surface, 0.55); /* Background */
@define-color bg-module alpha(@mat-surface-container, 0.55);
@define-color border-color alpha(@mat-outline, 0.40);
@define-color text-main @mat-on-surface;
@define-color text-dim alpha(@mat-on-surface, 0.6);
@define-color warn @mat-tertiary;
@define-color danger @mat-error;After editing, regenerate with:
matugen image /path/to/current/wallpaper.jpgStatic override: To lock specific colors regardless of wallpaper, add @define-color lines after the @import in style.css:
@import url("matugen/colors.css");
/* Static overrides β these win over matugen */
@define-color accent #00ffcc; /* Lock to cyberpunk cyan */
@define-color danger #ff0000; /* Lock to pure red */The calendar (shown on clock hover) uses dynamic colors from the tooltip CSS β no hardcoded hex values. The current date is marked with bold underline (<b><u>{}</u></b>) which works with any color scheme.
The live spectrum analyzer is a small Python wrapper around CAVA that pipes raw ASCII levels into a Waybar custom/caway module. It captures the default sink's monitor source (so it reacts to whatever you hear, not your mic), renders it as Nerd Font block glyphs, and shows the current track via playerctl.
Auto-hide behavior is stateful in the script:
- Audio detected (any CAVA bar level > 0, or a player reporting
Playing) β the visualizer is shown immediately. - Silence β after a debounce of
framerate Γ 0.6frames (~0.6s @ 60fps) the module drops to{"text":"", "class":"custom-caway-hidden"}and CSS collapses it fully.
Preview of the visualizer in action:
Control knobs are passed on the exec line in modules.jsonc:
-bβ number of bars (default 10).-fβ CAVA framerate (default 60). Raise it for sharper peaks, but note this also shortens the auto-hide debounce window.-eβ disable the visualizer entirely; falls back to a text/media icon + track tooltip only.
The hidden state is pure CSS (#custom-caway.custom-caway-hidden), so you can restyle or fully hide it without touching the script.
If you use alternative apps for volume, network, or app launching (e.g., bemenu, nmtui), edit the command bindings inside configs/modules.jsonc:
"on-click": "your-preferred-command"- Check Matugen is installed:
which matugen - Run manually:
matugen image /path/to/wallpaper.jpg --type scheme-vibrant --contrast 0.25 --prefer darknessand check if~/.config/waybar/cyber-industrial/matugen/colors.csswas updated - Check post_hook: Verify
~/.config/matugen/config.tomlhastype = "scheme-vibrant"and the correctpost_hookpointing tolaunch.sh - No wallpaper tool: If you don't use a wallpaper manager, the bar keeps the default Amber colors β this is expected
Make sure Matugen is using scheme-vibrant (not the default tonal-spot). Check your config:
grep type ~/.config/matugen/config.toml
# Should output: type = "scheme-vibrant"The default tonal-spot scheme produces pastel tones that look similar across different images. The vibrant scheme extracts saturated, distinct colors from each wallpaper.
If colors.css is missing, launch.sh auto-generates it with Amber defaults. If the issue persists, run manually:
~/.config/waybar/cyber-industrial/launch.shLook for error output in the terminal.









