diff --git a/doc/languages-frameworks/javascript.section.md b/doc/languages-frameworks/javascript.section.md index d6ee39da6c33..d4594751e55d 100644 --- a/doc/languages-frameworks/javascript.section.md +++ b/doc/languages-frameworks/javascript.section.md @@ -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. diff --git a/doc/languages-frameworks/vim.section.md b/doc/languages-frameworks/vim.section.md index d884b5f23a7c..2f3790d38547 100644 --- a/doc/languages-frameworks/vim.section.md +++ b/doc/languages-frameworks/vim.section.md @@ -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). diff --git a/doc/redirects.json b/doc/redirects.json index aa574709a71f..8b66c806017b 100644 --- a/doc/redirects.json +++ b/doc/redirects.json @@ -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" ], diff --git a/doc/release-notes/rl-2605.section.md b/doc/release-notes/rl-2605.section.md index c68c7add952d..ed1f18a3c3bb 100644 --- a/doc/release-notes/rl-2605.section.md +++ b/doc/release-notes/rl-2605.section.md @@ -74,6 +74,12 @@ +- 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 diff --git a/pkgs/development/node-packages/README.md b/pkgs/development/node-packages/README.md deleted file mode 100644 index c13e1b717eed..000000000000 --- a/pkgs/development/node-packages/README.md +++ /dev/null @@ -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. - ``` - - To build against the latest stable current Node.js version (e.g. 18.x): - - ```sh - nix-build -A nodePackages_latest. - ``` - - 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/ -``` diff --git a/pkgs/development/node-packages/aliases.nix b/pkgs/development/node-packages/aliases.nix deleted file mode 100644 index b38826fdc2b7..000000000000 --- a/pkgs/development/node-packages/aliases.nix +++ /dev/null @@ -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 -} diff --git a/pkgs/development/node-packages/composition.nix b/pkgs/development/node-packages/composition.nix deleted file mode 100644 index 6d49245bff5d..000000000000 --- a/pkgs/development/node-packages/composition.nix +++ /dev/null @@ -1,33 +0,0 @@ -# This file has been generated by node2nix 1.11.1. Do not edit! - -{ - pkgs ? import { - 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; -} diff --git a/pkgs/development/node-packages/default.nix b/pkgs/development/node-packages/default.nix deleted file mode 100644 index 25ae1500976c..000000000000 --- a/pkgs/development/node-packages/default.nix +++ /dev/null @@ -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) diff --git a/pkgs/development/node-packages/generate.sh b/pkgs/development/node-packages/generate.sh deleted file mode 100755 index 3e4f6218da12..000000000000 --- a/pkgs/development/node-packages/generate.sh +++ /dev/null @@ -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 diff --git a/pkgs/development/node-packages/node-env.nix b/pkgs/development/node-packages/node-env.nix deleted file mode 100644 index 55d96e0b4a93..000000000000 --- a/pkgs/development/node-packages/node-env.nix +++ /dev/null @@ -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 <> $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 <