about summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/applications/audio/tauon/default.nix8
-rw-r--r--pkgs/applications/editors/standardnotes/src.json10
-rw-r--r--pkgs/applications/misc/1password/default.nix10
-rw-r--r--pkgs/applications/misc/electrum/default.nix9
-rw-r--r--pkgs/applications/misc/pgmodeler/default.nix4
-rw-r--r--pkgs/applications/misc/ttdl/default.nix6
-rw-r--r--pkgs/applications/networking/browsers/firefox-bin/release_sources.nix802
-rw-r--r--pkgs/applications/networking/browsers/firefox/packages.nix4
-rw-r--r--pkgs/applications/networking/cluster/kubeshark/default.nix6
-rw-r--r--pkgs/applications/networking/cluster/terraform-providers/providers.json24
-rw-r--r--pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix2
-rw-r--r--pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix4
-rw-r--r--pkgs/applications/science/physics/elmerfem/default.nix21
-rw-r--r--pkgs/applications/science/physics/elmerfem/patches/0001-fix-import-of-QPainterPath.patch24
-rw-r--r--pkgs/applications/science/physics/elmerfem/patches/0002-fem-rename-loopvars-to-avoid-redefinition.patch82
-rw-r--r--pkgs/applications/science/physics/elmerfem/patches/0003-ignore-qwt_compat.patch36
-rw-r--r--pkgs/build-support/node/build-npm-package/default.nix5
-rw-r--r--pkgs/build-support/node/fetch-npm-deps/default.nix11
-rw-r--r--pkgs/build-support/node/fetch-npm-deps/src/cacache.rs2
-rw-r--r--pkgs/build-support/node/fetch-npm-deps/src/main.rs425
-rw-r--r--pkgs/build-support/node/fetch-npm-deps/src/parse/lock.rs191
-rw-r--r--pkgs/build-support/node/fetch-npm-deps/src/parse/mod.rs370
-rw-r--r--pkgs/build-support/node/fetch-npm-deps/src/tests.rs141
-rw-r--r--pkgs/data/fonts/iosevka/bin.nix2
-rw-r--r--pkgs/data/fonts/iosevka/variants.nix184
-rw-r--r--pkgs/data/fonts/sarasa-gothic/default.nix4
-rw-r--r--pkgs/development/interpreters/wasmtime/default.nix6
-rw-r--r--pkgs/development/libraries/libwpe/fdo.nix4
-rw-r--r--pkgs/development/libraries/webkitgtk/default.nix4
-rw-r--r--pkgs/development/python-modules/accelerate/default.nix74
-rw-r--r--pkgs/development/python-modules/catboost/default.nix10
-rw-r--r--pkgs/development/python-modules/docformatter/default.nix4
-rw-r--r--pkgs/development/python-modules/eigenpy/default.nix4
-rw-r--r--pkgs/development/python-modules/elmax-api/default.nix4
-rw-r--r--pkgs/development/python-modules/gehomesdk/default.nix4
-rw-r--r--pkgs/development/python-modules/hahomematic/default.nix4
-rw-r--r--pkgs/development/python-modules/ledger-bitcoin/default.nix40
-rw-r--r--pkgs/development/python-modules/ledgercomm/default.nix30
-rw-r--r--pkgs/development/python-modules/markdown-it-py/default.nix2
-rw-r--r--pkgs/development/python-modules/mdit-py-plugins/default.nix5
-rw-r--r--pkgs/development/python-modules/peft/default.nix54
-rw-r--r--pkgs/development/python-modules/pyunifiprotect/default.nix4
-rw-r--r--pkgs/development/python-modules/safetensors/default.nix79
-rw-r--r--pkgs/development/python-modules/syncedlyrics/default.nix14
-rw-r--r--pkgs/development/python-modules/torchvision/default.nix4
-rw-r--r--pkgs/development/python-modules/ttp-templates/default.nix2
-rw-r--r--pkgs/development/python-modules/yalexs/default.nix4
-rw-r--r--pkgs/development/tools/build-managers/bear/default.nix4
-rw-r--r--pkgs/development/tools/goda/default.nix6
-rw-r--r--pkgs/development/tools/jql/default.nix6
-rw-r--r--pkgs/development/tools/mongosh/source.json2
-rw-r--r--pkgs/development/tools/okteto/default.nix6
-rw-r--r--pkgs/development/tools/rust/cargo-careful/default.nix6
-rw-r--r--pkgs/os-specific/darwin/sketchybar/default.nix4
-rw-r--r--pkgs/servers/monitoring/prometheus/promscale/0001-remove-jaeger-test-dep.patch17
-rw-r--r--pkgs/servers/monitoring/prometheus/promscale/default.nix18
-rw-r--r--pkgs/servers/simple-http-server/default.nix6
-rw-r--r--pkgs/servers/sql/postgresql/ext/promscale_extension.nix60
-rw-r--r--pkgs/servers/sql/postgresql/packages.nix2
-rw-r--r--pkgs/tools/backup/rustic-rs/default.nix6
-rw-r--r--pkgs/tools/graphics/gmic-qt/default.nix1
-rw-r--r--pkgs/tools/misc/boxxy/default.nix12
-rw-r--r--pkgs/tools/misc/gh-dash/default.nix6
-rw-r--r--pkgs/tools/security/cosign/default.nix6
-rw-r--r--pkgs/tools/security/exploitdb/default.nix4
-rw-r--r--pkgs/tools/security/metasploit/Gemfile2
-rw-r--r--pkgs/tools/security/metasploit/Gemfile.lock21
-rw-r--r--pkgs/tools/security/metasploit/default.nix4
-rw-r--r--pkgs/tools/security/metasploit/gemset.nix36
-rw-r--r--pkgs/tools/text/vale/default.nix4
-rw-r--r--pkgs/tools/virtualization/awsebcli/default.nix4
-rw-r--r--pkgs/top-level/aliases.nix17
-rw-r--r--pkgs/top-level/python-packages.nix10
73 files changed, 1680 insertions, 1333 deletions
diff --git a/pkgs/applications/audio/tauon/default.nix b/pkgs/applications/audio/tauon/default.nix
index 427c1e9e5dca8..a75110c15da66 100644
--- a/pkgs/applications/audio/tauon/default.nix
+++ b/pkgs/applications/audio/tauon/default.nix
@@ -57,6 +57,8 @@ stdenv.mkDerivation rec {
 
     patchShebangs compile-phazor.sh
 
+    substituteInPlace compile-phazor.sh --replace 'gcc' '${stdenv.cc.targetPrefix}cc'
+
     substituteInPlace extra/tauonmb.desktop --replace 'Exec=/opt/tauon-music-box/tauonmb.sh' 'Exec=${placeholder "out"}/bin/tauon'
   '';
 
@@ -95,7 +97,6 @@ stdenv.mkDerivation rec {
     natsort
     pillow
     plexapi
-    pulsectl
     pycairo
     pychromecast
     pylast
@@ -105,7 +106,8 @@ stdenv.mkDerivation rec {
     requests
     send2trash
     setproctitle
-  ] ++ lib.optional withDiscordRPC pypresence;
+  ] ++ lib.optional withDiscordRPC pypresence
+    ++ lib.optional stdenv.isLinux pulsectl;
 
   makeWrapperArgs = [
     "--prefix PATH : ${lib.makeBinPath [ffmpeg]}"
@@ -134,6 +136,6 @@ stdenv.mkDerivation rec {
     changelog = "https://github.com/Taiko2k/TauonMusicBox/releases/tag/v${version}";
     license = licenses.gpl3;
     maintainers = with maintainers; [ jansol ];
-    platforms = platforms.linux;
+    platforms = platforms.linux ++ platforms.darwin;
   };
 }
diff --git a/pkgs/applications/editors/standardnotes/src.json b/pkgs/applications/editors/standardnotes/src.json
index ddb759837b0fd..10c7ee38e9cd6 100644
--- a/pkgs/applications/editors/standardnotes/src.json
+++ b/pkgs/applications/editors/standardnotes/src.json
@@ -1,13 +1,13 @@
 {
-  "version": "3.150.45",
+  "version": "3.151.3",
   "appimage": {
     "x86_64-linux": {
-      "url": "https://github.com/standardnotes/app/releases/download/%40standardnotes/desktop%403.150.45/standard-notes-3.150.45-linux-x86_64.AppImage",
-      "hash": "sha512-a1g+nOJJ1MSiCvguFAlAPhwyogAS6cwDD8Ou+P0lufLLG2HyLPdOEwVl8Nhqq4iaFFQoyY3FtKm+Sdpd3WJ72Q=="
+      "url": "https://github.com/standardnotes/app/releases/download/%40standardnotes/desktop%403.151.3/standard-notes-3.151.3-linux-x86_64.AppImage",
+      "hash": "sha512-Wk31nB9OjR8E3cPFfh4KpUqQxXsnerzDt5TgaExXW4OeWLftv3ejyf2ROWXAoqG/8K87OclbunCqS3b2g8hAjA=="
     },
     "aarch64-linux": {
-      "url": "https://github.com/standardnotes/app/releases/download/%40standardnotes/desktop%403.150.45/standard-notes-3.150.45-linux-arm64.AppImage",
-      "hash": "sha512-ivnyuMhdBweRs+9Qkt4srm2JlMMxLFDbT0DBaeNCHVuyWM/13LRczIyto2tbPp9xC6DCJmGktjY3ZYsB3odftA=="
+      "url": "https://github.com/standardnotes/app/releases/download/%40standardnotes/desktop%403.151.3/standard-notes-3.151.3-linux-arm64.AppImage",
+      "hash": "sha512-nPTpEJs978wxZjG1pN15ETgUBdGBzl574QHCQNo2ShYvhi9Uf38jCaGQIsY0d779eT8kSHuMBXoAiE/flxfWMQ=="
     }
   }
 }
diff --git a/pkgs/applications/misc/1password/default.nix b/pkgs/applications/misc/1password/default.nix
index f7a7281496bbb..f71d1ff0fcbef 100644
--- a/pkgs/applications/misc/1password/default.nix
+++ b/pkgs/applications/misc/1password/default.nix
@@ -12,12 +12,12 @@ let
     if extension == "zip" then fetchzip args else fetchurl args;
 
   pname = "1password-cli";
-  version = "2.16.1";
+  version = "2.17.0";
   sources = rec {
-    aarch64-linux = fetch "linux_arm64" "sha256-8zKxd2yY8syGhgyPv06b+ag2bEfFfG19ZmQPrfi+Qh4=" "zip";
-    i686-linux = fetch "linux_386" "sha256-3OO0JMJMRqbmq/rD/VRKIMBdjYu66ebEFGNLKX9K6A8=" "zip";
-    x86_64-linux = fetch "linux_amd64" "sha256-ZCXfreBiFDc5YFd9YsMddEvzl22KwnnfSQsV6BmHqeA=" "zip";
-    aarch64-darwin = fetch "apple_universal" "sha256-vlsqvz+AgEhL7M8cJhxmjjZ6ocIVUdq7MC1EVZOExU8=" "pkg";
+    aarch64-linux = fetch "linux_arm64" "sha256-pnLAFCKhQKOIqp0qDv3DfAqF4fDXjFdw7Jl9WgDf7C0=" "zip";
+    i686-linux = fetch "linux_386" "sha256-o+pSWUOSzDKA5m+Riu3QOi9gQMyEmbIGcE/yUjKu9p8=" "zip";
+    x86_64-linux = fetch "linux_amd64" "sha256-aukQSeC+5p6ioTE6QlzEAM+9VOI34GfzzjaGt/N0klY=" "zip";
+    aarch64-darwin = fetch "apple_universal" "sha256-HSXbbeDWYrFTh9SsKwvNovprWRwaDr3rA6X6E1QJJos=" "pkg";
     x86_64-darwin = aarch64-darwin;
   };
   platforms = builtins.attrNames sources;
diff --git a/pkgs/applications/misc/electrum/default.nix b/pkgs/applications/misc/electrum/default.nix
index 08d887f7e9269..760a34ed3dd9a 100644
--- a/pkgs/applications/misc/electrum/default.nix
+++ b/pkgs/applications/misc/electrum/default.nix
@@ -11,7 +11,7 @@
 }:
 
 let
-  version = "4.3.4";
+  version = "4.4.0";
 
   libsecp256k1_name =
     if stdenv.isLinux then "libsecp256k1.so.0"
@@ -28,7 +28,7 @@ let
     owner = "spesmilo";
     repo = "electrum";
     rev = version;
-    sha256 = "sha256-0xYGTCk+Sk7LP+E9r2Y7UJZsfbobLe6Yb+x5ZRCN40Y=";
+    sha256 = "sha256-lXMz0U7zgtCApBCGZcpOHvLcyOeGG0yJE/gr7Gv+yBQ=";
 
     postFetch = ''
       mv $out ./all
