diff --git a/README.md b/README.md index 0791681..ddba7f6 100644 --- a/README.md +++ b/README.md @@ -47,11 +47,15 @@ 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 diff --git a/modules/home-manager.nix b/modules/home-manager.nix index 29288f6..42269a8 100644 --- a/modules/home-manager.nix +++ b/modules/home-manager.nix @@ -1,6 +1,13 @@ { config, lib, pkgs, ... }: let cfg = config.programs.ai-usage; + providerNames = [ "claude" "codex" "cursor" ]; + executablePath = value: + if lib.isDerivation value then lib.getExe value else value; + enabledProviders = builtins.filter (name: cfg.providers.${name}.enable) providerNames; + executableOverrides = lib.mapAttrs + (_: provider: executablePath provider.executable) + (lib.filterAttrs (_: provider: provider.executable != null) cfg.providers); in { options.programs.ai-usage = { enable = lib.mkEnableOption "AI Usage Monitor for Waybar"; @@ -8,12 +15,42 @@ in { type = lib.types.package; description = "ai-usage package from this flake."; }; + refreshMinutes = lib.mkOption { + type = lib.types.enum [ 5 15 30 60 ]; + default = 5; + description = "How often the daemon refreshes usage, in minutes."; + }; + showUsedPercentage = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Show used percentage instead of remaining percentage."; + }; + providers = lib.genAttrs providerNames (name: { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Refresh and show ${name}."; + }; + executable = lib.mkOption { + type = lib.types.nullOr (lib.types.either lib.types.str lib.types.package); + default = null; + example = lib.literalExpression "pkgs.claude-code"; + description = "Absolute path or package for ${name}. A package uses lib.getExe."; + }; + }); }; config = lib.mkIf cfg.enable (lib.mkMerge [ { home.packages = [ cfg.package ]; + xdg.configFile."ai-usage/config.json".text = builtins.toJSON { + refreshMinutes = cfg.refreshMinutes; + enabledProviders = enabledProviders; + executableOverrides = executableOverrides; + showUsedPercentage = cfg.showUsedPercentage; + }; + systemd.user.services.ai-usage = { Unit = { Description = "AI Usage Monitor";