mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-19 00:34:23 +01:00
Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
109 lines
2.5 KiB
Nix
109 lines
2.5 KiB
Nix
{ lib, stdenv, stdenvNoCC, bun, fzf, ripgrep, makeBinaryWrapper }:
|
|
args:
|
|
let
|
|
scripts = args.scripts;
|
|
mkModules =
|
|
attrs:
|
|
args.mkNodeModules (
|
|
attrs
|
|
// {
|
|
canonicalizeScript = scripts + "/canonicalize-node-modules.ts";
|
|
normalizeBinsScript = scripts + "/normalize-bun-binaries.ts";
|
|
}
|
|
);
|
|
in
|
|
stdenvNoCC.mkDerivation (finalAttrs: {
|
|
pname = "opencode";
|
|
version = args.version;
|
|
|
|
src = args.src;
|
|
|
|
node_modules = mkModules {
|
|
version = finalAttrs.version;
|
|
src = finalAttrs.src;
|
|
};
|
|
|
|
nativeBuildInputs = [
|
|
bun
|
|
makeBinaryWrapper
|
|
];
|
|
|
|
configurePhase = ''
|
|
runHook preConfigure
|
|
cp -R ${finalAttrs.node_modules}/. .
|
|
runHook postConfigure
|
|
'';
|
|
|
|
env.MODELS_DEV_API_JSON = args.modelsDev;
|
|
env.OPENCODE_VERSION = args.version;
|
|
env.OPENCODE_CHANNEL = "stable";
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
cp ${scripts + "/bun-build.ts"} bun-build.ts
|
|
|
|
substituteInPlace bun-build.ts \
|
|
--replace '@VERSION@' "${finalAttrs.version}"
|
|
|
|
export BUN_COMPILE_TARGET=${args.target}
|
|
bun --bun bun-build.ts
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
dontStrip = true;
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
cd packages/opencode
|
|
if [ ! -f opencode ]; then
|
|
echo "ERROR: opencode binary not found in $(pwd)"
|
|
ls -la
|
|
exit 1
|
|
fi
|
|
if [ ! -f opencode-worker.js ]; then
|
|
echo "ERROR: opencode worker bundle not found in $(pwd)"
|
|
ls -la
|
|
exit 1
|
|
fi
|
|
|
|
install -Dm755 opencode $out/bin/opencode
|
|
install -Dm644 opencode-worker.js $out/bin/opencode-worker.js
|
|
if [ -f opencode-assets.manifest ]; then
|
|
while IFS= read -r asset; do
|
|
[ -z "$asset" ] && continue
|
|
if [ ! -f "$asset" ]; then
|
|
echo "ERROR: referenced asset \"$asset\" missing"
|
|
exit 1
|
|
fi
|
|
install -Dm644 "$asset" "$out/bin/$(basename "$asset")"
|
|
done < opencode-assets.manifest
|
|
fi
|
|
runHook postInstall
|
|
'';
|
|
|
|
postFixup = ''
|
|
wrapProgram "$out/bin/opencode" --prefix PATH : ${lib.makeBinPath [ fzf ripgrep ]}
|
|
'';
|
|
|
|
meta = {
|
|
description = "AI coding agent built for the terminal";
|
|
longDescription = ''
|
|
OpenCode is a terminal-based agent that can build anything.
|
|
It combines a TypeScript/JavaScript core with a Go-based TUI
|
|
to provide an interactive AI coding experience.
|
|
'';
|
|
homepage = "https://github.com/sst/opencode";
|
|
license = lib.licenses.mit;
|
|
platforms = [
|
|
"aarch64-linux"
|
|
"x86_64-linux"
|
|
"aarch64-darwin"
|
|
"x86_64-darwin"
|
|
];
|
|
mainProgram = "opencode";
|
|
};
|
|
})
|