@@ -44,7 +44,7 @@ python3.pkgs.buildPythonApplication {
 
   src = fetchurl {
     url = "https://download.electrum.org/${version}/Electrum-${version}.tar.gz";
-    sha256 = "sha256-+Z4NZK/unFN6mxCuMleHBxAoD+U1PzVk3/ZnZRmOOxo=";
+    sha256 = "sha256-SHV+fCDhfgIh7s8L7eDbKj8bkHSVm7J2PPQ4CQpp6cI=";
   };
 
   postUnpack = ''
@@ -72,6 +72,7 @@ python3.pkgs.buildPythonApplication {
     tlslite-ng
     # plugins
     btchip-python
+    ledger-bitcoin
     ckcc-protocol
     keepkey
     trezor
@@ -83,7 +84,7 @@ python3.pkgs.buildPythonApplication {
   postPatch = ''
     # make compatible with protobuf4 by easing dependencies ...
     substituteInPlace ./contrib/requirements/requirements.txt \
-      --replace "protobuf>=3.12,<4" "protobuf>=3.12"
+      --replace "protobuf>=3.20,<4" "protobuf>=3.20"
     # ... and regenerating the paymentrequest_pb2.py file
     protoc --python_out=. electrum/paymentrequest.proto
 
diff --git a/pkgs/applications/misc/pgmodeler/default.nix b/pkgs/applications/misc/pgmodeler/default.nix
index ca9387e34e657..367c0aee4082c 100644
--- a/pkgs/applications/misc/pgmodeler/default.nix
+++ b/pkgs/applications/misc/pgmodeler/default.nix
@@ -11,13 +11,13 @@
 
 stdenv.mkDerivation rec {
   pname = "pgmodeler";
-  version = "1.0.2";
+  version = "1.0.3";
 
   src = fetchFromGitHub {
     owner = "pgmodeler";
     repo = "pgmodeler";
     rev = "v${version}";
-    sha256 = "sha256-yvVgBfJLjEynsqxQisDfOM99C8/QM0F44RIHAmxh4uU=";
+    sha256 = "sha256-ZlIz+7YyER0/wQEkEe8XHYHcLK4vu09v1zkDrIgR/Dc=";
   };
 
   nativeBuildInputs = [ pkg-config qmake wrapQtAppsHook ];
diff --git a/pkgs/applications/misc/ttdl/default.nix b/pkgs/applications/misc/ttdl/default.nix
index 519efbcf5872a..03ecf260d24b8 100644
--- a/pkgs/applications/misc/ttdl/default.nix
+++ b/pkgs/applications/misc/ttdl/default.nix
@@ -5,16 +5,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "ttdl";
-  version = "3.7.1";
+  version = "3.8.0";
 
   src = fetchFromGitHub {
     owner = "VladimirMarkelov";
     repo = "ttdl";
     rev = "v${version}";
-    sha256 = "sha256-Bhi1d01VqeLmxsiyIG8HXD6AgabgsKgZoKYgnGNpk/8=";
+    sha256 = "sha256-6QfUy1Y7qFOdBFmDFQyRr+GJZSdH+pbU3dEcAjsV1JM=";
   };
 
-  cargoHash = "sha256-A/5DS7b7Dgj+GlCPu6fx0t14BfMm4XjkpcDjSpeDSnE=";
+  cargoHash = "sha256-N+mVfgbL22fmynmz4/xFNxQh7l455cH2jyuczc4XsM4=";
 
   meta = with lib; {
     description = "A CLI tool to manage todo lists in todo.txt format";
diff --git a/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix b/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix
index 2203b526c09c1..0aa5f37a69763 100644
--- a/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix
+++ b/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix
@@ -1,1005 +1,1005 @@
 {
-  version = "112.0.1";
+  version = "112.0.2";
   sources = [
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ach/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ach/firefox-112.0.2.tar.bz2";
       locale = "ach";
       arch = "linux-x86_64";
-      sha256 = "36fd6c7580b7c52be08eeec0cdb078847d85150db5a7589b6170b87680352aee";
+      sha256 = "4a32600dad771995ad6c347174b85f8f186da8ddd5223255c80d5f1a88bba375";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/af/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/af/firefox-112.0.2.tar.bz2";
       locale = "af";
       arch = "linux-x86_64";
-      sha256 = "faadb7dbb35eb85dd5afd2b1fae89a317efbc57d47c55bddf5913633f3a94f5a";
+      sha256 = "ab23aed01c5e1ca7afcf09494ed11066625c9be3d3e386d68745e7e3a7d24b42";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/an/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/an/firefox-112.0.2.tar.bz2";
       locale = "an";
       arch = "linux-x86_64";
-      sha256 = "413cc005f597c80e45e21238e6d1efc6b7ea9601a414f17f7a9de649ae100838";
+      sha256 = "7a3c5919771eb1fb5ff5238339de9bc19139011293125c64216572b5ffecf28a";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ar/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ar/firefox-112.0.2.tar.bz2";
       locale = "ar";
       arch = "linux-x86_64";
-      sha256 = "ea1da8a30f29b34444140ded31282fbb22376954d5ee2a6a7545d2eddb19edd8";
+      sha256 = "077af6c198cbcf37bd128cb4a6831868c8b472663246cb46adb89588a4451851";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ast/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ast/firefox-112.0.2.tar.bz2";
       locale = "ast";
       arch = "linux-x86_64";
-      sha256 = "441d682a09325f46cead74d300b4f27200af97b4315fd2990d1fa33ba93412c5";
+      sha256 = "494c7cc952ecd0d349b7e5626233ffbdfd541ad0efd7f502198f76d6eadee33d";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/az/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/az/firefox-112.0.2.tar.bz2";
       locale = "az";
       arch = "linux-x86_64";
-      sha256 = "24440875e36dcba8c5d4e125715d2d8c61bab534739ff5a4e0c9e41419c3a05a";
+      sha256 = "87519f82b780e04a8fc4c41d0ab248562c3d6b6d6941d9a50b0f1d7ae1335367";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/be/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/be/firefox-112.0.2.tar.bz2";
       locale = "be";
       arch = "linux-x86_64";
-      sha256 = "5b3e6c637256f9d54e414a56807f8c3e5dcad75e839b97bb26c4ed8391538e53";
+      sha256 = "f65bf7ea0d9dfa5be6da26dd762e862dc562688f506a65c05d5d344693ef7325";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/bg/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/bg/firefox-112.0.2.tar.bz2";
       locale = "bg";
       arch = "linux-x86_64";
-      sha256 = "cb132442599cc876435aeb99ce3d366ecabe583f66ac50b964fc6d34039b7a06";
+      sha256 = "fdee1836538fbfcb9f5409a132a3ba13a0c6cbd56be5f5839c5a6aa10f21fb78";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/bn/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/bn/firefox-112.0.2.tar.bz2";
       locale = "bn";
       arch = "linux-x86_64";
-      sha256 = "8ffa2b5e01300ef62a980d504b9d5c61c17c71e36bc267694d7de6594227f86e";
+      sha256 = "b305faf020b19eb6c7967b2e1c5b1b8ecd026ea49d8387fbd1a7304e7fe4eec3";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/br/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/br/firefox-112.0.2.tar.bz2";
       locale = "br";
       arch = "linux-x86_64";
-      sha256 = "ee830d98b21fc9cc74a181c2c3cdb61692a83450df7dd35b7777591fa17cbd16";
+      sha256 = "f373e63caeb791e7f6394e9339daf7e5604a5e8603f0b04bc138b3c9660198a0";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/bs/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/bs/firefox-112.0.2.tar.bz2";
       locale = "bs";
       arch = "linux-x86_64";
-      sha256 = "1728f28b2b36feaf09eaf6b1750a2b9bd23e03bbf72b9fc7836e4c2ded27d120";
+      sha256 = "d1889939bce050c63a769c2d67666361d78b2d87210fcaedeb41b0ad13fc8e38";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ca-valencia/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ca-valencia/firefox-112.0.2.tar.bz2";
       locale = "ca-valencia";
       arch = "linux-x86_64";
-      sha256 = "c9cb9c84d03593a2f95071fe4e720fe23b8a70284c9f6b4225f3d501672b0800";
+      sha256 = "9092a32d66cf883b574d0532ccf7398468d4940186f3bb31fc6add6154430f51";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ca/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ca/firefox-112.0.2.tar.bz2";
       locale = "ca";
       arch = "linux-x86_64";
-      sha256 = "633d527b4d9e4ff77474ac9e401290d1f700243588c963e96490a36ff1a9fd92";
+      sha256 = "d7bb4dec533ba1824692e13dcfcf8b0dc2831d3c6556e8a2122285599227994e";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/cak/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/cak/firefox-112.0.2.tar.bz2";
       locale = "cak";
       arch = "linux-x86_64";
-      sha256 = "a7228264a85d64f8aa7a585452a7ff452535bf23faa4fde823a1d161c9234a19";
+      sha256 = "89ebad425295cf88f6a33b238e98eaf593afd7459d6db3f75cc1f50cf3354273";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/cs/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/cs/firefox-112.0.2.tar.bz2";
       locale = "cs";
       arch = "linux-x86_64";
-      sha256 = "133263691738d5a03950bc909ed50b5379c56ab118b43ab1ebf874cf67c448ac";
+      sha256 = "4a6d64263f1503cc35c36b2077bd64adbe9d2e7de4223a64c1eeb5eaf2e939a0";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/cy/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/cy/firefox-112.0.2.tar.bz2";
       locale = "cy";
       arch = "linux-x86_64";
-      sha256 = "ac0b70542cb73d62f76619daaa435ec433e766af5922947113239e6d2ba9dcc2";
+      sha256 = "d07924a243ce699dc200fdaedc57cf197126b3f31da78fd9b65ff8b24483729a";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/da/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/da/firefox-112.0.2.tar.bz2";
       locale = "da";
       arch = "linux-x86_64";
-      sha256 = "71167831d1cd3836ef54f8fc0e42ffee0a22116c1f9b512a5a9f4ef6eb94dd6f";
+      sha256 = "401d14c70aaa14ded17b5f1f4ea1d5ebc4a1dffba349aadc730e3a226e78f1c2";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/de/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/de/firefox-112.0.2.tar.bz2";
       locale = "de";
       arch = "linux-x86_64";
-      sha256 = "c01cf989f29d637504de219af4905769318b93aee07ad2b02ec56b678a733ab6";
+      sha256 = "0b8785f1b6320878bd4a870adeb93512331fdd9ef86150ad8aaef0440c5fc0b4";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/dsb/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/dsb/firefox-112.0.2.tar.bz2";
       locale = "dsb";
       arch = "linux-x86_64";
-      sha256 = "6c442c04e8899cc11055839bfe946a4cf5710fa07daefb858f67e63a749006cf";
+      sha256 = "d8324ff9c74be9bf6e20ba76f67d7ceaed2f6e551331873f4d1564f84eae18b6";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/el/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/el/firefox-112.0.2.tar.bz2";
       locale = "el";
       arch = "linux-x86_64";
-      sha256 = "c8d02a7659d65f47fe95a3528246631ac502c972d9cae5efac34d41175300902";
+      sha256 = "ec2b6ab8258c6b7c09524e5c1d6b7204d82aecf7b0daf13cee23f8a9c53995dc";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/en-CA/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/en-CA/firefox-112.0.2.tar.bz2";
       locale = "en-CA";
       arch = "linux-x86_64";
-      sha256 = "69e5c206ff03eef0a2da0b8dafebbb5b7fc75ed83c56915974587ae2bf13c314";
+      sha256 = "733933a42d4488689aab752954895d9ebf0f6c8bca3600816b2d97f047d7a0c6";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/en-GB/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/en-GB/firefox-112.0.2.tar.bz2";
       locale = "en-GB";
       arch = "linux-x86_64";
-      sha256 = "8b0111486226ba15b1a145914647ae05c0c3c25280c2d15de2c10e5928eb0926";
+      sha256 = "7e2014255101bcc88ad490eca8f8d6c7206e5463ce2570630f4d9c7829afc1d1";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/en-US/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/en-US/firefox-112.0.2.tar.bz2";
       locale = "en-US";
       arch = "linux-x86_64";
-      sha256 = "6ae1a778523203660d1c300dfca88c14e2ea012e417a31238f6b312cfc3902f1";
+      sha256 = "dd91e070aa5c6fa2e174cd4dcfaf4794791e6ccacc2a6a8ad8ecb5b6a51cf6bd";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/eo/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/eo/firefox-112.0.2.tar.bz2";
       locale = "eo";
       arch = "linux-x86_64";
-      sha256 = "b8882e0c5d01432ab35b18e2dd6de92432964366671887d6171020018a87af2e";
+      sha256 = "0fd41889e888e9ac017485f3883d21cc855ec45642879c4e7c38320de31674e3";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/es-AR/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/es-AR/firefox-112.0.2.tar.bz2";
       locale = "es-AR";
       arch = "linux-x86_64";
-      sha256 = "fad8033a87c95d50d7959ef7d74186b832a93ae0be590f5d2122651c7f8a8421";
+      sha256 = "28cf2a097b222dd13f51eac35cb9d9ff500fd7a43003cedbf63cc3bad30bd013";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/es-CL/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/es-CL/firefox-112.0.2.tar.bz2";
       locale = "es-CL";
       arch = "linux-x86_64";
-      sha256 = "53a70c208fe9599f709bb706f1cfc4dba73c1165ae0308cff42f0bab89f27d68";
+      sha256 = "948eed7a7575d7c6624508abd734e2db897c4b1277f91bf9543d9a286bc9051d";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/es-ES/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/es-ES/firefox-112.0.2.tar.bz2";
       locale = "es-ES";
       arch = "linux-x86_64";
-      sha256 = "a36a7cfd3214b40566e76086dd0554c264bbe58044e170f3a5529a57bf45a96b";
+      sha256 = "3de6cdfa93914bc8da328100fc04313a4863a4c9c10eed3c9792ca3eba6a817b";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/es-MX/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/es-MX/firefox-112.0.2.tar.bz2";
       locale = "es-MX";
       arch = "linux-x86_64";
-      sha256 = "408aa0cdf4199ee4bcedf5167739582bffd4779a55eef529ddb1e55dc5312b08";
+      sha256 = "cac850a48979e1b96112ec144520728804d61f18e9f615a2e1a0738b8cd92765";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/et/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/et/firefox-112.0.2.tar.bz2";
       locale = "et";
       arch = "linux-x86_64";
-      sha256 = "17c4dbb7f5833a3ad954891d2f73eadcd464812500e75a11be93142920b1ff8e";
+      sha256 = "645ada14230634143a8bc338f8595596ffb6de4f448efde826ecb6e7d7e07ca8";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/eu/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/eu/firefox-112.0.2.tar.bz2";
       locale = "eu";
       arch = "linux-x86_64";
-      sha256 = "0db77714cef6bb365f7757d4d9d2c3f9cb8f422a0b1b1f1742e9bb0e69f9ad03";
+      sha256 = "8212ef486ec59000dee4bcd62d61e55cd375381b5119c688980910f6ab27426b";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/fa/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/fa/firefox-112.0.2.tar.bz2";
       locale = "fa";
       arch = "linux-x86_64";
-      sha256 = "16ef1cff8506f6c2b51fd511416e87095929824f86f9efa48b4e4908f7fff39a";
+      sha256 = "83886a65a04e7a32d3c479e953e228ce08b3e8b62b1074f07286e46e7265790b";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ff/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ff/firefox-112.0.2.tar.bz2";
       locale = "ff";
       arch = "linux-x86_64";
-      sha256 = "0d62047ad33735aa46f745af59baf77ed7fe5f52acad40f08b26a9a477dee9d6";
+      sha256 = "e06797ab1e0c263ca31d1b5c1cd8b4e38823efc053f2be2e7467679fcb22e073";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/fi/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/fi/firefox-112.0.2.tar.bz2";
       locale = "fi";
       arch = "linux-x86_64";
-      sha256 = "e0f3cac06f7a949ab17e60599fcadce7c3953df5f079fb88ef7bf2288c57bd3b";
+      sha256 = "b14d6bdf063177efa85eb6813c21f91ca0a6139b38aed501e65cc584a68e15ea";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/fr/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/fr/firefox-112.0.2.tar.bz2";
       locale = "fr";
       arch = "linux-x86_64";
-      sha256 = "c764c8a45e7ba5c2d2843a9abc875cc69e6854d51ff1971574581a96eba46f00";
+      sha256 = "9729e6f1baf38fde3382869572fb073beeab30f8a9a837643cbc69b63a45f463";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/fur/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/fur/firefox-112.0.2.tar.bz2";
       locale = "fur";
       arch = "linux-x86_64";
-      sha256 = "25bdd7f2ef2082f78fa5791c96991bb5c0a8b8d2e9dea084d8657a1296c47bd8";
+      sha256 = "ac8f33ecf4e7ee66bb7c428052f853793d426f1fe169805f231412e28aa6404a";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/fy-NL/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/fy-NL/firefox-112.0.2.tar.bz2";
       locale = "fy-NL";
       arch = "linux-x86_64";
-      sha256 = "4bea0e611c5574c481ffc1f6c31ab085225536856f7de8100a75d31651530b89";
+      sha256 = "103cd7396ef8c64df1f84db958d12688fbb90f95e56c0be05590f7d9b8a2348d";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ga-IE/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ga-IE/firefox-112.0.2.tar.bz2";
       locale = "ga-IE";
       arch = "linux-x86_64";
-      sha256 = "90e6f28e3aed2288731b3b9e7066b4603846b2ef848a23cfa6d821478879b146";
+      sha256 = "9a04c66d62dcb51c573f9b14b48a064a1fd2725ca20f4518af6de2517e7054fc";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/gd/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/gd/firefox-112.0.2.tar.bz2";
       locale = "gd";
       arch = "linux-x86_64";
-      sha256 = "3b3fb7d17b4091eca185833f8f486b17b8fe3b9c3ecad316dccb0779aadb4490";
+      sha256 = "2a8e057a49f39610ae4ed5c0cec5feacb435680194070b4e0ea5c64ca2328933";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/gl/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/gl/firefox-112.0.2.tar.bz2";
       locale = "gl";
       arch = "linux-x86_64";
-      sha256 = "dde97c135fba0ce84e1e517a77821a7c9cde34ac02230ab23879982c2bc4de77";
+      sha256 = "a354febd40bbdc0dfa8d03306336f43a919f8e393fc984edc2a8a32fd7e06500";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/gn/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/gn/firefox-112.0.2.tar.bz2";
       locale = "gn";
       arch = "linux-x86_64";
-      sha256 = "be096c4bd208c339c1882aa22d5ca94139cc6605691a114ff8f2de397946be2f";
+      sha256 = "fdcb1f427ad40ff9559090dad581f5039e768627dbbad1fda99624d4bb51d8d1";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/gu-IN/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/gu-IN/firefox-112.0.2.tar.bz2";
       locale = "gu-IN";
       arch = "linux-x86_64";
-      sha256 = "62c3d524526543f0ea6ef1b5013b3dd2316590eb8f9b2a68184c68e24cd20e43";
+      sha256 = "c8b946ba9cf2c56d6dca6d9c10a67602f4fad80969858a7c7b906bdda7fdf6f0";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/he/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/he/firefox-112.0.2.tar.bz2";
       locale = "he";
       arch = "linux-x86_64";
-      sha256 = "5f626f9004889bafbb11a6bce604481f0e8b1e445b372d8159d210798c67cc20";
+      sha256 = "9990a04b86f765d79e00890780c7fcf2ec3fd61573ef7f341f156c1c48cd467f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/hi-IN/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/hi-IN/firefox-112.0.2.tar.bz2";
       locale = "hi-IN";
       arch = "linux-x86_64";
-      sha256 = "465bcef608d516b88a5c6a6e0c833f77e871250ccd937f2ff200aa88152a8acf";
+      sha256 = "f3a2c58f7192abbd4690711255035186498b1a8c499afbc9c2dcceaa61fc0b2b";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/hr/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/hr/firefox-112.0.2.tar.bz2";
       locale = "hr";
       arch = "linux-x86_64";
-      sha256 = "5dec945d595e193c1971a179224d3f68b3df23b5c0a587375a77afce4d9e0055";
+      sha256 = "26dded9c117143aafdf502896a11197b028ca978701830f1c84acf258ab307c9";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/hsb/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/hsb/firefox-112.0.2.tar.bz2";
       locale = "hsb";
       arch = "linux-x86_64";
-      sha256 = "a6db8e61d45a20bbb6797757eccc1150ac8f7d3a24561ff86f7a68b57183a051";
+      sha256 = "caf295576ac3d579a1b88cae94e46934cd4c83ff89658b5876e7af217ee31681";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/hu/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/hu/firefox-112.0.2.tar.bz2";
       locale = "hu";
       arch = "linux-x86_64";
-      sha256 = "5d1e84ffe73b3d91d1d2527a8dd08fdbd7f0df50cdbeeefcf9139b0ac359ebde";
+      sha256 = "89e89b13c7dd676ca4cc739ddceab1184c68e70f12292795d91142813058e279";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/hy-AM/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/hy-AM/firefox-112.0.2.tar.bz2";
       locale = "hy-AM";
       arch = "linux-x86_64";
-      sha256 = "07988bd5220f474ca1b6ca06a7a30f057b3ac93e07dccb2d969d938c74d92388";
+      sha256 = "6c3819149739a866dd231707daaf6819da49e26d5941f556b24f0cf29be8c35c";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ia/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ia/firefox-112.0.2.tar.bz2";
       locale = "ia";
       arch = "linux-x86_64";
-      sha256 = "dd4193ab35b05a767575f332398c1952020dbe698f583e08eeb3012e35ec386e";
+      sha256 = "10965794c2075e5a9e5cac21eb9a6dd4e12e1cc55d2bae846a5c7ce2de9159d2";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/id/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/id/firefox-112.0.2.tar.bz2";
       locale = "id";
       arch = "linux-x86_64";
-      sha256 = "1b9cb6b5889b32cf5d906a4d85521b8fdc98f74d1ed13ac77a8252bfe7ff84d9";
+      sha256 = "a91f75dee13ca425fc7abde7696c26ebfdf0db98b339015ad2a5db8d2254742f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/is/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/is/firefox-112.0.2.tar.bz2";
       locale = "is";
       arch = "linux-x86_64";
-      sha256 = "a4b0d7918a259ba34df259366d1db65e7ae1c47feea4e9fb6047c0051eccf52f";
+      sha256 = "365946180b375dea606db48a6929264a2e151f53d413ffc0ecf8e3845c0d962f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/it/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/it/firefox-112.0.2.tar.bz2";
       locale = "it";
       arch = "linux-x86_64";
-      sha256 = "e9a5fb694a2b26ee05059340b4d6698261d1b9440e2a838ffa8eed3fab7a967c";
+      sha256 = "57feb62a6d3e9b5be052988109724c870d8a7e0f5dc88f08a57dc853b1c42a9f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ja/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ja/firefox-112.0.2.tar.bz2";
       locale = "ja";
       arch = "linux-x86_64";
-      sha256 = "9ed9888d19d21024306163a155df7c49188212e308e1aa4981273fb5f06e2a88";
+      sha256 = "b5a47f6a9995789049b717b45ef489da1ddd19532d69d69b887b7a33a9b582dd";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ka/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ka/firefox-112.0.2.tar.bz2";
       locale = "ka";
       arch = "linux-x86_64";
-      sha256 = "7b573603e74a833fbdcad554b27d006f01a0d6019e94338e6fead0c0be1c56b2";
+      sha256 = "8cee5bfe910d8297aba0c41ebf82f0df957a4bbf2add068fdf39dbfd91abd480";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/kab/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/kab/firefox-112.0.2.tar.bz2";
       locale = "kab";
       arch = "linux-x86_64";
-      sha256 = "a98b7b01aa07c27075d44d593870fa52dc124103b52e77f30cfaec12f755c194";
+      sha256 = "c6045ff1ccf44319be689de1564b27d4986ae97e944d54d730551adef6124ced";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/kk/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/kk/firefox-112.0.2.tar.bz2";
       locale = "kk";
       arch = "linux-x86_64";
-      sha256 = "74a496d781fea2e845876871bd731d98fa6f30c4b083e19eadc2762c8cd3644f";
+      sha256 = "5f18181e89268c4556d3d2d299aed3283fa82edec3ebfcab40df3baa494b1697";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/km/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/km/firefox-112.0.2.tar.bz2";
       locale = "km";
       arch = "linux-x86_64";
-      sha256 = "a0b5a577323ae6f20d0bbfb0022c502e9c3228ea0e252cce19bc88df64cb22fb";
+      sha256 = "3909f25efcfac4a4663c93a95f1590f55cee54681f8f4110647040f911b6cdba";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/kn/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/kn/firefox-112.0.2.tar.bz2";
       locale = "kn";
       arch = "linux-x86_64";
-      sha256 = "05c03016b5782ff7b07610cc3e438a9657b226d9150f5335a3fd34906348dc8f";
+      sha256 = "b6a5512beb535eba8a3a58c3807ab1c02af73850f030bf013cc08df07649cdee";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ko/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ko/firefox-112.0.2.tar.bz2";
       locale = "ko";
       arch = "linux-x86_64";
-      sha256 = "9da58cde61b0f0e2208dc01b4de216732786460e8d6fa82533b682bb4d678614";
+      sha256 = "f8235d477c82154ef6bfabfd172b5a13451b3970e4beec8cc6500184ada1af60";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/lij/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/lij/firefox-112.0.2.tar.bz2";
       locale = "lij";
       arch = "linux-x86_64";
-      sha256 = "85202a3383a179b471d5020469af49fb52e154e4f71cd00833fe7137240c8149";
+      sha256 = "169d029ae526ea51e5812e116f7266ce51fc4c622c693b976e2a874ea4ef857a";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/lt/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/lt/firefox-112.0.2.tar.bz2";
       locale = "lt";
       arch = "linux-x86_64";
-      sha256 = "fbcf75e4b55d6eb423f3d94e363e68d0ca1e33f3e199c4ea4d26f0cfd0b3e4f5";
+      sha256 = "6e65530f552c9c267f5b3cc31f301118d5474aa539b33f46bbaff27f62b9f016";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/lv/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/lv/firefox-112.0.2.tar.bz2";
       locale = "lv";
       arch = "linux-x86_64";
-      sha256 = "d41068cd02315dec5daac3c6dfe37ef7eb9c0f2ebafb9d9f223cc287b8d22115";
+      sha256 = "46325094def40a1d9589c7fa49484bacac27277cdf754b7cacaae203b5940bcb";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/mk/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/mk/firefox-112.0.2.tar.bz2";
       locale = "mk";
       arch = "linux-x86_64";
-      sha256 = "ec654f8c5d676506b134c5ba4069c7fe1bea15db644808b191d6474f45c75783";
+      sha256 = "033756b122d219ce79b667f405d54fe1c0eccd1532f43d42bde1c8b928d3ddb1";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/mr/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/mr/firefox-112.0.2.tar.bz2";
       locale = "mr";
       arch = "linux-x86_64";
-      sha256 = "b4f0d9ff4b887b7d2fb657b107547caf834804e695872a422570211d4eeff089";
+      sha256 = "71f23b05b692eb12c834ef356a868e455bdfdb3bf6ed641eb4b6565b4d2fdcc6";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ms/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ms/firefox-112.0.2.tar.bz2";
       locale = "ms";
       arch = "linux-x86_64";
-      sha256 = "3bcae3c3c59484e7196bf8b7122da9a75f1f5657f68cc8125cd3e37c77f85ebf";
+      sha256 = "0e224bb6d7341a17656c57bce4c8f753708deee18fa0f31877938702c3a2d61d";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/my/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/my/firefox-112.0.2.tar.bz2";
       locale = "my";
       arch = "linux-x86_64";
-      sha256 = "dc07314c65084877c8c89035b1f821eea79993dcc5b55ecb304754ba6ea6808b";
+      sha256 = "9eb954ee63bf6e4c8b6ef3fe1eaf8e91eeaa546b78ea4b1e518a1400865d94bd";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/nb-NO/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/nb-NO/firefox-112.0.2.tar.bz2";
       locale = "nb-NO";
       arch = "linux-x86_64";
-      sha256 = "df4b24e54cd19b30a2d0de40e6efac30ff7a7a4a5542c9f6dd4c63b1f9359af5";
+      sha256 = "ca2368edf9441d1fdb4d580926b7af8f1330f99bff62f0d2ce8cc669cd10e85e";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ne-NP/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ne-NP/firefox-112.0.2.tar.bz2";
       locale = "ne-NP";
       arch = "linux-x86_64";
-      sha256 = "ff641ab36ed7c353609c346a66a9a7e5e5ff4f18a789a00d3c22c23bacc2a8a8";
+      sha256 = "324ec07ac0a4694388b392e051e60d4fbed9df5b5a4e16e8b5362f3d35aae2fd";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/nl/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/nl/firefox-112.0.2.tar.bz2";
       locale = "nl";
       arch = "linux-x86_64";
-      sha256 = "b3161e91e62415101daef2620d747e67cafc649518007da34e16da0a46a881ef";
+      sha256 = "1abafd5ed255a8c73ef9c1ec1bdd52f4f5d7f1fc305e55bff279d681d48f9266";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/nn-NO/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/nn-NO/firefox-112.0.2.tar.bz2";
       locale = "nn-NO";
       arch = "linux-x86_64";
-      sha256 = "3b298aa6a1957e160d162f36eaf8af2e5f0c36af80dd7d047f50774b9f7d1d09";
+      sha256 = "1d821b71811a9ff6359ecd91695d92ddf4c84c7480e70ddc5a5bcb9b4e038d74";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/oc/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/oc/firefox-112.0.2.tar.bz2";
       locale = "oc";
       arch = "linux-x86_64";
-      sha256 = "ce50933b0f8e672f1552973791312ef337b71e374c4327ea7bcee7f30da43baf";
+      sha256 = "f249b854be5e54abd6218be95110aa94694054adaddd31b6c932d29b51cd9681";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/pa-IN/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/pa-IN/firefox-112.0.2.tar.bz2";
       locale = "pa-IN";
       arch = "linux-x86_64";
-      sha256 = "8b01acea823d687303fa21f6502a2e6b4ab1a6f3ad3a6e4b3a7e2a0ea0ee55c1";
+      sha256 = "8575d4e60c478e6129be7e56ad537eced9ca5f50b22fcad976a6574486cdc67e";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/pl/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/pl/firefox-112.0.2.tar.bz2";
       locale = "pl";
       arch = "linux-x86_64";
-      sha256 = "9d2018e146acac6440bc12ea8c6c410ea7c11e7e18cda5e8f72f33813d5dbd87";
+      sha256 = "6d822d6de184aa269dcf6c6d868fcffde563081321e861285a48ab471fb9759d";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/pt-BR/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/pt-BR/firefox-112.0.2.tar.bz2";
       locale = "pt-BR";
       arch = "linux-x86_64";
-      sha256 = "0c4b8b4871c4a2a8374f6cdb5c3c8f8986285d4e0a105797e025608298765253";
+      sha256 = "1856751bbc497a734508db1717ca7ee82c67af3e6adfdbfe7dfc44e80f0536e8";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/pt-PT/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/pt-PT/firefox-112.0.2.tar.bz2";
       locale = "pt-PT";
       arch = "linux-x86_64";
-      sha256 = "6e227a07bf2d909763a22f8bf5c2e2b74b39651881685d00bc64bd4fea7d939f";
+      sha256 = "b98aa8e3a2b3cf760723228406c21d9407a13be5f5e5785c7271aa3952261f94";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/rm/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/rm/firefox-112.0.2.tar.bz2";
       locale = "rm";
       arch = "linux-x86_64";
-      sha256 = "28878ce52ccf14a6745d5e2b57155d20ac966a345822d1d95006fdeaae12a2a7";
+      sha256 = "8a5ae33a54647c02c18e01acd5b1a15076d8f9afbc324643f985912f7e724f7f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ro/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ro/firefox-112.0.2.tar.bz2";
       locale = "ro";
       arch = "linux-x86_64";
-      sha256 = "dd0b021cd9cd6f903d9b253309658da187485f57db7b1ae6e466c186ee49d8b7";
+      sha256 = "8396ac479024eef5631a54e58807118e0fa9cedb863303876c67d16a126a80c0";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ru/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ru/firefox-112.0.2.tar.bz2";
       locale = "ru";
       arch = "linux-x86_64";
-      sha256 = "6b0564a7139628b15df935f4a1add5263ca67e686b0558ec70f305258bdc4054";
+      sha256 = "ffbf56b7677b5a2f8d3d712eb029aa92e196201157634ad45f7eee32329df4e4";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/sc/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/sc/firefox-112.0.2.tar.bz2";
       locale = "sc";
       arch = "linux-x86_64";
-      sha256 = "db9e37d5202a44542ea7fb62a946c858eac6716625c63d190a34d0fda7a7b955";
+      sha256 = "16beacb5eecedcf911bb4a7b70d47f396e68b495842f60e7cb90a7581499f05b";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/sco/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/sco/firefox-112.0.2.tar.bz2";
       locale = "sco";
       arch = "linux-x86_64";
-      sha256 = "f35499b1b27fa69934a2c9fbc030a15884966c6f7b38e3d07abdfe7d8af8ba28";
+      sha256 = "41349269d84c88543f343c9ffcc003d89650584e7e01a618a38e7aa7455162ff";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/si/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/si/firefox-112.0.2.tar.bz2";
       locale = "si";
       arch = "linux-x86_64";
-      sha256 = "cd90b1bcb2e0c59420f33728b63530f282bebe61cea80e5817dc8eb8abe77d52";
+      sha256 = "4e1d451b9e1dfe6e9a3783dbbab627da7337da28b419fb20b4530f8ab667e01b";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/sk/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/sk/firefox-112.0.2.tar.bz2";
       locale = "sk";
       arch = "linux-x86_64";
-      sha256 = "3d34d6502191d06f207c57b8cd15cd33b6cb93533bb962498c240be8b6d8a989";
+      sha256 = "474535436e42a5e0db7c4ff066a066633e9d27f912018a7d297fb2155b271e17";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/sl/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/sl/firefox-112.0.2.tar.bz2";
       locale = "sl";
       arch = "linux-x86_64";
-      sha256 = "32a5359344d8580d551d38a03d691eae56c0f868cd1e5810bcf116043cd19f97";
+      sha256 = "e9470ab915fec42daec4a790d9c6c6dba5bb3c322bd4dd86d3275b875a1076bd";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/son/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/son/firefox-112.0.2.tar.bz2";
       locale = "son";
       arch = "linux-x86_64";
-      sha256 = "7ac2c8a8218687638bc3ba9f14b72015020d25cc6a28e192705bd5dfdca83b60";
+      sha256 = "d46566118297c0699de1809dfda3a322ff64fa966218aa0e869b81a473a94fc9";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/sq/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/sq/firefox-112.0.2.tar.bz2";
       locale = "sq";
       arch = "linux-x86_64";
-      sha256 = "6cefb5b63772879cc83a8113afa682499222f0c58b736bca9049699f76ba4403";
+      sha256 = "84c87224e4fbda73e953b88a37607722daaf47a8330d2fedaa08bf55a5a4f7c7";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/sr/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/sr/firefox-112.0.2.tar.bz2";
       locale = "sr";
       arch = "linux-x86_64";
-      sha256 = "73a3ef123e3c65f251557cdcad39197684ef258bc9d79973568d8e50641bd6b4";
+      sha256 = "aacceca53b7a5bf79be03992741ce67b8a902a2684e9354452d4f56618a51f2f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/sv-SE/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/sv-SE/firefox-112.0.2.tar.bz2";
       locale = "sv-SE";
       arch = "linux-x86_64";
-      sha256 = "6182cdf106563fd8016765a08169dae772641b7badf581b4f1cd71d22d66a739";
+      sha256 = "76142e5423922ae3b75946dce3b2a902f3fab70339c07d9a4815d668e23a9821";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/szl/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/szl/firefox-112.0.2.tar.bz2";
       locale = "szl";
       arch = "linux-x86_64";
-      sha256 = "808d255d36dc65c0126a62e6acc54231bd4bcc6e171a2ac017f1746607b9c981";
+      sha256 = "dbd0a963fa7a674f3aa3fc2f22bf35c3f2d9a9efab49800ef259cb914b82b819";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ta/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ta/firefox-112.0.2.tar.bz2";
       locale = "ta";
       arch = "linux-x86_64";
-      sha256 = "32389f9702b9f2e1dc87c40d6ab64da59c42ae7d0471c56d8f66c8187ddc2fc4";
+      sha256 = "08a6f42e20932a906e7eb365b75c8536536fdff50db5ad702ff687345401a7a7";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/te/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/te/firefox-112.0.2.tar.bz2";
       locale = "te";
       arch = "linux-x86_64";
-      sha256 = "3a0ebea6051d8e495c8bdce885b6880198bae4f72c5c4991611d9f9b58054921";
+      sha256 = "c82225dc13a4dd9feceda5552677cf80734785e04b5281140bb0245f3df47784";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/th/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/th/firefox-112.0.2.tar.bz2";
       locale = "th";
       arch = "linux-x86_64";
-      sha256 = "c3987449dc9f22b149c193aab7f618129e6f3f82df87753f21b93a579f4a8c46";
+      sha256 = "42c8282d65f1aa74b3c1508040650a0c5a5890d378e35d4bc5c301843569e02f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/tl/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/tl/firefox-112.0.2.tar.bz2";
       locale = "tl";
       arch = "linux-x86_64";
-      sha256 = "f69a1d00396fca338b1ef37fc98566c1f977fd41103950a05bec22f88eca9708";
+      sha256 = "3c877d0a2fb95e25361d2936096a7c47b56062f05db8505b2848d8f4d6be3795";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/tr/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/tr/firefox-112.0.2.tar.bz2";
       locale = "tr";
       arch = "linux-x86_64";
-      sha256 = "ccdee7f762fae29a3a6f52a50aa3104965fac7c8ea6d0c0be7029dec33d59f48";
+      sha256 = "c8f105b999bdb235c6f90d5cdcba94d615f03c0fbab08d850043b8e38677af65";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/trs/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/trs/firefox-112.0.2.tar.bz2";
       locale = "trs";
       arch = "linux-x86_64";
-      sha256 = "9ddbd803a3188c69c90b0a62b295cbbef3357f3cd3074080bf6f4d6eb87b94d3";
+      sha256 = "01f0f20141d982dbc6db2c49c3456cba85bdec92e967c9e22b467320a927463c";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/uk/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/uk/firefox-112.0.2.tar.bz2";
       locale = "uk";
       arch = "linux-x86_64";
-      sha256 = "5409d308337224d5c76a7f20d99d6bae87b0535aa9ba3c56abaac677543dd04e";
+      sha256 = "99a1fbbd80e2b74004ea492f6bc8fcff2c11fe3a393dfec69644f6f2d7a6eb09";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/ur/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/ur/firefox-112.0.2.tar.bz2";
       locale = "ur";
       arch = "linux-x86_64";
-      sha256 = "a2aa8fbaef5f1814128a3d39a4780bbb8aa20ab7970f10ecd51165e21e0fbb4d";
+      sha256 = "5f6a004c96b55842566a37c9b7bb63e7b384ec8da9d4032fc02f61eb7995a717";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/uz/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/uz/firefox-112.0.2.tar.bz2";
       locale = "uz";
       arch = "linux-x86_64";
-      sha256 = "55230fd3cde7e5dab7309b7dcfd7688feb332ec3c8370001ba925076c3200bbf";
+      sha256 = "6681c59607a6dcdf51e95d802c68cd2eee3cee8935b7a0b493fddd3c32205e16";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/vi/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/vi/firefox-112.0.2.tar.bz2";
       locale = "vi";
       arch = "linux-x86_64";
-      sha256 = "f7a8ecf5eeac44aa6ca156d131ebd05a268ce5e92ff0c88c208c3981a658ef78";
+      sha256 = "457590c34d1b207414192f8a1f2b54884dac2c5cfe8999aaf135ac58eb0dc731";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/xh/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/xh/firefox-112.0.2.tar.bz2";
       locale = "xh";
       arch = "linux-x86_64";
-      sha256 = "e52862f470202fa07f370a8912023edbf2a5350f1aa7ce5351afa335fc194bc4";
+      sha256 = "d2fafd74b04ba3cdf2de360f9f6d7e19da576d81139010fe3d80a19055a3a326";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/zh-CN/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/zh-CN/firefox-112.0.2.tar.bz2";
       locale = "zh-CN";
       arch = "linux-x86_64";
-      sha256 = "03e0a67ed68413022cb5452e68f1dde9480ec71cfd6726be604cbc54581ce84c";
+      sha256 = "30062a56f9b7cce01adc683896d921a568ced738a7bc089f679df85820d62441";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-x86_64/zh-TW/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-x86_64/zh-TW/firefox-112.0.2.tar.bz2";
       locale = "zh-TW";
       arch = "linux-x86_64";
-      sha256 = "f4e54e3ef22307cb52c26059cd7d862ce7c45c24e6c7cc365f3b0e45f84afeea";
+      sha256 = "ac6ff13f68590aff1d7ec0e88c147ba86bd2074d98ba6586dd4f2a3a448ff38f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ach/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ach/firefox-112.0.2.tar.bz2";
       locale = "ach";
       arch = "linux-i686";
-      sha256 = "68d790bffa6415c57274d39e1ca04ccafd55c78720b659beaa696746c8a196a4";
+      sha256 = "8e5894479c8c2670ca2ca8aa2067f319e7609d2d15eb19ab6c47eedc3af02ebf";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/af/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/af/firefox-112.0.2.tar.bz2";
       locale = "af";
       arch = "linux-i686";
-      sha256 = "db827c1ece4fa12b217fb7c41af6064cd286c1f73c3deda8f370cc24294829f7";
+      sha256 = "4be87cd20eae2e2e0481fee449a56db8d22fb4ebe356a7ca04db2911b025d152";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/an/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/an/firefox-112.0.2.tar.bz2";
       locale = "an";
       arch = "linux-i686";
-      sha256 = "8e43a3008913bbbb33578ffe6725e5cfcc191484d66e9b4ccb80fb4bd1e1822c";
+      sha256 = "34c8db9bca3f337a6f081c99299fd6b07c3d69352e1032882922d380531fcc49";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ar/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ar/firefox-112.0.2.tar.bz2";
       locale = "ar";
       arch = "linux-i686";
-      sha256 = "639cda8d39adf8618b316ed30768306c60b5a2f03c8aacc4e8196b9050f7bc5d";
+      sha256 = "0441a66c9e246804cded5f6db9456e5d31dee3984c59b2b4b01540f92713dcf8";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ast/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ast/firefox-112.0.2.tar.bz2";
       locale = "ast";
       arch = "linux-i686";
-      sha256 = "76e1b0b2d93728304eca8dd25c6d8b589afd054ab1b1b1ac0ddaf4c20982962b";
+      sha256 = "32089836ebcb905c17a10c7f9b02a209064c4db693c29d962bc0067ada617b1c";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/az/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/az/firefox-112.0.2.tar.bz2";
       locale = "az";
       arch = "linux-i686";
-      sha256 = "7ce308bcfb41db1149425cb73b3298ea98735c871c46077bec33a9c74d876ac7";
+      sha256 = "50b29941e2185e0793587952009571b067e8e60a298388b7024fc4648e5d03aa";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/be/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/be/firefox-112.0.2.tar.bz2";
       locale = "be";
       arch = "linux-i686";
-      sha256 = "fde37924c46e1a0d1f7dfe17187abf1756e7f02a5ace60b239acfdca11f9a5b4";
+      sha256 = "c4848f7e1a5f50a6814d57f17a5834bc7b1286e988cc52196182291ab9aa2d7b";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/bg/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/bg/firefox-112.0.2.tar.bz2";
       locale = "bg";
       arch = "linux-i686";
-      sha256 = "8b99e80e883aa1d24612978e085adb0d0d6fb00bc71817e48cdf95bd407eab3e";
+      sha256 = "0ae7bbb8b682b363878577ef92d146f36b48884b2deaedcbf6bc57da434758ee";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/bn/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/bn/firefox-112.0.2.tar.bz2";
       locale = "bn";
       arch = "linux-i686";
-      sha256 = "82e31e51ecd8d478eef65f437e07d695745bd03d02ee90379364c17506cac7fa";
+      sha256 = "e5e0640cd37e4e9d115e7f67d0a90b08e34a0146356bfcd67214cb7dcfae3c9c";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/br/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/br/firefox-112.0.2.tar.bz2";
       locale = "br";
       arch = "linux-i686";
-      sha256 = "23a8d61abb4001186847a43b13cf497f9872b8aba5119e515ef4fc5862220410";
+      sha256 = "f5e5149cd30fce3dd992ab09157f3975eb4823bb9f0b7a0662cbde28c64baecf";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/bs/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/bs/firefox-112.0.2.tar.bz2";
       locale = "bs";
       arch = "linux-i686";
-      sha256 = "149c6fcba2165f9c16f2df471aa345c75b7effe9d7d34e011a1c59bd4a24992a";
+      sha256 = "29f609bcba5ef2fde4bd796eeae9155b9ced42da97203f527ebfa1ea038e8d81";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ca-valencia/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ca-valencia/firefox-112.0.2.tar.bz2";
       locale = "ca-valencia";
       arch = "linux-i686";
-      sha256 = "567e3cf76f645820a1b10cae5c1b38967c0348fbf65eda45eeb9fe2fa4d901d8";
+      sha256 = "9b732ef026044892b33f5e4059e4b86ae670ed202b31735b8a26b7c86d935f80";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ca/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ca/firefox-112.0.2.tar.bz2";
       locale = "ca";
       arch = "linux-i686";
-      sha256 = "db7bee1e3fe1be75d7fb92a242d7a436902f5fe86b8aa4c7fa25dfe61f3faac2";
+      sha256 = "5e8b8ce7f063212e92bd1a23ac22a9e74642e6c69c51f2e123ba1b0756f1b95c";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/cak/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/cak/firefox-112.0.2.tar.bz2";
       locale = "cak";
       arch = "linux-i686";
-      sha256 = "4eb2cd9f324777fcb8be0af9840eea4d01084921c270278605a4d9e90f69ab41";
+      sha256 = "596c1aea0b6a6634be8de4e334a2186111b6a3370cf428b6ab24c6707a588442";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/cs/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/cs/firefox-112.0.2.tar.bz2";
       locale = "cs";
       arch = "linux-i686";
-      sha256 = "d5acd46ffe1c44b8e150cc392c06de3b9886dc996942c82593a326692897c8b0";
+      sha256 = "fa53d85a8a7ca5af00fedbb527de4c0c4386b4c62ed7c7f3a76f9c189123954b";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/cy/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/cy/firefox-112.0.2.tar.bz2";
       locale = "cy";
       arch = "linux-i686";
-      sha256 = "d086fddb56c18a8189ca6c66c353e76d2e99853c88847675b2b69362741c41a7";
+      sha256 = "18ee47aa148012d2d5528db5829feebbec941568221731c38f191485ca57ec0a";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/da/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/da/firefox-112.0.2.tar.bz2";
       locale = "da";
       arch = "linux-i686";
-      sha256 = "b8c6e563c98a1a7e0c583bc3463d501dfa7d5b3f9e5bfdf026fad1f20e94b4b4";
+      sha256 = "0c17d62a5edbddbff5bdb5ec7efd2ea32fc0e19ba7767500d0f21d15d6aa3d14";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/de/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/de/firefox-112.0.2.tar.bz2";
       locale = "de";
       arch = "linux-i686";
-      sha256 = "8be83652fd8872ece97120f21abc66ef17332900696aea65350d9c36f51aef20";
+      sha256 = "cb9b72b06c83a0eedf83704ff01aa6a7ae8b15a39118cdec4c6abeca6b59fc8e";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/dsb/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/dsb/firefox-112.0.2.tar.bz2";
       locale = "dsb";
       arch = "linux-i686";
-      sha256 = "0b7c5bf0808b4cdb24767aca38983db2769a9dc17182b05f05767f5bdb1510a7";
+      sha256 = "ece81a97a047b520aa912db9ca372a8e9550cbd1f0c8996cdf3f686068edcdf3";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/el/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/el/firefox-112.0.2.tar.bz2";
       locale = "el";
       arch = "linux-i686";
-      sha256 = "564fc0fc6cf469254a55756142a7bd221f7e8f5a2a65a7af7884442d405cdcc3";
+      sha256 = "35076bd574b638a871f3a0a70a87b7a0b6f56b3eea8653d2888cdb4fa1fc52df";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/en-CA/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/en-CA/firefox-112.0.2.tar.bz2";
       locale = "en-CA";
       arch = "linux-i686";
-      sha256 = "8fe5513b1cd1e4735ead8f7232bfa95e709a7f09e15c998ffcc57e866f0e0177";
+      sha256 = "38ed101fbb4a68915c6e11eed1576c0312fcb1ec7c45264fb929f5019fa30340";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/en-GB/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/en-GB/firefox-112.0.2.tar.bz2";
       locale = "en-GB";
       arch = "linux-i686";
-      sha256 = "6d7614935cd1cb93e8dbb843e5725d263655d0042fbcde4656fb90899fc4923e";
+      sha256 = "06f5012d8e6ede5eeab23dfdf8eb06e20410514e13e7872ffe6b77c5bd6cf25d";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/en-US/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/en-US/firefox-112.0.2.tar.bz2";
       locale = "en-US";
       arch = "linux-i686";
-      sha256 = "7c30ab48a4cc32e6358d6dd29e34274453b1db998cb52cfc5e2108ebf1f9ba41";
+      sha256 = "b3b6537de3f8c2606d6cd119a4158c1e30ad21cd0936e9887fffe398cfa264cc";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/eo/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/eo/firefox-112.0.2.tar.bz2";
       locale = "eo";
       arch = "linux-i686";
-      sha256 = "d0c603545d9e36cc43a0dcf5013d29c2557f7b31fc4c551fe482d5e53b76e7f9";
+      sha256 = "8eec80b82de6279eda4d1a4b740c7be1eb4c3278efd9d1ddb35235775527ac72";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/es-AR/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/es-AR/firefox-112.0.2.tar.bz2";
       locale = "es-AR";
       arch = "linux-i686";
-      sha256 = "2b3e80b83fe78178074a784c6800ceea0ef449ec0fca0919855c0cfb0d8f3eb8";
+      sha256 = "226a16beaea00f60292f4ca1275967aa266f30b0f9afd7fc7f8ef20b28db409d";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/es-CL/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/es-CL/firefox-112.0.2.tar.bz2";
       locale = "es-CL";
       arch = "linux-i686";
-      sha256 = "fa46c867f8daef7b4aebf3c9968f12b26aa5ead295baa5da991730bfd022907d";
+      sha256 = "e08c2d0452fb24aa7ebff8bb937df400d18a84f6cb19e80884fc1fa5daf41590";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/es-ES/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/es-ES/firefox-112.0.2.tar.bz2";
       locale = "es-ES";
       arch = "linux-i686";
-      sha256 = "a6c24fef469e0b7e4b8bab3ad7127c569e0c2e0c38c5cbf344dc70ada34016b8";
+      sha256 = "eefb4f5342e102b90b6350d3dc091c6286459aa69938a0e9d57b1e4624beb41b";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/es-MX/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/es-MX/firefox-112.0.2.tar.bz2";
       locale = "es-MX";
       arch = "linux-i686";
-      sha256 = "372403d23deac3dfb397bb3c5da5b10e58c60656b9c5d9126d06435c07b86282";
+      sha256 = "bd7424bd23b4dedfc007e15c13e250030194b4b4efee75f52ed87ef0b7059b6e";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/et/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/et/firefox-112.0.2.tar.bz2";
       locale = "et";
       arch = "linux-i686";
-      sha256 = "586efc4af3e4c10e13394967d880e4132e9739da259a505df84488ed069bdb55";
+      sha256 = "66d1f747f3545aacc89e26f062052dafd48ad3bec8e8285f86764198ee325fe8";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/eu/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/eu/firefox-112.0.2.tar.bz2";
       locale = "eu";
       arch = "linux-i686";
-      sha256 = "ea16876186a0666cbf4783a114ae32c60d5279e9c0aee9db5ab7404a8ed94ff8";
+      sha256 = "0cc51370fd7640ee7b9b319b5a6ea211b6fe1b5a8aa8dc36e75f7da25e8c4b98";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/fa/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/fa/firefox-112.0.2.tar.bz2";
       locale = "fa";
       arch = "linux-i686";
-      sha256 = "44189a301db4defe04160de90fd4722003b062460c44ccb54466044641eadfa6";
+      sha256 = "550cccf8b9ab72e9d9d0a37edd836c9c0c6a397c54a58bc23aacca2567055d01";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ff/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ff/firefox-112.0.2.tar.bz2";
       locale = "ff";
       arch = "linux-i686";
-      sha256 = "6d61ac3ec8652416cbf32449658da95eecd8ea84fbb0fe5ddac4fc8c9ced964e";
+      sha256 = "402e4bdff0865524ceb5c295c157d7387f22682a29ac16718239af485f1f0384";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/fi/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/fi/firefox-112.0.2.tar.bz2";
       locale = "fi";
       arch = "linux-i686";
-      sha256 = "09e3ae90365f38d5fe7859c24c6bee640fd0aee3f2283d9cf1cc5840ac9fa70a";
+      sha256 = "9f49648a46043fbbd22ec1b73b73452bdac23bb046c1bd4951f17b847c403ee9";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/fr/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/fr/firefox-112.0.2.tar.bz2";
       locale = "fr";
       arch = "linux-i686";
-      sha256 = "a037725177bd002cb06ff82548efe8e48b99095362c1ed443101dfe00f0c2e87";
+      sha256 = "ab17b387391556820d9ebdf4dc28bbc90e3e644d5364ab48faf49e0b378c1b5c";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/fur/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/fur/firefox-112.0.2.tar.bz2";
       locale = "fur";
       arch = "linux-i686";
-      sha256 = "fbfb3357784a0609260e42ef8011f354e3e9312607d116d324bbffa410607f01";
+      sha256 = "b1420357530394c326a85f06c0b66cf1a7f1f92aed13b7e04fcf49f9e492033a";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/fy-NL/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/fy-NL/firefox-112.0.2.tar.bz2";
       locale = "fy-NL";
       arch = "linux-i686";
-      sha256 = "1a7348fd973379cb6b639f4651d704267cba9eea65484672858a7e6f55739cde";
+      sha256 = "1758f2ce57166b97182c02904970eedc00cb8c5195f7872f7edbc63f0443d184";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ga-IE/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ga-IE/firefox-112.0.2.tar.bz2";
       locale = "ga-IE";
       arch = "linux-i686";
-      sha256 = "01b7652d854d25745378e612f71e9aacef07d18318f14658a17d491a25724a62";
+      sha256 = "05f0ce176ef1ed1df62e56e57ca78c2da4181769213c62a84dfd1486bd6c0291";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/gd/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/gd/firefox-112.0.2.tar.bz2";
       locale = "gd";
       arch = "linux-i686";
-      sha256 = "33bb06317e98eb560bff3599f57aa76b3d686549b32237200c12374fbb95cb7a";
+      sha256 = "c71cf775a36b2e40512fbb514d18f7d1e5734bb2bf9ce3753fa992178c71cc84";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/gl/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/gl/firefox-112.0.2.tar.bz2";
       locale = "gl";
       arch = "linux-i686";
-      sha256 = "8ea125896e735709ac7ae1f5ef29740dd7db3eb08de10ee0b5a25e005e1bb1e1";
+      sha256 = "527a3b3175a70e4309194ed8ec12d2735dfa51c6830a62f7ca202553f85038ff";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/gn/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/gn/firefox-112.0.2.tar.bz2";
       locale = "gn";
       arch = "linux-i686";
-      sha256 = "f3e546720ac549e6b4c94bceba5c8fa66ef0af771268052fd114141397c5f518";
+      sha256 = "125222a06c0b25f0187907cc66d04a15638d8f162544dfa53af3bc85a0922396";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/gu-IN/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/gu-IN/firefox-112.0.2.tar.bz2";
       locale = "gu-IN";
       arch = "linux-i686";
-      sha256 = "e5a671e30fefd9a669b4f6d86b958887320dec0f450a302069ce944327d2b0b9";
+      sha256 = "49a051e5a95b0738c7f5e97ddd3679ad062c83d80395d71fd7e5a9988577db16";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/he/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/he/firefox-112.0.2.tar.bz2";
       locale = "he";
       arch = "linux-i686";
-      sha256 = "ecbea24231080df03d6a884589d1a48f5cdbc61eb9f53111507e438a1442972e";
+      sha256 = "f0e992f6b27a99f67a252fbd67fbe1511230467c3b2ede7b0d3395c4bebe040b";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/hi-IN/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/hi-IN/firefox-112.0.2.tar.bz2";
       locale = "hi-IN";
       arch = "linux-i686";
-      sha256 = "9ad861c0dfcc7cdf08129948b04a1ff22dbc84c67b0b085621fa11f9b733691a";
+      sha256 = "d4639508f927056cace33d0d1adbdbad13852f05b00ff5b439bbd956c7cb5f67";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/hr/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/hr/firefox-112.0.2.tar.bz2";
       locale = "hr";
       arch = "linux-i686";
-      sha256 = "66a15a6321789612a15e1f897ba69146a0f48640a452b92e98ee50bc2fc5bee1";
+      sha256 = "29cd33f9d173a416e9e8a825ec1b6b7656eb429475befb3debed0f9319c4f9ae";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/hsb/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/hsb/firefox-112.0.2.tar.bz2";
       locale = "hsb";
       arch = "linux-i686";
-      sha256 = "5e0a10c8abc026543ec9aee297b0246af5726fbc19c8c3defe3816cff96a5306";
+      sha256 = "da044123db5f309920f49075d6b2c2d379423094f79cd82ff857cb8e55a80634";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/hu/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/hu/firefox-112.0.2.tar.bz2";
       locale = "hu";
       arch = "linux-i686";
-      sha256 = "35dfc59a336d1d4c977f393cda08df4aac2ea4b570cb347234b04e36e60ccd7a";
+      sha256 = "4212ff43a627d29a081effc62cd8a44db79f266c1f2a9f64fb610cea7930b7d5";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/hy-AM/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/hy-AM/firefox-112.0.2.tar.bz2";
       locale = "hy-AM";
       arch = "linux-i686";
-      sha256 = "a44666a2855563a2437a3a5b317858b5d97608c1d84a366e6fc9ca7d500fd908";
+      sha256 = "fefa97627dfd5e368057ad40be7ac15a397e2915f82f4dbaafccfcbacf0d96f5";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ia/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ia/firefox-112.0.2.tar.bz2";
       locale = "ia";
       arch = "linux-i686";
-      sha256 = "578824cc54bf08eebb5391f7195e0e668684103d57913c73f34323e48fc9b997";
+      sha256 = "4fd80715413cb0eeb63c615764b287ca126f2cc09014f4dfd213f2f7be81b64e";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/id/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/id/firefox-112.0.2.tar.bz2";
       locale = "id";
       arch = "linux-i686";
-      sha256 = "ec9d5f75f85a97e88fa16eca1e5d365b20453594f23bc7ce6b0accd64a06cd2a";
+      sha256 = "e43da18d58eeb275888988471307004ea7efbf6ccd88c6e03dc16e5bfa548e08";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/is/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/is/firefox-112.0.2.tar.bz2";
       locale = "is";
       arch = "linux-i686";
-      sha256 = "c11658c067c6ec8ed7f2cf34c74587b6500a3f96d0d48647105d6218b39dbffa";
+      sha256 = "a2ba240444cbc96d56b6d4a851da6f80b783f9fd74ab0b89a672f88173b33a0f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/it/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/it/firefox-112.0.2.tar.bz2";
       locale = "it";
       arch = "linux-i686";
-      sha256 = "0cd5cb70fc40956caed930ca51c01c539159a35a7a5ad5cbf9257a3e12bb9845";
+      sha256 = "4f908a9c9386c214301ea3cd6e8298d7aea9ef94ec8c92062bcf6a98ff7d5c7d";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ja/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ja/firefox-112.0.2.tar.bz2";
       locale = "ja";
       arch = "linux-i686";
-      sha256 = "56a73fddb5a0d2d2160e68bcfab172e81f572a2db3981b43b330292057b0e671";
+      sha256 = "c69b6cf1fde3d7a76f258732f9aaa558e1315ec0dd83bd3f2a6af02c88d05bef";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ka/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ka/firefox-112.0.2.tar.bz2";
       locale = "ka";
       arch = "linux-i686";
-      sha256 = "57bc43faf0e2610fb0e58c5e7e323e7909a9834dcac1bb6b1b3803c0ffe88ab4";
+      sha256 = "6c1fb4069bece39160c3d8de030c8d8d8e7f698784199aeff9b86cb5d6af3803";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/kab/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/kab/firefox-112.0.2.tar.bz2";
       locale = "kab";
       arch = "linux-i686";
-      sha256 = "48eca6ab0e3dc3d187f2f296b48f5ddf85481f3c0a14614778fee21d0356ab5c";
+      sha256 = "e14bbc22e6f922714109db165cec4f8dcd9c4a3672b37519e3df7e0e9fedcfe5";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/kk/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/kk/firefox-112.0.2.tar.bz2";
       locale = "kk";
       arch = "linux-i686";
-      sha256 = "0e8693939975ef607d1d955b994e047e43018be58654f25436233c8686241baf";
+      sha256 = "92c694a35a19cede811364ad0bad3cdb33a62de8a6effe742a5c57ba865ac5be";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/km/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/km/firefox-112.0.2.tar.bz2";
       locale = "km";
       arch = "linux-i686";
-      sha256 = "453b984e1709b99947d1e4ef4509c89f73de9041d231c62755674f976599b1ac";
+      sha256 = "2e4f6f21b44e8a2812961bd2e625bfd8b070816ea3640cee163d177dfe090498";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/kn/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/kn/firefox-112.0.2.tar.bz2";
       locale = "kn";
       arch = "linux-i686";
-      sha256 = "a25556c0340257300b205c4ffc4e0f6f59d8dd151a415452e501f041ba868278";
+      sha256 = "ec99d9517002fa62cdc210c57fd9ef3a38faf35fd3ce34c24910b42673b67133";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ko/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ko/firefox-112.0.2.tar.bz2";
       locale = "ko";
       arch = "linux-i686";
-      sha256 = "3fd45baeafaee0f24639388337c659073c19f6892e7ce02a458521fb50fb021f";
+      sha256 = "3fb1d5ba4c8f6b3824c72c561e45834054113f70ccd8087ff8c9a957ee9dce4f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/lij/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/lij/firefox-112.0.2.tar.bz2";
       locale = "lij";
       arch = "linux-i686";
-      sha256 = "74d12bfbb8b64d95c583a4d18e3ddeb7c47589206d9e01093e536af83b3c2263";
+      sha256 = "d8225a7dfb4f93faff92f853fef3001c737a83328ea51618aaa4f8aab44fb902";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/lt/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/lt/firefox-112.0.2.tar.bz2";
       locale = "lt";
       arch = "linux-i686";
-      sha256 = "935a06e6c9418796b262bf11c2bf10e02c799866f9a71cfb1b287387a1e7d429";
+      sha256 = "631230b71052285b7d58b272839fdfb6b86457690c3036094faa50f11cad0ae4";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/lv/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/lv/firefox-112.0.2.tar.bz2";
       locale = "lv";
       arch = "linux-i686";
-      sha256 = "37ba1df6e5300cab332f66e1872ebfd03210a9405b2a6a696c04cb5973e8aa3e";
+      sha256 = "31a76eed0cddd4bb7ba24c063d0936d4f0e36e3efc18f8f0e504bd1bc3542f99";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/mk/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/mk/firefox-112.0.2.tar.bz2";
       locale = "mk";
       arch = "linux-i686";
-      sha256 = "846f8905382d8ecd621ecb4476364d13a83cc9759f3c6d6fa532f52d868f5081";
+      sha256 = "d2987264002bb665866507da3e6df5a04d72834c98f89a996cd24ab968b0a4a3";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/mr/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/mr/firefox-112.0.2.tar.bz2";
       locale = "mr";
       arch = "linux-i686";
-      sha256 = "eb182cf3e62502d7978e8321a43dcf7ce83b2f8871494206b89b36063ee87f9e";
+      sha256 = "d39f7668e6548de3e5a33265ea5ee6b99d801a97aff7e2cc12f054ac6042655f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ms/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ms/firefox-112.0.2.tar.bz2";
       locale = "ms";
       arch = "linux-i686";
-      sha256 = "ca659d6e58ad5bbda6f5029358ee8d8e2434490ceb315ee9c92777892976eb35";
+      sha256 = "1d9d5aef69d76136d0b02313277bc79069f7ad778ff700430fc91481dfb9a2ca";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/my/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/my/firefox-112.0.2.tar.bz2";
       locale = "my";
       arch = "linux-i686";
-      sha256 = "a3656a0dceaab329a1b66d2559307c95582da97599f0f24afbd1a2f3ac3d8978";
+      sha256 = "5ce8128deacde8fcd65f0dc40919cc1a47f2699258be3b19c3cddc6766df8185";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/nb-NO/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/nb-NO/firefox-112.0.2.tar.bz2";
       locale = "nb-NO";
       arch = "linux-i686";
-      sha256 = "79696194984f1789a2e0b1b0ccaddae490077bacaa96184adf4f8d298b75b47b";
+      sha256 = "b6ab5e4dc4566b9e7a2147b487cbe6cac2661168d2d2a9af19fdb8054d3fea6b";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ne-NP/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ne-NP/firefox-112.0.2.tar.bz2";
       locale = "ne-NP";
       arch = "linux-i686";
-      sha256 = "bdcd39bd3d0c0441044f7f1d7ed2dea1d07fc550778e6071ec03d159b30db413";
+      sha256 = "0b738935a8b514fa94137713a64b3343747af647f92c89a8650300e74fe06c3f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/nl/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/nl/firefox-112.0.2.tar.bz2";
       locale = "nl";
       arch = "linux-i686";
-      sha256 = "b0e14bad355f3a63a37fae0dc74eb3f974c5a923261ac42dea9d30485ebe61c6";
+      sha256 = "43bea3aaf6394e346d5a7a94fa9b6d272eadbd24ca4c905e5ec19d24070f5763";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/nn-NO/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/nn-NO/firefox-112.0.2.tar.bz2";
       locale = "nn-NO";
       arch = "linux-i686";
-      sha256 = "2cd11da894f7f3ee53ceb1138ceda8542b4b143341cbcd624a4f9bc808d520ad";
+      sha256 = "21bbb6ea695b81932168ce7ed16b14a3204b5cbd8cd4963544dedf02d1aab10e";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/oc/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/oc/firefox-112.0.2.tar.bz2";
       locale = "oc";
       arch = "linux-i686";
-      sha256 = "7435492bd6079d7e76cdb4a41f070b42ee4c080d3e891f05a21942046d33d76d";
+      sha256 = "91bbc293db4e4397c0502d38fcb9c5fbadeb7834ffab87e337bd33b96afe9911";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/pa-IN/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/pa-IN/firefox-112.0.2.tar.bz2";
       locale = "pa-IN";
       arch = "linux-i686";
-      sha256 = "93c90602e511aac82efa2da0fb4c3043bfadcfa27cb87a39108c803639d52b3e";
+      sha256 = "03b9d04b28df436bdab3d792f15e5a59f30073c50f9f1697d0062c6defcd0f4c";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/pl/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/pl/firefox-112.0.2.tar.bz2";
       locale = "pl";
       arch = "linux-i686";
-      sha256 = "a75bfe0ec38e782c939348a34e6acf23598338c3350278f096ab73354c43f3c4";
+      sha256 = "84b532132fcc5e832d71a97de46f14fb2ae8a0855bcb88b98b77c73a22a9d742";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/pt-BR/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/pt-BR/firefox-112.0.2.tar.bz2";
       locale = "pt-BR";
       arch = "linux-i686";
-      sha256 = "67b17c53ec8618064d0fefc0b5a61ee8911f714396fc19b0931fcd242c8d117e";
+      sha256 = "346524c9dd078c68227e681afd0344b1574623a88abb025dbadd7ecfad4759c9";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/pt-PT/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/pt-PT/firefox-112.0.2.tar.bz2";
       locale = "pt-PT";
       arch = "linux-i686";
-      sha256 = "e4e412aab7cd1e938be7c5e689bee63499a9b44b5e4efa2fafa58d5bb2c12c2a";
+      sha256 = "e14516096e990defff67deb73aaae9448b4a14ce660829aa7c392d9a45b3891f";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/rm/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/rm/firefox-112.0.2.tar.bz2";
       locale = "rm";
       arch = "linux-i686";
-      sha256 = "b86be0830e26e01302f1f99ed9c5acc9a43757d340361dc137267c9b95feeff9";
+      sha256 = "7c6e7381e963eb9d7100c1d380df759107d5baf4f4862177986adb2068844ac5";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ro/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ro/firefox-112.0.2.tar.bz2";
       locale = "ro";
       arch = "linux-i686";
-      sha256 = "ad830ca7e0c7f0b53031fc85d8884beb6beabedc38dbe570f06324fa4acb0bc6";
+      sha256 = "6b9d0dd1256f50088706d1c695d08d92a970f5b1ad6e536647e4b917ed3758d5";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ru/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ru/firefox-112.0.2.tar.bz2";
       locale = "ru";
       arch = "linux-i686";
-      sha256 = "9c2778b094dbebe800f8f590d1df5202b1632616d0f78ba94d8db31726ad8b83";
+      sha256 = "52e4449fac2a97b5db5ca525edc664e0fb25519df4472e8f820b4233c33411ae";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/sc/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/sc/firefox-112.0.2.tar.bz2";
       locale = "sc";
       arch = "linux-i686";
-      sha256 = "4799ac43e8a0d44412e8ff2c50982d494d039430eb1175bd98dda95399b8aadf";
+      sha256 = "3b011a7316737f53219e942cdb62938d961826e284246294097a4505e8ebeb71";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/sco/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/sco/firefox-112.0.2.tar.bz2";
       locale = "sco";
       arch = "linux-i686";
-      sha256 = "135ef70b894fb2ce564c9e8070b65f605b199382b109faa2f2519f9ebbf9c0f9";
+      sha256 = "37d7f80776a35165ec071e8dff8d390db5a11e5f8f11814b9c7c0fc3d18fbb24";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/si/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/si/firefox-112.0.2.tar.bz2";
       locale = "si";
       arch = "linux-i686";
-      sha256 = "52329952a8075a05a248a49d69a5c5ceb41778d6c68b76e5a334b1ebff3d4a1d";
+      sha256 = "3acf9722a50c1baa35bafd323876882999b353c9b3b39a38ea8085d44cc27694";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/sk/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/sk/firefox-112.0.2.tar.bz2";
       locale = "sk";
       arch = "linux-i686";
-      sha256 = "1b3073d92b6eacabf8c26efa58e00c6895332f560f4be93a57fba4666f328751";
+      sha256 = "c2571e8d25564675ee4c11126e3a8dee278b11ba4be1f333c4a0feb83d78f3a6";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/sl/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/sl/firefox-112.0.2.tar.bz2";
       locale = "sl";
       arch = "linux-i686";
-      sha256 = "4ec9e44b3defcd7b79f60a4304123f228bbbfc4ad615548ef5183366d730c335";
+      sha256 = "d12738c69e586a45bb45339b4c5e4dbe9812eb161517479d5e09c1d84ac8e6b8";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/son/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/son/firefox-112.0.2.tar.bz2";
       locale = "son";
       arch = "linux-i686";
-      sha256 = "1da86784e9dc41d4d2c6b05d35da1a2f96bd133b87b759719768bf085fa07dc4";
+      sha256 = "dbde4f4fb12d2c76ec6ebb478f23e23914af66f417960ee1459ad7d5af85a306";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/sq/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/sq/firefox-112.0.2.tar.bz2";
       locale = "sq";
       arch = "linux-i686";
-      sha256 = "06525d8421cc412c8e5ec2c6cb47d91665b9d0e8d622c09b2fb70b21ad0a724c";
+      sha256 = "a588d5a5328794397d4b2b85800343f86f5e7219f1419e9c9cfc1102e686cec0";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/sr/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/sr/firefox-112.0.2.tar.bz2";
       locale = "sr";
       arch = "linux-i686";
-      sha256 = "358dcc70895bdfd935419b755711dc7001a56866746a0340b534192e58de7948";
+      sha256 = "bb2539149ab918bb256946dbb1c229b161ace148c6bcf1882329460f5c37b62d";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/sv-SE/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/sv-SE/firefox-112.0.2.tar.bz2";
       locale = "sv-SE";
       arch = "linux-i686";
-      sha256 = "91a7e6eaa15b846a6d7f942249b783e51fad059cd13932726ae8a2bfe154b746";
+      sha256 = "af57326935c3b392d80ee6148d02caf3c371adb0e1feb509c992e38394a0285c";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/szl/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/szl/firefox-112.0.2.tar.bz2";
       locale = "szl";
       arch = "linux-i686";
-      sha256 = "8127eeba4f40a5a1a4c7a85bdb343ac360bcdf2f14721423196f7803c8648bc5";
+      sha256 = "79a565f7d7954385f0bd2d24004a9915611c23659bf6da928817cb876b1b2130";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ta/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ta/firefox-112.0.2.tar.bz2";
       locale = "ta";
       arch = "linux-i686";
-      sha256 = "337ddde6c133d2fd2a4e5850605586ffdf78a4038aa54f291584d522efd06faf";
+      sha256 = "92c515d9e7686579833c211662022fc81b9342f3b69672454ca7f88ae40912c5";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/te/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/te/firefox-112.0.2.tar.bz2";
       locale = "te";
       arch = "linux-i686";
-      sha256 = "602edab53a94b72761f1fcf805621e2871633540e43212602ba85381ca7a0093";
+      sha256 = "3e1e2280e586ec818d21213e83ef09cff59d85802b40d297d24937312c9b0f36";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/th/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/th/firefox-112.0.2.tar.bz2";
       locale = "th";
       arch = "linux-i686";
-      sha256 = "541593a4e696e85281942f57a0276da033c47a1ab2782820f8c77c97d10ab74b";
+      sha256 = "c5f564feeca7ee1ed94749cbc5864bc1ed2905a995d11f3551c7ec8d2be82d16";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/tl/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/tl/firefox-112.0.2.tar.bz2";
       locale = "tl";
       arch = "linux-i686";
-      sha256 = "6d5a977aa0e651bb8a3c1868b4639472c203e791d0cba0ce34ac556ea18a0e27";
+      sha256 = "32ccb86053d91355cb937af203297051cf32ef09085199924ac62374f3b5a43c";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/tr/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/tr/firefox-112.0.2.tar.bz2";
       locale = "tr";
       arch = "linux-i686";
-      sha256 = "2c94db9856cf6dfaa810fe6397185959a8d78222d3cc8e8968906cbe864b3ae4";
+      sha256 = "0b97e08b5852bf2ed2ed19098e850fc7670772a797c21bec561ff2bed55b3679";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/trs/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/trs/firefox-112.0.2.tar.bz2";
       locale = "trs";
       arch = "linux-i686";
-      sha256 = "21742ee25642a258df95f7aa2dc92f422546408e8084071b42792d90b0cb6713";
+      sha256 = "01a7242176bfd92ca3aad41305f5eac96d191c6cc8790981e4dbf4f0ad0792ce";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/uk/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/uk/firefox-112.0.2.tar.bz2";
       locale = "uk";
       arch = "linux-i686";
-      sha256 = "6f93c32705ce3b72db574c36c318fcf69c91423eaf41b70d144b91f6a71b91d1";
+      sha256 = "4b4a9642cf069bca7c5f01d76c2c8503530f37810cc09fe72ad73f213c96e78b";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/ur/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/ur/firefox-112.0.2.tar.bz2";
       locale = "ur";
       arch = "linux-i686";
-      sha256 = "8ccea04fb8a753fcf0b7c4a1a2c941e630438ed74b077714355d816c09e5c537";
+      sha256 = "47a4e99ec6dd1d262b21e432485c2bef3ef112971fdecbb01cab5715a868bccb";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/uz/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/uz/firefox-112.0.2.tar.bz2";
       locale = "uz";
       arch = "linux-i686";
-      sha256 = "707fb054e342b449c79a86788096d25ca61f965ce31f862d8779135d5eed888e";
+      sha256 = "4ea75c2774cb552b962df7aa851bf7ae102dfb1de72637143784ba52e21e8d08";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/vi/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/vi/firefox-112.0.2.tar.bz2";
       locale = "vi";
       arch = "linux-i686";
-      sha256 = "4019556dd8c934548c0ea646d5c6d3dc557c9bbe4382a30375fd03f564eb034c";
+      sha256 = "6fba17093fa1146955e614e49faa9aba235a1b9cc071e2622e6fd2f089049fd6";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/xh/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/xh/firefox-112.0.2.tar.bz2";
       locale = "xh";
       arch = "linux-i686";
-      sha256 = "712d9a1f97b649aa3776a7d80fc38b71c204689afff6e0f49f13a4fcda786092";
+      sha256 = "bf02cdb2d591dec4fb86b548fc17d6e7d1a7e147b4a8aec0eb5282227f82b575";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/zh-CN/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/zh-CN/firefox-112.0.2.tar.bz2";
       locale = "zh-CN";
       arch = "linux-i686";
-      sha256 = "59a5c6cbeaae82e0debe411685b1f5b44bd59acf965c93af52c21a715600522b";
+      sha256 = "2dd64475a0ea10963d04be835e1ce45a7f89a3dbd9f838b7913dd64a93197629";
     }
-    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.1/linux-i686/zh-TW/firefox-112.0.1.tar.bz2";
+    { url = "https://archive.mozilla.org/pub/firefox/releases/112.0.2/linux-i686/zh-TW/firefox-112.0.2.tar.bz2";
       locale = "zh-TW";
       arch = "linux-i686";
-      sha256 = "85fe472a78190083dae4e3f275636ef1b8f5518f6d3fda04fe352c0cb702c490";
+      sha256 = "a72f3dd7664de9f976e5f3c7fc8ab5d1ae4a3a9fa1e2d548d2059e76d3a8d53d";
     }
     ];
 }
diff --git a/pkgs/applications/networking/browsers/firefox/packages.nix b/pkgs/applications/networking/browsers/firefox/packages.nix
index 82177b4de0a89..d18532fd512a4 100644
--- a/pkgs/applications/networking/browsers/firefox/packages.nix
+++ b/pkgs/applications/networking/browsers/firefox/packages.nix
@@ -3,10 +3,10 @@
 rec {
   firefox = buildMozillaMach rec {
     pname = "firefox";
-    version = "112.0.1";
+    version = "112.0.2";
     src = fetchurl {
       url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
-      sha512 = "23a5cd9c1f165275d8ca7465bebce86018441c72292421f4ed56d7ad8ada9402dc8d22a08467d9d0ef3ef8c62338006dfa3bcbddf12cb8a59eafa0bd7d0cda50";
+      sha512 = "2cd7adeb6c9a39ad4c5366982e0e58382d7f205e6f2cee02b8ec2867034d1c0c884eeeb870a35db35cba60fa9c84aea73f8c77cfd9f36b5146dde06464aaabd1";
     };
 
     meta = {
diff --git a/pkgs/applications/networking/cluster/kubeshark/default.nix b/pkgs/applications/networking/cluster/kubeshark/default.nix
index 8f1b95332140e..22a4bde4c34d3 100644
--- a/pkgs/applications/networking/cluster/kubeshark/default.nix
+++ b/pkgs/applications/networking/cluster/kubeshark/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "kubeshark";
-  version = "39.5";
+  version = "40.0";
 
   src = fetchFromGitHub {
     owner = "kubeshark";
     repo = "kubeshark";
     rev = version;
-    sha256 = "sha256-1SmIL4kA65VlsHw7YUTxklUtXTwMkb12SCpm3Ja24KA=";
+    sha256 = "sha256-Tmk9xbAqEsJ8nffRX6qw3RKKoBbSO2gmVT5Ff4Cn9DA=";
   };
 
-  vendorHash = "sha256-cMX9OYErnnnkvmXgau5xLBSv+wo0VTqgo/rYCBmXYZ4=";
+  vendorHash = "sha256-ckIjmrXkn1AVBQRwM6+wdRwwYHytxKm3rKEe+csORdU=";
 
   ldflags = let t = "github.com/kubeshark/kubeshark"; in [
    "-s" "-w"
diff --git a/pkgs/applications/networking/cluster/terraform-providers/providers.json b/pkgs/applications/networking/cluster/terraform-providers/providers.json
index dfbeb9d95d21e..d0d25383099fe 100644
--- a/pkgs/applications/networking/cluster/terraform-providers/providers.json
+++ b/pkgs/applications/networking/cluster/terraform-providers/providers.json
@@ -318,13 +318,13 @@
     "vendorHash": null
   },
   "dns": {
-    "hash": "sha256-Bzj1rLTzWJuqKEq5mz0UAbYMWMp4JoRhedfC2lORocE=",
+    "hash": "sha256-feMN0Fpq8ct3l0u1Y8Zjgee4iC+e90CwAZmk5VQj2So=",
     "homepage": "https://registry.terraform.io/providers/hashicorp/dns",
     "owner": "hashicorp",
     "repo": "terraform-provider-dns",
-    "rev": "v3.3.1",
+    "rev": "v3.3.2",
     "spdx": "MPL-2.0",
-    "vendorHash": "sha256-wx8BXlobu86Nk9D8o5loKhbO14ANI+shFQ2i7jswKgE="
+    "vendorHash": "sha256-SvyeMKuAJ4vu++7Fx0hutx3vQvgf1sh1PFSLPRqJPjw="
   },
   "dnsimple": {
     "hash": "sha256-I5TUhq8OZqcLQs/jr8LB22Uc9s5M/WH9LRzV8EsgRnc=",
@@ -363,11 +363,11 @@
     "vendorHash": "sha256-rJev48aS0nd8DRWmUN4i0LgDYvfjdfoO67N6AiWeg+k="
   },
   "exoscale": {
-    "hash": "sha256-XbuVvVOv8k7T/7smr73+lvhFMxKtJkaLN3WgvTWIkrA=",
+    "hash": "sha256-u/2ePkENpx8Q7WcmtNxXR4GIsr2TnIHyOA8CnzTFTnk=",
     "homepage": "https://registry.terraform.io/providers/exoscale/exoscale",
     "owner": "exoscale",
     "repo": "terraform-provider-exoscale",
-    "rev": "v0.46.0",
+    "rev": "v0.47.0",
     "spdx": "MPL-2.0",
     "vendorHash": null
   },
@@ -437,22 +437,22 @@
     "vendorHash": "sha256-SLFpH7isx4OM2X9bzWYYD4VlejlgckBovOxthg47OOQ="
   },
   "google": {
-    "hash": "sha256-rF68NnqyEY4BWl+oLOxfTaQw5zEGs6Ue/L9DwzsJ46M=",
+    "hash": "sha256-92abTfGWNFQMf8YjOxgKEncdqEdbfAt+3BU0fQaSnGk=",
     "homepage": "https://registry.terraform.io/providers/hashicorp/google",
     "owner": "hashicorp",
     "proxyVendor": true,
     "repo": "terraform-provider-google",
-    "rev": "v4.62.1",
+    "rev": "v4.63.0",
     "spdx": "MPL-2.0",
     "vendorHash": "sha256-Xm1P6P2tMLqjV9QFX6D7koBPzg4umTH6jCQesyt0A/A="
   },
   "google-beta": {
-    "hash": "sha256-/wcNrCMaXjameyE3o09N+bPjL8r627BJy1vYy1u2iAI=",
+    "hash": "sha256-OyaMoySQ7qd8fsxMcetZCUVvxi6nWwVJusNV61DASck=",
     "homepage": "https://registry.terraform.io/providers/hashicorp/google-beta",
     "owner": "hashicorp",
     "proxyVendor": true,
     "repo": "terraform-provider-google-beta",
-    "rev": "v4.62.1",
+    "rev": "v4.63.0",
     "spdx": "MPL-2.0",
     "vendorHash": "sha256-Xm1P6P2tMLqjV9QFX6D7koBPzg4umTH6jCQesyt0A/A="
   },
@@ -1089,13 +1089,13 @@
     "vendorHash": "sha256-6UxBnQiogcizff5Rv4eadOeiG5JaXQphUWlfnqELvAI="
   },
   "talos": {
-    "hash": "sha256-/Ml+Vsh50U5CoVdnls69iTPoSPpgAtOpO2hWlcmbyKw=",
+    "hash": "sha256-bYDFtng6kASmBtQN+iewVOh6HPD57GDUuusiQSVfuBs=",
     "homepage": "https://registry.terraform.io/providers/siderolabs/talos",
     "owner": "siderolabs",
     "repo": "terraform-provider-talos",
-    "rev": "v0.1.2",
+    "rev": "v0.2.0",
     "spdx": "MPL-2.0",
-    "vendorHash": "sha256-GkmUKSnqkabwGCl22/90529BWb0oJaIJHYHlS/h3KNY="
+    "vendorHash": "sha256-GNSKSlaFBj2P+z40U+0uwPSOuQBy+9vOVFfPe8p0A24="
   },
   "tencentcloud": {
     "hash": "sha256-kIsH+kp+fnYsZatEJOH51lUdQs9cq/8FtpXHZIRzSM0=",
diff --git a/pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix b/pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix
index 0de4809ff23bf..ed3849ffac327 100644
--- a/pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix
+++ b/pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix
@@ -25,7 +25,7 @@ let
     src = fetchFromGitHub {
       owner = "deltachat";
       repo = "deltachat-core-rust";
-      rev = version;
+      rev = "v${version}";
       hash = "sha256-bvXZtgFZx94Sw9Tst620HAhi9kmG8PjtWnghdw2ZF84=";
     };
     cargoDeps = rustPlatform.importCargoLock {
diff --git a/pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix b/pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix
index 34d06f9fd1e64..d71f653892cc7 100644
--- a/pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix
+++ b/pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix
@@ -2,13 +2,13 @@
 
 (if stdenv.isDarwin then darwin.apple_sdk_11_0.clang14Stdenv else stdenv).mkDerivation rec {
   pname = "signalbackup-tools";
-  version = "20230421-1";
+  version = "20230424-1";
 
   src = fetchFromGitHub {
     owner = "bepaald";
     repo = pname;
     rev = version;
-    hash = "sha256-ZQFoajkD7vvz74TXVT7I4D0Qjknt5YxfHYpGi3i01Ns=";
+    hash = "sha256-G3cAXpHixRVp+FOwyWS+3uuKGp5+7AGLE/1TlghAlFA=";
   };
 
   postPatch = ''
diff --git a/pkgs/applications/science/physics/elmerfem/default.nix b/pkgs/applications/science/physics/elmerfem/default.nix
index 9221f4bcdbdd1..41a0e00ae7845 100644
--- a/pkgs/applications/science/physics/elmerfem/default.nix
+++ b/pkgs/applications/science/physics/elmerfem/default.nix
@@ -1,14 +1,14 @@
-{ lib, stdenv, fetchFromGitHub, cmake, git, gfortran, mpi, blas, liblapack, pkg-config, libGL, libGLU, opencascade, libsForQt5, vtk_8_withQt5}:
+{ lib, stdenv, fetchFromGitHub, cmake, git, gfortran, mpi, blas, liblapack, pkg-config, libGL, libGLU, opencascade, libsForQt5, tbb, vtkWithQt5 }:
 
 stdenv.mkDerivation rec {
   pname = "elmerfem";
-  version = "9.0";
+  version = "unstable-2023-02-03";
 
   src = fetchFromGitHub {
     owner = "elmercsc";
-    repo = "elmerfem";
-    rev = "release-${version}";
-    sha256 = "VK7jvu4s5d7k0c39XqY9dEzg/vXtX5Yr/09VcuZVQ9A=";
+    repo = pname;
+    rev = "39c8784b6e4543a6bf560b5d597e0eec1eb06343";
+    hash = "sha256-yyxgFvlS+I4PouDL6eD4ZrXuONTDejCSYKq2AwQ0Iug=";
   };
 
   hardeningDisable = [ "format" ];
@@ -29,19 +29,14 @@ stdenv.mkDerivation rec {
     libGL
     libGLU
     opencascade
-    vtk_8_withQt5
+    tbb
+    vtkWithQt5
   ];
 
   preConfigure = ''
     patchShebangs ./
   '';
 
-  patches = [
-    ./patches/0001-fix-import-of-QPainterPath.patch
-    ./patches/0002-fem-rename-loopvars-to-avoid-redefinition.patch
-    ./patches/0003-ignore-qwt_compat.patch
-  ];
-
   storepath = placeholder "out";
 
   cmakeFlags = [
@@ -58,7 +53,7 @@ stdenv.mkDerivation rec {
   ];
 
   meta = with lib; {
-    homepage = "https://elmerfem.org/";
+    homepage = "https://elmerfem.org";
     description = "A finite element software for multiphysical problems";
     platforms = platforms.unix;
     maintainers = with maintainers; [ wulfsta broke ];
diff --git a/pkgs/applications/science/physics/elmerfem/patches/0001-fix-import-of-QPainterPath.patch b/pkgs/applications/science/physics/elmerfem/patches/0001-fix-import-of-QPainterPath.patch
deleted file mode 100644
index a9e1ba442b452..0000000000000
--- a/pkgs/applications/science/physics/elmerfem/patches/0001-fix-import-of-QPainterPath.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 87885de957aa3f891fe963503c94685675c24f49 Mon Sep 17 00:00:00 2001
-From: grindhold <grindhold@gmx.net>
-Date: Wed, 27 Apr 2022 19:16:42 +0200
-Subject: [PATCH] fix import of QPainterPath
-
----
- ElmerGUI/Application/twod/renderarea.cpp | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/ElmerGUI/Application/twod/renderarea.cpp b/ElmerGUI/Application/twod/renderarea.cpp
-index 4c2515c5..65128ea9 100644
---- a/ElmerGUI/Application/twod/renderarea.cpp
-+++ b/ElmerGUI/Application/twod/renderarea.cpp
-@@ -38,6 +38,7 @@
-  *                                                                           *
-  *****************************************************************************/
- #include <QPainter>
-+#include <QPainterPath>
- #include <QMouseEvent>
- #include <QFile>
- #include <QTextStream>
--- 
-2.33.3
-
diff --git a/pkgs/applications/science/physics/elmerfem/patches/0002-fem-rename-loopvars-to-avoid-redefinition.patch b/pkgs/applications/science/physics/elmerfem/patches/0002-fem-rename-loopvars-to-avoid-redefinition.patch
deleted file mode 100644
index 6c2782b9e0bd8..0000000000000
--- a/pkgs/applications/science/physics/elmerfem/patches/0002-fem-rename-loopvars-to-avoid-redefinition.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 06634e5fd46a27dca11b87d4a38e9ead561de3d5 Mon Sep 17 00:00:00 2001
-From: grindhold <grindhold@gmx.net>
-Date: Thu, 28 Apr 2022 15:47:07 +0200
-Subject: [PATCH] fem: rename loopvars to avoid redefinition
-
----
- fem/src/modules/DCRComplexSolve.F90 | 28 ++++++++++++++--------------
- 1 file changed, 14 insertions(+), 14 deletions(-)
-
-diff --git a/fem/src/modules/DCRComplexSolve.F90 b/fem/src/modules/DCRComplexSolve.F90
-index 469214ee..268591fd 100644
---- a/fem/src/modules/DCRComplexSolve.F90
-+++ b/fem/src/modules/DCRComplexSolve.F90
-@@ -502,14 +502,14 @@ CONTAINS
- 
-       IF ( SIZE(Hwrk,1) == 1 ) THEN
- 
--         DO i=1,MIN(3,SIZE(Hwrk,2))
--            Tensor( i,1:n ) = Hwrk( 1,1,1:n )
-+         DO k=1,MIN(3,SIZE(Hwrk,2))
-+            Tensor( k,1:n ) = Hwrk( 1,1,1:n )
-          END DO
- 
-       ELSE
- 
--        DO i=1,MIN(3,SIZE(Hwrk,1))
--           Tensor( i,1:n ) = Hwrk( i,1,1:n )
-+        DO k=1,MIN(3,SIZE(Hwrk,1))
-+           Tensor( k,1:n ) = Hwrk( k,1,1:n )
-         END DO
- 
-       END IF
-@@ -1391,21 +1391,21 @@ contains
- 
-       IF ( SIZE(Hwrk,1) == 1 ) THEN
- 
--         DO i=1,MIN(3,SIZE(Hwrk,2))
--            Tensor( i,i,1:n ) = Hwrk( 1,1,1:n )
-+         DO k=1,MIN(3,SIZE(Hwrk,2))
-+            Tensor( k,k,1:n ) = Hwrk( 1,1,1:n )
-          END DO
- 
-       ELSE IF ( SIZE(Hwrk,2) == 1 ) THEN
- 
--         DO i=1,MIN(3,SIZE(Hwrk,1))
--            Tensor(i,i,1:n) = Hwrk(i,1,1:n)
-+         DO k=1,MIN(3,SIZE(Hwrk,1))
-+            Tensor(k,k,1:n) = Hwrk(k,1,1:n)
-          END DO
- 
-       ELSE
- 
--        DO i=1,MIN(3,SIZE(Hwrk,1))
-+        DO k=1,MIN(3,SIZE(Hwrk,1))
-            DO j=1,MIN(3,SIZE(Hwrk,2))
--              Tensor( i,j,1:n ) = Hwrk(i,j,1:n)
-+              Tensor( k,j,1:n ) = Hwrk(k,j,1:n)
-            END DO
-         END DO
- 
-@@ -1443,14 +1443,14 @@ contains
- 
-       IF ( SIZE(Hwrk,1) == 1 ) THEN
- 
--         DO i=1,MIN(3,SIZE(Hwrk,2))
--            Tensor( i,1:n ) = Hwrk( 1,1,1:n )
-+         DO k=1,MIN(3,SIZE(Hwrk,2))
-+            Tensor( k,1:n ) = Hwrk( 1,1,1:n )
-          END DO
- 
-       ELSE
- 
--        DO i=1,MIN(3,SIZE(Hwrk,1))
--           Tensor( i,1:n ) = Hwrk( i,1,1:n )
-+        DO k=1,MIN(3,SIZE(Hwrk,1))
-+           Tensor( k,1:n ) = Hwrk( k,1,1:n )
-         END DO
- 
-       END IF
--- 
-2.33.3
-
diff --git a/pkgs/applications/science/physics/elmerfem/patches/0003-ignore-qwt_compat.patch b/pkgs/applications/science/physics/elmerfem/patches/0003-ignore-qwt_compat.patch
deleted file mode 100644
index 26954008d5d40..0000000000000
--- a/pkgs/applications/science/physics/elmerfem/patches/0003-ignore-qwt_compat.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 26601fec36a4978e805aad40e6d0cbf268c653d2 Mon Sep 17 00:00:00 2001
-From: grindhold <grindhold@gmx.net>
-Date: Thu, 28 Apr 2022 17:13:06 +0200
-Subject: [PATCH] ignore qwt_compat
-
----
- ElmerGUI/Application/src/convergenceview.h | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/ElmerGUI/Application/src/convergenceview.h b/ElmerGUI/Application/src/convergenceview.h
-index 377b644b..64250149 100755
---- a/ElmerGUI/Application/src/convergenceview.h
-+++ b/ElmerGUI/Application/src/convergenceview.h
-@@ -52,7 +52,7 @@
- #include <qwt_plot_grid.h>

- #include <qwt_legend.h>

- /*#include <qwt_data.h> <-- deprecated in Qwt6, using qwt_compat.h instead*/

--#include <qwt_compat.h>

-+/*#include <qwt_compat.h>*/

- #include <qwt_text.h>

- #include <qwt_scale_engine.h>

- 

-@@ -76,8 +76,8 @@ public:
-   

- private:

-   int d_count;

--  QwtArray<double> d_x;

--  QwtArray<double> d_y;

-+  QVector<double> d_x;

-+  QVector<double> d_y;

- };

- 

- class Curve

--- 
-2.33.3
-
diff --git a/pkgs/build-support/node/build-npm-package/default.nix b/pkgs/build-support/node/build-npm-package/default.nix
index 26cc678c571e7..1c3fb6a74efca 100644
--- a/pkgs/build-support/node/build-npm-package/default.nix
+++ b/pkgs/build-support/node/build-npm-package/default.nix
@@ -12,6 +12,9 @@
   # The output hash of the dependencies for this project.
   # Can be calculated in advance with prefetch-npm-deps.
 , npmDepsHash ? ""
+  # Whether to force the usage of Git dependencies that have install scripts, but not a lockfile.
+  # Use with care.
+, forceGitDeps ? false
   # Whether to make the cache writable prior to installing dependencies.
   # Don't set this unless npm tries to write to the cache directory, as it can slow down the build.
 , makeCacheWritable ? false
@@ -32,7 +35,7 @@
 
 let
   npmDeps = fetchNpmDeps {
-    inherit src srcs sourceRoot prePatch patches postPatch;
+    inherit forceGitDeps src srcs sourceRoot prePatch patches postPatch;
     name = "${name}-npm-deps";
     hash = npmDepsHash;
   };
diff --git a/pkgs/build-support/node/fetch-npm-deps/default.nix b/pkgs/build-support/node/fetch-npm-deps/default.nix
index d87071d8559f0..41cad9d12ee66 100644
--- a/pkgs/build-support/node/fetch-npm-deps/default.nix
+++ b/pkgs/build-support/node/fetch-npm-deps/default.nix
@@ -36,8 +36,8 @@
           '';
         };
 
-        makeTest = { name, src, hash }: testers.invalidateFetcherByDrvHash fetchNpmDeps {
-          inherit name hash;
+        makeTest = { name, src, hash, forceGitDeps ? false }: testers.invalidateFetcherByDrvHash fetchNpmDeps {
+          inherit name hash forceGitDeps;
 
           src = makeTestSrc { inherit name src; };
         };
@@ -108,6 +108,8 @@
           };
 
           hash = "sha256-+KA8/orSBJ4EhuSyQO8IKSxsN/FAsYU3lOzq+awuxNQ=";
+
+          forceGitDeps = true;
         };
       };
 
@@ -121,6 +123,7 @@
   fetchNpmDeps =
     { name ? "npm-deps"
     , hash ? ""
+    , forceGitDeps ? false
     , ...
     } @ args:
     let
@@ -131,6 +134,8 @@
           outputHash = "";
           outputHashAlgo = "sha256";
         };
+
+      forceGitDeps_ = lib.optionalAttrs forceGitDeps { FORCE_GIT_DEPS = true; };
     in
     stdenvNoCC.mkDerivation (args // {
       inherit name;
@@ -161,5 +166,5 @@
       dontInstall = true;
 
       outputHashMode = "recursive";
-    } // hash_);
+    } // hash_ // forceGitDeps_);
 }
diff --git a/pkgs/build-support/node/fetch-npm-deps/src/cacache.rs b/pkgs/build-support/node/fetch-npm-deps/src/cacache.rs
index 715e115e7235b..5326c3e858bba 100644
--- a/pkgs/build-support/node/fetch-npm-deps/src/cacache.rs
+++ b/pkgs/build-support/node/fetch-npm-deps/src/cacache.rs
@@ -72,7 +72,7 @@ impl Cache {
                 &mut p,
                 &hash
                     .into_iter()
-                    .map(|x| format!("{:02x}", x))
+                    .map(|n| format!("{n:02x}"))
                     .collect::<String>(),
             );
 
diff --git a/pkgs/build-support/node/fetch-npm-deps/src/main.rs b/pkgs/build-support/node/fetch-npm-deps/src/main.rs
index 3d2204071a66a..57725a922dfd8 100644
--- a/pkgs/build-support/node/fetch-npm-deps/src/main.rs
+++ b/pkgs/build-support/node/fetch-npm-deps/src/main.rs
@@ -1,250 +1,18 @@
 #![warn(clippy::pedantic)]
 
 use crate::cacache::Cache;
-use anyhow::{anyhow, Context};
+use anyhow::anyhow;
 use rayon::prelude::*;
-use serde::Deserialize;
 use serde_json::{Map, Value};
 use std::{
-    collections::{HashMap, HashSet},
-    env, fmt, fs, io,
+    env, fs,
     path::Path,
-    process::{self, Command, Stdio},
+    process::{self, Command},
 };
 use tempfile::tempdir;
-use url::Url;
 
 mod cacache;
-#[cfg(test)]
-mod tests;
-
-#[derive(Deserialize)]
-struct PackageLock {
-    #[serde(rename = "lockfileVersion")]
-    version: u8,
-    dependencies: Option<HashMap<String, OldPackage>>,
-    packages: Option<HashMap<String, Package>>,
-}
-
-#[derive(Deserialize)]
-struct OldPackage {
-    version: UrlOrString,
-    #[serde(default)]
-    bundled: bool,
-    resolved: Option<UrlOrString>,
-    integrity: Option<String>,
-    dependencies: Option<HashMap<String, OldPackage>>,
-}
-
-#[derive(Debug, Deserialize, PartialEq, Eq)]
-struct Package {
-    resolved: Option<UrlOrString>,
-    integrity: Option<String>,
-}
-
-#[derive(Debug, Deserialize, PartialEq, Eq)]
-#[serde(untagged)]
-enum UrlOrString {
-    Url(Url),
-    String(String),
-}
-
-impl fmt::Display for UrlOrString {
-    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        match self {
-            UrlOrString::Url(url) => url.fmt(f),
-            UrlOrString::String(string) => string.fmt(f),
-        }
-    }
-}
-
-#[allow(clippy::case_sensitive_file_extension_comparisons)]
-fn to_new_packages(
-    old_packages: HashMap<String, OldPackage>,
-    initial_url: &Url,
-) -> anyhow::Result<HashMap<String, Package>> {
-    let mut new = HashMap::new();
-
-    for (name, mut package) in old_packages {
-        // In some cases, a bundled dependency happens to have the same version as a non-bundled one, causing
-        // the bundled one without a URL to override the entry for the non-bundled instance, which prevents the
-        // dependency from being downloaded.
-        if package.bundled {
-            continue;
-        }
-
-        if let UrlOrString::Url(v) = &package.version {
-            for (scheme, host) in [
-                ("github", "github.com"),
-                ("bitbucket", "bitbucket.org"),
-                ("gitlab", "gitlab.com"),
-            ] {
-                if v.scheme() == scheme {
-                    package.version = {
-                        let mut new_url = initial_url.clone();
-
-                        new_url.set_host(Some(host))?;
-
-                        if v.path().ends_with(".git") {
-                            new_url.set_path(v.path());
-                        } else {
-                            new_url.set_path(&format!("{}.git", v.path()));
-                        }
-
-                        new_url.set_fragment(v.fragment());
-
-                        UrlOrString::Url(new_url)
-                    };
-
-                    break;
-                }
-            }
-        }
-
-        new.insert(
-            format!("{name}-{}", package.version),
-            Package {
-                resolved: if matches!(package.version, UrlOrString::Url(_)) {
-                    Some(package.version)
-                } else {
-                    package.resolved
-                },
-                integrity: package.integrity,
-            },
-        );
-
-        if let Some(dependencies) = package.dependencies {
-            new.extend(to_new_packages(dependencies, initial_url)?);
-        }
-    }
-
-    Ok(new)
-}
-
-#[allow(clippy::case_sensitive_file_extension_comparisons)]
-fn get_hosted_git_url(url: &Url) -> Option<Url> {
-    if ["git", "http", "git+ssh", "git+https", "ssh", "https"].contains(&url.scheme()) {
-        let mut s = url.path_segments()?;
-
-        match url.host_str()? {
-            "github.com" => {
-                let user = s.next()?;
-                let mut project = s.next()?;
-                let typ = s.next();
-                let mut commit = s.next();
-
-                if typ.is_none() {
-                    commit = url.fragment();
-                } else if typ.is_some() && typ != Some("tree") {
-                    return None;
-                }
-
-                if project.ends_with(".git") {
-                    project = project.strip_suffix(".git")?;
-                }
-
-                let commit = commit.unwrap();
-
-                Some(
-                    Url::parse(&format!(
-                        "https://codeload.github.com/{user}/{project}/tar.gz/{commit}"
-                    ))
-                    .ok()?,
-                )
-            }
-            "bitbucket.org" => {
-                let user = s.next()?;
-                let mut project = s.next()?;
-                let aux = s.next();
-
-                if aux == Some("get") {
-                    return None;
-                }
-
-                if project.ends_with(".git") {
-                    project = project.strip_suffix(".git")?;
-                }
-
-                let commit = url.fragment()?;
-
-                Some(
-                    Url::parse(&format!(
-                        "https://bitbucket.org/{user}/{project}/get/{commit}.tar.gz"
-                    ))
-                    .ok()?,
-                )
-            }
-            "gitlab.com" => {
-                let path = &url.path()[1..];
-
-                if path.contains("/~/") || path.contains("/archive.tar.gz") {
-                    return None;
-                }
-
-                let user = s.next()?;
-                let mut project = s.next()?;
-
-                if project.ends_with(".git") {
-                    project = project.strip_suffix(".git")?;
-                }
-
-                let commit = url.fragment()?;
-
-                Some(
-                    Url::parse(&format!(
-                    "https://gitlab.com/{user}/{project}/repository/archive.tar.gz?ref={commit}"
-                ))
-                    .ok()?,
-                )
-            }
-            "git.sr.ht" => {
-                let user = s.next()?;
-                let mut project = s.next()?;
-                let aux = s.next();
-
-                if aux == Some("archive") {
-                    return None;
-                }
-
-                if project.ends_with(".git") {
-                    project = project.strip_suffix(".git")?;
-                }
-
-                let commit = url.fragment()?;
-
-                Some(
-                    Url::parse(&format!(
-                        "https://git.sr.ht/{user}/{project}/archive/{commit}.tar.gz"
-                    ))
-                    .ok()?,
-                )
-            }
-            _ => None,
-        }
-    } else {
-        None
-    }
-}
-
-fn get_ideal_hash(integrity: &str) -> anyhow::Result<&str> {
-    let split: Vec<_> = integrity.split_ascii_whitespace().collect();
-
-    if split.len() == 1 {
-        Ok(split[0])
-    } else {
-        for hash in ["sha512-", "sha1-"] {
-            if let Some(h) = split.iter().find(|s| s.starts_with(hash)) {
-                return Ok(h);
-            }
-        }
-
-        Err(anyhow!("not sure which hash to select out of {split:?}"))
-    }
-}
-
-fn get_initial_url() -> anyhow::Result<Url> {
-    Url::parse("git+ssh://git@a.b").context("initial url should be valid")
-}
+mod parse;
 
 /// `fixup_lockfile` removes the `integrity` field from Git dependencies.
 ///
@@ -294,7 +62,6 @@ fn fixup_lockfile(mut lock: Map<String, Value>) -> anyhow::Result<Option<Map<Str
     }
 }
 
-#[allow(clippy::too_many_lines)]
 fn main() -> anyhow::Result<()> {
     let args = env::args().collect::<Vec<_>>();
 
@@ -319,7 +86,6 @@ fn main() -> anyhow::Result<()> {
     }
 
     let lock_content = fs::read_to_string(&args[1])?;
-    let lock: PackageLock = serde_json::from_str(&lock_content)?;
 
     let out_tempdir;
 
@@ -331,137 +97,92 @@ fn main() -> anyhow::Result<()> {
         (out_tempdir.path(), true)
     };
 
-    let agent = ureq::agent();
-
-    eprintln!("lockfile version: {}", lock.version);
-
-    let packages = match lock.version {
-        1 => {
-            let initial_url = get_initial_url()?;
-
-            lock.dependencies
-                .map(|p| to_new_packages(p, &initial_url))
-                .transpose()?
-        }
-        2 | 3 => lock.packages,
-        _ => panic!(
-            "We don't support lockfile version {}, please file an issue.",
-            lock.version
-        ),
-    };
-
-    if packages.is_none() {
-        return Ok(());
-    }
-
-    let packages = {
-        let mut seen = HashSet::new();
-        let mut new_packages = HashMap::new();
-
-        for (dep, package) in packages.unwrap().drain() {
-            if let (false, Some(UrlOrString::Url(resolved))) = (dep.is_empty(), &package.resolved) {
-                if !seen.contains(resolved) {
-                    seen.insert(resolved.clone());
-                    new_packages.insert(dep, package);
-                }
-            }
-        }
-
-        new_packages
-    };
+    let packages = parse::lockfile(&lock_content, env::var("FORCE_GIT_DEPS").is_ok())?;
 
     let cache = Cache::new(out.join("_cacache"));
 
-    packages
-        .into_par_iter()
-        .try_for_each(|(dep, mut package)| {
-            eprintln!("{dep}");
+    packages.into_par_iter().try_for_each(|package| {
+        eprintln!("{}", package.name);
 
-            let mut resolved = match package.resolved {
-                Some(UrlOrString::Url(url)) => url,
-                _ => unreachable!(),
-            };
+        let tarball = package.tarball()?;
+        let integrity = package.integrity();
 
-            let mut hosted = false;
+        cache
+            .put(
+                format!("make-fetch-happen:request-cache:{}", package.url),
+                package.url,
+                &tarball,
+                integrity,
+            )
+            .map_err(|e| anyhow!("couldn't insert cache entry for {}: {e:?}", package.name))?;
 
-            if let Some(hosted_git_url) = get_hosted_git_url(&resolved) {
-                resolved = hosted_git_url;
-                package.integrity = None;
-                hosted = true;
-            }
+        Ok::<_, anyhow::Error>(())
+    })?;
 
-            let mut data = Vec::new();
-
-            let mut body = agent.get(resolved.as_str()).call()?.into_reader();
-
-            if hosted {
-                let workdir = tempdir()?;
+    fs::write(out.join("package-lock.json"), lock_content)?;
 
-                let tar_path = workdir.path().join("package");
+    if print_hash {
+        Command::new("nix")
+            .args(["--experimental-features", "nix-command", "hash", "path"])
+            .arg(out.as_os_str())
+            .status()?;
+    }
 
-                fs::create_dir(&tar_path)?;
+    Ok(())
+}
 
-                let mut cmd = Command::new("tar")
-                    .args(["--extract", "--gzip", "--strip-components=1", "-C"])
-                    .arg(&tar_path)
-                    .stdin(Stdio::piped())
-                    .spawn()?;
+#[cfg(test)]
+mod tests {
+    use super::fixup_lockfile;
+    use serde_json::json;
+
+    #[test]
+    fn lockfile_fixup() -> anyhow::Result<()> {
+        let input = json!({
+            "lockfileVersion": 2,
+            "name": "foo",
+            "packages": {
+                "": {
 
-                io::copy(&mut body, &mut cmd.stdin.take().unwrap())?;
+                },
+                "foo": {
+                    "resolved": "https://github.com/NixOS/nixpkgs",
+                    "integrity": "aaa"
+                },
+                "bar": {
+                    "resolved": "git+ssh://git@github.com/NixOS/nixpkgs.git",
+                    "integrity": "bbb"
+                }
+            }
+        });
 
-                let exit = cmd.wait()?;
+        let expected = json!({
+            "lockfileVersion": 2,
+            "name": "foo",
+            "packages": {
+                "": {
 
-                if !exit.success() {
-                    return Err(anyhow!(
-                        "failed to extract tarball for {dep}: tar exited with status code {}",
-                        exit.code().unwrap()
-                    ));
+                },
+                "foo": {
+                    "resolved": "https://github.com/NixOS/nixpkgs",
+                    "integrity": "aaa"
+                },
+                "bar": {
+                    "resolved": "git+ssh://git@github.com/NixOS/nixpkgs.git",
                 }
-
-                data = Command::new("tar")
-                    .args([
-                        "--sort=name",
-                        "--mtime=@0",
-                        "--owner=0",
-                        "--group=0",
-                        "--numeric-owner",
-                        "--format=gnu",
-                        "-I",
-                        "gzip -n -9",
-                        "--create",
-                        "-C",
-                    ])
-                    .arg(workdir.path())
-                    .arg("package")
-                    .output()?
-                    .stdout;
-            } else {
-                body.read_to_end(&mut data)?;
             }
+        });
 
-            cache
-                .put(
-                    format!("make-fetch-happen:request-cache:{resolved}"),
-                    resolved,
-                    &data,
-                    package
-                        .integrity
-                        .map(|i| Ok::<String, anyhow::Error>(get_ideal_hash(&i)?.to_string()))
-                        .transpose()?,
-                )
-                .map_err(|e| anyhow!("couldn't insert cache entry for {dep}: {e:?}"))?;
-
-            Ok::<_, anyhow::Error>(())
-        })?;
+        assert_eq!(
+            fixup_lockfile(input.as_object().unwrap().clone())?,
+            Some(expected.as_object().unwrap().clone())
+        );
 
-    fs::write(out.join("package-lock.json"), lock_content)?;
+        assert_eq!(
+            fixup_lockfile(json!({"lockfileVersion": 1}).as_object().unwrap().clone())?,
+            None
+        );
 
-    if print_hash {
-        Command::new("nix")
-            .args(["--experimental-features", "nix-command", "hash", "path"])
-            .arg(out.as_os_str())
-            .status()?;
+        Ok(())
     }
-
-    Ok(())
 }
diff --git a/pkgs/build-support/node/fetch-npm-deps/src/parse/lock.rs b/pkgs/build-support/node/fetch-npm-deps/src/parse/lock.rs
new file mode 100644
index 0000000000000..99bd3020b5237
--- /dev/null
+++ b/pkgs/build-support/node/fetch-npm-deps/src/parse/lock.rs
@@ -0,0 +1,191 @@
+use anyhow::{bail, Context};
+use rayon::slice::ParallelSliceMut;
+use serde::Deserialize;
+use std::{collections::HashMap, fmt};
+use url::Url;
+
+pub(super) fn packages(content: &str) -> anyhow::Result<Vec<Package>> {
+    let lockfile: Lockfile = serde_json::from_str(content)?;
+
+    let mut packages = match lockfile.version {
+        1 => {
+            let initial_url = get_initial_url()?;
+
+            lockfile
+                .dependencies
+                .map(|p| to_new_packages(p, &initial_url))
+                .transpose()?
+        }
+        2 | 3 => lockfile.packages.map(|pkgs| {
+            pkgs.into_iter()
+                .filter(|(n, p)| !n.is_empty() && matches!(p.resolved, Some(UrlOrString::Url(_))))
+                .map(|(n, p)| Package { name: Some(n), ..p })
+                .collect()
+        }),
+        _ => bail!(
+            "We don't support lockfile version {}, please file an issue.",
+            lockfile.version
+        ),
+    }
+    .expect("lockfile should have packages");
+
+    packages.par_sort_by(|x, y| {
+        x.resolved
+            .partial_cmp(&y.resolved)
+            .expect("resolved should be comparable")
+    });
+
+    packages.dedup_by(|x, y| x.resolved == y.resolved);
+
+    Ok(packages)
+}
+
+#[derive(Deserialize)]
+struct Lockfile {
+    #[serde(rename = "lockfileVersion")]
+    version: u8,
+    dependencies: Option<HashMap<String, OldPackage>>,
+    packages: Option<HashMap<String, Package>>,
+}
+
+#[derive(Deserialize)]
+struct OldPackage {
+    version: UrlOrString,
+    #[serde(default)]
+    bundled: bool,
+    resolved: Option<UrlOrString>,
+    integrity: Option<String>,
+    dependencies: Option<HashMap<String, OldPackage>>,
+}
+
+#[derive(Debug, Deserialize, PartialEq, Eq)]
+pub(super) struct Package {
+    #[serde(default)]
+    pub(super) name: Option<String>,
+    pub(super) resolved: Option<UrlOrString>,
+    pub(super) integrity: Option<String>,
+}
+
+#[derive(Debug, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
+#[serde(untagged)]
+pub(super) enum UrlOrString {
+    Url(Url),
+    String(String),
+}
+
+impl fmt::Display for UrlOrString {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        match self {
+            UrlOrString::Url(url) => url.fmt(f),
+            UrlOrString::String(string) => string.fmt(f),
+        }
+    }
+}
+
+#[allow(clippy::case_sensitive_file_extension_comparisons)]
+fn to_new_packages(
+    old_packages: HashMap<String, OldPackage>,
+    initial_url: &Url,
+) -> anyhow::Result<Vec<Package>> {
+    let mut new = Vec::new();
+
+    for (name, mut package) in old_packages {
+        // In some cases, a bundled dependency happens to have the same version as a non-bundled one, causing
+        // the bundled one without a URL to override the entry for the non-bundled instance, which prevents the
+        // dependency from being downloaded.
+        if package.bundled {
+            continue;
+        }
+
+        if let UrlOrString::Url(v) = &package.version {
+            for (scheme, host) in [
+                ("github", "github.com"),
+                ("bitbucket", "bitbucket.org"),
+                ("gitlab", "gitlab.com"),
+            ] {
+                if v.scheme() == scheme {
+                    package.version = {
+                        let mut new_url = initial_url.clone();
+
+                        new_url.set_host(Some(host))?;
+
+                        if v.path().ends_with(".git") {
+                            new_url.set_path(v.path());
+                        } else {
+                            new_url.set_path(&format!("{}.git", v.path()));
+                        }
+
+                        new_url.set_fragment(v.fragment());
+
+                        UrlOrString::Url(new_url)
+                    };
+
+                    break;
+                }
+            }
+        }
+
+        new.push(Package {
+            name: Some(name),
+            resolved: if matches!(package.version, UrlOrString::Url(_)) {
+                Some(package.version)
+            } else {
+                package.resolved
+            },
+            integrity: package.integrity,
+        });
+
+        if let Some(dependencies) = package.dependencies {
+            new.append(&mut to_new_packages(dependencies, initial_url)?);
+        }
+    }
+
+    Ok(new)
+}
+
+fn get_initial_url() -> anyhow::Result<Url> {
+    Url::parse("git+ssh://git@a.b").context("initial url should be valid")
+}
+
+#[cfg(test)]
+mod tests {
+    use super::{get_initial_url, to_new_packages, OldPackage, Package, UrlOrString};
+    use std::collections::HashMap;
+    use url::Url;
+
+    #[test]
+    fn git_shorthand_v1() -> anyhow::Result<()> {
+        let old = {
+            let mut o = HashMap::new();
+            o.insert(
+                String::from("sqlite3"),
+                OldPackage {
+                    version: UrlOrString::Url(
+                        Url::parse(
+                            "github:mapbox/node-sqlite3#593c9d498be2510d286349134537e3bf89401c4a",
+                        )
+                        .unwrap(),
+                    ),
+                    bundled: false,
+                    resolved: None,
+                    integrity: None,
+                    dependencies: None,
+                },
+            );
+            o
+        };
+
+        let initial_url = get_initial_url()?;
+
+        let new = to_new_packages(old, &initial_url)?;
+
+        assert_eq!(new.len(), 1, "new packages map should contain 1 value");
+        assert_eq!(new[0], Package {
+            name: Some(String::from("sqlite3")),
+            resolved: Some(UrlOrString::Url(Url::parse("git+ssh://git@github.com/mapbox/node-sqlite3.git#593c9d498be2510d286349134537e3bf89401c4a").unwrap())),
+            integrity: None
+        });
+
+        Ok(())
+    }
+}
diff --git a/pkgs/build-support/node/fetch-npm-deps/src/parse/mod.rs b/pkgs/build-support/node/fetch-npm-deps/src/parse/mod.rs
new file mode 100644
index 0000000000000..387b3add7ec93
--- /dev/null
+++ b/pkgs/build-support/node/fetch-npm-deps/src/parse/mod.rs
@@ -0,0 +1,370 @@
+use anyhow::{anyhow, bail, Context};
+use lock::UrlOrString;
+use rayon::prelude::*;
+use serde_json::{Map, Value};
+use std::{
+    fs, io,
+    process::{Command, Stdio},
+};
+use tempfile::{tempdir, TempDir};
+use url::Url;
+
+mod lock;
+
+pub fn lockfile(content: &str, force_git_deps: bool) -> anyhow::Result<Vec<Package>> {
+    let mut packages = lock::packages(content)
+        .context("failed to extract packages from lockfile")?
+        .into_par_iter()
+        .map(|p| {
+            let n = p.name.clone().unwrap();
+
+            Package::from_lock(p).with_context(|| format!("failed to parse data for {n}"))
+        })
+        .collect::<anyhow::Result<Vec<_>>>()?;
+
+    let mut new = Vec::new();
+
+    for pkg in packages
+        .iter()
+        .filter(|p| matches!(p.specifics, Specifics::Git { .. }))
+    {
+        let dir = match &pkg.specifics {
+            Specifics::Git { workdir } => workdir,
+            Specifics::Registry { .. } => unimplemented!(),
+        };
+
+        let path = dir.path().join("package");
+
+        let lockfile_contents = fs::read_to_string(path.join("package-lock.json"));
+
+        let package_json_path = path.join("package.json");
+        let mut package_json: Map<String, Value> =
+            serde_json::from_str(&fs::read_to_string(package_json_path)?)?;
+
+        if let Some(scripts) = package_json
+            .get_mut("scripts")
+            .and_then(Value::as_object_mut)
+        {
+            // https://github.com/npm/pacote/blob/272edc1bac06991fc5f95d06342334bbacfbaa4b/lib/git.js#L166-L172
+            for typ in [
+                "postinstall",
+                "build",
+                "preinstall",
+                "install",
+                "prepack",
+                "prepare",
+            ] {
+                if scripts.contains_key(typ) && lockfile_contents.is_err() && !force_git_deps {
+                    bail!("Git dependency {} contains install scripts, but has no lockfile, which is something that will probably break. Open an issue if you can't feasibly patch this dependency out, and we'll come up with a workaround.\nIf you'd like to attempt to try to use this dependency anyways, set `forceGitDeps = true`.", pkg.name);
+                }
+            }
+        }
+
+        if let Ok(lockfile_contents) = lockfile_contents {
+            new.append(&mut lockfile(&lockfile_contents, force_git_deps)?);
+        }
+    }
+
+    packages.append(&mut new);
+
+    packages.par_sort_by(|x, y| {
+        x.url
+            .partial_cmp(&y.url)
+            .expect("resolved should be comparable")
+    });
+
+    packages.dedup_by(|x, y| x.url == y.url);
+
+    Ok(packages)
+}
+
+#[derive(Debug)]
+pub struct Package {
+    pub name: String,
+    pub url: Url,
+    specifics: Specifics,
+}
+
+#[derive(Debug)]
+enum Specifics {
+    Registry { integrity: String },
+    Git { workdir: TempDir },
+}
+
+impl Package {
+    fn from_lock(pkg: lock::Package) -> anyhow::Result<Package> {
+        let mut resolved = match pkg
+            .resolved
+            .expect("at this point, packages should have URLs")
+        {
+            UrlOrString::Url(u) => u,
+            UrlOrString::String(_) => panic!("at this point, all packages should have URLs"),
+        };
+
+        let specifics = match get_hosted_git_url(&resolved)? {
+            Some(hosted) => {
+                let mut body = ureq::get(hosted.as_str()).call()?.into_reader();
+
+                let workdir = tempdir()?;
+
+                let tar_path = workdir.path().join("package");
+
+                fs::create_dir(&tar_path)?;
+
+                let mut cmd = Command::new("tar")
+                    .args(["--extract", "--gzip", "--strip-components=1", "-C"])
+                    .arg(&tar_path)
+                    .stdin(Stdio::piped())
+                    .spawn()?;
+
+                io::copy(&mut body, &mut cmd.stdin.take().unwrap())?;
+
+                let exit = cmd.wait()?;
+
+                if !exit.success() {
+                    bail!(
+                        "failed to extract tarball for {}: tar exited with status code {}",
+                        pkg.name.unwrap(),
+                        exit.code().unwrap()
+                    );
+                }
+
+                resolved = hosted;
+
+                Specifics::Git { workdir }
+            }
+            None => Specifics::Registry {
+                integrity: get_ideal_hash(
+                    &pkg.integrity
+                        .expect("non-git dependencies should have assosciated integrity"),
+                )?
+                .to_string(),
+            },
+        };
+
+        Ok(Package {
+            name: pkg.name.unwrap(),
+            url: resolved,
+            specifics,
+        })
+    }
+
+    pub fn tarball(&self) -> anyhow::Result<Vec<u8>> {
+        match &self.specifics {
+            Specifics::Registry { .. } => {
+                let mut body = Vec::new();
+
+                ureq::get(self.url.as_str())
+                    .call()?
+                    .into_reader()
+                    .read_to_end(&mut body)?;
+
+                Ok(body)
+            }
+            Specifics::Git { workdir } => Ok(Command::new("tar")
+                .args([
+                    "--sort=name",
+                    "--mtime=@0",
+                    "--owner=0",
+                    "--group=0",
+                    "--numeric-owner",
+                    "--format=gnu",
+                    "-I",
+                    "gzip -n -9",
+                    "--create",
+                    "-C",
+                ])
+                .arg(workdir.path())
+                .arg("package")
+                .output()?
+                .stdout),
+        }
+    }
+
+    pub fn integrity(&self) -> Option<String> {
+        match &self.specifics {
+            Specifics::Registry { integrity } => Some(integrity.clone()),
+            Specifics::Git { .. } => None,
+        }
+    }
+}
+
+#[allow(clippy::case_sensitive_file_extension_comparisons)]
+fn get_hosted_git_url(url: &Url) -> anyhow::Result<Option<Url>> {
+    if ["git", "git+ssh", "git+https", "ssh"].contains(&url.scheme()) {
+        let mut s = url
+            .path_segments()
+            .ok_or_else(|| anyhow!("bad URL: {url}"))?;
+
+        let mut get_url = || match url.host_str()? {
+            "github.com" => {
+                let user = s.next()?;
+                let mut project = s.next()?;
+                let typ = s.next();
+                let mut commit = s.next();
+
+                if typ.is_none() {
+                    commit = url.fragment();
+                } else if typ.is_some() && typ != Some("tree") {
+                    return None;
+                }
+
+                if project.ends_with(".git") {
+                    project = project.strip_suffix(".git")?;
+                }
+
+                let commit = commit.unwrap();
+
+                Some(
+                    Url::parse(&format!(
+                        "https://codeload.github.com/{user}/{project}/tar.gz/{commit}"
+                    ))
+                    .ok()?,
+                )
+            }
+            "bitbucket.org" => {
+                let user = s.next()?;
+                let mut project = s.next()?;
+                let aux = s.next();
+
+                if aux == Some("get") {
+                    return None;
+                }
+
+                if project.ends_with(".git") {
+                    project = project.strip_suffix(".git")?;
+                }
+
+                let commit = url.fragment()?;
+
+                Some(
+                    Url::parse(&format!(
+                        "https://bitbucket.org/{user}/{project}/get/{commit}.tar.gz"
+                    ))
+                    .ok()?,
+                )
+            }
+            "gitlab.com" => {
+                /* let path = &url.path()[1..];
+
+                if path.contains("/~/") || path.contains("/archive.tar.gz") {
+                    return None;
+                }
+
+                let user = s.next()?;
+                let mut project = s.next()?;
+
+                if project.ends_with(".git") {
+                    project = project.strip_suffix(".git")?;
+                }
+
+                let commit = url.fragment()?;
+
+                Some(
+                    Url::parse(&format!(
+                    "https://gitlab.com/{user}/{project}/repository/archive.tar.gz?ref={commit}"
+                ))
+                    .ok()?,
+                ) */
+
+                // lmao: https://github.com/npm/hosted-git-info/pull/109
+                None
+            }
+            "git.sr.ht" => {
+                let user = s.next()?;
+                let mut project = s.next()?;
+                let aux = s.next();
+
+                if aux == Some("archive") {
+                    return None;
+                }
+
+                if project.ends_with(".git") {
+                    project = project.strip_suffix(".git")?;
+                }
+
+                let commit = url.fragment()?;
+
+                Some(
+                    Url::parse(&format!(
+                        "https://git.sr.ht/{user}/{project}/archive/{commit}.tar.gz"
+                    ))
+                    .ok()?,
+                )
+            }
+            _ => None,
+        };
+
+        match get_url() {
+            Some(u) => Ok(Some(u)),
+            None => Err(anyhow!("This lockfile either contains a Git dependency with an unsupported host, or a malformed URL in the lockfile: {url}"))
+        }
+    } else {
+        Ok(None)
+    }
+}
+
+fn get_ideal_hash(integrity: &str) -> anyhow::Result<&str> {
+    let split: Vec<_> = integrity.split_ascii_whitespace().collect();
+
+    if split.len() == 1 {
+        Ok(split[0])
+    } else {
+        for hash in ["sha512-", "sha1-"] {
+            if let Some(h) = split.iter().find(|s| s.starts_with(hash)) {
+                return Ok(h);
+            }
+        }
+
+        Err(anyhow!("not sure which hash to select out of {split:?}"))
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::{get_hosted_git_url, get_ideal_hash};
+    use url::Url;
+
+    #[test]
+    fn hosted_git_urls() {
+        for (input, expected) in [
+            (
+                "git+ssh://git@github.com/castlabs/electron-releases.git#fc5f78d046e8d7cdeb66345a2633c383ab41f525",
+                Some("https://codeload.github.com/castlabs/electron-releases/tar.gz/fc5f78d046e8d7cdeb66345a2633c383ab41f525"),
+            ),
+            (
+                "git+ssh://bitbucket.org/foo/bar#branch",
+                Some("https://bitbucket.org/foo/bar/get/branch.tar.gz")
+            ),
+            (
+                "git+ssh://git.sr.ht/~foo/bar#branch",
+                Some("https://git.sr.ht/~foo/bar/archive/branch.tar.gz")
+            ),
+        ] {
+            assert_eq!(
+                get_hosted_git_url(&Url::parse(input).unwrap()).unwrap(),
+                expected.map(|u| Url::parse(u).unwrap())
+            );
+        }
+
+        assert!(
+            get_hosted_git_url(&Url::parse("ssh://git@gitlab.com/foo/bar.git#fix/bug").unwrap())
+                .is_err(),
+            "GitLab URLs should be marked as invalid (lol)"
+        );
+    }
+
+    #[test]
+    fn ideal_hashes() {
+        for (input, expected) in [
+            ("sha512-foo sha1-bar", Some("sha512-foo")),
+            ("sha1-bar md5-foo", Some("sha1-bar")),
+            ("sha1-bar", Some("sha1-bar")),
+            ("sha512-foo", Some("sha512-foo")),
+            ("foo-bar sha1-bar", Some("sha1-bar")),
+            ("foo-bar baz-foo", None),
+        ] {
+            assert_eq!(get_ideal_hash(input).ok(), expected);
+        }
+    }
+}
diff --git a/pkgs/build-support/node/fetch-npm-deps/src/tests.rs b/pkgs/build-support/node/fetch-npm-deps/src/tests.rs
deleted file mode 100644
index a3317207c42e4..0000000000000
--- a/pkgs/build-support/node/fetch-npm-deps/src/tests.rs
+++ /dev/null
@@ -1,141 +0,0 @@
-use super::{
-    fixup_lockfile, get_hosted_git_url, get_ideal_hash, get_initial_url, to_new_packages,
-    OldPackage, Package, UrlOrString,
-};
-use serde_json::json;
-use std::collections::HashMap;
-use url::Url;
-
-#[test]
-fn hosted_git_urls() {
-    for (input, expected) in [
-        (
-            "git+ssh://git@github.com/castlabs/electron-releases.git#fc5f78d046e8d7cdeb66345a2633c383ab41f525",
-            Some("https://codeload.github.com/castlabs/electron-releases/tar.gz/fc5f78d046e8d7cdeb66345a2633c383ab41f525"),
-        ),
-        (
-            "https://user@github.com/foo/bar#fix/bug",
-            Some("https://codeload.github.com/foo/bar/tar.gz/fix/bug")
-        ),
-        (
-            "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz",
-            None
-        ),
-        (
-            "git+ssh://bitbucket.org/foo/bar#branch",
-            Some("https://bitbucket.org/foo/bar/get/branch.tar.gz")
-        ),
-        (
-            "ssh://git@gitlab.com/foo/bar.git#fix/bug",
-            Some("https://gitlab.com/foo/bar/repository/archive.tar.gz?ref=fix/bug")
-        ),
-        (
-            "git+ssh://git.sr.ht/~foo/bar#branch",
-            Some("https://git.sr.ht/~foo/bar/archive/branch.tar.gz")
-        ),
-    ] {
-        assert_eq!(
-            get_hosted_git_url(&Url::parse(input).unwrap()),
-            expected.map(|u| Url::parse(u).unwrap())
-        );
-    }
-}
-
-#[test]
-fn ideal_hashes() {
-    for (input, expected) in [
-        ("sha512-foo sha1-bar", Some("sha512-foo")),
-        ("sha1-bar md5-foo", Some("sha1-bar")),
-        ("sha1-bar", Some("sha1-bar")),
-        ("sha512-foo", Some("sha512-foo")),
-        ("foo-bar sha1-bar", Some("sha1-bar")),
-        ("foo-bar baz-foo", None),
-    ] {
-        assert_eq!(get_ideal_hash(input).ok(), expected);
-    }
-}
-
-#[test]
-fn git_shorthand_v1() -> anyhow::Result<()> {
-    let old = {
-        let mut o = HashMap::new();
-        o.insert(
-            String::from("sqlite3"),
-            OldPackage {
-                version: UrlOrString::Url(
-                    Url::parse(
-                        "github:mapbox/node-sqlite3#593c9d498be2510d286349134537e3bf89401c4a",
-                    )
-                    .unwrap(),
-                ),
-                bundled: false,
-                resolved: None,
-                integrity: None,
-                dependencies: None,
-            },
-        );
-        o
-    };
-
-    let initial_url = get_initial_url()?;
-
-    let new = to_new_packages(old, &initial_url)?;
-
-    assert_eq!(new.len(), 1, "new packages map should contain 1 value");
-    assert_eq!(new.into_values().next().unwrap(), Package {
-        resolved: Some(UrlOrString::Url(Url::parse("git+ssh://git@github.com/mapbox/node-sqlite3.git#593c9d498be2510d286349134537e3bf89401c4a").unwrap())),
-        integrity: None
-    });
-
-    Ok(())
-}
-
-#[test]
-fn lockfile_fixup() -> anyhow::Result<()> {
-    let input = json!({
-        "lockfileVersion": 2,
-        "name": "foo",
-        "packages": {
-            "": {
-
-            },
-            "foo": {
-                "resolved": "https://github.com/NixOS/nixpkgs",
-                "integrity": "aaa"
-            },
-            "bar": {
-                "resolved": "git+ssh://git@github.com/NixOS/nixpkgs.git",
-                "integrity": "bbb"
-            }
-        }
-    });
-
-    let expected = json!({
-        "lockfileVersion": 2,
-        "name": "foo",
-        "packages": {
-            "": {
-
-            },
-            "foo": {
-                "resolved": "https://github.com/NixOS/nixpkgs",
-                "integrity": "aaa"
-            },
-            "bar": {
-                "resolved": "git+ssh://git@github.com/NixOS/nixpkgs.git",
-            }
-        }
-    });
-
-    assert_eq!(
-        fixup_lockfile(input.as_object().unwrap().clone())?,
-        Some(expected.as_object().unwrap().clone())
-    );
-
-    assert_eq!(
-        fixup_lockfile(json!({"lockfileVersion": 1}).as_object().unwrap().clone())?,
-        None
-    );
-
-    Ok(())
-}
diff --git a/pkgs/data/fonts/iosevka/bin.nix b/pkgs/data/fonts/iosevka/bin.nix
index d18a9d24dfae4..33458c428d2ec 100644
--- a/pkgs/data/fonts/iosevka/bin.nix
+++ b/pkgs/data/fonts/iosevka/bin.nix
@@ -11,7 +11,7 @@ let
     (builtins.attrNames (builtins.removeAttrs variantHashes [ "iosevka" ]));
 in stdenv.mkDerivation rec {
   pname = "${name}-bin";
-  version = "22.0.2";
+  version = "22.1.0";
 
   src = fetchurl {
     url = "https://github.com/be5invis/Iosevka/releases/download/v${version}/ttc-${name}-${version}.zip";
diff --git a/pkgs/data/fonts/iosevka/variants.nix b/pkgs/data/fonts/iosevka/variants.nix
index c75708299a59a..b8a40ce5e869e 100644
--- a/pkgs/data/fonts/iosevka/variants.nix
+++ b/pkgs/data/fonts/iosevka/variants.nix
@@ -1,95 +1,95 @@
 # This file was autogenerated. DO NOT EDIT!
 {
-  iosevka = "0dj0fk40impvlnbgmpnhndhad841sbk7056nyaxagiz12qq6rrii";
-  iosevka-aile = "01r6gdl2s93mhsr7ipq8ir6sy7srpyn8w09yd06hqh26ps40ki2b";
-  iosevka-curly = "0d0wsb5fpknxix6qng6mzkfdj2abm8hq067bqvbqhrdwhvbl83x9";
-  iosevka-curly-slab = "1hh9ck2pbsjaj81hivq9b7wqxb03mr6hsargw6gic4qn6pkk4l3n";
-  iosevka-etoile = "0p85jw25pkhndcdi56l9yg1hm4rsdjvy713q89dygrn5678nw74w";
-  iosevka-slab = "11vf6w59pcs71liw0k0nrhaw61nbn4n68vrj1b4rymc7mdaxfp1i";
-  iosevka-ss01 = "0hiffyfhfwwy55i1rvr78mvlmgx3c4czfx0lf4vmq2c6c4bldbf7";
-  iosevka-ss02 = "1z796x3a7hv05wir06rcj8i1l99169a7wab9j3ibb819pdycs5v7";
-  iosevka-ss03 = "1jjmg538avphd3djdjy521q0lbn7ip97qpf479kgvcr1hhv606kl";
-  iosevka-ss04 = "09xfsnl5dqzind60wip38pr0j9db47prbcgndfh283jcaysh5c0b";
-  iosevka-ss05 = "1mj4q45ifxvgwrrrmlv46p9cliznc4z2vipdf6k8b05ad71n7gab";
-  iosevka-ss06 = "02hn8dajvn5x303fv5gfl95hhsvql4h8525hd9k3a93g9qj13ib8";
-  iosevka-ss07 = "1hki40chpp3bnz6ksbly8lpjiqywdhgkqpc2h25lksdg8hwd8mcb";
-  iosevka-ss08 = "16bpzbcq2i0flw48ch2dfxljgscrm2fxfrcb2112wjv8zvi593hd";
-  iosevka-ss09 = "0ajm1gn45zklijyijxvib0iy47q7jvgmp2kdgmsa5zwwvnh8fipb";
-  iosevka-ss10 = "1g1if97w5mzzvm8y141rsqby90pmvc4whxxrjvdpmv94yb2biryp";
-  iosevka-ss11 = "0icx5cflzk05h51i4i7p5wbdkrpnyfn9r89rsvrd22vxc038xhmg";
-  iosevka-ss12 = "1var71j3pfa2fakrmm0c5sgiznbnqnxsnnkmpcb2xpjy4q68xfq1";
-  iosevka-ss13 = "0mpidl1hickx60zmza94002721jfs169b5a1l6vxwi5x6vk5329v";
-  iosevka-ss14 = "15z0ipnx2spgsp68465x7c8fkvb4hjnyl8pmfj2izn6jmgsrlc4x";
-  iosevka-ss15 = "0fyw53nvv45z55x2cnm9kcdcbiw1nykycychkih2fwlydm67vj0d";
-  iosevka-ss16 = "18lja4xw63i013ndqhm7kr7ggpbwc5zsxam7xib258nfhyx548ff";
-  iosevka-ss17 = "1h2q2v93504539imbn0gbkxi9jw71hisl6px87hs3sh6lmm5kjfm";
-  iosevka-ss18 = "085j759av6pspqn3sajrc12w74m7h5y64vdi1spmgd97dnj1gz6q";
-  sgr-iosevka = "1ykc80hgc9pipqvqw4m3mqj37rhf6hskgds42kxqzxdn194072m1";
-  sgr-iosevka-aile = "0c1jhff87hg4hxwrrp1vxx8gq1bkl9q85py1fz7gb3xdbim54s3z";
-  sgr-iosevka-curly = "0zb3y46wbsjb847s31s56gjf9sj8ikp8qvsg1fm2m01idv6f21ig";
-  sgr-iosevka-curly-slab = "113wmkzaaqp1yw95ld2j4l1f7yw9miq4bv4zjf9jib4ss6yjq97v";
-  sgr-iosevka-etoile = "1pgsh5myw2ihnlk6qkxr7p46sg1402mqvqn7bi2ch8gd472gijck";
-  sgr-iosevka-fixed = "1jf1icg1mqv1059p9msvk64j09apcqc9alvzrrxdqblw9b2ckrkj";
-  sgr-iosevka-fixed-curly = "1p3m6i1cbphxqrwyj2n0d7zwx9f75nvdsdfyyh8wvap88xwm0ggf";
-  sgr-iosevka-fixed-curly-slab = "0lgvai6293ddxckr9yvymi704pymcyp3ks4yx3jn207f70mpdg41";
-  sgr-iosevka-fixed-slab = "17935bvl9yly24g95wi2g4faahnj98z3dkb1a6dkb4frjq1nif2m";
-  sgr-iosevka-fixed-ss01 = "0wqpm57zcis9h8pzwvyjw8gggrwfgzlc3zd9c3shh7mpzx6zcj88";
-  sgr-iosevka-fixed-ss02 = "00jlapqakmpjcdycvdlhlm46iyvr05b8qskl6m7fxqg46dvnzz9z";
-  sgr-iosevka-fixed-ss03 = "1qd9wybq9miazkqkpis61s07yak7pn2lfawws421ynfgbb5r7987";
-  sgr-iosevka-fixed-ss04 = "0dbrimliy072mqg1gys9cmbl0ac56iavjnl73d14mxc77ciavkkl";
-  sgr-iosevka-fixed-ss05 = "1xfhvbzi91gddql6q1byyi40s9n6ym517c2pf6zpirnk6a7415k6";
-  sgr-iosevka-fixed-ss06 = "0ibji574aifh7pqpdgnmgmp3k784swjdvly9292sd758mlh8j5sa";
-  sgr-iosevka-fixed-ss07 = "1ixx123q5w7pbp9sgm84bhmzi7zy0h1ki3plm891mfv64pkbg42w";
-  sgr-iosevka-fixed-ss08 = "00jwiwbgrj6yxqjdp4g8cbsq2jk5pz6h401mh7y6wp2j3y2xrrkb";
-  sgr-iosevka-fixed-ss09 = "0jikxfir5md9qp5j1lhk1l9vjx2m15ncy9nkvb50mm32b6y5x3ph";
-  sgr-iosevka-fixed-ss10 = "0ampkjvr8qyadfc0yvmyvac7gnm1xi441vz1pf8n2qniypy29bgj";
-  sgr-iosevka-fixed-ss11 = "1nchlqkilglymydj33jzgp9wfivja2x3p8app3g9rgcsncsgjyc8";
-  sgr-iosevka-fixed-ss12 = "1wpza8g4as1p4cd8g0lv20m2k57f22kazp2w7810k2wzv06613jq";
-  sgr-iosevka-fixed-ss13 = "0phh86fk0l37998vxakz0vsxwsj1lbbzls23q56x7hgynnh8nr3x";
-  sgr-iosevka-fixed-ss14 = "1x1hmfj692ify57lffg08pa2420fgx0amha1kdzyyxf87s3maqx8";
-  sgr-iosevka-fixed-ss15 = "0qbf0b92668pxhjx778nnm5mj2w65c02k3cwk4f4x8vwkagwq2jp";
-  sgr-iosevka-fixed-ss16 = "0wmlcckbyrr1sspqfp5r6rymy5myy53q02fl7agv1c7bwfx9iycr";
-  sgr-iosevka-fixed-ss17 = "1rrkyv919m86biydl8jivfyn7wf8cna5c3b8rwv80ihz131zgj6z";
-  sgr-iosevka-fixed-ss18 = "1s5gj3iyyfgkkxy23yzbibwrzw4s2x9xprc5hhzyh2r10zvib5cf";
-  sgr-iosevka-slab = "1313y3nma1pqxm73yksw1b4vkvbwnv434hvkpqk1gp232j3i6dw2";
-  sgr-iosevka-ss01 = "137lmgn490vyl2y7aa5pqa66rsdwrsd4z8nz22fsks3p1pzm3fc7";
-  sgr-iosevka-ss02 = "1rhc76hfm204l5bmp1jdi74f0ay34g9q2rzi7lz5jirjjinnvadj";
-  sgr-iosevka-ss03 = "1gpb5vcx624gi0jjrj8p7jpm6r2465gpbn3khq46f9557ril4m5y";
-  sgr-iosevka-ss04 = "0kf1pmq2ffiam4zllj6x1dzd738zi9a843fz6jkpjbf9fascad9z";
-  sgr-iosevka-ss05 = "1xibjsa438lwk4y4bf0r7gjqy5czp7j7fml08f492jb1dwz7vqhq";
-  sgr-iosevka-ss06 = "1mk6haqj77b7r8cazkhf0bzd5w9ln2s6chsr12pd6bzmvphvzrzi";
-  sgr-iosevka-ss07 = "087030ckif8w4mv7j9y4pirfia5g8dh385awpqc6fffls9l0l0zh";
-  sgr-iosevka-ss08 = "0gzgsl7li9i1hl0ffw81j4w2ps3wy4kq986fwcwhgk7n9cy9rg97";
-  sgr-iosevka-ss09 = "1hsdgsg5y40bxwjkhm2q7jmjcjffsyjwa741n7fkfaqrqwl6273g";
-  sgr-iosevka-ss10 = "0ayspdypq0n7j8nbx17lxzki84icy5bzk88xq6akp7g6n035vw37";
-  sgr-iosevka-ss11 = "0kf2a1765qrmd5ba3s3hw8hxgzbcqi9dwb754yid18kiipl3lp4l";
-  sgr-iosevka-ss12 = "02d8i8qizfd1akhp0857y5i60hq3y4dj2dg2aq9pf4ldydcvc16g";
-  sgr-iosevka-ss13 = "0aw77vcfmr868vyff01cqln09xb1f30lwcsg4mqg2ym2ibp0xv71";
-  sgr-iosevka-ss14 = "1s1y5hww1vlqavgp4rr36bdvdicx7azw0yyrgv401i5w1p5z0088";
-  sgr-iosevka-ss15 = "1wb8s43hjw36x99sh610ms5x04nb6pi9z7i0dcpch7x9g2kk9ydh";
-  sgr-iosevka-ss16 = "1fwgskyl6ys383sa6fkkmdpw61m0d5nxc2vrhw56wysfvrz2cfa8";
-  sgr-iosevka-ss17 = "1zvzwy90gkaiq9ij9030wssnrjrkx9xkddwghaa1s2p9bdyfnf8x";
-  sgr-iosevka-ss18 = "12ijnkr69hahk8ghgibz438ar3yfky4kzwb9r08y43zjvycf2qhg";
-  sgr-iosevka-term = "13dvkydib9gv7308i093zpxpr40cr3admq0c4gg6ki3ix7cml3ac";
-  sgr-iosevka-term-curly = "0991m6p3b4kiyw0rgvxswwn263i7if7nznbivyzdsj1dgp3b2pkr";
-  sgr-iosevka-term-curly-slab = "1qbhhd4w2nxga2j7llsn8w3qa66rfw4nqylsw6dknqfhf34ba2mq";
-  sgr-iosevka-term-slab = "0g0dy4nrgy1a3xdbc5nxyh7y8j7plkbk09bid8rq51rdsljzp1hg";
-  sgr-iosevka-term-ss01 = "1smlqzqvp8by7rz5g5nbywyg740v9fhyiy3khn9rx5szyj92pmrb";
-  sgr-iosevka-term-ss02 = "1caxixkzbjapdr3k1ki1wfvcgs74mng0h15y00msfga1pjbj41vw";
-  sgr-iosevka-term-ss03 = "1fsbzb57jx2qcdmixxpgpqm8x1rlvc5vzkgx2w9z83nrll3iba5n";
-  sgr-iosevka-term-ss04 = "0zmpgsb0x8d8pggliqyl79hnxv5ivir0d8z2bg5zy1cw5ryzz94w";
-  sgr-iosevka-term-ss05 = "17d8ak2xnmp0g37b5ly3qik38mmmblrdqgmixp4i91wldf66h58c";
-  sgr-iosevka-term-ss06 = "0vv5gga66c5rs2vl4ncid403yqx7nwjfkr4mr5krlpc6lhs7wzhk";
-  sgr-iosevka-term-ss07 = "0mjpm4x0gy4749fnha26xssm7aw72sh7rgf3jf46pmqz40ya829b";
-  sgr-iosevka-term-ss08 = "1hw3cjfr3wwmjvi84vdn32kpk6x9zyqi43ib9nva7db4if39vf7s";
-  sgr-iosevka-term-ss09 = "1049yb11dlxc7d97hw51mzssrc0ips2dll8wglinp0l23y1nhf2s";
-  sgr-iosevka-term-ss10 = "0nzgcr2rlcgzfidnpix1dxyqiz273xmhfipfkflz5plpqvscd0c1";
-  sgr-iosevka-term-ss11 = "135crs740qprnzk0mycp83vw9x1m8za6w51syvvx8h0vncsc8g6b";
-  sgr-iosevka-term-ss12 = "1a2qrp44i4gqqpn2ycmslnm2g92v79v4hsim2ssiia474s5qn41z";
-  sgr-iosevka-term-ss13 = "18dbgl28iykw1hqcmanvpkc8zk12547rgw8zisr4vwqck8an50vb";
-  sgr-iosevka-term-ss14 = "0474ricwyvcmk9baxmd3gq1p6zrgnj59p0bbrsfc142ixqgkc0pp";
-  sgr-iosevka-term-ss15 = "1g8pjbyxnhvx62g96zlfpbq2kdc329j0pcr8iib7isyhijh4ygcx";
-  sgr-iosevka-term-ss16 = "199jhbfh2zbmp07jzi2wm8a63zhmasf4a04bp9i13pqwxz9hic7i";
-  sgr-iosevka-term-ss17 = "1lyv2hpmyalrwbhcxjqw9lzil9dfhrf971vazg366wngwn027sp2";
-  sgr-iosevka-term-ss18 = "1wszzj13gv3kc488yg9bshrf98db86xi0958g9l2y9l137h4frbz";
+  iosevka = "1f0l3d6j936799szy243k58rk28qbrgvgi35g0w6bfsra25lycq2";
+  iosevka-aile = "0prhfpz0ib7cbpi1kznb6yrp0wqjnsh39hymzha6lm0pa7py1r36";
+  iosevka-curly = "0yzdm4ypfk60zvl54fhsmi9xs1bg08pac0srs9nggicp5zswixb3";
+  iosevka-curly-slab = "175d96yzrqdjg7ic88dacvs7hz8daskn1a9vrqks132rr6a26xvw";
+  iosevka-etoile = "1n5xcnq6vbks53vfaxkm1ykpfcsbw1q3zmkrlrwsdd0zdxjsy1fx";
+  iosevka-slab = "07z3r27px5hsnz9rac290f2xraavflxqnd2ppmjiwz1yg9ch80d9";
+  iosevka-ss01 = "1fd5pjyxrqna98nghsp6rxbaqhmxch89s3jdvqdmpwj87jb6dkcc";
+  iosevka-ss02 = "13i8cqdh8g3wv8686g09aazjly157wvzgf5a6n1az4kcax9cawi3";
+  iosevka-ss03 = "1l1dkk6321czqrd7if4wwmps9r6in88952i1hqgjqr3r797x4k8p";
+  iosevka-ss04 = "1798nzr27pv9dpmjgp9bbivg9dcnk3cz603k3n3igmp8rb4rhz5f";
+  iosevka-ss05 = "0csxpmh6ymkgfhzl5x370y4qdl92cjhas25782n8carg16bc854f";
+  iosevka-ss06 = "12kmb4g0f31jr0d2gr66xjcjjqsmbr5hs0ynqbcsdpk4x58lv4y7";
+  iosevka-ss07 = "1fwdiyzs5prggzld9zip2bqzhngljwsy33cdbfq9526qakbxi67g";
+  iosevka-ss08 = "0yha45vyl0kdl593f04m26sl92vhklr1afd7yhmlkmhhhqp6bs9n";
+  iosevka-ss09 = "0av1npxxky47239x64rbrv7q7gb2lrgyzkaw1mqhafg6yzjn9iq5";
+  iosevka-ss10 = "0w3j04sjkrsd91vl7gyxbjjm76xx64p7b5c97p04xsa09gaig7i9";
+  iosevka-ss11 = "1vv20s4kp3mhngdpxzxwa1hldahxm1cxybnf1hzgd79a1162blhx";
+  iosevka-ss12 = "1yh200azn914s8lyzv8ga68ixxrqhcxx1rywxm3cpmm8iisvjf4y";
+  iosevka-ss13 = "0yvnzz53x0np7w53r5989chs9fcv81mckbf41z519r8l30m31bbj";
+  iosevka-ss14 = "17cv02gbzn0v8c8apdh7dd5s3y2qb9cydr8g5rbczzpvywixxrwr";
+  iosevka-ss15 = "04iqvjx0nkzikar4ivi7zswqvpcd954khmjjx8vicq3x56wggj8z";
+  iosevka-ss16 = "1q3krbi3vh8ry35s24cja77a8430x4n8i4anf8v7rh45sns37fmj";
+  iosevka-ss17 = "0vyzhix547j7yq717ffns6pd5mgis5sbxl85c1qf3nhij8czqg6l";
+  iosevka-ss18 = "0qikq8p8kvxw9lmrgzlm1g26bz3lppbc8jcgl8417jz400npfqg9";
+  sgr-iosevka = "095nwxsgwj671m962ix8qva5himdva0iqv9b5lapgb7acidrj8m7";
+  sgr-iosevka-aile = "1fkl0v7rclia5lwfm7f3vc3gkgnd88gf00icm6qka1xylzk8z83l";
+  sgr-iosevka-curly = "0q7dakcldx7j2cvn8hz079j81y5ab6ziqz6jr51w1whzb46al7rq";
+  sgr-iosevka-curly-slab = "0pw3fbygsgdw0isnv18axh49yxyfjdav6xizrvg6x4y8hispx0xp";
+  sgr-iosevka-etoile = "1fs22ap272hkf1wfymhbvgdpsrnxwadp8z6lv2hv5wy8ibc0ccia";
+  sgr-iosevka-fixed = "0bgag04jidcdj0gmsppc2lhvawpvylxs645sgxjj8bljy6480s96";
+  sgr-iosevka-fixed-curly = "0hgablbcb0wrpdkxw78pyvyni7dh457nwb10acwjxy6lbsshd88z";
+  sgr-iosevka-fixed-curly-slab = "1nb3izaq3slaxypylz3l6r8xjg7yy0yan08nsw8zny5lp0kaiqw9";
+  sgr-iosevka-fixed-slab = "16cc32ysmvifx736alp8bmcb9sjs1426sv72qydy99dafw34xhmm";
+  sgr-iosevka-fixed-ss01 = "0vvjj3dsfj8a60pg1qf7hcm6livsjc40xr0sfc9z1hx3dwjqpvlh";
+  sgr-iosevka-fixed-ss02 = "1yy9hqfdb897wi3nl5ny5j5i56jggbppx4ddckfa62a4jxvfks58";
+  sgr-iosevka-fixed-ss03 = "0qhk1w3gsd3qriyk9k33sfq46h9hn5zy9zk9cpd429z0xdps49kc";
+  sgr-iosevka-fixed-ss04 = "02psmn72r1mkza8n7p4sgrag7iz5zylnw03hnq6fnc4bqnn29gph";
+  sgr-iosevka-fixed-ss05 = "1w3jjjr8vvzjihpai9mivkcm2wngag6iva120zsqgb2n2k1z31bp";
+  sgr-iosevka-fixed-ss06 = "1icabqjnnsj59m4lg3qk820kdsq7hhl3gngfm5x4br43h031cdc7";
+  sgr-iosevka-fixed-ss07 = "0j9l18w7xxdgnw728zyphb52a76rbhb8cv388yc94wldzcmsk1jb";
+  sgr-iosevka-fixed-ss08 = "0js9pf92pgd944dywya1yjdx99sz56ra0nwxs9n9g0zn1rj5czwv";
+  sgr-iosevka-fixed-ss09 = "06bnyhx5rhkqjiwkjy1rxx6mby16wkyb1r4l3lkln5v6v0sfixfp";
+  sgr-iosevka-fixed-ss10 = "13y3vvcrm2v78bmadk051zr3izl0hpcxmfag34cikapzmf9vzxn3";
+  sgr-iosevka-fixed-ss11 = "1rwjzdz2ab90rv5p8hh870x9knhilqh0iiwfkyx8kjp7s9shhncp";
+  sgr-iosevka-fixed-ss12 = "0fj2szv0g2dclf7yhi8xc9hkgz1mw7kpc62hcvs3044ciga9cxrv";
+  sgr-iosevka-fixed-ss13 = "1z6rpf9l6yadzqgrdcyi75vd8mh75b6dx7d9bh06n8sjr5amhav5";
+  sgr-iosevka-fixed-ss14 = "0cp58j9c7fkm0q0ym99rhg7ljvzympwks4wk7l8vhh0wp2hfw78h";
+  sgr-iosevka-fixed-ss15 = "1fzs0c12abrf81yy1254nfiaq5q2rgvnv1yhqh985jmwcr010n83";
+  sgr-iosevka-fixed-ss16 = "16wffgq3b9d290kkbb6xa6z9aphn2d1wzqsqfr4mrkbhpwchbh0i";
+  sgr-iosevka-fixed-ss17 = "030l59270vyjhik8cn2jphdvd6vphr9ac8kqzx3bdbf1wgsr4sir";
+  sgr-iosevka-fixed-ss18 = "06qym0ffxy6j9hagpd3vrf6j5bd83ch150wkqg9rkg1i26q71v36";
+  sgr-iosevka-slab = "0mbdgpxkb3s4a8x0dvnjwqg3za0hl73n3a5vrmy8p694bnx1mi7r";
+  sgr-iosevka-ss01 = "0ilr1jiqmjmjfv4py1q3pdn3j20nh8j99629gq9g1zb82x1c9g9l";
+  sgr-iosevka-ss02 = "0l4cbx4v8zffbbq1lklk8knn0w6j9gjdp1f780k6x0z0jz3dxvdw";
+  sgr-iosevka-ss03 = "0dpl84ybj2h6nv03yy4vrwwksx4zms1c8fgr238w1nbhd7lnlyrv";
+  sgr-iosevka-ss04 = "0xlyjxsz6zc3gljvw0rsfgyv9xg1kvgsy2ibd2950vlxk2c597jb";
+  sgr-iosevka-ss05 = "02vfkdjq01jxjcvcnxs8g2snmq2gg56448yk0l0gna9mi1hagsk3";
+  sgr-iosevka-ss06 = "0b75h0al34f6w0s94i5c88pzs4zjl2iinkwjx855a036mdcqkz1l";
+  sgr-iosevka-ss07 = "1grqjqn9gckpgrrch9xa05ljpwr1rdr4lczsn89irhjz102s0bik";
+  sgr-iosevka-ss08 = "1mzbaslpy7pscmyiiz0k7czw3kjjc9an7mdb4yh99bpxwaskiv3k";
+  sgr-iosevka-ss09 = "1d7r2cv1w9q5h1frvzylizwimp8r6bdpg3fckcrdrfxsl0xfdffc";
+  sgr-iosevka-ss10 = "1jr01z6s476aggnnki0q4x24z35jx03fl4fh1l44pf3rckz7c0m9";
+  sgr-iosevka-ss11 = "05kybk7wskrg2i58h9n31sj1g6m93dcbbxr38y9nfcxb02cdbxp3";
+  sgr-iosevka-ss12 = "0pzrn3b5qj2q7k7slwvvz31j566l8xbmgk6kv324r3r19xcmsx31";
+  sgr-iosevka-ss13 = "1cgn33g39pnjkh452r396cyw00iskrr73k2jghw2ywb8ard024gc";
+  sgr-iosevka-ss14 = "0q74z4p3ybhaha4z6myasxyidy464vmccqk0bji6ks6fdklh2l3m";
+  sgr-iosevka-ss15 = "13gcgv08pwsbnr51b67w5hb9x5vcz7ridxjzwcnjhavssq3qn02x";
+  sgr-iosevka-ss16 = "1lkxrvd328ww8xi2189333p40awk7bb4d5k0mpcibp1r2hqbhx3x";
+  sgr-iosevka-ss17 = "0q4j381k2nz88y2nszd90ynmqyzna5il7j5illhdjk9dyp936f1p";
+  sgr-iosevka-ss18 = "16hdbvx9pa5z03i3dv8x40x6d8nvgxn4vga8sgdgpd2d5k8ibcq5";
+  sgr-iosevka-term = "0a16brmr2xsm48bcd5rrsv1c7b4yhvnkrlqp14p0fawyfs05bk5v";
+  sgr-iosevka-term-curly = "0a53j231zd1nkirp3fg6m72455gmkn0ipvdqswkkipxp5llbxkhx";
+  sgr-iosevka-term-curly-slab = "1ypbffwg7pihq5ywy59y3f2d8dw8p5lzk2284336z3a7i8kzmhpq";
+  sgr-iosevka-term-slab = "0rcf9i8fibrvmhzmm192crl7jlv7bwda7b12865w4g719a8ksdsv";
+  sgr-iosevka-term-ss01 = "0h12vz7qkl6xflffiqjqqkd1ziqkg2pi1s8pk28ak706fv4k203n";
+  sgr-iosevka-term-ss02 = "19d3hqlwv7pi9xyh9amshirbj6ypg6ka5g6hz9dmmh0pmwhcvpjs";
+  sgr-iosevka-term-ss03 = "09b3ghyvrjx8dnh8i9ly3cmkbpl10gn1283q9bjamcc8niva6g36";
+  sgr-iosevka-term-ss04 = "0l27i49myv81x09bj8ii732zc6473psa58ls2zgvd7yz2bihi3ar";
+  sgr-iosevka-term-ss05 = "0421p4y94zxwvc7qyl4zgxld3jrx12wsjirmvfxvfndn0f4dwqyk";
+  sgr-iosevka-term-ss06 = "0dl62wnqfqrryp0hrj073yvvy225swv9kcldhygapi16mw97v30b";
+  sgr-iosevka-term-ss07 = "03sipvjji22g0gajj0vxkmsc81fd173bb816vjv56fh489g04hn3";
+  sgr-iosevka-term-ss08 = "0j0y2dzn6a8r0yg40kajzrhyvl5yf2b8hm7n9970h0gl3rrk5pxa";
+  sgr-iosevka-term-ss09 = "1y37cr436hwb1iqqsybg0w595kbn0373hm0zmwcsmsxb25166lcf";
+  sgr-iosevka-term-ss10 = "1ngyppn90nn8f59xkh63ifl077w0zldjxzxjw8skx2jhj2kis537";
+  sgr-iosevka-term-ss11 = "193snjki9wd6cjpd754g7pvhlyg3yizlcjhcw9x0zx60830xcbd3";
+  sgr-iosevka-term-ss12 = "000maksimlm3gapp8d3cwymkmkg4n0dcwxvlxwgi2a6f5rwgfm8n";
+  sgr-iosevka-term-ss13 = "09yfj7kxd0p2w1dd1n8hwr3j2plqiq7l17rhh0lys1clyw1jrph8";
+  sgr-iosevka-term-ss14 = "16fipp8pka2187mclsf24sxx7idcqh4nn4z63glrg6695g8r0vd0";
+  sgr-iosevka-term-ss15 = "0yaj5all8jljzyhd5qmgvmiwv7whx4f9zvxgv3l53xxww5i5yhiz";
+  sgr-iosevka-term-ss16 = "163g9mj2n8z21nr5yslnq8m4m7j4aq7q918zs8nd5hggjzhqpy9y";
+  sgr-iosevka-term-ss17 = "07zicd0f8bclwxfkvxy6x6bhccz3334wmgfxqpzx36sshyhvfihg";
+  sgr-iosevka-term-ss18 = "1qwxyyqv483p05mvkar9vb2m349is0qgdijri8ipran73w363fhc";
 }
diff --git a/pkgs/data/fonts/sarasa-gothic/default.nix b/pkgs/data/fonts/sarasa-gothic/default.nix
index 3498e840eae69..417008490bcb8 100644
--- a/pkgs/data/fonts/sarasa-gothic/default.nix
+++ b/pkgs/data/fonts/sarasa-gothic/default.nix
@@ -2,13 +2,13 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "sarasa-gothic";
-  version = "0.40.5";
+  version = "0.40.6";
 
   src = fetchurl {
     # Use the 'ttc' files here for a smaller closure size.
     # (Using 'ttf' files gives a closure size about 15x larger, as of November 2021.)
     url = "https://github.com/be5invis/Sarasa-Gothic/releases/download/v${version}/sarasa-gothic-ttc-${version}.7z";
-    hash = "sha256-bs3o8+LyCTCZvUYigUWfSmjFrzPg7nLzElZYxDEsQ9k=";
+    hash = "sha256-AHslDiYBQXcxo8XVh1GMZDR8LJXvzJHl4hrisfhltEM=";
   };
 
   sourceRoot = ".";
diff --git a/pkgs/development/interpreters/wasmtime/default.nix b/pkgs/development/interpreters/wasmtime/default.nix
index 7a3297ba7f072..a3b736a6d9e7f 100644
--- a/pkgs/development/interpreters/wasmtime/default.nix
+++ b/pkgs/development/interpreters/wasmtime/default.nix
@@ -2,17 +2,17 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "wasmtime";
-  version = "7.0.0";
+  version = "8.0.0";
 
   src = fetchFromGitHub {
     owner = "bytecodealliance";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-vbsjUJH6wHmSTwUV5tXrTUljPJNLTms8K6EyWi0mipA=";
+    hash = "sha256-NSD0xWqxRVFiearYRZFIllizsRHPylWYNzcNoC6+Cpg=";
     fetchSubmodules = true;
   };
 
-  cargoHash = "sha256-eTm0FfWiNpEwj2egLrQGPA1lZ0K5GfVOeULsbNyf18Q=";
+  cargoHash = "sha256-v0DLbYM9EoIcj0JEH+LWrMx14gLRfCLW8wYDFKdFNCs=";
 
   cargoBuildFlags = [
     "--package wasmtime-cli"
diff --git a/pkgs/development/libraries/libwpe/fdo.nix b/pkgs/development/libraries/libwpe/fdo.nix
index ce385f24c208c..3e2fada38c327 100644
--- a/pkgs/development/libraries/libwpe/fdo.nix
+++ b/pkgs/development/libraries/libwpe/fdo.nix
@@ -16,11 +16,11 @@
 
 stdenv.mkDerivation rec {
   pname = "wpebackend-fdo";
-  version = "1.14.0";
+  version = "1.14.2";
 
   src = fetchurl {
     url = "https://wpewebkit.org/releases/wpebackend-fdo-${version}.tar.xz";
-    sha256 = "51sMsscUVEhBboaWAT2Ig/Z1xmwR7XUOBoZe/sWAkVU=";
+    sha256 = "k8l2aumGTurq7isKdPIsvKCN9CwaG9tVsIbyUo44DTg=";
   };
 
   depsBuildBuild = [
diff --git a/pkgs/development/libraries/webkitgtk/default.nix b/pkgs/development/libraries/webkitgtk/default.nix
index 51a0a300586ef..2d6948d2ada05 100644
--- a/pkgs/development/libraries/webkitgtk/default.nix
+++ b/pkgs/development/libraries/webkitgtk/default.nix
@@ -71,7 +71,7 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "webkitgtk";
-  version = "2.40.0";
+  version = "2.40.1";
   name = "${finalAttrs.pname}-${finalAttrs.version}+abi=${if lib.versionAtLeast gtk3.version "4.0" then "6.0" else "4.${if lib.versions.major libsoup.version == "2" then "0" else "1"}"}";
 
   outputs = [ "out" "dev" "devdoc" ];
@@ -82,7 +82,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   src = fetchurl {
     url = "https://webkitgtk.org/releases/webkitgtk-${finalAttrs.version}.tar.xz";
-    hash = "sha256-pGB+ob+JZp6JscssY/quxRP5PeCbauYMxx1qiqt6s5M=";
+    hash = "sha256-ZOUmmE+M0hYe8DrpSa+ZwAL/Mz1hXmOGtGAWSjwbfvY=";
   };
 
   patches = lib.optionals stdenv.isLinux [
diff --git a/pkgs/development/python-modules/accelerate/default.nix b/pkgs/development/python-modules/accelerate/default.nix
new file mode 100644
index 0000000000000..be841e9bb4d57
--- /dev/null
+++ b/pkgs/development/python-modules/accelerate/default.nix
@@ -0,0 +1,74 @@
+{ stdenv
+, lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, pytestCheckHook
+, setuptools
+, numpy
+, packaging
+, psutil
+, pyyaml
+, torch
+, evaluate
+, parameterized
+, transformers
+}:
+
+buildPythonPackage rec {
+  pname = "accelerate";
+  version = "0.18.0";
+  format = "pyproject";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "huggingface";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-fCIvVbMaWAWzRfPc5/1CZq3gZ8kruuk9wBt8mzLHmyw=";
+  };
+
+  nativeBuildInputs = [ setuptools ];
+
+  propagatedBuildInputs = [
+    numpy
+    packaging
+    psutil
+    pyyaml
+    torch
+  ];
+
+  nativeCheckInputs = [
+    evaluate
+    parameterized
+    pytestCheckHook
+    transformers
+  ];
+  preCheck = ''
+    export HOME=$(mktemp -d)
+    export PATH=$out/bin:$PATH
+  '';
+  pytestFlagsArray = [ "tests" ];
+  disabledTests = [
+    # try to download data:
+    "FeatureExamplesTests"
+    "test_infer_auto_device_map_on_t0pp"
+  ] ++ lib.optionals (stdenv.isLinux && stdenv.isAarch64) [
+    # usual aarch64-linux RuntimeError: DataLoader worker (pid(s) <...>) exited unexpectedly
+    "CheckpointTest"
+  ];
+  # numerous instances of torch.multiprocessing.spawn.ProcessRaisedException:
+  doCheck = !stdenv.isDarwin;
+  pythonImportsCheck = [
+    "accelerate"
+  ];
+
+  meta = with lib; {
+    homepage = "https://huggingface.co/docs/accelerate";
+    description = "A simple way to train and use PyTorch models with multi-GPU, TPU, mixed-precision";
+    changelog = "https://github.com/huggingface/accelerate/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bcdarwin ];
+    mainProgram = "accelerate";
+  };
+}
diff --git a/pkgs/development/python-modules/catboost/default.nix b/pkgs/development/python-modules/catboost/default.nix
index 9c4b4d8049e9f..1939b7c13a6d0 100644
--- a/pkgs/development/python-modules/catboost/default.nix
+++ b/pkgs/development/python-modules/catboost/default.nix
@@ -5,7 +5,8 @@
 
 buildPythonPackage rec {
   pname = "catboost";
-  version = "1.1.1";
+  # nixpkgs-update: no auto update
+  version = "1.0.5";
 
   disabled = pythonOlder "3.4";
 
@@ -13,7 +14,7 @@ buildPythonPackage rec {
     owner = "catboost";
     repo = "catboost";
     rev = "refs/tags/v${version}";
-    hash = "sha256-bqnUHTTRan/spA5y4LRt/sIUYpP3pxzdN/4wHjzgZVY=";
+    hash = "sha256-ILemeZUBI9jPb9G6F7QX/T1HaVhQ+g6y7YmsT6DFCJk";
   };
 
   nativeBuildInputs = [ clang_12 ];
@@ -41,6 +42,11 @@ buildPythonPackage rec {
   dontUseSetuptoolsCheck = true;
   pythonImportsCheck = [ "catboost" ];
 
+  passthru = {
+    # Do not update to catboost 1.1.x because the patch doesn't apply cleanly
+    skipBulkUpdate = true;
+  };
+
   meta = with lib; {
     description = "High-performance library for gradient boosting on decision trees.";
     longDescription = ''
diff --git a/pkgs/development/python-modules/docformatter/default.nix b/pkgs/development/python-modules/docformatter/default.nix
index 11958148d879e..6118010789435 100644
--- a/pkgs/development/python-modules/docformatter/default.nix
+++ b/pkgs/development/python-modules/docformatter/default.nix
@@ -12,7 +12,7 @@
 
 buildPythonPackage rec {
   pname = "docformatter";
-  version = "1.6.2";
+  version = "1.6.3";
 
   disabled = pythonOlder "3.7";
 
@@ -22,7 +22,7 @@ buildPythonPackage rec {
     owner = "PyCQA";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-fQm+eMA1p7uCVgQ3Hbm3UY1mhROsThtgkjRRPg3XcsI=";
+    hash = "sha256-MyrLzEVuNsAZCnRXWDGK7jFAu8woZUSrN6ml1yiadF0=";
   };
 
   patches = [
diff --git a/pkgs/development/python-modules/eigenpy/default.nix b/pkgs/development/python-modules/eigenpy/default.nix
index 19f265a7c39e3..e20cb4c4f6360 100644
--- a/pkgs/development/python-modules/eigenpy/default.nix
+++ b/pkgs/development/python-modules/eigenpy/default.nix
@@ -9,14 +9,14 @@
 
 stdenv.mkDerivation rec {
   pname = "eigenpy";
-  version = "2.9.2";
+  version = "3.0.0";
 
   src = fetchFromGitHub {
     owner = "stack-of-tasks";
     repo = pname;
     rev = "v${version}";
     fetchSubmodules = true;
-    hash = "sha256-h088il9gih1rJJKOI09qq2180DxbxCAVZcgBXWh8aVk=";
+    hash = "sha256-xaeMsn3G4x5DS6gXc6mbZvi96K1Yu8CuzjcGnYJYrvs=";
   };
 
   strictDeps = true;
diff --git a/pkgs/development/python-modules/elmax-api/default.nix b/pkgs/development/python-modules/elmax-api/default.nix
index a57225d41db07..415211cb36256 100644
--- a/pkgs/development/python-modules/elmax-api/default.nix
+++ b/pkgs/development/python-modules/elmax-api/default.nix
@@ -9,7 +9,7 @@
 
 buildPythonPackage rec {
   pname = "elmax-api";
-  version = "0.0.3";
+  version = "0.0.4";
   format = "setuptools";
 
   disabled = pythonOlder "3.8";
@@ -18,7 +18,7 @@ buildPythonPackage rec {
     owner = "albertogeniola";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-ZqPDnIiFzxS6nU19bfEgnqEsuz7oI+Z4ac6br6Gr4Vk=";
+    hash = "sha256-+dR1ccRa4G91yFeSwjgdZ1lEXV/PIgnKN8e9tfy5fTU=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/gehomesdk/default.nix b/pkgs/development/python-modules/gehomesdk/default.nix
index 7c83f06230732..060b921a38b21 100644
--- a/pkgs/development/python-modules/gehomesdk/default.nix
+++ b/pkgs/development/python-modules/gehomesdk/default.nix
@@ -13,14 +13,14 @@
 
 buildPythonPackage rec {
   pname = "gehomesdk";
-  version = "0.5.8";
+  version = "0.5.9";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-x83CmOAZFaIDv4bzO01YZxVPVM/cwUpJtKdCWOxH/O4=";
+    hash = "sha256-V8vwsLIO44q2ms/segTZ70DUVb7BNuxYZ8vX9KPNP4c=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/hahomematic/default.nix b/pkgs/development/python-modules/hahomematic/default.nix
index 445bba5494320..5458986e7f151 100644
--- a/pkgs/development/python-modules/hahomematic/default.nix
+++ b/pkgs/development/python-modules/hahomematic/default.nix
@@ -16,7 +16,7 @@
 
 buildPythonPackage rec {
   pname = "hahomematic";
-  version = "2023.4.0";
+  version = "2023.4.2";
   format = "pyproject";
 
   disabled = pythonOlder "3.9";
@@ -25,7 +25,7 @@ buildPythonPackage rec {
     owner = "danielperna84";
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-IR8Sx9rb6vPA/wIZVCwOl2bKxwWbogW4Xry14yxb2Ic=";
+    hash = "sha256-cMrp0IewFezXpuXDnXDoDmEge/2NWRlhqkBmIwBjlrE=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/ledger-bitcoin/default.nix b/pkgs/development/python-modules/ledger-bitcoin/default.nix
new file mode 100644
index 0000000000000..edfc9c7f22f2b
--- /dev/null
+++ b/pkgs/development/python-modules/ledger-bitcoin/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, setuptools
+, ledgercomm
+, packaging
+, typing-extensions
+ }:
+
+buildPythonPackage rec {
+  pname = "ledger-bitcoin";
+  version = "0.2.1";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "ledger_bitcoin";
+    hash = "sha256-AWl/q2MzzspNIo6yf30S92PgM/Ygsb+1lJsg7Asztso=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    ledgercomm
+    packaging
+    typing-extensions
+  ];
+
+  pythonImportsCheck = [
+    "ledger_bitcoin"
+  ];
+
+  meta = with lib; {
+    description = "Client library for Ledger Bitcoin application.";
+    homepage = "https://github.com/LedgerHQ/app-bitcoin-new/tree/develop/bitcoin_client/ledger_bitcoin";
+    license = licenses.asl20;
+  };
+}
diff --git a/pkgs/development/python-modules/ledgercomm/default.nix b/pkgs/development/python-modules/ledgercomm/default.nix
new file mode 100644
index 0000000000000..092378a142b8f
--- /dev/null
+++ b/pkgs/development/python-modules/ledgercomm/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, setuptools
+ }:
+
+buildPythonPackage rec {
+  pname = "ledgercomm";
+  version = "1.1.2";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-izOPbwv+34Xq8mpq9+QRIGhd+z4pVnGJSMnYOktRVbs=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  pythonImportsCheck = [
+    "ledgercomm"
+  ];
+
+  meta = with lib; {
+    description = "Python library to send and receive APDU through HID or TCP socket. It can be used with a Ledger Nano S/X or with the Speculos emulator.";
+    homepage = "https://github.com/LedgerHQ/ledgercomm";
+    license = licenses.mit;
+  };
+}
diff --git a/pkgs/development/python-modules/markdown-it-py/default.nix b/pkgs/development/python-modules/markdown-it-py/default.nix
index e0c9946a3ba29..38d92159f3b2e 100644
--- a/pkgs/development/python-modules/markdown-it-py/default.nix
+++ b/pkgs/development/python-modules/markdown-it-py/default.nix
@@ -16,6 +16,7 @@
 , sphinx-book-theme
 , sphinx-copybutton
 , sphinx-design
+, stdenv
 , pytest-regressions
 , pytestCheckHook
 , pythonOlder
@@ -52,6 +53,7 @@ buildPythonPackage rec {
   preCheck = ''
     rm -r benchmarking
   '';
+  doCheck = !stdenv.isi686;
 
   pythonImportsCheck = [
     "markdown_it"
diff --git a/pkgs/development/python-modules/mdit-py-plugins/default.nix b/pkgs/development/python-modules/mdit-py-plugins/default.nix
index 0128b5eec23d4..772d9547088bc 100644
--- a/pkgs/development/python-modules/mdit-py-plugins/default.nix
+++ b/pkgs/development/python-modules/mdit-py-plugins/default.nix
@@ -10,7 +10,7 @@
 
 buildPythonPackage rec {
   pname = "mdit-py-plugins";
-  version = "0.3.4";
+  version = "0.3.5";
   format = "pyproject";
 
   disabled = pythonOlder "3.6";
@@ -19,7 +19,7 @@ buildPythonPackage rec {
     owner = "executablebooks";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-BvxqMSl8YXD84O6qjDI0VZgZpqL0UL0vYDMKxCc9qtI=";
+    hash = "sha256-U6Qh/1GklW9ZXBXmjPLuxga0JS/Cyga1iorcMEA+WP8=";
   };
 
   nativeBuildInputs = [
@@ -42,6 +42,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Collection of core plugins for markdown-it-py";
     homepage = "https://github.com/executablebooks/mdit-py-plugins";
+    changelog = "https://github.com/executablebooks/mdit-py-plugins/blob/v${version}/CHANGELOG.md";
     license = licenses.mit;
     maintainers = with maintainers; [ AluisioASG ];
   };
diff --git a/pkgs/development/python-modules/peft/default.nix b/pkgs/development/python-modules/peft/default.nix
new file mode 100644
index 0000000000000..24a0fe7806436
--- /dev/null
+++ b/pkgs/development/python-modules/peft/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, pytestCheckHook
+, setuptools
+, numpy
+, packaging
+, psutil
+, pyyaml
+, torch
+, transformers
+, accelerate
+}:
+
+buildPythonPackage rec {
+  pname = "peft";
+  version = "0.2.0";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "huggingface";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-NPpY29HMQe5KT0JdlLAXY9MVycDslbP2i38NSTirB3I=";
+  };
+
+  nativeBuildInputs = [ setuptools ];
+
+  propagatedBuildInputs = [
+    numpy
+    packaging
+    psutil
+    pyyaml
+    torch
+    transformers
+    accelerate
+  ];
+
+  doCheck = false;  # tried to download pretrained model
+  pythonImportsCheck = [
+    "peft"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/huggingface/peft";
+    description = "State-of-the art parameter-efficient fine tuning";
+    changelog = "https://github.com/huggingface/peft/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bcdarwin ];
+  };
+}
diff --git a/pkgs/development/python-modules/pyunifiprotect/default.nix b/pkgs/development/python-modules/pyunifiprotect/default.nix
index 180741a8792ec..4d886196648b7 100644
--- a/pkgs/development/python-modules/pyunifiprotect/default.nix
+++ b/pkgs/development/python-modules/pyunifiprotect/default.nix
@@ -31,7 +31,7 @@
 
 buildPythonPackage rec {
   pname = "pyunifiprotect";
-  version = "4.8.1";
+  version = "4.8.2";
   format = "pyproject";
 
   disabled = pythonOlder "3.9";
@@ -40,7 +40,7 @@ buildPythonPackage rec {
     owner = "briis";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-+fZtzSUTObWkLQ7Nq6pCP+vN1+OUFi3d8AJdr5FGI+k=";
+    hash = "sha256-NjoTUK1Tg2RqREI2DDT86mDO4rS5iZk+cffaGWLVSyc=";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/safetensors/default.nix b/pkgs/development/python-modules/safetensors/default.nix
new file mode 100644
index 0000000000000..407dc5bebbe8d
--- /dev/null
+++ b/pkgs/development/python-modules/safetensors/default.nix
@@ -0,0 +1,79 @@
+{ stdenv
+, lib
+, buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, h5py
+, numpy
+, pythonOlder
+, pytestCheckHook
+, rustPlatform
+, setuptools-rust
+, torch
+, libiconv
+}:
+
+buildPythonPackage rec {
+  pname = "safetensors";
+  version = "0.3.0";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "huggingface";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Qpb5lTw1WEME9tWEGfxC8l8dK9mGMH2rz+O+xGCrUxw";
+  };
+
+  patches = [
+    # remove after next release
+    (fetchpatch {
+      name = "commit-cargo-lockfile";
+      relative = "bindings/python";
+      url = "https://github.com/huggingface/safetensors/commit/a7061b4235b59312010b2dd6f9597381428ee9a2.patch";
+      hash = "sha256-iH4vQOL2LU93kd0dSS8/JJxKGb+kDstqnExjYSSwi78";
+    })
+  ];
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src patches;
+    sourceRoot = "source/bindings/python";
+    hash = "sha256-tC0XawmKWNGCaByHQfJEfmHM3m/qgTuIpcRaEFJC6dM";
+  };
+
+  sourceRoot = "source/bindings/python";
+
+  nativeBuildInputs = with rustPlatform; [
+    setuptools-rust
+    rust.cargo
+    rust.rustc
+    cargoSetupHook
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  nativeCheckInputs = [
+    h5py numpy pytestCheckHook torch
+  ];
+  pytestFlagsArray = [ "tests" ];
+  # don't require PaddlePaddle (not in Nixpkgs), Flax, or Tensorflow (onerous) to run tests:
+  disabledTestPaths = [
+    "tests/test_flax_comparison.py"
+    "tests/test_paddle_comparison.py"
+    "tests/test_tf_comparison.py"
+  ];
+
+  pythonImportsCheck = [
+    "safetensors"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/huggingface/safetensors";
+    description = "Fast (zero-copy) and safe (unlike pickle) format for storing tensors";
+    changelog = "https://github.com/huggingface/safetensors/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bcdarwin ];
+  };
+}
diff --git a/pkgs/development/python-modules/syncedlyrics/default.nix b/pkgs/development/python-modules/syncedlyrics/default.nix
index f69ce5fe83e69..48330988df83d 100644
--- a/pkgs/development/python-modules/syncedlyrics/default.nix
+++ b/pkgs/development/python-modules/syncedlyrics/default.nix
@@ -3,7 +3,6 @@
 , buildPythonPackage
 , fetchFromGitHub
 , poetry-core
-, pytestCheckHook
 , pythonOlder
 , pythonRelaxDepsHook
 , rapidfuzz
@@ -12,7 +11,7 @@
 
 buildPythonPackage rec {
   pname = "syncedlyrics";
-  version = "0.4.0";
+  version = "0.5.0";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -21,7 +20,7 @@ buildPythonPackage rec {
     owner = "rtcq";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-dH9irIah9CdZ9Kv7bIymP1o5ifWEYCiSqegUpu8Y+Tg=";
+    hash = "sha256-79dy1f5Pd/JGIpH/71E6IBg+AtR4zgHL4b/GRH1AFp0=";
   };
 
   nativeBuildInputs = [
@@ -39,18 +38,13 @@ buildPythonPackage rec {
     beautifulsoup4
   ];
 
-  nativeCheckInputs = [
-    pytestCheckHook
-  ];
+  # Tests require network access
+  doCheck = false;
 
   pythonImportsCheck = [
     "syncedlyrics"
   ];
 
-  pytestFlagsArray = [
-    "test.py::test_all_providers"
-  ];
-
   meta = with lib; {
     description = "Module to get LRC format (synchronized) lyrics";
     homepage = "https://github.com/rtcq/syncedlyrics";
diff --git a/pkgs/development/python-modules/torchvision/default.nix b/pkgs/development/python-modules/torchvision/default.nix
index 449d635372a0b..f4db7d16b84f6 100644
--- a/pkgs/development/python-modules/torchvision/default.nix
+++ b/pkgs/development/python-modules/torchvision/default.nix
@@ -40,7 +40,7 @@ let
   };
 
   pname = "torchvision";
-  version = "0.14.1";
+  version = "0.15.1";
 in
 buildPythonPackage {
   inherit pname version;
@@ -49,7 +49,7 @@ buildPythonPackage {
     owner = "pytorch";
     repo = "vision";
     rev = "refs/tags/v${version}";
-    hash = "sha256-lKkEJolJQaLr1TVm44CizbJQedGa1wyy0cFWg2LTJN0=";
+    hash = "sha256-CQS2IXb8YSLrrkn/7BsO4Me5Cv0eXgMAKXM4rGzr0Bw=";
   };
 
   nativeBuildInputs = [ libpng ninja which ] ++ lib.optionals cudaSupport [ cuda-native-redist ];
diff --git a/pkgs/development/python-modules/ttp-templates/default.nix b/pkgs/development/python-modules/ttp-templates/default.nix
index 364041704d55a..77acc320fe856 100644
--- a/pkgs/development/python-modules/ttp-templates/default.nix
+++ b/pkgs/development/python-modules/ttp-templates/default.nix
@@ -7,7 +7,7 @@
 
 buildPythonPackage rec {
   pname = "ttp-templates";
-  version = "0.3.4";
+  version = "0.3.5";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
diff --git a/pkgs/development/python-modules/yalexs/default.nix b/pkgs/development/python-modules/yalexs/default.nix
index e319e2d93fb76..52d5be838084e 100644
--- a/pkgs/development/python-modules/yalexs/default.nix
+++ b/pkgs/development/python-modules/yalexs/default.nix
@@ -16,7 +16,7 @@
 
 buildPythonPackage rec {
   pname = "yalexs";
-  version = "1.3.0";
+  version = "1.3.2";
   format = "setuptools";
 
   disabled = pythonOlder "3.9";
@@ -25,7 +25,7 @@ buildPythonPackage rec {
     owner = "bdraco";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-5UmuQsA5pPzgP+uCkykWQBCPY437cxblGCiZxEYQzGg=";
+    hash = "sha256-CqonGKcbAg0Edqw3WosK2vEJ0DxOMZNSNO5RkecECa0=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/tools/build-managers/bear/default.nix b/pkgs/development/tools/build-managers/bear/default.nix
index 3132678eade10..468cec567913f 100644
--- a/pkgs/development/tools/build-managers/bear/default.nix
+++ b/pkgs/development/tools/build-managers/bear/default.nix
@@ -16,13 +16,13 @@
 
 stdenv.mkDerivation rec {
   pname = "bear";
-  version = "3.1.1";
+  version = "3.1.2";
 
   src = fetchFromGitHub {
     owner = "rizsotto";
     repo = pname;
     rev = version;
-    sha256 = "sha256-EiAGM2tfzHp2rTAsf+mrfQ7VfX0NTFakcLVpT/plqh8=";
+    sha256 = "sha256-x46BS+By5Zj5xeYRD45eXRDCAOqwpkkivVyJPnhkAMc=";
   };
 
   nativeBuildInputs = [ cmake pkg-config ];
diff --git a/pkgs/development/tools/goda/default.nix b/pkgs/development/tools/goda/default.nix
index 65086bb44d58f..edf37fa51672b 100644
--- a/pkgs/development/tools/goda/default.nix
+++ b/pkgs/development/tools/goda/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "goda";
-  version = "0.5.6";
+  version = "0.5.7";
 
   src = fetchFromGitHub {
     owner = "loov";
     repo = "goda";
     rev = "v${version}";
-    sha256 = "sha256-l9ehpDAqZqNV+07ENXJ2GJEY6bb6W37Ls6UqjE9DEWQ=";
+    sha256 = "sha256-kilFb/2wXdzn/gXy9mBg0PZH8rd+MFIom4AGAZLgnBo=";
   };
 
-  vendorSha256 = "sha256-BYYuB4ZlCWD8NILkf4qrgM4q72ZTy7Ze3ICUXdoI5Ms=";
+  vendorSha256 = "sha256-FYjlOYB0L4l6gF8hYtJroV1qMQD0ZmKWXBarjyConRs=";
 
   passthru.updateScript = nix-update-script { };
 
diff --git a/pkgs/development/tools/jql/default.nix b/pkgs/development/tools/jql/default.nix
index fdc2d011d6fe1..758e5c9120ecb 100644
--- a/pkgs/development/tools/jql/default.nix
+++ b/pkgs/development/tools/jql/default.nix
@@ -5,16 +5,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "jql";
-  version = "6.0.5";
+  version = "6.0.6";
 
   src = fetchFromGitHub {
     owner = "yamafaktory";
     repo = pname;
     rev = "jql-v${version}";
-    hash = "sha256-MdIYU6/j+hpFBcaZ1IiW6ImeWD3mmYezGEpZBbWmRzs=";
+    hash = "sha256-0Tg8vqlTngLfmp0HDxR5ymmLXw16J9pQJfOCOZrRreE=";
   };
 
-  cargoHash = "sha256-vb7HyumsLYN9rZTD8KxzV+1SN5F2rLhuullYDwRt7wM=";
+  cargoHash = "sha256-w51soAdIdNuJzQpvQZQZuxbxlClEWYdT/v0ZOnVvsTA=";
 
   meta = with lib; {
     description = "A JSON Query Language CLI tool built with Rust";
diff --git a/pkgs/development/tools/mongosh/source.json b/pkgs/development/tools/mongosh/source.json
index fda52f4e77cd5..9f590bcb9b2fd 100644
--- a/pkgs/development/tools/mongosh/source.json
+++ b/pkgs/development/tools/mongosh/source.json
@@ -2,5 +2,5 @@
   "version": "1.8.0",
   "integrity": "sha512-9pHLqfYMWwP1L2t83TK5k6ho1faz+jFD9zXxnTtgnyu0c/uC39nx+tJT9AsxNZpY+GlhshDu1YcJm45f8l3gIw==",
   "filename": "mongosh-1.8.0.tgz",
-  "deps": "sha256-8v4E9wNv3+JCGm7mUEA+z+g/4X37ACwVsn+9Cv7N+4o="
+  "deps": "sha256-ewl5q6ZxlQN030AmObP42E5KpUisrdYHOsg8whUIUZA="
 }
diff --git a/pkgs/development/tools/okteto/default.nix b/pkgs/development/tools/okteto/default.nix
index 5282ecac8868a..c0b2035c7dacd 100644
--- a/pkgs/development/tools/okteto/default.nix
+++ b/pkgs/development/tools/okteto/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "okteto";
-  version = "2.14.3";
+  version = "2.15.0";
 
   src = fetchFromGitHub {
     owner = "okteto";
     repo = "okteto";
     rev = version;
-    hash = "sha256-E96IAAbWmFIQILUU3WLjX6NAXzwIkrbEgKUs4wrh8z4=";
+    hash = "sha256-+fIVkkx4UVmHnAQT2nXmBARvUsemiD42LZI3kmt/nX4=";
   };
 
-  vendorHash = "sha256-b2qxvP9spXEJVYOq7o0VG2WOxzUchwtLaY97/2IYoV4=";
+  vendorHash = "sha256-dZ6gzW5R5na5qcHFQqQvKfYb0Bu0kVvVMOaRdtTgkhE=";
 
   postPatch = ''
     # Disable some tests that need file system & network access.
diff --git a/pkgs/development/tools/rust/cargo-careful/default.nix b/pkgs/development/tools/rust/cargo-careful/default.nix
index 5e8d5c504f735..d197e0c7f4dc3 100644
--- a/pkgs/development/tools/rust/cargo-careful/default.nix
+++ b/pkgs/development/tools/rust/cargo-careful/default.nix
@@ -5,16 +5,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "cargo-careful";
-  version = "0.3.2";
+  version = "0.3.3";
 
   src = fetchFromGitHub {
     owner = "RalfJung";
     repo = "cargo-careful";
     rev = "v${version}";
-    hash = "sha256-+rj9f4uCNDWwX+0Dsr7dwoeQunvsniG61+W9ehs0KDY=";
+    hash = "sha256-oYwbRww+NFPV9q26vfuTdxTBp0kzWdgWl6MAXhir2lc=";
   };
 
-  cargoHash = "sha256-dxb+euJ5PCdDjfne+iUTgsdOSt2HLiItHrVwHx4588c=";
+  cargoHash = "sha256-8b718qYPFFstjl2LQ23IoQDikF9YV1Ao+pDg2tiXxsc=";
 
   meta = with lib; {
     description = "A tool to execute Rust code carefully, with extra checking along the way";
diff --git a/pkgs/os-specific/darwin/sketchybar/default.nix b/pkgs/os-specific/darwin/sketchybar/default.nix
index 5468e7a2a3372..6d478d8ab3347 100644
--- a/pkgs/os-specific/darwin/sketchybar/default.nix
+++ b/pkgs/os-specific/darwin/sketchybar/default.nix
@@ -10,13 +10,13 @@ in
 
 stdenv.mkDerivation rec {
   pname = "sketchybar";
-  version = "2.14.4";
+  version = "2.15.1";
 
   src = fetchFromGitHub {
     owner = "FelixKratz";
     repo = "SketchyBar";
     rev = "v${version}";
-    hash = "sha256-snB1DII04OeoPbLzblfgdaM1hdXL62u/g/0CNLmqrxo=";
+    hash = "sha256-0jCVDaFc7ZvA8apeHRoQvPhAlaGlBHzqUkS9or88PcM=";
   };
 
   buildInputs = [ Carbon Cocoa CoreWLAN DisplayServices SkyLight ];
diff --git a/pkgs/servers/monitoring/prometheus/promscale/0001-remove-jaeger-test-dep.patch b/pkgs/servers/monitoring/prometheus/promscale/0001-remove-jaeger-test-dep.patch
deleted file mode 100644
index 9266a9aca53cc..0000000000000
--- a/pkgs/servers/monitoring/prometheus/promscale/0001-remove-jaeger-test-dep.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-
-A Promscale test has a dependency on a package which was not intended to be
-vendored, so `go mod vendor` breaks. The dependency is not required to build
-Promscale, so it can be removed.
-
-diff --git a/pkg/tests/end_to_end_tests/trace_query_integration_test.go b/pkg/tests/end_to_end_tests/trace_query_integration_test.go
-index 84a0d08..efbe5e1 100644
---- a/pkg/tests/end_to_end_tests/trace_query_integration_test.go
-+++ b/pkg/tests/end_to_end_tests/trace_query_integration_test.go
-@@ -24,7 +24,6 @@ import (
- 	ingstr "github.com/timescale/promscale/pkg/pgmodel/ingestor"
- 	"github.com/timescale/promscale/pkg/pgxconn"
- 
--	jaegerQueryApp "github.com/jaegertracing/jaeger/cmd/query/app"
- 	jaegerQueryService "github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
- 	jaegerJSONModel "github.com/jaegertracing/jaeger/model/json"
- )
diff --git a/pkgs/servers/monitoring/prometheus/promscale/default.nix b/pkgs/servers/monitoring/prometheus/promscale/default.nix
index fbd1661c5f8b1..7dcc5f01e47c0 100644
--- a/pkgs/servers/monitoring/prometheus/promscale/default.nix
+++ b/pkgs/servers/monitoring/prometheus/promscale/default.nix
@@ -7,20 +7,16 @@
 
 buildGoModule rec {
   pname = "promscale";
-  version = "0.10.0";
+  version = "0.17.0";
 
   src = fetchFromGitHub {
     owner = "timescale";
     repo = pname;
     rev = version;
-    sha256 = "sha256-KF+aD9vJYqNJkJftx27ZsxmOIXZ/2ciKwjwcTw0GBvY=";
+    sha256 = "sha256-JizUI9XRzOEHF1kAblYQRYB11z9KWX7od3lPiRN+JNI=";
   };
 
-  patches = [
-    ./0001-remove-jaeger-test-dep.patch
-  ];
-
-  vendorSha256 = "sha256-/cjRM8CrOKnx0BcRu2+MLV28MYLOrG5x1DN24mRUJzQ=";
+  vendorSha256 = "sha256-lnyKsipr/f9W9LWLb2lizKGLvIbS3XnSlOH1u1B87OY=";
 
   ldflags = [
     "-s"
@@ -28,7 +24,11 @@ buildGoModule rec {
     "-X github.com/timescale/promscale/pkg/version.Version=${version}"
     "-X github.com/timescale/promscale/pkg/version.CommitHash=${src.rev}"
   ];
-
+  preBuild = ''
+    # Without this build fails with
+    # main module (github.com/timescale/promscale) does not contain package github.com/timescale/promscale/migration-tool/cmd/prom-migrator
+    rm -r migration-tool
+  '';
   checkPhase = ''
     runHook preCheck
 
@@ -51,6 +51,6 @@ buildGoModule rec {
     changelog = "https://github.com/timescale/promscale/blob/${version}/CHANGELOG.md";
     license = licenses.asl20;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ _0x4A6F ];
+    maintainers = with maintainers; [ _0x4A6F anpin ];
   };
 }
diff --git a/pkgs/servers/simple-http-server/default.nix b/pkgs/servers/simple-http-server/default.nix
index e59b9d73d5a85..f2d8309d09019 100644
--- a/pkgs/servers/simple-http-server/default.nix
+++ b/pkgs/servers/simple-http-server/default.nix
@@ -9,16 +9,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "simple-http-server";
-  version = "0.6.6";
+  version = "0.6.7";
 
   src = fetchFromGitHub {
     owner = "TheWaWaR";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-b+z3rio+kg1Z0B4pqhTlCTtzXgAeCAhinSa9dkIwcaY=";
+    sha256 = "sha256-Xi5tJIfK4zjckKERhxHuDqeyOB9Dxul/eFLKOtpgR/w=";
   };
 
-  cargoSha256 = "sha256-teBqgQloI/13F7K/+EBKFcHWqcK1wJrNUu5LO8nwQbo=";
+  cargoSha256 = "sha256-wv1hlBTQe1Mm67J2FqrrXSSlZkFPB0TzKc5VUMMfUIQ=";
 
   nativeBuildInputs = [ pkg-config ];
 
diff --git a/pkgs/servers/sql/postgresql/ext/promscale_extension.nix b/pkgs/servers/sql/postgresql/ext/promscale_extension.nix
new file mode 100644
index 0000000000000..e031bb4c021be
--- /dev/null
+++ b/pkgs/servers/sql/postgresql/ext/promscale_extension.nix
@@ -0,0 +1,60 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, buildPgxExtension
+, postgresql
+, stdenv
+, nixosTests
+}:
+
+buildPgxExtension rec {
+  inherit postgresql;
+
+  pname = "promscale_extension";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "timescale";
+    repo = "promscale_extension";
+    rev = version;
+    sha256 = "sha256-vyEfQMGguHrHYdBEEmbev29L2uCa/4xL9DpGIniUwfI=";
+  };
+
+  cargoSha256 = "sha256-VK9DObkg4trcGUXxxISCd0zqU3vc1Qt6NxqpgKIARCQ=";
+
+  cargoPatches = [
+    # there is a duplicate definition in the lock file which fails to build with buildRustPackage
+    (fetchpatch {
+      name = "cargo-vendor.patch";
+      url = "https://github.com/timescale/promscale_extension/commit/3048bd959430e9abc2c1d5c772ab6b4fc1dc6a95.patch";
+      hash = "sha256-xTk4Ml8GN06QlJdrvAdVK21r30ZR/S83y5A5jJPdOw4=";
+    })
+  ];
+
+  preBuild = ''
+    patchShebangs create-upgrade-symlinks.sh extract-extension-version.sh
+    ## Hack to boostrap the build because some pgx commands require this file. It gets re-generated later.
+    cp templates/promscale.control ./promscale.control
+  '';
+  postInstall = ''
+    ln -s $out/lib/promscale-${version}.so $out/lib/promscale.so
+  '';
+  passthru.tests = {
+    promscale = nixosTests.promscale;
+  };
+
+  # tests take really long
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Promscale is an open source observability backend for metrics and traces powered by SQL";
+    homepage = "https://github.com/timescale/promscale_extension";
+    maintainers = with maintainers; [ anpin ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.unfree;
+
+    # as it needs to be used with timescaledb, simply use the condition from there
+    broken = versionOlder postgresql.version "12"
+             || versionAtLeast postgresql.version "15";
+  };
+}
diff --git a/pkgs/servers/sql/postgresql/packages.nix b/pkgs/servers/sql/postgresql/packages.nix
index 211a54bb5523f..c94b91f02e2b3 100644
--- a/pkgs/servers/sql/postgresql/packages.nix
+++ b/pkgs/servers/sql/postgresql/packages.nix
@@ -71,6 +71,8 @@ self: super: {
 
     pg_safeupdate = super.callPackage ./ext/pg_safeupdate.nix { };
 
+    promscale_extension = super.callPackage ./ext/promscale_extension.nix { };
+
     repmgr = super.callPackage ./ext/repmgr.nix { };
 
     rum = super.callPackage ./ext/rum.nix { };
diff --git a/pkgs/tools/backup/rustic-rs/default.nix b/pkgs/tools/backup/rustic-rs/default.nix
index def401ca187ce..1e7d7939fbcf9 100644
--- a/pkgs/tools/backup/rustic-rs/default.nix
+++ b/pkgs/tools/backup/rustic-rs/default.nix
@@ -2,16 +2,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "rustic-rs";
-  version = "0.5.1";
+  version = "0.5.2";
 
   src = fetchFromGitHub {
     owner = "rustic-rs";
     repo = "rustic";
     rev = "refs/tags/v${version}";
-    hash = "sha256-r1h21J+pR8HiFfSxBwTVhuPFtc7HP+XnI3Xtx4oRKzY=";
+    hash = "sha256-DL6IpWUGZT5kqnJVFehjMZAmBp2shUZSA5KvJDa9FFY=";
   };
 
-  cargoHash = "sha256-HiGBp79bxxZaupPo5s6cjXa4Q83O9i8VLzB9psjKSfo=";
+  cargoHash = "sha256-K4bj0jE+PuOL2mEeVEI84On17Jyw7PKtNPQzDKMvY+c=";
 
   nativeBuildInputs = [ installShellFiles ];
 
diff --git a/pkgs/tools/graphics/gmic-qt/default.nix b/pkgs/tools/graphics/gmic-qt/default.nix
index d81fe16a91098..fa974aa97c829 100644
--- a/pkgs/tools/graphics/gmic-qt/default.nix
+++ b/pkgs/tools/graphics/gmic-qt/default.nix
@@ -108,5 +108,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
     maintainers = [ maintainers.lilyinstarlight ];
     platforms = platforms.unix;
+    mainProgram = "gmic_qt";
   };
 }
diff --git a/pkgs/tools/misc/boxxy/default.nix b/pkgs/tools/misc/boxxy/default.nix
index 1de9bd0469d16..d9a694f27c5a6 100644
--- a/pkgs/tools/misc/boxxy/default.nix
+++ b/pkgs/tools/misc/boxxy/default.nix
@@ -1,23 +1,23 @@
 { lib
 , rustPlatform
 , fetchFromGitHub
-, stdenv
 , pkg-config
 , oniguruma
+, stdenv
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "boxxy";
-  version = "0.6.4";
+  version = "0.7.0";
 
   src = fetchFromGitHub {
     owner = "queer";
     repo = "boxxy";
     rev = "v${version}";
-    hash = "sha256-OUnvjn58jVMg4wYwoSMsqQvy5yveF+KeRjkjvB1W/Q4=";
+    hash = "sha256-QbXR79jmTlrqFlg5ZpXJXO/YljcCrwGrucRwASA5aK0=";
   };
 
-  cargoHash = "sha256-UhtxvEK3hknBdLS1eOlEPng+THoPuhYGIFhYz4LpF5E=";
+  cargoHash = "sha256-Mc6UjO3/XGIz25tHQFjRT/xf3KMfr/miiZDIR9lHnGY=";
 
   nativeBuildInputs = [
     pkg-config
@@ -27,7 +27,9 @@ rustPlatform.buildRustPackage rec {
     oniguruma
   ];
 
-  RUSTONIG_SYSTEM_LIBONIG = true;
+  env = {
+    RUSTONIG_SYSTEM_LIBONIG = true;
+  };
 
   meta = with lib; {
     description = "Puts bad Linux applications in a box with only their files";
diff --git a/pkgs/tools/misc/gh-dash/default.nix b/pkgs/tools/misc/gh-dash/default.nix
index 131db58c0b806..8d2d7258071bd 100644
--- a/pkgs/tools/misc/gh-dash/default.nix
+++ b/pkgs/tools/misc/gh-dash/default.nix
@@ -7,16 +7,16 @@
 
 buildGoModule rec {
   pname = "gh-dash";
-  version = "3.7.6";
+  version = "3.7.7";
 
   src = fetchFromGitHub {
     owner = "dlvhdr";
     repo = "gh-dash";
     rev = "v${version}";
-    hash = "sha256-EYDSfxFOnMuPDZaG1CYQtYLNe6afm/2YYlQPheAKXDg=";
+    hash = "sha256-Ih9Vdt/ds8f37n7onWhvfrgMrE2iXQPwSTgxrui5TYY=";
   };
 
-  vendorHash = "sha256-66GxD48fCWUWMyZ3GiivWNtz0mgI4JHMcvNwHGFTRfU=";
+  vendorHash = "sha256-ZpX+0AyHFWOb75jlIS5/BqKpRkqNpE4SkOJ01CqO/0w=";
 
   ldflags = [
     "-s"
diff --git a/pkgs/tools/security/cosign/default.nix b/pkgs/tools/security/cosign/default.nix
index 5997d5eb33cde..5193e3af4c8da 100644
--- a/pkgs/tools/security/cosign/default.nix
+++ b/pkgs/tools/security/cosign/default.nix
@@ -13,13 +13,13 @@
 }:
 buildGoModule rec {
   pname = "cosign";
-  version = "2.0.1";
+  version = "2.0.2";
 
   src = fetchFromGitHub {
     owner = "sigstore";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-x03I86WJT+dLToeGzIaPrLJK0G7siVZuJHjE1WjZao0=";
+    hash = "sha256-jJHLCN9hEQy4ijFm6g2E9WvTT43kvPhdRW1aczvEcFs=";
   };
 
   buildInputs =
@@ -28,7 +28,7 @@ buildGoModule rec {
 
   nativeBuildInputs = [ pkg-config installShellFiles ];
 
-  vendorHash = "sha256-eTyFIuq9G9/0t5ePZNsBpKJ/lcUU0ryqzg6i+nqbHc4=";
+  vendorHash = "sha256-X5CY8U3IgxWD3zpb1f9R9Xk/25x1zxfYXkvXbelFBQc=";
 
   subPackages = [
     "cmd/cosign"
diff --git a/pkgs/tools/security/exploitdb/default.nix b/pkgs/tools/security/exploitdb/default.nix
index b58190c23b349..8bd0c529f3974 100644
--- a/pkgs/tools/security/exploitdb/default.nix
+++ b/pkgs/tools/security/exploitdb/default.nix
@@ -6,13 +6,13 @@
 
 stdenv.mkDerivation rec {
   pname = "exploitdb";
-  version = "2023-04-22";
+  version = "2023-04-24";
 
   src = fetchFromGitLab {
     owner = "exploit-database";
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-HE8L7+/41GMxQeMeei4CEBSbr+CzNkew843dK34D48k=";
+    hash = "sha256-RJYyFHTt7Cm6N+ZTD7D6GW/gKhwPhOMriV2+/lFWN10=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/tools/security/metasploit/Gemfile b/pkgs/tools/security/metasploit/Gemfile
index fe28b723b1aed..7595e891610d1 100644
--- a/pkgs/tools/security/metasploit/Gemfile
+++ b/pkgs/tools/security/metasploit/Gemfile
@@ -1,4 +1,4 @@
 # frozen_string_literal: true
 source "https://rubygems.org"
 
-gem "metasploit-framework", git: "https://github.com/rapid7/metasploit-framework", ref: "refs/tags/6.3.12"
+gem "metasploit-framework", git: "https://github.com/rapid7/metasploit-framework", ref: "refs/tags/6.3.13"
diff --git a/pkgs/tools/security/metasploit/Gemfile.lock b/pkgs/tools/security/metasploit/Gemfile.lock
index dfdc81bf95778..8a748567b1fea 100644
--- a/pkgs/tools/security/metasploit/Gemfile.lock
+++ b/pkgs/tools/security/metasploit/Gemfile.lock
@@ -1,9 +1,9 @@
 GIT
   remote: https://github.com/rapid7/metasploit-framework
-  revision: a78862340cacb90e2d27b6f7ae670387081a0276
-  ref: refs/tags/6.3.12
+  revision: f58dd240e0c900976bc0609096b3b2e9965f70cb
+  ref: refs/tags/6.3.13
   specs:
-    metasploit-framework (6.3.12)
+    metasploit-framework (6.3.13)
       actionpack (~> 7.0)
       activerecord (~> 7.0)
       activesupport (~> 7.0)
@@ -12,6 +12,7 @@ GIT
       aws-sdk-s3
       bcrypt
       bcrypt_pbkdf
+      bootsnap
       bson
       chunky_png
       dnsruby
@@ -32,7 +33,7 @@ GIT
       metasploit-concern
       metasploit-credential
       metasploit-model
-      metasploit-payloads (= 2.0.123)
+      metasploit-payloads (= 2.0.126)
       metasploit_data_models
       metasploit_payloads-mettle (= 1.0.20)
       mqtt
@@ -129,7 +130,7 @@ GEM
     arel-helpers (2.14.0)
       activerecord (>= 3.1.0, < 8)
     aws-eventstream (1.2.0)
-    aws-partitions (1.748.0)
+    aws-partitions (1.752.0)
     aws-sdk-core (3.171.0)
       aws-eventstream (~> 1, >= 1.0.2)
       aws-partitions (~> 1, >= 1.651.0)
@@ -144,7 +145,7 @@ GEM
     aws-sdk-kms (1.63.0)
       aws-sdk-core (~> 3, >= 3.165.0)
       aws-sigv4 (~> 1.1)
-    aws-sdk-s3 (1.120.1)
+    aws-sdk-s3 (1.121.0)
       aws-sdk-core (~> 3, >= 3.165.0)
       aws-sdk-kms (~> 1)
       aws-sigv4 (~> 1.4)
@@ -153,6 +154,8 @@ GEM
     bcrypt (3.1.18)
     bcrypt_pbkdf (1.1.0)
     bindata (2.4.15)
+    bootsnap (1.16.0)
+      msgpack (~> 1.2)
     bson (4.15.0)
     builder (3.2.4)
     chunky_png (1.4.0)
@@ -238,7 +241,7 @@ GEM
       activemodel (~> 7.0)
       activesupport (~> 7.0)
       railties (~> 7.0)
-    metasploit-payloads (2.0.123)
+    metasploit-payloads (2.0.126)
     metasploit_data_models (6.0.2)
       activerecord (~> 7.0)
       activesupport (~> 7.0)
@@ -288,9 +291,9 @@ GEM
       hashery (~> 2.0)
       ruby-rc4
       ttfunk
-    pg (1.4.6)
+    pg (1.5.1)
     public_suffix (5.0.1)
-    puma (6.2.1)
+    puma (6.2.2)
       nio4r (~> 2.0)
     racc (1.6.2)
     rack (2.2.6.4)
diff --git a/pkgs/tools/security/metasploit/default.nix b/pkgs/tools/security/metasploit/default.nix
index f2ae0baa3a883..a47cad064f102 100644
--- a/pkgs/tools/security/metasploit/default.nix
+++ b/pkgs/tools/security/metasploit/default.nix
@@ -15,13 +15,13 @@ let
   };
 in stdenv.mkDerivation rec {
   pname = "metasploit-framework";
-  version = "6.3.12";
+  version = "6.3.13";
 
   src = fetchFromGitHub {
     owner = "rapid7";
     repo = "metasploit-framework";
     rev = version;
-    sha256 = "sha256-+ZWH/rOFm6jSEUT6SGnIJ8rBY2GvNc2tDxHH9+TAwiQ=";
+    sha256 = "sha256-bmp5H7awE8ZaLrPt9UEXeK6haaLzejsIq8jk1bbnv/c=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/tools/security/metasploit/gemset.nix b/pkgs/tools/security/metasploit/gemset.nix
index 63e955981425a..b3ac89b5ad66d 100644
--- a/pkgs/tools/security/metasploit/gemset.nix
+++ b/pkgs/tools/security/metasploit/gemset.nix
@@ -104,10 +104,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "12pi6xcvwaplzgy24vqiw2q9aaxs5r8gl92kv2gy6riqldgs10gi";
+      sha256 = "18ndv604p1p3gkyy0d958jx2wp74d100q6vbc6ak70a7bv93wqsg";
       type = "gem";
     };
-    version = "1.748.0";
+    version = "1.752.0";
   };
   aws-sdk-core = {
     groups = ["default"];
@@ -154,10 +154,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1mapdzm97rv22pca1hvvshwsafa12gd2yv2fcy63dfjn5vjjq893";
+      sha256 = "1s5v3799pi7ik53gv7dl02am5pngv6x4azzwx9my09nll4q3lfk8";
       type = "gem";
     };
-    version = "1.120.1";
+    version = "1.121.0";
   };
   aws-sigv4 = {
     groups = ["default"];
@@ -199,6 +199,16 @@
     };
     version = "2.4.15";
   };
+  bootsnap = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vcg52gwl64xhhal6kwk1pc01y1klzdlnv1awyk89kb91z010x7q";
+      type = "gem";
+    };
+    version = "1.16.0";
+  };
   bson = {
     groups = ["default"];
     platforms = [];
@@ -614,12 +624,12 @@
     platforms = [];
     source = {
       fetchSubmodules = false;
-      rev = "a78862340cacb90e2d27b6f7ae670387081a0276";
-      sha256 = "0962q3jggiqi1ynwsddgc5iw3ji7r1lliyj4279ai6w5ngz8g5gr";
+      rev = "f58dd240e0c900976bc0609096b3b2e9965f70cb";
+      sha256 = "1xxzwyvdbr68mc43nypkl9ls3bkq2x0zbvdk5rdcc4xhnqgpjskf";
       type = "git";
       url = "https://github.com/rapid7/metasploit-framework";
     };
-    version = "6.3.12";
+    version = "6.3.13";
   };
   metasploit-model = {
     groups = ["default"];
@@ -636,10 +646,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0ay75vrp7cpxzl1cny3fikgyg4wsg1fz3qqfafrysz0wfmqlkpyp";
+      sha256 = "1dncaysx2llgcy5a4vgv93hbp3cmiqa36ch229vmshfr296vfqr8";
       type = "gem";
     };
-    version = "2.0.123";
+    version = "2.0.126";
   };
   metasploit_data_models = {
     groups = ["default"];
@@ -917,10 +927,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "07m6lxljabw9kyww5k5lgsxsznsm1v5l14r1la09gqka9b5kv3yr";
+      sha256 = "0ihx7icaib5hfr51s44aw63y7g8za3gkqk3diwp75hzkbgjj9hrc";
       type = "gem";
     };
-    version = "1.4.6";
+    version = "1.5.1";
   };
   public_suffix = {
     groups = ["default"];
@@ -937,10 +947,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0qqd5lb3mamh53ssx0xavmspg4blhq6hd1kipksw20bq71xcklf5";
+      sha256 = "0yf4jmkyy8das7pj1xzwllfvzkhq2p6p534j61d9h4wz3nfyf0s5";
       type = "gem";
     };
-    version = "6.2.1";
+    version = "6.2.2";
   };
   racc = {
     groups = ["default"];
diff --git a/pkgs/tools/text/vale/default.nix b/pkgs/tools/text/vale/default.nix
index 8fe7182898cc7..c4ded0d2668e4 100644
--- a/pkgs/tools/text/vale/default.nix
+++ b/pkgs/tools/text/vale/default.nix
@@ -2,7 +2,7 @@
 
 buildGoModule rec {
   pname = "vale";
-  version = "2.24.3";
+  version = "2.24.4";
 
   subPackages = [ "cmd/vale" ];
   outputs = [ "out" "data" ];
@@ -11,7 +11,7 @@ buildGoModule rec {
     owner = "errata-ai";
     repo = "vale";
     rev = "v${version}";
-    hash = "sha256-8sJdt7lM/Ut/mtCoN2QZjtqh1fiWbI9taiLlnnx66PE=";
+    hash = "sha256-gX37n1h/O7CqgXgWBndBHLtIeUWJaIJVJLyIb3Sd9YY=";
   };
 
   vendorHash = "sha256-ZgBt4BgZWViNqYCuqb/Wt1zVjFM9h1UsmsYox7kMJ1A=";
diff --git a/pkgs/tools/virtualization/awsebcli/default.nix b/pkgs/tools/virtualization/awsebcli/default.nix
index 4a7f1baa0c2bc..c7fa54791210a 100644
--- a/pkgs/tools/virtualization/awsebcli/default.nix
+++ b/pkgs/tools/virtualization/awsebcli/default.nix
@@ -36,11 +36,11 @@ let
 in
 with localPython.pkgs; buildPythonApplication rec {
   pname = "awsebcli";
-  version = "3.20.5";
+  version = "3.20.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-EoSEanwGvP3RcemXrVy7iAGrY/vMC6LbwcrXj2OsF8Q=";
+    hash = "sha256-9n6nObYoZlOKgQvSdNqHLRr+RlDoKfR3fgD7Xa9wPzM=";
   };
 
 
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index 4f00b0e30c906..28e9c8e40df21 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -782,7 +782,7 @@ mapAliases ({
   keepnote = throw "keepnote has been removed from nixpkgs, as it is stuck on python2"; # Added 2022-01-01
   kerberos = libkrb5; # moved from top-level 2021-03-14
   kexectools = kexec-tools; # Added 2021-09-03
-  kexpand = "kexpand awless has been dropped due to the lack of maintanence from upstream since 2017"; # Added 2022-06-01
+  kexpand = throw "kexpand awless has been dropped due to the lack of maintanence from upstream since 2017"; # Added 2022-06-01
   keybase-go = throw "'keybase-go' has been renamed to/replaced by 'keybase'"; # Converted to throw 2022-02-22
   keysmith = libsForQt5.kdeGear.keysmith; # Added 2021-07-14
   kgx = gnome-console; # Added 2022-02-19
@@ -814,9 +814,9 @@ mapAliases ({
   letsencrypt = throw "'letsencrypt' has been renamed to/replaced by 'certbot'"; # Converted to throw 2022-02-22
   libGL_driver = throw "'libGL_driver' has been renamed to/replaced by 'mesa.drivers'"; # Converted to throw 2022-02-22
   libaudit = throw "'libaudit' has been renamed to/replaced by 'audit'"; # Converted to throw 2022-02-22
-  libayatana-indicator-gtk2 = "'libayatana-indicator-gtk2' has been removed from nixpkgs, as gtk2 is deprecated"; # Added 2022-10-18
+  libayatana-indicator-gtk2 = throw "'libayatana-indicator-gtk2' has been removed from nixpkgs, as gtk2 is deprecated"; # Added 2022-10-18
   libayatana-indicator-gtk3 = libayatana-indicator; # Added 2022-10-18
-  libayatana-appindicator-gtk2 = "'libayatana-appindicator-gtk2' has been removed from nixpkgs, as gtk2 is deprecated"; # Added 2022-10-18
+  libayatana-appindicator-gtk2 = throw "'libayatana-appindicator-gtk2' has been removed from nixpkgs, as gtk2 is deprecated"; # Added 2022-10-18
   libayatana-appindicator-gtk3 = libayatana-appindicator; # Added 2022-10-18
   libbencodetools = bencodetools; # Added 2022-07-30
   libbluedevil = throw "'libbluedevil' (Qt4) is unmaintained and unused since 'kde4.bluedevil's removal in 2017"; # Added 2022-06-14
@@ -1628,7 +1628,7 @@ mapAliases ({
   torchPackages = throw "torchPackages has been removed, as the upstream project has been abandoned"; # Added 2020-03-28
   trang = throw "'trang' has been renamed to/replaced by 'jing-trang'"; # Converted to throw 2022-02-22
   transfig = fig2dev; # Added 2022-02-15
-  transmission-remote-cli = "transmission-remote-cli has been removed, as the upstream project has been abandoned. Please use tremc instead"; # Added 2020-10-14
+  transmission-remote-cli = throw "transmission-remote-cli has been removed, as the upstream project has been abandoned. Please use tremc instead"; # Added 2020-10-14
   transmission_gtk = throw "'transmission_gtk' has been renamed to/replaced by 'transmission-gtk'"; # Converted to throw 2022-02-22
   transmission_remote_gtk = throw "'transmission_remote_gtk' has been renamed to/replaced by 'transmission-remote-gtk'"; # Converted to throw 2022-02-22
   transporter = throw "transporter has been removed. It was archived upstream, so it's considered abandoned";
@@ -1823,10 +1823,6 @@ mapAliases ({
   zeromq3 = throw "zeromq3 has been deprecated by zeromq4";
   jzmq = throw "jzmq has been removed from nixpkgs, as it was unmaintained";
 
-  avian = throw ''
-    The package doesn't compile anymore on NixOS and both development &
-    maintenance is abandoned by upstream.
-  ''; # Cleanup before 21.11, Added 2021-05-07
   ant-dracula-theme = throw "ant-dracula-theme is now dracula-theme, and theme name is Dracula instead of Ant-Dracula";
   dina-font-pcf = dina-font; # Added 2020-02-09
   dnscrypt-proxy = throw "dnscrypt-proxy has been removed. Please use dnscrypt-proxy2"; # Added 2020-02-02
@@ -1860,12 +1856,7 @@ mapAliases ({
     Its new location is obs-studio-plugins.wlrobs.
   ''; # Added 2021-06-01
 
-  oraclejdk8psu = throw "The *psu versions of oraclejdk are no longer provided by upstream"; # Cleanup before 20.09
-  oraclejre8psu = oraclejdk8psu; # Cleanup before 20.09
-  oraclejdk8psu_distro = oraclejdk8psu; # Cleanup before 20.09
   posix_man_pages = man-pages-posix; # Added 2021-04-15
-  riot-desktop = throw "riot-desktop is now element-desktop!"; # Cleanup before 21.05
-  riot-web = throw "riot-web is now element-web"; # Cleanup before 21.05
   sqldeveloper_18 = throw "sqldeveloper_18 is not maintained anymore!"; # Added 2020-02-04
   todolist = throw "todolist is now ultralist"; # Added 2020-12-27
   tor-browser-bundle = throw "tor-browser-bundle was removed because it was out of date and inadequately maintained. Please use tor-browser-bundle-bin instead"; # Added 2020-01-10
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 5d124af9813b2..4b427b1dada0d 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -22,6 +22,8 @@ self: super: with self; {
 
   accessible-pygments = callPackage ../development/python-modules/accessible-pygments { };
 
+  accelerate = callPackage ../development/python-modules/accelerate { };
+
   accuweather = callPackage ../development/python-modules/accuweather { };
 
   accupy = callPackage ../development/python-modules/accupy { };
@@ -5428,8 +5430,12 @@ self: super: with self; {
 
   ledger_agent = callPackage ../development/python-modules/ledger_agent { };
 
+  ledger-bitcoin = callPackage ../development/python-modules/ledger-bitcoin { };
+
   ledgerblue = callPackage ../development/python-modules/ledgerblue { };
 
+  ledgercomm = callPackage ../development/python-modules/ledgercomm { };
+
   ledgerwallet = callPackage ../development/python-modules/ledgerwallet {
     inherit (pkgs.darwin.apple_sdk.frameworks) AppKit;
   };
@@ -7209,6 +7215,8 @@ self: super: with self; {
 
   pefile = callPackage ../development/python-modules/pefile { };
 
+  peft = callPackage ../development/python-modules/peft { };
+
   pelican = callPackage ../development/python-modules/pelican {
     inherit (pkgs) glibcLocales git;
   };
@@ -10535,6 +10543,8 @@ self: super: with self; {
 
   safeio = callPackage ../development/python-modules/safeio { };
 
+  safetensors = callPackage ../development/python-modules/safetensors { };
+
   safety = callPackage ../development/python-modules/safety { };
 
   sagemaker = callPackage ../development/python-modules/sagemaker { };