Waybar
Waybar polls external commands on an interval to populate status bar modules. With slow providers — git, network lookups, kubectl — each poll adds latency or forces long intervals that leave your bar feeling stale. beachcomber keeps those results cached in the background, so every comb g query returns in microseconds regardless of what the underlying provider costs.
Prerequisites
beachcomber is socket-activated: the daemon starts automatically on the first comb query and shuts down after an idle period. You do not need to launch it manually. Waybar itself will socket-activate the daemon the first time a module executes.
If you want the daemon warm before the bar appears (to avoid a one-time cache miss on the first poll), start it eagerly from your session init — for example, by calling comb s in a systemd user unit. See the Reference page for the full list of commands.
Module configuration
Config file: ~/.config/waybar/config
waybar uses JSON for module configuration and supports custom/* modules that run arbitrary commands. Each module has its own interval field in seconds.
Add these entries to your waybar config object:
"custom/git-branch": {
"exec": "comb g git.branch /home/yourname/myproject",
"interval": 2,
"format": " {}",
"tooltip": false
},
"custom/battery": {
"exec": "comb g battery.percent",
"interval": 2,
"format": " {}%",
"tooltip": false
},
"custom/load": {
"exec": "comb g load.one",
"interval": 2,
"format": " {}",
"tooltip": false
},
"custom/network": {
"exec": "comb g network.ssid",
"interval": 5,
"format": " {}",
"tooltip": false
},
"custom/kube": {
"exec": "comb g kubecontext.context",
"interval": 5,
"format": " {}",
"tooltip": false
}
Add them to your modules-left, modules-center, or modules-right arrays:
"modules-right": ["custom/kube", "custom/load", "custom/network", "custom/battery"]
CSS selectors
waybar generates CSS class names from module names by replacing / with -. Target your custom modules in ~/.config/waybar/style.css:
#custom-git-branch {
color: #a6e3a1;
padding: 0 8px;
}
#custom-battery {
color: #f9e2af;
padding: 0 8px;
}
#custom-load {
color: #89b4fa;
padding: 0 8px;
}
#custom-network {
color: #cba6f7;
padding: 0 8px;
}
#custom-kube {
color: #f38ba8;
padding: 0 8px;
}
Interval guidance
waybar's interval is in seconds. Setting it to 1 or 2 is safe with beachcomber. If a provider returns an empty string (daemon not running, provider not available), the module will display nothing — add a fallback in your exec if you want a placeholder:
"exec": "comb g battery.percent || echo '--'"
Troubleshooting
- Path-scoped providers return wrong data: bar programs often run scripts without a defined working directory. Always pass an absolute path for path-scoped providers like
gitandterraform. - Distinguishing "no data" from "daemon down": add a fallback to your exec:
comb g git.branch /path || echo '--'. If you see--, the daemon is not running or the key does not exist. - CSS not applying: waybar maps
custom/nameto CSS selector#custom-name(slash becomes hyphen).
See the built-in providers reference for the full list of providers and fields, and the general troubleshooting guide.