Configurable providers with nix

This commit is contained in:
Armel van Ravels committed 2026-10-12 13:03:26 +02:00
1 parent 69605d7e54
commit c312d83c7a
2 files changed
+41

No files matched your search

+37
View File
@@ -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";