Repository: nodejs/node
Pull request: tools: extract Nix dependency lists to separate files

This should improve the readability, as well as the UX of cherry-picking what dependency the user wants in their env.

<!--
Before submitting a pull request, please read:

- the CONTRIBUTING guide at https://github.com/nodejs/node/blob/HEAD/CONTRIBUTING.md
- the commit message formatting guidelines at
  https://github.com/nodejs/node/blob/HEAD/doc/contributing/pull-requests.md#commit-message-guidelines

For code changes:
1. Include tests for any bug fixes or new features.
2. Update documentation if relevant.
3. Ensure that `make -j4 test` (UNIX), or `vcbuild test` (Windows) passes.

If you believe this PR should be highlighted in the Node.js CHANGELOG
please add the `notable-change` label.

Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.
-->


Changed files:
filename: BUILDING.md
patch: @@ -299,7 +299,7 @@ that flag to use all the shared dependencies, or specify only some dependencies:
 ```bash
 cat -> .envrc <<'EOF'
 use nix --arg sharedLibDeps '{
-  inherit (import <nixpkgs> {})
+  inherit (import ./tools/nix/sharedLibDeps.nix {})
     openssl
     zlib
   ;

filename: shell.nix
patch: @@ -1,68 +1,13 @@
 {
-  pkgs ? import "${./tools/nix/pkgs.nix}" { },
+  pkgs ? import ./tools/nix/pkgs.nix { },
   loadJSBuiltinsDynamically ? true, # Load `lib/**.js` from disk instead of embedding
   ncu-path ? null, # Provide this if you want to use a local version of NCU
   icu ? pkgs.icu,
-  sharedLibDeps ? {
-    inherit (pkgs)
-      ada
-      brotli
-      c-ares
-      libuv
-      nghttp2
-      nghttp3
-      ngtcp2
-      simdjson
-      simdutf
-      sqlite
-      uvwasi
-      zlib
-      zstd
-      ;
-    http-parser = pkgs.llhttp;
-    openssl = pkgs.openssl.overrideAttrs (old: {
-      version = "3.5.4";
-      src = pkgs.fetchurl {
-        url = builtins.replaceStrings [ old.version ] [ "3.5.4" ] old.src.url;
-        hash = "sha256-lnMR+ElVMWlpvbHY1LmDcY70IzhjnGIexMNP3e81Xpk=";
-      };
-      doCheck = false;
-      configureFlags = (old.configureFlags or [ ]) ++ [
-        "no-docs"
-        "no-tests"
-      ];
-      outputs = [
-        "bin"
-        "out"
-        "dev"
-      ];
-    });
-  },
+  sharedLibDeps ? import ./tools/nix/sharedLibDeps.nix { inherit pkgs; },
   ccache ? pkgs.ccache,
   ninja ? pkgs.ninja,
-  devTools ? [
-    pkgs.curl
-    pkgs.gh
-    pkgs.git
-    pkgs.jq
-    pkgs.shellcheck
-  ]
-  ++ (
-    if (ncu-path == null) then
-      [ pkgs.node-core-utils ]
-    else
-      [
-        (pkgs.writeShellScriptBin "git-node" "exec \"${ncu-path}/bin/git-node.js\" \"$@\"")
-        (pkgs.writeShellScriptBin "ncu-ci" "exec \"${ncu-path}/bin/ncu-ci.js\" \"$@\"")
-        (pkgs.writeShellScriptBin "ncu-config" "exec \"${ncu-path}/bin/ncu-config.js\" \"$@\"")
-      ]
-  ),
-  benchmarkTools ? [
-    pkgs.R
-    pkgs.rPackages.ggplot2
-    pkgs.rPackages.plyr
-    pkgs.wrk
-  ],
+  devTools ? import ./tools/nix/devTools.nix { inherit pkgs ncu-path; },
+  benchmarkTools ? import ./tools/nix/benchmarkTools.nix { inherit pkgs; },
   extraConfigFlags ? [
     "--without-npm"
     "--debug-node"

filename: tools/nix/benchmarkTools.nix
patch: @@ -0,0 +1,9 @@
+{
+  pkgs ? import ./pkgs.nix { },
+}:
+[
+  pkgs.R
+  pkgs.rPackages.ggplot2
+  pkgs.rPackages.plyr
+  pkgs.wrk
+]

filename: tools/nix/devTools.nix
patch: @@ -0,0 +1,21 @@
+{
+  pkgs ? import ./pkgs.nix { },
+  ncu-path ? null, # Provide this if you want to use a local version of NCU
+}:
+[
+  pkgs.curl
+  pkgs.gh
+  pkgs.git
+  pkgs.jq
+  pkgs.shellcheck
+]
+++ (
+  if (ncu-path == null) then
+    [ pkgs.node-core-utils ]
+  else
+    [
+      (pkgs.writeShellScriptBin "git-node" "exec \"${ncu-path}/bin/git-node.js\" \"$@\"")
+      (pkgs.writeShellScriptBin "ncu-ci" "exec \"${ncu-path}/bin/ncu-ci.js\" \"$@\"")
+      (pkgs.writeShellScriptBin "ncu-config" "exec \"${ncu-path}/bin/ncu-config.js\" \"$@\"")
+    ]
+)

filename: tools/nix/sharedLibDeps.nix
patch: @@ -0,0 +1,38 @@
+{
+  pkgs ? import ./pkgs.nix { },
+}:
+{
+  inherit (pkgs)
+    ada
+    brotli
+    c-ares
+    libuv
+    nghttp2
+    nghttp3
+    ngtcp2
+    simdjson
+    simdutf
+    sqlite
+    uvwasi
+    zlib
+    zstd
+    ;
+  http-parser = pkgs.llhttp;
+  openssl = pkgs.openssl.overrideAttrs (old: {
+    version = "3.5.4";
+    src = pkgs.fetchurl {
+      url = builtins.replaceStrings [ old.version ] [ "3.5.4" ] old.src.url;
+      hash = "sha256-lnMR+ElVMWlpvbHY1LmDcY70IzhjnGIexMNP3e81Xpk=";
+    };
+    doCheck = false;
+    configureFlags = (old.configureFlags or [ ]) ++ [
+      "no-docs"
+      "no-tests"
+    ];
+    outputs = [
+      "bin"
+      "out"
+      "dev"
+    ];
+  });
+}