Mirrors the private dots tree at 900bdda: one shared base plus per-host overlays, replacing the old flat .config/ layout (last synced 2026-06-28). - packages: common/ gui/ wm/ lw/ fl/ + install.sh and bin/ tooling (dotsync, reconcile-hyde.sh) - new README (layout, deploy order, HyDE dependency), plus ToDo.md and HYDE-UPDATE.md - current HyDE waybar rig (layouts/, cava), pi agent extensions, claude/ config, tmux, presenterm, aichat roles - drops stale duplicates and generated cruft that should never have been tracked: the second top-level .pi/ copy, btop.log, zellij config.kdl.bak, fish_variables, nvim codecompanion.lua - .pi/agent/auth.json is gitignored now; auth.json.example ships instead - fl/ and wm/ hypr themes/ stay untracked (HyDE-generated per machine, per the root .gitignore)
77 lines
4.1 KiB
Markdown
77 lines
4.1 KiB
Markdown
# Status line (`statusline.py`)
|
||
|
||
The custom Claude Code status line, ordered **work info (left) → system info (right)**,
|
||
segments joined by a light-gray `│`. It's **responsive**: always a single line — if the
|
||
rendered width would exceed the terminal (`$COLUMNS`, which Claude Code re-exports on
|
||
resize), trailing (lowest-priority) segments are dropped from the right until it fits.
|
||
|
||
Wide — everything:
|
||
|
||
```
|
||
📁 ~/.dots │ 🌿 .dots main* │ 🤖 Opus 4.8 (1M) · xhigh │ 📝 84% (843k) │ 📊 34% 2h54m │ 💰 $0.40 $12.00/h │ 💾 81%
|
||
```
|
||
|
||
Narrow — trailing segments trimmed:
|
||
|
||
```
|
||
📁 ~/.dots │ 🌿 .dots main* │ 🤖 Opus 4.8 (1M) · xhigh │ 📝 84% (843k) │ 📊 34% 2h54m │ 💰 $0.40 $12.00/h
|
||
```
|
||
|
||
Every segment is defensive: if its data is missing or a command fails, the segment is
|
||
simply omitted (the bar never crashes the UI). Secondary detail (the parts in light gray)
|
||
is supplementary to the main colored value.
|
||
|
||
## Live segments
|
||
|
||
| | Segment | Shows | Notes |
|
||
|---|---|---|---|
|
||
| | **Vim mode** | `[I]`/`[N]`/`[V]` editor mode | only with `editorMode: vim`; pair with `hideVimModeIndicator: true` so the built-in one doesn't duplicate it |
|
||
| 📁 | **Directory** | Current working dir, with `~` for home | cyan |
|
||
| 🌿 | **Git** | `repo branch` + `*` if dirty + `↑N`/`↓N` ahead/behind upstream | repo = magenta; branch = green when clean, yellow + red `*` when dirty; `↑` cyan, `↓` yellow. Omitted outside a repo |
|
||
| 🤖 | **Model** | Active model display name + `· effort` level (`low`/`medium`/`high`/`xhigh`) | name = blue, effort = light gray; effort omitted for models without the param |
|
||
| 📝 | **Context** | `% of context window used` + `(Nk)` tokens | window = 1M for `[1m]` models, else 200k. Adds a red **⚠compact** at ≥80% |
|
||
| 📊 | **5h usage** | `% of the 5-hour rolling limit used` + time until it resets | from `rate_limits.five_hour`; Pro/Max only, and absent until the first API response of a session |
|
||
| 💰 | **Cost** | `$` session cost so far + `$/h` burn rate | burn rate shown once the session exceeds ~30s |
|
||
| 💾 | **Disk** | `% used` of the filesystem at the cwd | from `statvfs` |
|
||
|
||
## Colour legend
|
||
|
||
Most numbers are **green / yellow / red** by threshold — green = healthy, red = needs
|
||
attention. Light gray = secondary detail. Thresholds (`green < … < yellow < … ≤ red`):
|
||
|
||
| Segment | green | yellow | red |
|
||
|---|---|---|---|
|
||
| Context | `< 50%` | `50–80%` | `≥ 80%` (⚠compact) |
|
||
| 5h usage | `< 50%` | `50–80%` | `≥ 80%` |
|
||
| Disk | `< 75%` | `75–90%` | `≥ 90%` |
|
||
|
||
> Light gray is `\033[37m`; dimming (`\033[2m`) is disabled because it blended the gray
|
||
> detail text into dark terminal backgrounds. To go brighter, set `"gray"` to `\033[97m`
|
||
> (bright white) in the `C` table near the top of `statusline.py`.
|
||
|
||
## Optional segments (defined but not shown)
|
||
|
||
These functions exist in `statusline.py` but aren't in the output. Enable one by adding it
|
||
to the `work` or `system` list in `main()`:
|
||
|
||
RAM/CPU/temp were **retired 2026-07-26**: the status line only refreshes on message
|
||
events, so system metrics sat visibly stale between turns — the tmux status bar
|
||
(`tmux/scripts/`) owns live system metrics now.
|
||
|
||
| | Function | Shows |
|
||
|---|---|---|
|
||
| 🧠 | `ram_segment` | `% used` + `used/totalG` from `/proc/meminfo` (green `<70%` / yellow / red `≥85%`) |
|
||
| 🖥️ | `cpu_segment` | `% busy` (diffed `/proc/stat` snapshot) + loadavg + cores (green `<60%` / red `≥85%`) |
|
||
| 🌡️ | `temp_segment` | hottest CPU thermal zone °C (green `<60` / red `≥80`) |
|
||
| ✏️ | `velocity_segment` | `+added/-removed` lines this session + lines/min |
|
||
| ♻️ | `cache_segment` | prompt-cache hit % (higher is better) |
|
||
| ⚙️ | `api_segment` | share of wall-clock time spent in API/inference |
|
||
| | `version_segment` | Claude Code version (`vX.Y.Z`) |
|
||
| 🎨 | `style_segment` | active output-style name |
|
||
|
||
## Where it lives
|
||
|
||
`statusline.py` is tracked in this repo and symlinked to `~/.claude/statusline.py`;
|
||
`settings.json` runs it via `statusLine` (`/usr/bin/env python3 ~/.claude/statusline.py`).
|
||
Edits take effect on the next status refresh.
|