{ 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"; }; }; }; }; }; }