| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- {
- lib,
- stdenvNoCC,
- callPackage,
- bun,
- sysctl,
- makeBinaryWrapper,
- models-dev,
- ripgrep,
- installShellFiles,
- versionCheckHook,
- writableTmpDirAsHomeHook,
- node_modules ? callPackage ./node-modules.nix { },
- }:
- stdenvNoCC.mkDerivation (finalAttrs: {
- pname = "opencode";
- inherit (node_modules) version src;
- inherit node_modules;
- nativeBuildInputs = [
- bun
- installShellFiles
- makeBinaryWrapper
- models-dev
- writableTmpDirAsHomeHook
- ];
- configurePhase = ''
- runHook preConfigure
- cp -R ${finalAttrs.node_modules}/. .
- runHook postConfigure
- '';
- env.MODELS_DEV_API_JSON = "${models-dev}/dist/_api.json";
- env.OPENCODE_VERSION = finalAttrs.version;
- env.OPENCODE_CHANNEL = "local";
- buildPhase = ''
- runHook preBuild
- cd ./packages/opencode
- bun --bun ./script/build.ts --single --skip-install
- bun --bun ./script/schema.ts schema.json
- runHook postBuild
- '';
- installPhase = ''
- runHook preInstall
- install -Dm755 dist/opencode-*/bin/opencode $out/bin/opencode
- install -Dm644 schema.json $out/share/opencode/schema.json
- wrapProgram $out/bin/opencode \
- --prefix PATH : ${
- lib.makeBinPath (
- [
- ripgrep
- ]
- # bun runs sysctl to detect if dunning on rosetta2
- ++ lib.optional stdenvNoCC.hostPlatform.isDarwin sysctl
- )
- }
- runHook postInstall
- '';
- postInstall = lib.optionalString (stdenvNoCC.buildPlatform.canExecute stdenvNoCC.hostPlatform) ''
- # trick yargs into also generating zsh completions
- installShellCompletion --cmd opencode \
- --bash <($out/bin/opencode completion) \
- --zsh <(SHELL=/bin/zsh $out/bin/opencode completion)
- '';
- nativeInstallCheckInputs = [
- versionCheckHook
- writableTmpDirAsHomeHook
- ];
- doInstallCheck = true;
- versionCheckKeepEnvironment = [ "HOME" ];
- versionCheckProgramArg = "--version";
- passthru = {
- jsonschema = "${placeholder "out"}/share/opencode/schema.json";
- };
- meta = {
- description = "The open source coding agent";
- homepage = "https://opencode.ai/";
- license = lib.licenses.mit;
- mainProgram = "opencode";
- inherit (node_modules.meta) platforms;
- };
- })
|