{ stdenv, lib, nixosTests, fetchFromGitHub, nodejs, pnpm_10, fetchPnpmDeps, pnpmConfigHook, python3, node-gyp, cctools, xcbuild, libkrb5, libmongocrypt, libpq, makeWrapper, }: stdenv.mkDerivation (finalAttrs: { pname = "n8n"; version = "n8n@2.4.6"; src = fetchFromGitHub { owner = "n8n-io"; repo = "n8n"; tag = finalAttrs.version; hash = "sha256-9oJvi/Q2VwG2sVuWQXCBrAPVV03d89//78bOFN0IwLU="; }; pnpmDeps = fetchPnpmDeps { inherit (finalAttrs) pname version src; pnpm = pnpm_10; fetcherVersion = 3; hash = "sha256-QtusZm9WaLMjfopsX4t2WiiU++j3V/PQHbelKubhMII="; }; nativeBuildInputs = [ pnpmConfigHook pnpm_10 python3 # required to build sqlite3 bindings node-gyp # required to build sqlite3 bindings makeWrapper ] ++ lib.optional stdenv.hostPlatform.isDarwin [cctools xcbuild]; buildInputs = [nodejs libkrb5 libmongocrypt libpq]; buildPhase = '' runHook preBuild pushd node_modules/sqlite3 node-gyp rebuild popd # TODO: use deploy after resolved https://github.com/pnpm/pnpm/issues/5315 pnpm build --filter=n8n runHook postBuild ''; preInstall = '' echo "Removing non-deterministic and unnecessary files" find -type d -name .turbo -exec rm -rf {} + rm node_modules/.modules.yaml rm packages/nodes-base/dist/types/nodes.json CI=true pnpm --ignore-scripts prune --prod find -type f \( -name "*.ts" -o -name "*.map" \) -exec rm -rf {} + rm -rf node_modules/.pnpm/{typescript*,prettier*} shopt -s globstar # https://github.com/pnpm/pnpm/issues/3645 find node_modules packages/**/node_modules -xtype l -delete echo "Removed non-deterministic and unnecessary files" ''; installPhase = '' runHook preInstall mkdir -p $out/{bin,lib/n8n} mv {packages,node_modules} $out/lib/n8n makeWrapper $out/lib/n8n/packages/cli/bin/n8n $out/bin/n8n \ --set N8N_RELEASE_TYPE "stable" runHook postInstall ''; passthru = { tests = nixosTests.n8n; updateScript = ./update.sh; }; # this package has ~80000 files, these take too long and seem to be unnecessary dontStrip = true; dontPatchELF = true; dontRewriteSymlinks = true; meta = { description = "Free and source-available fair-code licensed workflow automation tool"; longDescription = '' Free and source-available fair-code licensed workflow automation tool. Easily automate tasks across different services. ''; homepage = "https://n8n.io"; changelog = "https://github.com/n8n-io/n8n/releases/tag/n8n@${finalAttrs.version}"; maintainers = with lib.maintainers; [gepbird AdrienLemaire sweenu]; license = lib.licenses.sustainableUse; mainProgram = "n8n"; platforms = lib.platforms.unix; }; })