{ lib, stdenv, fetchFromGitHub, bun, nodejs, }: let version = "0.2.1"; # Fixed-output derivation to fetch node_modules with network access nodeModules = stdenv.mkDerivation { name = "opencode-forge-session-title-node-modules-${version}"; src = fetchFromGitHub { owner = "pedropombeiro"; repo = "opencode-plugins"; rev = "opencode-forge-session-title-${version}"; hash = "sha256-47jQaBDfwWIEolVPABG5iH/b+A9UOrauOqMgRGOrxm8="; }; nativeBuildInputs = [ bun nodejs ]; buildPhase = '' export HOME=$TMPDIR export BUN_INSTALL_CACHE_DIR=$TMPDIR/bun-cache # Install from workspace root (no --frozen-lockfile since deps are empty) bun install --no-progress ''; installPhase = '' mkdir -p $out cp -r node_modules $out/ ''; dontFixup = true; outputHashMode = "recursive"; outputHashAlgo = "sha256"; outputHash = "sha256-tKJx5j49wLvfWOyVS+rHgpjEJjrJWt5/xCZYw9erYTs="; }; in stdenv.mkDerivation rec { pname = "opencode-forge-session-title"; inherit version; src = fetchFromGitHub { owner = "pedropombeiro"; repo = "opencode-plugins"; rev = "${pname}-${version}"; hash = "sha256-47jQaBDfwWIEolVPABG5iH/b+A9UOrauOqMgRGOrxm8="; }; nativeBuildInputs = [ bun nodejs ]; postUnpack = '' # Navigate into the package subdirectory cd $sourceRoot/packages/forge-session-title sourceRoot="." ''; configurePhase = '' runHook preConfigure export HOME=$TMPDIR # Copy pre-fetched node_modules from workspace root cd ../.. cp -r ${nodeModules}/node_modules . chmod -R u+w node_modules # Patch shebangs patchShebangs node_modules/.bin # Go back to package directory cd packages/forge-session-title runHook postConfigure ''; buildPhase = '' runHook preBuild # Bundle the TypeScript with Bun mkdir -p dist bun build src/index.ts --outdir dist --target bun --format esm runHook postBuild ''; installPhase = '' runHook preInstall mkdir -p $out/lib/node_modules/${pname} cp -r dist package.json $out/lib/node_modules/${pname}/ cp README.md $out/lib/node_modules/${pname}/ 2>/dev/null || true runHook postInstall ''; meta = { description = "Session title plugin for OpenCode Forge"; homepage = "https://github.com/pedropombeiro/opencode-plugins"; license = lib.licenses.mit; }; }