Files
nixos-config/home/features/coding/opencode.nix

320 lines
9.2 KiB
Nix

{ inputs, ... }: {
imports =
[ "${inputs.m3ta-nixpkgs}/modules/home-manager/coding/basecamp-mcp.nix" ];
xdg.configFile = {
"opencode/command" = {
source = "${inputs.agents}/command";
recursive = true;
};
"opencode/context" = {
source = "${inputs.agents}/context";
recursive = true;
};
"opencode/prompts" = {
source = "${inputs.agents}/prompts";
recursive = true;
};
"opencode/skill" = {
source = "${inputs.agents}/skill";
recursive = true;
};
};
m3ta.coding.opencode.mcp.basecamp = {
enable = true;
envFile = "/run/agenix/basecamp-env";
};
programs.opencode = {
enable = true;
settings = {
theme = "opencode";
plugin =
[ "oh-my-opencode" "opencode-beads" "opencode-antigravity-auth@beta" ];
agent = builtins.fromJSON
(builtins.readFile "${inputs.agents}/agent/agents.json");
formatter = {
alejandra = {
command = [ "alejandra" "-q" "-" ];
extensions = [ ".nix" ];
};
};
mcp = {
Ref = {
type = "local";
command = [
"sh"
"-c"
"REF_API_KEY=$(cat /run/agenix/ref-key) exec bunx ref-tools-mcp@latest"
];
enabled = true;
};
Anytype = {
type = "local";
command = [
"sh"
"-c"
"OPENAPI_MCP_HEADERS=$(cat /run/agenix/anytype-key) exec bunx @anyproto/anytype-mcp"
];
enabled = false;
};
Exa = {
type = "local";
command = [
"sh"
"-c"
"EXA_API_KEY=$(cat /run/agenix/exa-key) exec bunx exa-mcp-server@latest tools=web_search_exa"
];
enabled = true;
};
};
provider = {
google = {
models = {
"antigravity-gemini-3-pro" = {
name = "Gemini 3 Pro (Antigravity)";
limit = {
context = 1048576;
output = 65535;
};
modalities = {
input = [ "text" "image" "pdf" ];
output = [ "text" ];
};
variants = {
low = { thinkingLevel = "low"; };
high = { thinkingLevel = "high"; };
};
};
"antigravity-gemini-3-flash" = {
name = "Gemini 3 Flash (Antigravity)";
limit = {
context = 1048576;
output = 65536;
};
modalities = {
input = [ "text" "image" "pdf" ];
output = [ "text" ];
};
variants = {
minimal = { thinkingLevel = "minimal"; };
low = { thinkingLevel = "low"; };
medium = { thinkingLevel = "medium"; };
high = { thinkingLevel = "high"; };
};
};
"antigravity-claude-sonnet-4-5" = {
name = "Claude Sonnet 4.5 (no thinking) (Antigravity)";
limit = {
context = 200000;
output = 64000;
};
modalities = {
input = [ "text" "image" "pdf" ];
output = [ "text" ];
};
};
"antigravity-claude-sonnet-4-5-thinking" = {
name = "Claude Sonnet 4.5 Thinking (Antigravity)";
limit = {
context = 200000;
output = 64000;
};
modalities = {
input = [ "text" "image" "pdf" ];
output = [ "text" ];
};
variants = {
low = { thinkingConfig = { thinkingBudget = 8192; }; };
max = { thinkingConfig = { thinkingBudget = 32768; }; };
};
};
"antigravity-claude-opus-4-5-thinking" = {
name = "Claude Opus 4.5 Thinking (Antigravity)";
limit = {
context = 200000;
output = 64000;
};
modalities = {
input = [ "text" "image" "pdf" ];
output = [ "text" ];
};
variants = {
low = { thinkingConfig = { thinkingBudget = 8192; }; };
max = { thinkingConfig = { thinkingBudget = 32768; }; };
};
};
"gemini-2.5-flash" = {
name = "Gemini 2.5 Flash (Gemini CLI)";
limit = {
context = 1048576;
output = 65536;
};
modalities = {
input = [ "text" "image" "pdf" ];
output = [ "text" ];
};
};
"gemini-2.5-pro" = {
name = "Gemini 2.5 Pro (Gemini CLI)";
limit = {
context = 1048576;
output = 65536;
};
modalities = {
input = [ "text" "image" "pdf" ];
output = [ "text" ];
};
};
"gemini-3-flash-preview" = {
name = "Gemini 3 Flash Preview (Gemini CLI)";
limit = {
context = 1048576;
output = 65536;
};
modalities = {
input = [ "text" "image" "pdf" ];
output = [ "text" ];
};
};
"gemini-3-pro-preview" = {
name = "Gemini 3 Pro Preview (Gemini CLI)";
limit = {
context = 1048576;
output = 65535;
};
modalities = {
input = [ "text" "image" "pdf" ];
output = [ "text" ];
};
};
};
};
};
};
};
home.file.".config/opencode/oh-my-opencode.json".text = builtins.toJSON {
"$schema" =
"https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json";
agents = {
Sisyphus = {
model = "opencode/glm-4.7-free";
permission = {
edit = "allow";
bash = {
"*" = "allow";
"rm *" = "ask";
"rmdir *" = "ask";
"mv *" = "ask";
"chmod *" = "ask";
"chown *" = "ask";
"git *" = "ask";
"git status*" = "allow";
"git log*" = "allow";
"git diff*" = "allow";
"git branch*" = "allow";
"git show*" = "allow";
"git stash list*" = "allow";
"git remote -v" = "allow";
"git add *" = "allow";
"git commit *" = "allow";
"jj *" = "ask";
"jj status" = "allow";
"jj log*" = "allow";
"jj diff*" = "allow";
"jj show*" = "allow";
"npm *" = "ask";
"npx *" = "ask";
"bun *" = "ask";
"bunx *" = "ask";
"uv *" = "ask";
"pip *" = "ask";
"pip3 *" = "ask";
"yarn *" = "ask";
"pnpm *" = "ask";
"cargo *" = "ask";
"go *" = "ask";
"make *" = "ask";
"dd *" = "deny";
"mkfs*" = "deny";
"fdisk *" = "deny";
"parted *" = "deny";
"eval *" = "deny";
"source *" = "deny";
"curl *|*sh" = "deny";
"wget *|*sh" = "deny";
"sudo *" = "deny";
"su *" = "deny";
"systemctl *" = "deny";
"service *" = "deny";
"shutdown *" = "deny";
"reboot*" = "deny";
"init *" = "deny";
"> /dev/*" = "deny";
"cat * > /dev/*" = "deny";
};
external_directory = "ask";
doom_loop = "ask";
};
};
librarian = {
model = "opencode/glm-4.7-free";
permission = {
edit = "deny";
bash = "deny";
};
};
explore = {
model = "opencode/glm-4.7-free";
permission = {
edit = "deny";
bash = "deny";
};
};
oracle = {
model = "opencode/glm-4.7-free";
permission = {
edit = "deny";
bash = "deny";
};
};
frontend-ui-ux-engineer = {
model = "opencode/glm-4.7-free";
permission = {
edit = "allow";
bash = {
"*" = "ask";
"npm *" = "ask";
"npx *" = "ask";
"bun *" = "ask";
"bunx *" = "ask";
"rm *" = "ask";
"mv *" = "ask";
"dd *" = "deny";
"mkfs*" = "deny";
"sudo *" = "deny";
"curl *|*sh" = "deny";
"wget *|*sh" = "deny";
};
};
};
document-writer = {
model = "opencode/glm-4.7-free";
permission = {
edit = "allow";
bash = "deny";
};
};
multimodal-looker = {
model = "opencode/glm-4.7-free";
permission = {
edit = "deny";
bash = "deny";
};
};
};
disabled_mcps = [ "context7" "websearch" ];
};
}