diff --git a/config/opencode/config.json b/config/opencode/config.json deleted file mode 100644 index dad56b3..0000000 --- a/config/opencode/config.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true, - "formatter": { - "nixfmt": { - "command": ["nixfmt", "$FILE"], - "extensions": [".nix"] - }, - "prettier": { - "command": ["prettier", "--write", "$FILE"], - "extensions": [".md", ".yaml", ".yml", ".json", ".css", ".html", ".js", ".ts", ".jsx", ".tsx"] - }, - "shfmt": { - "command": ["shfmt", "-w", "$FILE"], - "extensions": [".sh", ".bash"] - }, - "ruff": { - "command": ["ruff", "format", "$FILE"], - "extensions": [".py"] - }, - "taplo": { - "command": ["taplo", "format", "$FILE"], - "extensions": [".toml"] - }, - "stylua": { - "command": ["stylua", "$FILE"], - "extensions": [".lua"] - } - }, - "disabled_providers": ["opencode"], - "provider": { - "halo": { - "npm": "@ai-sdk/openai-compatible", - "name": "Halo", - "options": { - "baseURL": "http://halo:8000/v1" - }, - "models": { - "coder": { "name": "coder" } - } - } - } -} diff --git a/modules/home/cli-apps/opencode/default.nix b/modules/home/cli-apps/opencode/default.nix index f2b54c7..7f1f11b 100644 --- a/modules/home/cli-apps/opencode/default.nix +++ b/modules/home/cli-apps/opencode/default.nix @@ -11,6 +11,83 @@ let cfg = config.metacfg.cli-apps.opencode; + # Formatters opencode runs on save, each pinned to its exact store path. + formatters = { + nixfmt = { + command = [ + (lib.getExe pkgs.nixfmt-rfc-style) + "$FILE" + ]; + extensions = [ ".nix" ]; + }; + prettier = { + command = [ + (lib.getExe pkgs.nodePackages.prettier) + "--write" + "$FILE" + ]; + extensions = [ + ".md" + ".yaml" + ".yml" + ".json" + ".css" + ".html" + ".js" + ".ts" + ".jsx" + ".tsx" + ]; + }; + shfmt = { + command = [ + (lib.getExe pkgs.shfmt) + "-w" + "$FILE" + ]; + extensions = [ + ".sh" + ".bash" + ]; + }; + ruff = { + command = [ + (lib.getExe pkgs.ruff) + "format" + "$FILE" + ]; + extensions = [ ".py" ]; + }; + taplo = { + command = [ + (lib.getExe pkgs.taplo) + "format" + "$FILE" + ]; + extensions = [ ".toml" ]; + }; + stylua = { + command = [ + (lib.getExe pkgs.stylua) + "$FILE" + ]; + extensions = [ ".lua" ]; + }; + }; + + opencodeConfig = { + "$schema" = "https://opencode.ai/config.json"; + lsp = true; + formatter = formatters; + disabled_providers = [ "opencode" ]; + provider.halo = { + npm = "@ai-sdk/openai-compatible"; + name = "Halo"; + options.baseURL = "http://halo:8000/v1"; + models.coder.name = "coder"; + }; + }; + obsidianSkills = lib.mapAttrs' ( @@ -30,21 +107,16 @@ in }; config = mkIf cfg.enable { - # Formatters referenced by config/opencode/config.json; keep them on PATH for opencode. - home.packages = [ - pkgs.nixfmt-rfc-style - pkgs.nodePackages.prettier - pkgs.shfmt - pkgs.ruff - pkgs.taplo - pkgs.stylua - ]; - + # The agents/, commands/ and other files come from the repo dir; config.json + # is generated from opencodeConfig above so formatter paths stay pinned. xdg.configFile."opencode" = { source = ../../../../config/opencode; recursive = true; }; + xdg.configFile."opencode/config.json".source = + (pkgs.formats.json { }).generate "opencode-config.json" opencodeConfig; + home.file = { ".agents/skills" = { source = ../../../../config/agents/skills;