workadventuresrc: { stdenv , autoPatchelfHook , fetchzip , makeWrapper , nodejs-14_x , workadventure , yarn2nix-moretea , lib , getconf , ... }: let node-abi = "83"; node-grpc-precompiled = fetchzip { name = "node-grpc-precompiled-node-${node-abi}"; url = "https://node-precompiled-binaries.grpc.io/grpc/v1.24.4/node-v${node-abi}-linux-x64-glibc.tar.gz"; sha256 = "119rhhk1jpi2vwyim7byq3agacasc4q25c26wyzfmy8vk2ih6ndj"; }; node-grpc-patched = stdenv.mkDerivation { name = "node-grpc"; buildInputs = [ stdenv.cc.cc ]; nativeBuildInputs = [ autoPatchelfHook ]; dontUnpack = true; # spams console dontStrip = true; installPhase = '' install -D -m755 ${node-grpc-precompiled}/grpc_node.node $out/bin/grpc_node.node ''; }; in yarn2nix-moretea.mkYarnPackage rec { pname = "workadventureback"; version = "unstable"; src = "${workadventuresrc}/back"; # NOTE: this is optional and generated dynamically if omitted yarnNix = ./yarn.nix; nativeBuildInputs = [ makeWrapper ]; pkgConfig = { grpc = { postInstall = '' install -D -m755 ${node-grpc-patched}/bin/grpc_node.node src/node/extension_binary/node-v${node-abi}-linux-x64-glibc/grpc_node.node ''; }; }; dontStrip = true; buildPhase = '' mkdir -p $out ln -s ${workadventure.messages.outPath}/generated deps/${pname}/src/Messages/generated HOME=$TMPDIR yarn --offline run tsc cp -r deps/${pname}/dist $out/dist rm -rf deps/${pname}/{src,node_modules} ''; postInstall = '' # node-abi needs to the abi of the node here # getconf is required for detect-libc (used by node-pre-gyp) to properly # detect current libc makeWrapper '${nodejs-14_x}/bin/node' "$out/bin/${pname}" \ --set NODE_PATH $out/libexec/${pname}/node_modules \ --prefix PATH : ${lib.makeBinPath [ getconf ]} \ --add-flags "$out/dist/server.js" ''; }