{ config, lib, pkgs, ... }: let opencodePkg = pkgs.symlinkJoin { name = "opencode.wrapped"; paths = [ pkgs.opencode ]; buildInputs = [ pkgs.makeWrapper ]; postBuild = '' wrapProgram $out/bin/opencode \ --set SHELL ${lib.getExe pkgs.bash} ''; }; cfg = config.dev.opencode; in lib.mkIf cfg.enable { xdg.configFile."opencode/agents" = { source = ./agents; recursive = true; }; xdg.configFile."opencode/skills" = { source = ./skills; recursive = true; }; xdg.configFile."opencode/AGENTS.md".source = ./AGENTS.md; programs.opencode = { enable = true; package = opencodePkg; enableMcpIntegration = cfg.enableMcp; settings = { inherit (cfg) theme; default_agent = "orchestrator"; permission = { todoread = "deny"; todowrite = "deny"; external_directory = lib.genAttrs [ "~/go/pkg/mod/**" ] (_: "allow"); }; mcp = lib.mkIf cfg.enableMcp { gopls = { type = "local"; enabled = true; command = [ "gopls" "mcp" ]; }; github = { type = "remote"; url = "https://api.githubcopilot.com/mcp/"; headers = { Authorization = "Bearer {env:GITHUB_TOKEN}"; }; enabled = false; }; }; }; }; programs.git.ignores = lib.mkIf cfg.enableLangRules [ ".rules" ]; programs.helix.ignores = lib.mkIf cfg.enableLangRules [ "!.rules" ]; }