Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1# Do not use overrides in this file to add `meta.mainProgram` to packages. Use `./main-programs.nix`
2# instead.
3{ pkgs, nodejs }:
4
5let
6 inherit (pkgs)
7 stdenv
8 lib
9 callPackage
10 fetchFromGitHub
11 fetchurl
12 fetchpatch
13 nixosTests;
14
15 since = version: lib.versionAtLeast nodejs.version version;
16 before = version: lib.versionOlder nodejs.version version;
17in
18
19final: prev: {
20 "@angular/cli" = prev."@angular/cli".override {
21 prePatch = ''
22 export NG_CLI_ANALYTICS=false
23 '';
24 };
25
26 "@electron-forge/cli" = prev."@electron-forge/cli".override {
27 buildInputs = [ final.node-gyp-build ];
28 };
29
30 "@forge/cli" = prev."@forge/cli".override {
31 nativeBuildInputs = [ pkgs.pkg-config ];
32 buildInputs = with pkgs; [
33 libsecret
34 final.node-gyp-build
35 final.node-pre-gyp
36 ] ++ lib.optionals stdenv.isDarwin [
37 darwin.apple_sdk.frameworks.AppKit
38 darwin.apple_sdk.frameworks.Security
39 ];
40 };
41
42 "@medable/mdctl-cli" = prev."@medable/mdctl-cli".override (oldAttrs: {
43 nativeBuildInputs = with pkgs; with darwin.apple_sdk.frameworks; [
44 glib
45 libsecret
46 pkg-config
47 ] ++ lib.optionals stdenv.isDarwin [
48 AppKit
49 Security
50 ];
51 buildInputs = [
52 final.node-gyp-build
53 final.node-pre-gyp
54 nodejs
55 ];
56
57 meta = oldAttrs.meta // { broken = since "16"; };
58 });
59 mdctl-cli = final."@medable/mdctl-cli";
60
61 autoprefixer = prev.autoprefixer.override {
62 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
63 postInstall = ''
64 wrapProgram "$out/bin/autoprefixer" \
65 --prefix NODE_PATH : ${final.postcss}/lib/node_modules
66 '';
67 passthru.tests = {
68 simple-execution = callPackage ./package-tests/autoprefixer.nix { inherit (final) autoprefixer; };
69 };
70 };
71
72 aws-azure-login = prev.aws-azure-login.override (oldAttrs: {
73 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
74 prePatch = ''
75 export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1
76 '';
77 postInstall = ''
78 wrapProgram $out/bin/aws-azure-login \
79 --set PUPPETEER_EXECUTABLE_PATH ${pkgs.chromium}/bin/chromium
80 '';
81 meta = oldAttrs.meta // { platforms = lib.platforms.linux; };
82 });
83
84 balanceofsatoshis = prev.balanceofsatoshis.override {
85 nativeBuildInputs = [ pkgs.installShellFiles ];
86 postInstall = ''
87 installShellCompletion --cmd bos\
88 --bash <($out/bin/bos completion bash)\
89 --zsh <($out/bin/bos completion zsh)\
90 --fish <($out/bin/bos completion fish)
91 '';
92 };
93
94 bitwarden-cli = prev."@bitwarden/cli".override {
95 name = "bitwarden-cli";
96 nativeBuildInputs = with pkgs; [
97 pkg-config
98 ] ++ lib.optionals stdenv.isDarwin [
99 darwin.apple_sdk.frameworks.CoreText
100 ];
101 buildInputs = with pkgs; [
102 pixman
103 cairo
104 pango
105 giflib
106 ];
107 };
108
109 bower2nix = prev.bower2nix.override {
110 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
111 postInstall = ''
112 for prog in bower2nix fetch-bower; do
113 wrapProgram "$out/bin/$prog" --prefix PATH : ${lib.makeBinPath [ pkgs.git pkgs.nix ]}
114 done
115 '';
116 };
117
118 carbon-now-cli = prev.carbon-now-cli.override {
119 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
120 prePatch = ''
121 export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1
122 '';
123 postInstall = ''
124 wrapProgram $out/bin/carbon-now \
125 --set PUPPETEER_EXECUTABLE_PATH ${pkgs.chromium.outPath}/bin/chromium
126 '';
127 };
128
129 coc-imselect = prev.coc-imselect.override (oldAttrs: {
130 meta = oldAttrs.meta // { broken = since "10"; };
131 });
132
133 dat = prev.dat.override (oldAttrs: {
134 buildInputs = [ final.node-gyp-build pkgs.libtool pkgs.autoconf pkgs.automake ];
135 meta = oldAttrs.meta // { broken = since "12"; };
136 });
137
138 eask = prev."@emacs-eask/cli".override {
139 name = "eask";
140 };
141
142 expo-cli = prev."expo-cli".override (oldAttrs: {
143 # The traveling-fastlane-darwin optional dependency aborts build on Linux.
144 dependencies = builtins.filter (d: d.packageName != "@expo/traveling-fastlane-${if stdenv.isLinux then "darwin" else "linux"}") oldAttrs.dependencies;
145 });
146
147 fast-cli = prev.fast-cli.override {
148 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
149 prePatch = ''
150 export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1
151 '';
152 postInstall = ''
153 wrapProgram $out/bin/fast \
154 --set PUPPETEER_EXECUTABLE_PATH ${pkgs.chromium.outPath}/bin/chromium
155 '';
156 };
157
158 fauna-shell = prev.fauna-shell.override {
159 # printReleaseNotes just pulls them from GitHub which is not allowed in sandbox
160 preRebuild = ''
161 sed -i 's|"node ./tools/printReleaseNotes"|"true"|' node_modules/faunadb/package.json
162 '';
163 };
164
165 firebase-tools = prev.firebase-tools.override {
166 nativeBuildInputs = lib.optionals stdenv.isDarwin [ pkgs.xcbuild ];
167 };
168
169 flood = prev.flood.override {
170 buildInputs = [ final.node-pre-gyp ];
171 };
172
173 git-ssb = prev.git-ssb.override (oldAttrs: {
174 buildInputs = [ final.node-gyp-build ];
175 meta = oldAttrs.meta // { broken = since "10"; };
176 });
177
178 graphite-cli = prev."@withgraphite/graphite-cli".override {
179 name = "graphite-cli";
180 nativeBuildInputs = [ pkgs.installShellFiles ];
181 # 'gt completion' auto-detects zshell from environment variables:
182 # https://github.com/yargs/yargs/blob/2b6ba3139396b2e623aed404293f467f16590039/lib/completion.ts#L45
183 postInstall = ''
184 installShellCompletion --cmd gt \
185 --bash <($out/bin/gt completion) \
186 --zsh <(ZSH_NAME=zsh $out/bin/gt completion)
187 '';
188 };
189
190 graphql-language-service-cli = prev.graphql-language-service-cli.override {
191 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
192 postInstall = ''
193 wrapProgram "$out/bin/graphql-lsp" \
194 --prefix NODE_PATH : ${final.graphql}/lib/node_modules
195 '';
196 };
197
198 hsd = prev.hsd.override {
199 buildInputs = [ final.node-gyp-build pkgs.unbound ];
200 };
201
202 ijavascript = prev.ijavascript.override (oldAttrs: {
203 preRebuild = ''
204 export npm_config_zmq_external=true
205 '';
206 buildInputs = oldAttrs.buildInputs ++ [ final.node-gyp-build pkgs.zeromq ];
207 });
208
209 insect = prev.insect.override (oldAttrs: {
210 nativeBuildInputs = oldAttrs.nativeBuildInputs or [] ++ [ pkgs.psc-package final.pulp ];
211 });
212
213 intelephense = prev.intelephense.override (oldAttrs: {
214 meta = oldAttrs.meta // { license = lib.licenses.unfree; };
215 });
216
217 joplin = prev.joplin.override {
218 nativeBuildInputs = [
219 pkgs.pkg-config
220 ] ++ lib.optionals stdenv.isDarwin [
221 pkgs.xcbuild
222 ];
223 buildInputs = with pkgs; [
224 # required by sharp
225 # https://sharp.pixelplumbing.com/install
226 vips
227
228 libsecret
229 final.node-gyp-build
230 final.node-pre-gyp
231
232 pixman
233 cairo
234 pango
235 ] ++ lib.optionals stdenv.isDarwin [
236 darwin.apple_sdk.frameworks.AppKit
237 darwin.apple_sdk.frameworks.Security
238 ];
239 };
240
241 jsonplaceholder = prev.jsonplaceholder.override {
242 buildInputs = [ nodejs ];
243 postInstall = ''
244 exe=$out/bin/jsonplaceholder
245 mkdir -p $out/bin
246 cat >$exe <<EOF
247 #!${pkgs.runtimeShell}
248 exec -a jsonplaceholder ${nodejs}/bin/node $out/lib/node_modules/jsonplaceholder/index.js
249 EOF
250 chmod a+x $exe
251 '';
252 };
253
254 keyoxide = prev.keyoxide.override {
255 nativeBuildInputs = [ pkgs.pkg-config ];
256 buildInputs = with pkgs; [
257 pixman
258 cairo
259 pango
260 ] ++ lib.optionals stdenv.isDarwin [
261 darwin.apple_sdk.frameworks.CoreText
262 ];
263 };
264
265 makam = prev.makam.override {
266 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
267 postFixup = ''
268 wrapProgram "$out/bin/makam" --prefix PATH : ${lib.makeBinPath [ nodejs ]}
269 ${lib.optionalString stdenv.isLinux "patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-linux-x86-64.so.2 \"$out/lib/node_modules/makam/makam-bin-linux64\""}
270 '';
271 };
272
273 mermaid-cli = prev."@mermaid-js/mermaid-cli".override (
274 if stdenv.isDarwin
275 then {}
276 else {
277 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
278 prePatch = ''
279 export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1
280 '';
281 postInstall = ''
282 wrapProgram $out/bin/mmdc \
283 --set PUPPETEER_EXECUTABLE_PATH ${pkgs.chromium.outPath}/bin/chromium
284 '';
285 });
286
287 near-cli = prev.near-cli.override {
288 nativeBuildInputs = with pkgs; [
289 libusb1
290 final.prebuild-install
291 final.node-gyp-build
292 pkg-config
293 ];
294 };
295
296 node-gyp = prev.node-gyp.override {
297 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
298 # Teach node-gyp to use nodejs headers locally rather that download them form https://nodejs.org.
299 # This is important when build nodejs packages in sandbox.
300 postInstall = ''
301 wrapProgram "$out/bin/node-gyp" \
302 --set npm_config_nodedir ${nodejs}
303 '';
304 };
305
306 node-inspector = prev.node-inspector.override (oldAttrs: {
307 buildInputs = [ final.node-pre-gyp ];
308 meta = oldAttrs.meta // { broken = since "10"; };
309 });
310
311 node-red = prev.node-red.override {
312 buildInputs = [ final.node-pre-gyp ];
313 };
314
315 node2nix = prev.node2nix.override {
316 # Get latest commit for misc fixes
317 src = fetchFromGitHub {
318 owner = "svanderburg";
319 repo = "node2nix";
320 rev = "315e1b85a6761152f57a41ccea5e2570981ec670";
321 sha256 = "sha256-8OxTOkwBPcnjyhXhxQEDd8tiaQoHt91zUJX5Ka+IXco=";
322 };
323 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
324 postInstall = let
325 patches = [
326 # Needed to fix packages with DOS line-endings after above patch - PR svanderburg/node2nix#314
327 (fetchpatch {
328 name = "convert-crlf-for-script-bin-files.patch";
329 url = "https://github.com/svanderburg/node2nix/commit/91aa511fe7107938b0409a02ab8c457a6de2d8ca.patch";
330 hash = "sha256-ISiKYkur/o8enKDzJ8mQndkkSC4yrTNlheqyH+LiXlU=";
331 })
332 # fix nodejs attr names
333 (fetchpatch {
334 url = "https://github.com/svanderburg/node2nix/commit/3b63e735458947ef39aca247923f8775633363e5.patch";
335 hash = "sha256-pe8Xm4mjPh9oKXugoMY6pRl8YYgtdw0sRXN+TienalU=";
336 })
337 ];
338 in ''
339 ${lib.concatStringsSep "\n" (map (patch: "patch -d $out/lib/node_modules/node2nix -p1 < ${patch}") patches)}
340 wrapProgram "$out/bin/node2nix" --prefix PATH : ${lib.makeBinPath [ pkgs.nix ]}
341 '';
342 };
343
344 parcel = prev.parcel.override {
345 buildInputs = [ final.node-gyp-build ];
346 preRebuild = ''
347 sed -i -e "s|#!/usr/bin/env node|#! ${nodejs}/bin/node|" node_modules/node-gyp-build/bin.js
348 '';
349 };
350
351 pnpm = prev.pnpm.override {
352 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
353
354 preRebuild = ''
355 sed 's/"link:/"file:/g' --in-place package.json
356 '';
357
358 postInstall = let
359 pnpmLibPath = lib.makeBinPath [
360 nodejs.passthru.python
361 nodejs
362 ];
363 in ''
364 for prog in $out/bin/*; do
365 wrapProgram "$prog" --prefix PATH : ${pnpmLibPath}
366 done
367 '';
368 };
369
370 postcss-cli = prev.postcss-cli.override (oldAttrs: {
371 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
372 postInstall = ''
373 wrapProgram "$out/bin/postcss" \
374 --prefix NODE_PATH : ${final.postcss}/lib/node_modules \
375 --prefix NODE_PATH : ${final.autoprefixer}/lib/node_modules
376 ln -s '${final.postcss}/lib/node_modules/postcss' "$out/lib/node_modules/postcss"
377 '';
378 passthru.tests = {
379 simple-execution = callPackage ./package-tests/postcss-cli.nix {
380 inherit (final) postcss-cli;
381 };
382 };
383 meta = oldAttrs.meta // { maintainers = with lib.maintainers; [ Luflosi ]; };
384 });
385
386 # To update prisma, please first update prisma-engines to the latest
387 # version. Then change the correct hash to this package. The PR should hold
388 # two commits: one for the engines and the other one for the node package.
389 prisma = prev.prisma.override rec {
390 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
391
392 inherit (pkgs.prisma-engines) version;
393
394 src = fetchurl {
395 url = "https://registry.npmjs.org/prisma/-/prisma-${version}.tgz";
396 hash = "sha512-L9mqjnSmvWIRCYJ9mQkwCtj4+JDYYTdhoyo8hlsHNDXaZLh/b4hR0IoKIBbTKxZuyHQzLopb/+0Rvb69uGV7uA==";
397 };
398 postInstall = with pkgs; ''
399 wrapProgram "$out/bin/prisma" \
400 --set PRISMA_MIGRATION_ENGINE_BINARY ${prisma-engines}/bin/migration-engine \
401 --set PRISMA_QUERY_ENGINE_BINARY ${prisma-engines}/bin/query-engine \
402 --set PRISMA_QUERY_ENGINE_LIBRARY ${lib.getLib prisma-engines}/lib/libquery_engine.node \
403 --set PRISMA_FMT_BINARY ${prisma-engines}/bin/prisma-fmt
404 '';
405
406 passthru.tests = {
407 simple-execution = pkgs.callPackage ./package-tests/prisma.nix {
408 inherit (final) prisma;
409 };
410 };
411 };
412
413 pulp = prev.pulp.override {
414 # tries to install purescript
415 npmFlags = builtins.toString [ "--ignore-scripts" ];
416
417 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
418 postInstall = ''
419 wrapProgram "$out/bin/pulp" --suffix PATH : ${lib.makeBinPath [
420 pkgs.purescript
421 ]}
422 '';
423 };
424
425 readability-cli = prev.readability-cli.override (oldAttrs: {
426 # Wrap src to fix this build error:
427 # > readability-cli/readable.ts: unsupported interpreter directive "#!/usr/bin/env -S deno..."
428 #
429 # Need to wrap the source, instead of patching in patchPhase, because
430 # buildNodePackage only unpacks sources in the installPhase.
431 src = pkgs.srcOnly {
432 src = oldAttrs.src;
433 name = oldAttrs.name;
434 patchPhase = "chmod a-x readable.ts";
435 };
436
437 nativeBuildInputs = [ pkgs.pkg-config ];
438 buildInputs = with pkgs; [
439 pixman
440 cairo
441 pango
442 ];
443 });
444
445 reveal-md = prev.reveal-md.override (
446 lib.optionalAttrs (!stdenv.isDarwin) {
447 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
448 prePatch = ''
449 export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1
450 '';
451 postInstall = ''
452 wrapProgram $out/bin/reveal-md \
453 --set PUPPETEER_EXECUTABLE_PATH ${pkgs.chromium.outPath}/bin/chromium
454 '';
455 }
456 );
457
458 rush = prev."@microsoft/rush".override {
459 name = "rush";
460 };
461
462 ssb-server = prev.ssb-server.override (oldAttrs: {
463 buildInputs = [ pkgs.automake pkgs.autoconf final.node-gyp-build ];
464 meta = oldAttrs.meta // { broken = since "10"; };
465 });
466
467 stf = prev.stf.override (oldAttrs: {
468 meta = oldAttrs.meta // { broken = since "10"; };
469 });
470
471 tailwindcss = prev.tailwindcss.override {
472 plugins = [ ];
473 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
474 postInstall = ''
475 nodePath=""
476 for p in "$out" "${final.postcss}" $plugins; do
477 nodePath="$nodePath''${nodePath:+:}$p/lib/node_modules"
478 done
479 wrapProgram "$out/bin/tailwind" \
480 --prefix NODE_PATH : "$nodePath"
481 wrapProgram "$out/bin/tailwindcss" \
482 --prefix NODE_PATH : "$nodePath"
483 unset nodePath
484 '';
485 passthru.tests = {
486 simple-execution = callPackage ./package-tests/tailwindcss.nix {
487 inherit (final) tailwindcss;
488 };
489 };
490 };
491
492 teck-programmer = prev.teck-programmer.override {
493 nativeBuildInputs = [ final.node-gyp-build ];
494 buildInputs = [ pkgs.libusb1 ];
495 };
496
497 tedicross = prev."tedicross-git+https://github.com/TediCross/TediCross.git#v0.8.7".override {
498 nativeBuildInputs = with pkgs; [ makeWrapper libtool autoconf ];
499 postInstall = ''
500 makeWrapper '${nodejs}/bin/node' "$out/bin/tedicross" \
501 --add-flags "$out/lib/node_modules/tedicross/main.js"
502 '';
503 };
504
505 thelounge-plugin-closepms = prev.thelounge-plugin-closepms.override {
506 nativeBuildInputs = [ final.node-pre-gyp ];
507 };
508
509 thelounge-plugin-giphy = prev.thelounge-plugin-giphy.override {
510 nativeBuildInputs = [ final.node-pre-gyp ];
511 };
512
513 thelounge-theme-flat-blue = prev.thelounge-theme-flat-blue.override {
514 nativeBuildInputs = [ final.node-pre-gyp ];
515 # TODO: needed until upstream pins thelounge version 4.3.1+ (which fixes dependency on old sqlite3 and transitively very old node-gyp 3.x)
516 preRebuild = ''
517 rm -r node_modules/node-gyp
518 '';
519 };
520
521 thelounge-theme-flat-dark = prev.thelounge-theme-flat-dark.override {
522 nativeBuildInputs = [ final.node-pre-gyp ];
523 # TODO: needed until upstream pins thelounge version 4.3.1+ (which fixes dependency on old sqlite3 and transitively very old node-gyp 3.x)
524 preRebuild = ''
525 rm -r node_modules/node-gyp
526 '';
527 };
528
529 ts-node = prev.ts-node.override {
530 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
531 postInstall = ''
532 wrapProgram "$out/bin/ts-node" \
533 --prefix NODE_PATH : ${final.typescript}/lib/node_modules
534 '';
535 };
536
537 tsun = prev.tsun.override {
538 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
539 postInstall = ''
540 wrapProgram "$out/bin/tsun" \
541 --prefix NODE_PATH : ${final.typescript}/lib/node_modules
542 '';
543 };
544
545 typescript-language-server = prev.typescript-language-server.override {
546 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
547 postInstall = ''
548 ${pkgs.xorg.lndir}/bin/lndir ${final.typescript} $out
549 '';
550 };
551
552 uppy-companion = prev."@uppy/companion".override {
553 name = "uppy-companion";
554 };
555
556 vega-cli = prev.vega-cli.override {
557 nativeBuildInputs = [ pkgs.pkg-config ];
558 buildInputs = with pkgs; [
559 final.node-pre-gyp
560 pixman
561 cairo
562 pango
563 libjpeg
564 ] ++ lib.optionals stdenv.isDarwin [
565 darwin.apple_sdk.frameworks.CoreText
566 ];
567 };
568
569 vega-lite = prev.vega-lite.override {
570 postInstall = ''
571 cd node_modules
572 for dep in ${final.vega-cli}/lib/node_modules/vega-cli/node_modules/*; do
573 if [[ ! -d ''${dep##*/} ]]; then
574 ln -s "${final.vega-cli}/lib/node_modules/vega-cli/node_modules/''${dep##*/}"
575 fi
576 done
577 '';
578 passthru.tests = {
579 simple-execution = callPackage ./package-tests/vega-lite.nix {
580 inherit (final) vega-lite;
581 };
582 };
583 };
584
585 volar = final."@volar/vue-language-server".override {
586 name = "volar";
587 };
588
589 wavedrom-cli = prev.wavedrom-cli.override {
590 nativeBuildInputs = [ pkgs.pkg-config final.node-pre-gyp ];
591 # These dependencies are required by
592 # https://github.com/Automattic/node-canvas.
593 buildInputs = with pkgs; [
594 giflib
595 pixman
596 cairo
597 pango
598 ] ++ lib.optionals stdenv.isDarwin [
599 darwin.apple_sdk.frameworks.CoreText
600 ];
601 };
602
603 webtorrent-cli = prev.webtorrent-cli.override {
604 buildInputs = [ final.node-gyp-build ];
605 };
606
607 wrangler = prev.wrangler.override (oldAttrs: {
608 meta = oldAttrs.meta // { broken = before "16.13"; };
609 });
610
611 yaml-language-server = prev.yaml-language-server.override {
612 nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
613 postInstall = ''
614 wrapProgram "$out/bin/yaml-language-server" \
615 --prefix NODE_PATH : ${final.prettier}/lib/node_modules
616 '';
617 };
618}