mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-06-05 21:03:40 +00:00
nodePackages{,_latest}: drop and throw (#496365)
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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"
|
||||
],
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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/
|
||||
```
|
||||
@@ -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
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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)
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
[
|
||||
"node2nix",
|
||||
"semver"
|
||||
]
|
||||
4233
pkgs/development/node-packages/node-packages.nix
generated
4233
pkgs/development/node-packages/node-packages.nix
generated
File diff suppressed because it is too large
Load Diff
@@ -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 ]}
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -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)
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user