opencode{,-desktop}: 1.14.35 -> 1.14.48 (#519007)

This commit is contained in:
Adam C. Stephens
2026-05-11 18:13:20 +00:00
committed by GitHub
2 changed files with 99 additions and 67 deletions
+96 -64
View File
@@ -1,35 +1,22 @@
{
bun,
cargo,
cargo-tauri,
dbus,
glib,
glib-networking,
gst_all_1,
gtk4,
jq,
copyDesktopItems,
electron_41,
lib,
libappindicator,
librsvg,
libsoup_3,
makeBinaryWrapper,
models-dev,
nodejs,
opencode,
openssl,
pkg-config,
rustPlatform,
rustc,
stdenvNoCC,
webkitgtk_4_1,
wrapGAppsHook4,
writableTmpDirAsHomeHook,
commandLineArgs ? "",
}:
let
gtk = gtk4;
libsoup = libsoup_3;
webkitgtk = webkitgtk_4_1;
electron = electron_41;
in
rustPlatform.buildRustPackage (finalAttrs: {
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "opencode-desktop";
inherit (opencode)
version
@@ -38,55 +25,100 @@ rustPlatform.buildRustPackage (finalAttrs: {
patches
;
cargoRoot = "packages/desktop/src-tauri";
cargoHash = "sha256-WI48iYdxmizF1YgOQtk05dvrBEMqFjHP9s3+zBFAat0=";
buildAndTestSubdir = finalAttrs.cargoRoot;
nativeBuildInputs = [
pkg-config
cargo-tauri.hook
bun
nodejs # for patchShebangs node_modules
cargo
rustc
jq
makeBinaryWrapper
]
++ lib.optionals stdenvNoCC.hostPlatform.isLinux [ wrapGAppsHook4 ];
buildInputs = (
lib.optionals stdenvNoCC.isLinux [
dbus
glib
glib-networking
gtk
libappindicator
librsvg
libsoup
openssl
webkitgtk
]
++ (with gst_all_1; [
gst-plugins-bad # fakevideosink
gst-plugins-base # appsink and autoaudiosink
gst-plugins-good # autoaudiosink
])
);
tauriBuildFlags = [
"--config"
"tauri.conf.json"
"--config"
"tauri.prod.conf.json"
"--no-sign"
writableTmpDirAsHomeHook
copyDesktopItems
];
preBuild = ''
cp -a ${finalAttrs.node_modules}/{node_modules,packages} .
chmod -R u+w node_modules packages
patchShebangs node_modules packages/desktop/node_modules
install -D ${lib.getExe opencode} \
packages/desktop/src-tauri/sidecars/opencode-cli-${stdenvNoCC.hostPlatform.rust.rustcTarget}
strictDeps = true;
env = {
ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
OPENCODE_CHANNEL = "prod";
MODELS_DEV_API_JSON = "${models-dev}/dist/_api.json";
OPENCODE_DISABLE_MODELS_FETCH = true;
};
configurePhase = ''
runHook preConfigure
cp -R ${finalAttrs.node_modules}/. .
patchShebangs node_modules
patchShebangs packages/*/node_modules
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
# Build the opencode node bundle (needed by the desktop sidecar)
cd packages/opencode
bun --bun ./script/build-node.ts --skip-install
cd ../..
# Prepare desktop app
cd packages/desktop
# Copy prod icons
cp -R icons/prod resources/icons
# Build with electron-vite
node_modules/.bin/electron-vite build
# Copy opencode CLI as sidecar
sidecar_name="opencode-cli"
install -D ${lib.getExe opencode} "resources/$sidecar_name"
# Package with electron-builder (unpacked directory mode)
cp -r "${electron.dist}" $HOME/.electron-dist
chmod -R u+w $HOME/.electron-dist
node_modules/.bin/electron-builder --dir \
--config=electron-builder.config.ts \
--config.electronDist="$HOME/.electron-dist" \
--config.electronVersion=${electron.version}
cd ../..
runHook postBuild
'';
installPhase = ''
runHook preInstall
''
+ lib.optionalString stdenvNoCC.hostPlatform.isDarwin ''
mkdir -p $out/Applications
mv packages/desktop/dist/mac-*/OpenCode.app "$out/Applications/OpenCode.app"
''
+ lib.optionalString stdenvNoCC.hostPlatform.isLinux ''
mkdir -p $out/opt/opencode-desktop
${
if stdenvNoCC.hostPlatform.isAarch64 then
''
appDir="packages/desktop/dist/linux-arm64-unpacked"
''
else
''
appDir="packages/desktop/dist/linux-unpacked"
''
}
[ -d "$appDir" ] || { echo "no electron-builder output dir found: $appDir"; exit 1; }
cp -r "$appDir/resources" $out/opt/opencode-desktop/
install -Dm644 packages/desktop/resources/icons/icon.png $out/share/icons/opencode-desktop.png
makeWrapper ${lib.getExe electron} $out/bin/opencode-desktop \
--inherit-argv0 \
--add-flags $out/opt/opencode-desktop/resources/app.asar \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true --wayland-text-input-version=3}}" \
--add-flags ${lib.escapeShellArg commandLineArgs}
''
+ ''
runHook postInstall
'';
meta = {
+3 -3
View File
@@ -16,13 +16,13 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "opencode";
version = "1.14.35";
version = "1.14.48";
src = fetchFromGitHub {
owner = "anomalyco";
repo = "opencode";
tag = "v${finalAttrs.version}";
hash = "sha256-i2Ct4QC0Tf+UWNWAQoW/IPtRKrVyZSC1/FTzQNpou2g=";
hash = "sha256-gyybqabTco+5ZeWv4lCX8t/R9Jm3tYsA8wVvkrxkEYQ=";
};
node_modules = stdenvNoCC.mkDerivation {
@@ -75,7 +75,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
# NOTE: Required else we get errors that our fixed-output derivation references store paths
dontFixup = true;
outputHash = "sha256-JwkXBlXS4AG0rquzdOSE5Atzm0Hm9UVEBmDMAnTlbyg=";
outputHash = "sha256-94uXrhyGqW016U6LPE/xIfZGoDOzyUto5DyQrYYePds=";
outputHashAlgo = "sha256";
outputHashMode = "recursive";
};