diff --git a/default.nix b/default.nix index 153421c..be339c6 100644 --- a/default.nix +++ b/default.nix @@ -8,7 +8,8 @@ }: let claudeCode = pkgs.callPackage "${sources.claude-code-nix}/package.nix" { }; - serena = pkgs.callPackage ./pkgs/serena/package.nix { }; + oraios-pywebview = pkgs.callPackage ./pkgs/oraios-pywebview/package.nix { }; + serena = pkgs.callPackage ./pkgs/serena/package.nix { inherit oraios-pywebview; }; nixosCfg = import "${sources.nixpkgs}/nixos/lib/eval-config.nix" { inherit system; @@ -30,6 +31,21 @@ let memorySize = 4096; cores = 4; + # TODO: Port-forward the serena dashboard + # forwardPorts = [ + # { + # from = "guest"; + # guest = { + # address = "10.0.2.15"; + # port = 24282; + # }; + # host = { + # address = "127.0.0.1"; + # port = 24282; + # }; + # } + # ]; + sharedDirectories = { workspace = { source = ''"$WORKSPACE_DIR"''; @@ -86,7 +102,9 @@ let just yaml-language-server typescript-language-server - # fsautocomplete + fsautocomplete + nixd + python3 # sqlfluff ]; @@ -107,6 +125,12 @@ let # fi cd /workspace 2>/dev/null || true + + # Register serena as an MCP server if not already configured + if ! claude mcp get serena &>/dev/null; then + claude mcp add serena -- ${serena}/bin/serena start-mcp-server --context=claude-code --project-from-cwd + fi + exec claude "''${args[@]}" ''; diff --git a/modules/serena-mcp.nix b/modules/serena-mcp.nix deleted file mode 100644 index 6f18d07..0000000 --- a/modules/serena-mcp.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ pkgs, ... }: - -let - serena = pkgs.callPackage ../pkgs/serena/package.nix { }; -in -{ - programs.claude-code = { - enable = true; - mcpServers = { - serena = { - command = "${serena}/bin/serena-mcp-server"; - type = "stdio"; - args = [ - "--context=claude-code" - "--project-from-cwd" - ]; - }; - }; - }; -} diff --git a/pkgs/oraios-pywebview/package.nix b/pkgs/oraios-pywebview/package.nix new file mode 100644 index 0000000..afd74fa --- /dev/null +++ b/pkgs/oraios-pywebview/package.nix @@ -0,0 +1,39 @@ +{ + lib, + python3Packages, + fetchFromGitHub, +}: + +python3Packages.buildPythonPackage rec { + pname = "oraios-pywebview"; + version = "6.2"; + pyproject = true; + + src = fetchFromGitHub { + owner = "oraios"; + repo = "pywebview"; + tag = "v${version}"; + hash = "sha256-i99O0UuyfepQHBTpeeL07TY7AbygP+/XFxX3Q8JluIU="; + }; + + build-system = [ python3Packages.setuptools-scm ]; + + env.SETUPTOOLS_SCM_PRETEND_VERSION = version; + + dependencies = with python3Packages; [ + bottle + pyside6 + proxy-tools + qtpy + six + typing-extensions + ]; + + pythonImportsCheck = [ "webview" ]; + + meta = { + description = "Lightweight cross-platform wrapper around a webview (oraios fork)"; + homepage = "https://github.com/oraios/pywebview"; + license = lib.licenses.bsd3; + }; +} diff --git a/pkgs/serena/package.nix b/pkgs/serena/package.nix index 23cdf32..dbbcf31 100644 --- a/pkgs/serena/package.nix +++ b/pkgs/serena/package.nix @@ -4,6 +4,7 @@ fetchFromGitHub, pyright, fortls, + oraios-pywebview, }: # TODO: We can just get this from nixpkgs when merged: https://github.com/NixOS/nixpkgs/pull/506300 python3Packages.buildPythonApplication (finalAttrs: { @@ -33,10 +34,6 @@ python3Packages.buildPythonApplication (finalAttrs: { # Remove fortls from Python dependencies and make it available at runtime instead substituteInPlace pyproject.toml \ --replace-fail '"fortls==3.2.2",' "" - - # Remove oraios-pywebview (custom fork, not in nixpkgs; only needed for GUI features) - substituteInPlace pyproject.toml \ - --replace-fail '"oraios-pywebview==6.2",' "" ''; build-system = [ python3Packages.hatchling ]; @@ -47,7 +44,9 @@ python3Packages.buildPythonApplication (finalAttrs: { "--prefix PATH : ${lib.makeBinPath [ pyright fortls ]}" ]; - dependencies = with python3Packages; [ + dependencies = [ + oraios-pywebview + ] ++ (with python3Packages; [ anthropic docstring-parser beautifulsoup4 @@ -69,7 +68,7 @@ python3Packages.buildPythonApplication (finalAttrs: { tiktoken tqdm types-pyyaml - ]; + ]); optional-dependencies = with python3Packages; { google = [ google-genai ];