{ config, lib, pkgs, namespace, ... }: let cfg = config.${namespace}.programs.opencode; in { options.${namespace}.programs.opencode = { enable = lib.mkEnableOption "opencode"; }; config = lib.mkIf cfg.enable { sops.secrets."hass-mcp/token" = { }; sops.templates."hass-mcp.env" = { mode = "0600"; content = '' HA_URL=http://nuc-nixos.local:8123 HA_TOKEN=${config.sops.placeholder."hass-mcp/token"} ''; }; programs.opencode = { enable = true; enableMcpIntegration = true; settings = { provider = { nas = { npm = "@ai-sdk/openai-compatible"; name = "llama-server (local)"; options = { baseURL = "http://10.0.1.3:8127/v1"; }; models = { Qwen3-Coder-Next-Q4_0 = { name = "Qwen3 Coder (local)"; modalities = { input = [ "image" "text" ]; output = [ "text" ]; }; limit = { context = 131072; output = 32768; }; }; }; }; }; }; }; programs.mcp = { enable = true; servers = { nixos = { command = "nix"; args = [ "run" "github:utensils/mcp-nixos" "--" ]; }; hass-mcp = { command = "bash"; args = [ "-c" "set -a; source ${config.sops.templates."hass-mcp.env".path}; set +a; exec uvx hass-mcp" ]; }; mcp-server-code-runner = { command = "${pkgs.nodejs_24}/bin/npm"; args = [ "-y" "@iflow-mcp/mcp-server-code-runner" ]; }; }; }; }; }