summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--maintainers/maintainer-list.nix5
-rw-r--r--nixos/lib/test-driver/test_driver/machine.py32
-rw-r--r--nixos/modules/services/monitoring/prometheus/exporters.nix8
-rw-r--r--nixos/modules/services/monitoring/prometheus/exporters/nextcloud.nix15
-rw-r--r--nixos/modules/services/web-apps/calibre-web.nix7
-rw-r--r--nixos/tests/all-tests.nix6
-rw-r--r--nixos/tests/qgis.nix30
-rw-r--r--pkgs/applications/audio/baudline/default.nix4
-rw-r--r--pkgs/applications/audio/jamulus/default.nix24
-rw-r--r--pkgs/applications/editors/jetbrains/default.nix59
-rw-r--r--pkgs/applications/editors/jetbrains/plugins/plugins.json100
-rw-r--r--pkgs/applications/editors/jetbrains/plugins/tests.nix1
-rwxr-xr-xpkgs/applications/editors/jetbrains/plugins/update_plugins.py1
-rw-r--r--pkgs/applications/editors/jetbrains/versions.json144
-rw-r--r--pkgs/applications/editors/vscode/vscode.nix16
-rw-r--r--pkgs/applications/gis/qgis/default.nix6
-rw-r--r--pkgs/applications/gis/qgis/ltr.nix6
-rw-r--r--pkgs/applications/gis/qgis/test.py64
-rw-r--r--pkgs/applications/graphics/normcap/default.nix52
-rw-r--r--pkgs/applications/graphics/oculante/Cargo.lock214
-rw-r--r--pkgs/applications/graphics/oculante/default.nix4
-rw-r--r--pkgs/applications/misc/albert/default.nix5
-rw-r--r--pkgs/applications/misc/keepass/default.nix4
-rw-r--r--pkgs/applications/misc/keepass/fix-paths.patch61
-rw-r--r--pkgs/applications/networking/cluster/nomad/default.nix9
-rw-r--r--pkgs/applications/networking/instant-messengers/session-desktop/default.nix4
-rw-r--r--pkgs/applications/terminal-emulators/kitty/default.nix14
-rw-r--r--pkgs/build-support/flutter/default.nix7
-rw-r--r--pkgs/development/compilers/flutter/default.nix20
-rw-r--r--pkgs/development/compilers/flutter/engine-artifacts/hashes.nix113
-rw-r--r--pkgs/development/compilers/flutter/wrapper.nix54
-rw-r--r--pkgs/development/interpreters/python/default.nix8
-rw-r--r--pkgs/development/node-packages/overrides.nix7
-rw-r--r--pkgs/development/php-packages/phan/default.nix4
-rw-r--r--pkgs/development/python-modules/azure-servicebus/default.nix14
-rw-r--r--pkgs/development/python-modules/curlify/default.nix25
-rw-r--r--pkgs/development/python-modules/flask-compress/default.nix24
-rw-r--r--pkgs/os-specific/linux/bpftrace/default.nix10
-rw-r--r--pkgs/servers/audiobookshelf/default.nix8
-rw-r--r--pkgs/servers/calibre-web/default.nix1
-rw-r--r--pkgs/servers/minio/default.nix6
-rw-r--r--pkgs/servers/monitoring/mimir/default.nix25
-rw-r--r--pkgs/tools/misc/pricehist/default.nix46
-rw-r--r--pkgs/top-level/all-packages.nix6
-rw-r--r--pkgs/top-level/python-packages.nix2
45 files changed, 897 insertions, 378 deletions
diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix
index e8c35b915c4..9f4e4aaa977 100644
--- a/maintainers/maintainer-list.nix
+++ b/maintainers/maintainer-list.nix
@@ -3136,6 +3136,11 @@
       fingerprint = "9C56 1D64 30B2 8D6B DCBC 9CEB 73D5 E7FD EE3D E49A";
     }];
   };
+  chrpinedo = {
+    github = "chrpinedo";
+    githubId = 2324630;
+    name = "Christian Pinedo";
+  };
   chuahou = {
     email = "human+github@chuahou.dev";
     github = "chuahou";
diff --git a/nixos/lib/test-driver/test_driver/machine.py b/nixos/lib/test-driver/test_driver/machine.py
index 724b5a6a750..06d952d64f4 100644
--- a/nixos/lib/test-driver/test_driver/machine.py
+++ b/nixos/lib/test-driver/test_driver/machine.py
@@ -734,7 +734,7 @@ class Machine:
         )
         return output
 
-    def wait_until_tty_matches(self, tty: str, regexp: str) -> None:
+    def wait_until_tty_matches(self, tty: str, regexp: str, timeout: int = 900) -> None:
         """Wait until the visible output on the chosen TTY matches regular
         expression. Throws an exception on timeout.
         """
@@ -750,7 +750,7 @@ class Machine:
             return len(matcher.findall(text)) > 0
 
         with self.nested(f"waiting for {regexp} to appear on tty {tty}"):
-            retry(tty_matches)
+            retry(tty_matches, timeout)
 
     def send_chars(self, chars: str, delay: Optional[float] = 0.01) -> None:
         """
@@ -762,7 +762,7 @@ class Machine:
             for char in chars:
                 self.send_key(char, delay, log=False)
 
-    def wait_for_file(self, filename: str) -> None:
+    def wait_for_file(self, filename: str, timeout: int = 900) -> None:
         """
         Waits until the file exists in the machine's file system.
         """
@@ -772,9 +772,11 @@ class Machine:
             return status == 0
 
         with self.nested(f"waiting for file '{filename}'"):
-            retry(check_file)
+            retry(check_file, timeout)
 
-    def wait_for_open_port(self, port: int, addr: str = "localhost") -> None:
+    def wait_for_open_port(
+        self, port: int, addr: str = "localhost", timeout: int = 900
+    ) -> None:
         """
         Wait until a process is listening on the given TCP port and IP address
         (default `localhost`).
@@ -785,9 +787,11 @@ class Machine:
             return status == 0
 
         with self.nested(f"waiting for TCP port {port} on {addr}"):
-            retry(port_is_open)
+            retry(port_is_open, timeout)
 
-    def wait_for_closed_port(self, port: int, addr: str = "localhost") -> None:
+    def wait_for_closed_port(
+        self, port: int, addr: str = "localhost", timeout: int = 900
+    ) -> None:
         """
         Wait until nobody is listening on the given TCP port and IP address
         (default `localhost`).
@@ -798,7 +802,7 @@ class Machine:
             return status != 0
 
         with self.nested(f"waiting for TCP port {port} on {addr} to be closed"):
-            retry(port_is_closed)
+            retry(port_is_closed, timeout)
 
     def start_job(self, jobname: str, user: Optional[str] = None) -> Tuple[int, str]:
         return self.systemctl(f"start {jobname}", user)
@@ -972,7 +976,7 @@ class Machine:
         """
         return self._get_screen_text_variants([2])[0]
 
-    def wait_for_text(self, regex: str) -> None:
+    def wait_for_text(self, regex: str, timeout: int = 900) -> None:
         """
         Wait until the supplied regular expressions matches the textual
         contents of the screen by using optical character recognition (see
@@ -995,7 +999,7 @@ class Machine:
             return False
 
         with self.nested(f"waiting for {regex} to appear on screen"):
-            retry(screen_matches)
+            retry(screen_matches, timeout)
 
     def wait_for_console_text(self, regex: str, timeout: int | None = None) -> None:
         """
@@ -1146,7 +1150,7 @@ class Machine:
         self.send_key("ctrl-alt-delete")
         self.connected = False
 
-    def wait_for_x(self) -> None:
+    def wait_for_x(self, timeout: int = 900) -> None:
         """
         Wait until it is possible to connect to the X server.
         """
@@ -1163,14 +1167,14 @@ class Machine:
             return status == 0
 
         with self.nested("waiting for the X11 server"):
-            retry(check_x)
+            retry(check_x, timeout)
 
     def get_window_names(self) -> List[str]:
         return self.succeed(
             r"xwininfo -root -tree | sed 's/.*0x[0-9a-f]* \"\([^\"]*\)\".*/\1/; t; d'"
         ).splitlines()
 
