flake/modules/home/terminal/opencode/default.nix
2026-06-02 09:05:40 +00:00

113 lines
3 KiB
Nix

{
lib,
config,
pkgs,
osConfig,
...
}: let
a2a = osConfig.mods.server.auth2api;
in {
options.mods.opencode.enable = lib.mkEnableOption "enables opencode";
# imports = [
# ./package.nix
# ./dcg.nix
# ];
config = lib.mkIf config.mods.opencode.enable {
home.packages = with pkgs; [
(callPackage ./dcg.nix {})
];
programs.opencode = {
enable = true;
settings = {
"plugin" = ["opencode-gemini-auth" "opencode-anthropic-oauth"];
"provider" = {
"auth2api" = {
"npm" = "@ai-sdk/openai-compatible";
"name" = "auth2api (local)";
"options" = {
"baseURL" = "http://${a2a.host}:${toString a2a.port}/v1";
};
"models" = {
"sonnet" = {
"name" = "Claude Sonnet 4 (auth2api)";
"reasoning" = true;
};
"claude-sonnet-4-6" = {
"name" = "Claude Sonnet 4.6 (auth2api)";
"reasoning" = true;
};
"opus" = {
"name" = "Claude Opus 4 (auth2api)";
"reasoning" = true;
};
"claude-opus-4-6" = {
"name" = "Claude Opus 4.6 (auth2api)";
"reasoning" = true;
};
"claude-opus-4-7" = {
"name" = "Claude Opus 4.7 (auth2api)";
"reasoning" = true;
};
"haiku" = {
"name" = "Claude Haiku 4.5 (auth2api)";
};
"claude-haiku-4-5-20251001" = {
"name" = "Claude Haiku 4.5 20251001 (auth2api)";
};
};
};
};
"mode" = {
"build" = {
"prompt" = "You are Claude Code, Anthropic's official CLI for Claude.";
};
"plan" = {
"prompt" = "You are Claude Code, Anthropic's official CLI for Claude.";
};
};
"permission" = {
"bash" = {
"*" = "ask";
"*>*" = "ask";
"rm *" = "deny";
"rmdir *" = "deny";
"unlink *" = "deny";
"*rm *" = "ask";
"*rmdir *" = "ask";
"*unlink *" = "ask";
"awk *>*" = "ask";
"*-exec*" = "ask";
"git status" = "allow";
"git log" = "allow";
"git diff" = "allow";
"git show" = "allow";
"ls *" = "allow";
"head *" = "allow";
"tail *" = "allow";
"sort *" = "allow";
"uniq *" = "allow";
"grep *" = "allow";
"find *" = "allow";
"rg *" = "allow";
"fd *" = "allow";
"cat *" = "allow";
"wc *" = "allow";
"jq *" = "allow";
"file *" = "allow";
"diff *" = "allow";
"awk *" = "allow";
"pwd *" = "allow";
"cut *" = "allow";
"tr *" = "allow";
};
};
};
};
};
}