fix: ai-tools use nix pkgs directly

This commit is contained in:
Rasyidan Akbar F. 2025-10-01 09:32:02 +07:00
commit 70dcc141c5

View file

@ -1,48 +1,18 @@
{ config, lib, pkgs, inputs, ... }: { config, lib, pkgs, ... }:
let let
inherit (lib) inherit (lib)
mkEnableOption mkOption types mkIf concatMap unique warn escapeShellArg; mkEnableOption mkOption types mkIf concatMap unique warn escapeShellArg;
cfg = config.rsydn.aiTools; cfg = config.rsydn.aiTools;
nodePackages = if builtins.hasAttr "nodePackages_latest" pkgs then getPkgsPackage = name: lib.attrByPath [ name ] null pkgs;
pkgs.nodePackages_latest
else if builtins.hasAttr "nodePackages" pkgs then
pkgs.nodePackages
else
{ };
hasNodePackage = name: builtins.hasAttr name nodePackages; codexDefault = getPkgsPackage "codex";
getNodePackage = name:
if hasNodePackage name then nodePackages.${name} else null;
choosePackage = packages: crushDefault = getPkgsPackage "crush";
let filtered = lib.filter (pkg: pkg != null) packages;
in if filtered == [ ] then null else lib.head filtered;
codexDefault = choosePackage [ (getNodePackage "@openai/codex") ]; opencodeDefault = getPkgsPackage "opencode";
crushFromInput = if builtins.hasAttr "nix-ai-tools" inputs then claudeDefault = getPkgsPackage "claude-code";
let
pkgSet = inputs."nix-ai-tools".packages or { };
system = pkgs.stdenv.hostPlatform.system;
in if builtins.hasAttr system pkgSet then
let systemPackages = builtins.getAttr system pkgSet;
in if builtins.hasAttr "crush" systemPackages then
builtins.getAttr "crush" systemPackages
else
null
else
null
else
null;
crushDefault =
choosePackage [ crushFromInput (getNodePackage "@charmland/crush") ];
opencodeDefault = choosePackage [ (getNodePackage "opencode-ai") ];
claudeDefault =
choosePackage [ (getNodePackage "@anthropic-ai/claude-code") ];
toolOption = { name, description, defaultPackage, extraOptions ? { } toolOption = { name, description, defaultPackage, extraOptions ? { }
, extraDefaults ? { } }: , extraDefaults ? { } }:
@ -141,25 +111,25 @@ in {
codex = toolOption { codex = toolOption {
name = "Codex"; name = "Codex";
description = "OpenAI Codex CLI (npm @openai/codex)."; description = "OpenAI Codex CLI packaged in nixpkgs.";
defaultPackage = codexDefault; defaultPackage = codexDefault;
}; };
crush = toolOption { crush = toolOption {
name = "Crush"; name = "Crush";
description = "Charmbracelet Crush CLI for natural language shell."; description = "Charmbracelet Crush CLI packaged in nixpkgs.";
defaultPackage = crushDefault; defaultPackage = crushDefault;
}; };
opencode = toolOption { opencode = toolOption {
name = "OpenCode"; name = "OpenCode";
description = "OpenCode AI collaborative CLI."; description = "OpenCode AI collaborative CLI packaged in nixpkgs.";
defaultPackage = opencodeDefault; defaultPackage = opencodeDefault;
}; };
claude = toolOption { claude = toolOption {
name = "Claude Code"; name = "Claude Code";
description = "Anthropic Claude Code CLI assistant."; description = "Anthropic Claude Code CLI packaged in nixpkgs.";
defaultPackage = claudeDefault; defaultPackage = claudeDefault;
extraOptions = { extraOptions = {
zai = mkOption { zai = mkOption {