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