nodePackages{,_latest}: drop and throw (#496365)

This commit is contained in:
Philip Taron
2026-03-29 23:52:00 +00:00
committed by GitHub
17 changed files with 14 additions and 5830 deletions

View File

@@ -99,7 +99,7 @@ Then when building the frontend you can just symlink the node_modules directory.
### buildNpmPackage {#javascript-buildNpmPackage}
`buildNpmPackage` allows you to package npm-based projects in Nixpkgs without the use of an auto-generated dependencies file (as used in [node2nix](#javascript-node2nix)).
`buildNpmPackage` allows you to package npm-based projects in Nixpkgs without the use of an auto-generated dependencies file.
It works by utilizing npm's cache functionality -- creating a reproducible cache that contains the dependencies of a project, and pointing npm to it.
Here's an example:
@@ -306,25 +306,6 @@ It's recommended to set `package-lock-only = true` in your project-local [`.npmr
This package puts the corepack wrappers for pnpm and yarn in your PATH, and they will honor the `packageManager` setting in the `package.json`.
### node2nix {#javascript-node2nix}
#### Preparation {#javascript-node2nix-preparation}
You will need to generate a Nix expression for the dependencies. Don't forget the `-l package-lock.json` if there is a lock file. Most probably you will need the `--development` to include the `devDependencies`
So the command will most likely be:
```sh
node2nix --development -l package-lock.json
```
See `node2nix` [docs](https://github.com/svanderburg/node2nix) for more info.
#### Pitfalls {#javascript-node2nix-pitfalls}
- If upstream package.json does not have a "version" attribute, `node2nix` will crash. You will need to add it like shown in [the package.json section](#javascript-upstream-package-json).
- `node2nix` has some [bugs](https://github.com/svanderburg/node2nix/issues/238) related to working with lock files from npm distributed with `nodejs_16`.
- `node2nix` does not like missing packages from npm. If you see something like `Cannot resolve version: vue-loader-v16@undefined` then you might want to try another tool. The package might have been pulled off of npm.
### pnpm {#javascript-pnpm}
pnpm is available as the top-level package `pnpm`. Additionally, there are variants pinned to certain major versions, like `pnpm_8`, `pnpm_9` and `pnpm_10`, which support different sets of lock file versions.

View File

@@ -170,8 +170,6 @@ Sometimes plugins require an override that must be changed when the plugin is up
To add a new plugin, run `nix-shell -p vimPluginsUpdater --run 'vim-plugins-updater add "[owner]/[name]"'`. **NOTE**: This script automatically commits to your git repository. Be sure to check out a fresh branch before running.
Finally, there are some plugins that are also packaged in nodePackages because they have Javascript-related build steps, such as running webpack. Those plugins are not listed in `vim-plugin-names` or managed by `vimPluginsUpdater` at all, and are included separately in `overrides.nix`. Currently, all these plugins are related to the `coc.nvim` ecosystem of the Language Server Protocol integration with Vim/Neovim.
## Updating plugins in nixpkgs {#updating-plugins-in-nixpkgs}
Run the update script with a GitHub API token that has at least `public_repo` access. Running the script without the token is likely to result in rate-limiting (429 errors). For steps on creating an API token, please refer to [GitHub's token documentation](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token).

View File

@@ -430,7 +430,10 @@
"index.html#katamari-tarballs",
"index.html#individual-tarballs",
"index.html#generating-nix-expressions",
"index.html#overriding-the-generator"
"index.html#overriding-the-generator",
"index.html#javascript-node2nix",
"index.html#javascript-node2nix-preparation",
"index.html#javascript-node2nix-pitfalls"
],
"sec-nixpkgs-release-26.05-lib": [
"release-notes.html#sec-nixpkgs-release-26.05-lib"
@@ -3642,15 +3645,6 @@
"javascript-corepack": [
"index.html#javascript-corepack"
],
"javascript-node2nix": [
"index.html#javascript-node2nix"
],
"javascript-node2nix-preparation": [
"index.html#javascript-node2nix-preparation"
],
"javascript-node2nix-pitfalls": [
"index.html#javascript-node2nix-pitfalls"
],
"javascript-pnpm": [
"index.html#javascript-pnpm"
],

View File

@@ -74,6 +74,12 @@
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
- The `nodePackages` package set has been removed entirely from nixpkgs. This package set was created to ease the maintenance burden of maintaining lots of
NodeJS-based packages within nixpkgs, but became a burden itself. Over the past several releases, there has been a focus on removing it in favor of the more modern nixpkgs packaging strategies.
After a long time, this package set has been deprecated and removed. If you are using its package set in your own config, please use the top-level packages instead.(i.e `pkgs.package-name` instead of `pkgs.nodePackages.package-name`).
- Note that the above `nodePackages` removal also coincides with the removal of `node2nix` and its tooling, which have been deprecated for a long time.
- `xfce.mkXfceDerivation` has been deprecated (i.e. conditioned behind `nixpkgs.config.allowAliases`)
and will be removed in NixOS 26.11, please use `stdenv.mkDerivation` directly. You can migrate by
adding `pkg-config`, `xfce4-dev-tools`, and `wrapGAppsHook3` to your `nativeBuildInputs` and

View File

@@ -1,87 +0,0 @@
> [!IMPORTANT]
> There is currently an active project to [remove packages from `nodePackages`](https://github.com/NixOS/nixpkgs/issues/229475).
> Please consider adding new packages using [another method](https://nixos.org/manual/nixpkgs/unstable/#javascript-tool-specific).
This folder contains a generated collection of [npm packages](https://npmjs.com/) that can be installed with the Nix package manager.
As a rule of thumb, the package set should only provide _end-user_ software packages, such as command-line utilities.
Libraries should only be added to the package set if there is a non-npm package that requires it.
When it is desired to use npm libraries in a development project, use the `node2nix` generator directly on the `package.json` configuration file of the project.
The package set provides support for the official stable Node.js versions.
The latest stable LTS release in `nodePackages`, as well as the latest stable current release in `nodePackages_latest`.
If your package uses native addons, you need to examine what kind of native build system it uses. Here are some examples:
- `node-gyp`
- `node-gyp-builder`
- `node-pre-gyp`
After you have identified the correct system, you need to override your package expression while adding the build system as a build input.
For example, `dat` requires `node-gyp-build`, so we override its expression in [pkgs/development/node-packages/overrides.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/node-packages/overrides.nix):
```nix
{
dat = prev.dat.override (oldAttrs: {
buildInputs = [
final.node-gyp-build
pkgs.libtool
pkgs.autoconf
pkgs.automake
];
meta = oldAttrs.meta // {
broken = since "12";
};
});
}
```
### Adding and updating JavaScript packages in Nixpkgs
To add a package from npm to Nixpkgs:
1. Modify [pkgs/development/node-packages/node-packages.json](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/node-packages/node-packages.json) to add, update or remove package entries to have it included in `nodePackages` and `nodePackages_latest`.
2. Run the script:
```sh
./pkgs/development/node-packages/generate.sh
```
3. Build your new package to test your changes:
```sh
nix-build -A nodePackages.<new-or-updated-package>
```
To build against the latest stable current Node.js version (e.g. 18.x):
```sh
nix-build -A nodePackages_latest.<new-or-updated-package>
```
If the package doesn't build, you may need to add an override as explained above.
4. Add and commit all modified and generated files.
For more information about the generation process, consult the [README.md](https://github.com/svanderburg/node2nix) file of the `node2nix` tool.
To update npm packages in Nixpkgs, run the same `generate.sh` script:
```sh
./pkgs/development/node-packages/generate.sh
```
#### Git protocol error
Some packages may have Git dependencies from GitHub specified with `git://`.
GitHub has [disabled unencrypted Git connections](https://github.blog/2021-09-01-improving-git-protocol-security-github/#no-more-unauthenticated-git), so you may see the following error when running the generate script:
```
The unauthenticated git protocol on port 9418 is no longer supported
```
Use the following Git configuration to resolve the issue:
```sh
git config --global url."https://github.com/".insteadOf git://github.com/
```

View File

@@ -1,456 +0,0 @@
pkgs: lib: self: super:
### Deprecated aliases - for backward compatibility
###
### !!! NOTE !!!
### Use `./remove-attr.py [attrname]` in this directory to remove your alias
### from the `nodePackages` set without regenerating the entire file.
let
# Removing recurseForDerivation prevents derivations of aliased attribute
# set to appear while listing all the packages available.
removeRecurseForDerivations =
alias:
if alias.recurseForDerivations or false then
lib.removeAttrs alias [ "recurseForDerivations" ]
else
alias;
# Disabling distribution prevents top-level aliases for non-recursed package
# sets from building on Hydra.
removeDistribute = alias: if lib.isDerivation alias then lib.dontDistribute alias else alias;
# Make sure that we are not shadowing something from node-packages.nix.
checkInPkgs =
n: alias:
if builtins.hasAttr n super then throw "Alias ${n} is still in node-packages.nix" else alias;
mapAliases =
aliases:
lib.mapAttrs (
n: alias: removeDistribute (removeRecurseForDerivations (checkInPkgs n alias))
) aliases;
in
mapAliases {
"@angular/cli" = throw "@angular/cli was removed because it was unmaintainable in nixpkgs"; # Added 2026-02-12
"@antfu/ni" = pkgs.ni; # Added 2025-11-08
"@antora/cli" = pkgs.antora; # Added 2023-05-06
"@astrojs/language-server" = pkgs.astro-language-server; # Added 2024-02-12
"@babel/cli" =
throw "@babel/cli was removed because upstream highly suggests installing it in your project instead of globally."; # Added 2025-11-06
"@bitwarden/cli" = pkgs.bitwarden-cli; # added 2023-07-25
"@commitlint/cli" = pkgs.commitlint; # Added 2025-11-08
"@commitlint/config-conventional" =
throw "@commitlint/config-conventional has been dropped, as it is a library and your JS project should lock it instead."; # added 2024-12-16
"@emacs-eask/cli" = pkgs.eask; # added 2023-08-17
"@electron-forge/cli" =
throw "@electron-forge/cli was removed because upstream suggests that you install it locally in your project instead."; # Added 2025-11-06
"@forge/cli" = throw "@forge/cli was removed because it was broken"; # added 2023-09-20
"@gitbeaker/cli" = pkgs.gitbeaker-cli; # Added 2025-10-29
"@google/clasp" = pkgs.google-clasp; # Added 2023-05-07
"@maizzle/cli" = pkgs.maizzle; # added 2023-08-17
"@medable/mdctl-cli" = throw "@medable/mdctl-cli was removed because it was broken"; # added 2023-08-21
"@mermaid-js/mermaid-cli" = pkgs.mermaid-cli; # added 2023-10-01
"@microsoft/rush" =
throw "@microsoft/rush has been removed because it was unmaintainable within nixpkgs"; # Added 2026-02-12
"@nerdwallet/shepherd" = pkgs.shepherd; # added 2023-09-30
"@nestjs/cli" = pkgs.nest-cli; # Added 2023-05-06
"@prisma/language-server" = throw "@prisma/language-server has been removed because it was broken"; # added 2025-03-23
"@shopify/cli" = throw "@shopify/cli has been removed because it was broken"; # added 2025-03-12
"@tailwindcss/aspect-ratio" =
throw "@tailwindcss/aspect-ratio has been removed because it is a library and your JS project should lock it instead."; # Added 2026-02-19
"@tailwindcss/forms" =
throw "@tailwindcss/forms has been removed because it is a library and your JS project should lock it instead."; # Added 2026-02-19
"@tailwindcss/language-server" = pkgs.tailwindcss-language-server; # added 2024-01-22
"@tailwindcss/line-clamp" =
throw "@tailwindcss/line-clamp has been removed because it is a library and your JS project should lock it instead."; # Added 2026-02-19
"@tailwindcss/typography" =
throw "@tailwindcss/typography has been removed because it is a library and your JS project should lock it instead."; # Added 2026-02-19
"@uppy/companion" = pkgs.uppy-companion; # Added 2025-11-01
"@volar/vue-language-server" = pkgs.vue-language-server; # added 2024-06-15
"@vue/language-server" = pkgs.vue-language-server; # added 2024-06-15
"@webassemblyjs/cli-1.11.1" = pkgs.webassemblyjs-cli; # Added 2025-11-06
"@webassemblyjs/repl-1.11.1" = pkgs.webassemblyjs-repl; # Added 2025-11-06
"@webassemblyjs/wasm-strip" =
"@webassemblyjs/wasm-strip has been removed because it was deprecated by upstream. Consider using wabt instead"; # Added 2025-11-06
"@webassemblyjs/wasm-text-gen-1.11.1" = pkgs.wasm-text-gen; # Added 2025-11-06
"@webassemblyjs/wast-refmt-1.11.1" = pkgs.wast-refmt; # Added 2025-11-06
"@withgraphite/graphite-cli" = pkgs.graphite-cli; # added 2024-01-25
"@yaegassy/coc-nginx" = pkgs.coc-nginx; # Added 2025-11-08
"@zed-industries/claude-code-acp" = pkgs.claude-agent-acp; # Added 2026-03-12
"@zwave-js/server" = pkgs.zwave-js-server; # Added 2023-09-09
alex = throw "'alex' has been removed because it was unmaintainable in nixpkgs"; # Added 2026-02-12
audiosprite = throw "'audiosprite' has been removed because it was abandoned upstream"; # Added 2025-11-14
inherit (pkgs) autoprefixer; # added 2024-06-25
inherit (pkgs) asar; # added 2023-08-26
inherit (pkgs) auto-changelog; # added 2024-06-25
inherit (pkgs) aws-azure-login; # added 2023-09-30
aws-cdk = pkgs.aws-cdk-cli; # Added 2025-12-23
awesome-lint = throw "'awesome-lint' has been removed because it was unmaintainable in nixpkgs"; # Added 2025-11-17
balanceofsatoshis = pkgs.balanceofsatoshis; # added 2023-07-31
inherit (pkgs) bash-language-server; # added 2024-06-07
bibtex-tidy = pkgs.bibtex-tidy; # added 2023-07-30
bitwarden-cli = pkgs.bitwarden-cli; # added 2023-07-25
bower = throw "bower was removed because it was deprecated"; # added 2025-09-17
inherit (pkgs) bower2nix; # added 2024-08-23
browserify = throw "browserify has been removed because it was unmaintained in nixpkgs"; # Added 2026-03-01
inherit (pkgs) browser-sync; # Added 2026-03-10
inherit (pkgs) btc-rpc-explorer; # added 2023-08-17
inherit (pkgs) carbon-now-cli; # added 2023-08-17
inherit (pkgs) carto; # added 2023-08-17
castnow = pkgs.castnow; # added 2023-07-30
inherit (pkgs) cdk8s-cli; # Added 2025-11-10
inherit (pkgs) cdktf-cli; # added 2025-10-02
inherit (pkgs) clean-css-cli; # added 2023-08-18
clipboard-cli = throw "'clipboard-cli' has been removed because it was unmaintainable in nixpkgs"; # Added 2025-11-17
inherit (pkgs) coc-clangd; # added 2024-06-29
inherit (pkgs) coc-cmake; # Added 2025-11-05
inherit (pkgs) coc-css; # added 2024-06-29
inherit (pkgs) coc-diagnostic; # added 2024-06-29
inherit (pkgs) coc-docker; # added 2025-10-01
inherit (pkgs) coc-emmet; # Added 2025-11-05
inherit (pkgs) coc-eslint; # Added 2025-11-05;
inherit (pkgs) coc-explorer; # added 2025-10-01
inherit (pkgs) coc-flutter; # Added 2025-11-05
inherit (pkgs) coc-git; # added 2025-10-01
coc-go = throw "coc-go has been removed because it was unmaintained in nixpkgs"; # Added 2026-02-14
inherit (pkgs) coc-haxe; # Added 2025-11-05
inherit (pkgs) coc-highlight; # Added 2025-11-05
inherit (pkgs) coc-html; # Added 2025-11-05
coc-imselect = throw "coc-imselect was removed because it was broken"; # added 2023-08-21
inherit (pkgs) coc-java; # Added 2025-11-05
inherit (pkgs) coc-jest; # Added 2025-11-05
inherit (pkgs) coc-json; # Added 2025-11-05
inherit (pkgs) coc-lists; # Added 2025-11-05
coc-ltex = throw "'coc-ltex' has been removed because it was unmaintained upstream"; # Added 2025-11-14
inherit (pkgs) coc-markdownlint; # Added 2025-11-05
coc-metals = throw "coc-metals was removed because it was deprecated upstream. vimPlugins.nvim-metals is its official replacement."; # Added 2024-10-16
inherit (pkgs) coc-pairs; # added 2025-11-05
inherit (pkgs) coc-prettier; # added 2025-11-05
inherit (pkgs) coc-pyright; # added 2024-07-14
coc-python = throw "coc-python was removed because it was abandoned upstream on 2020-12-24. Upstream now recommends using coc-pyright or coc-jedi instead."; # added 2024-10-15
inherit (pkgs) coc-r-lsp; # added 2025-11-05
coc-rls = throw "coc-rls was removed because rls was deprecated in 2022. You should use coc-rust-analyzer instead, as rust-analyzer is maintained."; # added 2025-10-01
inherit (pkgs) coc-rust-analyzer; # added 2025-11-05
inherit (pkgs) coc-sh; # added 2025-10-02
inherit (pkgs) coc-smartf; # Added 2025-11-05
inherit (pkgs) coc-snippets; # Added 2025-11-05
inherit (pkgs) coc-solargraph; # Added 2025-11-05
inherit (pkgs) coc-spell-checker; # added 2025-10-01
inherit (pkgs) coc-sqlfluff; # Added 2025-11-05
inherit (pkgs) coc-stylelint; # Added 2025-11-05
inherit (pkgs) coc-sumneko-lua; # Added 2025-11-05
inherit (pkgs) coc-tabnine; # Added 2025-11-05
inherit (pkgs) coc-texlab; # Added 2025-11-05
inherit (pkgs) coc-toml;
coc-tslint = throw "coc-tslint was removed because it was deprecated upstream; coc-eslint offers comparable features for eslint, which replaced tslint"; # Added 2024-10-18
coc-tslint-plugin = throw "coc-tslint-plugin was removed because it was deprecated upstream; coc-eslint offers comparable features for eslint, which replaced tslint"; # Added 2024-10-18
coc-tsserver = throw "coc-tsserver has been removed because it was unmaintained in nixpkgs"; # Added 2026-02-14
coc-ultisnips = throw "'coc-ultisnips' has been removed because it was unmaintained upstream"; # Added 2025-11-14
coc-vetur = throw "coc-vetur was removed because vetur was deprecated by Vue in favor of volar. Use coc-volar instead, which supports Vue 3"; # added 2025-10-01
inherit (pkgs) coc-vimlsp; # Added 2025-11-05
inherit (pkgs) coc-vimtex; # Added 2025-11-05
inherit (pkgs) coc-wxml; # Added 2025-11-05
inherit (pkgs) coc-yaml; # Added 2025-11-05
inherit (pkgs) coc-yank; # Added 2025-11-05
inherit (pkgs) code-theme-converter; # Added 2025-11-08
coinmon = throw "coinmon was removed since it was abandoned upstream"; # added 2024-03-19
coffee-script = pkgs.coffeescript; # added 2023-08-18
inherit (pkgs) concurrently; # added 2024-08-05
inherit (pkgs) configurable-http-proxy; # added 2023-08-19
inherit (pkgs) conventional-changelog-cli; # Added 2025-11-08
copy-webpack-plugin = throw "copy-webpack-plugin was removed because it is a JS library, so your project should lock it with a JS package manager instead."; # Added 2024-12-16
inherit (pkgs) cordova; # added 2023-08-18
cpy-cli = throw "'cpy-cli' has been removed because it was unmaintainable in nixpkgs"; # Added 2025-11-17
create-cycle-app = throw "create-cycle-app has been removed because it is unmaintained and has issues installing with recent nodejs versions."; # Added 2025-11-01
create-react-native-app = throw "create-react-native-app was removed because it was deprecated. Upstream suggests using a framework for React Native."; # added 2024-12-08
inherit (pkgs) cspell;
csslint = throw "'csslint' has been removed as upstream considers it abandoned."; # Addeed 2025-11-07
dat = throw "dat was removed because it was broken"; # added 2023-08-21
inherit (pkgs) degit; # added 2023-08-18
dhcp = throw "'dhcp' has been removed because it was unmaintained upstream"; # Added 2025-11-14
inherit (pkgs) diagnostic-languageserver; # added 2024-06-25
inherit (pkgs) diff2html-cli; # Added 2025-11-08
inherit (pkgs) dockerfile-language-server-nodejs; # added 2023-08-18
inherit (pkgs) dotenv-cli; # added 2024-06-26
dotenv-vault = throw "'dotenv-vault' has been removed because it was unmaintained in nixpkgs"; # Added 2026-02-12
eask = pkgs.eask; # added 2023-08-17
elasticdump = throw "'elasticdump' has been removed because it was unmaintained in nixpkgs"; # Added 2025-12-26
inherit (pkgs.elmPackages) elm-test;
inherit (pkgs.elmPackages) elm-review;
elm-oracle = throw "'elm-oracle' has been removed, since it doesn't work with modern versions of Elm."; # Added 2025-11-07
emoj = throw "'emoj' has been removed because it was unmaintainable in nixpkgs"; # Added 2025-11-17
emojione = throw "emojione was archived and abandoned upstream, so it has been removed"; # Added 2025-11-06
escape-string-regexp = throw "escape-string-regexp was removed because it provides no executable"; # added 2025-03-12
inherit (pkgs) eslint; # Added 2024-08-28
inherit (pkgs) eslint_d; # Added 2023-05-26
inherit (pkgs) eas-cli; # added 2025-01-08
esy = throw "esy was removed because it was unmaintained within nixpkgs"; # Added 2026-02-12
expo-cli = throw "expo-cli was removed because it was deprecated upstream. Use `npx expo` or eas-cli instead."; # added 2024-12-02
fast-cli = throw "'fast-cli' has been removed because it was unmaintainable in nixpkgs"; # Added 2025-11-17
inherit (pkgs) fauna-shell; # Added 2025-11-27
inherit (pkgs) firebase-tools; # added 2023-08-18
inherit (pkgs) fixjson; # added 2024-06-26
fkill-cli = throw "'fkill-cli' has been removed because it was unmaintainable in nixpkgs"; # Added 2025-11-17
fleek-cli = throw "'fleek-cli' was removed because the upstream source code repo has been deleted."; # Added 2025-11-07
flood = pkgs.flood; # Added 2023-07-25
forever = throw "'forever' has been removed because it was unmaintained upstream"; # Added 2025-11-14
inherit (pkgs) fx; # Added 2025-11-06
ganache = throw "ganache was removed because it was deprecated upstream"; # added 2024-12-02
inherit (pkgs) gatsby-cli; # Added 2025-11-05
generator-code = throw "generator-code was removed because it provides no executable"; # added 2023-09-24
inherit (pkgs) git-run; # added 2024-06-26
git-ssb = throw "git-ssb was removed because it was broken"; # added 2023-08-21
inherit (pkgs) git-standup; # added 2024-06-26
inherit (pkgs) gitmoji-cli; # added 2023-09-23
glob = pkgs.node-glob; # added 2023-08-18
inherit (pkgs) get-graphql-schema; # added 2024-06-26
inherit (pkgs) gqlint; # added 2023-08-19
inherit (pkgs) gramma; # added 2024-06-26
grammarly-languageserver = throw "grammarly-languageserver was removed because it requires EOL Node.js 16"; # added 2024-07-15
inherit (pkgs) graphite-cli; # added 2024-01-25
inherit (pkgs) graphql-language-service-cli; # added 2025-03-17
inherit (pkgs) graphqurl; # added 2023-08-19
inherit (pkgs) grunt-cli; # added 2025-12-29
gtop = pkgs.gtop; # added 2023-07-31
gulp = self.gulp-cli; # Added 2025-11-04
gulp-cli = throw "gulp-cli has been removed because it was unmaintained in nixpkgs"; # Added 2026-02-12
he = throw "'he' has been removed because it was unmaintained upstream"; # Added 2025-11-14
hs-airdrop = throw "'hs-airdrop' has been removed because it was unmaintained upstream"; # Added 2025-11-14
hs-client = pkgs.hsd; # added 2023-08-20
inherit (pkgs) hsd; # added 2023-08-19
inherit (pkgs) html-minifier; # added 2023-08-19
inherit (pkgs) htmlhint; # added 2023-08-19
inherit (pkgs) http-server; # added 2024-01-20
hueadm = pkgs.hueadm; # added 2023-07-31
inherit (pkgs) hyperpotamus; # added 2023-08-19
ijavascript = throw "ijavascript has been removed because it was broken"; # added 2025-03-18
imapnotify = throw "'imapnotify' has been removed because it was unmaintained upstream"; # Added 2025-11-14
immich = pkgs.immich-cli; # added 2023-08-19
indium = throw "indium was removed because it was broken"; # added 2023-08-19
inliner = throw "inliner was removed because it was abandoned upstream"; # added 2024-08-23
inherit (pkgs) intelephense; # added 2024-08-31
insect = throw "insect was removed becuase it was deprecated by upstream. Use numbat instead."; # added 2024-12-02
ionic = throw "ionic was replaced by @ionic/cli"; # added 2023-08-19
inherit (pkgs) jake; # added 2023-08-19
inherit (pkgs) javascript-typescript-langserver; # added 2023-08-19
inherit (pkgs) js-beautify; # Added 2025-11-06
js-yaml = throw "js-yaml was removed because it was unmaintained in nixpkgs"; # Added 2026-02-12
inherit (pkgs) jsdoc; # Added 2025-11-29
inherit (pkgs) jshint; # Added 2025-11-06
json = throw "'json' has been removed because it was unmaintained upstream"; # Added 2025-11-14
inherit (pkgs) json-diff; # Added 2025-11-07
jsonlint = throw "'jsonlint' has been removed because it is unmaintained upstream"; # Added 2025-11-10
inherit (pkgs) jsonplaceholder; # Added 2025-11-04
json-refs = throw "'json-refs' has been removed because it is unmaintained and has several known vulnerable dependencies"; # Added 2025-11-10
inherit (pkgs) json-server; # Added 2025-11-06
joplin = pkgs.joplin-cli; # Added 2025-11-02
inherit (pkgs) kaput-cli; # added 2024-12-03
karma = pkgs.karma-runner; # added 2023-07-29
inherit (pkgs) katex; # Added 2025-11-08
keyoxide = pkgs.keyoxide-cli; # Added 2025-10-20
lcov-result-merger = throw "'lcov-result-merger' has been removed because it was unmaintained within nixpkgs"; # Added 2025-12-25
leetcode-cli = self.vsc-leetcode-cli; # added 2023-08-31
inherit (pkgs) lerna; # added 2025-02-12
less = pkgs.lessc; # added 2024-06-15
less-plugin-clean-css = pkgs.lessc.plugins.clean-css; # added 2024-06-15
livedown = throw "'livedown' has been removed because it was unmaintained"; # Added 2025-11-10
live-server = throw "'live-server' has been removed because it was unmaintained upstream"; # Added 2025-11-14
inherit (pkgs) localtunnel; # Added 2025-11-08
lodash = throw "lodash was removed because it provides no executable"; # added 2025-03-18
lua-fmt = throw "'lua-fmt' has been removed because it has critical bugs that break formatting"; # Added 2025-11-07
inherit (pkgs) lv_font_conv; # added 2024-06-28
madoko = throw "'madoko' has been removed because it was unmaintained upstream"; # Added 2025-11-14
makam = throw "'makam' has been removed because it is unmaintained upstream"; # Added 2025-11-14
manta = pkgs.node-manta; # Added 2023-05-06
inherit (pkgs) markdown-link-check; # added 2024-06-28
markdownlint-cli = pkgs.markdownlint-cli; # added 2023-07-29
inherit (pkgs) markdownlint-cli2; # added 2023-08-22
inherit (pkgs) mathjax; # Added 2025-11-28
inherit (pkgs) mathjax-node-cli; # added 2023-11-02
mastodon-bot = throw "'mastodon-bot' has been removed because it was archived by upstream in 2021."; # Added 2025-11-07
mdctl-cli = self."@medable/mdctl-cli"; # added 2023-08-21
meat = throw "meat was removed because it was abandoned upstream."; # Added 2025-10-20
inherit (pkgs) mermaid-cli; # added 2023-10-01
meshcommander = throw "meshcommander was removed because it was abandoned upstream"; # added 2024-12-02
inherit (pkgs) mocha; # Added 2025-11-04
multi-file-swagger = throw "'multi-file-swagger' has been removed because it is unmaintained upstream"; # Added 2025-11-10
musescore-downloader = pkgs.dl-librescore; # added 2023-08-19
near-cli = throw "'near-cli' has been removed as upstream has deprecated it and archived the source code repo"; # Added 2025-11-10
neovim = pkgs.neovim-node-client; # added 2024-11-13
nijs = throw "'nijs' has been removed as it was unmaintained upstream"; # Added 2025-11-14
inherit (pkgs) node-gyp-build; # Added 2025-11-27
node-inspector = throw "node-inspector was removed because it was broken"; # added 2023-08-21
inherit (pkgs) node-gyp; # added 2024-08-13
inherit (pkgs) node-pre-gyp; # added 2024-08-05
inherit (pkgs) node-red; # added 2024-10-06
inherit (pkgs) nodemon; # added 2024-06-28
np = throw "'np' has been removed because it was unmaintainable in nixpkgs"; # Added 2025-11-17
npm = pkgs.nodejs.overrideAttrs (old: {
meta = old.meta // {
mainProgram = "npm";
};
}); # added 2024-10-04
inherit (pkgs) npm-check-updates; # added 2023-08-22
npm-merge-driver = throw "'npm-merge-driver' has been removed, since the upstream repo was archived on Aug 11, 2021"; # Added 2025-11-07
inherit (pkgs) nrm; # Added 2025-11-08
ocaml-language-server = throw "ocaml-language-server was removed because it was abandoned upstream"; # added 2023-09-04
orval = throw "orval has been removed because it was broken"; # added 2025-03-23
parcel = throw "parcel has been removed because it was broken"; # added 2025-03-12
parcel-bundler = self.parcel; # added 2023-09-04
parsoid = throw "The Javascript version of Parsoid has been deprecated by upstream and no longer works with modern MediaWiki versions"; # Added 2025-11-04
inherit (pkgs) patch-package; # added 2024-06-29
peerflix = throw "'peerflix' has been removed because it was unmaintained upstream"; # Added 2025-11-14
inherit (pkgs) peerflix-server; # Added 2025-11-10
pkg = pkgs.vercel-pkg; # added 2023-10-04
inherit (pkgs) pm2; # added 2024-01-22
inherit (pkgs) pnpm; # added 2024-06-26
poor-mans-t-sql-formatter-cli = throw "'poor-mans-t-sql-formatter-cli' has been removed because it was unmaintained upstream"; # Added 2025-11-14
inherit (pkgs) postcss; # Added 2025-12-24
postcss-cli = throw "postcss-cli has been removed because it was broken"; # added 2025-03-24
prebuild-install = throw "prebuild-install was removed because it appeared to be unmaintained upstream. See upstream's recommendations for alternatives here: https://github.com/prebuild/prebuild-install#note"; # Added 2025-12-14
inherit (pkgs) prettier; # added 2025-05-31
prettier_d_slim = pkgs.prettier-d-slim; # added 2023-09-14
prettier-plugin-toml = throw "prettier-plugin-toml was removed because it provides no executable"; # added 2025-03-23
inherit (pkgs) prisma; # added 2024-08-31
pscid = throw "'pscid' has been removed because it was unmaintained upstream"; # Added 2025-12-07
pulp = throw "'pulp' has been removed because it was unmaintained upstream"; # Added 2025-12-07
purescript-language-server = throw "'purescript-language-server' has been removed because it was unmaintained within nixpkgs"; # Added 2025-12-12
purescript-psa = throw "'purescript-psa' has been removed because it was unmaintained within nixpkgs"; # Added 2025-12-12
purs-tidy = throw "'purs-tidy' has been removed because it was unmaintained within nixpkgs"; # Added 2025-12-12
purty = throw "'purty' has been remved because it was unmaintained upstream"; # Added 2025-11-14
inherit (pkgs) pxder; # added 2023-09-26
inherit (pkgs) quicktype; # added 2023-09-09
react-native-cli = throw "react-native-cli was removed because it was deprecated"; # added 2023-09-25
react-static = throw "'react-static has been removed because of a lack of upstream maintainance"; # Converted to throw 2025-11-04
react-tools = throw "react-tools was removed because it was deprecated"; # added 2023-09-25
readability-cli = pkgs.readability-cli; # Added 2023-06-12
inherit (pkgs) redoc-cli; # added 2023-09-12
remod-cli = pkgs.remod; # added 2024-12-04
"reveal.js" = throw "reveal.js was removed because it provides no executable"; # added 2025-03-23
reveal-md = pkgs.reveal-md; # added 2023-07-31
rimraf = throw "rimraf was removed because it is a library, and your project should lock it instead."; # added 2025-05-28
rollup = throw "rollup has been removed because it was broken"; # added 2025-04-28
inherit (pkgs) rtlcss; # added 2023-08-29
s3http = throw "s3http was removed because it was abandoned upstream"; # added 2023-08-18
sass = throw "sass has been removed because it was unmaintained in nixpkgs"; # Added 2026-03-01
inherit (pkgs) serve; # added 2025-08-27
inherit (pkgs) serverless; # Added 2023-11-29
shout = throw "shout was removed because it was deprecated upstream in favor of thelounge."; # Added 2024-10-19
inherit (pkgs) sloc; # Added 2025-11-28
smartdc = throw "'smartdc' was removed because it was unmaintained upstream"; # Added 2025-11-14
inherit (pkgs) snyk; # Added 2023-08-30
"socket.io" = throw "socket.io was removed because it provides no executable"; # added 2025-03-23
speed-test = throw "'speed-test' has been removed because it was broken"; # Added 2025-11-07
inherit (pkgs) sql-formatter; # added 2024-06-29
"@squoosh/cli" = throw "@squoosh/cli was removed because it was abandoned upstream"; # added 2023-09-02
ssb-server = throw "ssb-server was removed because it was broken"; # added 2023-08-21
stackdriver-statsd-backend = throw "stackdriver-statsd-backend was removed because Stackdriver is now discontinued"; # added 2024-12-02
stf = throw "stf was removed because it was broken"; # added 2023-08-21
inherit (pkgs) stylelint; # added 2023-09-13
surge = pkgs.surge-cli; # Added 2023-09-08
inherit (pkgs) svelte-check; # Added 2025-11-10
inherit (pkgs) svelte-language-server; # Added 2024-05-12
inherit (pkgs) svgo; # added 2025-08-24
swagger = throw "swagger was removed because it was broken and abandoned upstream"; # added 2023-09-09
inherit (pkgs) tailwindcss; # added 2024-12-04
teck-programmer = throw "teck-programmer was removed because it was broken and unmaintained"; # added 2024-08-23
tedicross = throw "tedicross was removed because it was broken"; # added 2023-09-09
tern = throw "'tern' was removed because it has been unmaintained upstream for several years"; # Added 2025-11-07
inherit (pkgs) terser; # Added 2023-08-31
inherit (pkgs) textlint; # Added 2024-05-13
textlint-plugin-latex = throw "textlint-plugin-latex was removed because it is unmaintained for years. Please use textlint-plugin-latex2e instead."; # Added 2024-05-17
inherit (pkgs) textlint-rule-abbr-within-parentheses; # Added 2024-05-17
inherit (pkgs) textlint-rule-alex; # Added 2024-05-16
inherit (pkgs) textlint-rule-common-misspellings; # Added 2024-05-25
inherit (pkgs) textlint-rule-diacritics; # Added 2024-05-16
inherit (pkgs) textlint-rule-en-max-word-count; # Added 2024-05-17
inherit (pkgs) textlint-rule-max-comma; # Added 2024-05-15
inherit (pkgs) textlint-rule-no-start-duplicated-conjunction; # Added 2024-05-17
inherit (pkgs) textlint-rule-period-in-list-item; # Added 2024-05-17
inherit (pkgs) textlint-rule-stop-words; # Added 2024-05-17
inherit (pkgs) textlint-rule-terminology; # Added 2024-05-17
inherit (pkgs) textlint-rule-unexpanded-acronym; # Added 2024-05-17
inherit (pkgs) textlint-rule-write-good; # Added 2024-05-16
thelounge = pkgs.thelounge; # Added 2023-05-22
thelounge-plugin-closepms = throw "thelounge-plugin-closepms has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-plugin-giphy = throw "thelounge-plugin-giphy has been removed because thelounge moved out of nodePackages"; # added 2025-03-12
thelounge-plugin-shortcuts = throw "thelounge-plugin-shortcuts has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-abyss = throw "thelounge-theme-abyss has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-amoled = throw "thelounge-theme-amoled has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-amoled-sourcecodepro = throw "thelounge-theme-amoled-sourcecodepro has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-bdefault = throw "thelounge-theme-bdefault has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-bmorning = throw "thelounge-theme-bmorning has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-chord = throw "thelounge-theme-chord has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-classic = throw "thelounge-theme-classic has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-common = throw "thelounge-theme-common has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-crypto = throw "thelounge-theme-crypto has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-discordapp = throw "thelounge-theme-discordapp has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-dracula = throw "thelounge-theme-dracula has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-dracula-official = throw "thelounge-theme-dracula-official has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-flat-blue = throw "thelounge-theme-flat-blue has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-flat-dark = throw "thelounge-theme-flat-dark has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-gruvbox = throw "thelounge-theme-gruvbox has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-hexified = throw "thelounge-theme-hexified has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-ion = throw "thelounge-theme-ion has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-light = throw "thelounge-theme-light has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-midnight = throw "thelounge-theme-midnight has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-mininapse = throw "thelounge-theme-mininapse has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-monokai-console = throw "thelounge-theme-monokai-console has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-mortified = throw "thelounge-theme-mortified has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-neuron-fork = throw "thelounge-theme-neuron-fork has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-new-morning = throw "thelounge-theme-new-morning has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-new-morning-compact = throw "thelounge-theme-new-morning-compact has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-nologo = throw "thelounge-theme-nologo has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-nord = throw "thelounge-theme-nord has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-onedark = throw "thelounge-theme-onedark has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-purplenight = throw "thelounge-theme-purplenight has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-scoutlink = throw "thelounge-theme-scoutlink has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-seraphimrp = throw "thelounge-theme-seraphimrp has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-solarized = throw "thelounge-theme-solarized has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-solarized-fork-monospace = throw "thelounge-theme-solarized-fork-monospace has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-zenburn = throw "thelounge-theme-zenburn has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-zenburn-monospace = throw "thelounge-theme-zenburn-monospace has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
thelounge-theme-zenburn-sourcecodepro = throw "thelounge-theme-zenburn-sourcecodepro has been removed because thelounge was moved out of nodePackages"; # added 2025-03-12
three = throw "three was removed because it was no longer needed"; # Added 2023-09-08
inherit (pkgs) tiddlywiki; # Added 2025-11-10
triton = pkgs.triton; # Added 2023-05-06
ts-node = throw "'ts-node' was removed because it is unmaintained, and since NodeJS 22.6.0+, experimental TypeScript support is built-in to NodeJS."; # Added 2025-11-07
tsun = throw "'tsun' has been removed because it was unmaintained upstream"; # Added 2025-11-14
ttf2eot = throw "'ttf2eot' has been removed because it was unmaintained upstream"; # Added 2025-11-14
typescript = pkgs.typescript; # Added 2023-06-21
inherit (pkgs) typescript-language-server; # added 2024-02-27
inherit (pkgs) uglify-js; # added 2024-06-15
inherit (pkgs) undollar; # added 2024-06-29
inherit (pkgs) ungit; # added 2023-08-20
unified-language-server = throw "unified-language-server was removed as it is a library that should be imported within a Javascript project, not an end-user tool"; # added 2025-10-02
inherit (pkgs) uppy-companion; # Added 2025-11-01
inherit (pkgs) vega-cli; # Added 2025-12-18
inherit (pkgs) vega-lite; # Added 2025-11-04
vercel = throw "vercel has been removed because it was unmaintained in nixpkgs"; # Added 2026-02-12
inherit (pkgs) vim-language-server; # added 2024-06-25
vls = throw "vls has been deprecated by upstream as vetur is also deprecated. Upstream suggests migrating to Volar for Vue LSP tooling instead."; # added 2024-12-09
inherit (pkgs) vsc-leetcode-cli; # Added 2023-08-30
vscode-css-languageserver-bin = throw "vscode-css-languageserver-bin has been removed since the upstream repository is archived; consider using vscode-langservers-extracted instead."; # added 2024-06-26
vscode-html-languageserver-bin = throw "vscode-html-languageserver-bin has been removed since the upstream repository is archived; consider using vscode-langservers-extracted instead."; # added 2024-06-26
inherit (pkgs) vscode-json-languageserver; # added 2025-06-19
vscode-json-languageserver-bin = throw "vscode-json-languageserver-bin has been removed since the upstream repository is archived; consider using vscode-langservers-extracted instead."; # added 2024-06-26
vscode-langservers-extracted = pkgs.vscode-langservers-extracted; # Added 2023-05-27
vue-language-server = self.vls; # added 2023-08-20
vue-cli = throw "vue-cli has been removed since upstream no longer recommends using it; consider using create-vue and the new Vite-based tooling instead."; # added 2024-07-12
wavedrom-cli = throw "wavedrom-cli has been removed because it was unmaintained within nixpkgs"; # Added 2026-01-20
inherit (pkgs) web-ext; # added 2023-08-20
webpack = throw "'webpack' has been removed because it is a library that should be imported within a Javascript project, not an end-user tool."; # Added 2025-11-04
inherit (pkgs) webpack-cli; # added 2024-12-03
webpack-dev-server = throw "webpack-dev-server has been removed. You should install it in your JS project instead."; # added 2024-12-05
webtorrent-cli = throw "webtorrent-cli has been removed because it was broken"; # added 2025-03-12
inherit (pkgs) wrangler; # added 2024-07-01
wring = throw "'wring' has been removed since it has been abandoned upstream"; # Added 2025-11-07
inherit (pkgs) write-good; # added 2023-08-20
inherit (pkgs) yalc; # added 2024-06-29
inherit (pkgs) yaml-language-server; # added 2023-09-05
inherit (pkgs) yarn; # added 2024-08-13
inherit (pkgs) yo; # added 2023-08-20
zx = pkgs.zx; # added 2023-08-01
}

View File

@@ -1,33 +0,0 @@
# This file has been generated by node2nix 1.11.1. Do not edit!
{
pkgs ? import <nixpkgs> {
inherit system;
},
system ? builtins.currentSystem,
nodejs ? pkgs."nodejs_22",
}:
let
nodeEnv = import ./node-env.nix {
inherit (pkgs)
stdenv
lib
runCommand
writeTextFile
writeShellScript
;
inherit pkgs nodejs;
libtool = if pkgs.stdenv.hostPlatform.isDarwin then pkgs.cctools or pkgs.darwin.cctools else null;
};
in
import ./node-packages.nix {
inherit (pkgs)
fetchurl
nix-gitignore
stdenv
lib
fetchgit
;
inherit nodeEnv;
}

View File

@@ -1,31 +0,0 @@
{
config,
pkgs,
lib,
nodejs,
stdenv,
}:
let
inherit (lib)
composeManyExtensions
extends
makeExtensible
;
nodePackages =
final:
import ./composition.nix {
inherit pkgs nodejs;
inherit (stdenv.hostPlatform) system;
};
aliases =
final: prev: lib.optionalAttrs config.allowAliases (import ./aliases.nix pkgs lib final prev);
extensions = composeManyExtensions [
aliases
(import ./overrides.nix { inherit pkgs nodejs; })
];
in
makeExtensible (extends extensions nodePackages)

View File

@@ -1,23 +0,0 @@
#!/usr/bin/env bash
set -eu -o pipefail
cd "$( dirname "${BASH_SOURCE[0]}" )"
node2nix=$(nix-build ../../.. -A nodePackages.node2nix)
rm -f ./node-env.nix
# Track the latest active nodejs LTS here: https://nodejs.org/en/about/releases/
"${node2nix}/bin/node2nix" \
-i node-packages.json \
-o node-packages.nix \
-c composition.nix \
--pkg-name nodejs_22
# using --no-out-link in nix-build argument would cause the
# gc to run before the script finishes
# which would cause a failure
# it's safer to just remove the link after the script finishes
# see https://github.com/NixOS/nixpkgs/issues/112846 for more details
rm ./result

View File

@@ -1,798 +0,0 @@
# This file originates from node2nix
{
lib,
stdenv,
nodejs,
pkgs,
libtool,
runCommand,
writeTextFile,
writeShellScript,
}:
let
inherit (nodejs) python;
# Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
tarWrapper = runCommand "tarWrapper" { } ''
mkdir -p $out/bin
cat > $out/bin/tar <<EOF
#! ${stdenv.shell} -e
$(type -p tar) "\$@" --warning=no-unknown-keyword --delay-directory-restore
EOF
chmod +x $out/bin/tar
'';
# Function that generates a TGZ file from a NPM project
buildNodeSourceDist =
{
name,
version,
src,
...
}:
stdenv.mkDerivation {
name = "node-tarball-${name}-${version}";
inherit src;
buildInputs = [ nodejs ];
buildPhase = ''
export HOME=$TMPDIR
tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts)
'';
installPhase = ''
mkdir -p $out/tarballs
mv $tgzFile $out/tarballs
mkdir -p $out/nix-support
echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
'';
};
# Common shell logic
installPackage = writeShellScript "install-package" ''
installPackage() {
local packageName=$1 src=$2
local strippedName
local DIR=$PWD
cd $TMPDIR
unpackFile $src
# Make the base dir in which the target dependency resides first
mkdir -p "$(dirname "$DIR/$packageName")"
if [ -f "$src" ]
then
# Figure out what directory has been unpacked
packageDir="$(find . -maxdepth 1 -type d | tail -1)"
# Restore write permissions to make building work
find "$packageDir" -type d -exec chmod u+x {} \;
chmod -R u+w "$packageDir"
# Move the extracted tarball into the output folder
mv "$packageDir" "$DIR/$packageName"
elif [ -d "$src" ]
then
# Get a stripped name (without hash) of the source directory.
# On old nixpkgs it's already set internally.
if [ -z "$strippedName" ]
then
strippedName="$(stripHash $src)"
fi
# Restore write permissions to make building work
chmod -R u+w "$strippedName"
# Move the extracted directory into the output folder
mv "$strippedName" "$DIR/$packageName"
fi
# Change to the package directory to install dependencies
cd "$DIR/$packageName"
}
'';
# Bundle the dependencies of the package
#
# Only include dependencies if they don't exist. They may also be bundled in the package.
includeDependencies =
{ dependencies }:
lib.optionalString (dependencies != [ ]) (
''
mkdir -p node_modules
cd node_modules
''
+ (lib.concatMapStrings (dependency: ''
if [ ! -e "${dependency.packageName}" ]; then
${composePackage dependency}
fi
'') dependencies)
+ ''
cd ..
''
);
# Recursively composes the dependencies of a package
composePackage =
{
name,
packageName,
src,
dependencies ? [ ],
...
}@args:
builtins.addErrorContext "while evaluating node package '${packageName}'" ''
installPackage "${packageName}" "${src}"
${includeDependencies { inherit dependencies; }}
cd ..
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
'';
pinpointDependencies =
{ dependencies, production }:
let
pinpointDependenciesFromPackageJSON = writeTextFile {
name = "pinpointDependencies.js";
text = ''
var fs = require('fs');
var path = require('path');
function resolveDependencyVersion(location, name) {
if(location == process.env['NIX_STORE']) {
return null;
} else {
var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
if(fs.existsSync(dependencyPackageJSON)) {
var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
if(dependencyPackageObj.name == name) {
return dependencyPackageObj.version;
}
} else {
return resolveDependencyVersion(path.resolve(location, ".."), name);
}
}
}
function replaceDependencies(dependencies) {
if(typeof dependencies == "object" && dependencies !== null) {
for(var dependency in dependencies) {
var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
if(resolvedVersion === null) {
process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
} else {
dependencies[dependency] = resolvedVersion;
}
}
}
}
/* Read the package.json configuration */
var packageObj = JSON.parse(fs.readFileSync('./package.json'));
/* Pinpoint all dependencies */
replaceDependencies(packageObj.dependencies);
if(process.argv[2] == "development") {
replaceDependencies(packageObj.devDependencies);
}
else {
packageObj.devDependencies = {};
}
replaceDependencies(packageObj.optionalDependencies);
replaceDependencies(packageObj.peerDependencies);
/* Write the fixed package.json file */
fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
'';
};
in
''
node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
${lib.optionalString (dependencies != [ ]) ''
if [ -d node_modules ]
then
cd node_modules
${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
cd ..
fi
''}
'';
# Recursively traverses all dependencies of a package and pinpoints all
# dependencies in the package.json file to the versions that are actually
# being used.
pinpointDependenciesOfPackage =
{
packageName,
dependencies ? [ ],
production ? true,
...
}@args:
''
if [ -d "${packageName}" ]
then
cd "${packageName}"
${pinpointDependencies { inherit dependencies production; }}
cd ..
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
fi
'';
# Extract the Node.js source code which is used to compile packages with
# native bindings
nodeSources = runCommand "node-sources" { } ''
tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
mv node-* $out
'';
# Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
addIntegrityFieldsScript = writeTextFile {
name = "addintegrityfields.js";
text = ''
var fs = require('fs');
var path = require('path');
function augmentDependencies(baseDir, dependencies) {
for(var dependencyName in dependencies) {
var dependency = dependencies[dependencyName];
// Open package.json and augment metadata fields
var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
var packageJSONPath = path.join(packageJSONDir, "package.json");
if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
console.log("Adding metadata fields to: "+packageJSONPath);
var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
if(dependency.integrity) {
packageObj["_integrity"] = dependency.integrity;
} else {
packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads.
}
if(dependency.resolved) {
packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided
} else {
packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
}
if(dependency.from !== undefined) { // Adopt from property if one has been provided
packageObj["_from"] = dependency.from;
}
fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
}
// Augment transitive dependencies
if(dependency.dependencies !== undefined) {
augmentDependencies(packageJSONDir, dependency.dependencies);
}
}
}
if(fs.existsSync("./package-lock.json")) {
var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
if(![1, 2].includes(packageLock.lockfileVersion)) {
process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n");
process.exit(1);
}
if(packageLock.dependencies !== undefined) {
augmentDependencies(".", packageLock.dependencies);
}
}
'';
};
# Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
reconstructPackageLock = writeTextFile {
name = "reconstructpackagelock.js";
text = ''
var fs = require('fs');
var path = require('path');
var packageObj = JSON.parse(fs.readFileSync("package.json"));
var lockObj = {
name: packageObj.name,
version: packageObj.version,
lockfileVersion: 2,
requires: true,
packages: {
"": {
name: packageObj.name,
version: packageObj.version,
license: packageObj.license,
bin: packageObj.bin,
dependencies: packageObj.dependencies,
engines: packageObj.engines,
optionalDependencies: packageObj.optionalDependencies
}
},
dependencies: {}
};
function augmentPackageJSON(filePath, packages, dependencies) {
var packageJSON = path.join(filePath, "package.json");
if(fs.existsSync(packageJSON)) {
var packageObj = JSON.parse(fs.readFileSync(packageJSON));
packages[filePath] = {
version: packageObj.version,
integrity: "sha1-000000000000000000000000000=",
dependencies: packageObj.dependencies,
engines: packageObj.engines,
optionalDependencies: packageObj.optionalDependencies
};
dependencies[packageObj.name] = {
version: packageObj.version,
integrity: "sha1-000000000000000000000000000=",
dependencies: {}
};
processDependencies(path.join(filePath, "node_modules"), packages, dependencies[packageObj.name].dependencies);
}
}
function processDependencies(dir, packages, dependencies) {
if(fs.existsSync(dir)) {
var files = fs.readdirSync(dir);
files.forEach(function(entry) {
var filePath = path.join(dir, entry);
var stats = fs.statSync(filePath);
if(stats.isDirectory()) {
if(entry.substr(0, 1) == "@") {
// When we encounter a namespace folder, augment all packages belonging to the scope
var pkgFiles = fs.readdirSync(filePath);
pkgFiles.forEach(function(entry) {
if(stats.isDirectory()) {
var pkgFilePath = path.join(filePath, entry);
augmentPackageJSON(pkgFilePath, packages, dependencies);
}
});
} else {
augmentPackageJSON(filePath, packages, dependencies);
}
}
});
}
}
processDependencies("node_modules", lockObj.packages, lockObj.dependencies);
fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
'';
};
# Script that links bins defined in package.json to the node_modules bin directory
# NPM does not do this for top-level packages itself anymore as of v7
linkBinsScript = writeTextFile {
name = "linkbins.js";
text = ''
var fs = require('fs');
var path = require('path');
var packageObj = JSON.parse(fs.readFileSync("package.json"));
var nodeModules = Array(packageObj.name.split("/").length).fill("..").join(path.sep);
if(packageObj.bin !== undefined) {
fs.mkdirSync(path.join(nodeModules, ".bin"))
if(typeof packageObj.bin == "object") {
Object.keys(packageObj.bin).forEach(function(exe) {
if(fs.existsSync(packageObj.bin[exe])) {
console.log("linking bin '" + exe + "'");
fs.symlinkSync(
path.join("..", packageObj.name, packageObj.bin[exe]),
path.join(nodeModules, ".bin", exe)
);
}
else {
console.log("skipping non-existent bin '" + exe + "'");
}
})
}
else {
if(fs.existsSync(packageObj.bin)) {
console.log("linking bin '" + packageObj.bin + "'");
fs.symlinkSync(
path.join("..", packageObj.name, packageObj.bin),
path.join(nodeModules, ".bin", packageObj.name.split("/").pop())
);
}
else {
console.log("skipping non-existent bin '" + packageObj.bin + "'");
}
}
}
else if(packageObj.directories !== undefined && packageObj.directories.bin !== undefined) {
fs.mkdirSync(path.join(nodeModules, ".bin"))
fs.readdirSync(packageObj.directories.bin).forEach(function(exe) {
if(fs.existsSync(path.join(packageObj.directories.bin, exe))) {
console.log("linking bin '" + exe + "'");
fs.symlinkSync(
path.join("..", packageObj.name, packageObj.directories.bin, exe),
path.join(nodeModules, ".bin", exe)
);
}
else {
console.log("skipping non-existent bin '" + exe + "'");
}
})
}
'';
};
prepareAndInvokeNPM =
{
packageName,
bypassCache,
reconstructLock,
npmFlags,
production,
}:
let
forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
in
''
# Pinpoint the versions of all dependencies to the ones that are actually being used
echo "pinpointing versions of dependencies..."
source $pinpointDependenciesScriptPath
# Patch the shebangs of the bundled modules to prevent them from
# calling executables outside the Nix store as much as possible
patchShebangs .
# Deploy the Node.js package by running npm install. Since the
# dependencies have been provided already by ourselves, it should not
# attempt to install them again, which is good, because we want to make
# it Nix's responsibility. If it needs to install any dependencies
# anyway (e.g. because the dependency parameters are
# incomplete/incorrect), it fails.
#
# The other responsibilities of NPM are kept -- version checks, build
# steps, postprocessing etc.
export HOME=$TMPDIR
cd "${packageName}"
runHook preRebuild
${lib.optionalString bypassCache ''
${lib.optionalString reconstructLock ''
if [ -f package-lock.json ]
then
echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!"
echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!"
rm package-lock.json
else
echo "No package-lock.json file found, reconstructing..."
fi
node ${reconstructPackageLock}
''}
node ${addIntegrityFieldsScript}
''}
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
runHook postRebuild
if [ "''${dontNpmInstall-}" != "1" ]
then
# NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
rm -f npm-shrinkwrap.json
npm ${forceOfflineFlag} --nodedir=${nodeSources} --no-bin-links --ignore-scripts ${npmFlags} ${lib.optionalString production "--production"} install
fi
# Link executables defined in package.json
node ${linkBinsScript}
'';
# Builds and composes an NPM package including all its dependencies
buildNodePackage =
{
name,
packageName,
version ? null,
dependencies ? [ ],
buildInputs ? [ ],
production ? true,
npmFlags ? "",
dontNpmInstall ? false,
bypassCache ? false,
reconstructLock ? false,
preRebuild ? "",
dontStrip ? true,
unpackPhase ? "true",
buildPhase ? "true",
meta ? { },
...
}@args:
let
extraArgs = removeAttrs args [
"name"
"dependencies"
"buildInputs"
"dontStrip"
"dontNpmInstall"
"preRebuild"
"unpackPhase"
"buildPhase"
"meta"
];
in
stdenv.mkDerivation (
{
pname = name;
buildInputs = [
tarWrapper
python
nodejs
]
++ lib.optional (stdenv.hostPlatform.isLinux) pkgs.util-linux
++ lib.optional (stdenv.hostPlatform.isDarwin) libtool
++ buildInputs;
inherit nodejs;
inherit dontStrip; # Stripping may fail a build for some package deployments
inherit
dontNpmInstall
preRebuild
unpackPhase
buildPhase
;
compositionScript = composePackage args;
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
passAsFile = [
"compositionScript"
"pinpointDependenciesScript"
];
installPhase = ''
source ${installPackage}
# Create and enter a root node_modules/ folder
mkdir -p $out/lib/node_modules
cd $out/lib/node_modules
# Compose the package and all its dependencies
source $compositionScriptPath
${prepareAndInvokeNPM {
inherit
packageName
bypassCache
reconstructLock
npmFlags
production
;
}}
# Create symlink to the deployed executable folder, if applicable
if [ -d "$out/lib/node_modules/.bin" ]
then
ln -s $out/lib/node_modules/.bin $out/bin
# Fixup all executables
ls $out/bin/* | while read i
do
file="$(readlink -f "$i")"
chmod u+rwx "$file"
if isScript "$file"
then
sed -i 's/\r$//' "$file" # convert crlf to lf
fi
done
fi
# Create symlinks to the deployed manual page folders, if applicable
if [ -d "$out/lib/node_modules/${packageName}/man" ]
then
mkdir -p $out/share
for dir in "$out/lib/node_modules/${packageName}/man/"*
do
mkdir -p $out/share/man/$(basename "$dir")
for page in "$dir"/*
do
ln -s $page $out/share/man/$(basename "$dir")
done
done
fi
# Run post install hook, if provided
runHook postInstall
'';
meta = {
# default to Node.js' platforms
platforms = nodejs.meta.platforms;
}
// meta;
}
// extraArgs
);
# Builds a node environment (a node_modules folder and a set of binaries)
buildNodeDependencies =
{
name,
packageName,
version ? null,
src,
dependencies ? [ ],
buildInputs ? [ ],
production ? true,
npmFlags ? "",
dontNpmInstall ? false,
bypassCache ? false,
reconstructLock ? false,
dontStrip ? true,
unpackPhase ? "true",
buildPhase ? "true",
...
}@args:
let
extraArgs = removeAttrs args [
"name"
"dependencies"
"buildInputs"
];
in
stdenv.mkDerivation (
{
name = "node-dependencies-${name}${if version == null then "" else "-${version}"}";
buildInputs = [
tarWrapper
python
nodejs
]
++ lib.optional (stdenv.hostPlatform.isLinux) pkgs.util-linux
++ lib.optional (stdenv.hostPlatform.isDarwin) libtool
++ buildInputs;
inherit dontStrip; # Stripping may fail a build for some package deployments
inherit dontNpmInstall unpackPhase buildPhase;
includeScript = includeDependencies { inherit dependencies; };
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
passAsFile = [
"includeScript"
"pinpointDependenciesScript"
];
installPhase = ''
source ${installPackage}
mkdir -p $out/${packageName}
cd $out/${packageName}
source $includeScriptPath
# Create fake package.json to make the npm commands work properly
cp ${src}/package.json .
chmod 644 package.json
${lib.optionalString bypassCache ''
if [ -f ${src}/package-lock.json ]
then
cp ${src}/package-lock.json .
chmod 644 package-lock.json
fi
''}
# Go to the parent folder to make sure that all packages are pinpointed
cd ..
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
${prepareAndInvokeNPM {
inherit
packageName
bypassCache
reconstructLock
npmFlags
production
;
}}
# Expose the executables that were installed
cd ..
${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
mv ${packageName} lib
ln -s $out/lib/node_modules/.bin $out/bin
'';
}
// extraArgs
);
# Builds a development shell
buildNodeShell =
{
name,
packageName,
version ? null,
src,
dependencies ? [ ],
buildInputs ? [ ],
production ? true,
npmFlags ? "",
dontNpmInstall ? false,
bypassCache ? false,
reconstructLock ? false,
dontStrip ? true,
unpackPhase ? "true",
buildPhase ? "true",
...
}@args:
let
nodeDependencies = buildNodeDependencies args;
extraArgs = removeAttrs args [
"name"
"dependencies"
"buildInputs"
"dontStrip"
"dontNpmInstall"
"unpackPhase"
"buildPhase"
];
in
stdenv.mkDerivation (
{
name = "node-shell-${name}${if version == null then "" else "-${version}"}";
buildInputs = [
python
nodejs
]
++ lib.optional (stdenv.hostPlatform.isLinux) pkgs.util-linux
++ buildInputs;
buildCommand = ''
mkdir -p $out/bin
cat > $out/bin/shell <<EOF
#! ${stdenv.shell} -e
$shellHook
exec ${stdenv.shell}
EOF
chmod +x $out/bin/shell
'';
# Provide the dependencies in a development shell through the NODE_PATH environment variable
inherit nodeDependencies;
shellHook = lib.optionalString (dependencies != [ ]) ''
export NODE_PATH=${nodeDependencies}/lib/node_modules
export PATH="${nodeDependencies}/bin:$PATH"
'';
}
// extraArgs
);
in
{
buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
buildNodePackage = lib.makeOverridable buildNodePackage;
buildNodeDependencies = lib.makeOverridable buildNodeDependencies;
buildNodeShell = lib.makeOverridable buildNodeShell;
}

View File

@@ -1,4 +0,0 @@
[
"node2nix",
"semver"
]

File diff suppressed because it is too large Load Diff

View File

@@ -1,56 +0,0 @@
{ pkgs, nodejs }:
let
inherit (pkgs)
lib
fetchFromGitHub
fetchpatch
;
in
final: prev: {
inherit nodejs;
node2nix = prev.node2nix.override {
# Get latest commit for misc fixes
src = fetchFromGitHub {
owner = "svanderburg";
repo = "node2nix";
rev = "315e1b85a6761152f57a41ccea5e2570981ec670";
sha256 = "sha256-8OxTOkwBPcnjyhXhxQEDd8tiaQoHt91zUJX5Ka+IXco=";
};
nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
postInstall =
let
patches = [
# Needed to fix packages with DOS line-endings after above patch - PR svanderburg/node2nix#314
(fetchpatch {
name = "convert-crlf-for-script-bin-files.patch";
url = "https://github.com/svanderburg/node2nix/commit/91aa511fe7107938b0409a02ab8c457a6de2d8ca.patch";
hash = "sha256-ISiKYkur/o8enKDzJ8mQndkkSC4yrTNlheqyH+LiXlU=";
})
# fix nodejs attr names
(fetchpatch {
url = "https://github.com/svanderburg/node2nix/commit/3b63e735458947ef39aca247923f8775633363e5.patch";
hash = "sha256-pe8Xm4mjPh9oKXugoMY6pRl8YYgtdw0sRXN+TienalU=";
})
# Use top-level cctools in generated files - PR svanderburg/node2nix#334
(fetchpatch {
url = "https://github.com/svanderburg/node2nix/commit/31c308bba5f39ea0105f66b9f40dbe57fed7a292.patch";
hash = "sha256-DdNRteonMvyffPh0uo0lUbsohKYnyqv0QcD9vjN6aXE=";
})
# Prefer util-linux over removed utillinux alias - PR svanderburg/node2nix#336
(fetchpatch {
url = "https://github.com/svanderburg/node2nix/commit/ef5dc43e15d13129a9ddf6164c7bc2800a25792e.patch";
hash = "sha256-ByIA0oQmEfb4PyVwGEtrR3NzWiy1YCn1FPdSKNDkNCw=";
})
];
in
''
${lib.concatStringsSep "\n" (
map (patch: "patch -d $out/lib/node_modules/node2nix -p1 < ${patch}") patches
)}
wrapProgram "$out/bin/node2nix" --prefix PATH : ${lib.makeBinPath [ pkgs.nix ]}
'';
};
}

View File

@@ -1,67 +0,0 @@
#!/usr/bin/env nix-shell
#!nix-shell -i python3 -p python3
import collections.abc
import fileinput
import json
import os.path
import re
import sys
def remove(attr):
with open(os.path.join(os.path.dirname(__file__), 'node-packages.json'), 'r+') as node_packages_json:
packages = json.load(node_packages_json)
idx = 0
while idx < len(packages):
if packages[idx] == attr or (isinstance(packages[idx], collections.abc.Mapping) and next(iter(packages[idx].keys())) == attr):
del packages[idx]
else:
idx += 1
node_packages_json.seek(0)
for idx, package in enumerate(packages):
if idx == 0:
node_packages_json.write('[\n ')
else:
node_packages_json.write(', ')
json.dump(package, node_packages_json)
node_packages_json.write('\n')
node_packages_json.write(']\n')
node_packages_json.truncate()
with fileinput.input(os.path.join(os.path.dirname(__file__), 'node-packages.nix'), inplace=1) as node_packages:
safe_attr = re.escape(attr)
in_attr = False
for line in node_packages:
if in_attr:
if re.fullmatch(r' \};\n', line):
in_attr = False
else:
if re.fullmatch(rf' (?:{safe_attr}|"{safe_attr}") = nodeEnv\.buildNodePackage \{{\n', line):
in_attr = True
else:
sys.stdout.write(line)
with fileinput.input(os.path.join(os.path.dirname(__file__), 'overrides.nix'), inplace=1) as overrides:
safe_attr = re.escape(attr)
in_attr = False
for line in overrides:
if in_attr:
if re.fullmatch(r' \}\)?;\n', line):
in_attr = False
else:
if re.fullmatch(rf' (?:{safe_attr}|"{safe_attr}") = .* \{{\n', line):
in_attr = True
else:
sys.stdout.write(line)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser(description='Remove a given package from the node-packages.nix file')
parser.add_argument('attr', help='The package attribute to remove')
args = parser.parse_args()
remove(args.attr)

View File

@@ -349,10 +349,6 @@ let
passthru.interpreterName = "nodejs";
passthru.pkgs = callPackage ../../node-packages/default.nix {
nodejs = self;
};
setupHook = ./setup-hook.sh;
pos = builtins.unsafeGetAttrPos "version" args;

View File

@@ -1462,6 +1462,9 @@ mapAliases {
nixosTest = throw "'nixosTest' has been renamed to/replaced by 'testers.nixosTest'"; # Converted to throw 2025-10-27
nixStable = throw "'nixStable' has been renamed to/replaced by 'nixVersions.stable'"; # Converted to throw 2025-10-27
nm-tray = throw "'nm-tray' has been removed, as it only works with Plasma 5"; # Added 2025-08-30
node2nix = throw "node2nix has been removed because it was only used to maintain the now-removed nodePackages set. Use the newer builders in nixpkgs instead, such as buildNpmPackage"; # Added 2026-03-03
nodePackages = throw "nodePackages has been removed because it was unmaintainable within nixpkgs"; # Added 2026-03-03
nodePackages_latest = throw "nodePackages has been removed because it was unmaintainable within nixpkgs"; # Added 2026-03-03
nofi = throw "'nofi' has been removed due to being archived upstream."; # Added 2026-01-16
nomacs-qt6 = nomacs; # Added 2025-08-30
norouter = throw "norouter has been removed because it has been marked as broken since at least November 2024."; # Added 2025-09-29

View File

@@ -2840,12 +2840,6 @@ with pkgs;
importNpmLock = callPackages ../build-support/node/import-npm-lock { };
nodePackages_latest = recurseIntoAttrs nodejs_latest.pkgs;
nodePackages = recurseIntoAttrs nodejs.pkgs;
node2nix = nodePackages.node2nix;
ldapdomaindump = with python3Packages; toPythonApplication ldapdomaindump;
leanblueprint = with python3Packages; toPythonApplication leanblueprint;