From 428cb0f99173c5456f4b6ac2f3c812c75de7be4a Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Thu, 17 Jul 2025 13:47:59 -0600 Subject: [PATCH] opencode flake --- flakes/opencode/flake.nix | 61 +++++++++++++++++++++++++++++++++++++++ mcp/config.json | 12 -------- mcp/flake.nix | 41 ++++++++++++++++++++++++-- mcp/run_flake.sh | 4 +-- 4 files changed, 100 insertions(+), 18 deletions(-) create mode 100644 flakes/opencode/flake.nix delete mode 100644 mcp/config.json diff --git a/flakes/opencode/flake.nix b/flakes/opencode/flake.nix new file mode 100644 index 0000000..82fd3dd --- /dev/null +++ b/flakes/opencode/flake.nix @@ -0,0 +1,61 @@ +{ + description = "OpenCode MCP dev shell"; + + inputs.nixpkgs.url = "github:NixOS/nixpkgs"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let pkgs = import nixpkgs { inherit system; }; + in { + devShells.default = pkgs.mkShell { + buildInputs = [ + pkgs.bash + pkgs.python313Packages.pyppeteer + pkgs.glib + pkgs.glib.out + pkgs.chromium + pkgs.uv + pkgs.nodejs_22 + ]; + shellHook = '' + export PUPPETEER_EXECUTABLE_PATH=${pkgs.chromium}/bin/chromium + export PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=${pkgs.chromium}/bin/chromium + export PLAYWRIGHT_BROWSERS_PATH=0 + ''; + }; + packages.run = pkgs.writeShellScriptBin "run_flake" '' + opencode --config ./config.json + ''; + packages.config_json = pkgs.writeTextFile { + name = "config.json"; + text = '' + { + "mcpServers": { + "memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"] + }, + "puppeteer": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-puppeteer"] + }, + "playwright": { + "command": "npx", + "args": [ + "-y", + "@playwright/mcp@latest", + "--executable-path", + "${pkgs.chromium}/bin/chromium" + ] + }, + "sequential_thinking": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"] + } + } + } + ''; + }; + }); +} diff --git a/mcp/config.json b/mcp/config.json deleted file mode 100644 index 1a46793..0000000 --- a/mcp/config.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "mcpServers": { - "memory": { - "command": "npx", - "args": ["-y", "@modelcontextprotocol/server-memory"] - }, - "puppeteer": { - "command": "npx", - "args": ["-y", "@modelcontextprotocol/server-puppeteer"] - } - } -} diff --git a/mcp/flake.nix b/mcp/flake.nix index 0f92586..7d93ff4 100644 --- a/mcp/flake.nix +++ b/mcp/flake.nix @@ -7,13 +7,45 @@ outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let - pkgs = nixpkgs.legacyPackages.${system}; + pkgs = import nixpkgs { inherit system; }; + + configJsonText = '' + { + "mcpServers": { + "memory": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-memory"] + }, + "puppeteer": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-puppeteer"] + }, + "playwright": { + "command": "npx", + "args": [ + "-y", + "@playwright/mcp@latest", + "--executable-path", + "${pkgs.chromium}/bin/chromium" + ] + }, + "sequential_thinking": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"] + } + } + } + ''; + + config_json = pkgs.writeText "config.json" configJsonText; + in { devShells.default = pkgs.mkShell { buildInputs = [ pkgs.bash pkgs.python313Packages.pyppeteer pkgs.glib + pkgs.glib.out pkgs.chromium pkgs.uv pkgs.nodejs_22 @@ -22,8 +54,11 @@ export PUPPETEER_EXECUTABLE_PATH=${pkgs.chromium}/bin/chromium ''; }; + packages.run = pkgs.writeShellScriptBin "run_flake" '' - uvx mcpo --port 8008 --config ./config.json + uvx mcpo --port 8008 --config ${config_json} ''; + + packages.config_json = config_json; }); -} \ No newline at end of file +} diff --git a/mcp/run_flake.sh b/mcp/run_flake.sh index f0b5db8..1724587 100755 --- a/mcp/run_flake.sh +++ b/mcp/run_flake.sh @@ -1,4 +1,2 @@ -#!/usr/bin/env bash -# Run MCP server using flake devShell -nix develop .#default --command run_flake +nix run .#run \ No newline at end of file