diff --git a/pkgs/by-name/op/openclaw/package.nix b/pkgs/by-name/op/openclaw/package.nix new file mode 100644 index 000000000000..17a30cd8c2af --- /dev/null +++ b/pkgs/by-name/op/openclaw/package.nix @@ -0,0 +1,113 @@ +{ + lib, + stdenvNoCC, + fetchFromGitHub, + fetchPnpmDeps, + pnpmConfigHook, + pnpm_10, + nodejs_22, + makeWrapper, + versionCheckHook, + nix-update-script, + rolldown, + version ? "2026.2.26", +}: +stdenvNoCC.mkDerivation (finalAttrs: { + pname = "openclaw"; + version = version; + + src = fetchFromGitHub { + owner = "openclaw"; + repo = "openclaw"; + tag = "v${finalAttrs.version}"; + hash = "sha256-9kej1aK7j3/FU2X/bN983YqQClfnWfFPvByEkQKlQ4E="; + }; + + pnpmDepsHash = "sha256-Jcj0i/2Mh8Z5lp909Fkotw/isfLTIVMxtJgWwAtctEw="; + + pnpmDeps = fetchPnpmDeps { + inherit (finalAttrs) pname version src; + pnpm = pnpm_10; + fetcherVersion = 3; + hash = finalAttrs.pnpmDepsHash; + }; + + buildInputs = [ rolldown ]; + + nativeBuildInputs = [ + pnpmConfigHook + pnpm_10 + nodejs_22 + makeWrapper + ]; + + preBuild = '' + rm -rf node_modules/rolldown node_modules/@rolldown/pluginutils + mkdir -p node_modules/@rolldown + cp -r ${rolldown}/lib/node_modules/rolldown node_modules/rolldown + cp -r ${rolldown}/lib/node_modules/@rolldown/pluginutils node_modules/@rolldown/pluginutils + chmod -R u+w node_modules/rolldown node_modules/@rolldown/pluginutils + ''; + + buildPhase = '' + runHook preBuild + + pnpm install --frozen-lockfile + pnpm build + pnpm ui:build + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + libdir=$out/lib/openclaw + mkdir -p $libdir $out/bin + + + cp --reflink=auto -r package.json dist node_modules $libdir/ + cp --reflink=auto -r assets docs skills patches extensions $libdir/ 2>/dev/null || true + + rm -f $libdir/node_modules/.pnpm/node_modules/clawdbot \ + $libdir/node_modules/.pnpm/node_modules/moltbot \ + $libdir/node_modules/.pnpm/node_modules/openclaw-control-ui + + makeWrapper ${lib.getExe nodejs_22} $out/bin/openclaw \ + --add-flags "$libdir/dist/index.js" \ + --set NODE_PATH "$libdir/node_modules" + ln -s $out/bin/openclaw $out/bin/moltbot + ln -s $out/bin/openclaw $out/bin/clawdbot + + runHook postInstall + ''; + + nativeInstallCheckInputs = [ versionCheckHook ]; + doInstallCheck = true; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "Self-hosted, open-source AI assistant/agent"; + longDescription = '' + Self-hosted AI assistant/agent connected to all your apps on your Linux + or macOS machine and controlled via your choice of chat app. + + Note: Project is in early/rapid development and uses LLMs to parse untrusted + content while having full access to system by default. + + Parsing untrusted input with LLMs leaves them vulnerable to prompt injection. + + (Originally known as Moltbot and ClawdBot) + ''; + homepage = "https://openclaw.ai"; + changelog = "https://github.com/openclaw/openclaw/releases/tag/${finalAttrs.src.tag}"; + license = lib.licenses.mit; + mainProgram = "openclaw"; + maintainers = with lib.maintainers; [ chrisportela ]; + platforms = with lib.platforms; linux ++ darwin; + knownVulnerabilities = [ + "Project uses LLMs to parse untrusted content, making it vulnerable to prompt injection, while having full access to system by default." + ]; + }; +})