{
lib,
stdenv,
bun,
makeBinaryWrapper,
modules,
PUBLIC_BASE_URL ? "http://localhost:5173",
}:
stdenv.mkDerivation {
name = "untangled";
src = lib.fileset.toSource {
root = ../.;
fileset = lib.fileset.unions [
../package.json
../bun.lock
../tsconfig.json
../tsconfig.app.json
../tsconfig.node.json
../vite.config.ts
../index.html
../src
../public
];
};
nativeBuildInputs = [makeBinaryWrapper];
buildInputs = [bun stdenv.cc.cc.lib];
inherit PUBLIC_BASE_URL;
dontCheck = true;
configurePhase = ''
runHook preConfigure
cp -R --no-preserve=ownership,mode ${modules} node_modules
find node_modules/.bin -exec chmod 755 {} \;
find node_modules -type d -exec chmod 755 {} \;
substituteInPlace node_modules/.bin/vite \
--replace-fail "/usr/bin/env node" "${bun}/bin/bun --bun"
substituteInPlace node_modules/.bin/tsc \
--replace-fail "/usr/bin/env node" "${bun}/bin/bun --bun"
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
HOME=$TMPDIR ${bun}/bin/bun -b --prefer-offline run build
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp -R ./dist/* $out
cp -R ./node_modules $out
makeBinaryWrapper ${bun}/bin/bun $out/bin/untangled \
--prefix PATH : ${lib.makeBinPath [bun]} \
--add-flags "run --bun --no-install --cwd $out index.js"
runHook postInstall
'';
}