Skip to content

Commit 5db5af9

Browse files
committed
languages.javascript: make Node.js optional
1 parent ef8481b commit 5db5af9

File tree

1 file changed

+44
-4
lines changed

1 file changed

+44
-4
lines changed

src/modules/languages/javascript.nix

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,10 @@ in
236236
description = "The Node.js package to use.";
237237
};
238238

239+
nodejs = {
240+
enable = lib.mkEnableOption "Node.js runtime" // { default = true; };
241+
};
242+
239243
corepack = {
240244
enable = lib.mkEnableOption "wrappers for npm, pnpm and Yarn via Node.js Corepack";
241245
};
@@ -309,13 +313,10 @@ in
309313
config = lib.mkIf cfg.enable {
310314
packages =
311315
let
312-
# On newer nixpkgs, nodejs has a separate npm output that doesn't
313-
# include the node binary. Add the base package to keep node on PATH.
314-
npmIsSeparateOutput = builtins.elem "npm" (cfg.package.outputs or [ ]);
315316
# On nixpkgs 26.05+, nodejs-slim has a corepack output.
316317
corepack = cfg.package.corepack or cfg.package;
317318
in
318-
lib.optional (!cfg.npm.enable || npmIsSeparateOutput) cfg.package
319+
lib.optional cfg.nodejs.enable cfg.package
319320
++ lib.optional cfg.npm.enable cfg.npm.package
320321
++ lib.optional cfg.pnpm.enable (cfg.pnpm.package)
321322
++ lib.optional cfg.yarn.enable (cfg.yarn.package.override { nodejs = cfg.package; })
@@ -348,5 +349,44 @@ in
348349
''
349350
]
350351
);
352+
353+
assertions = [
354+
{
355+
assertion = (!cfg.npm.enable) || cfg.nodejs.enable;
356+
message = "languages.javascript.npm.enable requires languages.javascript.nodejs.enable = true;";
357+
}
358+
{
359+
assertion = (!cfg.pnpm.enable) || cfg.nodejs.enable;
360+
message = "languages.javascript.pnpm.enable requires languages.javascript.nodejs.enable = true;";
361+
}
362+
{
363+
assertion = (!cfg.yarn.enable) || cfg.nodejs.enable;
364+
message = "languages.javascript.yarn.enable requires languages.javascript.nodejs.enable = true;";
365+
}
366+
{
367+
assertion = (!cfg.corepack.enable) || cfg.nodejs.enable;
368+
message = "languages.javascript.corepack.enable requires languages.javascript.nodejs.enable = true;";
369+
}
370+
{
371+
assertion = (!cfg.lsp.enable) || cfg.nodejs.enable;
372+
message = "languages.javascript.lsp.enable requires languages.javascript.nodejs.enable = true;";
373+
}
374+
{
375+
assertion = (!cfg.npm.install.enable) || cfg.npm.enable;
376+
message = "languages.javascript.npm.install.enable requires languages.javascript.npm.enable = true;";
377+
}
378+
{
379+
assertion = (!cfg.pnpm.install.enable) || cfg.pnpm.enable;
380+
message = "languages.javascript.pnpm.install.enable requires languages.javascript.pnpm.enable = true;";
381+
}
382+
{
383+
assertion = (!cfg.yarn.install.enable) || cfg.yarn.enable;
384+
message = "languages.javascript.yarn.install.enable requires languages.javascript.yarn.enable = true;";
385+
}
386+
{
387+
assertion = (!cfg.bun.install.enable) || cfg.bun.enable;
388+
message = "languages.javascript.bun.install.enable requires languages.javascript.bun.enable = true;";
389+
}
390+
];
351391
};
352392
}

0 commit comments

Comments
 (0)