waybar

majiayu000's avatarfrom majiayu000

Manage and configure Waybar status bar. Use when user asks about waybar, status bar modules, bar layout, or wants to customize their top/bottom panel.

⭐0stars🔀0forks📁View on GitHub🕐Updated Jan 5, 2026

When & Why to Use This Skill

This Claude skill provides a comprehensive interface for managing and configuring the Waybar status bar on Wayland-based Linux systems. It simplifies complex desktop customization by allowing users to modify JSONC configurations and CSS styles through natural language. With built-in support for Omarchy integration, the skill ensures system stability by automating backups, validating JSON syntax, and handling safe reloads, making it an essential tool for developers and power users optimizing their productivity environment.

Use Cases

  • Adding or removing system monitoring modules such as CPU, RAM, battery, and network status to the bar.
  • Customizing the layout of the status bar by rearranging modules across left, center, and right sections.
  • Modifying the visual appearance of Waybar using CSS to match personal desktop themes.
  • Setting up custom script-based modules with specific icons and update intervals for personalized workflows.
  • Troubleshooting and restoring status bar configurations using automated timestamped backups or resetting to Omarchy defaults.
namewaybar
descriptionManage and configure Waybar status bar. Use when user asks about waybar, status bar modules, bar layout, or wants to customize their top/bottom panel.

Waybar Configuration Skill

Manage your Waybar configuration using natural language commands.

Omarchy Integration

This system uses Omarchy, which provides wrapper commands and default configs for Waybar.

Omarchy Commands

Command Purpose
omarchy-restart-waybar Restart Waybar (preferred over pkill)
omarchy-toggle-waybar Show/hide Waybar
omarchy-refresh-waybar Reset to Omarchy defaults (creates backup)

IMPORTANT: Use omarchy-restart-waybar instead of pkill or killall for reloading.

Omarchy Default Config

Omarchy maintains default configs at:

  • ~/.local/share/omarchy/config/waybar/config.jsonc
  • ~/.local/share/omarchy/config/waybar/style.css

Running omarchy-refresh-waybar will:

  1. Backup current config with timestamp (e.g., config.jsonc.bak.1754426383)
  2. Replace with Omarchy defaults
  3. Restart Waybar

Omarchy-Specific Modules

The default config includes these Omarchy modules:

"custom/omarchy": {
  "format": "<span font='omarchy'>\ue900</span>",
  "on-click": "omarchy-menu",
  "on-click-right": "xdg-terminal-exec",
  "tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
}

"custom/update": {
  "exec": "omarchy-update-available",
  "on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
  "signal": 7,
  "interval": 21600
}

"custom/screenrecording-indicator": {
  "on-click": "omarchy-cmd-screenrecord",
  "exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
  "signal": 8,
  "return-type": "json"
}

Omarchy Click Handlers

Many modules use Omarchy launchers for click actions:

Handler Purpose
omarchy-menu Main Omarchy menu
omarchy-menu power Power menu (shutdown, reboot, etc.)
omarchy-launch-wifi WiFi network selector
omarchy-launch-bluetooth Bluetooth device manager
omarchy-launch-or-focus-tui btop System monitor
omarchy-launch-or-focus-tui wiremix Audio mixer
omarchy-launch-floating-terminal-with-presentation <cmd> Run command in floating terminal
omarchy-cmd-screenrecord Toggle screen recording
omarchy-tz-select Timezone selector

Configuration Location

~/.config/waybar/config.jsonc  # User configuration (JSONC format)
~/.config/waybar/style.css     # User styling

Instructions

When the user asks to modify their Waybar config:

1. Always Read Current Config First

cat ~/.config/waybar/config.jsonc

2. Create Backup Before Changes

cp ~/.config/waybar/config.jsonc ~/.config/waybar/config.jsonc.bak.$(date +%s)

3. Make Changes Using Edit Tool

Use the Edit tool to modify the JSONC file. Preserve:

  • Existing comments
  • Formatting style
  • Icon characters (Nerd Font glyphs)
  • Omarchy-specific modules and handlers

4. Validate JSON After Edit

# Remove comments and validate JSON structure
sed 's|//.*||g' ~/.config/waybar/config.jsonc | jq . > /dev/null && echo "Valid JSON" || echo "Invalid JSON"

5. Reload Waybar

omarchy-restart-waybar

Core Concepts

Bar Structure

