157 lines
4.0 KiB
Nix
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];
|
|
};
|
|
})
|