| 9 Aug 2023 |
Lily Foster | In reply to @countoren:matrix.org what will be the differnece between fetchNpmDeps to node2nix? * node2nix generates nix expressions and does its own locking of dependencies needed for a node package. It also includes (questionable...) build logic to turn those into a coherent package with built libraries, cli scripts, and such. fetchNpmDeps just reads an existing package-lock.json and downloads those deps in a way that npm can find them later when in the nix sandbox (which has no internet). buildNpmPackage includes hooks that have their own build logic to turn an npm application into a coherent package | 23:30:41 |
countoren | so there will be no way to manually replace/add dependencies with buildNpmPackage | 23:31:07 |
Lily Foster | If they need to be replaced then the package-lock.json file needs to be patched | 23:31:22 |
countoren | or non strightforawd at least | 23:31:29 |
Lily Foster | Which can be done, but there's no concept of "replacing" specifically in buildNpmPackage (since you'd just be patching the upstream files before buildNpmPackage even sees it) | 23:31:51 |
Lily Foster | (I mean similar would be true of node2nix as well) | 23:31:59 |
Lily Foster | * If they need to be replaced then the package.json and/or package-lock.json files need to be patched | 23:32:20 |
Lily Foster | * If they need to be replaced then the package-lock.json and possibly package.json files need to be patched | 23:32:34 |
countoren | yes, but it will be easier to store and compose the tars like what I did with node2nix | 23:33:01 |
countoren | in nix expressions | 23:33:05 |
countoren | npm pack to get the private tars | 23:33:21 |
countoren | and then just replace them in sources of node2nix | 23:33:32 |
countoren | but I guess there should be a way to do it in the package-lock | 23:34:04 |
Lily Foster | Like editing the .nix file output of running node2nix? | 23:34:08 |
countoren | yes | 23:34:17 |
countoren | no | 23:34:22 |
countoren | sorry | 23:34:24 |
Lily Foster | Apologies, I'm still having trouble grasping what exactly it is you are attempting here 😅 | 23:34:47 |
countoren | I didnt edit the genereated one I added those when composing them in the flake | 23:34:59 |
countoren | :) nvm i think if the token will work there is a good chance that it will solve my problem | 23:35:31 |
countoren | but as a reference this is my composed node2nix:
globalBuildInputsSet = import ./server/supplement.nix {
inherit nodeEnv;
inherit (pkgs) stdenv lib nix-gitignore fetchurl fetchgit;
};
globalBuildInputs = pkgs.lib.attrValues globalBuildInputsSet;
nodeEnv = import ./server/node-env.nix {
nodejs = nodejs13;
inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript;
inherit pkgs;
libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
};
client = (import ./server/node-packages.nix {
inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
inherit globalBuildInputs nodeEnv;
sourcesOverride = srcs:
srcs // {
"@fortawesome/pro-light-svg-icons-5.14.0" = srcs."@fortawesome/pro-light-svg-icons-5.14.0" // {
src = ./server/fortawesome-pro-light-svg-icons-5.14.0.tgz;
};
"@fortawesome/pro-solid-svg-icons-5.14.0" = srcs."@fortawesome/pro-solid-svg-icons-5.14.0" // {
src = ./server/fortawesome-pro-solid-svg-icons-5.14.0.tgz;
};
"@fortawesome/fontawesome-common-types-0.2.30" = srcs."@fortawesome/fontawesome-common-types-0.2.30" // {
src = ./server/fortawesome-fontawesome-common-types-0.2.30.tgz;
};
"@fortawesome/fontawesome-svg-core-1.2.30" = srcs."@fortawesome/fontawesome-svg-core-1.2.30" // {
src = ./server/fortawesome-fontawesome-svg-core-1.2.30.tgz;
};
"@fortawesome/angular-fontawesome-0.5.0" = srcs."@fortawesome/angular-fontawesome-0.5.0" // {
src = ./server/fortawesome-angular-fontawesome-0.5.0.tgz;
};
};
});
| 23:36:32 |
Lily Foster | In reply to @countoren:matrix.org :) nvm i think if the token will work there is a good chance that it will solve my problem Alright, let me know and I'll send a PR so we can get it into nixpkgs. Keep in mind buildNpmPackage/fetchNpmDeps needs a FOD hash for now separate from the package-lock.json (but one day we want a importNpmLockfile kinda like what Rust has with importCargoLock which would avoid the need for that FOD hash in most scenarios) | 23:37:09 |
countoren | what is FOD ? first time seeing this abrv :) | 23:38:30 |
Lily Foster | In reply to @countoren:matrix.org
but as a reference this is my composed node2nix:
globalBuildInputsSet = import ./server/supplement.nix {
inherit nodeEnv;
inherit (pkgs) stdenv lib nix-gitignore fetchurl fetchgit;
};
globalBuildInputs = pkgs.lib.attrValues globalBuildInputsSet;
nodeEnv = import ./server/node-env.nix {
nodejs = nodejs13;
inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript;
inherit pkgs;
libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
};
client = (import ./server/node-packages.nix {
inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
inherit globalBuildInputs nodeEnv;
sourcesOverride = srcs:
srcs // {
"@fortawesome/pro-light-svg-icons-5.14.0" = srcs."@fortawesome/pro-light-svg-icons-5.14.0" // {
src = ./server/fortawesome-pro-light-svg-icons-5.14.0.tgz;
};
"@fortawesome/pro-solid-svg-icons-5.14.0" = srcs."@fortawesome/pro-solid-svg-icons-5.14.0" // {
src = ./server/fortawesome-pro-solid-svg-icons-5.14.0.tgz;
};
"@fortawesome/fontawesome-common-types-0.2.30" = srcs."@fortawesome/fontawesome-common-types-0.2.30" // {
src = ./server/fortawesome-fontawesome-common-types-0.2.30.tgz;
};
"@fortawesome/fontawesome-svg-core-1.2.30" = srcs."@fortawesome/fontawesome-svg-core-1.2.30" // {
src = ./server/fortawesome-fontawesome-svg-core-1.2.30.tgz;
};
"@fortawesome/angular-fontawesome-0.5.0" = srcs."@fortawesome/angular-fontawesome-0.5.0" // {
src = ./server/fortawesome-angular-fontawesome-0.5.0.tgz;
};
};
});
Oh I see, yeah having the token should avoid the need to vendor those fontawesome tarballs. I would add token support to node2nix to avoid you having to rewrite code from node2nix to buildNpmPackage, but the node2nix code is highly cursed and as I mentioned there's no real investment anymore maintenance given the architectural and practical issues the approach has, unfortunately | 23:38:45 |
Lily Foster | In reply to @countoren:matrix.org what is FOD ? first time seeing this abrv :) Oh yeah, sorry, Fixed-Output Derivation. It's like when you have a fetchFromGitHub in a package and need to provide a hash of the download in advance. buildNpmPackage expects a npmDepsHash that's more or less equivalent to that, just being a hash of the fetched npm deps rather than some concrete upstream | 23:39:59 |
countoren | o ye, I noticed it. IMO it make sense and dont feel much of trouble | 23:43:38 |
countoren | the way I usually explain it to beginner it is your way to sign that this is what you want. | 23:44:34 |
Lily Foster | Yeah, that makes sense I suppose | 23:45:36 |
Lily Foster | In reply to @lily:lily.flowers Okay I made a thing for passing in an environment variable that looks like NIX_NPM_TOKENS='{"regsistry.fontawesome.com":"token"}'. Do you think you could apply this patch to your nixpkgs and see if you can set NIX_NPM_TOKENS on your builder/nix daemon? https://github.com/lilyinstarlight/nixpkgs/compare/5a8e9243812ba528000995b294292d3b5e120947...24f435dd88b47f53011bc1f296fd0347699ef451.diff Oh also NIX_NPM_TOKENS needs to be set on the nix daemon if running Nix in multi-user mode (the default unless you are running as root user). I will leave it up to you on how to do that, but in general it will eventually end up being some systemd override to add Environment=NIX_NPM_TOKENS={...} (and overrides usually go in somewhere like /etc/systemd/system/nix-daemon.service.d/) | 23:47:45 |
countoren | I was thinking actually clone me a copy apply the diff and add it to my flake | 23:48:44 |