{ lib, src, asar, stdenv, bun, electron_40, gcc, git, gnumake, makeWrapper, node-gyp, nodejs, pkg-config, python3, writableTmpDirAsHomeHook, xdg-utils, }: let common = import ../common.nix { inherit lib stdenv bun nodejs writableTmpDirAsHomeHook ; }; desktopPackageJson = lib.importJSON "${src}/apps/desktop/package.json"; pname = "t3code-desktop"; version = desktopPackageJson.version; in stdenv.mkDerivation (finalAttrs: { inherit pname version; inherit src; strictDeps = true; patches = [./desktop-nix-autoupdate.patch]; nodeModules = common.mkNodeModules { inherit (finalAttrs) pname version src; outputHash = "sha256-vOCDwW/t7CbqHyeDE6Nvnlq0c9NO5T/2h1NJKLERGSs="; filters = [ "." "./apps/desktop" "./apps/server" "./apps/web" "./packages/client-runtime" "./packages/contracts" "./packages/effect-acp" "./packages/effect-codex-app-server" "./packages/shared" ]; impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [ "GIT_PROXY_COMMAND" "SOCKS_SERVER" ]; extraNativeBuildInputs = [ gcc gnumake pkg-config python3 ]; extraEnv = '' export ELECTRON_SKIP_BINARY_DOWNLOAD=1 export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 export npm_config_build_from_source=true ''; }; nativeBuildInputs = [ asar bun gcc gnumake makeWrapper node-gyp nodejs pkg-config python3 writableTmpDirAsHomeHook ]; env = { ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = "1"; npm_config_build_from_source = "true"; npm_config_nodedir = "${nodejs}"; }; configurePhase = common.mkNodePtyConfigurePhase { nodeModules = finalAttrs.nodeModules; chmodBins = true; }; buildPhase = '' runHook preBuild export HOME="$TMPDIR" export BUN_INSTALL_CACHE_DIR="$(mktemp -d)" bun run build:desktop node ${./build-nix-desktop-package.mjs} --output-dir packaged-app cp -R node_modules packaged-app/node_modules chmod -R u+rwX packaged-app/node_modules patchShebangs packaged-app/node_modules find packaged-app/node_modules -xtype l -delete rm -rf packaged-app/node_modules/electron rm -f packaged-app/node_modules/.bin/electron asar pack --unpack='{*.node}' packaged-app packaged-app.asar runHook postBuild ''; installPhase = '' runHook preInstall install -d "$out/share/${pname}/resources" install -Dm644 packaged-app.asar "$out/share/${pname}/resources/app.asar" if [ -d packaged-app.asar.unpacked ]; then cp -R packaged-app.asar.unpacked "$out/share/${pname}/resources/" fi install -Dm644 apps/desktop/resources/icon.png \ "$out/share/icons/hicolor/512x512/apps/t3code.png" makeWrapper ${lib.getExe electron_40} "$out/bin/t3code" \ --set T3CODE_DISABLE_AUTO_UPDATE 1 \ --set-default ELECTRON_FORCE_IS_PACKAGED 1 \ --set-default ELECTRON_IS_DEV 0 \ --prefix PATH : ${lib.makeBinPath [ git xdg-utils ]} \ --add-flags "$out/share/${pname}/resources/app.asar" export out substituteAll ${./t3code.desktop.in} \ "$out/share/applications/t3code.desktop" runHook postInstall ''; meta = { description = "T3 Code desktop app"; homepage = "https://github.com/pingdotgg/t3code"; license = lib.licenses.mit; mainProgram = "t3code"; platforms = ["x86_64-linux"]; sourceProvenance = with lib.sourceTypes; [fromSource]; }; })