Important
Archived on Oct 3, 2026; no longer maintained. waybap existed to feed Waybar, and its only user replaced Waybar with a Quickshell sidebar. That bar fetches the same weather, crypto, sensor and Claude usage data itself, in QML, so it needs no separate daemon or local HTTP hop. The trigger was Waybar's workspace buttons, which stopped working under Hyprland's Lua config with no released fix. The code stays here for reference.
A small Rust daemon that provides weather, crypto, hardware sensor, and AI usage data for Waybar custom modules. It fetches data from Open-Meteo, CoinGecko, Linux hwmon/nvidia-smi, and Claude/Codex usage APIs on a schedule, caches it locally, and serves parsed Pango markup JSON over HTTP.
# Start the daemon (default: 127.0.0.1:6969)
waybap serve
# Start on a custom address
waybap serve 127.0.0.1:6963
# Test a module without starting the daemon
waybap test weather
waybap test crypto
waybap test sensors
waybap test usage
# Test parsing against cached data (no network)
waybap test weather --cacheAdd waybap as a flake input:
# flake.nix
inputs.waybap.url = "github:kittyandrew/waybap";Install the package and start it yourself (e.g. via Hyprland's exec-once):
environment.systemPackages = [
inputs.waybap.packages.${pkgs.stdenv.hostPlatform.system}.default
];wayland.windowManager.hyprland.settings.exec-once = [
"waybap serve 127.0.0.1:6963"
];Point your Waybar custom modules at the API:
# waybar config
"custom/weather" = {
format = "{}";
tooltip = true;
interval = 10;
exec = "curl -s http://127.0.0.1:6963/api/weather";
return-type = "json";
};
"custom/crypto" = {
format = "{}";
tooltip = true;
interval = 10;
exec = "curl -s http://127.0.0.1:6963/api/crypto";
return-type = "json";
};
"custom/sensors" = {
format = "{}";
tooltip = true;
interval = 1;
exec = "curl -s http://127.0.0.1:6963/api/sensors";
return-type = "json";
};
"custom/usage" = {
format = "{}";
tooltip = true;
interval = 10;
exec = "curl -s http://127.0.0.1:6963/api/usage";
return-type = "json";
};| Endpoint | Description | Refresh interval |
|---|---|---|
GET /api/weather |
Weather forecast (Open-Meteo) | 10 min |
GET /api/crypto |
Top 10 crypto by market cap (CoinGecko) | 15 min |
GET /api/sensors |
Hardware temperatures (hwmon + nvidia-smi) | 1 sec |
GET /api/usage |
Claude + Codex rate-limit usage | 2 min |
All endpoints return {"text": "...", "tooltip": "..."} with Pango markup, compatible with Waybar's return-type = "json".
# With Nix
nix build
nix build .#waybap
# With Cargo
cargo build --releasenix develop -c actionlint
nix develop -c zizmor .github/workflows
nix develop -c alejandra -c .
nix develop -c deadnix flake.nix
nix flake check --print-build-logs
nix build .#waybap --print-build-logs
nix develop -c cargo fmt --check
nix develop -c cargo clippy --all-targets --all-features -- -D warnings
nix develop -c cargo test --all-targets --all-features --locked
nix develop -c cargo build --all-targets --all-features --locked