Files
t3code-flake/packages/server-package.nix
T
2026-04-24 19:55:33 +03:00

157 lines
4.0 KiB
Nix

{
lib,
src,
stdenv,
bun,
makeBinaryWrapper,
node-gyp,
nodejs,
python3,
writableTmpDirAsHomeHook,
}: let
serverPackageJson = lib.importJSON "${src}/apps/server/package.json";
pname = "t3code-server";
version = serverPackageJson.version;
workspacePreparePatched = [
"apps/server/package.json"
"apps/web/package.json"
"packages/client-runtime/package.json"
"packages/contracts/package.json"
"packages/effect-acp/package.json"
"packages/effect-codex-app-server/package.json"
"packages/shared/package.json"
];
in
stdenv.mkDerivation (finalAttrs: {
inherit pname version;
inherit src;
strictDeps = true;
nodeModules = stdenv.mkDerivation {
pname = "${pname}-node-modules";
inherit (finalAttrs) version src;
nativeBuildInputs = [
bun
nodejs
writableTmpDirAsHomeHook
];
dontConfigure = true;
dontFixup = true;
postPatch = ''
for packageJson in ${lib.concatStringsSep " " workspacePreparePatched}; do
substituteInPlace "$packageJson" \
--replace-fail '"prepare": "effect-language-service patch"' '"prepare": "true"'
done
'';
buildPhase = ''
runHook preBuild
export HOME="$TMPDIR"
export BUN_INSTALL_CACHE_DIR="$(mktemp -d)"
bun install \
--frozen-lockfile \
--ignore-scripts \
--linker=hoisted \
--no-progress \
--filter ./apps/server \
--filter ./apps/web \
--filter ./packages/client-runtime \
--filter ./packages/contracts \
--filter ./packages/effect-acp \
--filter ./packages/effect-codex-app-server \
--filter ./packages/shared
runHook postBuild
'';
installPhase = ''
runHook preInstall
cp -R ./node_modules $out
runHook postInstall
'';
outputHash = "sha256-l0BXsHRRFPyWjdxWedAdS8K7VdXSzAfw5c+0caqzT6M=";
outputHashAlgo = "sha256";
outputHashMode = "recursive";
};
nativeBuildInputs = [
bun
makeBinaryWrapper
node-gyp
nodejs
python3
writableTmpDirAsHomeHook
];
configurePhase = ''
runHook preConfigure
mkdir -p ./node_modules
cp -R ${finalAttrs.nodeModules}/. ./node_modules/
chmod -R u+rwX node_modules
patchShebangs node_modules
cd node_modules/node-pty
node-gyp rebuild
node scripts/post-install.js
cd "$NIX_BUILD_TOP/$sourceRoot"
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
export HOME="$TMPDIR"
export BUN_INSTALL_CACHE_DIR="$(mktemp -d)"
bun run --cwd apps/web build
bun run --cwd apps/server build
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p "$out/libexec/t3code/apps/server"
mkdir -p "$out/libexec/t3code/apps"
mkdir -p "$out/libexec/t3code/packages"
cp -R --no-preserve=mode node_modules "$out/libexec/t3code/"
cp -R --no-preserve=mode apps/server/dist "$out/libexec/t3code/apps/server/"
cp -R --no-preserve=mode apps/web "$out/libexec/t3code/apps/"
cp -R --no-preserve=mode packages/client-runtime "$out/libexec/t3code/packages/"
cp -R --no-preserve=mode packages/contracts "$out/libexec/t3code/packages/"
cp -R --no-preserve=mode packages/effect-acp "$out/libexec/t3code/packages/"
cp -R --no-preserve=mode packages/effect-codex-app-server "$out/libexec/t3code/packages/"
cp -R --no-preserve=mode packages/shared "$out/libexec/t3code/packages/"
makeWrapper ${lib.getExe nodejs} "$out/bin/t3" \
--add-flags "$out/libexec/t3code/apps/server/dist/bin.mjs"
runHook postInstall
'';
meta = {
description = "t3 code web/server app";
homepage = "https://github.com/pingdotgg/t3code";
license = lib.licenses.mit;
mainprogram = "t3";
platforms = lib.platforms.unix;
sourceprovenance = with lib.sourcetypes; [fromsource];
};
})