diff options
author | Malo Bourgon <mbourgon@gmail.com> | 2022-05-06 13:50:19 -0700 |
---|---|---|
committer | Malo Bourgon <mbourgon@gmail.com> | 2022-05-14 11:30:15 -0700 |
commit | 31673e9aeea93605f4727408ac9701dcbb552f38 (patch) | |
tree | 8dbee0bb17a697a271a55374f1178261f669ab17 /pkgs/development/node-packages/default.nix | |
parent | 745739f280b049b2dc24d75a935b7fcb9ef6efb7 (diff) | |
download | nixpkgs-31673e9aeea93605f4727408ac9701dcbb552f38.tar nixpkgs-31673e9aeea93605f4727408ac9701dcbb552f38.tar.gz nixpkgs-31673e9aeea93605f4727408ac9701dcbb552f38.tar.bz2 nixpkgs-31673e9aeea93605f4727408ac9701dcbb552f38.tar.lz nixpkgs-31673e9aeea93605f4727408ac9701dcbb552f38.tar.xz nixpkgs-31673e9aeea93605f4727408ac9701dcbb552f38.tar.zst nixpkgs-31673e9aeea93605f4727408ac9701dcbb552f38.zip |
nodePackages: make it easy to add meta.mainProgram to packages
This was accomplish by moving the current overrides overlay out of ./default.nix into to a seperate file ./overrides.nix, and composing that overlay an overlay ,`mainProgramOverrides`, (defined in ./default.nix) which uses the contents of a new file ./main-programs.nix to create overrides that add `meta.mainProgram` to packages. The following changes were also made to existing overrides: * `self` and `super` where changed to `final` and `prev` respectively * Existing additions of `mainProgram` were moved to ./main-programs.nix * References to `pkgs.lib` were changed to `lib` * References to `pkgs.nodejs` were changed to `nodejs` * References to `nodePackages` were changed to `final` * References to `pkgs.callPackage` were changed to `callPackage` Finally `meta.mainProgram` was added to all packages that provide a single executable whose name differs from the package's name, for packages available on `{aarch64,x86_64}-darwin` and `x86_64-linux`.
Diffstat (limited to 'pkgs/development/node-packages/default.nix')
-rw-r--r-- | pkgs/development/node-packages/default.nix | 551 |
1 files changed, 17 insertions, 534 deletions
diff --git a/pkgs/development/node-packages/default.nix b/pkgs/development/node-packages/default.nix index 4f9b10574a8..0fcd508012e 100644 --- a/pkgs/development/node-packages/default.nix +++ b/pkgs/development/node-packages/default.nix @@ -1,540 +1,23 @@ -{ pkgs, nodejs, stdenv, applyPatches, fetchFromGitHub, fetchpatch, fetchurl, nixosTests }: +{ pkgs, lib, nodejs, stdenv}: let - inherit (pkgs) lib; - since = version: pkgs.lib.versionAtLeast nodejs.version version; - before = version: pkgs.lib.versionOlder nodejs.version version; - super = import ./composition.nix { + inherit (lib) composeManyExtensions extends makeExtensible mapAttrs; + + nodePackages = final: import ./composition.nix { inherit pkgs nodejs; inherit (stdenv.hostPlatform) system; }; - self = super // { - "@angular/cli" = super."@angular/cli".override { - prePatch = '' - export NG_CLI_ANALYTICS=false - ''; - }; - - "@electron-forge/cli" = super."@electron-forge/cli".override { - buildInputs = [ self.node-pre-gyp self.rimraf ]; - }; - - autoprefixer = super.autoprefixer.override { - nativeBuildInputs = [ pkgs.makeWrapper ]; - postInstall = '' - wrapProgram "$out/bin/autoprefixer" \ - --prefix NODE_PATH : ${self.postcss}/lib/node_modules - ''; - passthru.tests = { - simple-execution = pkgs.callPackage ./package-tests/autoprefixer.nix { inherit (self) autoprefixer; }; - }; - }; - - aws-azure-login = super.aws-azure-login.override (oldAttrs: { - nativeBuildInputs = [ pkgs.makeWrapper ]; - prePatch = '' - export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 - ''; - postInstall = '' - wrapProgram $out/bin/aws-azure-login \ - --set PUPPETEER_EXECUTABLE_PATH ${pkgs.chromium}/bin/chromium - ''; - meta = oldAttrs.meta // { platforms = pkgs.lib.platforms.linux; }; - }); - - bitwarden-cli = super."@bitwarden/cli".override (oldAttrs: { - name = "bitwarden-cli"; - meta = oldAttrs.meta // { mainProgram = "bw"; }; - }); - - bower2nix = super.bower2nix.override { - buildInputs = [ pkgs.makeWrapper ]; - postInstall = '' - for prog in bower2nix fetch-bower; do - wrapProgram "$out/bin/$prog" --prefix PATH : ${pkgs.lib.makeBinPath [ pkgs.git pkgs.nix ]} - done - ''; - }; - - carbon-now-cli = super.carbon-now-cli.override { - nativeBuildInputs = [ pkgs.makeWrapper ]; - prePatch = '' - export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 - ''; - postInstall = '' - wrapProgram $out/bin/carbon-now \ - --set PUPPETEER_EXECUTABLE_PATH ${pkgs.chromium.outPath}/bin/chromium - ''; - }; - - coc-imselect = super.coc-imselect.override (oldAttrs: { - meta = oldAttrs.meta // { broken = since "10"; }; - }); - - dat = super.dat.override (oldAttrs: { - buildInputs = [ self.node-gyp-build pkgs.libtool pkgs.autoconf pkgs.automake ]; - meta = oldAttrs.meta // { broken = since "12"; }; - }); - - deltachat-desktop = super."deltachat-desktop-../../applications/networking/instant-messengers/deltachat-desktop".override (oldAttrs: { - meta = oldAttrs.meta // { broken = true; }; # use the top-level package instead - }); - - # NOTE: this is a stub package to fetch npm dependencies for - # ../../applications/video/epgstation - epgstation = super."epgstation-../../applications/video/epgstation".override (oldAttrs: { - buildInputs = [ self.node-pre-gyp self.node-gyp-build ]; - meta = oldAttrs.meta // { platforms = pkgs.lib.platforms.none; }; - }); - - # NOTE: this is a stub package to fetch npm dependencies for - # ../../applications/video/epgstation/client - epgstation-client = super."epgstation-client-../../applications/video/epgstation/client".override (oldAttrs: { - meta = oldAttrs.meta // { platforms = pkgs.lib.platforms.none; }; - }); - - expo-cli = super."expo-cli".override (oldAttrs: { - # The traveling-fastlane-darwin optional dependency aborts build on Linux. - dependencies = builtins.filter (d: d.packageName != "@expo/traveling-fastlane-${if stdenv.isLinux then "darwin" else "linux"}") oldAttrs.dependencies; - }); - - fast-cli = super.fast-cli.override { - nativeBuildInputs = [ pkgs.makeWrapper ]; - prePatch = '' - export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 - ''; - postInstall = '' - wrapProgram $out/bin/fast \ - --set PUPPETEER_EXECUTABLE_PATH ${pkgs.chromium.outPath}/bin/chromium - ''; - }; - - flood = super.flood.override (oldAttrs: { - buildInputs = [ self.node-pre-gyp ]; - meta = oldAttrs.meta // { mainProgram = "flood"; }; - }); - - git-ssb = super.git-ssb.override (oldAttrs: { - buildInputs = [ self.node-gyp-build ]; - meta = oldAttrs.meta // { broken = since "10"; }; - }); - - hsd = super.hsd.override { - buildInputs = [ self.node-gyp-build pkgs.unbound ]; - }; - - hyperspace-cli = super."@hyperspace/cli".override { - nativeBuildInputs = with pkgs; [ - makeWrapper - libtool - autoconf - automake - ]; - buildInputs = with pkgs; [ - nodePackages.node-gyp-build - nodejs - ]; - postInstall = '' - wrapProgram "$out/bin/hyp" --prefix PATH : ${ - pkgs.lib.makeBinPath [ pkgs.nodejs ] - } - ''; - }; - - ijavascript = super.ijavascript.override (oldAttrs: { - preRebuild = '' - export NPM_CONFIG_ZMQ_EXTERNAL=true - ''; - buildInputs = oldAttrs.buildInputs ++ [ self.node-gyp-build pkgs.zeromq ]; - }); - - insect = super.insect.override (oldAttrs: { - nativeBuildInputs = oldAttrs.nativeBuildInputs or [] ++ [ pkgs.psc-package self.pulp ]; - }); - - intelephense = super.intelephense.override (oldAttrs: { - meta = oldAttrs.meta // { license = pkgs.lib.licenses.unfree; }; - }); - - joplin = super.joplin.override { - nativeBuildInputs = [ pkgs.pkg-config ]; - buildInputs = with pkgs; [ - # required by sharp - # https://sharp.pixelplumbing.com/install - vips - - libsecret - self.node-gyp-build - self.node-pre-gyp - ] ++ lib.optionals stdenv.isDarwin [ - darwin.apple_sdk.frameworks.AppKit - darwin.apple_sdk.frameworks.Security - ]; - }; - - jsonplaceholder = super.jsonplaceholder.override { - buildInputs = [ nodejs ]; - postInstall = '' - exe=$out/bin/jsonplaceholder - mkdir -p $out/bin - cat >$exe <<EOF - #!${pkgs.runtimeShell} - exec -a jsonplaceholder ${nodejs}/bin/node $out/lib/node_modules/jsonplaceholder/index.js - EOF - chmod a+x $exe - ''; - }; - - makam = super.makam.override { - buildInputs = [ pkgs.nodejs pkgs.makeWrapper ]; - postFixup = '' - wrapProgram "$out/bin/makam" --prefix PATH : ${pkgs.lib.makeBinPath [ pkgs.nodejs ]} - ${ - if stdenv.isLinux - then "patchelf --set-interpreter ${stdenv.glibc}/lib/ld-linux-x86-64.so.2 \"$out/lib/node_modules/makam/makam-bin-linux64\"" - else "" - } - ''; - }; - - manta = super.manta.override { - nativeBuildInputs = with pkgs; [ nodejs-14_x installShellFiles ]; - postInstall = '' - # create completions, following upstream procedure https://github.com/joyent/node-manta/blob/v5.2.3/Makefile#L85-L91 - completion_cmds=$(find ./bin -type f -printf "%f\n") - - node ./lib/create_client.js - for cmd in $completion_cmds; do - installShellCompletion --cmd $cmd --bash <(./bin/$cmd --completion) - done - ''; - }; - - markdownlint-cli = super.markdownlint-cli.override (oldAttrs: { - meta = oldAttrs.meta // { mainProgram = "markdownlint"; }; - }); - - mdctl-cli = super."@medable/mdctl-cli".override { - nativeBuildInputs = with pkgs; with darwin.apple_sdk.frameworks; [ - glib - libsecret - pkg-config - ] ++ lib.optionals stdenv.isDarwin [ - AppKit - Security - ]; - buildInputs = with pkgs; [ - nodePackages.node-gyp-build - nodePackages.node-pre-gyp - nodejs - ]; - }; - - mermaid-cli = super."@mermaid-js/mermaid-cli".override ( - if stdenv.isDarwin - then {} - else { - nativeBuildInputs = [ pkgs.makeWrapper ]; - prePatch = '' - export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 - ''; - postInstall = '' - wrapProgram $out/bin/mmdc \ - --set PUPPETEER_EXECUTABLE_PATH ${pkgs.chromium.outPath}/bin/chromium - ''; - }); - - near-cli = super.near-cli.override { - nativeBuildInputs = with pkgs; [ - libusb1 - nodePackages.prebuild-install - nodePackages.node-gyp-build - pkg-config - ]; - }; - - node-gyp = super.node-gyp.override { - nativeBuildInputs = [ pkgs.makeWrapper ]; - # Teach node-gyp to use nodejs headers locally rather that download them form https://nodejs.org. - # This is important when build nodejs packages in sandbox. - postInstall = '' - wrapProgram "$out/bin/node-gyp" \ - --set npm_config_nodedir ${nodejs} - ''; - }; - - node-inspector = super.node-inspector.override (oldAttrs: { - buildInputs = [ self.node-pre-gyp ]; - meta = oldAttrs.meta // { broken = since "10"; }; - }); - - node-red = super.node-red.override { - buildInputs = [ self.node-pre-gyp ]; - }; - node2nix = super.node2nix.override { - buildInputs = [ pkgs.makeWrapper ]; - # We need to use master because of a fix that replaces git:// url to https://. - src = fetchFromGitHub { - owner = "svanderburg"; - repo = "node2nix"; - rev = "68f5735f9a56737e3fedceb182705985e3ab8799"; - sha256 = "sha256-NK6gDTkGx0GG7yPTwgtFC4ttQZPfcLaLp8W8OOMO6bg="; - }; - - postInstall = '' - wrapProgram "$out/bin/node2nix" --prefix PATH : ${pkgs.lib.makeBinPath [ pkgs.nix ]} - ''; - }; - - parcel = super.parcel.override { - buildInputs = [ self.node-gyp-build ]; - preRebuild = '' - sed -i -e "s|#!/usr/bin/env node|#! ${pkgs.nodejs}/bin/node|" node_modules/node-gyp-build/bin.js - ''; - }; - - pnpm = super.pnpm.override { - nativeBuildInputs = [ pkgs.makeWrapper ]; - - preRebuild = '' - sed 's/"link:/"file:/g' --in-place package.json - ''; - - postInstall = let - pnpmLibPath = pkgs.lib.makeBinPath [ - nodejs.passthru.python - nodejs - ]; - in '' - for prog in $out/bin/*; do - wrapProgram "$prog" --prefix PATH : ${pnpmLibPath} - done - ''; - }; - - postcss-cli = super.postcss-cli.override (oldAttrs: { - nativeBuildInputs = [ pkgs.makeWrapper ]; - postInstall = '' - wrapProgram "$out/bin/postcss" \ - --prefix NODE_PATH : ${self.postcss}/lib/node_modules \ - --prefix NODE_PATH : ${self.autoprefixer}/lib/node_modules - ln -s '${self.postcss}/lib/node_modules/postcss' "$out/lib/node_modules/postcss" - ''; - passthru.tests = { - simple-execution = pkgs.callPackage ./package-tests/postcss-cli.nix { - inherit (self) postcss-cli; - }; - }; - meta = oldAttrs.meta // { - mainProgram = "postcss"; - maintainers = with lib.maintainers; [ Luflosi ]; - }; - }); - - # To update prisma, please first update prisma-engines to the latest - # version. Then change the correct hash to this package. The PR should hold - # two commits: one for the engines and the other one for the node package. - prisma = super.prisma.override rec { - nativeBuildInputs = [ pkgs.makeWrapper ]; - - inherit (pkgs.prisma-engines) version; - - src = fetchurl { - url = "https://registry.npmjs.org/prisma/-/prisma-${version}.tgz"; - sha512 = "sha512-l9MOgNCn/paDE+i1K2fp9NZ+Du4trzPTJsGkaQHVBufTGqzoYHuNk8JfzXuIn0Gte6/ZjyKj652Jq/Lc1tp2yw=="; - }; - postInstall = with pkgs; '' - wrapProgram "$out/bin/prisma" \ - --set PRISMA_MIGRATION_ENGINE_BINARY ${prisma-engines}/bin/migration-engine \ - --set PRISMA_QUERY_ENGINE_BINARY ${prisma-engines}/bin/query-engine \ - --set PRISMA_QUERY_ENGINE_LIBRARY ${lib.getLib prisma-engines}/lib/libquery_engine.node \ - --set PRISMA_INTROSPECTION_ENGINE_BINARY ${prisma-engines}/bin/introspection-engine \ - --set PRISMA_FMT_BINARY ${prisma-engines}/bin/prisma-fmt - ''; - - passthru.tests = { - simple-execution = pkgs.callPackage ./package-tests/prisma.nix { - inherit (self) prisma; - }; - }; - }; - - pulp = super.pulp.override { - # tries to install purescript - npmFlags = "--ignore-scripts"; - - nativeBuildInputs = [ pkgs.makeWrapper ]; - postInstall = '' - wrapProgram "$out/bin/pulp" --suffix PATH : ${pkgs.lib.makeBinPath [ - pkgs.purescript - ]} - ''; - }; - - reveal-md = super.reveal-md.override ( - lib.optionalAttrs (!stdenv.isDarwin) { - nativeBuildInputs = [ pkgs.makeWrapper ]; - prePatch = '' - export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 - ''; - postInstall = '' - wrapProgram $out/bin/reveal-md \ - --set PUPPETEER_EXECUTABLE_PATH ${pkgs.chromium.outPath}/bin/chromium - ''; - } - ); - - ssb-server = super.ssb-server.override (oldAttrs: { - buildInputs = [ pkgs.automake pkgs.autoconf self.node-gyp-build ]; - meta = oldAttrs.meta // { broken = since "10"; }; - }); - - stf = super.stf.override (oldAttrs: { - meta = oldAttrs.meta // { broken = since "10"; }; - }); - - tailwindcss = super.tailwindcss.override { - plugins = [ ]; - nativeBuildInputs = [ pkgs.makeWrapper ]; - postInstall = '' - nodePath="" - for p in "$out" "${self.postcss}" $plugins; do - nodePath="$nodePath''${nodePath:+:}$p/lib/node_modules" - done - wrapProgram "$out/bin/tailwind" \ - --prefix NODE_PATH : "$nodePath" - wrapProgram "$out/bin/tailwindcss" \ - --prefix NODE_PATH : "$nodePath" - unset nodePath - ''; - passthru.tests = { - simple-execution = pkgs.callPackage ./package-tests/tailwindcss.nix { inherit (self) tailwindcss; }; - }; - }; - - teck-programmer = super.teck-programmer.override { - nativeBuildInputs = [ self.node-gyp-build ]; - buildInputs = [ pkgs.libusb1 ]; - }; - - tedicross = super."tedicross-git+https://github.com/TediCross/TediCross.git#v0.8.7".override { - nativeBuildInputs = [ pkgs.makeWrapper ]; - postInstall = '' - makeWrapper '${nodejs}/bin/node' "$out/bin/tedicross" \ - --add-flags "$out/lib/node_modules/tedicross/main.js" - ''; - }; - - thelounge = super.thelounge.override (oldAttrs: { - buildInputs = [ self.node-pre-gyp ]; - postInstall = '' - echo /var/lib/thelounge > $out/lib/node_modules/thelounge/.thelounge_home - patch -d $out/lib/node_modules/thelounge -p1 < ${./thelounge-packages-path.patch} - ''; - passthru.tests = { inherit (nixosTests) thelounge; }; - meta = oldAttrs.meta // { maintainers = with lib.maintainers; [ winter ]; }; - }); - - thelounge-plugin-closepms = super.thelounge-plugin-closepms.override { - nativeBuildInputs = [ self.node-pre-gyp ]; - }; - - thelounge-theme-flat-blue = super.thelounge-theme-flat-blue.override { - nativeBuildInputs = [ self.node-pre-gyp ]; - }; - - thelounge-theme-flat-dark = super.thelounge-theme-flat-dark.override { - nativeBuildInputs = [ self.node-pre-gyp ]; - }; - - triton = super.triton.override { - nativeBuildInputs = [ pkgs.installShellFiles ]; - postInstall = '' - installShellCompletion --cmd triton --bash <($out/bin/triton completion) - ''; - }; - - ts-node = super.ts-node.override (oldAttrs: { - buildInputs = oldAttrs.buildInputs ++ [ pkgs.makeWrapper ]; - postInstall = '' - wrapProgram "$out/bin/ts-node" \ - --prefix NODE_PATH : ${self.typescript}/lib/node_modules - ''; - }); - - tsun = super.tsun.override (oldAttrs: { - buildInputs = oldAttrs.buildInputs ++ [ pkgs.makeWrapper ]; - postInstall = '' - wrapProgram "$out/bin/tsun" \ - --prefix NODE_PATH : ${self.typescript}/lib/node_modules - ''; - }); - - typescript = super.typescript.override (oldAttrs: { - meta = oldAttrs.meta // { mainProgram = "tsc"; }; - }); - - typescript-language-server = super.typescript-language-server.override { - nativeBuildInputs = [ pkgs.makeWrapper ]; - postInstall = '' - wrapProgram "$out/bin/typescript-language-server" \ - --suffix PATH : ${pkgs.lib.makeBinPath [ self.typescript ]} - ''; - }; - - uppy-companion = super."@uppy/companion".override { - name = "uppy-companion"; - }; - - vega-cli = super.vega-cli.override { - nativeBuildInputs = [ pkgs.pkg-config ]; - buildInputs = with pkgs; [ - super.node-pre-gyp - pixman - cairo - pango - libjpeg - ]; - }; - - vega-lite = super.vega-lite.override { - postInstall = '' - cd node_modules - for dep in ${self.vega-cli}/lib/node_modules/vega-cli/node_modules/*; do - if [[ ! -d $dep ]]; then - ln -s "${self.vega-cli}/lib/node_modules/vega-cli/node_modules/$dep" - fi - done - ''; - passthru.tests = { - simple-execution = pkgs.callPackage ./package-tests/vega-lite.nix { - inherit (self) vega-lite; - }; - }; - }; - - wavedrom-cli = super.wavedrom-cli.override { - nativeBuildInputs = [ pkgs.pkg-config self.node-pre-gyp ]; - # These dependencies are required by - # https://github.com/Automattic/node-canvas. - buildInputs = with pkgs; [ - pixman - cairo - pango - ]; - }; - - webtorrent-cli = super.webtorrent-cli.override { - buildInputs = [ self.node-gyp-build ]; - }; - - yaml-language-server = super.yaml-language-server.override { - nativeBuildInputs = [ pkgs.makeWrapper ]; - postInstall = '' - wrapProgram "$out/bin/yaml-language-server" \ - --prefix NODE_PATH : ${self.prettier}/lib/node_modules - ''; - }; - }; -in self + mainProgramOverrides = final: prev: + mapAttrs (pkgName: mainProgram: + prev.${pkgName}.override (oldAttrs: { + meta = oldAttrs.meta // { inherit mainProgram; }; + }) + ) (import ./main-programs.nix); + + extensions = composeManyExtensions [ + mainProgramOverrides + (import ./overrides.nix { inherit pkgs nodejs; }) + ]; +in + makeExtensible (extends extensions nodePackages) |