-    def wait_for_window(self, regexp: str) -> None:
+    def wait_for_window(self, regexp: str, timeout: int = 900) -> None:
         """
         Wait until an X11 window has appeared whose name matches the given
         regular expression, e.g., `wait_for_window("Terminal")`.
@@ -1188,7 +1192,7 @@ class Machine:
             return any(pattern.search(name) for name in names)
 
         with self.nested("waiting for a window to appear"):
-            retry(window_is_visible)
+            retry(window_is_visible, timeout)
 
     def sleep(self, secs: int) -> None:
         # We want to sleep in *guest* time, not *host* time.
diff --git a/nixos/modules/services/monitoring/prometheus/exporters.nix b/nixos/modules/services/monitoring/prometheus/exporters.nix
index 8bb017894ee..66aff30b5ed 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters.nix
@@ -304,6 +304,14 @@ in
           'services.mysql.enable' is set to false.
       '';
     } {
+      assertion = cfg.nextcloud.enable -> (
+        (cfg.nextcloud.passwordFile == null) != (cfg.nextcloud.tokenFile == null)
+      );
+      message = ''
+        Please specify either 'services.prometheus.exporters.nextcloud.passwordFile' or
+          'services.prometheus.exporters.nextcloud.tokenFile'
+      '';
+    } {
       assertion = cfg.sql.enable -> (
         (cfg.sql.configFile == null) != (cfg.sql.configuration == null)
       );
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/nextcloud.nix b/nixos/modules/services/monitoring/prometheus/exporters/nextcloud.nix
index 28add020f5c..28a3eb6a134 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/nextcloud.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/nextcloud.nix
@@ -23,10 +23,12 @@ in
       description = lib.mdDoc ''
         Username for connecting to Nextcloud.
         Note that this account needs to have admin privileges in Nextcloud.
+        Unused when using token authentication.
       '';
     };
     passwordFile = mkOption {
-      type = types.path;
+      type = types.nullOr types.path;
+      default = null;
       example = "/path/to/password-file";
       description = lib.mdDoc ''
         File containing the password for connecting to Nextcloud.
@@ -34,9 +36,9 @@ in
       '';
     };
     tokenFile = mkOption {
-      type = types.path;
+      type = types.nullOr types.path;
+      default = null;
       example = "/path/to/token-file";
-      default = "";
       description = lib.mdDoc ''
         File containing the token for connecting to Nextcloud.
         Make sure that this file is readable by the exporter user.
@@ -58,12 +60,13 @@ in
           --addr ${cfg.listenAddress}:${toString cfg.port} \
           --timeout ${cfg.timeout} \
           --server ${cfg.url} \
-          ${if cfg.tokenFile == "" then ''
+          ${if cfg.passwordFile != null then ''
             --username ${cfg.username} \
             --password ${escapeShellArg "@${cfg.passwordFile}"} \
-         '' else ''
+          '' else ''
             --auth-token ${escapeShellArg "@${cfg.tokenFile}"} \
-         ''} ${concatStringsSep " \\\n  " cfg.extraFlags}'';
+          ''} \
+          ${concatStringsSep " \\\n  " cfg.extraFlags}'';
     };
   };
 }
diff --git a/nixos/modules/services/web-apps/calibre-web.nix b/nixos/modules/services/web-apps/calibre-web.nix
index 143decfc091..80567db10c9 100644
--- a/nixos/modules/services/web-apps/calibre-web.nix
+++ b/nixos/modules/services/web-apps/calibre-web.nix
@@ -10,6 +10,8 @@ in
     services.calibre-web = {
       enable = mkEnableOption (lib.mdDoc "Calibre-Web");
 
+      package = lib.mkPackageOption pkgs "calibre-web" { };
+
       listen = {
         ip = mkOption {
           type = types.str;
@@ -73,6 +75,8 @@ in
           '';
         };
 
+        enableKepubify = mkEnableOption (lib.mdDoc "kebup conversion support");
+
         enableBookUploading = mkOption {
           type = types.bool;
           default = false;
@@ -106,7 +110,7 @@ in
     systemd.services.calibre-web = let
       appDb = "/var/lib/${cfg.dataDir}/app.db";
       gdriveDb = "/var/lib/${cfg.dataDir}/gdrive.db";
-      calibreWebCmd = "${pkgs.calibre-web}/bin/calibre-web -p ${appDb} -g ${gdriveDb}";
+      calibreWebCmd = "${cfg.package}/bin/calibre-web -p ${appDb} -g ${gdriveDb}";
 
       settings = concatStringsSep ", " (
         [
@@ -117,6 +121,7 @@ in
         ]
         ++ optional (cfg.options.calibreLibrary != null) "config_calibre_dir = '${cfg.options.calibreLibrary}'"
         ++ optional cfg.options.enableBookConversion "config_converterpath = '${pkgs.calibre}/bin/ebook-convert'"
+        ++ optional cfg.options.enableKepubify "config_kepubifypath = '${pkgs.kepubify}/bin/kepubify'"
       );
     in
       {
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index e362d9cb323..a9bac3346b9 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -673,9 +673,11 @@ in {
   qboot = handleTestOn ["x86_64-linux" "i686-linux"] ./qboot.nix {};
   qemu-vm-restrictnetwork = handleTest ./qemu-vm-restrictnetwork.nix {};
   qemu-vm-volatile-root = runTest ./qemu-vm-volatile-root.nix;
-  quorum = handleTest ./quorum.nix {};
-  quake3 = handleTest ./quake3.nix {};
+  qgis = handleTest ./qgis.nix { qgisPackage = pkgs.qgis; };
+  qgis-ltr = handleTest ./qgis.nix { qgisPackage = pkgs.qgis-ltr; };
   qownnotes = handleTest ./qownnotes.nix {};
+  quake3 = handleTest ./quake3.nix {};
+  quorum = handleTest ./quorum.nix {};
   rabbitmq = handleTest ./rabbitmq.nix {};
   radarr = handleTest ./radarr.nix {};
   radicale = handleTest ./radicale.nix {};
diff --git a/nixos/tests/qgis.nix b/nixos/tests/qgis.nix
new file mode 100644
index 00000000000..7706b8c0774
--- /dev/null
+++ b/nixos/tests/qgis.nix
@@ -0,0 +1,30 @@
+import ./make-test-python.nix ({ pkgs, lib, qgisPackage, ... }:
+  let
+    testScript = pkgs.writeTextFile {
+      name = "qgis-test.py";
+      text = (builtins.readFile ../../pkgs/applications/gis/qgis/test.py);
+    };
+  in
+  {
+    name = "qgis";
+    meta = {
+      maintainers = with lib; [ teams.geospatial.members ];
+    };
+
+    nodes = {
+      machine = { pkgs, ... }: {
+        virtualisation.diskSize = 2 * 1024;
+
+        imports = [ ./common/x11.nix ];
+        environment.systemPackages = [ qgisPackage ];
+
+      };
+    };
+
+    testScript = ''
+      start_all()
+
+      machine.succeed("${qgisPackage}/bin/qgis --version | grep 'QGIS ${qgisPackage.version}'")
+      machine.succeed("${qgisPackage}/bin/qgis --code ${testScript}")
+    '';
+  })
diff --git a/pkgs/applications/audio/baudline/default.nix b/pkgs/applications/audio/baudline/default.nix
index 6e5c53091d7..4856a0ed017 100644
--- a/pkgs/applications/audio/baudline/default.nix
+++ b/pkgs/applications/audio/baudline/default.nix
@@ -13,12 +13,12 @@ stdenv.mkDerivation rec {
   src =
     if stdenv.hostPlatform.system == "x86_64-linux" then
       fetchurl {
-        url = "http://www.baudline.com/baudline_${version}_linux_x86_64.tar.gz";
+        url = "https://www.baudline.com/baudline_${version}_linux_x86_64.tar.gz";
         sha256 = "09fn0046i69in1jpizkzbaq5ggij0mpflcsparyskm3wh71mbzvr";
       }
     else if stdenv.hostPlatform.system == "i686-linux" then
       fetchurl {
-        url = "http://www.baudline.com/baudline_${version}_linux_i686.tar.gz";
+        url = "https://www.baudline.com/baudline_${version}_linux_i686.tar.gz";
         sha256 = "1waip5pmcf5ffcfvn8lf1rvsaq2ab66imrbfqs777scz7k8fhhjb";
       }
     else
diff --git a/pkgs/applications/audio/jamulus/default.nix b/pkgs/applications/audio/jamulus/default.nix
index 8c67c0fd7c1..8ad35f34f7e 100644
--- a/pkgs/applications/audio/jamulus/default.nix
+++ b/pkgs/applications/audio/jamulus/default.nix
@@ -1,18 +1,33 @@
-{ mkDerivation, lib, fetchFromGitHub, pkg-config, qtscript, qmake, libjack2
+{ mkDerivation
+, lib
+, fetchFromGitHub
+, pkg-config
+, qtscript
+, qmake
+, qtbase
+, qtmultimedia
+, qtdeclarative
+, libjack2
 }:
 
 mkDerivation rec {
   pname = "jamulus";
-  version = "3.8.2";
+  version = "3.10.0";
   src = fetchFromGitHub {
     owner = "jamulussoftware";
     repo = "jamulus";
     rev = "r${lib.replaceStrings [ "." ] [ "_" ] version}";
-    sha256 = "sha256-K2HznkntDhp+I8DHJk5Cuh5cR8yjwfzX+pGGzS8yVLQ=";
+    hash = "sha256-uqBre1Hcdmmifm/gii3MlP9LiAovQVsAaPZTmVm1nnM=";
   };
 
   nativeBuildInputs = [ pkg-config qmake ];
-  buildInputs = [ qtscript libjack2 ];
+  buildInputs = [
+    qtscript
+    qtbase
+    qtmultimedia
+    qtdeclarative
+    libjack2
+  ];
 
   qmakeFlags = [ "CONFIG+=noupcasename" ];
 
@@ -22,6 +37,7 @@ mkDerivation rec {
     homepage = "https://github.com/corrados/jamulus/wiki";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.linux;
+    mainProgram = "jamulus";
     maintainers = [ lib.maintainers.seb314 ];
   };
 }
diff --git a/pkgs/applications/editors/jetbrains/default.nix b/pkgs/applications/editors/jetbrains/default.nix
index 91b803babda..07372413b73 100644
--- a/pkgs/applications/editors/jetbrains/default.nix
+++ b/pkgs/applications/editors/jetbrains/default.nix
@@ -291,6 +291,51 @@ let
       };
     });
 
+  buildRustRover = { pname, version, src, license, description, wmClass, buildNumber, ... }:
+    (mkJetBrainsProduct {
+      inherit pname version src wmClass jdk buildNumber;
+      product = "RustRover";
+      meta = with lib; {
+        homepage = "https://www.jetbrains.com/rust/";
+        inherit description license platforms;
+        longDescription = description;
+      };
+    }).overrideAttrs (attrs: {
+      nativeBuildInputs = (attrs.nativeBuildInputs or [ ]) ++ lib.optionals (stdenv.isLinux) [
+        autoPatchelfHook
+      ];
+      buildInputs = (attrs.buildInputs or [ ]) ++ lib.optionals (stdenv.isLinux) [
+        python3
+        stdenv.cc.cc
+        libdbusmenu
+        openssl.out
+        libxcrypt-legacy
+      ];
+      dontAutoPatchelf = true;
+      postFixup = (attrs.postFixup or "") + lib.optionalString (stdenv.isLinux) ''
+        (
+          cd $out/rust-rover
+
+          # Copied over from clion (gdb seems to have a couple of patches)
+          ls -d $PWD/bin/gdb/linux/x64/lib/python3.8/lib-dynload/* |
+          xargs patchelf \
+            --replace-needed libssl.so.10 libssl.so \
+            --replace-needed libcrypto.so.10 libcrypto.so
+
+          ls -d $PWD/bin/lldb/linux/x64/lib/python3.8/lib-dynload/* |
+          xargs patchelf \
+            --replace-needed libssl.so.10 libssl.so \
+            --replace-needed libcrypto.so.10 libcrypto.so
+
+          autoPatchelf $PWD/bin
+
+          interp="$(cat $NIX_CC/nix-support/dynamic-linker)"
+          patchelf --set-interpreter $interp $PWD/plugins/intellij-rust/bin/linux/x86-64/intellij-rust-native-helper
+          chmod +x $PWD/plugins/intellij-rust/bin/linux/x86-64/intellij-rust-native-helper
+        )
+      '';
+    });
+
   buildWebStorm = { pname, version, src, license, description, wmClass, buildNumber, ... }:
     (mkJetBrainsProduct {
       inherit pname version src wmClass jdk buildNumber;
@@ -500,6 +545,20 @@ in
     update-channel = products.ruby-mine.update-channel;
   };
 
+  rust-rover = buildRustRover rec {
+    pname = "rust-rover";
+    version = products.rust-rover.version;
+    buildNumber = products.rust-rover.build_number;
+    description = "Rust IDE";
+    license = lib.licenses.unfree;
+    src = fetchurl {
+      url = products.rust-rover.url;
+      sha256 = products.rust-rover.sha256;
+    };
+    wmClass = "jetbrains-rustrover";
+    update-channel = products.rust-rover.update-channel;
+  };
+
   webstorm = buildWebStorm rec {
     pname = "webstorm";
     version = products.webstorm.version;
diff --git a/pkgs/applications/editors/jetbrains/plugins/plugins.json b/pkgs/applications/editors/jetbrains/plugins/plugins.json
index 099fc185832..dd86e3e807e 100644
--- a/pkgs/applications/editors/jetbrains/plugins/plugins.json
+++ b/pkgs/applications/editors/jetbrains/plugins/plugins.json
@@ -13,6 +13,7 @@
         "pycharm-professional",
         "rider",
         "ruby-mine",
+        "rust-rover",
         "webstorm"
       ],
       "builds": {
@@ -22,7 +23,10 @@
         "232.9559.61": "https://plugins.jetbrains.com/files/164/390591/IdeaVim-2.5.1-signed.zip",
         "232.9559.64": "https://plugins.jetbrains.com/files/164/390591/IdeaVim-2.5.1-signed.zip",
         "232.9921.42": "https://plugins.jetbrains.com/files/164/390591/IdeaVim-2.5.1-signed.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/164/390591/IdeaVim-2.5.1-signed.zip"
+        "232.9921.46": "https://plugins.jetbrains.com/files/164/390591/IdeaVim-2.5.1-signed.zip",
+        "232.9921.47": "https://plugins.jetbrains.com/files/164/390591/IdeaVim-2.5.1-signed.zip",
+        "232.9921.48": "https://plugins.jetbrains.com/files/164/390591/IdeaVim-2.5.1-signed.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/164/390591/IdeaVim-2.5.1-signed.zip"
       },
       "name": "ideavim"
     },
@@ -48,6 +52,7 @@
         "pycharm-professional",
         "rider",
         "ruby-mine",
+        "rust-rover",
         "webstorm"
       ],
       "builds": {
@@ -57,7 +62,10 @@
         "232.9559.61": null,
         "232.9559.64": null,
         "232.9921.42": null,
-        "232.9921.47": null
+        "232.9921.46": null,
+        "232.9921.47": null,
+        "232.9921.48": null,
+        "232.9921.53": null
       },
       "name": "kotlin"
     },
@@ -74,6 +82,7 @@
         "pycharm-professional",
         "rider",
         "ruby-mine",
+        "rust-rover",
         "webstorm"
       ],
       "builds": {
@@ -83,7 +92,10 @@
         "232.9559.61": "https://plugins.jetbrains.com/files/6981/383851/ini-232.9559.64.zip",
         "232.9559.64": "https://plugins.jetbrains.com/files/6981/383851/ini-232.9559.64.zip",
         "232.9921.42": "https://plugins.jetbrains.com/files/6981/393737/ini-232.9921.36.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/6981/393737/ini-232.9921.36.zip"
+        "232.9921.46": "https://plugins.jetbrains.com/files/6981/393737/ini-232.9921.36.zip",
+        "232.9921.47": "https://plugins.jetbrains.com/files/6981/393737/ini-232.9921.36.zip",
+        "232.9921.48": "https://plugins.jetbrains.com/files/6981/393737/ini-232.9921.36.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/6981/393737/ini-232.9921.36.zip"
       },
       "name": "ini"
     },
@@ -114,13 +126,15 @@
         "datagrip",
         "goland",
         "idea-community",
-        "rider"
+        "rider",
+        "rust-rover"
       ],
       "builds": {
         "232.9559.28": "https://plugins.jetbrains.com/files/7322/381781/python-ce-232.9559.62.zip",
         "232.9559.61": "https://plugins.jetbrains.com/files/7322/381781/python-ce-232.9559.62.zip",
-        "232.9559.64": "https://plugins.jetbrains.com/files/7322/381781/python-ce-232.9559.62.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/7322/395441/python-ce-232.9921.47.zip"
+        "232.9921.46": "https://plugins.jetbrains.com/files/7322/395441/python-ce-232.9921.47.zip",
+        "232.9921.47": "https://plugins.jetbrains.com/files/7322/395441/python-ce-232.9921.47.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/7322/395441/python-ce-232.9921.47.zip"
       },
       "name": "python-community-edition"
     },
@@ -141,12 +155,14 @@
       ],
       "builds": {
         "223.8836.1185": "https://plugins.jetbrains.com/files/8182/329558/intellij-rust-0.4.194.5382-223.zip",
-        "232.9559.28": "https://plugins.jetbrains.com/files/8182/373256/intellij-rust-0.4.200.5421-232.zip",
-        "232.9559.58": "https://plugins.jetbrains.com/files/8182/373256/intellij-rust-0.4.200.5421-232.zip",
-        "232.9559.61": "https://plugins.jetbrains.com/files/8182/373256/intellij-rust-0.4.200.5421-232.zip",
-        "232.9559.64": "https://plugins.jetbrains.com/files/8182/373256/intellij-rust-0.4.200.5421-232.zip",
-        "232.9921.42": "https://plugins.jetbrains.com/files/8182/373256/intellij-rust-0.4.200.5421-232.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/8182/373256/intellij-rust-0.4.200.5421-232.zip"
+        "232.9559.28": "https://plugins.jetbrains.com/files/8182/395553/intellij-rust-0.4.201.5424-232.zip",
+        "232.9559.58": "https://plugins.jetbrains.com/files/8182/395553/intellij-rust-0.4.201.5424-232.zip",
+        "232.9559.61": "https://plugins.jetbrains.com/files/8182/395553/intellij-rust-0.4.201.5424-232.zip",
+        "232.9559.64": "https://plugins.jetbrains.com/files/8182/395553/intellij-rust-0.4.201.5424-232.zip",
+        "232.9921.42": "https://plugins.jetbrains.com/files/8182/395553/intellij-rust-0.4.201.5424-232.zip",
+        "232.9921.47": "https://plugins.jetbrains.com/files/8182/395553/intellij-rust-0.4.201.5424-232.zip",
+        "232.9921.48": "https://plugins.jetbrains.com/files/8182/395553/intellij-rust-0.4.201.5424-232.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/8182/395553/intellij-rust-0.4.201.5424-232.zip"
       },
       "name": "-deprecated-rust"
     },
@@ -172,7 +188,9 @@
         "232.9559.61": "https://plugins.jetbrains.com/files/8182/372556/intellij-rust-0.4.200.5420-232-beta.zip",
         "232.9559.64": "https://plugins.jetbrains.com/files/8182/372556/intellij-rust-0.4.200.5420-232-beta.zip",
         "232.9921.42": "https://plugins.jetbrains.com/files/8182/372556/intellij-rust-0.4.200.5420-232-beta.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/8182/372556/intellij-rust-0.4.200.5420-232-beta.zip"
+        "232.9921.47": "https://plugins.jetbrains.com/files/8182/372556/intellij-rust-0.4.200.5420-232-beta.zip",
+        "232.9921.48": "https://plugins.jetbrains.com/files/8182/372556/intellij-rust-0.4.200.5420-232-beta.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/8182/372556/intellij-rust-0.4.200.5420-232-beta.zip"
       },
       "name": "-deprecated-rust-beta"
     },
@@ -188,8 +206,10 @@
       ],
       "builds": {
         "232.9559.58": "https://plugins.jetbrains.com/files/8554/374977/featuresTrainer-232.9559.6.zip",
-        "232.9559.64": "https://plugins.jetbrains.com/files/8554/374977/featuresTrainer-232.9559.6.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/8554/374977/featuresTrainer-232.9559.6.zip"
+        "232.9921.42": "https://plugins.jetbrains.com/files/8554/374977/featuresTrainer-232.9559.6.zip",
+        "232.9921.47": "https://plugins.jetbrains.com/files/8554/374977/featuresTrainer-232.9559.6.zip",
+        "232.9921.48": "https://plugins.jetbrains.com/files/8554/374977/featuresTrainer-232.9559.6.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/8554/374977/featuresTrainer-232.9559.6.zip"
       },
       "name": "ide-features-trainer"
     },
@@ -206,6 +226,7 @@
         "pycharm-professional",
         "rider",
         "ruby-mine",
+        "rust-rover",
         "webstorm"
       ],
       "builds": {
@@ -215,7 +236,10 @@
         "232.9559.61": "https://plugins.jetbrains.com/files/8607/370632/NixIDEA-0.4.0.10.zip",
         "232.9559.64": "https://plugins.jetbrains.com/files/8607/370632/NixIDEA-0.4.0.10.zip",
         "232.9921.42": "https://plugins.jetbrains.com/files/8607/370632/NixIDEA-0.4.0.10.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/8607/370632/NixIDEA-0.4.0.10.zip"
+        "232.9921.46": "https://plugins.jetbrains.com/files/8607/370632/NixIDEA-0.4.0.10.zip",
+        "232.9921.47": "https://plugins.jetbrains.com/files/8607/370632/NixIDEA-0.4.0.10.zip",
+        "232.9921.48": "https://plugins.jetbrains.com/files/8607/370632/NixIDEA-0.4.0.10.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/8607/370632/NixIDEA-0.4.0.10.zip"
       },
       "name": "nixidea"
     },
@@ -241,6 +265,7 @@
         "pycharm-professional",
         "rider",
         "ruby-mine",
+        "rust-rover",
         "webstorm"
       ],
       "builds": {
@@ -250,7 +275,10 @@
         "232.9559.61": "https://plugins.jetbrains.com/files/10037/358813/CSVEditor-3.2.1-232.zip",
         "232.9559.64": "https://plugins.jetbrains.com/files/10037/358813/CSVEditor-3.2.1-232.zip",
         "232.9921.42": "https://plugins.jetbrains.com/files/10037/358813/CSVEditor-3.2.1-232.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/10037/358813/CSVEditor-3.2.1-232.zip"
+        "232.9921.46": "https://plugins.jetbrains.com/files/10037/358813/CSVEditor-3.2.1-232.zip",
+        "232.9921.47": "https://plugins.jetbrains.com/files/10037/358813/CSVEditor-3.2.1-232.zip",
+        "232.9921.48": "https://plugins.jetbrains.com/files/10037/358813/CSVEditor-3.2.1-232.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/10037/358813/CSVEditor-3.2.1-232.zip"
       },
       "name": "csv-editor"
     },
@@ -267,6 +295,7 @@
         "pycharm-professional",
         "rider",
         "ruby-mine",
+        "rust-rover",
         "webstorm"
       ],
       "builds": {
@@ -276,7 +305,10 @@
         "232.9559.61": "https://plugins.jetbrains.com/files/12062/364117/keymap-vscode-232.8660.88.zip",
         "232.9559.64": "https://plugins.jetbrains.com/files/12062/364117/keymap-vscode-232.8660.88.zip",
         "232.9921.42": "https://plugins.jetbrains.com/files/12062/364117/keymap-vscode-232.8660.88.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/12062/364117/keymap-vscode-232.8660.88.zip"
+        "232.9921.46": "https://plugins.jetbrains.com/files/12062/364117/keymap-vscode-232.8660.88.zip",
+        "232.9921.47": "https://plugins.jetbrains.com/files/12062/364117/keymap-vscode-232.8660.88.zip",
+        "232.9921.48": "https://plugins.jetbrains.com/files/12062/364117/keymap-vscode-232.8660.88.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/12062/364117/keymap-vscode-232.8660.88.zip"
       },
       "name": "vscode-keymap"
     },
@@ -293,6 +325,7 @@
         "pycharm-professional",
         "rider",
         "ruby-mine",
+        "rust-rover",
         "webstorm"
       ],
       "builds": {
@@ -302,7 +335,10 @@
         "232.9559.61": "https://plugins.jetbrains.com/files/12559/364124/keymap-eclipse-232.8660.88.zip",
         "232.9559.64": "https://plugins.jetbrains.com/files/12559/364124/keymap-eclipse-232.8660.88.zip",
         "232.9921.42": "https://plugins.jetbrains.com/files/12559/364124/keymap-eclipse-232.8660.88.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/12559/364124/keymap-eclipse-232.8660.88.zip"
+        "232.9921.46": "https://plugins.jetbrains.com/files/12559/364124/keymap-eclipse-232.8660.88.zip",
+        "232.9921.47": "https://plugins.jetbrains.com/files/12559/364124/keymap-eclipse-232.8660.88.zip",
+        "232.9921.48": "https://plugins.jetbrains.com/files/12559/364124/keymap-eclipse-232.8660.88.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/12559/364124/keymap-eclipse-232.8660.88.zip"
       },
       "name": "eclipse-keymap"
     },
@@ -319,6 +355,7 @@
         "pycharm-professional",
         "rider",
         "ruby-mine",
+        "rust-rover",
         "webstorm"
       ],
       "builds": {
@@ -328,7 +365,10 @@
         "232.9559.61": "https://plugins.jetbrains.com/files/13017/364038/keymap-visualStudio-232.8660.88.zip",
         "232.9559.64": "https://plugins.jetbrains.com/files/13017/364038/keymap-visualStudio-232.8660.88.zip",
         "232.9921.42": "https://plugins.jetbrains.com/files/13017/364038/keymap-visualStudio-232.8660.88.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/13017/364038/keymap-visualStudio-232.8660.88.zip"
+        "232.9921.46": "https://plugins.jetbrains.com/files/13017/364038/keymap-visualStudio-232.8660.88.zip",
+        "232.9921.47": "https://plugins.jetbrains.com/files/13017/364038/keymap-visualStudio-232.8660.88.zip",
+        "232.9921.48": "https://plugins.jetbrains.com/files/13017/364038/keymap-visualStudio-232.8660.88.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/13017/364038/keymap-visualStudio-232.8660.88.zip"
       },
       "name": "visual-studio-keymap"
     },
@@ -345,6 +385,7 @@
         "pycharm-professional",
         "rider",
         "ruby-mine",
+        "rust-rover",
         "webstorm"
       ],
       "builds": {
@@ -354,7 +395,10 @@
         "232.9559.61": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
         "232.9559.64": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
         "232.9921.42": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
-        "232.9921.47": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar"
+        "232.9921.46": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
+        "232.9921.47": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
+        "232.9921.48": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
+        "232.9921.53": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar"
       },
       "name": "darcula-pitch-black"
     },
@@ -371,6 +415,7 @@
         "pycharm-professional",
         "rider",
         "ruby-mine",
+        "rust-rover",
         "webstorm"
       ],
       "builds": {
@@ -380,7 +425,10 @@
         "232.9559.61": "https://plugins.jetbrains.com/files/17718/391768/github-copilot-intellij-1.2.22.3129.zip",
         "232.9559.64": "https://plugins.jetbrains.com/files/17718/391768/github-copilot-intellij-1.2.22.3129.zip",
         "232.9921.42": "https://plugins.jetbrains.com/files/17718/391768/github-copilot-intellij-1.2.22.3129.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/17718/391768/github-copilot-intellij-1.2.22.3129.zip"
+        "232.9921.46": "https://plugins.jetbrains.com/files/17718/391768/github-copilot-intellij-1.2.22.3129.zip",
+        "232.9921.47": "https://plugins.jetbrains.com/files/17718/391768/github-copilot-intellij-1.2.22.3129.zip",
+        "232.9921.48": "https://plugins.jetbrains.com/files/17718/391768/github-copilot-intellij-1.2.22.3129.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/17718/391768/github-copilot-intellij-1.2.22.3129.zip"
       },
       "name": "github-copilot"
     },
@@ -397,6 +445,7 @@
         "pycharm-professional",
         "rider",
         "ruby-mine",
+        "rust-rover",
         "webstorm"
       ],
       "builds": {
@@ -406,7 +455,10 @@
         "232.9559.61": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
         "232.9559.64": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
         "232.9921.42": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
-        "232.9921.47": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip"
+        "232.9921.46": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
+        "232.9921.47": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
+        "232.9921.48": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
+        "232.9921.53": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip"
       },
       "name": "netbeans-6-5-keymap"
     }
@@ -435,7 +487,7 @@
     "https://plugins.jetbrains.com/files/7322/395441/python-ce-232.9921.47.zip": "sha256-2oRXtVv9ima8W6vywkDX4IeUGwfVNEo4rsqYBmmWhKc=",
     "https://plugins.jetbrains.com/files/8182/329558/intellij-rust-0.4.194.5382-223.zip": "sha256-AgaKH4ZaxLhumk1P9BVJGpvluKnpYIulCDIRQpaWlKA=",
     "https://plugins.jetbrains.com/files/8182/372556/intellij-rust-0.4.200.5420-232-beta.zip": "sha256-ZlSfPvhPixEz5JxU9qyG0nL3jiSjr4gKaf/xYcQI1vQ=",
-    "https://plugins.jetbrains.com/files/8182/373256/intellij-rust-0.4.200.5421-232.zip": "sha256-NeAF3umfaSODjpd6J1dT8Ei5hF8g8OA+sgk7VjBodoU=",
+    "https://plugins.jetbrains.com/files/8182/395553/intellij-rust-0.4.201.5424-232.zip": "sha256-pVwBEyUCx/DJET9uIm8vxFeChE8FskWyfLjDpfg2mAE=",
     "https://plugins.jetbrains.com/files/8554/374977/featuresTrainer-232.9559.6.zip": "sha256-HpdQdWJLTWuoYnHFmDB8JIlcuiu+hVfvUsRwvMcQqzw=",
     "https://plugins.jetbrains.com/files/8607/370632/NixIDEA-0.4.0.10.zip": "sha256-pq9gFDjNmgZAXe11f6SNdN6g0xu18h/06J5L2lxUwgk=",
     "https://plugins.jetbrains.com/files/9568/390449/go-plugin-232.9921.28.zip": "sha256-NgF2KFglAczb2Aw5NMlbzFBylGW9LDWpNvnZlX+Pt3o="
diff --git a/pkgs/applications/editors/jetbrains/plugins/tests.nix b/pkgs/applications/editors/jetbrains/plugins/tests.nix
index 6047d21f43b..31c31ce3a77 100644
--- a/pkgs/applications/editors/jetbrains/plugins/tests.nix
+++ b/pkgs/applications/editors/jetbrains/plugins/tests.nix
@@ -18,6 +18,7 @@
         pycharm-professional
         rider
         ruby-mine
+        rust-rover
         webstorm
       ];
       paths = builtins.concatStringsSep " " ides;
diff --git a/pkgs/applications/editors/jetbrains/plugins/update_plugins.py b/pkgs/applications/editors/jetbrains/plugins/update_plugins.py
index cf02aa7215d..dee1c9ad6b4 100755
--- a/pkgs/applications/editors/jetbrains/plugins/update_plugins.py
+++ b/pkgs/applications/editors/jetbrains/plugins/update_plugins.py
@@ -36,6 +36,7 @@ FRIENDLY_TO_PLUGIN = {
     "pycharm-professional": "PYCHARM",
     "rider": "RIDER",
     "ruby-mine": "RUBYMINE",
+    "rust-rover": "RUST",
     "webstorm": "WEBSTORM"
 }
 PLUGIN_TO_FRIENDLY = {j: i for i, j in FRIENDLY_TO_PLUGIN.items()}
diff --git a/pkgs/applications/editors/jetbrains/versions.json b/pkgs/applications/editors/jetbrains/versions.json
index ecfd5f5a7d3..b627ea85505 100644
--- a/pkgs/applications/editors/jetbrains/versions.json
+++ b/pkgs/applications/editors/jetbrains/versions.json
@@ -19,26 +19,26 @@
     "dataspell": {
       "update-channel": "DataSpell RELEASE",
       "url-template": "https://download.jetbrains.com/python/dataspell-{version}.tar.gz",
-      "version": "2023.2.1",
-      "sha256": "0faf17adf9a071ef8813c1b43e8321728990ba8e4a2c284915cb3ce9451fca80",
-      "url": "https://download.jetbrains.com/python/dataspell-2023.2.1.tar.gz",
-      "build_number": "232.9559.63"
+      "version": "2023.2.2",
+      "sha256": "30a7b848d004c12e8a5ce668dea6939f49b2aaf0bcce443f02987b4ea38179ab",
+      "url": "https://download.jetbrains.com/python/dataspell-2023.2.2.tar.gz",
+      "build_number": "232.9921.48"
     },
     "gateway": {
       "update-channel": "Gateway RELEASE",
       "url-template": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}.tar.gz",
-      "version": "2023.2.1",
-      "sha256": "05cfcaaebfa171297eff94ca44fa58500bd7d33db3dc6fa55f5f8501c449c9df",
-      "url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2023.2.1.tar.gz",
-      "build_number": "232.9559.62"
+      "version": "2023.2.2",
+      "sha256": "685b3eb786134137be41beaca80a0edb9aaed9e24b98cef8006fe840972b990f",
+      "url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2023.2.2.tar.gz",
+      "build_number": "232.9921.47"
     },
     "goland": {
       "update-channel": "GoLand RELEASE",
       "url-template": "https://download.jetbrains.com/go/goland-{version}.tar.gz",
-      "version": "2023.2.1",
-      "sha256": "7d5c83cb43286d57b045d1d837185633be13673a5e0e443773778e0d4936647a",
-      "url": "https://download.jetbrains.com/go/goland-2023.2.1.tar.gz",
-      "build_number": "232.9559.64"
+      "version": "2023.2.2",
+      "sha256": "e2951dfcd80556f29378d55c8d4ebfbc6e599e14ada17a06386729221d71353b",
+      "url": "https://download.jetbrains.com/go/goland-2023.2.2.tar.gz",
+      "build_number": "232.9921.53"
     },
     "idea-community": {
       "update-channel": "IntelliJ IDEA RELEASE",
@@ -100,18 +100,26 @@
     "ruby-mine": {
       "update-channel": "RubyMine RELEASE",
       "url-template": "https://download.jetbrains.com/ruby/RubyMine-{version}.tar.gz",
-      "version": "2023.2.1",
-      "sha256": "13e56acc36e52e52e91eb23d5166144be47511ee466601efea82dc891bad3bfe",
-      "url": "https://download.jetbrains.com/ruby/RubyMine-2023.2.1.tar.gz",
-      "build_number": "232.9559.58"
+      "version": "2023.2.2",
+      "sha256": "9f14f95ef1952d6b85e13a596d00e8b57ab35a4d07a96ee33d4ceebbd113a827",
+      "url": "https://download.jetbrains.com/ruby/RubyMine-2023.2.2.tar.gz",
+      "build_number": "232.9921.48"
+    },
+    "rust-rover": {
+      "update-channel": "RustRover EAP",
+      "url-template": "https://download.jetbrains.com/rustrover/RustRover-{version}.tar.gz",
+      "version": "2023.2",
+      "sha256": "5a51bcae179467e9c6440bc0c31bffd27c6fc58d593a0cbecd5aeb51508d27b6",
+      "url": "https://download.jetbrains.com/rustrover/RustRover-232.9921.46.tar.gz",
+      "build_number": "232.9921.46"
     },
     "webstorm": {
       "update-channel": "WebStorm RELEASE",
       "url-template": "https://download.jetbrains.com/webstorm/WebStorm-{version}.tar.gz",
-      "version": "2023.2.1",
-      "sha256": "0487d1e80b3d538c968ab6437d950a504166b0c266346d52969bfb828820a642",
-      "url": "https://download.jetbrains.com/webstorm/WebStorm-2023.2.1.tar.gz",
-      "build_number": "232.9559.58"
+      "version": "2023.2.2",
+      "sha256": "10c1203620258bf4b0c952d809f50ea954f80d1ed60098917a4c64fb2718b931",
+      "url": "https://download.jetbrains.com/webstorm/WebStorm-2023.2.2.tar.gz",
+      "build_number": "232.9921.42"
     }
   },
   "x86_64-darwin": {
@@ -134,26 +142,26 @@
     "dataspell": {
       "update-channel": "DataSpell RELEASE",
       "url-template": "https://download.jetbrains.com/python/dataspell-{version}.dmg",
-      "version": "2023.2.1",
-      "sha256": "447ed7d593ea225af53ef54023cb29cfb906109961011d485eefbf0f0879451b",
-      "url": "https://download.jetbrains.com/python/dataspell-2023.2.1.dmg",
-      "build_number": "232.9559.63"
+      "version": "2023.2.2",
+      "sha256": "24fb47966c891bf3a2a827df38885d48509c6e2e68a7cc03145ad28493adb76b",
+      "url": "https://download.jetbrains.com/python/dataspell-2023.2.2.dmg",
+      "build_number": "232.9921.48"
     },
     "gateway": {
       "update-channel": "Gateway RELEASE",
       "url-template": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}.dmg",
-      "version": "2023.2.1",
-      "sha256": "a0d4a889bc0688bfb03add22f45d878b99e5d85faf24f628345121b8689704e0",
-      "url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2023.2.1.dmg",
-      "build_number": "232.9559.62"
+      "version": "2023.2.2",
+      "sha256": "cfa68c2b1290f1d51aa37a918a79342e42b6a50b2563524757ec8bd700008fba",
+      "url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2023.2.2.dmg",
+      "build_number": "232.9921.47"
     },
     "goland": {
       "update-channel": "GoLand RELEASE",
       "url-template": "https://download.jetbrains.com/go/goland-{version}.dmg",
-      "version": "2023.2.1",
-      "sha256": "63f26b3a2a8aa7fb93b5a0a61ca9f4e4f75688ee9451631b875829dee013e561",
-      "url": "https://download.jetbrains.com/go/goland-2023.2.1.dmg",
-      "build_number": "232.9559.64"
+      "version": "2023.2.2",
+      "sha256": "d60e55ecd6208d2af871c154320f988622cd52ca4b202cd9a90c2de7750e8e23",
+      "url": "https://download.jetbrains.com/go/goland-2023.2.2.dmg",
+      "build_number": "232.9921.53"
     },
     "idea-community": {
       "update-channel": "IntelliJ IDEA RELEASE",
@@ -215,18 +223,26 @@
     "ruby-mine": {
       "update-channel": "RubyMine RELEASE",
       "url-template": "https://download.jetbrains.com/ruby/RubyMine-{version}.dmg",
-      "version": "2023.2.1",
-      "sha256": "1ae42d9f0af0e293406a7ab6042299cc29a3ae4f6d023656bebc0b1d78ad0a4b",
-      "url": "https://download.jetbrains.com/ruby/RubyMine-2023.2.1.dmg",
-      "build_number": "232.9559.58"
+      "version": "2023.2.2",
+      "sha256": "2b77f24770813c0cf55892effde8c0a6a5af1c9f4b08c1c8ae9163e503afc5d3",
+      "url": "https://download.jetbrains.com/ruby/RubyMine-2023.2.2.dmg",
+      "build_number": "232.9921.48"
+    },
+    "rust-rover": {
+      "update-channel": "RustRover EAP",
+      "url-template": "https://download.jetbrains.com/rustrover/RustRover-{version}.dmg",
+      "version": "2023.2",
+      "sha256": "4c7193acf07f44b91512d8b4c04c88068b8599e76150a81dfd728046910a0929",
+      "url": "https://download.jetbrains.com/rustrover/RustRover-232.9921.46.dmg",
+      "build_number": "232.9921.46"
     },
     "webstorm": {
       "update-channel": "WebStorm RELEASE",
       "url-template": "https://download.jetbrains.com/webstorm/WebStorm-{version}.dmg",
-      "version": "2023.2.1",
-      "sha256": "c42ba4e262a91bed368168ef8498058ccaef560bce3f72d86fc80e5492cad6f1",
-      "url": "https://download.jetbrains.com/webstorm/WebStorm-2023.2.1.dmg",
-      "build_number": "232.9559.58"
+      "version": "2023.2.2",
+      "sha256": "3733f1968925681a693a09053e62ba4a800b51a062f5e9772658a5fba82d2fa8",
+      "url": "https://download.jetbrains.com/webstorm/WebStorm-2023.2.2.dmg",
+      "build_number": "232.9921.42"
     }
   },
   "aarch64-darwin": {
@@ -249,26 +265,26 @@
     "dataspell": {
       "update-channel": "DataSpell RELEASE",
       "url-template": "https://download.jetbrains.com/python/dataspell-{version}-aarch64.dmg",
-      "version": "2023.2.1",
-      "sha256": "a17d036b2d425619941d90ab7ae6597c8d5aad4a2e1446d6ccbc3ad1f844852d",
-      "url": "https://download.jetbrains.com/python/dataspell-2023.2.1-aarch64.dmg",
-      "build_number": "232.9559.63"
+      "version": "2023.2.2",
+      "sha256": "0baeeba5f8a2dd02304b42a54d633719df3242bfaedc5b62bec4dacd403eabf2",
+      "url": "https://download.jetbrains.com/python/dataspell-2023.2.2-aarch64.dmg",
+      "build_number": "232.9921.48"
     },
     "gateway": {
       "update-channel": "Gateway RELEASE",
       "url-template": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}-aarch64.dmg",
-      "version": "2023.2.1",
-      "sha256": "4e227b78bcb33f2bdbc3f3749a373413e785180b34fce03de863479c1f892bd2",
-      "url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2023.2.1-aarch64.dmg",
-      "build_number": "232.9559.62"
+      "version": "2023.2.2",
+      "sha256": "b6ae26eaa6f7f4b77d1bf3d75658eb8ae70bccce4b7e8e62d18dada0810b382c",
+      "url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2023.2.2-aarch64.dmg",
+      "build_number": "232.9921.47"
     },
     "goland": {
       "update-channel": "GoLand RELEASE",
       "url-template": "https://download.jetbrains.com/go/goland-{version}-aarch64.dmg",
-      "version": "2023.2.1",
-      "sha256": "08310be67b03a0f36cebf28fddfe0886d96f7446f04d25fec69beaaf222daf9e",
-      "url": "https://download.jetbrains.com/go/goland-2023.2.1-aarch64.dmg",
-      "build_number": "232.9559.64"
+      "version": "2023.2.2",
+      "sha256": "b8343e424f1c954ef2c8db7dabc4aaad63d055aa7a4b572773dbeeab43463007",
+      "url": "https://download.jetbrains.com/go/goland-2023.2.2-aarch64.dmg",
+      "build_number": "232.9921.53"
     },
     "idea-community": {
       "update-channel": "IntelliJ IDEA RELEASE",
@@ -330,18 +346,26 @@
     "ruby-mine": {
       "update-channel": "RubyMine RELEASE",
       "url-template": "https://download.jetbrains.com/ruby/RubyMine-{version}-aarch64.dmg",
-      "version": "2023.2.1",
-      "sha256": "422462636fc4036a2a28037519decef70f38505826b34f167020b1ffeea3a8aa",
-      "url": "https://download.jetbrains.com/ruby/RubyMine-2023.2.1-aarch64.dmg",
-      "build_number": "232.9559.58"
+      "version": "2023.2.2",
+      "sha256": "53e551897d42d0986b2e01f171bd7b96fe790516fdf1578feabec0a44cf441e5",
+      "url": "https://download.jetbrains.com/ruby/RubyMine-2023.2.2-aarch64.dmg",
+      "build_number": "232.9921.48"
+    },
+    "rust-rover": {
+      "update-channel": "RustRover EAP",
+      "url-template": "https://download.jetbrains.com/rustrover/RustRover-{version}-aarch64.dmg",
+      "version": "2023.2",
+      "sha256": "7f01fef11d89c6c6c870a79007607babde40f7a958b7103d1028aa760ed713b7",
+      "url": "https://download.jetbrains.com/rustrover/RustRover-232.9921.46-aarch64.dmg",
+      "build_number": "232.9921.46"
     },
     "webstorm": {
       "update-channel": "WebStorm RELEASE",
       "url-template": "https://download.jetbrains.com/webstorm/WebStorm-{version}-aarch64.dmg",
-      "version": "2023.2.1",
-      "sha256": "fb75c5d9164776353262cde6d8589826975868804a32f27007cb8a71c0e2d87b",
-      "url": "https://download.jetbrains.com/webstorm/WebStorm-2023.2.1-aarch64.dmg",
-      "build_number": "232.9559.58"
+      "version": "2023.2.2",
+      "sha256": "27ae504b6ee24df28d29f59602c893c2b9af9357e4cc1e20dab22753177508db",
+      "url": "https://download.jetbrains.com/webstorm/WebStorm-2023.2.2-aarch64.dmg",
+      "build_number": "232.9921.42"
     }
   }
 }
diff --git a/pkgs/applications/editors/vscode/vscode.nix b/pkgs/applications/editors/vscode/vscode.nix
index cde1f9aac49..884aca67823 100644
--- a/pkgs/applications/editors/vscode/vscode.nix
+++ b/pkgs/applications/editors/vscode/vscode.nix
@@ -30,21 +30,21 @@ let
   archive_fmt = if stdenv.isDarwin then "zip" else "tar.gz";
 
   sha256 = {
-    x86_64-linux = "0ycn0madcc70yidhp3vazxlrl9pskpaiji5xg1c3hqgc8snbhwfc";
-    x86_64-darwin = "1vgrgsp6jrkll1ai0l8pbdmn7lx9hvg0f44g9rcx80yff80xa18a";
-    aarch64-linux = "1id8ajlak4vkzmr2lj1wwbgdizsz44b74w4d620fa51nx9zd1wmi";
-    aarch64-darwin = "0xzkzzx9yjf1wmk7x26x3b0nq1l7wbnrqcb86zdpbqr8zh386y41";
-    armv7l-linux = "0cw55k7f1dhna4hv394dl638bas0w2p6009xn99lm9p9lqybz618";
+    x86_64-linux = "0i6zk4zkwcw5lnzhg7vvnsw17nar97bbq3iishag9cpjqs9jpq4z";
+    x86_64-darwin = "1sy0ir4mhw9j5ifiv6d2928gcs8wfksxlsp312r9nsmc2h0i11g6";
+    aarch64-linux = "13lsycmia9yj6s7zf441vg8c0pipxpxdrnrj7v4rhjlvixjb8f8k";
+    aarch64-darwin = "1qwmwx0q05lzhsb8810kjk1lcw4wm7cr0zn7pkyjlsda0vkcc5g8";
+    armv7l-linux = "1hlnd9w141phrd3mzkhgiskbcnxqb05396frrv38pns007xhj103";
   }.${system} or throwSystem;
 in
   callPackage ./generic.nix rec {
     # Please backport all compatible updates to the stable release.
     # This is important for the extension ecosystem.
-    version = "1.82.1";
+    version = "1.82.2";
     pname = "vscode" + lib.optionalString isInsiders "-insiders";
 
     # This is used for VS Code - Remote SSH test
-    rev = "6509174151d557a81c9d0b5f8a5a1e9274db5585";
+    rev = "abd2f3db4bdb28f9e95536dfa84d8479f1eb312d";
 
     executableName = "code" + lib.optionalString isInsiders "-insiders";
     longName = "Visual Studio Code" + lib.optionalString isInsiders " - Insiders";
@@ -68,7 +68,7 @@ in
       src = fetchurl {
         name = "vscode-server-${rev}.tar.gz";
         url = "https://update.code.visualstudio.com/commit:${rev}/server-linux-x64/stable";
-        sha256 = "00in41ps77nl3z2mpl57l7ng0pyg9k3c16gaprzv13g9bqisqd7b";
+        sha256 = "1d1ypmasr7zj4csinb5nj531ckj7a1pgn36469fdzwn0xjrgkg16";
       };
     };
 
diff --git a/pkgs/applications/gis/qgis/default.nix b/pkgs/applications/gis/qgis/default.nix
index 8fa7338c6ea..8b19c70c3b4 100644
--- a/pkgs/applications/gis/qgis/default.nix
+++ b/pkgs/applications/gis/qgis/default.nix
@@ -1,5 +1,6 @@
 { lib
 , makeWrapper
+, nixosTests
 , symlinkJoin
 
 , extraPythonPackages ? (ps: [ ])
@@ -33,7 +34,10 @@ in symlinkJoin rec {
       --set PYTHONPATH $program_PYTHONPATH
   '';
 
-  passthru.unwrapped = qgis-unwrapped;
+  passthru = {
+    unwrapped = qgis-unwrapped;
+    tests.qgis = nixosTests.qgis;
+  };
 
   meta = qgis-unwrapped.meta;
 }
diff --git a/pkgs/applications/gis/qgis/ltr.nix b/pkgs/applications/gis/qgis/ltr.nix
index 9288f6ee607..b551fe0a1e4 100644
--- a/pkgs/applications/gis/qgis/ltr.nix
+++ b/pkgs/applications/gis/qgis/ltr.nix
@@ -1,5 +1,6 @@
 { lib
 , makeWrapper
+, nixosTests
 , symlinkJoin
 
 , extraPythonPackages ? (ps: [ ])
@@ -33,7 +34,10 @@ in symlinkJoin rec {
       --set PYTHONPATH $program_PYTHONPATH
   '';
 
-  passthru.unwrapped = qgis-ltr-unwrapped;
+  passthru = {
+    unwrapped = qgis-ltr-unwrapped;
+    tests.qgis-ltr = nixosTests.qgis-ltr;
+  };
 
   inherit (qgis-ltr-unwrapped) meta;
 }
diff --git a/pkgs/applications/gis/qgis/test.py b/pkgs/applications/gis/qgis/test.py
new file mode 100644
index 00000000000..4f5772e30ce
--- /dev/null
+++ b/pkgs/applications/gis/qgis/test.py
@@ -0,0 +1,64 @@
+# QGIS test script.
+# This script will create vector memory layer containing Nix snowflake.
+
+# Set QGIS_TEST_INTERACTIVE=True to run this script in interactive mode (and see
+# Nix snowflake).
+
+# Run script as following:
+# QGIS_TEST_INTERACTIVE=True ./result/bin/qgis --code pkgs/applications/gis/qgis/test.py
+
+import os
+
+test_interactive = eval(os.getenv("QGIS_TEST_INTERACTIVE", "False"))
+
+def test(test_interactive=False):
+
+    import osgeo  # just to check if geo python modules are available
+    from qgis.core import QgsVectorLayer, QgsFeature, QgsGeometry, QgsProject
+
+    # Nix snowflake as WKT
+    WKT = """
+     MULTIPOLYGON (
+         ((37.10819200000000251 45.01934500000000128, 41.42360200000000248 45.0228350000000006, 43.98593199999999825 46.39836900000000242, 51.11554000000000286 46.39135900000000134, 52.20562400000000025 46.98079299999999847, 51.13812500000000227 47.55708200000000119, 46.12925599999999804 47.56117799999999818, 48.65136199999999889 48.91279899999999969, 46.46644299999999816 50.06610299999999825, 37.10819200000000251 45.01934500000000128)),
+         ((36.37806400000000195 49.06532800000000094, 34.21064499999999953 50.22733199999999698, 29.10392099999999971 50.23055699999999746, 25.55861099999999908 52.15672200000000203, 23.37426999999999921 52.15597100000000097, 22.30527299999999968 51.57995100000000122, 24.79831000000000074 50.22714599999999763, 19.77820099999999925 50.23147999999999769, 17.66315000000000168 49.06561399999999651, 36.37806400000000195 49.06532800000000094)),
+         ((25.51021400000000128 46.84120599999999968, 23.36222199999999916 45.67570500000000067, 25.90661599999999964 44.29694800000000043, 22.32231799999999922 42.37779100000000199, 23.41657500000000169 41.78910799999999881, 25.55307200000000023 41.78884599999999949, 28.06890399999999985 43.13755299999999693, 30.56690599999999947 41.78159999999999741, 34.86687599999999776 41.79416100000000256, 25.51021400000000128 46.84120599999999968)),
+         ((29.60533099999999962 44.88583400000000267, 31.77274900000000102 43.72382000000000346, 36.87947299999999728 43.7205939999999984, 40.42478299999999791 41.79442999999999842, 42.60912400000000133 41.7951929999999976, 43.67812200000000189 42.37121299999999735, 41.18508400000000336 43.72401599999999888, 46.20519399999999877 43.71968400000000088, 48.32024400000000242 44.885548, 29.60533099999999962 44.88583400000000267)),
+         ((28.88739899999999849 48.92013800000000145, 24.57198899999999853 48.9166450000000026, 22.0096589999999992 47.54111400000000032, 14.88005199999999917 47.54812199999999933, 13.78996700000000075 46.95868999999999716, 14.85746600000000051 46.38240100000000155, 19.86633600000000044 46.37830199999999792, 17.34422899999999856 45.02668100000000351, 19.52914900000000031 43.87337800000000243, 28.88739899999999849 48.92013800000000145)),
+         ((25.52133699999999905 46.84445300000000145, 23.37334500000000048 45.67894900000000291, 25.91773900000000097 44.30019200000000268, 22.33344200000000157 42.38103699999999918, 23.4276990000000005 41.79235400000000311, 25.56419500000000156 41.79209199999999669, 28.08002700000000118 43.14079900000000123, 30.57802999999999827 41.78484600000000171, 34.87800000000000011 41.79740699999999975, 25.52133699999999905 46.84445300000000145)),
+         ((25.52133699999999905 46.84445300000000145, 23.37334500000000048 45.67895099999999786, 25.91773900000000097 44.30019200000000268, 22.33344200000000157 42.38103699999999918, 23.4276990000000005 41.79235400000000311, 25.56419500000000156 41.79209199999999669, 28.08002700000000118 43.14079900000000123, 30.57802999999999827 41.78484600000000171, 34.87800000000000011 41.79740699999999975, 25.52133699999999905 46.84445300000000145)),
+         ((25.51021400000000128 46.84120599999999968, 23.36222199999999916 45.67570500000000067, 25.90661599999999964 44.29694800000000043, 22.32231799999999922 42.37779100000000199, 23.41657500000000169 41.78910799999999881, 25.55307200000000023 41.78884599999999949, 28.06890399999999985 43.13755299999999693, 30.56690599999999947 41.78159999999999741, 34.86687599999999776 41.79416100000000256, 25.51021400000000128 46.84120599999999968)),
+         ((40.49807200000000051 47.09720099999999832, 42.64606299999999806 48.26270199999999733, 40.10166999999999859 49.64145899999999756, 43.685966999999998 51.56061600000000311, 42.59170999999999907 52.14929899999999918, 40.45521399999999801 52.1495609999999985, 37.93938099999999736 50.80085400000000107, 35.44137899999999775 52.15680700000000058, 31.14140899999999945 52.14424700000000001, 40.49807200000000051 47.09720099999999832)),
+     )
+    """
+
+    layer = QgsVectorLayer('Polygon?crs=epsg:3857', 'QGIS-on-Nix', 'memory')
+    provider = layer.dataProvider()
+
+    polygon = QgsFeature()
+    geom = QgsGeometry.fromWkt(WKT)
+    polygon.setGeometry(geom)
+    provider.addFeatures([polygon])
+
+    layer.updateExtents()
+    QgsProject.instance().addMapLayers([layer])
+
+    # Make sure our test layer contains exactly one feature
+    assert layer.featureCount() == 1
+
+    if not test_interactive:
+        QgsProject.instance().removeMapLayer(layer)
+        QgsProject.instance().clear()
+
+try:
+    test(test_interactive=test_interactive)
+
+    if not test_interactive:
+        print("QGIS test script was successfully executed.")
+        os._exit(0)  # iface.actionExit().trigger() doesn't work
+
+except Exception as e:
+    if not test_interactive:
+        print("QGIS test script has failed.")
+        print("Error message: {}".format(e))
+        os._exit(1)
+
diff --git a/pkgs/applications/graphics/normcap/default.nix b/pkgs/applications/graphics/normcap/default.nix
new file mode 100644
index 00000000000..820ca990339
--- /dev/null
+++ b/pkgs/applications/graphics/normcap/default.nix
@@ -0,0 +1,52 @@
+# From NUR https://github.com/nix-community/nur-combined/blob/6bddae47680482383b5769dd3aa7d82b88e6cbc8/repos/renesat/pkgs/normcap/default.nix
+
+{
+  lib,
+  stdenv,
+  python3,
+  fetchFromGitHub,
+  tesseract4,
+  leptonica,
+  wl-clipboard
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "normcap";
+  version = "0.4.4";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "dynobo";
+    repo = "normcap";
+    rev = "v${version}";
+    hash = "sha256-dShtmoqS9TC3PHuwq24OEOhYfBHGhDCma8Du8QCkFuI=";
+  };
+
+  buildInputs = [
+    wl-clipboard
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    tesseract4
+    leptonica
+    pyside6
+
+    # Test
+    toml
+    pytest-qt
+  ];
+
+  postPatch = ''
+    substituteInPlace pyproject.toml --replace 'PySide6-Essentials = "6.5.1"' ""
+  '';
+
+  meta = with lib; {
+    description = "OCR powered screen-capture tool to capture information instead of images";
+    homepage = "https://dynobo.github.io/normcap/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ cafkafk ];
+  };
+}
diff --git a/pkgs/applications/graphics/oculante/Cargo.lock b/pkgs/applications/graphics/oculante/Cargo.lock
index a63c7dfe329..02b4228db99 100644
--- a/pkgs/applications/graphics/oculante/Cargo.lock
+++ b/pkgs/applications/graphics/oculante/Cargo.lock
@@ -95,6 +95,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"
 
 [[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
 name = "any_ascii"
 version = "0.1.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -161,7 +176,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -281,7 +296,7 @@ checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -298,14 +313,14 @@ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
 name = "atk-sys"
-version = "0.16.0"
+version = "0.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148"
+checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009"
 dependencies = [
  "glib-sys",
  "gobject-sys",
@@ -550,7 +565,7 @@ checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -567,9 +582,9 @@ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
 
 [[package]]
 name = "cairo-sys-rs"
-version = "0.16.3"
+version = "0.18.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421"
+checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51"
 dependencies = [
  "libc",
  "system-deps",
@@ -655,6 +670,18 @@ dependencies = [
 ]
 
 [[package]]
+name = "chrono"
+version = "0.4.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "num-traits 0.2.16",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
 name = "clap"
 version = "3.2.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1057,7 +1084,7 @@ version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
 dependencies = [
- "libloading 0.8.0",
+ "libloading",
 ]
 
 [[package]]
@@ -1140,7 +1167,7 @@ checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -1508,7 +1535,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -1543,9 +1570,9 @@ dependencies = [
 
 [[package]]
 name = "gdk-pixbuf-sys"
-version = "0.16.3"
+version = "0.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016"
+checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
 dependencies = [
  "gio-sys",
  "glib-sys",
@@ -1556,9 +1583,9 @@ dependencies = [
 
 [[package]]
 name = "gdk-sys"
-version = "0.16.0"
+version = "0.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a"
+checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2"
 dependencies = [
  "cairo-sys-rs",
  "gdk-pixbuf-sys",
@@ -1642,9 +1669,9 @@ checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
 
 [[package]]
 name = "gio-sys"
-version = "0.16.3"
+version = "0.18.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229"
+checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2"
 dependencies = [
  "glib-sys",
  "gobject-sys",
@@ -1676,9 +1703,9 @@ dependencies = [
 
 [[package]]
 name = "glib-sys"
-version = "0.16.3"
+version = "0.18.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65"
+checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898"
 dependencies = [
  "libc",
  "system-deps",
@@ -1727,7 +1754,7 @@ dependencies = [
  "glutin_egl_sys",
  "glutin_glx_sys",
  "glutin_wgl_sys",
- "libloading 0.7.4",
+ "libloading",
  "objc2",
  "once_cell",
  "raw-window-handle",
@@ -1817,9 +1844,9 @@ dependencies = [
 
 [[package]]
 name = "gobject-sys"
-version = "0.16.3"
+version = "0.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1"
+checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44"
 dependencies = [
  "glib-sys",
  "libc",
@@ -1828,9 +1855,9 @@ dependencies = [
 
 [[package]]
 name = "gtk-sys"
-version = "0.16.0"
+version = "0.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3"
+checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722"
 dependencies = [
  "atk-sys",
  "cairo-sys-rs",
@@ -2015,6 +2042,29 @@ dependencies = [
 ]
 
 [[package]]
+name = "iana-time-zone"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows 0.48.0",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
 name = "idna"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2119,7 +2169,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -2245,9 +2295,9 @@ dependencies = [
 
 [[package]]
 name = "jxl-frame"
-version = "0.4.0"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2c4e276ea56d8bc4961f13501d565cc6b665f0da76e0e5f90aa44a1475eb409"
+checksum = "8d63bdd104e3746669a123de86f940aa5d59fdc9c5a65f16a4f867dde75e45e1"
 dependencies = [
  "jxl-bitstream",
  "jxl-coding",
@@ -2266,9 +2316,9 @@ checksum = "48800b21ed6bb3bbc2f818ae9cd40530bdfb1a211f57d5a7a49b8b10f62145e8"
 
 [[package]]
 name = "jxl-image"
-version = "0.4.1"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28d10c717baa0dd19c25b37b6baebb5f07d7efdaa6225a65aa98dcaf1d40a3e5"
+checksum = "ef86f7f74acc9c9e66604c8d030e00cdef5a0c455ea3d7d26bd9ddbb9160be59"
 dependencies = [
  "jxl-bitstream",
  "jxl-color",
@@ -2278,9 +2328,9 @@ dependencies = [
 
 [[package]]
 name = "jxl-modular"
-version = "0.2.2"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4fea731da48d358a60d6185c58ac897f22895ea0e3380df04c106c87e192a7d"
+checksum = "504e6b55db362568592be81993c772fc6786c56fb67ae769ff62dc514c3e6748"
 dependencies = [
  "jxl-bitstream",
  "jxl-coding",
@@ -2290,9 +2340,9 @@ dependencies = [
 
 [[package]]
 name = "jxl-oxide"
-version = "0.3.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d90d7ccb9a843e69563abdab2cd362702668f23e39e7fa3dcdf2594b1d29042"
+checksum = "57e3b7e459d823979c4ca0c9584f391581db154437f34596ea443b082e9b6064"
 dependencies = [
  "jxl-bitstream",
  "jxl-color",
@@ -2305,9 +2355,9 @@ dependencies = [
 
 [[package]]
 name = "jxl-render"
-version = "0.3.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "774684715db3b6e60a13059ad746829c9f9b39b7865ba0dc7ea9fd93469d9297"
+checksum = "7157d1c6c4896ddc800cb0cc8ba545ba7417ab9afc51f39e69484e6607c8707e"
 dependencies = [
  "jxl-bitstream",
  "jxl-coding",
@@ -2322,9 +2372,9 @@ dependencies = [
 
 [[package]]
 name = "jxl-vardct"
-version = "0.2.1"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1abaffccbc217e48cb45b9aca639c18a873b66200fc5a3695fb98333e0b1fead"
+checksum = "eb4a2d9ba8c48a52f6143ba01c38aac67d1309c9b939a9f84cd60f650d15053e"
 dependencies = [
  "jxl-bitstream",
  "jxl-coding",
@@ -2451,16 +2501,6 @@ dependencies = [
 ]
 
 [[package]]
-name = "libloading"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb"
-dependencies = [
- "cfg-if 1.0.0",
- "windows-sys 0.48.0",
-]
-
-[[package]]
 name = "libm"
 version = "0.2.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3025,7 +3065,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "spirv_cross",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -3153,7 +3193,7 @@ checksum = "9e6a0fd4f737c707bd9086cc16c925f294943eb62eb71499e9fd4cf71f8b9f4e"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -3257,7 +3297,7 @@ dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -3342,7 +3382,7 @@ dependencies = [
 
 [[package]]
 name = "oculante"
-version = "0.7.5"
+version = "0.7.6"
 dependencies = [
  "anyhow",
  "arboard",
@@ -3385,6 +3425,7 @@ dependencies = [
  "strum_macros",
  "tiff",
  "tiny-skia 0.9.1",
+ "trash",
  "turbojpeg",
  "usvg",
  "webbrowser",
@@ -3497,14 +3538,14 @@ checksum = "b7db010ec5ff3d4385e4f133916faacd9dad0f6a09394c92d825b3aed310fa0a"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
 name = "pango-sys"
-version = "0.16.3"
+version = "0.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f"
+checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5"
 dependencies = [
  "glib-sys",
  "gobject-sys",
@@ -3618,7 +3659,7 @@ dependencies = [
  "phf_shared 0.11.2",
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -3662,7 +3703,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -4074,14 +4115,12 @@ dependencies = [
 
 [[package]]
 name = "rfd"
-version = "0.11.4"
+version = "0.12.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fe664af397d2b6a13a8ba1d172a2b5c87c6c5149039edbf8fa122b98c9ed96f"
+checksum = "241a0deb168c88050d872294f7b3106c1dfa8740942bcc97bc91b98e97b5c501"
 dependencies = [
- "async-io",
  "block",
  "dispatch",
- "futures-util",
  "glib-sys",
  "gobject-sys",
  "gtk-sys",
@@ -4094,7 +4133,7 @@ dependencies = [
  "wasm-bindgen",
  "wasm-bindgen-futures",
  "web-sys",
- "windows",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -4385,7 +4424,7 @@ checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -4407,7 +4446,7 @@ checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -4542,9 +4581,9 @@ checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
 
 [[package]]
 name = "smithay-client-toolkit"
-version = "0.16.0"
+version = "0.16.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454"
+checksum = "870427e30b8f2cbe64bf43ec4b86e88fe39b0a84b3f15efd9c9c2d020bc86eb9"
 dependencies = [
  "bitflags 1.3.2",
  "calloop",
@@ -4657,7 +4696,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "rustversion",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -4693,9 +4732,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "2.0.33"
+version = "2.0.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9caece70c63bfba29ec2fed841a09851b14a235c60010fa4de58089b6c025668"
+checksum = "59bf04c28bee9043ed9ea1e41afc0552288d3aba9c6efdd78903b802926f4879"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -4766,7 +4805,7 @@ checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -4966,7 +5005,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
 ]
 
 [[package]]
@@ -4979,6 +5018,22 @@ dependencies = [
 ]
 
 [[package]]
+name = "trash"
+version = "3.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af3663fb8f476d674b9c61d1d2796acec725bef6bec4b41402a904252a25971e"
+dependencies = [
+ "chrono",
+ "libc",
+ "log",
+ "objc",
+ "once_cell",
+ "scopeguard",
+ "url",
+ "windows 0.44.0",
+]
+
+[[package]]
 name = "try-lock"
 version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5026,16 +5081,16 @@ version = "1.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
 dependencies = [
- "cfg-if 1.0.0",
+ "cfg-if 0.1.10",
  "rand",
  "static_assertions",
 ]
 
 [[package]]
 name = "typenum"
-version = "1.16.0"
+version = "1.17.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
 
 [[package]]
 name = "uds_windows"
@@ -5285,7 +5340,7 @@ dependencies = [
  "once_cell",
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
  "wasm-bindgen-shared",
 ]
 
@@ -5319,7 +5374,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.33",
+ "syn 2.0.35",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
@@ -5514,6 +5569,15 @@ dependencies = [
 ]
 
 [[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
 name = "windows-sys"
 version = "0.45.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/pkgs/applications/graphics/oculante/default.nix b/pkgs/applications/graphics/oculante/default.nix
index 86fd1b6d301..78e8ca1b078 100644
--- a/pkgs/applications/graphics/oculante/default.nix
+++ b/pkgs/applications/graphics/oculante/default.nix
@@ -21,13 +21,13 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "oculante";
-  version = "0.7.5";
+  version = "0.7.6";
 
   src = fetchFromGitHub {
     owner = "woelper";
     repo = pname;
     rev = version;
-    hash = "sha256-8l6wOWvwPm18aqoTzt5+ZH7CDgeuxBvwO6w9Nor1Eig=";
+    hash = "sha256-nUq/Fwftfg7H+HlMZO2JMfGBeCOs6nEAcsbrbowPC4A=";
   };
 
   cargoLock = {
diff --git a/pkgs/applications/misc/albert/default.nix b/pkgs/applications/misc/albert/default.nix
index 598086ff317..c53226f8276 100644
--- a/pkgs/applications/misc/albert/default.nix
+++ b/pkgs/applications/misc/albert/default.nix
@@ -17,13 +17,13 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "albert";
-  version = "0.22.0";
+  version = "0.22.4";
 
   src = fetchFromGitHub {
     owner = "albertlauncher";
     repo = "albert";
     rev = "v${finalAttrs.version}";
-    sha256 = "sha256-x5H7z0rwunfMwtihXEerc47Sdkl6IvSHfavXzXMLse0=";
+    sha256 = "sha256-M5wMi/yH5c08Y7tpHpOulcz0utnnduGsR5z3EHeBecM=";
     fetchSubmodules = true;
   };
 
@@ -71,6 +71,7 @@ stdenv.mkDerivation (finalAttrs: {
     changelog = "https://github.com/albertlauncher/albert/blob/${finalAttrs.src.rev}/CHANGELOG.md";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ericsagnes synthetica ];
+    mainProgram = "albert";
     platforms = platforms.linux;
   };
 })
diff --git a/pkgs/applications/misc/keepass/default.nix b/pkgs/applications/misc/keepass/default.nix
index bde5bd4b44a..d9f6e5913ff 100644
--- a/pkgs/applications/misc/keepass/default.nix
+++ b/pkgs/applications/misc/keepass/default.nix
@@ -4,11 +4,11 @@ let
   inherit (builtins) add length readFile replaceStrings unsafeDiscardStringContext toString map;
 in buildDotnetPackage rec {
   pname = "keepass";
-  version = "2.53.1";
+  version = "2.54";
 
   src = fetchurl {
     url = "mirror://sourceforge/keepass/KeePass-${version}-Source.zip";
-    hash = "sha256-R7KWxlxrhl55nOaDNYwA/cJJl+kd5ZYy6eZVqyrxxnM=";
+    hash = "sha256-fDXT4XxoJfPV8tU8uL94bnL//zKlvXGS9EzNls52kJg=";
   };
 
   sourceRoot = ".";
diff --git a/pkgs/applications/misc/keepass/fix-paths.patch b/pkgs/applications/misc/keepass/fix-paths.patch
index 5d367b0a826..b574716b0f2 100644
--- a/pkgs/applications/misc/keepass/fix-paths.patch
+++ b/pkgs/applications/misc/keepass/fix-paths.patch
@@ -53,44 +53,43 @@ index af02803..8a32c9d 100644
  

  			int iSep = str.IndexOf(':');

 diff --git a/KeePass/Util/ClipboardUtil.Unix.cs b/KeePass/Util/ClipboardUtil.Unix.cs
-index ab49ee2..7f6c50f 100644
 --- a/KeePass/Util/ClipboardUtil.Unix.cs
 +++ b/KeePass/Util/ClipboardUtil.Unix.cs
-@@ -62,7 +62,7 @@ namespace KeePass.Util
- 			//	"-out -selection clipboard");

- 			// if(str != null) return str;

+@@ -65,7 +65,7 @@
+ 				//	"-out -selection clipboard");

+ 				// if(str != null) return str;

  

--			string str = NativeLib.RunConsoleApp("xsel",

-+			string str = NativeLib.RunConsoleApp("@xsel@",

- 				"--output --clipboard", null, XSelFlags);

- 			if(str != null) return str;

+-				string str = NativeLib.RunConsoleApp("xsel",

++				string str = NativeLib.RunConsoleApp("@xsel@",

+ 					"--output --clipboard", null, XSelFlags);

+ 				if(str != null) return str;

+ 			}

+@@ -93,10 +93,10 @@
+ 				if(string.IsNullOrEmpty(str))

+ 				{

+ 					// xsel with an empty input can hang, thus use --clear

+-					if(NativeLib.RunConsoleApp("xsel", "--clear --primary",

++					if(NativeLib.RunConsoleApp("@xsel@", "--clear --primary",

+ 						null, XSelFlags) != null)

+ 					{

+-						NativeLib.RunConsoleApp("xsel", "--clear --clipboard",

++						NativeLib.RunConsoleApp("@xsel@", "--clear --clipboard",

+ 							null, XSelFlags);

+ 						return;

+ 					}

+@@ -107,10 +107,10 @@
+ 				}

  

-@@ -83,10 +83,10 @@ namespace KeePass.Util
- 			if(string.IsNullOrEmpty(str))

- 			{

- 				// xsel with an empty input can hang, thus use --clear

--				if(NativeLib.RunConsoleApp("xsel", "--clear --primary",

-+				if(NativeLib.RunConsoleApp("@xsel@", "--clear --primary",

- 					null, XSelFlags) != null)

+ 				// xsel does not support --primary and --clipboard together

+-				if(NativeLib.RunConsoleApp("xsel", "--input --primary",

++				if(NativeLib.RunConsoleApp("@xsel@", "--input --primary",

+ 					str, XSelFlags) != null)

  				{

--					NativeLib.RunConsoleApp("xsel", "--clear --clipboard",

-+					NativeLib.RunConsoleApp("@xsel@", "--clear --clipboard",

- 						null, XSelFlags);

+-					NativeLib.RunConsoleApp("xsel", "--input --clipboard",

++					NativeLib.RunConsoleApp("@xsel@", "--input --clipboard",

+ 						str, XSelFlags);

  					return;

  				}

-@@ -97,10 +97,10 @@ namespace KeePass.Util
- 			}

- 

- 			// xsel does not support --primary and --clipboard together

--			if(NativeLib.RunConsoleApp("xsel", "--input --primary",

-+			if(NativeLib.RunConsoleApp("@xsel@", "--input --primary",

- 				str, XSelFlags) != null)

- 			{

--				NativeLib.RunConsoleApp("xsel", "--input --clipboard",

-+				NativeLib.RunConsoleApp("@xsel@", "--input --clipboard",

- 					str, XSelFlags);

- 				return;

- 			}

 diff --git a/KeePassLib/Native/ClipboardU.cs b/KeePassLib/Native/ClipboardU.cs
 index 291c51d..3c76380 100644
 --- a/KeePassLib/Native/ClipboardU.cs
diff --git a/pkgs/applications/networking/cluster/nomad/default.nix b/pkgs/applications/networking/cluster/nomad/default.nix
index b9bb93249a2..c973a20ad53 100644
--- a/pkgs/applications/networking/cluster/nomad/default.nix
+++ b/pkgs/applications/networking/cluster/nomad/default.nix
@@ -1,6 +1,7 @@
 { lib
 , buildGoModule
 , buildGo120Module
+, buildGo121Module
 , fetchFromGitHub
 , nixosTests
 , installShellFiles
@@ -73,10 +74,10 @@ rec {
   };
 
   nomad_1_6 = generic {
-    buildGoModule = buildGo120Module;
-    version = "1.6.1";
-    sha256 = "sha256-RsyGUaLteGiNf0PTkKLcjHTevhKb/mNx2JORpXhHJMw=";
-    vendorHash = "sha256-Y3O7ADzZPlLWFbXSYBcI6b5MAhMD0UnkhQxO9VJMpOY=";
+    buildGoModule = buildGo121Module;
+    version = "1.6.2";
+    sha256 = "sha256-Q0RyO9FZWGxWgVmTU07/pw5P4Ebcwcednq8TDmshuAk=";
+    vendorHash = "sha256-XCuWhKuBtSPTK8fXwgjMKMjwLnl1KWZKSJ4Ih9XDIDc=";
     passthru.tests.nomad = nixosTests.nomad;
     preCheck = ''
       export PATH="$PATH:$NIX_BUILD_TOP/go/bin"
diff --git a/pkgs/applications/networking/instant-messengers/session-desktop/default.nix b/pkgs/applications/networking/instant-messengers/session-desktop/default.nix
index 647b2e662a4..7989713d4a3 100644
--- a/pkgs/applications/networking/instant-messengers/session-desktop/default.nix
+++ b/pkgs/applications/networking/instant-messengers/session-desktop/default.nix
@@ -8,12 +8,12 @@
 }:
 
 let
-  version = "1.11.0";
+  version = "1.11.3";
   pname = "session-desktop";
 
   src = fetchurl {
     url = "https://github.com/oxen-io/session-desktop/releases/download/v${version}/session-desktop-linux-x86_64-${version}.AppImage";
-    sha256 = "sha256-QartWtp5/OtJqQq5GXRoIQ/ytK9/YCW1ixXTUrnGwqw=";
+    hash = "sha256-HdgW7Ls0h75BXKXGzzf37K9w4bgkfA9eAUEmBrSDT+U=";
   };
   appimage = appimageTools.wrapType2 {
     inherit version pname src;
diff --git a/pkgs/applications/terminal-emulators/kitty/default.nix b/pkgs/applications/terminal-emulators/kitty/default.nix
index 93f8aedfb6c..1c1f87e1a40 100644
--- a/pkgs/applications/terminal-emulators/kitty/default.nix
+++ b/pkgs/applications/terminal-emulators/kitty/default.nix
@@ -1,7 +1,7 @@
 { lib, stdenv, fetchFromGitHub, python3Packages, libunistring
 , harfbuzz, fontconfig, pkg-config, ncurses, imagemagick
 , libstartup_notification, libGL, libX11, libXrandr, libXinerama, libXcursor
-, libxkbcommon, libXi, libXext, wayland-protocols, wayland
+, libxkbcommon, libXi, libXext, wayland-protocols, wayland, xxHash
 , lcms2
 , librsync
 , openssl
@@ -29,20 +29,20 @@
 with python3Packages;
 buildPythonApplication rec {
   pname = "kitty";
-  version = "0.29.2";
+  version = "0.30.0";
   format = "other";
 
   src = fetchFromGitHub {
     owner = "kovidgoyal";
     repo = "kitty";
     rev = "refs/tags/v${version}";
-    hash = "sha256-ureJHG6Jh4bsXqQZnGwY5Hlq7sXxYX3iTajb8ZkpZw8=";
+    hash = "sha256-M6qFkeUp2rBudO2PiLN2VSrmut68c9mjjUr07WEX9VY=";
   };
 
   goModules = (buildGoModule {
     pname = "kitty-go-modules";
     inherit src version;
-    vendorHash = "sha256-jk2EcYVuhV/UQfHAIfpnn8ZIZnwjA/o8YRXmpoC85Vc=";
+    vendorHash = "sha256-53Y2S/P2fWT9STZFTdlkESxHNpoAggifZJ0+WXCzbkU=";
   }).goModules;
 
   buildInputs = [
@@ -51,6 +51,7 @@ buildPythonApplication rec {
     lcms2
     librsync
     openssl.dev
+    xxHash
   ] ++ lib.optionals stdenv.isDarwin [
     Cocoa
     Kernel
@@ -155,7 +156,8 @@ buildPythonApplication rec {
   preCheck = lib.optionalString stdenv.isDarwin ''
     substituteInPlace kitty_tests/file_transmission.py \
       --replace test_file_get dont_test_file_get \
-      --replace test_path_mapping_receive dont_test_path_mapping_receive
+      --replace test_path_mapping_receive dont_test_path_mapping_receive \
+      --replace test_transfer_send dont_test_transfer_send
     substituteInPlace kitty_tests/shell_integration.py \
       --replace test_fish_integration dont_test_fish_integration
     substituteInPlace kitty_tests/shell_integration.py \
@@ -237,6 +239,6 @@ buildPythonApplication rec {
     changelog = "https://sw.kovidgoyal.net/kitty/changelog/";
     platforms = platforms.darwin ++ platforms.linux;
     mainProgram = "kitty";
-    maintainers = with maintainers; [ tex rvolosatovs Luflosi adamcstephens ];
+    maintainers = with maintainers; [ tex rvolosatovs Luflosi adamcstephens kashw2 ];
   };
 }
diff --git a/pkgs/build-support/flutter/default.nix b/pkgs/build-support/flutter/default.nix
index c109804680f..a0ed1211ed8 100644
--- a/pkgs/build-support/flutter/default.nix
+++ b/pkgs/build-support/flutter/default.nix
@@ -3,8 +3,10 @@
 , stdenvNoCC
 , runCommand
 , makeWrapper
+, wrapGAppsHook
 , llvmPackages_13
 , cacert
+, glib
 , flutter
 , jq
 }:
@@ -68,8 +70,12 @@ let
       deps
       flutter
       jq
+      glib
+      wrapGAppsHook
     ] ++ nativeBuildInputs;
 
+    dontWrapGApps = true;
+
     preUnpack = ''
       ${lib.optionalString (!autoDepsList) ''
         if ! { [ '${lib.boolToString (depsListFile != null)}' = 'true' ] ${lib.optionalString (depsListFile != null) "&& cmp -s <(jq -Sc . '${depsListFile}') <(jq -Sc . '${finalAttrs.passthru.depsListFile}')"}; }; then
@@ -144,6 +150,7 @@ let
       for f in "$out"/bin/*; do
         wrapProgram "$f" \
           --suffix LD_LIBRARY_PATH : '${lib.makeLibraryPath finalAttrs.runtimeDependencies}' \
+          ''${gappsWrapperArgs[@]} \
           ${extraWrapProgramArgs}
       done
 
diff --git a/pkgs/development/compilers/flutter/default.nix b/pkgs/development/compilers/flutter/default.nix
index 0a748647a1f..e3c1791de6f 100644
--- a/pkgs/development/compilers/flutter/default.nix
+++ b/pkgs/development/compilers/flutter/default.nix
@@ -74,20 +74,20 @@ in
 {
   inherit wrapFlutter;
   stable = mkFlutter {
-    version = "3.13.0";
-    engineVersion = "1ac611c64eadbd93c5f5aba5494b8fc3b35ee952";
-    dartVersion = "3.1.0";
+    version = "3.13.4";
+    engineVersion = "9064459a8b0dcd32877107f6002cc429a71659d1";
+    dartVersion = "3.1.2";
     dartHash = {
-      x86_64-linux = "sha256-sGpRyuUTkZ0cpG/O21NCHaOsQRjNklsl9G6Ia1tZxAw=";
-      aarch64-linux = "sha256-wcDtL/Lh0NFC01QlnKwx8ovTHZ5ww+rb1sELn92R1uU=";
-      x86_64-darwin = "sha256-h+e7ABlLWCxc6wrbjiy5lgp6O/DnNKdXFNJtgnXBZNA=";
-      aarch64-darwin = "sha256-sAWnd09mbcRLP0WjSjjWF7+WQ7LP3tWsq5Kqw8e4APg=";
+      x86_64-linux = "sha256-kriMqIvS/ZPhCR+hDTZReW4MMBYCVzSO9xTuPrJ1cPg=";
+      aarch64-linux = "sha256-Fvg9Rr9Z7LYz8MjyzVCZwCzDiWPLDvH8vgD0oDZTksw=";
+      x86_64-darwin = "sha256-WL42AYjT2iriVP05Pm7288um+oFwS8o8gU5tCwSOvUM=";
+      aarch64-darwin = "sha256-BMbjSNJuh3RC+ObbJf2l6dacv2Hsn2/uygKDrP5EiuU=";
     };
     flutterHash = rec {
-      x86_64-linux = "sha256-gXNQ9RuHVC/3puHNygWPRdezx8iiKmiOnxQmoX6XUFo=";
+      x86_64-linux = "sha256-BPEmO4c3H2bOa+sBAVDz5/qvajobK3YMnBfQWhJUydw=";
       aarch64-linux = x86_64-linux;
-      x86_64-darwin = "sha256-vI8TsXIfTg4PYf5dzxDaJt+PIdmVFBmd2slKK7c1By0=";
-      aarch64-darwin = "sha256-VhGJlp+HG8QLZx8u0xK+cgbneoDM7zhNvm3Oco4nBms=";
+      x86_64-darwin = "sha256-BpxeCE9vTnmlIp6OS7BTPkOFptidjXbf2qVOVUAqstY=";
+      aarch64-darwin = "sha256-rccuxrE9nzC86uKGL96Etxxs4qMbVXJ1jCn/wjp9WlQ=";
     };
     patches = flutter3Patches;
   };
diff --git a/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix b/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix
index e3dc7864662..b027a2a8ce9 100644
--- a/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix
+++ b/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix
@@ -1,118 +1,119 @@
 {
-  "1ac611c64eadbd93c5f5aba5494b8fc3b35ee952" = {
+  "9064459a8b0dcd32877107f6002cc429a71659d1" = {
     skyNotice = "sha256-bJMktK26wC9fVzdhLNcTHqOg5sHRZ535LB5u5dgwjlY=";
     flutterNotice = "sha256-pZjblLYpD/vhC17PkRBXtqlDNRxyf92p5fKJHWhwCiA=";
     android-arm = {
-      "artifacts.zip" = "sha256-rAWcm/vjJ7P9q69z0bZNhBv/NO+sGhFJe+r/BHPR1To=";
+      "artifacts.zip" = "sha256-AABHJH/EOOQzEcD0O/XftA1AAV8tNFX3dj0OsJJ3/9A=";
     };
     android-arm-profile = {
-      "artifacts.zip" = "sha256-08+LDA7qNcMFH4xk+WfAXYqIDueCSHNmD/i/XaDeTrA=";
-      "linux-x64.zip" = "sha256-LWdrWdSGDAfX0gGtqQ2mSschBW3EAgaBldL/Cw99ft8=";
-      "darwin-x64.zip" = "sha256-FeBLBp3U2BPun/iPpTmHvaj3ZO8l7DQhwArqKN+D1m0=";
+      "artifacts.zip" = "sha256-MLlQFtjrGDQc3mH2T7CUlR/wDOPS7HRfgUuoLXjtd+E=";
+      "linux-x64.zip" = "sha256-S2/5ZFhNkDxUqsUZCFrwTERTUZIZpOiFijhcLZnozLI=";
+      "darwin-x64.zip" = "sha256-IwtYSpcg+5JmnkHuj6LGVp7GWiuUzETOPgKYRQczWzc=";
     };
     android-arm-release = {
-      "artifacts.zip" = "sha256-VCWSWfL74PJ6F6N18mOHjOkN8oTkL8coDfemV0Pc/Fw=";
-      "linux-x64.zip" = "sha256-xtQJ9merALKe20LZai+5ApJNOXR3uweIYQFWSyjmBEE=";
-      "darwin-x64.zip" = "sha256-YuEY7ZQAqpo0wbvI/iK3YYUSguZGi/wSl/DLPzmlNj8=";
+      "artifacts.zip" = "sha256-NLvwaB4UkYBRzg4cxzNZkileDFQk6GT/8nRugHU98Is=";
+      "linux-x64.zip" = "sha256-dua4xvVqsJY1d/eyA8j6NPnpAbotigPIs8SRj28F87w=";
+      "darwin-x64.zip" = "sha256-2B1+s6sngbN0+sPP1qKVpeMF6RIZZToF88baiqcNQT4=";
     };
     android-arm64 = {
-      "artifacts.zip" = "sha256-z4gvkNofQaFv8tFAXcLepsge9CV1T7cBe3EZRdBT7Ms=";
+      "artifacts.zip" = "sha256-Hf+S8XuAzD9HCU4FVmjN0jvTTxPtzEm+k++8IgaXOyM=";
     };
     android-arm64-profile = {
-      "artifacts.zip" = "sha256-7DHKcgwdaG6+MH7uVqSk2UGxLM4VsHVk5vUtYMn11kQ=";
-      "linux-x64.zip" = "sha256-3ZahRPzDVBff2pGUjjoIABH1lmwyrx05GnaJNyF4OiY=";
-      "darwin-x64.zip" = "sha256-Pmil9S314EoWJhfo0nrtBh1VLUeiavKvp/LIPZJoy6U=";
+      "artifacts.zip" = "sha256-k4miTzdDL+gg9LxzjBVRtAuwhKELBiVDsvQ+aVeWTeI=";
+      "linux-x64.zip" = "sha256-2ErIxNdX1NfHrjiqZzNwISKybeS9SGOlqFh7G8KCAcE=";
+      "darwin-x64.zip" = "sha256-1FdvI6llPjAeSc7+e97rvG7SvvFHqZH+4MREuRyF1DA=";
     };
     android-arm64-release = {
-      "artifacts.zip" = "sha256-GI+ADau8sbD9+ctXrciraeXNPGMto2+bBDyJcKt9YTE=";
-      "linux-x64.zip" = "sha256-riHs2bbOFNH7VqD3snEu5RuKrMqbsuFnDBZ9Apxq/+g=";
-      "darwin-x64.zip" = "sha256-DwTskXkcNqNsU3I+t9UMvKjxG4O2mN4cUGLB4dSWBHM=";
+      "artifacts.zip" = "sha256-y64Xhi5QFirZadU+fW8MOpkEarq/KPoEmmo0XRYf3/E=";
+      "linux-x64.zip" = "sha256-8dKrP9wQ9hDHNNrz1ZiYLV6zeGB60ikyrRFS6xdu+4Q=";
+      "darwin-x64.zip" = "sha256-2/eyFFAAUnuDtDoVh6L5emRXaQ03kwNRf6yIceWX3eU=";
     };
     android-x64 = {
-      "artifacts.zip" = "sha256-0dkDhr/TJi4ROcN1BV1OsUwWSnZuEHzgM0DKSeUIrnA=";
+      "artifacts.zip" = "sha256-b3AtOxad05vaXQzeCBtSf3G8ZiM0tOG0JRu4vbNtfgI=";
     };
     android-x64-profile = {
-      "artifacts.zip" = "sha256-2g+GaZHO17/rLa6Y1DHfDEq0Q05NRxQ5ese2Eo5rvNA=";
-      "linux-x64.zip" = "sha256-O3bHS/UHz8ymXq8ZEutLIj7K8wVTdt7vTo3OLGAkkh8=";
-      "darwin-x64.zip" = "sha256-vEzg6vxm1CbvVBSAoWwZhAS/bsuDlesmo30zWwK2a7g=";
+      "artifacts.zip" = "sha256-TVOtSjKc8WkvYsY+aK7OH9eTA/q7tmtnSdQArPWS2vM=";
+      "linux-x64.zip" = "sha256-IHv3TGI1Yvhoq1ehVyVUn3JtPTCFyEtxdysvr/SWFxY=";
+      "darwin-x64.zip" = "sha256-B4XooSrLRJh3XADfIAv/YBDCT/Mpg2di0oE4SZlU8I8=";
     };
     android-x64-release = {
-      "artifacts.zip" = "sha256-nlYI2ffULiDrehOSFEZkZoav/RJ0VykwREQkUwNX2/I=";
-      "linux-x64.zip" = "sha256-iUy8tjpkFd3V/RIVRPbNNEsa/GAXhtLsNAkEOvdKhks=";
-      "darwin-x64.zip" = "sha256-xZf2f4L/hSJEN63hQqtP0rbXkB2iw/Co4vLXYe/oeI4=";
+      "artifacts.zip" = "sha256-EaImhQlUnG/zYHDROkdgQdGHD9AfDJULowS785aVoCM=";
+      "linux-x64.zip" = "sha256-ZBvtCVUNf0D1P1lz4vmIrhsn9hZmJZ5Tn65v9Wot6bk=";
+      "darwin-x64.zip" = "sha256-IbMANAKyz7uFG5oqOKMj0KTVhaCBryBKdobvgS9bOgI=";
     };
     android-x86 = {
-      "artifacts.zip" = "sha256-OIB7VnhCasOflVtGFOe1DgCLP4Os82R6H7ucp0Wrez0=";
+      "artifacts.zip" = "sha256-ElFkaxlyLVbexdocyQ1AIKgfr93ol1EDyf+aFDt4I10=";
     };
     android-x86-jit-release = {
-      "artifacts.zip" = "sha256-dyjGkQJu73sOaxKvmIlbS5j0zO78RXHZrJQVi7qpBAU=";
+      "artifacts.zip" = "sha256-ptrhyXrx8xGuRQYs8nBryzyDuCiIMsgMmqxi3kHXQ4s=";
     };
     darwin-arm64 = {
-      "artifacts.zip" = "sha256-Ro+N5e5RhXgfqVDSEvqCKPdXRK1QnYCvIqmtlEW4s8c=";
-      "font-subset.zip" = "sha256-yCboANBEarWZDtoTwDFbtnlsPW2kPwZ5Jp31V2hbga4=";
+      "artifacts.zip" = "sha256-nG23DmYeKoMJnuTPMnvouPHzK3XNKBrEIZ5zijiCoAg=";
+      "font-subset.zip" = "sha256-Kx3G5FmN2bVgIvYiQP9og8kgl28ZCXThpcmByAv+f6U=";
     };
     darwin-arm64-profile = {
-      "artifacts.zip" = "sha256-Lf3LLkRhtGNA9cWZwv4Q9MncXzOoVCgmp+6osWRUCE0=";
+      "artifacts.zip" = "sha256-Uzg5F2NPlVN/cui4ixJ3JxBttn0KQMEyKEVLmecssuU=";
     };
     darwin-arm64-release = {
-      "artifacts.zip" = "sha256-6BSQ2zodrQmZKkHeaGVVT4D7jNekhwNOul5C6qwLbO8=";
+      "artifacts.zip" = "sha256-qZ1jYvvkBcaIHqZszFTOcuCDWnEmm/vsJt2aSZvgO+s=";
     };
     darwin-x64 = {
-      "FlutterEmbedder.framework.zip" = "sha256-4jYk+aYjOS/CZajS1oVBexg2+C9fy0OmfaI6i3rrhXo=";
-      "FlutterMacOS.framework.zip" = "sha256-Im7DTFf1zXrG6n1OtM4Jixd992mS2r47GRnAa7/urNc=";
-      "artifacts.zip" = "sha256-SdnPPnx4NOfOlJU1234977/cVRCa/5KTI/1kqCtTxG0=";
-      "font-subset.zip" = "sha256-F7qt7X0FNXODb3rvTkXacK3wG/aEVn+ny8DHFL3gEkI=";
-      "gen_snapshot.zip" = "sha256-czdCi1cPdD/nu0LJIsgUj42O6D5x5xTKfM8l/UiKZqw=";
+      "FlutterEmbedder.framework.zip" = "sha256-6ApkTiLh++bwgfYOGRoqnXglboqCWxc0VpNcYitjLLk=";
+      "FlutterMacOS.framework.zip" = "sha256-PP2E+PY1HB2OkX8a8/E/HpUBPRoDJyo/2BNUKd1Xd2s=";
+      "artifacts.zip" = "sha256-aZf99m1KlIpEuwwMMWAksp9d/SQQXt8jOTs/6GJUhcw=";
+      "font-subset.zip" = "sha256-ZfdDnRPDOqNsj3dCHStLWXWCMOzodmR4ojQrMQt6hQY=";
+      "gen_snapshot.zip" = "sha256-1xi4EJsiOIJSaBSIhl7p4L0aWtLYR1vGz4yYzNdVuQw=";
     };
     darwin-x64-profile = {
-      "FlutterMacOS.framework.zip" = "sha256-gdfoq6jdHFDb2JXCf45qJ2ekTildUptLb/k0XuHYuh8=";
-      "artifacts.zip" = "sha256-aEoenQh0Q8xuLU6OeFND3GBbOvhMNsovbbFQwQfudm0=";
-      "gen_snapshot.zip" = "sha256-tY3qmpdF7MP4iEfqgouzLehr901H3QTLxeV28RoLPDY=";
+      "FlutterMacOS.framework.zip" = "sha256-zDTey1dN4TYfi2/tDlxHPZhW3szZuGTMSaObNNH4zZo=";
+      "artifacts.zip" = "sha256-kZ6io/+ohx5jKhu1i/l0UZbTB1gk6BSn1VryZJxPcjU=";
+      "gen_snapshot.zip" = "sha256-5AUul5CQ6A8YGb6/PAfbPH7G/c+9rElDftmL3WIi4ZQ=";
     };
     darwin-x64-release = {
-      "FlutterMacOS.dSYM.zip" = "sha256-dNlx9PsXeJeV6FMPOliRyuc5p58DeEmXus2zP1dOqPs=";
-      "FlutterMacOS.framework.zip" = "sha256-ibmcuVjd3kswmUvXzZi8vl5uNEbnWvMAwzWYxs8i1zw=";
-      "artifacts.zip" = "sha256-KCXwR/ZZK1jyLQaIAsb+wAz4awVU1QozydIQt10M30A=";
-      "gen_snapshot.zip" = "sha256-hZT+IMHbvSTjk2WcNvfPl+vdXZ2vbB/MjiYP1Q+cKD8=";
+      "FlutterMacOS.dSYM.zip" = "sha256-DN5R/U+pcCgFyR6wLcp11Bjvov4sS0J3crMWOx0dNBI=";
+      "FlutterMacOS.framework.zip" = "sha256-9rEkGe0iz51aVXtCXK+KolJqjNUOEMwjeRHdF6kBjPs=";
+      "artifacts.zip" = "sha256-Lpz0WLAdspPybLhTnS2fsReTAZ0qkJmMvY+u8iCe53s=";
+      "gen_snapshot.zip" = "sha256-RLO5V6B/xzI5ljbIY7Yj4m1aFYYJ0PeO6nAyAN/ufnM=";
     };
-    "flutter_patched_sdk.zip" = "sha256-vm9Zt+obBuYHQchQlqlinGYg9mwmoo41HwqYzy8QXP0=";
-    "flutter_patched_sdk_product.zip" = "sha256-JjMQ2zEGXKIcyYqYfCxDYlRbwglVMQ8H1zs5h6To1es="
+    "flutter_patched_sdk.zip" = "sha256-d1KBJex2XgFbM0GgtcMFGDG2MN00zPd5HyAP54vBIaw=";
+    "flutter_patched_sdk_product.zip" = "sha256-TG0OfcYQHy7Um1nl7xHXGl0oGGkna1tKSWhtnLTo2Ic="
     ;
     ios = {
-      "artifacts.zip" = "sha256-9/GWCsOvwEXVWYMYn48sZTe44GhB2JBJtPDRFUqgTek=";
+      "artifacts.zip" = "sha256-bTtAJ4mrJZmT9IcDppfvm1ih3lNqJqywgatN3k48hoI=";
     };
     ios-profile = {
-      "artifacts.zip" = "sha256-XZ4AFdG60gUx2xv3qZdk8Hh/0ZuIeJXeBxBoWlmhP4I=";
+      "artifacts.zip" = "sha256-4bqMbZ0ASURIRp6Zfs25Nww+5FasRqdXcppX2KSWK0g=";
     };
     ios-release = {
-      "Flutter.dSYM.zip" = "sha256-QWCVU518mUHDXDdUm58XfS1TWYNkXI8LnfOIZ0PYLjs=";
-      "artifacts.zip" = "sha256-tFmIpEogaqCcx4ftVRah3Bw3CeB0dTku0xUMvUVfR00=";
+      "Flutter.dSYM.zip" = "sha256-LsYX9BTj9FXaW4f+7q6S/raZNx97FmGdJvegYrFiCAc=";
+      "artifacts.zip" = "sha256-KZBpNSeXCqfRydOdFzcaYdde3OCw7oI7x9/1l/4WlSk=";
     };
     linux-arm64 = {
-      "artifacts.zip" = "sha256-MFsYOUIYLRINLNOjsDLFX4WPwcW3FTQ7P55/i8xQqcI=";
-      "font-subset.zip" = "sha256-nIWE1Mep1R1EMS3vS31qdTybhFOCyr7/agPEjlAodOQ=";
+      "artifacts.zip" = "sha256-YBXe02wlxxpWT2pDUSILK/GXpKGx2vQo55E8zDOd4IQ=";
+      "font-subset.zip" = "sha256-02PHMUCPn6VBaQazfjEqVCGDPeGRXVTMXW8eAOuQRhY=";
     };
     linux-arm64-debug = {
-      "linux-arm64-flutter-gtk.zip" = "sha256-2zYHns8gycYy7VNjXfJdf/yl71VJSDFSIMb6lQ0JuKI=";
+      "linux-arm64-flutter-gtk.zip" = "sha256-ZTWenA3msfvFjoPA5ByX1/kXTDtd6H0H6i8AP2K9Zt8=";
     };
     linux-arm64-profile = {
-      "linux-arm64-flutter-gtk.zip" = "sha256-doGUIbTinn5kfw20NZRyph96ZkSa77Vm+y1Z/jBUi/E=";
+      "linux-arm64-flutter-gtk.zip" = "sha256-CDXfWkg/WHT9A8EAzo78KiUI3uN1rZyvrPSDH5fyiQU=";
     };
     linux-arm64-release = {
-      "linux-arm64-flutter-gtk.zip" = "sha256-3zeRvhTZ3nFhOuiacJLTTlPBkyP1u3lh00j3e4jJpXU=";
+      "linux-arm64-flutter-gtk.zip" = "sha256-62dlbrqCj5mbIQXxMPzXTXHSJdJH4nao1a1c1WOSB1Y=";
     };
     linux-x64 = {
-      "artifacts.zip" = "sha256-L8DrlHTLYneYo5yMdgXVZw3YikF0qBKijGVLJZJLTEA=";
-      "font-subset.zip" = "sha256-KC733fwlRIK6DhjAJopnKdzjaC1JhvJ8nK74x+5DtIE=";
+      "artifacts.zip" = "sha256-YVKajJeP6hFkLJk0HPIrEg/ig0tzkGj34z3ZA3VB8fE=";
+      "font-subset.zip" = "sha256-OFWcMnVi6AQoXKYcyMU8JN4/XM3OgSes0hzz8odTc8w=";
     };
     linux-x64-debug = {
-      "linux-x64-flutter-gtk.zip" = "sha256-5hu5uRB4gOnZyH4zWBj/b2Flz6+5DUK2ytTHWGVfp4A=";
+      "linux-x64-flutter-gtk.zip" = "sha256-Z8xCDor+sBwXg63r0o7RudzoWj5AsAUkc53F6dvEsLY=";
     };
     linux-x64-profile = {
-      "linux-x64-flutter-gtk.zip" = "sha256-gYGBrExyYlIl+nYnCvlGBq13bP0E5bzzM089THEqHBM=";
+      "linux-x64-flutter-gtk.zip" = "sha256-x7n84R4y7/jH/rUbe86Gm0oLM5aLSTB2UjjeIpRJ1zQ=";
     };
     linux-x64-release = {
-      "linux-x64-flutter-gtk.zip" = "sha256-Hw/hAMohLko1AMu3sr4Dq5OwvmrBP2PPJcJRVMgy6B4=";
+      "linux-x64-flutter-gtk.zip" = "sha256-B/Rtkln/rLS9M1gciXRnKvhPwR6bJrjGhrE9o1waamI=";
     };
   };
 }
+
diff --git a/pkgs/development/compilers/flutter/wrapper.nix b/pkgs/development/compilers/flutter/wrapper.nix
index a650b1853fd..47b64fe4740 100644
--- a/pkgs/development/compilers/flutter/wrapper.nix
+++ b/pkgs/development/compilers/flutter/wrapper.nix
@@ -33,6 +33,7 @@
 , makeWrapper
 , runCommandLocal
 , writeShellScript
+, wrapGAppsHook
 , git
 , which
 , pkg-config
@@ -166,30 +167,43 @@ let
   includeFlags = map (pkg: "-isystem ${lib.getOutput "dev" pkg}/include") (appStaticBuildDeps ++ extraIncludes);
   linkerFlags = (map (pkg: "-rpath,${lib.getOutput "lib" pkg}/lib") appRuntimeDeps) ++ extraLinkerFlags;
 in
-(callPackage ./sdk-symlink.nix { }) (runCommandLocal "flutter-wrapped"
+(callPackage ./sdk-symlink.nix { }) (stdenv.mkDerivation
 {
-  nativeBuildInputs = [
-    makeWrapper
-  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ darwin.DarwinTools ];
+  pname = "flutter-wrapped";
+  inherit (flutter) version;
+
+  nativeBuildInputs = [ makeWrapper ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ darwin.DarwinTools ]
+    ++ lib.optionals supportsLinuxDesktop [ glib wrapGAppsHook ];
 
   passthru = flutter.passthru // {
-    inherit (flutter) version;
     unwrapped = flutter;
+    inherit engineArtifacts;
   };
 
+  dontUnpack = true;
+  dontWrapGApps = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    for path in ${builtins.concatStringsSep " " (builtins.foldl' (paths: pkg: paths ++ (map (directory: "'${pkg}/${directory}/pkgconfig'") ["lib" "share"])) [ ] pkgConfigPackages)}; do
+      addToSearchPath FLUTTER_PKG_CONFIG_PATH "$path"
+    done
+
+    mkdir -p $out/bin
+    makeWrapper '${immutableFlutter}' $out/bin/flutter \
+      --set-default ANDROID_EMULATOR_USE_SYSTEM_LIBS 1 \
+      --suffix PATH : '${lib.makeBinPath (tools ++ buildTools)}' \
+      --suffix PKG_CONFIG_PATH : "$FLUTTER_PKG_CONFIG_PATH" \
+      --suffix LIBRARY_PATH : '${lib.makeLibraryPath appStaticBuildDeps}' \
+      --prefix CXXFLAGS "''\t" '${builtins.concatStringsSep " " (includeFlags ++ extraCxxFlags)}' \
+      --prefix CFLAGS "''\t" '${builtins.concatStringsSep " " (includeFlags ++ extraCFlags)}' \
+      --prefix LDFLAGS "''\t" '${builtins.concatStringsSep " " (map (flag: "-Wl,${flag}") linkerFlags)}' \
+      ''${gappsWrapperArgs[@]}
+
+    runHook postInstall
+  '';
+
   inherit (flutter) meta;
-} ''
-  for path in ${builtins.concatStringsSep " " (builtins.foldl' (paths: pkg: paths ++ (map (directory: "'${pkg}/${directory}/pkgconfig'") ["lib" "share"])) [ ] pkgConfigPackages)}; do
-    addToSearchPath FLUTTER_PKG_CONFIG_PATH "$path"
-  done
-
-  mkdir -p $out/bin
-  makeWrapper '${immutableFlutter}' $out/bin/flutter \
-    --set-default ANDROID_EMULATOR_USE_SYSTEM_LIBS 1 \
-    --suffix PATH : '${lib.makeBinPath (tools ++ buildTools)}' \
-    --suffix PKG_CONFIG_PATH : "$FLUTTER_PKG_CONFIG_PATH" \
-    --suffix LIBRARY_PATH : '${lib.makeLibraryPath appStaticBuildDeps}' \
-    --prefix CXXFLAGS "''\t" '${builtins.concatStringsSep " " (includeFlags ++ extraCxxFlags)}' \
-    --prefix CFLAGS "''\t" '${builtins.concatStringsSep " " (includeFlags ++ extraCFlags)}' \
-    --prefix LDFLAGS "''\t" '${builtins.concatStringsSep " " (map (flag: "-Wl,${flag}") linkerFlags)}'
-'')
+})
diff --git a/pkgs/development/interpreters/python/default.nix b/pkgs/development/interpreters/python/default.nix
index f80f2f16ccd..902015ecfb6 100644
--- a/pkgs/development/interpreters/python/default.nix
+++ b/pkgs/development/interpreters/python/default.nix
@@ -45,9 +45,9 @@ in {
       major = "2";
       minor = "7";
       patch = "18";
-      suffix = ".6"; # ActiveState's Python 2 extended support
+      suffix = ".7"; # ActiveState's Python 2 extended support
     };
-    hash = "sha256-+I0QOBkuTHMIQz71lgNn1X1vjPsjJMtFbgC0xcGTwWY=";
+    hash = "sha256-zcjAoSq6491ePiDySBCKrLIyYoO/5fdH6aBTNg/NH8s=";
     inherit (darwin) configd;
     inherit passthruFun;
   };
@@ -96,9 +96,9 @@ in {
       major = "3";
       minor = "12";
       patch = "0";
-      suffix = "rc2";
+      suffix = "rc3";
     };
-    hash = "sha256-EesQN25rr3vqUwAfUYHq7heXeIxNtug6Bh5CI1eSdnQ=";
+    hash = "sha256-ljl+iR6YgCsdOZ3uPOrrm88KolZsinsczk0BlsJ3UGo=";
     inherit (darwin) configd;
     inherit passthruFun;
   };
diff --git a/pkgs/development/node-packages/overrides.nix b/pkgs/development/node-packages/overrides.nix
index 1f3b2597f78..fe947f47077 100644
--- a/pkgs/development/node-packages/overrides.nix
+++ b/pkgs/development/node-packages/overrides.nix
@@ -100,7 +100,7 @@ final: prev: {
   };
 
 
-  graphite-cli = prev."@withgraphite/graphite-cli".override {
+  graphite-cli = prev."@withgraphite/graphite-cli".override (old: {
     name = "graphite-cli";
     nativeBuildInputs = with pkgs; [ installShellFiles pkg-config ];
     buildInputs = with pkgs; [ cairo pango pixman ];
@@ -111,7 +111,10 @@ final: prev: {
         --bash <($out/bin/gt completion) \
         --zsh <(ZSH_NAME=zsh $out/bin/gt completion)
     '';
-  };
+    meta = old.meta // {
+      license = lib.licenses.unfree; # no license specified
+    };
+  });
 
   graphql-language-service-cli = prev.graphql-language-service-cli.override {
     nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ];
diff --git a/pkgs/development/php-packages/phan/default.nix b/pkgs/development/php-packages/phan/default.nix
index 570d96ac2df..936853ab8a1 100644
--- a/pkgs/development/php-packages/phan/default.nix
+++ b/pkgs/development/php-packages/phan/default.nix
@@ -9,11 +9,11 @@ let
 in
 mkDerivation rec {
   pname = "phan";
-  version = "5.4.1";
+  version = "5.4.2";
 
   src = fetchurl {
     url = "https://github.com/phan/phan/releases/download/${version}/phan.phar";
-    hash = "sha256-DJr1BWAfNI3hYvmBui5Dp+n7ec+f+gkOso21KEd6m8I=";
+    hash = "sha256-9fpmsv2ia5ad+QtaicdZ0XpOZw7T5LWhfd2miYfSpWM=";
   };
 
   dontUnpack = true;
diff --git a/pkgs/development/python-modules/azure-servicebus/default.nix b/pkgs/development/python-modules/azure-servicebus/default.nix
index abc9aa64b22..d57082feccd 100644
--- a/pkgs/development/python-modules/azure-servicebus/default.nix
+++ b/pkgs/development/python-modules/azure-servicebus/default.nix
@@ -4,32 +4,29 @@
 , buildPythonPackage
 , fetchPypi
 , isodate
-, msrestazure
+, msrest
 , pythonOlder
-, six
 , typing-extensions
 , uamqp
 }:
 
 buildPythonPackage rec {
   pname = "azure-servicebus";
-  version = "7.11.1";
+  version = "7.11.2";
   format = "setuptools";
 
-  disabled = pythonOlder "3.6";
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    extension = "zip";
-    hash = "sha256-iWbHtpFSiQTcpSQ6S8lrUWAi9kjesh1ZvKPVvNquxYU=";
+    hash = "sha256-0iKPBVxP6tP+vnU37QD8vDHeMsfULO02pxt6hg/RIw8=";
   };
 
   propagatedBuildInputs = [
     azure-common
     azure-core
     isodate
-    msrestazure
-    six
+    msrest
     typing-extensions
     uamqp
   ];
@@ -44,6 +41,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Microsoft Azure Service Bus Client Library";
     homepage = "https://github.com/Azure/azure-sdk-for-python";
+    changelog = "https://github.com/Azure/azure-sdk-for-python/blob/azure-servicebus_${version}/sdk/servicebus/azure-servicebus/CHANGELOG.md";
     license = licenses.mit;
     maintainers = with maintainers; [ maxwilson ];
   };
diff --git a/pkgs/development/python-modules/curlify/default.nix b/pkgs/development/python-modules/curlify/default.nix
new file mode 100644
index 00000000000..dbe335c71de
--- /dev/null
+++ b/pkgs/development/python-modules/curlify/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildPythonPackage, fetchFromGitHub, requests }:
+
+buildPythonPackage {
+  pname = "curlify";
+  version = "2.2.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "ofw";
+    repo = "curlify";
+    rev = "b914625b12f9b05c39f305b47ebd0d1f061af24d";
+    hash = "sha256-yDHmH35TtQDJB0na1V98RtBuVHX5TmKC72hzzs1DQK8=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  meta = with lib; {
+    description = "Convert python requests request object to cURL command";
+    homepage = "https://github.com/ofw/curlify";
+    license = licenses.mit;
+    maintainers = with maintainers; [ chrpinedo ];
+  };
+}
diff --git a/pkgs/development/python-modules/flask-compress/default.nix b/pkgs/development/python-modules/flask-compress/default.nix
index 2868ac81c0a..fe237114952 100644
--- a/pkgs/development/python-modules/flask-compress/default.nix
+++ b/pkgs/development/python-modules/flask-compress/default.nix
@@ -1,29 +1,38 @@
 { lib
-, fetchPypi
+, fetchFromGitHub
 , buildPythonPackage
+, isPyPy
+, setuptools
 , setuptools-scm
 , flask
 , brotli
+, brotlicffi
 , pytestCheckHook
 }:
 
 buildPythonPackage rec {
-  version = "1.13";
+  version = "1.14";
   pname = "Flask-Compress";
   format = "pyproject";
 
-  src = fetchPypi {
-    inherit pname version;
-    hash = "sha256-7pbxi/mwDy3rTjQGykoFCTqoDi7wV4Ulo7TTLs3/Ep0=";
+  src = fetchFromGitHub {
+    owner = "colour-science";
+    repo = "flask-compress";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-eP6i4h+O4vkjlhfy3kyB+PY7iHVzOnRBRD8lj5yHehU=";
   };
 
   nativeBuildInputs = [
+    setuptools
     setuptools-scm
   ];
 
   propagatedBuildInputs = [
     flask
+  ] ++ lib.optionals (!isPyPy) [
     brotli
+  ] ++ lib.optionals isPyPy [
+    brotlicffi
   ];
 
   nativeCheckInputs = [
@@ -34,10 +43,13 @@ buildPythonPackage rec {
     "flask_compress"
   ];
 
+  env.SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
   meta = with lib; {
-    description = "Compress responses in your Flask app with gzip";
+    description = "Compress responses in your Flask app with gzip, deflate or brotli";
     homepage = "https://github.com/colour-science/flask-compress";
     changelog = "https://github.com/colour-science/flask-compress/blob/v${version}/CHANGELOG.md";
     license = licenses.mit;
+    maintainers = with maintainers; [ nickcao ];
   };
 }
diff --git a/pkgs/os-specific/linux/bpftrace/default.nix b/pkgs/os-specific/linux/bpftrace/default.nix
index 044d0509b50..e1fcf832f31 100644
--- a/pkgs/os-specific/linux/bpftrace/default.nix
+++ b/pkgs/os-specific/linux/bpftrace/default.nix
@@ -9,13 +9,13 @@
 
 stdenv.mkDerivation rec {
   pname = "bpftrace";
-  version = "0.18.1";
+  version = "0.19.0";
 
   src = fetchFromGitHub {
     owner = "iovisor";
     repo  = "bpftrace";
     rev   = "v${version}";
-    hash  = "sha256-hwxArrTdjJoab7Twf57PRmRhghV/9EcjRXI0lKRQC0k=";
+    hash  = "sha256-+aU27mxK4R0SHSsdGQzv02fK0L/m9uCIv7AkLyLSGQY=";
   };
 
 
@@ -44,10 +44,14 @@ stdenv.mkDerivation rec {
     "-DUSE_SYSTEM_BPF_BCC=ON"
   ];
 
+
   # Pull BPF scripts into $PATH (next to their bcc program equivalents), but do
   # not move them to keep `${pkgs.bpftrace}/share/bpftrace/tools/...` working.
   postInstall = ''
-    ln -s $out/share/bpftrace/tools/*.bt $out/bin/
+    ln -sr $out/share/bpftrace/tools/*.bt $out/bin/
+    # do not use /usr/bin/env for shipped tools
+    # If someone can get patchShebangs to work here please fix.
+    sed -i -e "1s:#!/usr/bin/env bpftrace:#!$out/bin/bpftrace:" $out/share/bpftrace/tools/*.bt
   '';
 
   outputs = [ "out" "man" ];
diff --git a/pkgs/servers/audiobookshelf/default.nix b/pkgs/servers/audiobookshelf/default.nix
index 4aafa973bb3..51dbc97b07b 100644
--- a/pkgs/servers/audiobookshelf/default.nix
+++ b/pkgs/servers/audiobookshelf/default.nix
@@ -17,13 +17,13 @@ let
   nodejs = nodejs_18;
 
   pname = "audiobookshelf";
-  version = "2.3.3";
+  version = "2.4.3";
 
   src = fetchFromGitHub {
     owner = "advplyr";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-wSIA2KKDKf3DNgYNNIyYNT8xyPWCZvwLcWuDhWOZpLs=";
+    sha256 = "sha256-Eqi6QVX8ZxX87IJcDNlDEzWYH7FBvYMs/iBAopLGYl4=";
   };
 
   client = buildNpmPackage {
@@ -37,7 +37,7 @@ let
     NODE_OPTIONS = "--openssl-legacy-provider";
 
     npmBuildScript = "generate";
-    npmDepsHash = "sha256-s3CwGFK87podBJwAqh7JoMA28vnmf77iexrAbbwZlFk=";
+    npmDepsHash = "sha256-j6Q3i3ktvBUMQxCMNIqRjSMly6UMzewaF1EfAmNF8mQ=";
   };
 
   wrapper = import ./wrapper.nix {
@@ -52,7 +52,7 @@ in buildNpmPackage {
 
   dontNpmBuild = true;
   npmInstallFlags = [ "--only-production" ];
-  npmDepsHash = "sha256-gueSlQh4tRTjIWvpNG2cj1np/zUGbjsnv3fA2owtiQY=";
+  npmDepsHash = "sha256-fxXetf6KVK8hEwYZsER/rmt5tDagEOiyh+dJJE8FOXY=";
 
   installPhase = ''
     mkdir -p $out/opt/client
diff --git a/pkgs/servers/calibre-web/default.nix b/pkgs/servers/calibre-web/default.nix
index 70f2287c83e..f59ebb6fe20 100644
--- a/pkgs/servers/calibre-web/default.nix
+++ b/pkgs/servers/calibre-web/default.nix
@@ -44,6 +44,7 @@ python.pkgs.buildPythonApplication rec {
     flask-wtf
     flask-limiter
     iso-639
+    jsonschema
     lxml
     pypdf
     requests
diff --git a/pkgs/servers/minio/default.nix b/pkgs/servers/minio/default.nix
index e9c9c15c35e..3c35cf164b9 100644
--- a/pkgs/servers/minio/default.nix
+++ b/pkgs/servers/minio/default.nix
@@ -15,16 +15,16 @@ let
 in
 buildGoModule rec {
   pname = "minio";
-  version = "2023-08-16T20-17-30Z";
+  version = "2023-09-07T02-05-02Z";
 
   src = fetchFromGitHub {
     owner = "minio";
     repo = "minio";
     rev = "RELEASE.${version}";
-    sha256 = "sha256-VY07ITsR2ISM0V4NgwpayDLakU425JCIjxEJ6YKEzXY=";
+    sha256 = "sha256-6Nps6h632OTXIuuiLSLt3kgBQfB5sBZ1O0bs6ltjtg8=";
   };
 
-  vendorHash = "sha256-KYbfHYls77OH8IWCnO9dSevrJ+2fZmpRQPCKfKCyXME=";
+  vendorHash = "sha256-w4t60CE7QMqKK2eQpD+D6Uiy62ibyASXCm8aRMfntsQ=";
 
   doCheck = false;
 
diff --git a/pkgs/servers/monitoring/mimir/default.nix b/pkgs/servers/monitoring/mimir/default.nix
index 0ee4740e9c8..fbde71958f6 100644
--- a/pkgs/servers/monitoring/mimir/default.nix
+++ b/pkgs/servers/monitoring/mimir/default.nix
@@ -1,16 +1,16 @@
 { lib, buildGoModule, fetchFromGitHub, nixosTests, nix-update-script }:
 buildGoModule rec {
   pname = "mimir";
-  version = "2.9.0";
+  version = "2.10.0";
 
   src = fetchFromGitHub {
     rev = "${pname}-${version}";
     owner = "grafana";
     repo = pname;
-    sha256 = "sha256-6URhofT5zJZX2eFx7fNPrFOWF7Po3ChlmVHGTpvG24c=";
+    hash = "sha256-4UBbtJRQ6F3Dm+G4OWZeWtD4MJWtq91yiSZNW7EhEto=";
   };
 
-  vendorSha256 = null;
+  vendorHash = null;
 
   subPackages = [
     "cmd/mimir"
@@ -26,15 +26,16 @@ buildGoModule rec {
     };
   };
 
-  ldflags = let t = "github.com/grafana/mimir/pkg/util/version";
-  in [
-    ''-extldflags "-static"''
-    "-s"
-    "-w"
-    "-X ${t}.Version=${version}"
-    "-X ${t}.Revision=unknown"
-    "-X ${t}.Branch=unknown"
-  ];
+  ldflags =
+    let t = "github.com/grafana/mimir/pkg/util/version";
+    in [
+      ''-extldflags "-static"''
+      "-s"
+      "-w"
+      "-X ${t}.Version=${version}"
+      "-X ${t}.Revision=unknown"
+      "-X ${t}.Branch=unknown"
+    ];
 
   meta = with lib; {
     description =
diff --git a/pkgs/tools/misc/pricehist/default.nix b/pkgs/tools/misc/pricehist/default.nix
new file mode 100644
index 00000000000..04333a29073
--- /dev/null
+++ b/pkgs/tools/misc/pricehist/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitLab
+, requests
+, lxml
+, cssselect
+, curlify
+, poetry-core
+, pytest-mock
+, responses
+, pytestCheckHook
+}:
+
+buildPythonApplication rec {
+  pname = "pricehist";
+  version = "1.4.6";
+  format = "pyproject";
+
+  src = fetchFromGitLab {
+    owner = "chrisberkhout";
+    repo = "pricehist";
+    rev = version;
+    hash = "sha256-RMZKp0JXQLt9tBZPkb3e/au85lV/FkRBCRYzd2lgUPc=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    lxml
+    cssselect
+    curlify
+    poetry-core
+  ];
+
+  nativeCheckInputs = [
+    responses
+    pytest-mock
+    pytestCheckHook
+  ];
+  meta = with lib; {
+    description = "A command-line tool for fetching and formatting historical price data, with support for multiple data sources and output formats";
+    homepage = "https://gitlab.com/chrisberkhout/pricehist";
+    license = licenses.mit;
+    mainProgram = "pricehist";
+    maintainers = with maintainers; [ chrpinedo ];
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index cc82178c2fb..98100816a37 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -1951,6 +1951,8 @@ with pkgs;
 
   polygon-cli = callPackage ../tools/networking/polygon-cli { };
 
+  pricehist = python3Packages.callPackage ../tools/misc/pricehist { };
+
   proycon-wayout = callPackage ../tools/wayland/proycon-wayout { };
 
   q = callPackage ../tools/networking/q { };
@@ -3002,7 +3004,7 @@ with pkgs;
   kermit-terminal = callPackage ../applications/terminal-emulators/kermit-terminal { };
 
   kitty = darwin.apple_sdk_11_0.callPackage ../applications/terminal-emulators/kitty {
-    go = go_1_20;
+    go = go_1_21;
     harfbuzz = harfbuzz.override { withCoreText = stdenv.isDarwin; };
     inherit (darwin.apple_sdk_11_0) Libsystem;
     inherit (darwin.apple_sdk_11_0.frameworks)
@@ -34634,6 +34636,8 @@ with pkgs;
 
   nomacs = libsForQt5.callPackage ../applications/graphics/nomacs { };
 
+  normcap = callPackage ../applications/graphics/normcap { };
+
   notepad-next = libsForQt5.callPackage ../applications/editors/notepad-next { };
 
   notepadqq = libsForQt5.callPackage ../applications/editors/notepadqq { };
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index a9863e84487..f44a7c9012a 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2392,6 +2392,8 @@ self: super: with self; {
 
   curio = callPackage ../development/python-modules/curio { };
 
+  curlify = callPackage ../development/python-modules/curlify { };
+
   curtsies = callPackage ../development/python-modules/curtsies { };
 
   curve25519-donna = callPackage ../development/python-modules/curve25519-donna { };