137 lines
4.7 KiB
Markdown
137 lines
4.7 KiB
Markdown
|
|
# ocpway — waybar plugin for `ocd`
|
||
|
|
|
||
|
|
A waybar module that shows opencode usage limits and balance from the
|
||
|
|
`ocd` dashboard binary. It rotates through the accounts in your ocd
|
||
|
|
config, one every 5 seconds. Left-click advances at once. Right-click
|
||
|
|
locks the current account for one hour. Hover the bar to see all
|
||
|
|
accounts at once.
|
||
|
|
|
||
|
|
## What it shows
|
||
|
|
|
||
|
|
One line per account:
|
||
|
|
|
||
|
|
```
|
||
|
|
kllr560 [0%/5h] ▓░░░░░░ 4:59 [79%/1w] █████▌░ 3d 22h [39%/1m] ██▋░░░░ 28d $0.00 / 1m ago
|
||
|
|
```
|
||
|
|
|
||
|
|
- Account name, and a lock emoji `🔒` while locked.
|
||
|
|
- Three bars: the 5-hour, weekly, and monthly usage window.
|
||
|
|
- The label holds the used value with its unit, e.g. `[79%/1w]`.
|
||
|
|
- The bar is the percentage, drawn as filled cells up to the value.
|
||
|
|
- The text after the bar is the time until the window resets.
|
||
|
|
- The balance and the age of the last data fetch:
|
||
|
|
`$0.00 / 1m ago`.
|
||
|
|
|
||
|
|
When locked, the bar cells lock to blue and the line starts with `🔒`.
|
||
|
|
|
||
|
|
The hover tooltip lists every account the same way. The active row is
|
||
|
|
marked with `▸`, and the lock emoji shows only on the locked row.
|
||
|
|
|
||
|
|
## Design decisions
|
||
|
|
|
||
|
|
The bar is rectangular. It uses Pango `background` spans over non-breaking
|
||
|
|
space cells. Seven cells are about 50 px at a normal bar font. The bar in
|
||
|
|
the tooltip uses plain block characters because waybar 0.15.0 renders the
|
||
|
|
custom-module tooltip as plain text. If your waybar gains Pango markup in
|
||
|
|
custom tooltips (see Waybar PR #5034), set `TOOLTIP_MARKUP = True` in the
|
||
|
|
daemon to get colored background-span bars in the tooltip too.
|
||
|
|
|
||
|
|
The daemon polls `ocd raw json` every 30 seconds. It sends no
|
||
|
|
`--force-refresh` or `--no-cache` flags, so `ocd` keeps full control of
|
||
|
|
politeness: its own cache, TTL, concurrency, and pacing stay in charge.
|
||
|
|
Most polls read the cache and never touch the network. The daemon also
|
||
|
|
polls at once waybar starts
|
||
|
|
|
||
|
|
waybar 0.15.0 has no `on-hover` event for custom modules, so the
|
||
|
|
all-accounts view is the native tooltip, not a separate floating window.
|
||
|
|
|
||
|
|
## Layout
|
||
|
|
|
||
|
|
```
|
||
|
|
ocpway/
|
||
|
|
scripts/
|
||
|
|
ocd-waybar the daemon (python)
|
||
|
|
ocd-waybar-ctl the click helper (sh) for advance / lock / poll / quit
|
||
|
|
config/
|
||
|
|
waybar-config.jsonc the "custom/ocd" module block to add
|
||
|
|
waybar-style.css the CSS to append
|
||
|
|
hypr-autostart.conf the exec-once line to start the daemon
|
||
|
|
README.md
|
||
|
|
```
|
||
|
|
|
||
|
|
## Install
|
||
|
|
|
||
|
|
Copy the scripts and wiring them into your own config.
|
||
|
|
|
||
|
|
1. Copy the scripts:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
mkdir -p ~/.config/waybar/scripts
|
||
|
|
cp scripts/ocd-waybar scripts/ocd-waybar-ctl ~/.config/waybar/scripts/
|
||
|
|
chmod +x ~/.config/waybar/scripts/ocd-waybar{,-ctl}
|
||
|
|
```
|
||
|
|
|
||
|
|
2. Add the `custom/ocd` module to `~/.config/waybar/config.jsonc`.
|
||
|
|
See `config/waybar-config.jsonc` for the block and where the module
|
||
|
|
name goes in `modules-right`.
|
||
|
|
|
||
|
|
3. Append the CSS in `config/waybar-style.css` to `~/.config/waybar/style.css`.
|
||
|
|
|
||
|
|
4. Add the `exec-once` line in `config/hypr-autostart.conf` to
|
||
|
|
`~/.config/hypr/autostart.conf`.
|
||
|
|
|
||
|
|
5. Restart waybar, and start the daemon:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
pkill -x waybar; waybar &
|
||
|
|
~/.config/waybar/scripts/ocd-waybar &
|
||
|
|
```
|
||
|
|
|
||
|
|
On later logins, the `exec-once` line starts the daemon for you.
|
||
|
|
|
||
|
|
## Usage
|
||
|
|
|
||
|
|
- Hover the module: see all accounts.
|
||
|
|
- Left-click: advance to the next account at once (resets the 5-second timer).
|
||
|
|
- Right-click: lock the current account for one hour.
|
||
|
|
|
||
|
|
## `ocd-waybar-ctl` commands
|
||
|
|
|
||
|
|
| Command | Effect |
|
||
|
|
|----------|--------|
|
||
|
|
| advance | Reset the timer and move to the next account. |
|
||
|
|
| lock | Freeze the current account for one hour. |
|
||
|
|
| poll | Run an ocd poll now (still respects ocd cache and TTL). |
|
||
|
|
| quit | Stop the daemon. |
|
||
|
|
|
||
|
|
The helper tries `socat`, then `nc -U -u`, then a small python fallback.
|
||
|
|
|
||
|
|
## Tunables
|
||
|
|
|
||
|
|
At the top of `scripts/ocd-waybar`:
|
||
|
|
|
||
|
|
| Name | Default | Meaning |
|
||
|
|
|---|---|---|
|
||
|
|
| `ROTATE_SECS` | 5 | Auto-advance cadence. |
|
||
|
|
| `LOCK_SECS` | 3600 | One hour lock duration. |
|
||
|
|
| `POLL_SECS` | 30 | ocd re-poll cadence. |
|
||
|
|
| `BAR_WIDTH` | 7 | Bar cells, about 50 px. |
|
||
|
|
| `TOOLTIP_MARKUP` | False | Set True if your waybar renders Pango in custom tooltips. |
|
||
|
|
| `C_OK` / `C_WARN` / `C_CRIT` / `C_LOCK` / `C_TRACK` | see source | Zone colors. |
|
||
|
|
| `OCD_BIN` | `ocd` | Path to the ocd binary (or set the `OCD_BIN` env var). |
|
||
|
|
|
||
|
|
Zone thresholds: under 70 percent is green, 70 to 90 is amber, over 90 or a
|
||
|
|
`rate-limited` frame status is red.
|
||
|
|
|
||
|
|
## Dependencies
|
||
|
|
|
||
|
|
- `ocd`, built and on `PATH` (or pointed at with `OCD_BIN`).
|
||
|
|
- `python3` (the daemon). Standard library only.
|
||
|
|
- `waybar`. Tested on 0.15.0.
|
||
|
|
- For clicks: `socat` is preferred, `nc` is a fallback, else the python fallback runs.
|
||
|
|
|
||
|
|
## State
|
||
|
|
|
||
|
|
The daemon writes `~/.local/state/ocd-waybar/state.json`. The waybar module
|
||
|
|
reads that file once per second with `cat` and emits it as a JSON object.
|
||
|
|
The socket lives at `$XDG_RUNTIME_DIR/ocd-waybar.sock`.
|