├── .github └── workflows │ └── build.yml ├── .gitignore ├── README.md ├── flake.lock ├── flake.nix └── scripts └── get-checksums.mjs /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | on: 2 | - push 3 | 4 | jobs: 5 | build: 6 | runs-on: ubuntu-latest 7 | container: nixpkgs/nix-flakes 8 | strategy: 9 | matrix: 10 | version: 11 | - 16 12 | - 16.3.0 13 | - 16.2.0 14 | - 16.1.0 15 | - 16.0.0 16 | - 15 17 | - 15.14.0 18 | - 15.13.0 19 | - 15.12.0 20 | - 15.11.0 21 | - 15.10.0 22 | - 15.9.0 23 | - 15.8.0 24 | - 15.7.0 25 | - 15.6.0 26 | - 15.5.1 27 | - 15.5.0 28 | - 15.4.0 29 | - 15.3.0 30 | - 15.2.1 31 | - 15.2.0 32 | - 15.1.0 33 | - 15.0.1 34 | - 15.0.0 35 | - 14.17.0 36 | - 14.16.1 37 | - 14.16.0 38 | - 14.15.5 39 | - 14.15.4 40 | - 14.15.3 41 | - 14.15.2 42 | - 14.15.1 43 | - 14.15.0 44 | - 14.14.0 45 | - 14.13.1 46 | - 14.13.0 47 | - 14.12.0 48 | - 14.11.0 49 | - 14.10.1 50 | - 14.10.0 51 | - 14.9.0 52 | - 14.8.0 53 | - 14.7.0 54 | - 14.6.0 55 | - 14.5.0 56 | - 14.4.0 57 | - 14.3.0 58 | - 14.2.0 59 | - 14.1.0 60 | <<<<<<< Updated upstream 61 | ======= 62 | - 13.14.0 63 | - 13.13.0 64 | - 13.12.0 65 | - 13.11.0 66 | - 13.10.1 67 | - 13.10.0 68 | - 13.9.0 69 | - 13.8.0 70 | - 13.7.0 71 | - 13.6.0 72 | - 13.5.0 73 | - 13.4.0 74 | - 13.3.0 75 | - 13.2.0 76 | - 13.1.0 77 | - 13.0.1 78 | - 13.0.0 79 | >>>>>>> Stashed changes 80 | steps: 81 | - name: Setup nix features 82 | run: echo "experimental-features = nix-command flakes ca-references" > /etc/nix/nix.conf 83 | - name: Install CI dependencies 84 | run: nix profile install nixpkgs#git nixpkgs#bash nixpkgs#cachix 85 | - name: Setup env 86 | run: | 87 | source $ENV 88 | echo "PATH=$PATH" >> $GITHUB_ENV 89 | - uses: actions/checkout@v1 90 | - name: Add cachix "nix-node" entry 91 | run: cachix use nix-node 92 | - name: build ${{ matrix.version }} 93 | run: nix build .#${{ matrix.version }} 94 | - name: publish ${{ matrix.version }} 95 | run: cachix push nix-node `cd -P result && pwd` 96 | env: 97 | CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }} 98 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | result -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # About 2 | 3 | All releases of nodejs built and accessible under a single flake. 4 | 5 | It's like `nvm` but for nix! 6 | 7 | ## Setup 8 | 9 | ### Setting up the registry 10 | 11 | Via the CLI 12 | 13 | ```sh 14 | nix registry add node 'github:andyrichardson/nix-node' 15 | ``` 16 | 17 | In `configuration.nix` 18 | 19 | ```nix 20 | nix.registry."node".to = { 21 | type = "github"; 22 | owner = "andyrichardson"; 23 | repo = "nix-node"; 24 | }; 25 | ``` 26 | 27 | ### Setting up the binary cache 28 | 29 | Via the CLI 30 | 31 | ```sh 32 | cachix use nix-node 33 | ``` 34 | 35 | In `configuration.nix` 36 | 37 | ```nix 38 | nix.binaryCaches = [ "https://cache.nixos.org/" "https://nix-node.cachix.org/" ] 39 | ``` 40 | 41 | ## Usage 42 | 43 | Using latest major releases 44 | 45 | ```sh 46 | nix shell node#16 47 | ``` 48 | 49 | Using explicit release versions 50 | 51 | ```sh 52 | nix shell node#16.3.0 53 | ``` 54 | 55 | ## Contributing 56 | 57 | Open to contributions for supporting more versions, architectures, etc. 58 | 59 | ### Adding new versions 60 | 61 | Get the checksum for the new version. 62 | 63 | ```sh 64 | version="1.0.0" 65 | nix-prefetch-url --type sha256 "https://nodejs.org/dist/v$version/node-v$version.tar.xz" 66 | ``` 67 | 68 | Update `flake.nix` with new version and checksum. 69 | 70 | Update [CI build](https://github.com/andyrichardson/nix-node/blob/master/.github/workflows/build.yml#L10) to build new version. 71 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "flake-utils": { 4 | "locked": { 5 | "lastModified": 1623660459, 6 | "narHash": "sha256-OTmOsh43po7r5F9s9H6lVCBQ2b0FikWbmiwLbMAGRdw=", 7 | "owner": "numtide", 8 | "repo": "flake-utils", 9 | "rev": "98c8d36b1828009b20f12544214683c7489935a1", 10 | "type": "github" 11 | }, 12 | "original": { 13 | "owner": "numtide", 14 | "repo": "flake-utils", 15 | "type": "github" 16 | } 17 | }, 18 | "nixpkgs": { 19 | "locked": { 20 | "lastModified": 1623330979, 21 | "narHash": "sha256-UQD8P6lSfDx2RnP4Ss2biPDwlz19UQb9qOqjhesFSLk=", 22 | "owner": "nixos", 23 | "repo": "nixpkgs", 24 | "rev": "5e78bbcb4926bc9e35a85573ea362aec1fa9b7ac", 25 | "type": "github" 26 | }, 27 | "original": { 28 | "owner": "nixos", 29 | "repo": "nixpkgs", 30 | "type": "github" 31 | } 32 | }, 33 | "root": { 34 | "inputs": { 35 | "flake-utils": "flake-utils", 36 | "nixpkgs": "nixpkgs" 37 | } 38 | } 39 | }, 40 | "root": "root", 41 | "version": 7 42 | } 43 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "NodeJS releases for use with nix"; 3 | inputs = { 4 | flake-utils.url = "github:numtide/flake-utils"; 5 | nixpkgs.url = "github:nixos/nixpkgs"; 6 | }; 7 | outputs = { self, nixpkgs, flake-utils }: 8 | flake-utils.lib.eachDefaultSystem (system: 9 | with nixpkgs.legacyPackages.${system}; { 10 | packages = let 11 | buildNodejs = 12 | callPackage "${nixpkgs}/pkgs/development/web/nodejs/nodejs.nix" { 13 | icu = icu68; 14 | python = python3; 15 | }; 16 | v16_3_0 = (buildNodejs { 17 | enableNpm = true; 18 | version = "16.3.0"; 19 | sha256 = "eqtHuCwZcCxzsoNKYjw5MnMqFRhf3eoUud3HEJNvrF8="; 20 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 21 | }); 22 | v16_2_0 = (buildNodejs { 23 | enableNpm = true; 24 | version = "16.2.0"; 25 | sha256 = "0Pk7mEKvuPI8B4YunNSCJucQRUf3skFdJQ/bdS0bNc8="; 26 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 27 | }); 28 | v16_1_0 = (buildNodejs { 29 | enableNpm = true; 30 | version = "16.1.0"; 31 | sha256 = "0z0808mw674mshgbmhgngqfkrdix3b61f77xcdz7bwf1j87j7ad0"; 32 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 33 | }); 34 | v16_0_0 = (buildNodejs { 35 | enableNpm = true; 36 | version = "16.0.0"; 37 | sha256 = "00mada0vvybizygwhzsq6gcz0m2k864lfiiqqlnw8gcc3q8r1js7"; 38 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 39 | }); 40 | v15_14_0 = (buildNodejs { 41 | enableNpm = true; 42 | version = "15.14.0"; 43 | sha256 = "0vm6jdazqjd1plqsgngzvjrafv2d3mdahk6il4ray02gx97dq8l1"; 44 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 45 | }); 46 | v15_13_0 = (buildNodejs { 47 | enableNpm = true; 48 | version = "15.13.0"; 49 | sha256 = "1wd859bxd8j97xl98k61g0vwcmy83wvjj04fgway38aapk9abp4h"; 50 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 51 | }); 52 | v15_12_0 = (buildNodejs { 53 | enableNpm = true; 54 | version = "15.12.0"; 55 | sha256 = "0c8smzc7gbr7yg4y4z68976wk5741bspggag9h9laykq4i8bxfsy"; 56 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 57 | }); 58 | v15_11_0 = (buildNodejs { 59 | enableNpm = true; 60 | version = "15.11.0"; 61 | sha256 = "1lfjm0jgzbr0a874c04pddbjnvjcdyx5vyaakdhp0fa222i92w0s"; 62 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 63 | }); 64 | v15_10_0 = (buildNodejs { 65 | enableNpm = true; 66 | version = "15.10.0"; 67 | sha256 = "1i7fdlkkyh5ssncbvxmiz894a12mww4cmj7y4qzm9ddbbvqxhj3p"; 68 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 69 | }); 70 | v15_9_0 = (buildNodejs { 71 | enableNpm = true; 72 | version = "15.9.0"; 73 | sha256 = "1hyq6zj2z3kyfpa8znxa6jwzkw9bvb8mssalify2sjiv00f9dmxx"; 74 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 75 | }); 76 | v15_8_0 = (buildNodejs { 77 | enableNpm = true; 78 | version = "15.8.0"; 79 | sha256 = "1a9h88zdzk98k618jascfrivq3v51viw60sfyxn0ci0l33vf4fp2"; 80 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 81 | }); 82 | v15_7_0 = (buildNodejs { 83 | enableNpm = true; 84 | version = "15.7.0"; 85 | sha256 = "1nnv5337p23mhp0s2zgv75yysgfai0px8h1kks2mc8w0xnmwwppg"; 86 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 87 | }); 88 | v15_6_0 = (buildNodejs { 89 | enableNpm = true; 90 | version = "15.6.0"; 91 | sha256 = "1liqkh1gz1h37fln8xr5krbs2mqjn38n3sws2ydvk84wrpfq3prr"; 92 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 93 | }); 94 | v15_5_1 = (buildNodejs { 95 | enableNpm = true; 96 | version = "15.5.1"; 97 | sha256 = "0qbb4dwgsy1a82ihjxl6r8bj7mwjzb21s720y1rahisd5p69l8ic"; 98 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 99 | }); 100 | v15_5_0 = (buildNodejs { 101 | enableNpm = true; 102 | version = "15.5.0"; 103 | sha256 = "1wzcypb1kawc6m5q36cd31qjg7ljby8py9qg555m4bqm5gpvvfjg"; 104 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 105 | }); 106 | v15_4_0 = (buildNodejs { 107 | enableNpm = true; 108 | version = "15.4.0"; 109 | sha256 = "0kp0hckhjkmaqyvjpcj17rj6fw9fg3c95j78r2nr10bc65anjwms"; 110 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 111 | }); 112 | v15_3_0 = (buildNodejs { 113 | enableNpm = true; 114 | version = "15.3.0"; 115 | sha256 = "0h625hhswwv5rpijacxiak28fy5br8kpxrihfcjdqwm3dvyvkc1v"; 116 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 117 | }); 118 | v15_2_1 = (buildNodejs { 119 | enableNpm = true; 120 | version = "15.2.1"; 121 | sha256 = "0gp8z68h888x2ql64aiicgs7k065lg755cbjlnkbzdih5bh32qjn"; 122 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 123 | }); 124 | v15_2_0 = (buildNodejs { 125 | enableNpm = true; 126 | version = "15.2.0"; 127 | sha256 = "022kw29sjf46mgvwciihi2cmf9sfjpqi0xih8xpk7xiwfmx02ypn"; 128 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 129 | }); 130 | v15_1_0 = (buildNodejs { 131 | enableNpm = true; 132 | version = "15.1.0"; 133 | sha256 = "1fd0ck6nlmp937j00y17q2k9xszzwf4s383p1z4v4qzj0qzxflvk"; 134 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 135 | }); 136 | v15_0_1 = (buildNodejs { 137 | enableNpm = true; 138 | version = "15.0.1"; 139 | sha256 = "03xxnl7q96fmm7lalliwb9kmllz52jqrcsqn9cx9pzhwd1x97l5q"; 140 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 141 | }); 142 | v15_0_0 = (buildNodejs { 143 | enableNpm = true; 144 | version = "15.0.0"; 145 | sha256 = "0yrlzxrqb5j0qyj4qgzfxyvvd7c76hpslkiswj3cjcq70qbql4zn"; 146 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 147 | }); 148 | v14_17_0 = (buildNodejs { 149 | enableNpm = true; 150 | version = "14.17.0"; 151 | sha256 = "1vf989canwcx0wdpngvkbz2x232yccp7fzs1vcbr60rijgzmpq2n"; 152 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 153 | }); 154 | v14_16_1 = (buildNodejs { 155 | enableNpm = true; 156 | version = "14.16.1"; 157 | sha256 = "1hxsk83g2plv6vv3ir1ngca0rwqdy3lq70r504d2qv3msszdnjp4"; 158 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 159 | }); 160 | v14_16_0 = (buildNodejs { 161 | enableNpm = true; 162 | version = "14.16.0"; 163 | sha256 = "19nz2mhmn6ikahxqyna1dn25pb5v3z9vsz9zb2flb6zp2yk4hxjf"; 164 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 165 | }); 166 | v14_15_5 = (buildNodejs { 167 | enableNpm = true; 168 | version = "14.15.5"; 169 | sha256 = "0nv576mlmnf8pfs6yn7vsvwyg0a0xvs7m9pm4k131zjqx501v6z1"; 170 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 171 | }); 172 | v14_15_4 = (buildNodejs { 173 | enableNpm = true; 174 | version = "14.15.4"; 175 | sha256 = "177cxp4fhmglyx035j8smiy1bp5fz6q2phlcl0a2mdbldkvfrdxd"; 176 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 177 | }); 178 | v14_15_3 = (buildNodejs { 179 | enableNpm = true; 180 | version = "14.15.3"; 181 | sha256 = "1zplrfhsrqblvq2wxf5386wc9hf11k42jaw4mzgwy5dxx6dv3krj"; 182 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 183 | }); 184 | v14_15_2 = (buildNodejs { 185 | enableNpm = true; 186 | version = "14.15.2"; 187 | sha256 = "1076v19sxsfbccwdqg559bs86vr875axi5nhnskz57lngwkdyag0"; 188 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 189 | }); 190 | v14_15_1 = (buildNodejs { 191 | enableNpm = true; 192 | version = "14.15.1"; 193 | sha256 = "1g61vqsgq3jsipw2fckj68i4a4pi1iz1kbw7mlw8jmzp8rl46q81"; 194 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 195 | }); 196 | v14_15_0 = (buildNodejs { 197 | enableNpm = true; 198 | version = "14.15.0"; 199 | sha256 = "0fzv05f8rnc0s1a11k0cqfpgv9yawfbdd8qcl8zr25kv5ridhdip"; 200 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 201 | }); 202 | v14_14_0 = (buildNodejs { 203 | enableNpm = true; 204 | version = "14.14.0"; 205 | sha256 = "1rphkl3lqg0rzgg0r58bfv1hjw3rg96qvqcilk2927kbpps3bs84"; 206 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 207 | }); 208 | v14_13_1 = (buildNodejs { 209 | enableNpm = true; 210 | version = "14.13.1"; 211 | sha256 = "1xhmdhzsk3pfl4k8l0ipd9a1v5z807sl65mwkw51y7lc44gbsqb0"; 212 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 213 | }); 214 | v14_13_0 = (buildNodejs { 215 | enableNpm = true; 216 | version = "14.13.0"; 217 | sha256 = "1r06xnf4i5bkq8pgc9y25yhkm787xi3igay883w0a45l83abxfg0"; 218 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 219 | }); 220 | v14_12_0 = (buildNodejs { 221 | enableNpm = true; 222 | version = "14.12.0"; 223 | sha256 = "0c2mv208akyk10pmjfilxbdpi2gpb5zlb4h903lgqmr229kmnd3c"; 224 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 225 | }); 226 | v14_11_0 = (buildNodejs { 227 | enableNpm = true; 228 | version = "14.11.0"; 229 | sha256 = "1sq5j9fpcj0sb9062fik35chkc3lgdbwj56fcza186qsfzrf9iji"; 230 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 231 | }); 232 | v14_10_1 = (buildNodejs { 233 | enableNpm = true; 234 | version = "14.10.1"; 235 | sha256 = "1dymx9j3g6wbbdmw6083yg49ydxwfl2fgy9i8jxpngnskvwq4lrb"; 236 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 237 | }); 238 | v14_10_0 = (buildNodejs { 239 | enableNpm = true; 240 | version = "14.10.0"; 241 | sha256 = "00f7p2l3wpj12r6bxz7l6cxkipwl6in4qlzxrzkk0z81k32ph6s3"; 242 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 243 | }); 244 | v14_9_0 = (buildNodejs { 245 | enableNpm = true; 246 | version = "14.9.0"; 247 | sha256 = "1xkfivr0qci50ksg66szyasdlbiwh2j7ia4n6qc5csih2nvzcbh1"; 248 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 249 | }); 250 | v14_8_0 = (buildNodejs { 251 | enableNpm = true; 252 | version = "14.8.0"; 253 | sha256 = "0vghz7g7mih7idgknwzdc2zfw82qqq497m727ydhkas1wvj6i7lv"; 254 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 255 | }); 256 | v14_7_0 = (buildNodejs { 257 | enableNpm = true; 258 | version = "14.7.0"; 259 | sha256 = "0vwf523ahw0145wp17zkaflwm5823v1vz1kkglj25gzjydiiqbya"; 260 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 261 | }); 262 | v14_6_0 = (buildNodejs { 263 | enableNpm = true; 264 | version = "14.6.0"; 265 | sha256 = "153a07ffrmvwbsc78wrc0xnwymmzrhva0kn6mgnfi3086v3h1wss"; 266 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 267 | }); 268 | v14_5_0 = (buildNodejs { 269 | enableNpm = true; 270 | version = "14.5.0"; 271 | sha256 = "1d6w7ycdiqbkip7m6m8xly31qgx7ywakzvrnqdq8ini5sricjlgb"; 272 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 273 | }); 274 | v14_4_0 = (buildNodejs { 275 | enableNpm = true; 276 | version = "14.4.0"; 277 | sha256 = "1fbx1r3fflpsy0s7zknca0xyv2gg0ff5fl8czzsb79imqjlgcy0x"; 278 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 279 | }); 280 | v14_3_0 = (buildNodejs { 281 | enableNpm = true; 282 | version = "14.3.0"; 283 | sha256 = "0xqs9z0pxx8m5dk9gm1r9pxfk9vdmpvfsj94mfdkqar578nfm8gi"; 284 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 285 | }); 286 | v14_2_0 = (buildNodejs { 287 | enableNpm = true; 288 | version = "14.2.0"; 289 | sha256 = "1kqnkqkv2chw9s0hazbaba5y1555h526825xqk4rr441wcxcrzcf"; 290 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 291 | }); 292 | v14_1_0 = (buildNodejs { 293 | enableNpm = true; 294 | version = "14.1.0"; 295 | sha256 = "0pw39628y8qi2jagmmnfj0fkcbv00qcd1cqybiprf1v22hhij44n"; 296 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 297 | }); 298 | v13_14_0 = (buildNodejs { 299 | enableNpm = true; 300 | version = "13.14.0"; 301 | sha256 = "1gi9nl99wsiqpwm266jdsa8g6rmjw4wqwgrkx9f2qk1y3hjcs0vf"; 302 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 303 | }); 304 | v13_13_0 = (buildNodejs { 305 | enableNpm = true; 306 | version = "13.13.0"; 307 | sha256 = "0wy7d2alli59gwl73hpaf3bz1wxkkcw5yjsgyz42695fz86p64b7"; 308 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 309 | }); 310 | v13_12_0 = (buildNodejs { 311 | enableNpm = true; 312 | version = "13.12.0"; 313 | sha256 = "199qcvzikdzw0h25v9dws77fff6hbvr8dj50lyzlnkya1dd6fzhd"; 314 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 315 | }); 316 | v13_11_0 = (buildNodejs { 317 | enableNpm = true; 318 | version = "13.11.0"; 319 | sha256 = "07r9xwjmiip9zmgfq77f3av3p93adc5cphj07idph1l8ws1j2h75"; 320 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 321 | }); 322 | v13_10_1 = (buildNodejs { 323 | enableNpm = true; 324 | version = "13.10.1"; 325 | sha256 = "14pvqwhilq210zn830zmh04a62rj3si0ijc4ihrhdf3dvghrx2c3"; 326 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 327 | }); 328 | v13_10_0 = (buildNodejs { 329 | enableNpm = true; 330 | version = "13.10.0"; 331 | sha256 = "11m8sisi3dmr70fpnb7xi6nljil3rm36liz0wfzd7kgxmv6p9mhj"; 332 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 333 | }); 334 | v13_9_0 = (buildNodejs { 335 | enableNpm = true; 336 | version = "13.9.0"; 337 | sha256 = "0z68hj3z2y8aj4bc14h77mj5l99jb4ljjc10gp0dpg8s4g1x5xzw"; 338 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 339 | }); 340 | v13_8_0 = (buildNodejs { 341 | enableNpm = true; 342 | version = "13.8.0"; 343 | sha256 = "1h437yvg43xci35rvp55gvb94rddkf4j9i9iw81bmkwhvb4h8qdv"; 344 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 345 | }); 346 | v13_7_0 = (buildNodejs { 347 | enableNpm = true; 348 | version = "13.7.0"; 349 | sha256 = "1fql5858aqny8krrqrgdp97kfia8xv0jlviwnm3akmv8i1i6xqkh"; 350 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 351 | }); 352 | v13_6_0 = (buildNodejs { 353 | enableNpm = true; 354 | version = "13.6.0"; 355 | sha256 = "0jf9nn5i1bijmrcgjvkp37fyz63lwwmxjh7nxipn2vw2qdx6ngsm"; 356 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 357 | }); 358 | v13_5_0 = (buildNodejs { 359 | enableNpm = true; 360 | version = "13.5.0"; 361 | sha256 = "1ng959fm8ls222mmn2vpkw4n4jba02qigpxc8p85jxfj36dsq4ak"; 362 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 363 | }); 364 | v13_4_0 = (buildNodejs { 365 | enableNpm = true; 366 | version = "13.4.0"; 367 | sha256 = "17fbb9j49g0nnp3vlz1pzcwshzhb0mzhfnly4xgfmkq2sxr123xb"; 368 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 369 | }); 370 | v13_3_0 = (buildNodejs { 371 | enableNpm = true; 372 | version = "13.3.0"; 373 | sha256 = "0j36jf0ybq470w91kzg28bcmxlml7ccl4swwklb6x1ibkz697np7"; 374 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 375 | }); 376 | v13_2_0 = (buildNodejs { 377 | enableNpm = true; 378 | version = "13.2.0"; 379 | sha256 = "0r0bbwnp77njhdmby7cs2g6yxfprri684s8h3gqq95ks7vgwgvhx"; 380 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 381 | }); 382 | v13_1_0 = (buildNodejs { 383 | enableNpm = true; 384 | version = "13.1.0"; 385 | sha256 = "0s6b2k7i89j9mxwyz271fvm6bf8jcz2v5kzmn0v5icrkpmn0ab6l"; 386 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 387 | }); 388 | v13_0_1 = (buildNodejs { 389 | enableNpm = true; 390 | version = "13.0.1"; 391 | sha256 = "1n9w1kvdzdg2j0a41wdkqcl893209lc018sd49xpy1cnr169h6vr"; 392 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 393 | }); 394 | v13_0_0 = (buildNodejs { 395 | enableNpm = true; 396 | version = "13.0.0"; 397 | sha256 = "0rs7qxmk17q114pg7l1k1dzk0vq4z9fhy773cbyr7z63mx03pzs5"; 398 | patches = lib.optional stdenv.isDarwin "${nixpkgs}/pkgs/development/web/nodejs/./bypass-xcodebuild.diff"; 399 | }); 400 | in rec { 401 | "16" = v16_3_0.overrideAttrs (prev: { 402 | passthru = { 403 | "3"."0" = v16_3_0; 404 | "2"."0" = v16_2_0; 405 | "1"."0" = v16_1_0; 406 | "0"."0" = v16_0_0; 407 | }; 408 | }); 409 | "15" = v15_14_0.overrideAttrs (prev: { 410 | passthru = { 411 | "14"."0" = v15_14_0; 412 | "13"."0" = v15_13_0; 413 | "12"."0" = v15_12_0; 414 | "11"."0" = v15_11_0; 415 | "10"."0" = v15_10_0; 416 | "9"."0" = v15_9_0; 417 | "8"."0" = v15_8_0; 418 | "7"."0" = v15_7_0; 419 | "6"."0" = v15_6_0; 420 | "5"."1" = v15_5_1; 421 | "5"."0" = v15_5_0; 422 | "4"."0" = v15_4_0; 423 | "3"."0" = v15_3_0; 424 | "2"."1" = v15_2_1; 425 | "2"."0" = v15_2_0; 426 | "1"."0" = v15_1_0; 427 | "0"."1" = v15_0_1; 428 | "0"."0" = v15_0_0; 429 | }; 430 | }); 431 | "14" = v14_17_0.overrideAttrs (prev: { 432 | passthru = { 433 | "17"."0" = v14_17_0; 434 | "16"."1" = v14_16_1; 435 | "16"."0" = v14_16_0; 436 | "15"."5" = v14_15_5; 437 | "15"."4" = v14_15_4; 438 | "15"."3" = v14_15_3; 439 | "15"."2" = v14_15_2; 440 | "15"."1" = v14_15_1; 441 | "15"."0" = v14_15_0; 442 | "14"."0" = v14_14_0; 443 | "13"."1" = v14_13_1; 444 | "13"."0" = v14_13_0; 445 | "12"."0" = v14_12_0; 446 | "11"."0" = v14_11_0; 447 | "10"."1" = v14_10_1; 448 | "10"."0" = v14_10_0; 449 | "9"."0" = v14_9_0; 450 | "8"."0" = v14_8_0; 451 | "7"."0" = v14_7_0; 452 | "6"."0" = v14_6_0; 453 | "5"."0" = v14_5_0; 454 | "4"."0" = v14_4_0; 455 | "3"."0" = v14_3_0; 456 | "2"."0" = v14_2_0; 457 | "1"."0" = v14_1_0; 458 | }; 459 | }); 460 | "13" = v13_14_0.overrideAttrs (prev: { 461 | passthru = { 462 | "14"."0" = v13_14_0; 463 | "13"."0" = v13_13_0; 464 | "12"."0" = v13_12_0; 465 | "11"."0" = v13_11_0; 466 | "10"."1" = v13_10_1; 467 | "10"."0" = v13_10_0; 468 | "9"."0" = v13_9_0; 469 | "8"."0" = v13_8_0; 470 | "7"."0" = v13_7_0; 471 | "6"."0" = v13_6_0; 472 | "5"."0" = v13_5_0; 473 | "4"."0" = v13_4_0; 474 | "3"."0" = v13_3_0; 475 | "2"."0" = v13_2_0; 476 | "1"."0" = v13_1_0; 477 | "0"."1" = v13_0_1; 478 | "0"."0" = v13_0_0; 479 | }; 480 | }); 481 | }; 482 | }); 483 | } 484 | -------------------------------------------------------------------------------- /scripts/get-checksums.mjs: -------------------------------------------------------------------------------- 1 | // Run with: deno run --allow-net --allow-run get-checksums.mjs 2 | const versions = await (async () => { 3 | const page = await fetch("https://nodejs.org/download/release/"); 4 | const pageText = await page.text(); 5 | return pageText.split("\n").reduce((agg, row) => { 6 | const match = /href="v(\d+\.\d+\.\d+)\/"/.exec(row); 7 | return match === null ? agg : [...agg, match[1]]; 8 | }, []); 9 | })(); 10 | 11 | const getChecksum = async (version) => { 12 | const p = Deno.run({ 13 | cmd: [ 14 | "nix-prefetch-url", 15 | "--type", 16 | "sha256", 17 | `https://nodejs.org/dist/v${version}/node-v${version}.tar.xz`, 18 | ], 19 | stdout: "piped", 20 | }); 21 | if (!(await p.status()).success) { 22 | return; 23 | } 24 | const output = new TextDecoder().decode(await p.output()); 25 | return /\w{52}/.exec(output)[0]; 26 | }; 27 | 28 | const semverSort = (a, b) => { 29 | const [majA, minA, patchA] = a.split("."); 30 | const [majB, minB, patchB] = b.split("."); 31 | if (majA !== majB) { 32 | return parseInt(majA) - parseInt(majB); 33 | } 34 | 35 | if (minA !== minB) { 36 | return parseInt(minA) - parseInt(minB); 37 | } 38 | 39 | return parseInt(patchA) - parseInt(patchB); 40 | }; 41 | 42 | const results = await Promise.all( 43 | versions 44 | // Optional major version filter 45 | .filter((v) => v.indexOf("13") == 0) 46 | .sort(semverSort) 47 | .map(async (version) => ({ 48 | version, 49 | checksum: await getChecksum(version), 50 | })) 51 | ); 52 | 53 | results.reverse(); 54 | 55 | // Print derivation 56 | results.forEach(({ version, checksum }) => { 57 | console.log(`v${version.replaceAll(".", "_")} = (buildNodejs { 58 | enableNpm = true; 59 | version = "${version}"; 60 | sha256 = "${checksum}"; 61 | patches = lib.optional stdenv.isDarwin ./bypass-xcodebuild.diff; 62 | });`); 63 | }); 64 | 65 | // Print derivation entrypoint 66 | results.forEach(({ version }) => { 67 | const [major, minor, patch] = version.split('.'); 68 | console.log(`"${minor}"."${patch}" = v${major}_${minor}_${patch};`) 69 | }) 70 | 71 | // Print versions for CI usage 72 | results.forEach(({ version }) => console.log(`- ${version}`)); 73 | --------------------------------------------------------------------------------