# This file is generated by running "yarn install" inside your project. # Manual changes might be lost - proceed with caution! { lib, stdenv, nodejs, git, cacert, fetchurl, writeShellScript, writeShellScriptBin }: { src, overrideAttrs ? null, ... } @ args: let yarnBin = fetchurl { url = "https://repo.yarnpkg.com/4.14.1/packages/yarnpkg-cli/bin/yarn.js"; hash = "sha512-ZN9EgFWy03uiadfbU1pGm42pP47xFAwl/XqDwAqPuqyyFMoOAlU7kqLFTO94u2fQtIF/qwIAHfDiT6wPrMw7Qg=="; }; cacheFolder = ".yarn/cache"; lockfile = ./yarn.lock; # Call overrideAttrs on a derivation if a function is provided. optionalOverride = fn: drv: if fn == null then drv else drv.overrideAttrs fn; # Simple stub that provides the global yarn command. yarn = writeShellScriptBin "yarn" '' exec '${nodejs}/bin/node' '${yarnBin}' "$@" ''; # Common attributes between Yarn derivations. drvCommon = { # Make sure the build uses the right Node.js version everywhere. buildInputs = [ nodejs yarn ]; # All dependencies should already be cached. yarn_enable_network = "0"; # Tell node-gyp to use the provided Node.js headers for native code builds. npm_config_nodedir = nodejs; }; # Comman variables that we set in a Nix build, but not in a Nix shell. buildVars = '' # Make Yarn produce friendlier logging for automated builds. export CI=1 # Tell node-pre-gyp to never fetch binaries / always build from source. export npm_config_build_from_source=true ''; # Create derivations for fetching dependencies. cacheDrvs = let in lib.mapAttrs (locator: { filename, hash }: stdenv.mkDerivation { name = lib.strings.sanitizeDerivationName locator; buildInputs = [ yarn git cacert ]; buildCommand = '' cd '${src}' ${buildVars} HOME="$TMP" yarn_enable_global_cache=false yarn_cache_folder="$TMP" \ yarn nixify fetch ${lib.escapeShellArg locator} # Because we change the cache dir, Yarn may generate a different name. mv "$TMP/$(sed 's/-[^-]*\.[^-]*$//' <<< "$outputFilename")"-* $out ''; outputFilename = filename; outputHash = hash; }) cacheEntries; # Create a shell snippet to copy dependencies from a list of derivations. mkCacheBuilderForDrvs = drvs: writeShellScript "collect-yarn-cache" (lib.concatMapStrings (drv: '' cp --reflink=auto ${drv} '${drv.outputFilename}' '') drvs); # Main project derivation. project = stdenv.mkDerivation (drvCommon // { inherit src; name = "@quixos/camino-package-runtime"; configurePhase = '' ${buildVars} # Copy over the Yarn cache. rm -fr '${cacheFolder}' mkdir -p '${cacheFolder}' pushd '${cacheFolder}' > /dev/null source ${mkCacheBuilderForDrvs (lib.attrValues cacheDrvs)} popd > /dev/null # Yarn may need a writable home directory. export yarn_global_folder="$TMP" # Ensure global cache is disabled. Cache must be part of our output. touch .yarnrc.yml sed -i -e '/^enableGlobalCache/d' .yarnrc.yml echo 'enableGlobalCache: false' >> .yarnrc.yml # Some node-gyp calls may call out to npm, which could fail due to an # read-only home dir. export HOME="$TMP" # running preConfigure after the cache is populated allows for # preConfigure to contain substituteInPlace for dependencies as well as the # main project. This is necessary for native bindings that maybe have # hardcoded values. runHook preConfigure # Run normal Yarn install to complete dependency installation. yarn install --immutable --immutable-cache runHook postConfigure ''; buildPhase = '' runHook preBuild runHook postBuild ''; installPhase = '' runHook preInstall # Move the package contents to the output directory. if grep -q '"workspaces"' package.json; then # We can't use `yarn pack` in a workspace setup, because it only # packages the outer workspace. mkdir -p "$out/libexec" mv $PWD "$out/libexec/$name" else # - If the package.json has a `files` field, only files matching those patterns are copied # - Otherwise all files are copied. yarn pack --out package.tgz mkdir -p "$out/libexec/$name" tar xzf package.tgz --directory "$out/libexec/$name" --strip-components=1 cp --reflink=auto .yarnrc* "$out/libexec/$name" cp --reflink=auto ${lockfile} "$out/libexec/$name/yarn.lock" cp --reflink=auto --recursive .yarn "$out/libexec/$name" # Copy the Yarn linker output into the package. cp --reflink=auto --recursive node_modules "$out/libexec/$name" fi cd "$out/libexec/$name" # Invoke a plugin internal command to setup binaries. mkdir -p "$out/bin" yarn nixify install-bin $out/bin # A package with node_modules doesn't need the cache yarn cache clean runHook postInstall ''; passthru = { inherit nodejs; yarn-freestanding = yarn; yarn = writeShellScriptBin "yarn" '' exec '${yarn}/bin/yarn' --cwd '${overriddenProject}/libexec/${overriddenProject.name}' "$@" ''; }; }); overriddenProject = optionalOverride overrideAttrs project; cacheEntries = { "@automerge/automerge@npm:3.3.0" = { filename = "@automerge-automerge-npm-3.3.0-3f6661ca17-74b3a8ef9e.zip"; hash = "sha512-dLOo7548v0B2DomHJ+za1RKOUv0rBTgJRUrnsrhbTsZHw8uipjXNv4MfIxVzGtQl2jenhLeb8TvIbsKKfpKv8g=="; }; "@bufbuild/protobuf@npm:2.12.1" = { filename = "@bufbuild-protobuf-npm-2.12.1-d8afb467b3-2d40cfe4ec.zip"; hash = "sha512-LUDP5Ow7sOPwarLih3HcXcVm6qywVfvok9dWIbBAfQJy1I9ApJCtR97YOe1UFRThr3G7E68CSzrjbvDFbVbdqQ=="; }; "@bufbuild/protoc-gen-es@npm:2.12.1" = { filename = "@bufbuild-protoc-gen-es-npm-2.12.1-6e9387fcb8-0e2805376d.zip"; hash = "sha512-DigFN22Lmj/OD9OdkPZa4dH/vqMSvi2tk2f3xyEqvFHcKleC531iqPhh7De9xtG9MM+sVRDRJCeCzXA/kH4f9Q=="; }; "@bufbuild/protoplugin@npm:2.12.1" = { filename = "@bufbuild-protoplugin-npm-2.12.1-e1aebb80bf-c7b401ab31.zip"; hash = "sha512-x7QBqzHZSsaCXLm75c/3XQXSjuINRnskt6XUKZuaygZmhuo5t6OoRTuLWgGD+qd4HoP8LliAZhgHudMVX3Hr6Q=="; }; "@connectrpc/connect-node@npm:2.1.2" = { filename = "@connectrpc-connect-node-npm-2.1.2-021434d5d5-ba8b0c9384.zip"; hash = "sha512-uosMk4TDgps3eqeoJtwM1Qpgk1J9LscBRgSRKDYzbqlgSitazqQrEEd/i+RWnknd7WbKD8d/X1sCcDXgKeE+qQ=="; }; "@connectrpc/connect@npm:2.1.2" = { filename = "@connectrpc-connect-npm-2.1.2-ab34825de3-4e15000890.zip"; hash = "sha512-ThUACJAjt1Lv1E+pQKWuHh+gDhvrxLoM7ScruTWSDYw7hbd0UOZErUQruMqaJ1sMFxNviWuo7/A2F4Ex2wHWFQ=="; }; "@quixos/camino-datatypes@https://gitea-external.egads.tutti.syntaxblitz.net/quixos/camino-datatypes.git#commit=fa50782559944b88c410e264acadf79266b70b43" = { filename = "@quixos-camino-datatypes-https-08035afa77-0223fd49ac.zip"; hash = "sha512-AiP9SawAVbzD/srTymZRhXZH01djfCteKuHWkkk2wBr66OPF0AaUy3stZyxwEgJrRh18cFcpTc4zcjWsu7mGAg=="; }; "@types/node@npm:24.13.3" = { filename = "@types-node-npm-24.13.3-b512a0bbeb-a5bc08f49b.zip"; hash = "sha512-pbwI9JuVgdzcqQ4CzXcZejx5mECAdmSULlzVFhpVPU0q6AZPfjKUQQ10jX0Ji1wYSL5/pQwG8pxBk6sWvk5Z6w=="; }; "@typescript/vfs@npm:1.6.4" = { filename = "@typescript-vfs-npm-1.6.4-78935c9d3e-acb9de42f2.zip"; hash = "sha512-rLneQvI/2j9149eQC6EG7zI6L0588OSpTbtFfibTU8pjuzUZPtGjL8hzPzrlkJlhKykLBr1iIWlIYb65v7YvYg=="; }; "debug@npm:4.4.3" = { filename = "debug-npm-4.4.3-0105c6123a-d79136ec6c.zip"; hash = "sha512-15E27GyD7L79D2pVk9pqnJHsTX3cS1TIg9bnHsmsy19noaXpbQCjKBlrW1yG02XpjYo6cIVqrxa057GYXmf1pg=="; }; "ms@npm:2.1.3" = { filename = "ms-npm-2.1.3-81ff3cfac1-d924b57e73.zip"; hash = "sha512-2SS1fnMSs7Y60h/Fs9wK9eeNYaH8fPtUV+2vJjJr9ivlMHzIf/toYu8cKzOwIzzbXU8BxMlYzA1mCUi2Wih6SA=="; }; "typescript@npm:5.4.5" = { filename = "typescript-npm-5.4.5-8568a42232-2954022ada.zip"; hash = "sha512-KVQCKto0D9PWqeK45TT2XVfJLV85iaJjdUp4q6VJ9+ZSmswZIZE1YKS4FsRtzn30pNKfnxGj3A1CE7t20EMlHg=="; }; "typescript@npm:5.9.3" = { filename = "typescript-npm-5.9.3-48715be868-6bd7552ce3.zip"; hash = "sha512-a9dVLOOfl+cR21qgSPb5mVtT8cUvfYZnwavcFwDGinajCPV5zTCc5rU2Rt606aG+fIE6k7qvCijM1TajAnDhxQ=="; }; "typescript@patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=5adc0c" = { filename = "typescript-patch-6e159bfddb-db2ad2a16c.zip"; hash = "sha512-2yrSoWyoKfUEJ+6x2hVeekXlmO7HsIbYtOi6ROWiNfdY5gbWgcZpkiMNP8O4mVhl5f0LIqLJVIbQsyAPgwcuyQ=="; }; "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" = { filename = "typescript-patch-6fda4d02cf-ad09fdf7a7.zip"; hash = "sha512-rQn996dWgU3OZbxgwWV7QNREUTRoWO6iMOEPLpWiidkYO24y5cEelazAzMIUtPNiidytS/GIawrbhNcR0zakMA=="; }; "undici-types@npm:7.18.2" = { filename = "undici-types-npm-7.18.2-3e6d69d829-85a7918911.zip"; hash = "sha512-haeRiRE6I4lZ16ZHNo5PfFVZw6QE69uPxEiBRc6UJvzYIlKoRKMCeY38Djfm+xeP9IHtA7xMr2NMV1fZ70NSHQ=="; }; }; in overriddenProject