Минималистичная строка статуса для оконных менеджеров, которые читают
WM_NAME корневого окна (dwm, dwl, ...). Шлёт в xsetroot -name одну
строку с погодой, курсами, индексом МосБиржи, лимитами Claude Code,
скоростью сети, RAM, CPU, батареей и временем.
Пример строки:
[ 17°C ☀️ ] [ ▼ 0.36 Kb/s ][ ▲ 0.23 Kb/s] [IMOEX = 2644.26] [ Cl S:92 W:99 ] [ BTC = 78410 USD ][ USD = 74.80 RUB ] [ RAM: 3.9G/15G ][ CPU: 6% ] [ POW: 100%- ] Вс 03 May 10:33
| Блок | Источник |
|---|---|
| Погода | openweathermap.org |
| Скорость сети ▼/▲ | ifstat по выбранному интерфейсу |
| IMOEX | MOEX ISS API, тикер IMOEX2 (включает все сессии: основную, утреннюю, вечернюю, выходные) |
Лимиты Claude (Cl S:NN W:NN) |
https://api.anthropic.com/api/oauth/usage через токен Claude Code |
| BTC | Binance public API |
| USD/RUB | ЦБ РФ (cbr.ru) |
| RAM, CPU | free, vmstat |
| Батарея | acpi |
| Дата/время | date (дни недели — на русском через sed) |
sudo apt install bash curl jq gawk sed ifstat procps acpi x11-xserver-utilsДля индикатора лимитов Claude нужен установленный
Claude Code с активной OAuth-сессией —
скрипт читает ~/.claude/.credentials.json.
git clone <repo-url> ~/dwm-status-bar
chmod +x ~/dwm-status-bar/*.shВсе параметры — переменные окружения. Пример обёртки ~/.start-bar.sh:
#!/usr/bin/env bash
export OWM_API_KEY="ваш_openweathermap_ключ"
export OWM_CITY="Minsk"
export IFACE="wlp3s0" # ваш wifi/eth интерфейс (см. `ip a`)
export CLAUDE_LIMITS_PROXY="" # SOCKS5 если нужен, например "127.0.0.1:1080"
exec ~/dwm-status-bar/bar.shПолный список переменных:
| Переменная | Назначение | Default |
|---|---|---|
OWM_API_KEY |
Ключ OpenWeatherMap (обязателен для погоды) | YOUR_API_KEY_HERE |
OWM_CITY |
Город для погоды | London |
OWM_UNITS |
metric / imperial |
metric |
IFACE |
Имя сетевого интерфейса для счётчиков | wlan0 |
BAR_SLEEP |
Период перерисовки бара, сек | 1 |
FETCH_SLEEP |
Период обновления курсов/погоды, сек | 60 |
CLAUDE_SLEEP |
Период обновления лимитов Claude, сек | 120 |
CLAUDE_CREDENTIALS |
Путь до credentials.json |
~/.claude/.credentials.json |
CLAUDE_LIMITS_PROXY |
SOCKS5 прокси для запроса к api.anthropic.com | пусто |
В .xinitrc/autostart вашего WM:
~/.start-bar.sh &или прямо:
IFACE=wlp3s0 OWM_API_KEY=... OWM_CITY=Minsk ~/dwm-status-bar/bar.sh &Можно использовать сам по себе как «сколько лимитов осталось»:
$ ./claude-limits.sh
Session 92%
Weekly 99%
$ ./claude-limits.sh --brief
S:92 W:99Пишет одну строку вида 17°C ☀️ в /tmp/wether.tmp.
OWM_API_KEY=... OWM_CITY=Berlin ./wether.sh
cat /tmp/wether.tmpbar.sh запускает три фоновых цикла:
- Тяжёлый (раз в
FETCH_SLEEPсек) — все HTTP-запросы (курсы, погода, IMOEX), системные данные (батарея, время) и пишет результаты в файлы/tmp/*.tmp. - Лимиты Claude (раз в
CLAUDE_SLEEPсек) — отдельно, потому что ходит на свой эндпоинт и реже. - Отрисовка (раз в
BAR_SLEEPсек) — читает кэш из/tmp/*.tmp, собирает строку, делаетxsetroot -name. Здесь же — счётчикиifstat,vmstat,free.
Такая разводка позволяет оставить отрисовку гладкой даже когда внешние API тормозят.
- Лимиты Claude: эндпоинт
/api/oauth/usageне документирован публично, но используется самим Claude Code (см. вкладку/usageв интерактивной сессии). Сам клиент кэширует значение примерно час. Раз в 1–2 минуты — адекватный темп опроса для status bar. Cl S:NN W:NNозначает «осталось NN% от Session/Weekly». При ошибке запроса показываетсяS:?? W:??.- IMOEX2 vs IMOEX: первый — «индекс МосБиржи (все сессии)», второй —
только основная. Если нужно классическое поведение (значение
закрытия предыдущего торгового дня в выходные) — поменяйте
IMOEX2.jsonнаIMOEX.jsonвbar.sh. - Дни недели на русском сделаны простым
sed-маппингом — не требует установки русской локали (ru_RU.UTF-8).
GNU.
