73 lines
3.1 KiB
Markdown
73 lines
3.1 KiB
Markdown
# AI Usage Monitor voor Linux
|
|
|
|
Een achtergrondmonitor voor Claude, Codex en Cursor op Hyprland. De daemon haalt usage op via de bestaande CLI-logins. Waybar leest alleen de lokale cache. Er is geen venster.
|
|
|
|
De Mac-app in de naastliggende map blijft de bron van de providerregels. Deze Linux-app volgt dezelfde vensters: Claude en Codex tonen het 5-uurs- en weekvenster, Cursor toont **Cursor models**, **Other models** en de resetdatum.
|
|
|
|
## Wat je ziet
|
|
|
|
De balk toont resterende percentages, bijvoorbeeld `C 38% X 71% Cu 52%`. Een klik ververst meteen. De tooltip bevat resettijden. Kleuren volgen de resterende ruimte: groen boven 50%, oranje vanaf 20%, rood daaronder. Gegevens ouder dan 30 minuten zijn stale. Een mislukte ronde bewaart de laatste succesvolle meting.
|
|
|
|
Verversen pauzeert als logind de sessie vergrendelt of het systeem in slaap gaat. Zonder een leesbare sessie blijft verversen uit.
|
|
|
|
## Instellingen
|
|
|
|
`$XDG_CONFIG_HOME/ai-usage/config.json` (meestal `~/.config/ai-usage/config.json`):
|
|
|
|
```json
|
|
{
|
|
"refreshMinutes": 5,
|
|
"enabledProviders": ["claude", "codex", "cursor"],
|
|
"executableOverrides": {},
|
|
"showUsedPercentage": false
|
|
}
|
|
```
|
|
|
|
`refreshMinutes` is 5, 15, 30 of 60. `executableOverrides` kan `claude`, `codex` of `cursor` op een absoluut pad zetten. De cache staat in `$XDG_STATE_HOME/ai-usage/usage.json`.
|
|
|
|
De daemon zoekt `claude`, `codex` en `cursor-agent` (daarna `agent`) op `PATH`, in `~/.local/bin` en in Cursor-extensies. Zonder Agent CLI leest Cursor alleen `cursorAuth/stripeSubscriptionStatus` uit `~/.config/Cursor/User/globalStorage/state.vscdb`.
|
|
|
|
De tools gebruiken hun eigen login. Deze app leest geen tokens en logt geen CLI-uitvoer. Cursor draait met een netwerkfilter dat alleen usage-endpoints toestaat. Op Linux mag die CLI `secret-tool lookup` gebruiken om zijn bestaande login te lezen; andere subprocessen worden geblokkeerd.
|
|
|
|
## Nix
|
|
|
|
```nix
|
|
{
|
|
inputs.ai-usage.url = "path:/home/avravels/ai-usage/ai-usage-linux";
|
|
|
|
outputs = { self, home-manager, ai-usage, ... }: {
|
|
# in je home-manager configuratie
|
|
};
|
|
}
|
|
```
|
|
|
|
```nix
|
|
imports = [ inputs.ai-usage.homeManagerModules.default ];
|
|
|
|
programs.ai-usage = {
|
|
enable = true;
|
|
package = inputs.ai-usage.packages.x86_64-linux.default;
|
|
providers.codex.enable = false;
|
|
providers.claude.executable = pkgs.claude-code;
|
|
};
|
|
```
|
|
|
|
Dit voegt het pakket toe, start `systemd --user` service `ai-usage` met de grafische sessie, en zet `custom/ai-usage` vooraan `modules-right` als Waybar al aan staat. Je eigen Nix-configuratie blijft onaangeroerd tot je deze module importeert.
|
|
|
|
De module schrijft `~/.config/ai-usage/config.json`. `providers.claude`, `providers.codex` en `providers.cursor` staan standaard aan. Zet `enable = false` om een provider over te slaan. `executable` is een pad of een pakket (`lib.getExe`); zonder waarde zoekt de daemon zelf. `refreshMinutes` is 5, 15, 30 of 60. `showUsedPercentage` toont verbruikt in plaats van resterend percentage. Een handmatige wijziging van dat bestand wordt bij de volgende `home-manager switch` overschreven.
|
|
|
|
## Handmatig
|
|
|
|
```sh
|
|
nix build
|
|
./result/bin/ai-usage daemon
|
|
./result/bin/ai-usage status
|
|
./result/bin/ai-usage waybar
|
|
```
|
|
|
|
Tests:
|
|
|
|
```sh
|
|
cargo test
|
|
```
|