Download nix/desktop.nix from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 4.28 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/nix/desktop.nix
- Command line
-
hf download hf://SaylorTwift/opencode/nix/desktop.nix
-
curl -L -o desktop.nix https://huggingface.co/SaylorTwift/opencode/resolve/main/nix/desktop.nix
4.28 kB
| { | |
| lib, | |
| stdenv, | |
| bun, | |
| nodejs, | |
| darwin, | |
| electron_41, | |
| makeWrapper, | |
| writableTmpDirAsHomeHook, | |
| autoPatchelfHook, | |
| copyDesktopItems, | |
| makeDesktopItem, | |
| opencode, | |
| }: | |
| let | |
| electron = electron_41; | |
| in | |
| stdenv.mkDerivation (finalAttrs: { | |
| pname = "opencode-desktop"; | |
| inherit (opencode) | |
| version | |
| src | |
| node_modules | |
| patches | |
| ; | |
| nativeBuildInputs = [ | |
| bun | |
| nodejs | |
| makeWrapper | |
| writableTmpDirAsHomeHook | |
| ] | |
| ++ lib.optionals stdenv.hostPlatform.isLinux [ | |
| autoPatchelfHook | |
| copyDesktopItems | |
| ] | |
| ++ lib.optionals stdenv.hostPlatform.isDarwin [ | |
| # Ad-hoc sign the .app: --config.mac.identity=null below skips signing. | |
| darwin.autoSignDarwinBinariesHook | |
| ]; | |
| buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ | |
| (lib.getLib stdenv.cc.cc) | |
| ]; | |
| desktopItems = lib.optional stdenv.hostPlatform.isLinux (makeDesktopItem { | |
| name = "ai.opencode.desktop"; | |
| desktopName = "OpenCode"; | |
| exec = "opencode-desktop %U"; | |
| icon = "ai.opencode.desktop"; | |
| # Electron 41 derives X11 WM_CLASS from app.name. | |
| startupWMClass = "OpenCode"; | |
| categories = [ "Development" ]; | |
| }); | |
| env = opencode.env // { | |
| ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; | |
| }; | |
| postPatch = | |
| # NOTE: Relax Bun version check to be a warning instead of an error | |
| '' | |
| substituteInPlace packages/script/src/index.ts \ | |
| --replace-fail 'throw new Error(`This script requires bun@''${expectedBunVersionRange}' \ | |
| 'console.warn(`Warning: This script requires bun@''${expectedBunVersionRange}' | |
| '' | |
| # https://github.com/electron/electron/issues/31121 | |
| # mac builds use a .app bundle which doesnt have this issue | |
| + lib.optionalString stdenv.isLinux '' | |
| BASE_PATH=packages/desktop | |
| FILES=(src/main/windows.ts) | |
| for file in "''${FILES[@]}"; do | |
| substituteInPlace $BASE_PATH/$file \ | |
| --replace-fail "process.resourcesPath" "'$out/opt/opencode-desktop/resources'" | |
| done | |
| ''; | |
| preBuild = '' | |
| cp -r "${electron.dist}" $HOME/.electron-dist | |
| chmod -R u+w $HOME/.electron-dist | |
| cp -R ${finalAttrs.node_modules}/. . | |
| patchShebangs node_modules | |
| patchShebangs packages/*/node_modules | |
| ''; | |
| buildPhase = '' | |
| runHook preBuild | |
| cd packages/desktop | |
| bun run build | |
| npx electron-builder --dir \ | |
| --config electron-builder.config.ts \ | |
| --config.mac.identity=null \ | |
| --config.electronDist="$HOME/.electron-dist" | |
| runHook postBuild | |
| ''; | |
| installPhase = '' | |
| runHook preInstall | |
| '' | |
| + lib.optionalString stdenv.hostPlatform.isDarwin '' | |
| mkdir -p $out/Applications | |
| mv dist/mac*/*.app $out/Applications | |
| makeWrapper "$out/Applications/OpenCode.app/Contents/MacOS/OpenCode" $out/bin/opencode-desktop | |
| '' | |
| + lib.optionalString stdenv.hostPlatform.isLinux '' | |
| mkdir -p $out/opt/opencode-desktop | |
| cp -r dist/linux*-unpacked/{resources,LICENSE*} $out/opt/opencode-desktop | |
| install -Dm644 resources/icons/32x32.png \ | |
| "$out/share/icons/hicolor/32x32/apps/ai.opencode.desktop.png" | |
| install -Dm644 resources/icons/64x64.png \ | |
| "$out/share/icons/hicolor/64x64/apps/ai.opencode.desktop.png" | |
| install -Dm644 resources/icons/128x128.png \ | |
| "$out/share/icons/hicolor/128x128/apps/ai.opencode.desktop.png" | |
| install -Dm644 resources/icons/128x128@2x.png \ | |
| "$out/share/icons/hicolor/256x256/apps/ai.opencode.desktop.png" | |
| install -Dm644 resources/icons/icon.png \ | |
| "$out/share/icons/hicolor/512x512/apps/ai.opencode.desktop.png" | |
| install -Dm644 resources/ai.opencode.desktop.metainfo.xml \ | |
| "$out/share/metainfo/ai.opencode.desktop.metainfo.xml" | |
| makeWrapper ${lib.getExe electron} $out/bin/opencode-desktop \ | |
| --inherit-argv0 \ | |
| --set ELECTRON_FORCE_IS_PACKAGED 1 \ | |
| --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}}" | |
| '' | |
| + '' | |
| runHook postInstall | |
| ''; | |
| autoPatchelfIgnoreMissingDeps = [ | |
| "libc.musl-x86_64.so.1" | |
| ]; | |
| meta = { | |
| description = "OpenCode Desktop App"; | |
| mainProgram = "opencode-desktop"; | |
| inherit (opencode.meta) homepage license platforms; | |
| }; | |
| }) | |