Waybar has three module sections:

  • modules-left - Left side (default: Omarchy menu, workspaces)
  • modules-center - Center (default: clock, update indicator, screen recording)
  • modules-right - Right side (default: tray, bluetooth, network, audio, cpu, battery)

Module Types

  1. Built-in modules: clock, battery, cpu, memory, network, bluetooth, pulseaudio, tray, hyprland/workspaces
  2. Custom modules: custom/<name> - User-defined with exec scripts
  3. Group modules: group/<name> - Container for multiple modules (e.g., group/tray-expander)

Common Operations

Add a Module

  1. Add module name to the appropriate array
  2. Add configuration block if new module type

Example - adding memory module:

// In modules-right array:
"modules-right": ["memory", "cpu", "battery"],

// Add configuration:
"memory": {
  "interval": 30,
  "format": "{percentage}% ",
  "tooltip-format": "{used:0.1f}G / {total:0.1f}G",
  "on-click": "omarchy-launch-or-focus-tui btop"
}

Remove a Module

Remove from section array. Config block can remain (harmless).

Move a Module

Remove from one section array, add to another.

Create Custom Module

Simple text output:

"custom/mymodule": {
  "exec": "/path/to/script.sh",
  "interval": 10,
  "format": "{}",
  "on-click": "command-to-run"
}

JSON output (for dynamic text/tooltip/class):

"custom/mymodule": {
  "exec": "/path/to/script.sh",
  "return-type": "json",
  "interval": 10
}

Script outputs: {"text": "display", "tooltip": "hover text", "class": "css-class"}

Signal-Based Updates

For modules that should update on events (not intervals):

"custom/mymodule": {
  "exec": "/path/to/script.sh",
  "signal": 9,
  "return-type": "json"
}

Trigger update from anywhere: pkill -SIGRTMIN+9 waybar

Module Reference

Built-in Modules

Module Purpose Key Settings
clock Time/date format, format-alt, timezone
battery Battery status format, states, format-icons
cpu CPU usage interval, format
memory RAM usage interval, format
network Network status format-wifi, format-ethernet
bluetooth Bluetooth format, format-connected
pulseaudio Audio format, format-muted, scroll-step
tray System tray icon-size, spacing
hyprland/workspaces Workspaces format, format-icons, persistent-workspaces

Hyprland-Specific

Module Purpose
hyprland/workspaces Workspace indicator/switcher
hyprland/window Active window title
hyprland/submap Current submap/mode
hyprland/language Keyboard layout

Format Placeholders

clock: {:%H:%M}, {:%A}, {:%d %B}, {:L%A %H:%M} (locale-aware) battery: {capacity}, {icon}, {time}, {power} cpu: {usage}, {avg_frequency} memory: {percentage}, {used}, {total} network: {essid}, {signalStrength}, {bandwidthDownBytes}, {bandwidthUpBytes}

Icons (Nerd Font)

Common glyphs used in this config:

  • 󰍛 - CPU
  • `` - Memory
  • 󰂯/󰂱/󰂲 - Bluetooth off/connected/disabled
  • 󰤨/󰤯/󰤮 - WiFi strong/weak/disconnected
  • 󰁹/󰁺 - Battery full/low
  • // - Volume levels
  • `` - Volume muted
  • `` - Tray expander
  • 󰻂 - Screen recording

Styling (style.css)

#clock {
  color: #ffffff;
  padding: 0 10px;
}

#battery.warning {
  color: #ff0000;
}

#custom-omarchy {
  font-family: omarchy;
}

Safety

  • Always backup before changes
  • Validate JSON after edits
  • Use omarchy-restart-waybar to apply changes
  • Keep backup files for rollback
  • Don't remove custom/omarchy or custom/update unless intentional

Reverting to Defaults

If something breaks:

# Restore from most recent backup
cp ~/.config/waybar/config.jsonc.bak.TIMESTAMP ~/.config/waybar/config.jsonc
omarchy-restart-waybar

# Or reset to Omarchy defaults (backs up current first)
omarchy-refresh-waybar

Example Requests

  • "Add a memory monitor to my waybar"
  • "Move the clock to the left side"
  • "Remove the CPU indicator"
  • "Add a custom module that shows disk usage"
  • "Show battery percentage"
  • "Make the bar thicker"
  • "Hide the system tray"
  • "Add a module that shows my IP address"