summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--maintainers/maintainer-list.nix47
-rw-r--r--nixos/doc/manual/release-notes/rl-2311.section.md3
-rw-r--r--nixos/modules/services/networking/mullvad-vpn.nix4
-rw-r--r--nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py2
-rw-r--r--nixos/modules/system/boot/networkd.nix2
-rw-r--r--nixos/modules/tasks/filesystems/bcachefs.nix41
-rw-r--r--nixos/tests/installer.nix62
-rw-r--r--pkgs/applications/editors/cudatext/default.nix11
-rw-r--r--pkgs/applications/editors/cudatext/proc_globdata.patch30
-rw-r--r--pkgs/applications/editors/texstudio/default.nix3
-rw-r--r--pkgs/applications/emulators/kega-fusion/default.nix4
-rw-r--r--pkgs/applications/emulators/wine/base.nix11
-rw-r--r--pkgs/applications/emulators/wine/darwin-metal-compat-pre8.18.patch12
-rw-r--r--pkgs/applications/emulators/wine/darwin-metal-compat.patch13
-rw-r--r--pkgs/applications/emulators/wine/sources.nix18
-rw-r--r--pkgs/applications/graphics/tesseract/tesseract5.nix7
-rw-r--r--pkgs/applications/misc/1password-gui/default.nix10
-rw-r--r--pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix11
-rw-r--r--pkgs/applications/misc/spicetify-cli/default.nix3
-rw-r--r--pkgs/applications/misc/ulauncher/default.nix4
-rw-r--r--pkgs/applications/networking/cluster/arkade/default.nix4
-rw-r--r--pkgs/applications/networking/cluster/calico/default.nix6
-rw-r--r--pkgs/applications/networking/cluster/cilium/default.nix4
-rw-r--r--pkgs/applications/networking/cluster/cmctl/default.nix6
-rw-r--r--pkgs/applications/networking/instant-messengers/discord/default.nix28
-rw-r--r--pkgs/applications/networking/instant-messengers/session-desktop/default.nix4
-rw-r--r--pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix3
-rw-r--r--pkgs/applications/networking/mailreaders/afew/default.nix46
-rw-r--r--pkgs/applications/networking/mailreaders/tutanota-desktop/default.nix4
-rw-r--r--pkgs/applications/networking/remote/rustdesk/default.nix5
-rw-r--r--pkgs/applications/office/timeular/default.nix4
-rw-r--r--pkgs/applications/radio/freedv/default.nix6
-rw-r--r--pkgs/applications/science/math/eigenmath/default.nix6
-rw-r--r--pkgs/applications/version-management/gql/default.nix6
-rw-r--r--pkgs/applications/virtualization/containerd/default.nix4
-rw-r--r--pkgs/applications/virtualization/ecs-agent/default.nix4
-rw-r--r--pkgs/applications/virtualization/nixpacks/default.nix6
-rw-r--r--pkgs/by-name/br/braa/package.nix32
-rw-r--r--pkgs/by-name/de/devdash/package.nix52
-rw-r--r--pkgs/by-name/ek/eksctl/package.nix4
-rw-r--r--pkgs/by-name/hi/hifile/package.nix4
-rw-r--r--pkgs/by-name/nw/nwg-drawer/package.nix (renamed from pkgs/applications/misc/nwg-drawer/default.nix)41
-rw-r--r--pkgs/by-name/so/soundfont-arachno/package.nix27
-rw-r--r--pkgs/by-name/sw/sway-audio-idle-inhibit/package.nix39
-rw-r--r--pkgs/by-name/sw/sway-overfocus/package.nix30
-rw-r--r--pkgs/desktops/plasma-5/discover.nix2
-rw-r--r--pkgs/development/compilers/factor-lang/adjust-paths-in-unit-tests.patch11
-rw-r--r--pkgs/development/compilers/factor-lang/factor99.nix (renamed from pkgs/development/compilers/factor-lang/factor98.nix)10
-rw-r--r--pkgs/development/compilers/factor-lang/scope.nix2
-rw-r--r--pkgs/development/compilers/factor-lang/staging-command-line-0.99-pre.patch (renamed from pkgs/development/compilers/factor-lang/staging-command-line-0.98-pre.patch)6
-rw-r--r--pkgs/development/compilers/factor-lang/workdir-0.98-pre.patch24
-rw-r--r--pkgs/development/compilers/factor-lang/workdir-0.99-pre.patch13
-rw-r--r--pkgs/development/interpreters/cel-go/default.nix12
-rw-r--r--pkgs/development/interpreters/cel-go/go-mod-tidy.patch52
-rw-r--r--pkgs/development/interpreters/expr/default.nix6
-rw-r--r--pkgs/development/interpreters/python/catch_conflicts/catch_conflicts_py2.py30
-rw-r--r--pkgs/development/interpreters/python/hooks/default.nix11
-rw-r--r--pkgs/development/interpreters/python/python2/mk-python-derivation.nix3
-rw-r--r--pkgs/development/interpreters/rakudo/zef.nix4
-rw-r--r--pkgs/development/libraries/duckdb/default.nix4
-rw-r--r--pkgs/development/libraries/libaom/default.nix2
-rw-r--r--pkgs/development/libraries/libfprint-2-tod1-elan/default.nix53
-rw-r--r--pkgs/development/libraries/oneDNN/default.nix4
-rw-r--r--pkgs/development/libraries/tracker-miners/default.nix5
-rw-r--r--pkgs/development/misc/newlib/default.nix1
-rw-r--r--pkgs/development/perl-modules/CSSDOM-replace-apostrophe.patch1412
-rw-r--r--pkgs/development/python-modules/aioesphomeapi/default.nix4
-rw-r--r--pkgs/development/python-modules/circus/default.nix6
-rw-r--r--pkgs/development/python-modules/echo/default.nix63
-rw-r--r--pkgs/development/python-modules/fast-histogram/default.nix54
-rw-r--r--pkgs/development/python-modules/geomet/default.nix11
-rw-r--r--pkgs/development/python-modules/glueviz/default.nix87
-rw-r--r--pkgs/development/python-modules/imgtool/default.nix45
-rw-r--r--pkgs/development/python-modules/mitmproxy-macos/default.nix33
-rw-r--r--pkgs/development/python-modules/mitmproxy-rs/default.nix6
-rw-r--r--pkgs/development/python-modules/mitmproxy/default.nix4
-rw-r--r--pkgs/development/python-modules/mpl-scatter-density/default.nix67
-rw-r--r--pkgs/development/python-modules/oca-port/default.nix4
-rw-r--r--pkgs/development/python-modules/openai-whisper/default.nix47
-rw-r--r--pkgs/development/python-modules/plaid-python/default.nix4
-rw-r--r--pkgs/development/python-modules/pvextractor/default.nix61
-rw-r--r--pkgs/development/python-modules/pyvmomi/default.nix13
-rw-r--r--pkgs/development/python-modules/scs/default.nix38
-rw-r--r--pkgs/development/python-modules/succulent/default.nix6
-rw-r--r--pkgs/development/tools/analysis/flow/default.nix4
-rw-r--r--pkgs/development/tools/api-linter/default.nix8
-rw-r--r--pkgs/development/tools/biome/default.nix2
-rw-r--r--pkgs/development/tools/buildah/default.nix4
-rw-r--r--pkgs/development/tools/continuous-integration/gitlab-runner/default.nix6
-rw-r--r--pkgs/development/tools/darklua/default.nix6
-rw-r--r--pkgs/development/tools/devbox/default.nix6
-rw-r--r--pkgs/development/tools/ruff/default.nix6
-rw-r--r--pkgs/development/tools/rust/cargo-nextest/default.nix6
-rw-r--r--pkgs/development/tools/rust/cargo-zigbuild/default.nix6
-rw-r--r--pkgs/development/tools/rust/humility/Cargo.lock2400
-rw-r--r--pkgs/development/tools/rust/humility/default.nix17
-rw-r--r--pkgs/development/tools/unityhub/default.nix4
-rw-r--r--pkgs/development/web/flyctl/default.nix6
-rw-r--r--pkgs/games/itch/default.nix19
-rw-r--r--pkgs/misc/cups/drivers/brother/dcp375cw/default.nix97
-rw-r--r--pkgs/misc/cups/drivers/brother/mfc465cncupswrapper/default.nix82
-rw-r--r--pkgs/misc/cups/drivers/brother/mfc465cnlpr/default.nix67
-rw-r--r--pkgs/os-specific/darwin/apple-source-releases/libiconv/default.nix1
-rw-r--r--pkgs/os-specific/linux/uhk-agent/default.nix4
-rw-r--r--pkgs/servers/microbin/default.nix47
-rw-r--r--pkgs/servers/monitoring/uptime-kuma/default.nix6
-rw-r--r--pkgs/servers/web-apps/wordpress/packages/plugins.json20
-rw-r--r--pkgs/servers/web-apps/wordpress/packages/wordpress-plugins.json1
-rw-r--r--pkgs/shells/zsh/zsh-prezto/default.nix6
-rw-r--r--pkgs/test/cross/default.nix3
-rw-r--r--pkgs/tools/X11/srandrd/default.nix4
-rw-r--r--pkgs/tools/admin/copilot-cli/default.nix6
-rw-r--r--pkgs/tools/filesystems/bcachefs-tools/default.nix8
-rw-r--r--pkgs/tools/graphics/lsix/default.nix4
-rw-r--r--pkgs/tools/misc/entr/default.nix4
-rw-r--r--pkgs/tools/misc/esphome/default.nix4
-rw-r--r--pkgs/tools/misc/fend/default.nix6
-rw-r--r--pkgs/tools/misc/ripdrag/default.nix6
-rw-r--r--pkgs/tools/misc/sharedown/default.nix2
-rw-r--r--pkgs/tools/misc/vtm/default.nix4
-rw-r--r--pkgs/tools/misc/wasm-tools/default.nix6
-rw-r--r--pkgs/tools/networking/hp2p/default.nix11
-rw-r--r--pkgs/tools/networking/hp2p/python3.patch120
-rw-r--r--pkgs/tools/networking/networkmanager/applet/default.nix4
-rw-r--r--pkgs/tools/networking/norouter/default.nix2
-rw-r--r--pkgs/tools/package-management/dpkg/default.nix4
-rw-r--r--pkgs/tools/security/cmospwd/default.nix4
-rw-r--r--pkgs/tools/security/ghidra/0001-Use-protobuf-gradle-plugin.patch227
-rw-r--r--pkgs/tools/security/ghidra/build.nix39
-rw-r--r--pkgs/tools/security/gitleaks/default.nix6
-rw-r--r--pkgs/tools/security/metasploit/Gemfile2
-rw-r--r--pkgs/tools/security/metasploit/Gemfile.lock6
-rw-r--r--pkgs/tools/security/metasploit/default.nix4
-rw-r--r--pkgs/tools/security/metasploit/gemset.nix6
-rw-r--r--pkgs/tools/system/automatic-timezoned/default.nix6
-rw-r--r--pkgs/tools/system/nsc/default.nix8
-rw-r--r--pkgs/tools/system/zram-generator/Cargo.lock28
-rw-r--r--pkgs/tools/text/vale/default.nix6
-rw-r--r--pkgs/tools/virtualization/govc/default.nix4
-rw-r--r--pkgs/top-level/all-packages.nix18
-rw-r--r--pkgs/top-level/linux-kernels.nix2
-rw-r--r--pkgs/top-level/perl-packages.nix39
-rw-r--r--pkgs/top-level/python-packages.nix23
143 files changed, 4978 insertions, 1372 deletions
diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix
index da13f66838c..5df00f2371f 100644
--- a/maintainers/maintainer-list.nix
+++ b/maintainers/maintainer-list.nix
@@ -1225,6 +1225,11 @@
     githubId = 81317317;
     name = "Anna Aurora";
   };
+  a-n-n-a-l-e-e = {
+    github = "a-n-n-a-l-e-e";
+    githubId = 150648636;
+    name = "annalee";
+  };
   anoa = {
     matrix = "@andrewm:amorgan.xyz";
     email = "andrew@amorgan.xyz";
@@ -2477,6 +2482,12 @@
     githubId = 50839;
     name = "Brian Jones";
   };
+  boltzmannrain = {
+    email = "boltzmannrain@gmail.com";
+    github = "boltzmannrain";
+    githubId = 150560585;
+    name = "Dmitry Ivankov";
+  };
   booklearner = {
     name = "booklearner";
     email = "booklearner@proton.me";
@@ -2682,6 +2693,12 @@
     githubId = 61636;
     name = "Brad Langhorst";
   };
+  bycEEE = {
+    email = "bycEEE@gmail.com";
+    github = "bycEEE";
+    githubId = 8891115;
+    name = "Brian Choy";
+  };
   bzizou = {
     email = "Bruno@bzizou.net";
     github = "bzizou";
@@ -7793,6 +7810,12 @@
     githubId = 4458;
     name = "Ivan Kozik";
   };
+  ivan770 = {
+    email = "ivan@ivan770.me";
+    github = "ivan770";
+    githubId = 14003886;
+    name = "Ivan Leshchenko";
+  };
   ivan-babrou = {
     email = "nixpkgs@ivan.computer";
     name = "Ivan Babrou";
@@ -10968,6 +10991,12 @@
     githubId = 1651325;
     name = "maralorn";
   };
+  marcovergueira = {
+    email = "vergueira.marco@gmail.com";
+    github = "marcovergueira";
+    githubId = 929114;
+    name = "Marco Vergueira";
+  };
   marcus7070 = {
     email = "marcus@geosol.com.au";
     github = "marcus7070";
@@ -14041,6 +14070,12 @@
     githubId = 301903;
     name = "Chip Collier";
   };
+  phrogg = {
+    name = "Phil Roggenbuck";
+    email = "nixpkgs@phrogg.de";
+    github = "phrogg";
+    githubId = 1367949;
+  };
   phryneas = {
     email = "mail@lenzw.de";
     github = "phryneas";
@@ -14696,6 +14731,12 @@
       fingerprint = "3586 3350 BFEA C101 DB1A 4AF0 1F81 112D 62A9 ADCE";
     }];
   };
+  qdlmcfresh = {
+    name = "Philipp Urlbauer";
+    email = "qdlmcfresh@gmail.com";
+    github = "qdlmcfresh";
+    githubId = 10837173;
+  };
   qjoly = {
     email = "github@thoughtless.eu";
     github = "qjoly";
@@ -14810,6 +14851,12 @@
     githubId = 1016742;
     name = "Rafael García";
   };
+  rafaelrc = {
+    email = "contact@rafaelrc.com";
+    name = "Rafael Carvalho";
+    github = "rafaelrc7";
+    githubId = 5376043;
+  };
   ragge = {
     email = "r.dahlen@gmail.com";
     github = "ragnard";
diff --git a/nixos/doc/manual/release-notes/rl-2311.section.md b/nixos/doc/manual/release-notes/rl-2311.section.md
index d12695e20de..e2853569423 100644
--- a/nixos/doc/manual/release-notes/rl-2311.section.md
+++ b/nixos/doc/manual/release-notes/rl-2311.section.md
@@ -30,6 +30,9 @@
 
 [`sudo-rs`]: https://github.com/memorysafety/sudo-rs/
 
+- `linuxPackages_testing_bcachefs` is now soft-deprecated by `linuxPackages_testing`.
+  - Please consider changing your NixOS configuration's `boot.kernelPackages` to `linuxPackages_testing` until a stable kernel with bcachefs support is released.
+
 - All [ROCm](https://rocm.docs.amd.com/en/latest/) packages have been updated to 5.7.0.
   - [ROCm](https://rocm.docs.amd.com/en/latest/) package attribute sets are versioned: `rocmPackages` -> `rocmPackages_5`.
 
diff --git a/nixos/modules/services/networking/mullvad-vpn.nix b/nixos/modules/services/networking/mullvad-vpn.nix
index 99ffbf56ccb..8c7d5237971 100644
--- a/nixos/modules/services/networking/mullvad-vpn.nix
+++ b/nixos/modules/services/networking/mullvad-vpn.nix
@@ -65,7 +65,9 @@ with lib;
         pkgs.iproute2
         # Needed for ping
         "/run/wrappers"
-      ];
+        # See https://github.com/NixOS/nixpkgs/issues/262681
+      ] ++ (lib.optional config.networking.resolvconf.enable
+        config.networking.resolvconf.package);
       startLimitBurst = 5;
       startLimitIntervalSec = 20;
       serviceConfig = {
diff --git a/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py b/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
index 7d06e0131d9..e2e7ffe59dc 100644
--- a/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
+++ b/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
@@ -277,7 +277,7 @@ def install_bootloader(args: argparse.Namespace) -> None:
 
         if installed_version < available_version:
             print("updating systemd-boot from %s to %s" % (installed_version, available_version))
-            subprocess.check_call(["@systemd@/bin/bootctl", "--esp-path=@efiSysMountPoint@", "update"])
+            subprocess.check_call(["@systemd@/bin/bootctl", "--esp-path=@efiSysMountPoint@"] + bootctl_flags + ["update"])
 
     os.makedirs("@efiSysMountPoint@/efi/nixos", exist_ok=True)
     os.makedirs("@efiSysMountPoint@/loader/entries", exist_ok=True)
diff --git a/nixos/modules/system/boot/networkd.nix b/nixos/modules/system/boot/networkd.nix
index b61db86cbaa..33261021480 100644
--- a/nixos/modules/system/boot/networkd.nix
+++ b/nixos/modules/system/boot/networkd.nix
@@ -1293,6 +1293,7 @@ let
           "FirewallMark"
           "Wash"
           "SplitGSO"
+          "AckFilter"
         ])
         (assertValueOneOf "AutoRateIngress" boolValues)
         (assertInt "OverheadBytes")
@@ -1325,6 +1326,7 @@ let
         (assertRange "FirewallMark" 1 4294967295)
         (assertValueOneOf "Wash" boolValues)
         (assertValueOneOf "SplitGSO" boolValues)
+        (assertValueOneOf "AckFilter" (boolValues ++ ["aggressive"]))
       ];
 
       sectionControlledDelay = checkUnitConfig "ControlledDelay" [
diff --git a/nixos/modules/tasks/filesystems/bcachefs.nix b/nixos/modules/tasks/filesystems/bcachefs.nix
index af7ba7aa6a0..d144ce62dc2 100644
--- a/nixos/modules/tasks/filesystems/bcachefs.nix
+++ b/nixos/modules/tasks/filesystems/bcachefs.nix
@@ -1,10 +1,8 @@
 { config, lib, pkgs, utils, ... }:
 
-with lib;
-
 let
 
-  bootFs = filterAttrs (n: fs: (fs.fsType == "bcachefs") && (utils.fsNeededForBoot fs)) config.fileSystems;
+  bootFs = lib.filterAttrs (n: fs: (fs.fsType == "bcachefs") && (utils.fsNeededForBoot fs)) config.fileSystems;
 
   commonFunctions = ''
     prompt() {
@@ -56,7 +54,7 @@ let
   # remove this adaptation when bcachefs implements mounting by filesystem uuid
   # also, implement automatic waiting for the constituent devices when that happens
   # bcachefs does not support mounting devices with colons in the path, ergo we don't (see #49671)
-  firstDevice = fs: head (splitString ":" fs.device);
+  firstDevice = fs: lib.head (lib.splitString ":" fs.device);
 
   openCommand = name: fs: ''
     tryUnlock ${name} ${firstDevice fs}
@@ -90,22 +88,45 @@ let
     };
   };
 
+  assertions = [
+    {
+      assertion = let
+        kernel = config.boot.kernelPackages.kernel;
+      in (
+        kernel.kernelAtLeast "6.7" || (
+          lib.elem (kernel.structuredExtraConfig.BCACHEFS_FS or null) [
+            lib.kernel.module
+            lib.kernel.yes
+            lib.kernel.option.yes
+          ]
+        )
+      );
+
+      message = "Linux 6.7-rc1 at minimum or a custom linux kernel with bcachefs support is required";
+    }
+  ];
 in
 
 {
-  config = mkIf (elem "bcachefs" config.boot.supportedFilesystems) (mkMerge [
+  config = lib.mkIf (lib.elem "bcachefs" config.boot.supportedFilesystems) (lib.mkMerge [
     {
+      inherit assertions;
       # needed for systemd-remount-fs
       system.fsPackages = [ pkgs.bcachefs-tools ];
 
-      # use kernel package with bcachefs support until it's in mainline
-      # TODO replace with requireKernelConfig
-      boot.kernelPackages = pkgs.linuxPackages_testing_bcachefs;
+      # FIXME: Replace this with `linuxPackages_testing` after NixOS 23.11 is released
+      # FIXME: Replace this with `linuxPackages_latest` when 6.7 is released, remove this line when the LTS version is at least 6.7
+      boot.kernelPackages = lib.mkDefault (
+        # FIXME: Remove warning after NixOS 23.11 is released
+        lib.warn "Please upgrade to Linux 6.7-rc1 or later: 'linuxPackages_testing_bcachefs' is deprecated. Use 'boot.kernelPackages = pkgs.linuxPackages_testing;' to silence this warning"
+        pkgs.linuxPackages_testing_bcachefs
+      );
 
       systemd.services = lib.mapAttrs' (mkUnits "") (lib.filterAttrs (n: fs: (fs.fsType == "bcachefs") && (!utils.fsNeededForBoot fs)) config.fileSystems);
     }
 
-    (mkIf ((elem "bcachefs" config.boot.initrd.supportedFilesystems) || (bootFs != {})) {
+    (lib.mkIf ((lib.elem "bcachefs" config.boot.initrd.supportedFilesystems) || (bootFs != {})) {
+      inherit assertions;
       # chacha20 and poly1305 are required only for decryption attempts
       boot.initrd.availableKernelModules = [ "bcachefs" "sha256" "chacha20" "poly1305" ];
       boot.initrd.systemd.extraBin = {
@@ -121,7 +142,7 @@ in
         $out/bin/bcachefs version
       '';
 
-      boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable) (commonFunctions + concatStrings (mapAttrsToList openCommand bootFs));
+      boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable) (commonFunctions + lib.concatStrings (lib.mapAttrsToList openCommand bootFs));
 
       boot.initrd.systemd.services = lib.mapAttrs' (mkUnits "/sysroot") bootFs;
     })
diff --git a/nixos/tests/installer.nix b/nixos/tests/installer.nix
index 1baa4396424..e9ec2874985 100644
--- a/nixos/tests/installer.nix
+++ b/nixos/tests/installer.nix
@@ -991,6 +991,68 @@ in {
     '';
   };
 
+  bcachefsLinuxTesting = makeInstallerTest "bcachefs-linux-testing" {
+    extraInstallerConfig = {
+      imports = [ no-zfs-module ];
+
+      boot = {
+        supportedFilesystems = [ "bcachefs" ];
+        kernelPackages = pkgs.linuxPackages_testing;
+      };
+    };
+
+    extraConfig = ''
+      boot.kernelPackages = pkgs.linuxPackages_testing;
+    '';
+
+    createPartitions = ''
+      machine.succeed(
+        "flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+        + " mkpart primary ext2 1M 100MB"          # /boot
+        + " mkpart primary linux-swap 100M 1024M"  # swap
+        + " mkpart primary 1024M -1s",             # /
+        "udevadm settle",
+        "mkswap /dev/vda2 -L swap",
+        "swapon -L swap",
+        "mkfs.bcachefs -L root /dev/vda3",
+        "mount -t bcachefs /dev/vda3 /mnt",
+        "mkfs.ext3 -L boot /dev/vda1",
+        "mkdir -p /mnt/boot",
+        "mount /dev/vda1 /mnt/boot",
+      )
+    '';
+  };
+
+  bcachefsUpgradeToLinuxTesting = makeInstallerTest "bcachefs-upgrade-to-linux-testing" {
+    extraInstallerConfig = {
+      imports = [ no-zfs-module ];
+      boot.supportedFilesystems = [ "bcachefs" ];
+      # We don't have network access in the VM, we need this for `nixos-install`
+      system.extraDependencies = [ pkgs.linux_testing ];
+    };
+
+    extraConfig = ''
+      boot.kernelPackages = pkgs.linuxPackages_testing;
+    '';
+
+    createPartitions = ''
+      machine.succeed(
+        "flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+        + " mkpart primary ext2 1M 100MB"          # /boot
+        + " mkpart primary linux-swap 100M 1024M"  # swap
+        + " mkpart primary 1024M -1s",             # /
+        "udevadm settle",
+        "mkswap /dev/vda2 -L swap",
+        "swapon -L swap",
+        "mkfs.bcachefs -L root /dev/vda3",
+        "mount -t bcachefs /dev/vda3 /mnt",
+        "mkfs.ext3 -L boot /dev/vda1",
+        "mkdir -p /mnt/boot",
+        "mount /dev/vda1 /mnt/boot",
+      )
+    '';
+  };
+
   # Test using labels to identify volumes in grub
   simpleLabels = makeInstallerTest "simpleLabels" {
     createPartitions = ''
diff --git a/pkgs/applications/editors/cudatext/default.nix b/pkgs/applications/editors/cudatext/default.nix
index 84df7d5b0c2..ad67837b389 100644
--- a/pkgs/applications/editors/cudatext/default.nix
+++ b/pkgs/applications/editors/cudatext/default.nix
@@ -38,20 +38,21 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "cudatext";
-  version = "1.201.0";
+  version = "1.201.0.2";
 
   src = fetchFromGitHub {
     owner = "Alexey-T";
     repo = "CudaText";
     rev = version;
-    hash = "sha256-Do2JPNZtoi7zbUnJomQAZ8zR/WPB6+G051xZWmeUBP4=";
+    hash = "sha256-ke7i0eeZHEsVhtzaS0AeLQOrYE1F+ppCwjR2TWeJQPA=";
   };
 
+  patches = [ ./proc_globdata.patch ];
+
   postPatch = ''
     substituteInPlace app/proc_globdata.pas \
-      --replace "/usr/share/cudatext" "$out/share/cudatext" \
-      --replace "libpython3.so" "${python3}/lib/libpython${python3.pythonVersion}.so" \
-      --replace "AllowProgramUpdates:= true;" "AllowProgramUpdates:= false;"
+      --subst-var out \
+      --subst-var-by python3 ${python3}
   '';
 
   nativeBuildInputs = [ lazarus fpc ]
diff --git a/pkgs/applications/editors/cudatext/proc_globdata.patch b/pkgs/applications/editors/cudatext/proc_globdata.patch
new file mode 100644
index 00000000000..b89476bb5fc
--- /dev/null
+++ b/pkgs/applications/editors/cudatext/proc_globdata.patch
@@ -0,0 +1,30 @@
+diff --git i/app/proc_globdata.pas w/app/proc_globdata.pas
+index d161b09c7..0fcfbdc09 100644
+--- i/app/proc_globdata.pas
++++ w/app/proc_globdata.pas
+@@ -1342,6 +1342,7 @@ begin
+ 
+   {$ifdef unix}
+   for Dir in [
++              '@python3@/lib',
+               '/usr/lib64',
+               '/usr/lib',
+               '/usr/lib/x86_64-linux-gnu'
+@@ -1364,7 +1365,7 @@ var
+ function GetDirPrecopy: string;
+ begin
+   {$ifdef linux}
+-  exit('/usr/share/cudatext');
++  exit('@out@/share/cudatext');
+   {$endif}
+ 
+   {$ifdef darwin}
+@@ -2056,7 +2057,7 @@ begin
+     FindWrapAtEdge_Delay:= 350;
+     FindWrapAtEdge_ThemeItem:= ''; //'EdMarkedRangeBg';
+ 
+-    AllowProgramUpdates:= true;
++    AllowProgramUpdates:= false;
+     EscapeClose:= false;
+     EscapeCloseConsole:= true;
+     EscapeCloseFinder:= true;
diff --git a/pkgs/applications/editors/texstudio/default.nix b/pkgs/applications/editors/texstudio/default.nix
index ef0f15734a2..1f66a581dbe 100644
--- a/pkgs/applications/editors/texstudio/default.nix
+++ b/pkgs/applications/editors/texstudio/default.nix
@@ -1,4 +1,5 @@
 { stdenv, lib, fetchFromGitHub, cmake, qtbase, qttools, qtsvg, qt5compat, quazip
+, qtwayland
 , hunspell
 , wrapQtAppsHook, poppler, zlib, pkg-config }:
 
@@ -27,6 +28,8 @@ stdenv.mkDerivation (finalAttrs: {
     qttools
     quazip
     zlib
+  ] ++ lib.optionals stdenv.isLinux [
+    qtwayland
   ];
 
   postInstall = lib.optionalString stdenv.isDarwin ''
diff --git a/pkgs/applications/emulators/kega-fusion/default.nix b/pkgs/applications/emulators/kega-fusion/default.nix
index 1b95dec89fa..f69a9c3206c 100644
--- a/pkgs/applications/emulators/kega-fusion/default.nix
+++ b/pkgs/applications/emulators/kega-fusion/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, lib, writeText, fetchurl, upx, libGLU, glib, gtk2, alsa-lib, libSM, libX11, gdk-pixbuf, pango, libXinerama, mpg123, runtimeShell }:
+{ stdenv, lib, writeText, fetchurl, upx, libGL, libGLU, glib, gtk2, alsa-lib, libSM, libX11, gdk-pixbuf, pango, libXinerama, mpg123, runtimeShell }:
 
 let
-  libPath = lib.makeLibraryPath [ stdenv.cc.cc libGLU glib gtk2 alsa-lib libSM libX11 gdk-pixbuf pango libXinerama ];
+  libPath = lib.makeLibraryPath [ stdenv.cc.cc libGL libGLU glib gtk2 alsa-lib libSM libX11 gdk-pixbuf pango libXinerama ];
 
 in stdenv.mkDerivation {
   pname = "kega-fusion";
diff --git a/pkgs/applications/emulators/wine/base.nix b/pkgs/applications/emulators/wine/base.nix
index 2e84a8f2091..68814ca5ba5 100644
--- a/pkgs/applications/emulators/wine/base.nix
+++ b/pkgs/applications/emulators/wine/base.nix
@@ -37,8 +37,11 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
     # The Wine preloader must _not_ be linked to any system libraries, but `NIX_LDFLAGS` will link
     # to libintl, libiconv, and CoreFoundation no matter what. Delete the one that was built and
     # rebuild it with empty NIX_LDFLAGS.
-    rm loader/wine64-preloader
-    make loader/wine64-preloader NIX_LDFLAGS="" NIX_LDFLAGS_${stdenv.cc.suffixSalt}=""
+    for preloader in wine-preloader wine64-preloader; do
+      rm loader/$preloader &> /dev/null \
+      && ( echo "Relinking loader/$preloader"; make loader/$preloader NIX_LDFLAGS="" NIX_LDFLAGS_${stdenv.cc.suffixSalt}="" ) \
+      || echo "loader/$preloader not built, skipping relink."
+    done
   '';
 }) // rec {
   inherit version src;
@@ -109,7 +112,8 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
       # uses property syntax in one place. The first patch is necessary only with older
       # versions of Wine. The second is needed on all versions of Wine.
       (lib.optional (lib.versionOlder version "8.12") ./darwin-metal-compat-pre8.12.patch)
-      ./darwin-metal-compat.patch
+      (lib.optional (lib.versionOlder version "8.18") ./darwin-metal-compat-pre8.18.patch)
+      (lib.optional (lib.versionAtLeast version "8.18") ./darwin-metal-compat.patch)
       # Wine requires `qos.h`, which is not included by default on the 10.12 SDK in nixpkgs.
       ./darwin-qos.patch
     ]
@@ -203,6 +207,7 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
       fromSource
       binaryNativeCode  # mono, gecko
     ];
+    broken = stdenv.isDarwin && !supportFlags.mingwSupport;
     description = if supportFlags.waylandSupport then "An Open Source implementation of the Windows API on top of OpenGL and Unix (with experimental Wayland support)" else "An Open Source implementation of the Windows API on top of X, OpenGL, and Unix";
     platforms = if supportFlags.waylandSupport then (lib.remove "x86_64-darwin" prevPlatforms) else prevPlatforms;
     maintainers = with lib.maintainers; [ avnik raskin bendlas jmc-figueira reckenrode ];
diff --git a/pkgs/applications/emulators/wine/darwin-metal-compat-pre8.18.patch b/pkgs/applications/emulators/wine/darwin-metal-compat-pre8.18.patch
new file mode 100644
index 00000000000..181b2a0d1a4
--- /dev/null
+++ b/pkgs/applications/emulators/wine/darwin-metal-compat-pre8.18.patch
@@ -0,0 +1,12 @@
+diff --git a/dlls/winemac.drv/cocoa_display.m b/dlls/winemac.drv/cocoa_display.m
+--- a/dlls/winemac.drv/cocoa_display.m
++++ b/dlls/winemac.drv/cocoa_display.m
+@@ -354,7 +354,7 @@ static int macdrv_get_gpu_info_from_display_id_using_metal(struct macdrv_gpu* gp
+ 
+     device = [CGDirectDisplayCopyCurrentMetalDevice(display_id) autorelease];
+     if (device && [device respondsToSelector:@selector(registryID)])
+-        ret = macdrv_get_gpu_info_from_registry_id(gpu, device.registryID);
++        ret = macdrv_get_gpu_info_from_registry_id(gpu, [device registryID]);
+ 
+ done:
+     [pool release];
diff --git a/pkgs/applications/emulators/wine/darwin-metal-compat.patch b/pkgs/applications/emulators/wine/darwin-metal-compat.patch
index 181b2a0d1a4..8176be8ef38 100644
--- a/pkgs/applications/emulators/wine/darwin-metal-compat.patch
+++ b/pkgs/applications/emulators/wine/darwin-metal-compat.patch
@@ -1,12 +1,13 @@
 diff --git a/dlls/winemac.drv/cocoa_display.m b/dlls/winemac.drv/cocoa_display.m
+index fbbe16efcbf..2db375ff3d5 100644
 --- a/dlls/winemac.drv/cocoa_display.m
 +++ b/dlls/winemac.drv/cocoa_display.m
-@@ -354,7 +354,7 @@ static int macdrv_get_gpu_info_from_display_id_using_metal(struct macdrv_gpu* gp
+@@ -387,7 +387,7 @@ static int macdrv_get_gpu_info_from_display_id_using_metal(struct macdrv_gpu* gp
  
      device = [CGDirectDisplayCopyCurrentMetalDevice(display_id) autorelease];
      if (device && [device respondsToSelector:@selector(registryID)])
--        ret = macdrv_get_gpu_info_from_registry_id(gpu, device.registryID);
-+        ret = macdrv_get_gpu_info_from_registry_id(gpu, [device registryID]);
- 
- done:
-     [pool release];
+-        return macdrv_get_gpu_info_from_registry_id(gpu, device.registryID);
++        return macdrv_get_gpu_info_from_registry_id(gpu, [device registryID]);
+     else
+         return -1;
+ }
diff --git a/pkgs/applications/emulators/wine/sources.nix b/pkgs/applications/emulators/wine/sources.nix
index 813d032bf96..1bd1d6a8214 100644
--- a/pkgs/applications/emulators/wine/sources.nix
+++ b/pkgs/applications/emulators/wine/sources.nix
@@ -69,9 +69,9 @@ in rec {
 
   unstable = fetchurl rec {
     # NOTE: Don't forget to change the hash for staging as well.
-    version = "8.17";
+    version = "8.20";
     url = "https://dl.winehq.org/wine/source/8.x/wine-${version}.tar.xz";
-    hash = "sha256-8BeFvTFix05l3rE6oK3XEeN8SERUcZvt0OjCsaNGm34=";
+    hash = "sha256-SNa3a9ZDBaICBX+8GdkiwfSWJfbRqYJZJ8ChhXJzmYI=";
     inherit (stable) patches;
 
     ## see http://wiki.winehq.org/Gecko
@@ -88,9 +88,9 @@ in rec {
 
     ## see http://wiki.winehq.org/Mono
     mono = fetchurl rec {
-      version = "8.0.0";
+      version = "8.1.0";
       url = "https://dl.winehq.org/wine/wine-mono/${version}/wine-mono-${version}-x86.msi";
-      hash = "sha256-dbP0XcodyJhX/p6TLaeHEPZMxtSe8asMcjoXcIW0cRs=";
+      hash = "sha256-DtPsUzrvebLzEhVZMc97EIAAmsDFtMK8/rZ4rJSOCBA=";
     };
 
     updateScript = writeShellScript "update-wine-unstable" ''
@@ -116,8 +116,8 @@ in rec {
 
   staging = fetchFromGitHub rec {
     # https://github.com/wine-staging/wine-staging/releases
-    version = "8.17.1";
-    hash = "sha256-h36NDFYsI0y8TG41IH10IdF4QEuBkBewQ3knZ9iwDpg=";
+    version = "8.20";
+    hash = "sha256-CiWTXjUR1+GY+MO7djHfVUH71zSo3lpH9IaqS5zCeJ8=";
     owner = "wine-staging";
     repo = "wine-staging";
     rev = "v${version}";
@@ -127,12 +127,12 @@ in rec {
 
   wayland = fetchFromGitLab {
     # https://gitlab.collabora.com/alf/wine/-/tree/wayland
-    version = "8.0";
-    hash = "sha256-whRnm21UyKZ4AQufNmctzivISVobnCeidmpYz65vlyk=";
+    version = "8.2";
+    hash = "sha256-Eb2SFBIeQQ3cVZkUQcwNT5mcYe0ShFxBdMc3BlqkwTo=";
     domain = "gitlab.collabora.com";
     owner = "alf";
     repo = "wine";
-    rev = "2f80bd757739f2dd8da41abceae6b87d2c568152";
+    rev = "b2547ddf9e08cafce98cf7734d5c4ec926ef3536";
 
     inherit (unstable) gecko32 gecko64;
 
diff --git a/pkgs/applications/graphics/tesseract/tesseract5.nix b/pkgs/applications/graphics/tesseract/tesseract5.nix
index 46e83d77ca9..791ce9ad9a6 100644
--- a/pkgs/applications/graphics/tesseract/tesseract5.nix
+++ b/pkgs/applications/graphics/tesseract/tesseract5.nix
@@ -1,5 +1,5 @@
-{ lib, stdenv, fetchFromGitHub, autoreconfHook, autoconf-archive, pkg-config
-, leptonica, libpng, libtiff, icu, pango, opencl-headers, fetchpatch
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, curl, leptonica, libarchive, libpng, libtiff, icu, pango, opencl-headers, fetchpatch
 , Accelerate, CoreGraphics, CoreVideo
 }:
 
@@ -19,11 +19,12 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [
     pkg-config
     autoreconfHook
-    autoconf-archive
   ];
 
   buildInputs = [
+    curl
     leptonica
+    libarchive
     libpng
     libtiff
     icu
diff --git a/pkgs/applications/misc/1password-gui/default.nix b/pkgs/applications/misc/1password-gui/default.nix
index 5d5c981526d..2a46cfd5003 100644
--- a/pkgs/applications/misc/1password-gui/default.nix
+++ b/pkgs/applications/misc/1password-gui/default.nix
@@ -9,25 +9,25 @@
 let
 
   pname = "1password";
-  version = if channel == "stable" then "8.10.18" else "8.10.20-1.BETA";
+  version = if channel == "stable" then "8.10.20" else "8.10.20-1.BETA";
 
   sources = {
     stable = {
       x86_64-linux = {
         url = "https://downloads.1password.com/linux/tar/stable/x86_64/1password-${version}.x64.tar.gz";
-        hash = "sha256-3oK8Jzz4+TY4IW8oAenzHo7KQeP58iZ+on5PNliBn7I=";
+        hash = "sha256-KOKqI64uI454ryLy/zdD0jxgY3GekBFoh028ftt1Twg=";
       };
       aarch64-linux = {
         url = "https://downloads.1password.com/linux/tar/stable/aarch64/1password-${version}.arm64.tar.gz";
-        hash = "sha256-OsmgHPlAt9K7ytXMM8BANGcKcD3U1OLd2MLfOS4lc6Q=";
+        hash = "sha256-8MDJFG5d81Alxs1hqLw7DP+Pte+haGKfiZ/erGvks5A=";
       };
       x86_64-darwin = {
         url = "https://downloads.1password.com/mac/1Password-${version}-x86_64.zip";
-        hash = "sha256-wozym2QOLLUf4F+MwdIZfwN+VHkNewB+ZJZEkVNnb/c=";
+        hash = "sha256-T+f19Q/pzsC6lh8OF/w/pzRLBfAdlk1gwQz8funkx8Q=";
       };
       aarch64-darwin = {
         url = "https://downloads.1password.com/mac/1Password-${version}-aarch64.zip";
-        hash = "sha256-v1FZIsvFyIx81BORgDtZBP9jTRY6/0p537trOGf8mcM=";
+        hash = "sha256-kmal5wfqCKAlg7c+xVHM39qrucr+Kaxr4pNBYwKfs5g=";
       };
     };
     beta = {
diff --git a/pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix b/pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix
index cbcb88b9d1a..2690db2d9fb 100644
--- a/pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix
+++ b/pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix
@@ -18,17 +18,10 @@ let
       maintainers = with maintainers; [ mjanczyk svsdep mgregoire ];
     };
 
-    pluginFilename = "KeePassRPC.plgx";
-
-    unpackCmd = ''
-      mkdir deps/
-      cp -p $src deps/$pluginFilename
-    '';
-    sourceRoot = "deps";
-
+    dontUnpack = true;
     installPhase = ''
       mkdir -p $out/lib/dotnet/keepass/
-      cp $pluginFilename $out/lib/dotnet/keepass/$pluginFilename
+      cp $src $out/lib/dotnet/keepass/
     '';
   };
 in
diff --git a/pkgs/applications/misc/spicetify-cli/default.nix b/pkgs/applications/misc/spicetify-cli/default.nix
index b9ac311bcea..6d0b4ec0e1d 100644
--- a/pkgs/applications/misc/spicetify-cli/default.nix
+++ b/pkgs/applications/misc/spicetify-cli/default.nix
@@ -21,6 +21,9 @@ buildGoModule rec {
   # used at runtime, but not installed by default
   postInstall = ''
     cp -r ${src}/jsHelper $out/bin/jsHelper
+    cp -r ${src}/CustomApps $out/bin/CustomApps
+    cp -r ${src}/Extensions $out/bin/Extensions
+    cp -r ${src}/Themes $out/bin/Themes
   '';
 
   doInstallCheck = true;
diff --git a/pkgs/applications/misc/ulauncher/default.nix b/pkgs/applications/misc/ulauncher/default.nix
index 96f033744e6..232a4456e60 100644
--- a/pkgs/applications/misc/ulauncher/default.nix
+++ b/pkgs/applications/misc/ulauncher/default.nix
@@ -21,11 +21,11 @@
 
 python3Packages.buildPythonApplication rec {
   pname = "ulauncher";
-  version = "5.15.4";
+  version = "5.15.6";
 
   src = fetchurl {
     url = "https://github.com/Ulauncher/Ulauncher/releases/download/${version}/ulauncher_${version}.tar.gz";
-    sha256 = "sha256-5pEpYnJFHQKEfTve07ngFVDAOM9+kwrx6hc30gEwsko=";
+    sha256 = "sha256-WOWDekh9rcXeiN/ejiYC4BELhJwd98GkmyDOLN26ayU=";
   };
 
   nativeBuildInputs = with python3Packages; [
diff --git a/pkgs/applications/networking/cluster/arkade/default.nix b/pkgs/applications/networking/cluster/arkade/default.nix
index 2e2ca3341d8..9c5225eb1b4 100644
--- a/pkgs/applications/networking/cluster/arkade/default.nix
+++ b/pkgs/applications/networking/cluster/arkade/default.nix
@@ -7,13 +7,13 @@
 
 buildGoModule rec {
   pname = "arkade";
-  version = "0.10.13";
+  version = "0.10.15";
 
   src = fetchFromGitHub {
     owner = "alexellis";
     repo = "arkade";
     rev = version;
-    hash = "sha256-DhMoNI1eRzP9FK752Z8sAcuj5dpu2vRqXRv4tbSYmLE=";
+    hash = "sha256-1r/f3CoTaOA2ZfM9UBGftZDZdCL9JIrs6SvaSO8BI6w=";
   };
 
   CGO_ENABLED = 0;
diff --git a/pkgs/applications/networking/cluster/calico/default.nix b/pkgs/applications/networking/cluster/calico/default.nix
index 29428d8360e..b1ca2a74542 100644
--- a/pkgs/applications/networking/cluster/calico/default.nix
+++ b/pkgs/applications/networking/cluster/calico/default.nix
@@ -2,16 +2,16 @@
 
 builtins.mapAttrs (pname: { doCheck ? true, mainProgram ? pname, subPackages }: buildGoModule rec {
   inherit pname;
-  version = "3.26.3";
+  version = "3.26.4";
 
   src = fetchFromGitHub {
     owner = "projectcalico";
     repo = "calico";
     rev = "v${version}";
-    hash = "sha256-KbtQ5oMZ1ygYwbaKpyAKTprPZ6+ikDbGLafwOShVd6w=";
+    hash = "sha256-idpvGgtvjtLuW+eQIldWihqgzWIFEM0bK0Ux61dD//w=";
   };
 
-  vendorHash = "sha256-1PBdDpc/cvI5uN6/msxXoMXbx7Osgq12W1VqtZ7XtGE=";
+  vendorHash = "sha256-Dl0YLXrw/roKLmp8cZUa1v2n/UwzOGoL0AN8fNVMknU=";
 
   inherit doCheck subPackages;
 
diff --git a/pkgs/applications/networking/cluster/cilium/default.nix b/pkgs/applications/networking/cluster/cilium/default.nix
index 8e1c1c14fd1..0a7f5178ef1 100644
--- a/pkgs/applications/networking/cluster/cilium/default.nix
+++ b/pkgs/applications/networking/cluster/cilium/default.nix
@@ -2,13 +2,13 @@
 
 buildGoModule rec {
   pname = "cilium-cli";
-  version = "0.15.11";
+  version = "0.15.12";
 
   src = fetchFromGitHub {
     owner = "cilium";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-czU5o6QS4MsXyyedQ0nzwDiCQacHcDsbm2iDk7nU+Y8=";
+    hash = "sha256-Js//4dB8b3w9AOvMhXt91G87FzQ8jHq3W3pJHzLbluA=";
   };
 
   vendorHash = null;
diff --git a/pkgs/applications/networking/cluster/cmctl/default.nix b/pkgs/applications/networking/cluster/cmctl/default.nix
index 8396889f532..5d280425114 100644
--- a/pkgs/applications/networking/cluster/cmctl/default.nix
+++ b/pkgs/applications/networking/cluster/cmctl/default.nix
@@ -8,18 +8,18 @@
 
 buildGoModule rec {
   pname = "cmctl";
-  version = "1.13.1";
+  version = "1.13.2";
 
   src = fetchFromGitHub {
     owner = "cert-manager";
     repo = "cert-manager";
     rev = "v${version}";
-    hash = "sha256-l0D7uVoYTwiVI+b8yYpsJk/eAG5XYidR9CaQ595aTjw=";
+    hash = "sha256-TfFdHKXbbi0yqvyQjZArY9GbkwjUq1Z00UuNAldyDuc=";
   };
 
   sourceRoot = "${src.name}/cmd/ctl";
 
-  vendorHash = "sha256-3Ws2ObyBVYog7oVqHeEgIeWeRQpV1Z+Clilp8wI/PUA=";
+  vendorHash = "sha256-63XxGvVsIRDpQ0ri6VkjciyD+k7eEMBcg0w8NU8ypYs=";
 
   ldflags = [
     "-s"
diff --git a/pkgs/applications/networking/instant-messengers/discord/default.nix b/pkgs/applications/networking/instant-messengers/discord/default.nix
index 1862cf6e04a..6a5cdfd152d 100644
--- a/pkgs/applications/networking/instant-messengers/discord/default.nix
+++ b/pkgs/applications/networking/instant-messengers/discord/default.nix
@@ -1,14 +1,14 @@
 { branch ? "stable", callPackage, fetchurl, lib, stdenv }:
 let
   versions = if stdenv.isLinux then {
-    stable = "0.0.33";
-    ptb = "0.0.53";
-    canary = "0.0.173";
-    development = "0.0.1";
+    stable = "0.0.35";
+    ptb = "0.0.56";
+    canary = "0.0.184";
+    development = "0.0.0";
   } else {
-    stable = "0.0.282";
-    ptb = "0.0.84";
-    canary = "0.0.329";
+    stable = "0.0.284";
+    ptb = "0.0.87";
+    canary = "0.0.340";
     development = "0.0.2";
   };
   version = versions.${branch};
@@ -16,33 +16,33 @@ let
     x86_64-linux = {
       stable = fetchurl {
         url = "https://dl.discordapp.net/apps/linux/${version}/discord-${version}.tar.gz";
-        hash = "sha256-UVgufPNIS7fa3VDzjCWwgK3xxmqNivq461qWLgirClc=";
+        hash = "sha256-VcSRV9LDiUXduRt20kVeAnwinl6FmACQgn//W6eFyys=";
       };
       ptb = fetchurl {
         url = "https://dl-ptb.discordapp.net/apps/linux/${version}/discord-ptb-${version}.tar.gz";
-        hash = "sha256-g2NhwkfNi5Yf+n9vHq/MJ0kylPF3MPocgF/zYfCvoZM=";
+        hash = "sha256-RDXApmhlu2aQTjWVXMyRp0CL29btsQufIPuxjjtJGIU=";
       };
       canary = fetchurl {
         url = "https://dl-canary.discordapp.net/apps/linux/${version}/discord-canary-${version}.tar.gz";
-        hash = "sha256-YFjGUAaZMy1JhtKhAqLbfYTKQSgS9TKWqR078cERNUI=";
+        hash = "sha256-Pu0kei/ls9yrDEpRQcgDAaEkRbYkFmp/jTwOkljoy18=";
       };
       development = fetchurl {
         url = "https://dl-development.discordapp.net/apps/linux/${version}/discord-development-${version}.tar.gz";
-        hash = "sha256-ogLOZZ9pTXB01TqdnmdORIzZ8GbGzskUzbG4E68gZwY=";
+        hash = "sha256-/+9NyreRkXu2++uhwCh3/C1Cos39hfzB0Yjf0Otg9pk=";
       };
     };
     x86_64-darwin = {
       stable = fetchurl {
         url = "https://dl.discordapp.net/apps/osx/${version}/Discord.dmg";
-        hash = "sha256-3WeC+4W9+tpXNXqETorQfnE1HZWCqRkBqW0JM7whRCw=";
+        hash = "sha256-TTzhc6P0hFG9BFMviNx8CCg1cVEKDiB3gtb8oR/slNA=";
       };
       ptb = fetchurl {
         url = "https://dl-ptb.discordapp.net/apps/osx/${version}/DiscordPTB.dmg";
-        hash = "sha256-e2gvjXUw0Yx8UY6utg1SdX8/buewuVYPl5I8fS3QtrI=";
+        hash = "sha256-cl6+kTth/7j+HJHPU4Oy1N5EnmMbpdvltKzrU1by+Ik=";
       };
       canary = fetchurl {
         url = "https://dl-canary.discordapp.net/apps/osx/${version}/DiscordCanary.dmg";
-        hash = "sha256-B4LPFts+sx8GpZp9iRbwapUYrK4c9unH+mAoODGqDgU=";
+        hash = "sha256-LfixXyCoTnifw2GVAnCDnBla757JyGzbvUJwY4UhgGI=";
       };
       development = fetchurl {
         url = "https://dl-development.discordapp.net/apps/osx/${version}/DiscordDevelopment.dmg";
diff --git a/pkgs/applications/networking/instant-messengers/session-desktop/default.nix b/pkgs/applications/networking/instant-messengers/session-desktop/default.nix
index 7989713d4a3..214551cf237 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.3";
+  version = "1.11.4";
   pname = "session-desktop";
 
   src = fetchurl {
     url = "https://github.com/oxen-io/session-desktop/releases/download/v${version}/session-desktop-linux-x86_64-${version}.AppImage";
-    hash = "sha256-HdgW7Ls0h75BXKXGzzf37K9w4bgkfA9eAUEmBrSDT+U=";
+    hash = "sha256-fSa113BYpTZ4jvxroQsoslAkWfQr4/ROkgVOFyiVsKQ=";
   };
   appimage = appimageTools.wrapType2 {
     inherit version pname src;
diff --git a/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix b/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix
index 38719920d8a..aec46a8c0f6 100644
--- a/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix
+++ b/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix
@@ -15,6 +15,7 @@
 , at-spi2-atk
 , cairo
 , pango
+, pipewire
 , gdk-pixbuf
 , glib
 , freetype
@@ -150,7 +151,7 @@ stdenv.mkDerivation rec {
 
   preFixup = ''
     gappsWrapperArgs+=(
-      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc ] }"
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc pipewire ] }"
       # Currently crashes see https://github.com/NixOS/nixpkgs/issues/222043
       #--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
       --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
diff --git a/pkgs/applications/networking/mailreaders/afew/default.nix b/pkgs/applications/networking/mailreaders/afew/default.nix
index c5a07a89c35..a9becb9d8c9 100644
--- a/pkgs/applications/networking/mailreaders/afew/default.nix
+++ b/pkgs/applications/networking/mailreaders/afew/default.nix
@@ -1,40 +1,48 @@
-{ lib, python3Packages, fetchPypi, notmuch }:
+{ lib, python3Packages, fetchPypi, pkgs }:
 
 python3Packages.buildPythonApplication rec {
   pname = "afew";
   version = "3.0.1";
+  pyproject = true;
 
   src = fetchPypi {
     inherit pname version;
     sha256 = "0wpfqbqjlfb9z0hafvdhkm7qw56cr9kfy6n8vb0q42dwlghpz1ff";
   };
 
-  nativeBuildInputs = with python3Packages; [ sphinx setuptools-scm ];
-
-  propagatedBuildInputs = with python3Packages; [
-    python3Packages.setuptools python3Packages.notmuch chardet dkimpy
+  nativeBuildInputs = with python3Packages; [
+    sphinxHook
+    setuptools
+    setuptools-scm
   ];
 
-  nativeCheckInputs = with python3Packages; [
-    freezegun notmuch
+  sphinxBuilders = [
+    "html"
+    "man"
   ];
 
-  makeWrapperArgs = [
-    ''--prefix PATH ':' "${notmuch}/bin"''
+  propagatedBuildInputs = with python3Packages; [
+    chardet
+    dkimpy
+    notmuch
   ];
 
-  outputs = [ "out" "doc" ];
+  nativeCheckInputs = [
+    pkgs.notmuch
+  ] ++ (with python3Packages; [
+    freezegun
+    pytestCheckHook
+  ]);
 
-  postBuild =  ''
-    ${python3Packages.python.pythonOnBuildForHost.interpreter} setup.py build_sphinx -b html,man
-  '';
-
-  postInstall = ''
-    install -D -v -t $out/share/man/man1 build/sphinx/man/*
-    mkdir -p $out/share/doc/afew
-    cp -R build/sphinx/html/* $out/share/doc/afew
-  '';
+  makeWrapperArgs = [
+    ''--prefix PATH ':' "${pkgs.notmuch}/bin"''
+  ];
 
+  outputs = [
+    "out"
+    "doc"
+    "man"
+  ];
 
   meta = with lib; {
     homepage = "https://github.com/afewmail/afew";
diff --git a/pkgs/applications/networking/mailreaders/tutanota-desktop/default.nix b/pkgs/applications/networking/mailreaders/tutanota-desktop/default.nix
index 44eba5bc021..0d0be882f43 100644
--- a/pkgs/applications/networking/mailreaders/tutanota-desktop/default.nix
+++ b/pkgs/applications/networking/mailreaders/tutanota-desktop/default.nix
@@ -3,12 +3,12 @@ electron, libsecret }:
 
 stdenv.mkDerivation rec {
   pname = "tutanota-desktop";
-  version = "3.118.13";
+  version = "3.118.27";
 
   src = fetchurl {
     url = "https://github.com/tutao/tutanota/releases/download/tutanota-desktop-release-${version}/${pname}-${version}-unpacked-linux.tar.gz";
     name = "tutanota-desktop-${version}.tar.gz";
-    hash = "sha256-3kpfF/XG7w6qUooS5UsntMKnggG1LhmV9f+R35kkmb0=";
+    hash = "sha256-z2Ir8O7IDiE7cYuLshpMQMnOJanaECUvKlUEyPayIPo=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/networking/remote/rustdesk/default.nix b/pkgs/applications/networking/remote/rustdesk/default.nix
index 2a06e3f9da5..a4b7cf7ccb4 100644
--- a/pkgs/applications/networking/remote/rustdesk/default.nix
+++ b/pkgs/applications/networking/remote/rustdesk/default.nix
@@ -11,6 +11,7 @@
 , glib
 , gst_all_1
 , gtk3
+, libayatana-appindicator
 , libgit2
 , libpulseaudio
 , libsodium
@@ -145,6 +146,10 @@ rustPlatform.buildRustPackage rec {
     install -Dm0644 $src/res/logo.svg $out/share/icons/hicolor/scalable/apps/rustdesk.svg
   '';
 
+  postFixup = ''
+    patchelf --add-rpath "${libayatana-appindicator}/lib" "$out/lib/rustdesk/rustdesk"
+  '';
+
   env = {
     SODIUM_USE_PKG_CONFIG = true;
     ZSTD_SYS_USE_PKG_CONFIG = true;
diff --git a/pkgs/applications/office/timeular/default.nix b/pkgs/applications/office/timeular/default.nix
index c576319643f..824a20a3132 100644
--- a/pkgs/applications/office/timeular/default.nix
+++ b/pkgs/applications/office/timeular/default.nix
@@ -5,12 +5,12 @@
 }:
 
 let
-  version = "6.5.0";
+  version = "6.6.0";
   pname = "timeular";
 
   src = fetchurl {
     url = "https://s3.amazonaws.com/timeular-desktop-packages/linux/production/Timeular-${version}.AppImage";
-    sha256 = "sha256-RO8PhEjvDye6p6vgqNexIJ1ymTlVtF8yWQAUbJGaZYk=";
+    sha256 = "sha256-RmWRNKy2w3BM/ipQyFpkNC3+XXsJXjN6VYWNo8OKpy0=";
   };
 
   appimageContents = appimageTools.extractType2 {
diff --git a/pkgs/applications/radio/freedv/default.nix b/pkgs/applications/radio/freedv/default.nix
index 66a932b9c99..a337470664a 100644
--- a/pkgs/applications/radio/freedv/default.nix
+++ b/pkgs/applications/radio/freedv/default.nix
@@ -25,13 +25,13 @@
 
 stdenv.mkDerivation rec {
   pname = "freedv";
-  version = "1.9.4";
+  version = "1.9.5";
 
   src = fetchFromGitHub {
     owner = "drowe67";
     repo = "freedv-gui";
     rev = "v${version}";
-    hash = "sha256-3SQ3a1gg4/cXy8BJXazTgh6nkS/KQpM0fCA6JcbHOPc=";
+    hash = "sha256-uCWdDmHzNx1vkZFttQZLD4YfXoXz5VZQfir9sGOoDhw=";
   };
 
   postPatch = lib.optionalString stdenv.isDarwin ''
@@ -39,7 +39,7 @@ stdenv.mkDerivation rec {
       --replace "-Wl,-ld_classic" ""
     substituteInPlace src/CMakeLists.txt \
       --replace "\''${CMAKE_SOURCE_DIR}/macdylibbundler/dylibbundler" "dylibbundler"
-    sed -i "/hdiutil/d" src/CMakeLists.txt
+    sed -i "/codesign/d;/hdiutil/d" src/CMakeLists.txt
   '';
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/science/math/eigenmath/default.nix b/pkgs/applications/science/math/eigenmath/default.nix
index 603a3c4f60b..1e80d9a06eb 100644
--- a/pkgs/applications/science/math/eigenmath/default.nix
+++ b/pkgs/applications/science/math/eigenmath/default.nix
@@ -7,13 +7,13 @@
 
 stdenv.mkDerivation rec {
   pname = "eigenmath";
-  version = "unstable-2023-10-26";
+  version = "unstable-2023-11-17";
 
   src = fetchFromGitHub {
     owner = "georgeweigt";
     repo = pname;
-    rev = "043895fbaed27a4baace7c7c0c1f69ea5a9f3d1a";
-    hash = "sha256-roPyRaT89I3HbyvBK/owiigMus1EeKEhhKHFsgfzp10=";
+    rev = "b0d822f10243ad5b1c88efb5a82b43a0bbf1bfbc";
+    hash = "sha256-eJ/EmzV5UZGxwZNIna/XXkYY+vkLc610KcywBFPRfyM=";
   };
 
   checkPhase = let emulator = stdenv.hostPlatform.emulator buildPackages; in ''
diff --git a/pkgs/applications/version-management/gql/default.nix b/pkgs/applications/version-management/gql/default.nix
index 40b8a9b207c..60a093e1c80 100644
--- a/pkgs/applications/version-management/gql/default.nix
+++ b/pkgs/applications/version-management/gql/default.nix
@@ -8,16 +8,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "gql";
-  version = "0.7.2";
+  version = "0.8.0";
 
   src = fetchFromGitHub {
     owner = "AmrDeveloper";
     repo = "GQL";
     rev = version;
-    hash = "sha256-XqS2oG3/dPHBC/sWN9B7BliSv4IJ1iskrQRTh8vQNd4=";
+    hash = "sha256-+f/OMU8fwwnlm8zTyE5XyIzfFwIB917tH9jaqSW8Skg=";
   };
 
-  cargoHash = "sha256-0mUkXez+5Z8UGKMrUUjt+aF4zv3EJKgnFoQ068gTlX0=";
+  cargoHash = "sha256-A3o9OE8VO7z04WmbZL2rvlZRN/ZHOIGklKZQgiFSfxE=";
 
   nativeBuildInputs = [
     pkg-config
diff --git a/pkgs/applications/virtualization/containerd/default.nix b/pkgs/applications/virtualization/containerd/default.nix
index 3ff03781732..82e814610dc 100644
--- a/pkgs/applications/virtualization/containerd/default.nix
+++ b/pkgs/applications/virtualization/containerd/default.nix
@@ -11,13 +11,13 @@
 
 buildGoModule rec {
   pname = "containerd";
-  version = "1.7.8";
+  version = "1.7.9";
 
   src = fetchFromGitHub {
     owner = "containerd";
     repo = "containerd";
     rev = "v${version}";
-    hash = "sha256-p16qHJD0i0ZNEFGEbfmbxiedX9/uHkZxhCeB3x/5iLM=";
+    hash = "sha256-/kCnzOL8CJuJJglHzmev3alt8cMwTUbIiZhNft9zwps=";
   };
 
   vendorHash = null;
diff --git a/pkgs/applications/virtualization/ecs-agent/default.nix b/pkgs/applications/virtualization/ecs-agent/default.nix
index 34cb0cc757c..8a016147686 100644
--- a/pkgs/applications/virtualization/ecs-agent/default.nix
+++ b/pkgs/applications/virtualization/ecs-agent/default.nix
@@ -2,13 +2,13 @@
 
 buildGoModule rec {
   pname = "amazon-ecs-agent";
-  version = "1.78.0";
+  version = "1.78.1";
 
   src = fetchFromGitHub {
     rev = "v${version}";
     owner = "aws";
     repo = pname;
-    hash = "sha256-/FppBl25AgwZhNcwWmUc0ThaTm1U4lhaoCTTJ/R/srI=";
+    hash = "sha256-8/hHv5veTQXNg8c5oew+5FWLAQkytTD2+Gdb30sY9lo=";
   };
 
   vendorHash = null;
diff --git a/pkgs/applications/virtualization/nixpacks/default.nix b/pkgs/applications/virtualization/nixpacks/default.nix
index 9c19818b2f6..e35a5d16a49 100644
--- a/pkgs/applications/virtualization/nixpacks/default.nix
+++ b/pkgs/applications/virtualization/nixpacks/default.nix
@@ -2,16 +2,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "nixpacks";
-  version = "1.18.0";
+  version = "1.19.0";
 
   src = fetchFromGitHub {
     owner = "railwayapp";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-GmIrz23z/vV6Ut31pajUmPfT9V37Ajs5JaIMD1Ociu8=";
+    sha256 = "sha256-yeZGhE+ImWXW3HPpAo+E1GOSEwPr7yK78XVmCocGqH4=";
   };
 
-  cargoHash = "sha256-AwDaIHuD/0H/SkhxT/V0/4K/5yp+s5DI34e8JQgajgc=";
+  cargoHash = "sha256-xqKYd80PCM7Rnj+9dV2XjigE4sweOnL4HfOQiOYzCEQ=";
 
   # skip test due FHS dependency
   doCheck = false;
diff --git a/pkgs/by-name/br/braa/package.nix b/pkgs/by-name/br/braa/package.nix
new file mode 100644
index 00000000000..380a829f811
--- /dev/null
+++ b/pkgs/by-name/br/braa/package.nix
@@ -0,0 +1,32 @@
+{
+  lib,
+  stdenv,
+  fetchzip,
+  zlib,
+}:
+stdenv.mkDerivation rec {
+  pname = "braa";
+  version = "0.82";
+
+  src = fetchzip {
+    url = "http://s-tech.elsat.net.pl/${pname}/${pname}-${version}.tar.gz";
+    hash = "sha256-GS3kk432BdGx/sLzzjXvotD9Qn4S3U4XtMmM0fWMhGA=";
+  };
+
+  buildInputs = [zlib];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 braa $out/bin/braa
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A mass snmp scanner";
+    homepage = "http://s-tech.elsat.net.pl";
+    license = licenses.gpl2Only;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [bycEEE];
+    mainProgram = "braa";
+  };
+}
diff --git a/pkgs/by-name/de/devdash/package.nix b/pkgs/by-name/de/devdash/package.nix
new file mode 100644
index 00000000000..210a016277f
--- /dev/null
+++ b/pkgs/by-name/de/devdash/package.nix
@@ -0,0 +1,52 @@
+{
+  lib
+, buildGoModule
+, fetchFromGitHub
+, nix-update-script
+, coreutils
+}:
+
+buildGoModule rec {
+  pname = "devdash";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "Phantas0s";
+    repo = "devdash";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-RUPpgMVl9Cm8uhztdfKnuQ6KdMn9m9PewlT59NnTSiY=";
+  };
+
+  vendorHash = "sha256-xuc8rAkyCInNFxs5itwabqBe4CPg/sAuhcTJsapx7Q8=";
+
+  ldflags = [
+    "-s -w"
+    "-X github.com/Phantas0s/devdash/cmd.current=${version}"
+    "-X github.com/Phantas0s/devdash/cmd.buildDate=1970-01-01-00:00:01"
+  ];
+
+  patchPhase = ''
+    runHook prePatch
+
+    shopt -s globstar
+    substituteInPlace **/*.go --replace '"/bin/' '"/usr/bin/env '
+    shopt -u globstar
+
+    runHook postPatch
+  '';
+
+  runtimeDependencies = [
+    coreutils
+  ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = {
+    description = "Highly configurable terminal dashboard for developers and creators";
+    homepage = "https://github.com/Phantas0s/devdash";
+    changelog = "https://github.com/Phantas0s/devdash/blob/v${version}/CHANGELOG.md";
+    maintainers = with lib.maintainers; [ h7x4 ];
+    license = lib.licenses.asl20;
+    mainProgram = "devdash";
+  };
+}
diff --git a/pkgs/by-name/ek/eksctl/package.nix b/pkgs/by-name/ek/eksctl/package.nix
index a670490ef0a..28ebab5239a 100644
--- a/pkgs/by-name/ek/eksctl/package.nix
+++ b/pkgs/by-name/ek/eksctl/package.nix
@@ -6,13 +6,13 @@
 
 buildGoModule rec {
   pname = "eksctl";
-  version = "0.163.0";
+  version = "0.164.0";
 
   src = fetchFromGitHub {
     owner = "weaveworks";
     repo = pname;
     rev = version;
-    hash = "sha256-rpyLjoHMSgEHTILeEQpUKD7BOJHn/uT3GK6Fquirzdk=";
+    hash = "sha256-ENlMcwk4bMbIzV353vt+EG776+/ajrg5la3JeA81QS4=";
   };
 
   vendorHash = "sha256-NOhssVWEkvoXpmnsCVVT7Li0ePGWDSGIlB2MyFtMnpI=";
diff --git a/pkgs/by-name/hi/hifile/package.nix b/pkgs/by-name/hi/hifile/package.nix
index bf2bda5100d..8c8f9707a7d 100644
--- a/pkgs/by-name/hi/hifile/package.nix
+++ b/pkgs/by-name/hi/hifile/package.nix
@@ -1,12 +1,12 @@
 { lib, appimageTools, fetchurl }:
 
 let
-  version = "0.9.9.5";
+  version = "0.9.9.6";
   pname = "hifile";
 
   src = fetchurl {
     url = "https://www.hifile.app/files/HiFile-${version}.AppImage";
-    hash = "sha256-Ks/NLPm5loo9q8pT0LdtfcrC38203beNE74sbEpyuJM=";
+    hash = "sha256-qfBV4w4nChH2wUAHdcUFwVs+3OeqcKqMJ8WUucn31q4=";
   };
 
   appimageContents = appimageTools.extractType2 {
diff --git a/pkgs/applications/misc/nwg-drawer/default.nix b/pkgs/by-name/nw/nwg-drawer/package.nix
index 6e7af27f3b1..debff8429d8 100644
--- a/pkgs/applications/misc/nwg-drawer/default.nix
+++ b/pkgs/by-name/nw/nwg-drawer/package.nix
@@ -1,31 +1,44 @@
 { lib
 , buildGoModule
-, fetchFromGitHub
 , cairo
+, fetchFromGitHub
 , gobject-introspection
-, gtk3
 , gtk-layer-shell
+, gtk3
 , pkg-config
 , wrapGAppsHook
-, xdg-utils }:
+, xdg-utils
+}:
 
-buildGoModule rec {
+let
   pname = "nwg-drawer";
-  version = "0.3.9";
+  version = "0.4.1";
 
   src = fetchFromGitHub {
     owner = "nwg-piotr";
-    repo = pname;
+    repo = "nwg-drawer";
     rev = "v${version}";
-    sha256 = "sha256-RCryDei8Tw1f+7y8iIDC3mASv5nwq4qrWRc4CudS/Cg=";
+    hash = "sha256-2/YI91Rcm+N8tNoKBRIDAQ3T2M6T7+kWngbCzyaXOCc=";
   };
 
-  vendorHash = "sha256-YwXX3srQdCicJlstodqOsL+dwBNVyJx/SwC2dMOUBh4=";
+  vendorHash = "sha256-8s8+ukMQpciQmKt77fNE7r+3cm/UDxO8VtkrNYdKhM8=";
+in
+buildGoModule {
+  inherit pname version src vendorHash;
+
+  nativeBuildInputs = [
+    gobject-introspection
+    pkg-config
+    wrapGAppsHook
+  ];
 
-  buildInputs = [ cairo gtk3 gtk-layer-shell ];
-  nativeBuildInputs = [ pkg-config wrapGAppsHook gobject-introspection ];
+  buildInputs = [
+    cairo
+    gtk-layer-shell
+    gtk3
+  ];
 
-  doCheck = false;
+  doCheck = false; # Too slow
 
   preInstall = ''
     mkdir -p $out/share/nwg-drawer
@@ -43,9 +56,9 @@ buildGoModule rec {
   meta = with lib; {
     description = "Application drawer for sway Wayland compositor";
     homepage = "https://github.com/nwg-piotr/nwg-drawer";
-    license = licenses.mit;
-    platforms = platforms.linux;
+    license = with lib.licenses; [ mit ];
     mainProgram = "nwg-drawer";
-    maintainers = with maintainers; [ plabadens ];
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/by-name/so/soundfont-arachno/package.nix b/pkgs/by-name/so/soundfont-arachno/package.nix
new file mode 100644
index 00000000000..1bfcad7fdc4
--- /dev/null
+++ b/pkgs/by-name/so/soundfont-arachno/package.nix
@@ -0,0 +1,27 @@
+{ lib, stdenvNoCC, fetchzip }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "soundfont-arachno";
+  version = "1.0";
+
+  src = fetchzip {
+    # Linked on http://www.arachnosoft.com/main/download.php?id=soundfont-sf2:
+    url = "https://www.dropbox.com/s/2rnpya9ecb9m4jh/arachno-soundfont-${builtins.replaceStrings ["."] [""] version}-sf2.zip";
+    hash = "sha256-Z5ETe0AKPCi4KlM2xOlNcyQn1xvCuor3S/tcrF+AwNQ=";
+    stripRoot = false;
+  };
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm444 Arachno*.sf2 $out/share/soundfonts/arachno.sf2
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "General MIDI-compliant bank, aimed at enhancing the realism of your MIDI files and arrangements";
+    homepage = "http://www.arachnosoft.com/main/soundfont.php";
+    license = licenses.unfree;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ mrtnvgr ];
+  };
+}
diff --git a/pkgs/by-name/sw/sway-audio-idle-inhibit/package.nix b/pkgs/by-name/sw/sway-audio-idle-inhibit/package.nix
new file mode 100644
index 00000000000..ae41f6a2368
--- /dev/null
+++ b/pkgs/by-name/sw/sway-audio-idle-inhibit/package.nix
@@ -0,0 +1,39 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, libpulseaudio
+, wayland
+, wayland-protocols
+}:
+stdenv.mkDerivation {
+  pname = "sway-audio-idle-inhibit";
+  version = "unstable-2023-08-09";
+
+  src = fetchFromGitHub {
+    owner = "ErikReider";
+    repo = "SwayAudioIdleInhibit";
+    rev = "c850bc4812216d03e05083c69aa05326a7fab9c7";
+    sha256 = "sha256-MKzyF5xY0uJ/UWewr8VFrK0y7ekvcWpMv/u9CHG14gs=";
+  };
+
+  nativeBuildInputs = [
+    meson ninja pkg-config
+  ];
+
+  buildInputs = [
+    libpulseaudio wayland wayland-protocols
+  ];
+
+  meta = with lib; {
+    description = "Prevents swayidle from sleeping while any application is outputting or receiving audio";
+    homepage = "https://github.com/ErikReider/SwayAudioIdleInhibit";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rafaelrc ];
+    mainProgram = "sway-audio-idle-inhibit";
+  };
+}
+
diff --git a/pkgs/by-name/sw/sway-overfocus/package.nix b/pkgs/by-name/sw/sway-overfocus/package.nix
new file mode 100644
index 00000000000..08b6158d4f1
--- /dev/null
+++ b/pkgs/by-name/sw/sway-overfocus/package.nix
@@ -0,0 +1,30 @@
+{ fetchFromGitHub, lib, nix-update-script, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sway-overfocus";
+  version = "0.2.3-fix";
+
+  src = fetchFromGitHub {
+    owner = "korreman";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-KHbYlxgrrZdNKJ7R9iVflbbP1c6qohM/NHBSYuzxEt4=";
+  };
+
+  cargoHash = "sha256-zp6PSu8P+ZUhrqi5Vxpe+z9zBaSkdVQBMGNP0FVOviQ=";
+
+  # Crate without tests.
+  doCheck = false;
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = ''"Better" focus navigation for sway and i3.'';
+    homepage = "https://github.com/korreman/sway-overfocus";
+    changelog = "https://github.com/korreman/sway-overfocus/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivan770 ];
+    mainProgram = "sway-overfocus";
+  };
+}
+
diff --git a/pkgs/desktops/plasma-5/discover.nix b/pkgs/desktops/plasma-5/discover.nix
index b9d3dd80a23..2c2600845b2 100644
--- a/pkgs/desktops/plasma-5/discover.nix
+++ b/pkgs/desktops/plasma-5/discover.nix
@@ -8,7 +8,6 @@
 , flatpak
 , fwupd
 , ostree
-, packagekit-qt
 , pcre
 , util-linux
 , qtquickcontrols2
@@ -42,7 +41,6 @@ mkDerivation {
     flatpak
     fwupd
     ostree
-    packagekit-qt
     pcre
     util-linux
     qtquickcontrols2
diff --git a/pkgs/development/compilers/factor-lang/adjust-paths-in-unit-tests.patch b/pkgs/development/compilers/factor-lang/adjust-paths-in-unit-tests.patch
index 068d7c09b68..10f812e3814 100644
--- a/pkgs/development/compilers/factor-lang/adjust-paths-in-unit-tests.patch
+++ b/pkgs/development/compilers/factor-lang/adjust-paths-in-unit-tests.patch
@@ -8,17 +8,17 @@ Subject: [PATCH] adjust unit test for finding executables in path for NixOS
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/basis/io/standard-paths/unix/unix-tests.factor b/basis/io/standard-paths/unix/unix-tests.factor
-index 986c0564d2..f0772fdcc9 100644
+index acd5029..870537f 100644
 --- a/basis/io/standard-paths/unix/unix-tests.factor
 +++ b/basis/io/standard-paths/unix/unix-tests.factor
-@@ -5,12 +5,12 @@ sequences tools.test ;
- 
+@@ -5,13 +5,13 @@ sequences tools.test ;
+
  { f } [ "" find-in-path ] unit-test
  { t } [
 -    "ls" find-in-path { "/bin/ls" "/usr/bin/ls" } member?
 +    "ls" find-in-path not not
  ] unit-test
- 
+
  { t } [
      "/sbin:" "PATH" os-env append "PATH" [
          "ps" find-in-path
@@ -26,6 +26,3 @@ index 986c0564d2..f0772fdcc9 100644
 +        not not
      ] with-os-env
  ] unit-test
--- 
-2.19.2
-
diff --git a/pkgs/development/compilers/factor-lang/factor98.nix b/pkgs/development/compilers/factor-lang/factor99.nix
index 104290684a5..85ff98a28ba 100644
--- a/pkgs/development/compilers/factor-lang/factor98.nix
+++ b/pkgs/development/compilers/factor-lang/factor99.nix
@@ -83,8 +83,8 @@ let
     ${wrapFactorScript { from = "./factor"; inherit runtimeLibs; }}
     ln -sf factor.image .factor-wrapped.image
   '';
-  rev = "7999e72aecc3c5bc4019d43dc4697f49678cc3b4";
-  version = "0.98";
+  rev = "e10b64dbc53a8583098e73580a1eb9ff4ce0c709";
+  version = "0.99";
 
 in
 stdenv.mkDerivation {
@@ -93,12 +93,12 @@ stdenv.mkDerivation {
 
   src = fetchurl {
     url = "https://downloads.factorcode.org/releases/${version}/factor-src-${version}.zip";
-    sha256 = "01ip9mbnar4sv60d2wcwfz62qaamdvbykxw3gbhzqa25z36vi3ri";
+    sha256 = "f5626bb3119bd77de9ac3392fdbe188bffc26557fab3ea34f7ca21e372a8443e";
   };
 
   patches = [
-    ./staging-command-line-0.98-pre.patch
-    ./workdir-0.98-pre.patch
+    ./staging-command-line-0.99-pre.patch
+    ./workdir-0.99-pre.patch
     ./adjust-paths-in-unit-tests.patch
   ];
 
diff --git a/pkgs/development/compilers/factor-lang/scope.nix b/pkgs/development/compilers/factor-lang/scope.nix
index 02f0f889634..af0d7af1293 100644
--- a/pkgs/development/compilers/factor-lang/scope.nix
+++ b/pkgs/development/compilers/factor-lang/scope.nix
@@ -5,7 +5,7 @@ let
   inside = (self:
   let callPackage = pkgs.newScope self;
   in rec {
-    interpreter = callPackage ./factor98.nix { inherit (pkgs) stdenv; };
+    interpreter = callPackage ./factor99.nix { inherit (pkgs) stdenv; };
 
     # Convenience access for using the returned attribute the same way as the
     # interpreter derivation. Takes a list of runtime libraries as its only
diff --git a/pkgs/development/compilers/factor-lang/staging-command-line-0.98-pre.patch b/pkgs/development/compilers/factor-lang/staging-command-line-0.99-pre.patch
index 57fc657ddcf..a9631664a35 100644
--- a/pkgs/development/compilers/factor-lang/staging-command-line-0.98-pre.patch
+++ b/pkgs/development/compilers/factor-lang/staging-command-line-0.99-pre.patch
@@ -1,10 +1,10 @@
 diff --git a/basis/tools/deploy/backend/backend.factor b/basis/tools/deploy/backend/backend.factor
-index ec86089dbe..b146168ec9 100644
+index cfcca0d..87a2b01 100644
 --- a/basis/tools/deploy/backend/backend.factor
 +++ b/basis/tools/deploy/backend/backend.factor
-@@ -69,7 +69,7 @@ ERROR: can't-deploy-library-file library ;
+@@ -72,7 +72,7 @@ ERROR: can't-deploy-library-file library ;
              [ staging-image-name "-output-image=" prepend , ]
-             [ " " join "-include=" prepend , ] bi
+             [ join-words "-include=" prepend , ] bi
          ] [
 -            input-image-name "-i=" prepend ,
 +            input-image-name resource-path "-i=" prepend ,
diff --git a/pkgs/development/compilers/factor-lang/workdir-0.98-pre.patch b/pkgs/development/compilers/factor-lang/workdir-0.98-pre.patch
deleted file mode 100644
index f1498743dd6..00000000000
--- a/pkgs/development/compilers/factor-lang/workdir-0.98-pre.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-diff --git a/core/io/pathnames/pathnames.factor b/core/io/pathnames/pathnames.factor
-index 2d382e49d1..d4d9228d6c 100644
---- a/core/io/pathnames/pathnames.factor
-+++ b/core/io/pathnames/pathnames.factor
-@@ -144,7 +144,10 @@ GENERIC: vocab-path ( path -- newpath )
- GENERIC: absolute-path ( path -- path' )
- 
- M: string absolute-path
--    "resource:" ?head [
-+    "resource:work" ?head [
-+        trim-head-separators "/var/lib/factor" prepend-path
-+        absolute-path ]
-+    [ "resource:" ?head [
-         trim-head-separators resource-path
-         absolute-path
-     ] [
-@@ -158,6 +161,7 @@ M: string absolute-path
-         ] [
-             current-directory get prepend-path
-         ] if ] if
-+      ] if
-     ] if ;
- 
- M: object normalize-path ( path -- path' )
diff --git a/pkgs/development/compilers/factor-lang/workdir-0.99-pre.patch b/pkgs/development/compilers/factor-lang/workdir-0.99-pre.patch
new file mode 100644
index 00000000000..f1e7a592062
--- /dev/null
+++ b/pkgs/development/compilers/factor-lang/workdir-0.99-pre.patch
@@ -0,0 +1,13 @@
+diff --git a/core/io/pathnames/pathnames.factor b/core/io/pathnames/pathnames.factor
+index a172fe4..40858bc 100644
+--- a/core/io/pathnames/pathnames.factor
++++ b/core/io/pathnames/pathnames.factor
+@@ -166,6 +166,8 @@ GENERIC: absolute-path ( path -- path' )
+
+ M: string absolute-path
+     {
++        { [ "resource:work" ?head ]
++          [ trim-head-separators "/var/lib/factor" prepend-path absolute-path ] }
+         { [ "resource:" ?head ] [ trim-head-separators resource-path absolute-path ] }
+         { [ "vocab:" ?head ] [ trim-head-separators vocab-path absolute-path ] }
+         { [ "~" ?head ] [ trim-head-separators home prepend-path absolute-path ] }
diff --git a/pkgs/development/interpreters/cel-go/default.nix b/pkgs/development/interpreters/cel-go/default.nix
index d45abd4c0f4..821e8da2ee3 100644
--- a/pkgs/development/interpreters/cel-go/default.nix
+++ b/pkgs/development/interpreters/cel-go/default.nix
@@ -5,24 +5,18 @@
 
 buildGoModule rec {
   pname = "cel-go";
-  version = "0.18.1";
+  version = "0.18.2";
 
   src = fetchFromGitHub {
     owner = "google";
     repo = "cel-go";
     rev = "v${version}";
-    hash = "sha256-eXltZkg5QjdCrL9sk2ngVtirSnjBBqk+OdNLY4QtVx4=";
+    hash = "sha256-c4MVOHkDaUGlRVYb9YS9BH4ld2zS3SR5efP6amLhTig=";
   };
 
   modRoot = "repl";
 
-  vendorHash = "sha256-kalTHpyMYrKZHayxNKLc8vtogiDKyyQLExOQhqp1MUY=";
-
-  patches = [
-    # repl/go.mod and repl/go.sum are outdated
-    # ran `go mod tidy` in the repl directory
-    ./go-mod-tidy.patch
-  ];
+  vendorHash = "sha256-Oj/XUUmuj5scD5WT6zBxnU1hSapDyRBBz75rbIdY4Ho=";
 
   subPackages = [
     "main"
diff --git a/pkgs/development/interpreters/cel-go/go-mod-tidy.patch b/pkgs/development/interpreters/cel-go/go-mod-tidy.patch
deleted file mode 100644
index a1f4f06ae83..00000000000
--- a/pkgs/development/interpreters/cel-go/go-mod-tidy.patch
+++ /dev/null
@@ -1,52 +0,0 @@
---- a/repl/go.mod
-+++ b/repl/go.mod
-@@ -6,16 +6,16 @@ require (
- 	github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1
- 	github.com/chzyer/readline v1.5.1
- 	github.com/google/cel-go v0.14.0
--	google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9
--	google.golang.org/protobuf v1.30.0
-+	google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5
-+	google.golang.org/protobuf v1.31.0
- )
- 
- require (
- 	github.com/stoewer/go-strcase v1.3.0 // indirect
- 	golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
--	golang.org/x/sys v0.7.0 // indirect
-+	golang.org/x/sys v0.8.0 // indirect
- 	golang.org/x/text v0.9.0 // indirect
--	google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 // indirect
-+	google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5 // indirect
- )
- 
- replace github.com/google/cel-go => ../.
---- a/repl/go.sum
-+++ b/repl/go.sum
-@@ -26,18 +26,18 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o
- golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
- golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
- golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
--golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
--golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-+golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
-+golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
- golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
- golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
- golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
--google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9 h1:m8v1xLLLzMe1m5P+gCTF8nJB9epwZQUBERm20Oy1poQ=
--google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig=
--google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 h1:0nDDozoAU19Qb2HwhXadU8OcsiO/09cnTqhUtq2MEOM=
--google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA=
-+google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5 h1:nIgk/EEq3/YlnmVVXVnm14rC2oxgs1o0ong4sD/rd44=
-+google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q=
-+google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5 h1:eSaPbMR4T7WfH9FvABk36NBMacoTUKdWCvV0dx+KfOg=
-+google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I=
- google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
--google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
--google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-+google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-+google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
- gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
- gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
- gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
diff --git a/pkgs/development/interpreters/expr/default.nix b/pkgs/development/interpreters/expr/default.nix
index be783c6a041..cda9cc7b78e 100644
--- a/pkgs/development/interpreters/expr/default.nix
+++ b/pkgs/development/interpreters/expr/default.nix
@@ -5,18 +5,18 @@
 
 buildGoModule rec {
   pname = "expr";
-  version = "1.15.3";
+  version = "1.15.4";
 
   src = fetchFromGitHub {
     owner = "antonmedv";
     repo = "expr";
     rev = "v${version}";
-    hash = "sha256-r+XlcDvCQarzh8wO3NL87PJThnioeVC73OZdJ8kW4RM=";
+    hash = "sha256-x96I6HHhm3RIrlg1/KVCIbFkelazGt0H2nk8juUWjKg=";
   };
 
   sourceRoot = "${src.name}/repl";
 
-  vendorHash = "sha256-WxYqP8L64U5MAYG7XTpKrRW1aaqGB4hJr+e/RKdb1lU=";
+  vendorHash = "sha256-ZVB6P0WdjyDK9OlEgKjR3D3IVBkDbDx9bOpLC/H2JLs=";
 
   ldflags = [ "-s" "-w" ];
 
diff --git a/pkgs/development/interpreters/python/catch_conflicts/catch_conflicts_py2.py b/pkgs/development/interpreters/python/catch_conflicts/catch_conflicts_py2.py
new file mode 100644
index 00000000000..bb82900c65a
--- /dev/null
+++ b/pkgs/development/interpreters/python/catch_conflicts/catch_conflicts_py2.py
@@ -0,0 +1,30 @@
+import pkg_resources
+import collections
+import sys
+
+do_abort = False
+packages = collections.defaultdict(list)
+
+for f in sys.path:
+    for req in pkg_resources.find_distributions(f):
+        if req not in packages[req.project_name]:
+            # some exceptions inside buildPythonPackage
+            if req.project_name in ['setuptools', 'pip', 'wheel']:
+                continue
+            packages[req.project_name].append(req)
+
+
+for name, duplicates in packages.items():
+    if len(duplicates) > 1:
+        do_abort = True
+        print("Found duplicated packages in closure for dependency '{}': ".format(name))
+        for dup in duplicates:
+            print("  " + repr(dup))
+
+if do_abort:
+    print("")
+    print(
+        'Package duplicates found in closure, see above. Usually this '
+        'happens if two packages depend on different version '
+        'of the same dependency.')
+    sys.exit(1)
diff --git a/pkgs/development/interpreters/python/hooks/default.nix b/pkgs/development/interpreters/python/hooks/default.nix
index f7cc10274ae..0a4600b9d6c 100644
--- a/pkgs/development/interpreters/python/hooks/default.nix
+++ b/pkgs/development/interpreters/python/hooks/default.nix
@@ -106,9 +106,16 @@ in {
   pythonCatchConflictsHook = callPackage ({ makePythonHook, setuptools }:
     makePythonHook {
       name = "python-catch-conflicts-hook";
-      substitutions = {
+      substitutions = let
+        useLegacyHook = lib.versionOlder python.version "3.10";
+      in {
         inherit pythonInterpreter pythonSitePackages;
-        catchConflicts=../catch_conflicts/catch_conflicts.py;
+        catchConflicts = if useLegacyHook then
+          ../catch_conflicts/catch_conflicts_py2.py
+        else
+          ../catch_conflicts/catch_conflicts.py;
+      } // lib.optionalAttrs useLegacyHook {
+        inherit setuptools;
       };
     } ./python-catch-conflicts-hook.sh) {};
 
diff --git a/pkgs/development/interpreters/python/python2/mk-python-derivation.nix b/pkgs/development/interpreters/python/python2/mk-python-derivation.nix
index 6d51b51b215..1a6f9c784cf 100644
--- a/pkgs/development/interpreters/python/python2/mk-python-derivation.nix
+++ b/pkgs/development/interpreters/python/python2/mk-python-derivation.nix
@@ -57,8 +57,7 @@
 # Raise an error if two packages are installed with the same name
 # TODO: For cross we probably need a different PYTHONPATH, or not
 # add the runtime deps until after buildPhase.
-# FIXME: disabled for Python 2 because broken
-, catchConflicts ? false
+, catchConflicts ? (python.stdenv.hostPlatform == python.stdenv.buildPlatform)
 
 # Additional arguments to pass to the makeWrapper function, which wraps
 # generated binaries.
diff --git a/pkgs/development/interpreters/rakudo/zef.nix b/pkgs/development/interpreters/rakudo/zef.nix
index fc7e541ceff..66ee788ca43 100644
--- a/pkgs/development/interpreters/rakudo/zef.nix
+++ b/pkgs/development/interpreters/rakudo/zef.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "zef";
-  version = "0.20.0";
+  version = "0.21.0";
 
   src = fetchFromGitHub {
     owner = "ugexe";
     repo = "zef";
     rev = "v${version}";
-    sha256 = "sha256-IWOgbKYaWKjC2+dc2P3THAVy23F3iQXh2D6od/0e0Jw=";
+    sha256 = "sha256-QVUnn9G28epoUEcK8mwm8S2wDQ/tv5B3Zds7bTUFwlw=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/development/libraries/duckdb/default.nix b/pkgs/development/libraries/duckdb/default.nix
index c9f6711780b..801ad7979ae 100644
--- a/pkgs/development/libraries/duckdb/default.nix
+++ b/pkgs/development/libraries/duckdb/default.nix
@@ -15,13 +15,13 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "duckdb";
-  version = "0.9.1";
+  version = "0.9.2";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-UG/vV/6WxVLq9mdze8pSDFJIekOgGsg93dzMq6eP6Dg=";
+    hash = "sha256-QFK8mEMcqQwALFNvAdD8yWixwMYHSbeo6xqx86PvejU=";
   };
 
   patches = [ ./version.patch ];
diff --git a/pkgs/development/libraries/libaom/default.nix b/pkgs/development/libraries/libaom/default.nix
index c5e40babfd6..30d3c0d81b5 100644
--- a/pkgs/development/libraries/libaom/default.nix
+++ b/pkgs/development/libraries/libaom/default.nix
@@ -50,7 +50,7 @@ stdenv.mkDerivation rec {
     # CPU detection isn't supported on Darwin and breaks the aarch64-darwin build:
     "-DCONFIG_RUNTIME_CPU_DETECT=0"
   ] ++ lib.optionals (isCross && !stdenv.hostPlatform.isx86) [
-    "-DAS_EXECUTABLE=${stdenv.cc.targetPrefix}as"
+    "-DCMAKE_ASM_COMPILER=${stdenv.cc.targetPrefix}as"
   ] ++ lib.optionals stdenv.isAarch32 [
     # armv7l-hf-multiplatform does not support NEON
     # see lib/systems/platform.nix
diff --git a/pkgs/development/libraries/libfprint-2-tod1-elan/default.nix b/pkgs/development/libraries/libfprint-2-tod1-elan/default.nix
new file mode 100644
index 00000000000..3e7253a4017
--- /dev/null
+++ b/pkgs/development/libraries/libfprint-2-tod1-elan/default.nix
@@ -0,0 +1,53 @@
+{ stdenvNoCC
+, lib
+, fetchzip
+, libfprint-tod
+, openssl
+, gusb
+, glib
+, autoPatchelfHook
+}:
+
+stdenvNoCC.mkDerivation {
+  pname = "libfprint-2-tod1-elan";
+  version = "0.0.8";
+
+  src = fetchzip {
+    url = "https://download.lenovo.com/pccbbs/mobiles/r1slf01w.zip";
+    hash = "sha256-GD/BebPto1fFLgyvpiitt+ngwEtdsnKsvdFNeSmVDmw=";
+    # .so is in a subzip
+    postFetch = ''
+      unpackFile $out/*
+      rm $out/*.zip
+      mv * $out/
+    '';
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook];
+
+  buildInputs = [
+    libfprint-tod
+    openssl
+    gusb
+    glib
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm444 libfprint-2-tod1-elan.so -t "$out/lib/libfprint-2/tod-1/"
+
+    runHook postInstall
+  '';
+
+  passthru.driverPath = "/lib/libfprint-2/tod-1";
+
+  meta = with lib; {
+    description = "Elan(04f3:0c4b) driver module for libfprint-2-tod Touch OEM Driver";
+    homepage = "https://support.lenovo.com/us/en/downloads/ds560939-elan-fingerprint-driver-for-ubuntu-2204-thinkpad-e14-gen-4-e15-gen-4";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ qdlmcfresh ];
+  };
+}
diff --git a/pkgs/development/libraries/oneDNN/default.nix b/pkgs/development/libraries/oneDNN/default.nix
index e6bf2a4c549..2518cecb9b6 100644
--- a/pkgs/development/libraries/oneDNN/default.nix
+++ b/pkgs/development/libraries/oneDNN/default.nix
@@ -9,13 +9,13 @@
 # https://github.com/oneapi-src/oneDNN#oneapi-deep-neural-network-library-onednn
 stdenv.mkDerivation (finalAttrs: {
   pname = "oneDNN";
-  version = "3.3";
+  version = "3.3.1";
 
   src = fetchFromGitHub {
     owner = "oneapi-src";
     repo = "oneDNN";
     rev = "v${finalAttrs.version}";
-    hash = "sha256-dC4Z1OvqIF8YhuSeVo+E0CohdXYIfkeTEw3/QuYA/90=";
+    hash = "sha256-br2ssI4MRk9O6u+5voBmxBZtmTFPKoJJe3ZEN2blq7Y=";
   };
 
   outputs = [ "out" "dev" "doc" ];
diff --git a/pkgs/development/libraries/tracker-miners/default.nix b/pkgs/development/libraries/tracker-miners/default.nix
index f6c49b9cfb6..63a86ed55b5 100644
--- a/pkgs/development/libraries/tracker-miners/default.nix
+++ b/pkgs/development/libraries/tracker-miners/default.nix
@@ -11,6 +11,7 @@
 , gexiv2
 , tracker
 , meson
+, mesonEmulatorHook
 , ninja
 , pkg-config
 , vala
@@ -68,6 +69,7 @@ stdenv.mkDerivation rec {
     docbook-xsl-nons
     docbook_xml_dtd_45
     gettext
+    glib
     itstool
     libxslt
     meson
@@ -75,6 +77,8 @@ stdenv.mkDerivation rec {
     pkg-config
     vala
     wrapGAppsNoGuiHook
+  ] ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
+    mesonEmulatorHook
   ];
 
   # TODO: add libenca, libosinfo
@@ -83,7 +87,6 @@ stdenv.mkDerivation rec {
     dbus
     exempi
     giflib
-    glib
     gexiv2
     totem-pl-parser
     tracker
diff --git a/pkgs/development/misc/newlib/default.nix b/pkgs/development/misc/newlib/default.nix
index 8aed144ff65..56c644af140 100644
--- a/pkgs/development/misc/newlib/default.nix
+++ b/pkgs/development/misc/newlib/default.nix
@@ -41,6 +41,7 @@ stdenv.mkDerivation (finalAttrs: {
   # logic was not fixed.  So we must disable it.
   ''
     substituteInPlace configure --replace 'noconfigdirs target-newlib target-libgloss' 'noconfigdirs'
+    substituteInPlace configure --replace 'cross_only="target-libgloss target-newlib' 'cross_only="'
   '';
 
 
diff --git a/pkgs/development/perl-modules/CSSDOM-replace-apostrophe.patch b/pkgs/development/perl-modules/CSSDOM-replace-apostrophe.patch
new file mode 100644
index 00000000000..54bc7f8dd3b
--- /dev/null
+++ b/pkgs/development/perl-modules/CSSDOM-replace-apostrophe.patch
@@ -0,0 +1,1412 @@
+commit 7dda09313a63c4c64563f582844d7b04302d94bd
+Author: Yves Orton <demerphq@gmail.com>
+Date:   Wed Feb 22 13:28:01 2023 +0100
+
+    Replace apostrophe with :: as package separator
+    
+    In 5.37.9 this is deprecated, and in 5.40 it will be forbidden
+
+diff --git a/lib/CSS/DOM/Parser.pm b/lib/CSS/DOM/Parser.pm
+index 473992c..d688f19 100644
+--- a/lib/CSS/DOM/Parser.pm
++++ b/lib/CSS/DOM/Parser.pm
+@@ -369,7 +369,7 @@ sub _parse_at_rule { for (shift) { for my $tokens (shift) {
+ 
+ 			$selector =~ s/s\z// and pop @selector;
+ 
+-			require CSS'DOM'Rule;
++                        require CSS::DOM::Rule;
+ 			(my $rule = new CSS::DOM::Rule $_[0]||())
+ 				->_set_tokens(
+ 					$selector,\@selector
+@@ -413,7 +413,7 @@ sub _parse_at_rule { for (shift) { for my $tokens (shift) {
+ 		my ($types,@tokens) = ("\@$1",$at,splice @$tokens,0,$+[0]);
+ 		$types =~ /"/ and return; # ignore rules w/invalid strings
+ 		$types =~ s/s\z// and pop @tokens;
+-		require CSS'DOM'Rule;
++                require CSS::DOM::Rule;
+ 		(my $rule = new CSS::DOM::Rule $_[0]||())
+ 			->_set_tokens(
+ 				$types, \@tokens
+diff --git a/lib/CSS/DOM/PropertyParser.pm b/lib/CSS/DOM/PropertyParser.pm
+index 258158f..76b0d99 100644
+--- a/lib/CSS/DOM/PropertyParser.pm
++++ b/lib/CSS/DOM/PropertyParser.pm
+@@ -6,8 +6,8 @@ use warnings; no warnings qw 'utf8 parenthesis';
+ use strict;
+ 
+ use constant 1.03 (); # multiple
+-use CSS::DOM'Constants ':primitive', ':value';
+-use CSS'DOM'Util<unescape unescape_str unescape_url>;
++use CSS::DOM::Constants ':primitive', ':value';
++use CSS::DOM::Util<unescape unescape_str unescape_url>;
+ 
+ use constant old_perl => $] < 5.01;
+ { no strict 'refs'; delete ${__PACKAGE__.'::'}{old_perl} }
+@@ -19,7 +19,7 @@ use constant old_perl => $] < 5.01;
+ use constant naughty_perl => 0+$] eq 5.01;
+ { no strict 'refs'; delete ${__PACKAGE__.'::'}{naughty_perl} }
+ 
+-*s2c = *CSS'DOM'Constants'SuffixToConst;
++*s2c = *CSS::DOM::Constants::SuffixToConst;
+ our %s2c;
+ 
+ our %compiled; # compiled formats
+@@ -60,7 +60,7 @@ sub clone {
+ # exists &dclone or require Storable, "Storable"->import('dclone');
+ # return dclone($_[0]);
+  require Clone;
+- return Clone'clone($_[0]);
++ return Clone::clone($_[0]);
+ }
+ 
+ #  Declare the variables that the re-evals use. Some nasty hacker went and
+@@ -202,7 +202,7 @@ sub _make_arg_list {
+  my($stypes,$stokens) = _space_out($types, $tokens);
+  my $css = join "", @$stokens;
+  if(@_ == 1) { # list property
+-  my $list = shift @'_;
++  my $list = shift @_;
+   my $sep = @$list <= 1 ? '' : do {
+    my $range_start = $$list[0][4];
+    my $range_end = $$list[1][4] - length($$list[1][4]) - 1;
+@@ -301,7 +301,7 @@ sub _make_arg_list {
+ 
+ sub _space_out {
+  my($types,$tokens) = @_;
+-Carp'cluck() if ref $tokens ne 'ARRAY';
++Carp::cluck() if ref $tokens ne 'ARRAY';
+  $tokens = [@$tokens];
+  my @posses;
+  $types =~ s/(?<=[^(f])(?![),]|\z)/
+@@ -328,7 +328,7 @@ sub _prep_val {
+  }
+  else {
+   require CSS::DOM::Parser;
+-  ($types, $tokens) = CSS::DOM::Parser'tokenise($_[0]);
++  ($types, $tokens) = CSS::DOM::Parser::tokenise($_[0]);
+  }
+ 
+  # strip out all whitespace tokens
+diff --git a/lib/CSS/DOM/Rule.pm b/lib/CSS/DOM/Rule.pm
+index 921efb0..666fb08 100644
+--- a/lib/CSS/DOM/Rule.pm
++++ b/lib/CSS/DOM/Rule.pm
+@@ -46,7 +46,7 @@ sub _parse { # This method parses the code passed to it and checks to see
+              # the rule data from the new rule.
+ 	my $self = shift;
+ 	require CSS::DOM::Parser;
+-	my $new_rule  =  CSS::DOM::Parser'parse_statement(shift)
++        my $new_rule  =  CSS::DOM::Parser::parse_statement(shift)
+ 		|| die CSS::DOM::Exception->new(SYNTAX_ERR, $@);
+ 
+ 	ref $new_rule eq ref $self or die CSS::DOM::Exception->new(
+diff --git a/lib/CSS/DOM/Rule/Import.pm b/lib/CSS/DOM/Rule/Import.pm
+index 1afdcdc..75c8505 100644
+--- a/lib/CSS/DOM/Rule/Import.pm
++++ b/lib/CSS/DOM/Rule/Import.pm
+@@ -45,7 +45,7 @@ sub cssText {
+ sub href {
+ 	my $self =shift;
+ 	$self->[hrfe] ||= do {
+-		require CSS'DOM'Parser;
++                require CSS::DOM::Parser;
+ 		if($self->[urlt][00] eq 'u') {
+ 			# ~~~ I probably ought to put things like this in a
+ 			#     Parser::token_val function.
+@@ -53,10 +53,10 @@ sub href {
+ 			$url =~ s/^url\([ \t\r\n\f]*//;
+ 			$url =~ s/[ \t\r\n\f]*\)\z//;
+ 			$url =~ s/^['"]// and chop $url;
+-			CSS'DOM'Parser'unescape($url);
++                        CSS::DOM::Parser::unescape($url);
+ 		}
+ 		else {
+-			CSS'DOM'Parser'unescape(
++                        CSS::DOM::Parser::unescape(
+ 				substr $$self[urlt][1], 1, -1
+ 			)
+ 		}
+diff --git a/lib/CSS/DOM/Rule/Style.pm b/lib/CSS/DOM/Rule/Style.pm
+index dfa7501..54da057 100644
+--- a/lib/CSS/DOM/Rule/Style.pm
++++ b/lib/CSS/DOM/Rule/Style.pm
+@@ -93,8 +93,8 @@ sub _selector_matches { # ~~~ Does this work with initial space in the selector?
+ 
+  # tokenise if necessary
+  unless(ref $self->[selc]) {
+-  require CSS'DOM'Parser;
+-  $self->[selc] = [ CSS'DOM'tokenise($self->[selc]) ];
++  require CSS::DOM::Parser;
++  $self->[selc] = [ CSS::DOM::tokenise($self->[selc]) ];
+  }
+ 
+  # parse selector tokens if necessary
+@@ -130,7 +130,7 @@ sub _selector_matches { # ~~~ Does this work with initial space in the selector?
+ 
+      # ids:
+      if($types =~ s/^#//) {
+-      push @subsel, '#', CSS'DOM'Util'unescape( substr shift @tokens, 1 ),
++      push @subsel, '#', CSS::DOM::Util::unescape( substr shift @tokens, 1 ),
+        undef;
+      }
+ 
+@@ -138,12 +138,12 @@ sub _selector_matches { # ~~~ Does this work with initial space in the selector?
+      elsif($types =~ /^di/ && $tokens[0] eq '.') {
+       $types =~ s/^..//; shift @tokens;
+       push @subsel, '~', 'class',
+-       CSS'DOM'Util'unescape( shift @tokens );
++       CSS::DOM::Util::unescape( shift @tokens );
+      }
+ 
+      # pseudo-elems and classes
+      elsif($types =~ s/^(::?)i//) {
+-      push @subsel, $1,lc CSS'DOM'Util'unescape($tokens[length $1]), undef;
++      push @subsel, $1,lc CSS::DOM::Util::unescape($tokens[length $1]), undef;
+       splice @tokens, 0, $+[0];
+      }
+ 
+@@ -151,14 +151,14 @@ sub _selector_matches { # ~~~ Does this work with initial space in the selector?
+      elsif($types =~ s/^:fi\)//) {
+       push @subsel,
+        ':',
+-       lc CSS'DOM'Util'unescape(substr $tokens[1], 0, -1),
+-       lc CSS'DOM'Util'unescape($tokens[2]);
++       lc CSS::DOM::Util::unescape(substr $tokens[1], 0, -1),
++       lc CSS::DOM::Util::unescape($tokens[2]);
+       splice @tokens, 0, 4;
+      }
+ 
+      # [attr]
+      elsif($types =~ s/^\[i]//) {
+-      push @subsel, '=', lc CSS'DOM'Util'unescape($tokens[1]), undef;
++      push @subsel, '=', lc CSS::DOM::Util::unescape($tokens[1]), undef;
+       splice @tokens, 0, 3;
+      }
+ 
+@@ -166,16 +166,16 @@ sub _selector_matches { # ~~~ Does this work with initial space in the selector?
+      elsif($types =~ /^\[id']/ && $tokens[2] eq '=') {
+       $types =~ s/^.{5}//;
+       push @subsel, '=',
+-       lc CSS'DOM'Util'unescape($tokens[1]),
+-       CSS'DOM'Util'unescape_str($tokens[3]);
++       lc CSS::DOM::Util::unescape($tokens[1]),
++       CSS::DOM::Util::unescape_str($tokens[3]);
+       splice @tokens, 0, 5;
+      }
+ 
+      # [attr~='value'], [attr|='value']
+      elsif($types =~ s/^\[i[~|]']//) {
+       push @subsel, $tokens[2],
+-       lc CSS'DOM'Util'unescape($tokens[1]),
+-       CSS'DOM'Util'unescape_str($tokens[3]);
++       lc CSS::DOM::Util::unescape($tokens[1]),
++       CSS::DOM::Util::unescape_str($tokens[3]);
+       splice @tokens, 0, 5;
+      }
+ 
+diff --git a/lib/CSS/DOM/Style.pm b/lib/CSS/DOM/Style.pm
+index 47d1291..b42b8db 100644
+--- a/lib/CSS/DOM/Style.pm
++++ b/lib/CSS/DOM/Style.pm
+@@ -171,9 +171,9 @@ sub setProperty {
+ 	# short-circuit for the common case
+ 	length $value or $self->removeProperty($name),return;
+ 
+-	require CSS'DOM'Parser;
+-	my @tokens = eval { CSS'DOM'Parser'tokenise_value($value); }
+-		or die CSS::DOM'Exception->new( SYNTAX_ERR, $@);
++        require CSS::DOM::Parser;
++        my @tokens = eval { CSS::DOM::Parser::tokenise_value($value); }
++                or die CSS::DOM::Exception->new( SYNTAX_ERR, $@);
+ 
+ 	# check for whitespace/comment assignment
+ 	$tokens[0] =~ /^s+\z/ and $self->removeProperty($name),return;
+diff --git a/lib/CSS/DOM/Value.pm b/lib/CSS/DOM/Value.pm
+index 45f89e9..83b04e7 100644
+--- a/lib/CSS/DOM/Value.pm
++++ b/lib/CSS/DOM/Value.pm
+@@ -7,9 +7,9 @@ use strict;
+ 
+ use Carp;
+ use CSS::DOM::Constants;
+-use CSS'DOM'Exception 'NO_MODIFICATION_ALLOWED_ERR';
++use CSS::DOM::Exception 'NO_MODIFICATION_ALLOWED_ERR';
+ use Exporter 5.57 'import';
+-use Scalar'Util < weaken reftype >;
++use Scalar::Util < weaken reftype >;
+ 
+ use constant 1.03 our $_const = {
+     type => 0,
+@@ -46,11 +46,11 @@ sub cssText {
+ 		? $self->[valu] : 'inherit'
+ 	 if defined wantarray;
+ 	if(@_) {
+-		die new CSS'DOM'Exception
++                die new CSS::DOM::Exception
+ 		  NO_MODIFICATION_ALLOWED_ERR,
+ 		 "Unowned value objects cannot be modified"
+ 		   unless my $owner = $self->[ownr];
+-		die new CSS'DOM'Exception
++                die new CSS::DOM::Exception
+ 		  NO_MODIFICATION_ALLOWED_ERR,
+ 		 "CSS::DOM::Value objects that do not know to which "
+ 		 ."property they belong cannot be modified"
+diff --git a/lib/CSS/DOM/Value/List.pm b/lib/CSS/DOM/Value/List.pm
+index 85f5ef5..e681fa2 100644
+--- a/lib/CSS/DOM/Value/List.pm
++++ b/lib/CSS/DOM/Value/List.pm
+@@ -2,8 +2,8 @@ package CSS::DOM::Value::List;
+ 
+ $VERSION = '0.17';
+ 
+-use CSS'DOM'Constants <CSS_VALUE_LIST NO_MODIFICATION_ALLOWED_ERR>;
+-use Scalar'Util 'weaken';
++use CSS::DOM::Constants <CSS_VALUE_LIST NO_MODIFICATION_ALLOWED_ERR>;
++use Scalar::Util 'weaken';
+ 
+ # Object of this class are hashes, with the following keys:
+ # c: CSS code
+@@ -14,7 +14,7 @@ use Scalar'Util 'weaken';
+ 
+ sub DOES {
+  return 1 if $_[1] eq 'CSS::DOM::Value';
+- goto &UNIVERSAL'DOES if defined &UNIVERSAL'DOES;
++ goto &UNIVERSAL::DOES if defined &UNIVERSAL::DOES;
+ }
+ 
+ use overload
+@@ -37,14 +37,14 @@ sub cssText {
+  if(defined wantarray) {{
+    if(!defined $$self{c} || grep ref ne 'ARRAY', @{$$self{v}}) {
+     @{$$self{v}} or $old = 'none', last;
+-    require CSS'DOM'Value'Primitive;
++    require CSS::DOM::Value::Primitive;
+     my @args; my $index = 0;
+     for(@{$$self{v}}) {
+      next unless ref eq 'ARRAY';
+      @args or @args = (
+       (owner => property => @$self{<o p>})[0,2,1,3], index => $index
+      ); 
+-     $_ = new CSS'DOM'Value'Primitive @$_, @args;
++     $_ = new CSS::DOM::Value::Primitive @$_, @args;
+     }
+     no warnings 'uninitialized';
+     $old = join length $$self{s} ? $$self{s} : ' ',
+@@ -53,11 +53,11 @@ sub cssText {
+    else { $old = $$self{c} }
+  }}
+  if(@_) { # assignment
+-  die new CSS'DOM'Exception
++  die new CSS::DOM::Exception
+     NO_MODIFICATION_ALLOWED_ERR,
+    "Unowned value objects cannot be modified"
+      unless my $owner = $self->{o};
+-  die new CSS'DOM'Exception
++  die new CSS::DOM::Exception
+     NO_MODIFICATION_ALLOWED_ERR,
+    "CSS::DOM::Value objects that do not know to which "
+    ."property they belong cannot be modified"
+@@ -67,8 +67,8 @@ sub cssText {
+    my @arsg
+     = $owner->property_parser->match($prop, $_[0])
+   ) {
+-   require CSS'DOM'Value;
+-   CSS'DOM'Value::_apply_args_to_self($self,$owner,$prop,@arsg);
++   require CSS::DOM::Value;
++   CSS::DOM::Value::_apply_args_to_self($self,$owner,$prop,@arsg);
+   }
+ 
+   if(my $mh = $owner->modification_handler) {
+@@ -89,8 +89,8 @@ sub item {
+    defined or return;
+    ref eq 'ARRAY' or return exit die return $_;
+ 
+-   require CSS'DOM'Value'Primitive;
+-   return $_ = new CSS'DOM'Value'Primitive
++   require CSS::DOM::Value::Primitive;
++   return $_ = new CSS::DOM::Value::Primitive
+              @$_,
+              (owner => property => @$self{<o p>})[0,2,1,3],
+              index => $index;
+diff --git a/lib/CSS/DOM/Value/Primitive.pm b/lib/CSS/DOM/Value/Primitive.pm
+index 2ce0e9d..2046ff4 100644
+--- a/lib/CSS/DOM/Value/Primitive.pm
++++ b/lib/CSS/DOM/Value/Primitive.pm
+@@ -17,7 +17,7 @@ use Exporter 5.57 'import';
+ 
+ sub DOES {
+  return 1 if $_[1] eq 'CSS::DOM::Value';
+- goto &UNIVERSAL'DOES if defined &UNIVERSAL'DOES;
++ goto &UNIVERSAL::DOES if defined &UNIVERSAL::DOES;
+ }
+ 
+ use constant 1.03 our $_const = { # Don’t conflict with the superclass!
+@@ -203,8 +203,8 @@ sub cssText {
+ 		}}
+ 	}
+ 	if(@_) {
+-		require CSS'DOM'Exception,
+-		die new CSS'DOM'Exception
++                require CSS::DOM::Exception,
++                die new CSS::DOM::Exception
+ 		  NO_MODIFICATION_ALLOWED_ERR,
+ 		 "Unowned value objects cannot be modified"
+ 		   unless my $owner = $self->[ownr];
+@@ -213,15 +213,15 @@ sub cssText {
+ 		# deal with formats
+ 		if(my $format = $$self[form]) {
+ 			if(!our $parser) {
+-				require CSS'DOM'PropertyParser;
++                                require CSS::DOM::PropertyParser;
+ 				add_property{
+-				 $parser = new CSS'DOM'PropertyParser
++                                 $parser = new CSS::DOM::PropertyParser
+ 				} _=>our $prop_spec = {};
+ 			}
+ 			our $prop_spec->{format} = $format;
+ 			if(my @args = match { our $parser } _=> shift) {
+-				require CSS'DOM'Value;
+-				CSS'DOM'Value'_apply_args_to_self(
++                                require CSS::DOM::Value;
++                                CSS::DOM::Value::_apply_args_to_self(
+ 				 $self, $owner, $prop,
+ 				 @args, format => $format, 
+ 				);				
+@@ -231,8 +231,8 @@ sub cssText {
+ 		# This is never reached, at least not when CSS::DOM’s mod-
+ 		# ules call the constructor:
+ 		elsif(!defined $prop) {
+-			require CSS'DOM'Exception,
+-			die new CSS'DOM'Exception
++                        require CSS::DOM::Exception,
++                        die new CSS::DOM::Exception
+ 			  NO_MODIFICATION_ALLOWED_ERR,
+ 			 ref($self) . " objects that do not know to which "
+ 			 ."property they belong cannot be modified"
+@@ -263,8 +263,8 @@ sub cssText {
+ 			       $index+1..$length-1
+ 			      ),
+ 			    );
+-			require CSS'DOM'Value;
+-			CSS'DOM'Value'_load_if_necessary($arsg[1]);
++                        require CSS::DOM::Value;
++                        CSS::DOM::Value::_load_if_necessary($arsg[1]);
+ 			my $list = $arsg[1]->new(
+ 			 owner => $owner,
+ 			 property => $prop,
+@@ -284,8 +284,8 @@ sub cssText {
+ 		 my @arsg
+ 		  = $owner->property_parser->match($prop, $_[0])
+ 		) {
+-			require CSS'DOM'Value;
+-			CSS'DOM'Value'_apply_args_to_self(
++                        require CSS::DOM::Value;
++                        CSS::DOM::Value::_apply_args_to_self(
+ 				 $self, $owner, $prop, @arsg
+ 			);
+ 		}
+@@ -341,10 +341,10 @@ sub cssValueType { CSS::DOM::Value::CSS_PRIMITIVE_VALUE }
+ sub primitiveType { shift->[type] }
+ 
+ sub setFloatValue {
+-  my ($self,$type,$val) = @'_;
++  my ($self,$type,$val) = @_;
+ 
+-  require CSS'DOM'Exception,
+-  die new CSS'DOM'Exception INVALID_ACCESS_ERR, "Invalid value type"
++  require CSS::DOM::Exception,
++  die new CSS::DOM::Exception INVALID_ACCESS_ERR, "Invalid value type"
+    if $type == CSS_UNKNOWN || $type == CSS_COUNTER
+    || $type == CSS_RECT || $type == CSS_RGBCOLOR || $type == CSS_DIMENSION;
+ 
+@@ -352,8 +352,8 @@ sub setFloatValue {
+   # using this API.
+   no warnings 'numeric';
+   $self->cssText(my $css = _serialise($type, $val));
+-  require CSS'DOM'Exception,
+-  die new CSS'DOM'Exception INVALID_ACCESS_ERR, "Invalid value: $css"
++  require CSS::DOM::Exception,
++  die new CSS::DOM::Exception INVALID_ACCESS_ERR, "Invalid value: $css"
+    if $self->cssText ne $css;
+  _:
+ }
+@@ -364,8 +364,8 @@ sub getFloatValue {
+  # There are more types that are numbers than are not, so we
+  # invert our list.
+  my $type = $self->[type];
+- require CSS'DOM'Exception,
+- die new CSS'DOM'Exception INVALID_ACCESS_ERR, "Not a numeric value"
++ require CSS::DOM::Exception,
++ die new CSS::DOM::Exception INVALID_ACCESS_ERR, "Not a numeric value"
+   if $type == CSS_UNKNOWN || $type == CSS_STRING || $type == CSS_URI 
+   || $type == CSS_IDENT || $type == CSS_ATTR || $type == CSS_COUNTER
+   || $type == CSS_RECT || $type == CSS_RGBCOLOR;
+@@ -380,8 +380,8 @@ sub getStringValue {
+  my $self = shift;
+ 
+  my $type = $self->[type];
+- require CSS'DOM'Exception,
+- die new CSS'DOM'Exception INVALID_ACCESS_ERR, "Not a string value"
++ require CSS::DOM::Exception,
++ die new CSS::DOM::Exception INVALID_ACCESS_ERR, "Not a string value"
+   unless $type == CSS_STRING || $type == CSS_URI
+       || $type == CSS_IDENT  || $type == CSS_ATTR;
+ 
+diff --git a/t/CSS2Properties.t b/t/CSS2Properties.t
+index 315321b..13fc438 100644
+--- a/t/CSS2Properties.t
++++ b/t/CSS2Properties.t
+@@ -3,8 +3,8 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
+-sub tests'import { $tests += pop if @_ > 1 };
++sub tests::VERSION { $tests += pop };
++sub tests::import { $tests += pop if @_ > 1 };
+ use Test::More;
+ plan tests => $tests;
+ 
+diff --git a/t/CSSCharsetRule.t b/t/CSSCharsetRule.t
+index 92a8e74..fc3dba5 100644
+--- a/t/CSSCharsetRule.t
++++ b/t/CSSCharsetRule.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -13,7 +13,7 @@ use_ok 'CSS::DOM::Rule::Charset',;
+ 
+ require CSS::DOM;
+ my $rule = (
+-	my $ss = CSS::DOM'parse(
++	my $ss = CSS::DOM::parse(
+ 		'@charset "utf-8";'
+ 	)
+ )-> cssRules->[0];
+diff --git a/t/CSSFontFaceRule.t b/t/CSSFontFaceRule.t
+index 9f4879e..abd5b6c 100644
+--- a/t/CSSFontFaceRule.t
++++ b/t/CSSFontFaceRule.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -13,7 +13,7 @@ use_ok 'CSS::DOM::Rule::FontFace',;
+ 
+ require CSS::DOM;
+ my $rule = (
+-	my $ss = CSS::DOM'parse(
++	my $ss = CSS::DOM::parse(
+ 		'@font-face { font-family: "foo";src:url(bar) }'
+ 	)
+ )-> cssRules->[0];
+diff --git a/t/CSSImportRule.t b/t/CSSImportRule.t
+index 6ec65ef..c8a6a51 100644
+--- a/t/CSSImportRule.t
++++ b/t/CSSImportRule.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -15,7 +15,7 @@ use_ok 'CSS::DOM::Rule::Import';
+ 
+ require CSS::DOM;
+ my $rule = (
+-	my $ss = CSS::DOM'parse(
++	my $ss = CSS::DOM::parse(
+ 		'@import "foo.css" tv, screen'
+ 	)
+ )-> cssRules->[0];
+@@ -95,7 +95,7 @@ use tests 5; # styleSheet
+ 		'foo.css' => '@import "bar.css"',
+ 		'bar.css' => 'a { color: blue }',
+ 	);
+-	is CSS'DOM'parse('@import "foo.css',url_fetcher=>sub{$urls{$_[0]}})
++	is CSS::DOM::parse('@import "foo.css',url_fetcher=>sub{$urls{$_[0]}})
+ 		->cssRules->[0]->styleSheet
+ 		->cssRules->[0]->styleSheet
+ 		->cssRules->[0]->style->color,
+diff --git a/t/CSSMediaRule.t b/t/CSSMediaRule.t
+index fffa7fb..9d01698 100644
+--- a/t/CSSMediaRule.t
++++ b/t/CSSMediaRule.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -15,7 +15,7 @@ use_ok 'CSS::DOM::Rule::Media';
+ 
+ require CSS::DOM;
+ my $rule = (
+-	my $ss = CSS::DOM'parse(
++	my $ss = CSS::DOM::parse(
+ 		'@media print { body { background: none } }'
+ 	)
+ )-> cssRules->[0];
+@@ -133,4 +133,4 @@ use tests 4; # deleteRule
+ 	cmp_ok $@, '==', CSS::DOM::Exception::INDEX_SIZE_ERR,
+ 		'error raised by deleteRule';
+ 
+-}
+\ No newline at end of file
++}
+diff --git a/t/CSSPageRule.t b/t/CSSPageRule.t
+index 108923e..764e1a1 100644
+--- a/t/CSSPageRule.t
++++ b/t/CSSPageRule.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -14,7 +14,7 @@ use_ok 'CSS::DOM::Rule::Page',;
+ 
+ require CSS::DOM;
+ my $rule = (
+-	my $ss = CSS::DOM'parse( '@page:first{ margin-top: 3in }')
++	my $ss = CSS::DOM::parse( '@page:first{ margin-top: 3in }')
+ )-> cssRules->[0];
+ 
+ use tests 1; # isa
+diff --git a/t/CSSPrimitiveValue.t b/t/CSSPrimitiveValue.t
+index 5b30046..ad378f7 100644
+--- a/t/CSSPrimitiveValue.t
++++ b/t/CSSPrimitiveValue.t
+@@ -4,8 +4,8 @@ use strict; use warnings;
+ no warnings<utf8 parenthesis regexp once qw bareword syntax>;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
+-sub tests'import  { $tests += pop if @_ > 1 };
++sub tests::VERSION { $tests += pop };
++sub tests::import  { $tests += pop if @_ > 1 };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -441,9 +441,9 @@ for(CSS::DOM::Value::Primitive->new(
+ # ------------------------------------------
+ # Tests for setFloatValue and setStringValue
+ 
+-use CSS'DOM'Style;
++use CSS::DOM::Style;
+ require CSS::DOM::PropertyParser;
+-my $s = new CSS'DOM'Style
++my $s = new CSS::DOM::Style
+  property_parser => $CSS::DOM::PropertyParser::Default;
+ 
+ for my $meth ('setFloatValue' ,'setStringValue'){
+diff --git a/t/CSSRule.t b/t/CSSRule.t
+index b33007c..582eb04 100644
+--- a/t/CSSRule.t
++++ b/t/CSSRule.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -24,7 +24,7 @@ use tests 7; # constants
+ 
+ 
+ require CSS::DOM;
+-my $ss = CSS::DOM'parse( 'a{text-decoration: none} p { margin: 0 }');
++my $ss = CSS::DOM::parse( 'a{text-decoration: none} p { margin: 0 }');
+ my $rule = cssRules $ss ->[0];
+ 
+ use tests 1; # isa
+diff --git a/t/CSSRuleList.t b/t/CSSRuleList.t
+index bc2bfaf..5cee6f6 100644
+--- a/t/CSSRuleList.t
++++ b/t/CSSRuleList.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+diff --git a/t/CSSStyleDeclaration-setProperty.t b/t/CSSStyleDeclaration-setProperty.t
+index cceb993..d0615b7 100644
+--- a/t/CSSStyleDeclaration-setProperty.t
++++ b/t/CSSStyleDeclaration-setProperty.t
+@@ -7,7 +7,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+diff --git a/t/CSSStyleDeclaration.t b/t/CSSStyleDeclaration.t
+index 57bfe98..7bcc370 100644
+--- a/t/CSSStyleDeclaration.t
++++ b/t/CSSStyleDeclaration.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings; no warnings qw 'utf8 parenthesis regexp once qw';
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -26,7 +26,7 @@ use tests 3; # first make sure we can use it without loading CSS::DOM
+ 	
+ 
+ require CSS::DOM;
+-my $ss = CSS::DOM'parse ('a{text-decoration: none} p { margin: 0 }');
++my $ss = CSS::DOM::parse ('a{text-decoration: none} p { margin: 0 }');
+ my $rule = cssRules $ss ->[0];
+ my $decl = $rule->style;
+ 
+@@ -105,7 +105,7 @@ like $decl->cssText, qr/color: blue !very\\ important/,
+ 
+ use tests 4; # length
+ {
+-	my $decl = new CSS'DOM'Style;
++	my $decl = new CSS::DOM::Style;
+ 	is eval { $decl->length }, 0,  # This used to die [RT #54810]
+ 	  'length when no properties have been added';  # (fixed in 0.09).
+ 	$decl = CSS::DOM::Style::parse(
+diff --git a/t/CSSStyleRule.t b/t/CSSStyleRule.t
+index 024012b..fb550da 100644
+--- a/t/CSSStyleRule.t
++++ b/t/CSSStyleRule.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -14,7 +14,7 @@ use_ok 'CSS::DOM::Rule::Style',;
+ 
+ require CSS::DOM;
+ my $rule = (
+-	my $ss = CSS::DOM'parse('a{text-decoration: none} p { margin: 0 }')
++	my $ss = CSS::DOM::parse('a{text-decoration: none} p { margin: 0 }')
+ )-> cssRules->[0];
+ 
+ use tests 1; # isa
+diff --git a/t/CSSStyleSheet-insertRule.t b/t/CSSStyleSheet-insertRule.t
+index 3302966..94b3ee7 100644
+--- a/t/CSSStyleSheet-insertRule.t
++++ b/t/CSSStyleSheet-insertRule.t
+@@ -7,7 +7,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -19,4 +19,3 @@ ok eval{$ss->insertRule('a{ color: red }',0);1},
+ 	'insertRule on empty style sheet doesn\'t die';
+ 	# At one point during development, it did die because it was call-
+ 	# ing methods on CSS::DOM::RuleParser which hadn’t been loaded.
+-
+diff --git a/t/CSSStyleSheet.t b/t/CSSStyleSheet.t
+index ab82e6a..40b3edf 100644
+--- a/t/CSSStyleSheet.t
++++ b/t/CSSStyleSheet.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -30,7 +30,7 @@ use tests 3; # (_set_)ownerRule
+ 
+ use tests 2; # cssRules
+ {
+-	$ss = CSS::DOM'parse( 'a{text-decoration: none} p { margin: 0 }');
++	$ss = CSS::DOM::parse( 'a{text-decoration: none} p { margin: 0 }');
+ 	is +()=$ss->cssRules, 2, 'cssRules in list context';
+ 	isa_ok my $rules = cssRules $ss, 'CSS::DOM::RuleList',
+ 		'cssRules in scalar context';
+@@ -38,7 +38,7 @@ use tests 2; # cssRules
+ 
+ use tests 11; # insertRule
+ {
+-	$ss = CSS::DOM'parse ('a{text-decoration: none} p { margin: 0 }');
++	$ss = CSS::DOM::parse ('a{text-decoration: none} p { margin: 0 }');
+ 	
+ 	is $ss->insertRule('b { font-weight: bold }', 0), 0,
+ 		'retval of insertRule';
+@@ -70,7 +70,7 @@ use tests 11; # insertRule
+ 
+ use tests 4; # deleteRule
+ {
+-	$ss = CSS::DOM'parse ('a{text-decoration: none} p { margin: 0 }
++	$ss = CSS::DOM::parse ('a{text-decoration: none} p { margin: 0 }
+ 		i {}');
+ 	is +()=$ss->deleteRule(1), 0, 'retval of deleteRule';
+ 	is_deeply [map $_->selectorText, $ss->cssRules], [qw/ a i /],
+@@ -82,4 +82,4 @@ use tests 4; # deleteRule
+ 	cmp_ok $@, '==', CSS::DOM::Exception::INDEX_SIZE_ERR,
+ 		'error raised by deleteRule';
+ 
+-}
+\ No newline at end of file
++}
+diff --git a/t/CSSValue-prim-cssText.t b/t/CSSValue-prim-cssText.t
+index 09f657b..b19836a 100644
+--- a/t/CSSValue-prim-cssText.t
++++ b/t/CSSValue-prim-cssText.t
+@@ -6,7 +6,7 @@
+ use strict; use warnings; no warnings qw 'qw regexp once utf8 parenthesis';
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+diff --git a/t/CSSValue.t b/t/CSSValue.t
+index 5fad855..f5a04d0 100644
+--- a/t/CSSValue.t
++++ b/t/CSSValue.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings; no warnings qw 'qw regexp once utf8 parenthesis';
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -38,7 +38,7 @@ isa_ok +CSS::DOM::Value->new(type => &CSS_CUSTOM, value => "top left"),
+ 
+ require CSS::DOM::Style;
+ require CSS::DOM::PropertyParser;
+-my $s = new CSS'DOM'Style
++my $s = new CSS::DOM::Style
+  property_parser => my $spec = $CSS::DOM::PropertyParser::Default;
+ 
+ # The default parser has no properties with a simple string, attr or
+diff --git a/t/CSSValueList.t b/t/CSSValueList.t
+index 1805209..25c1bec 100644
+--- a/t/CSSValueList.t
++++ b/t/CSSValueList.t
+@@ -3,17 +3,17 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+-use CSS'DOM'Constants ':primitive';
+-use CSS'DOM'Value'List;
++use CSS::DOM::Constants ':primitive';
++use CSS::DOM::Value::List;
+ 
+ use tests 1; # DOES
+-ok +CSS'DOM'Value'List->DOES('CSS::DOM::Value'), 'DOES';
++ok +CSS::DOM::Value::List->DOES('CSS::DOM::Value'), 'DOES';
+ 
+-my $v = new CSS'DOM'Value'List values => [
++my $v = new CSS::DOM::Value::List values => [
+  [ type => CSS_STRING, value => 'sphed' ],
+  [ type => CSS_STRING, value => 'flit' ],
+ ];
+diff --git a/t/MediaList.t b/t/MediaList.t
+index 3092c62..0888d61 100644
+--- a/t/MediaList.t
++++ b/t/MediaList.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+diff --git a/t/RGBColor.t b/t/RGBColor.t
+index 3758529..12d2938 100644
+--- a/t/RGBColor.t
++++ b/t/RGBColor.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+diff --git a/t/Rect.t b/t/Rect.t
+index e7f83a4..ea8f046 100644
+--- a/t/Rect.t
++++ b/t/Rect.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -25,4 +25,4 @@ use tests 4;
+  is $v->left->cssText, '4cm', 'left';
+ }
+ 
+-# ~~~ test for modifications of the cssText property
+\ No newline at end of file
++# ~~~ test for modifications of the cssText property
+diff --git a/t/StyleSheet.t b/t/StyleSheet.t
+index a4469fb..e84e7d4 100644
+--- a/t/StyleSheet.t
++++ b/t/StyleSheet.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -55,7 +55,7 @@ use tests 1; # (set_)href
+ 
+ use tests 1; # title
+ {
+-	sub foo'attr { return shift->{+shift} }
++	sub foo::attr { return shift->{+shift} }
+ 	$ss->set_ownerNode(my $foo = bless {title => 'tilde'}, 'foo');
+ 	is $ss->title, 'tilde', 'title';
+ }
+diff --git a/t/StyleSheetList.t b/t/StyleSheetList.t
+index 8e8c7cf..745f894 100644
+--- a/t/StyleSheetList.t
++++ b/t/StyleSheetList.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+diff --git a/t/charset.t b/t/charset.t
+index eed053e..1666157 100644
+--- a/t/charset.t
++++ b/t/charset.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings; no warnings qw 'utf8 parenthesis';
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+diff --git a/t/css-dom-interface.t b/t/css-dom-interface.t
+index 41bca29..76e5f2f 100644
+--- a/t/css-dom-interface.t
++++ b/t/css-dom-interface.t
+@@ -6,7 +6,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+diff --git a/t/css-dom-style.t b/t/css-dom-style.t
+index f852f6f..9a6582f 100644
+--- a/t/css-dom-style.t
++++ b/t/css-dom-style.t
+@@ -6,13 +6,13 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+ use tests 4; # modification_handler
+ require CSS::DOM::Style;
+-my $style = CSS::DOM::Style'parse('margin-top: 2px');
++my $style = CSS::DOM::Style::parse('margin-top: 2px');
+ $style->modification_handler(sub { ++$}; ${{} .= shift});
+ $style->cssText('margin-bottom: 600%');
+ is $}, 1, 'cssText triggers mod hander';
+@@ -25,4 +25,3 @@ is $}, 3, 'AUTOLOAD triggers the handler';
+ # ~~~ We also needs tests for modification_handler triggered by:
+ #  • removeProperty
+ #  • modifications to CSSValue objects and their sub-objects (RGBColor etc
+-
+diff --git a/t/css-dom-util.t b/t/css-dom-util.t
+index 5dbef09..554cd1b 100644
+--- a/t/css-dom-util.t
++++ b/t/css-dom-util.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings; no warnings qw 'utf8 parenthesis';
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+diff --git a/t/css-dom.t b/t/css-dom.t
+index e36a046..d43d458 100644
+--- a/t/css-dom.t
++++ b/t/css-dom.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings;
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -28,7 +28,7 @@ use tests 1; # compute_style
+  local $SIG{__WARN__} = sub { $w .= shift };
+  require CSS::DOM::Style;
+  my $elem = bless{
+-  style => CSS'DOM'Style'parse('color:red'), tagName => 'p',
++  style => CSS::DOM::Style::parse('color:red'), tagName => 'p',
+  }, MyElem=>;
+  CSS::DOM::compute_style(element => $elem);
+  is $w, undef, 'no warnings for style belonging to element itself';
+diff --git a/t/parser-rules.t b/t/parser-rules.t
+index 16cb536..7387caf 100644
+--- a/t/parser-rules.t
++++ b/t/parser-rules.t
+@@ -8,7 +8,7 @@
+ use strict; use warnings; no warnings qw 'utf8 parenthesis';
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -35,7 +35,7 @@ use tests 2; # miscellaneous CSS::DOM::parse stuff
+ 
+ use tests 7; # <!-- -->
+ {
+-	my $sheet = CSS'DOM'parse '
++	my $sheet = CSS::DOM::parse '
+ 		<!-- /* --> /* /**/
+ 		@at-rule {/*<!--*/ } <!--
+ 		-->
+@@ -46,9 +46,9 @@ use tests 7; # <!-- -->
+ 		'@at-rule {/*<!--*/ }' . "\n" .
+ 		"{ style: rule }\n",
+ 		'<!-- -->';
+-	CSS'DOM'parse 'a { --> }';
++	CSS::DOM::parse 'a { --> }';
+ 	ok $@, 'invalid -->';
+-	CSS'DOM'parse 'a { <!-- }';
++	CSS::DOM::parse 'a { <!-- }';
+ 	ok $@, 'invalid <!--';
+ 	ok !eval{$sheet->insertRule('--> a { }');1},
+ 		'invalid --> before statement';
+@@ -62,7 +62,7 @@ use tests 7; # <!-- -->
+ 
+ use tests 5; # single statement parser
+ {
+-	my $sheet = new CSS'DOM;
++	my $sheet = new CSS::DOM;
+ 	$sheet->insertRule('phoo { bar : baz} ',0);
+ 	isa_ok cssRules$sheet->[0], 'CSS::DOM::Rule::Style',
+ 		'ruleset created by insertRule';
+@@ -79,36 +79,36 @@ use tests 5; # single statement parser
+ 
+ use tests 9; # styledecl parser
+ {
+-	my $style = CSS'DOM'Style'parse  ' foo : bar ';
++	my $style = CSS::DOM::Style::parse  ' foo : bar ';
+ 	is $style->cssText, 'foo: bar', 'style parser';
+-	CSS'DOM'Style'parse 'foo: bar}';
++	CSS::DOM::Style::parse 'foo: bar}';
+ 	ok $@, 'style parser chokes on }';
+-	is CSS'DOM'Style'parse  ' ; ;;;;;foo : bar ;;;; ; ',->cssText,
++	is CSS::DOM::Style::parse  ' ; ;;;;;foo : bar ;;;; ; ',->cssText,
+ 		'foo: bar', 'style wit extra semicolons';
+-	is CSS'DOM'Style'parse  'foo:bar',->cssText,
++	is CSS::DOM::Style::parse  'foo:bar',->cssText,
+ 		'foo: bar', 'style with no space';
+-	is CSS'DOM'Style'parse  'foo:bar;;;baz:bonk;;',->cssText,
++	is CSS::DOM::Style::parse  'foo:bar;;;baz:bonk;;',->cssText,
+ 		'foo: bar; baz: bonk',
+ 		'style with no space & extra semicolons';
+-	is CSS'DOM'Style'parse  'foo:bar;;;!baz:bonk;;',->cssText,
++	is CSS::DOM::Style::parse  'foo:bar;;;!baz:bonk;;',->cssText,
+ 		'foo: bar',
+ 		'style with delimiter+ident for property name';
+-	is CSS'DOM'Style'parse  '\70\41 dding:0;;;;;',->cssText,
++	is CSS::DOM::Style::parse  '\70\41 dding:0;;;;;',->cssText,
+ 		'padding: 0',
+ 		'style with escaped property name';
+ 
+-	is CSS'DOM'Style'parse '\a\z\A\Z\)\a a :bar',
++	is CSS::DOM::Style::parse '\a\z\A\Z\)\a a :bar',
+ 		->getPropertyValue("\nz\nZ)\na"), 'bar',
+ 		'style with both kinds of ident escapes';
+ 
+ 	{ package Phoo; use overload '""'=>sub{'foo:bar'}}
+-	is CSS'DOM'Style'parse(bless [], 'Phoo')->cssText, 'foo: bar',
++	is CSS::DOM::Style::parse(bless [], 'Phoo')->cssText, 'foo: bar',
+ 		'::Style::parse\'s force stringification';
+ }
+ 
+ use tests 121; # @media
+ {
+-	my $sheet = new CSS'DOM; my $rule;
++	my $sheet = new CSS::DOM; my $rule;
+ 
+ 	$sheet->insertRule('@media print{a{color:blue}}',0);
+ 	isa_ok $rule=pop@{$sheet->cssRules}, 'CSS::DOM::Rule::Media',
+@@ -464,7 +464,7 @@ use tests 121; # @media
+ 	is $rule->cssText, "\@meDIa { }\n",
+ 		'serialised empty unclosed fake @meDIa rule w/ws';
+ 
+-	$sheet = CSS'DOM'parse '
++	$sheet = CSS::DOM::parse '
+ 		@media print { a { color: blue } "stuff"}
+ 		td { padding: 0 }
+ 	';
+@@ -496,7 +496,7 @@ use tests 121; # @media
+ 
+ use tests 1; # bracket closure
+ {
+-	my $sheet = new CSS'DOM; my $rule;
++	my $sheet = new CSS::DOM; my $rule;
+ 
+ 	$sheet->insertRule('@unknown {(rect([',0);
+ 	is +($rule=pop@{$sheet->cssRules})->cssText,
+@@ -506,7 +506,7 @@ use tests 1; # bracket closure
+ 
+ use tests 14; # @page
+ {
+-	my $sheet = new CSS'DOM; my $rule;
++	my $sheet = new CSS::DOM; my $rule;
+ 
+ 	$sheet->insertRule('@page{color:blue}',0);
+ 	is +($rule=pop@{$sheet->cssRules})->type, PAGE_RULE,
+@@ -553,7 +553,7 @@ use tests 14; # @page
+ 
+ use tests 6; # unrecognised at-rules
+ {
+-	my $sheet = new CSS'DOM; my $rule;
++	my $sheet = new CSS::DOM; my $rule;
+ 
+ 	$sheet->insertRule('@unknown \ / \ / :-P {...}',0);
+ 	is +($rule=pop@{$sheet->cssRules})->type, UNKNOWN_RULE,
+@@ -579,7 +579,7 @@ use tests 6; # unrecognised at-rules
+ 
+ use tests 6; # ruselet pasrer
+ {
+-	my $sheet = new CSS'DOM; my $rule;
++	my $sheet = new CSS::DOM; my $rule;
+ 
+ 	$sheet->insertRule('a{text-decoration:none;color:blue}',0);
+ 	is +($rule=pop@{$sheet->cssRules})->type, STYLE_RULE,
+@@ -605,7 +605,7 @@ use tests 6; # ruselet pasrer
+ 
+ use tests 1; # invaldi strings
+ {
+-	my $sheet = CSS'DOM'parse q*
++	my $sheet = CSS::DOM::parse q*
+ 	      p { 
+ 	        color: green; 
+ 	        font-family: 'Courier New Times 
+@@ -634,51 +634,51 @@ use tests 1; # invaldi strings
+ 
+ use tests 10; # invalid closing brackets
+ {
+-	is CSS'DOM'parse q" @eotetet ]" =>-> cssRules->length,0,
++	is CSS::DOM::parse q" @eotetet ]" =>-> cssRules->length,0,
+ 		'invalid closing bracket in unknown rule';
+ 	ok $@, '$@ is set by invalid closing bracket in unknown rule';
+-	is CSS'DOM'parse q" @media { ]" =>-> cssRules->length, 0,
++	is CSS::DOM::parse q" @media { ]" =>-> cssRules->length, 0,
+ 		'invalid closing bracket in media rule';
+ 	ok $@, '$@ is set by invalid closing bracket in media rule';
+-	is CSS'DOM'parse q" @page { ]" =>-> cssRules->length, 0,
++	is CSS::DOM::parse q" @page { ]" =>-> cssRules->length, 0,
+ 		'invalid closing bracket in page rule';
+ 	ok $@, '$@ is set by invalid closing bracket in page rule';
+-	is CSS'DOM'parse q" page ( ]" =>-> cssRules->length, 0,
++	is CSS::DOM::parse q" page ( ]" =>-> cssRules->length, 0,
+ 		'invalid closing bracket in selector';
+ 	ok $@, '$@ is set by invalid closing bracket in selector';
+-	is CSS'DOM'parse q" a {  (}" =>-> cssRules->length, 0,
++	is CSS::DOM::parse q" a {  (}" =>-> cssRules->length, 0,
+ 		'invalid closing bracket in style declaration';
+ 	ok $@, '$@ is set by invalid closing bracket in selector';
+ }
+ 
+ use tests 14; # invalid [\@;]
+ {
+-	is CSS'DOM'parse q" @eotetet @aa ]" =>-> cssRules->length,0,
++	is CSS::DOM::parse q" @eotetet @aa ]" =>-> cssRules->length,0,
+ 		'invalid @ in unknown rule';
+ 	ok $@, '$@ is set by invalid @ in unknown rule';
+-	is CSS'DOM'parse q" @eotetet aa (;" =>-> cssRules->length,0,
++	is CSS::DOM::parse q" @eotetet aa (;" =>-> cssRules->length,0,
+ 		'invalid ; in unknown rule';
+ 	ok $@, '$@ is set by invalid ; in unknown rule';
+-	is CSS'DOM'parse q" @media {(; { " =>-> cssRules->length,0,
++	is CSS::DOM::parse q" @media {(; { " =>-> cssRules->length,0,
+ 		'invalid ; in media rule';
+ 	ok $@, '$@ is set by invalid ; in media rule';
+-	is CSS'DOM'parse q" @page { (;fooo" =>-> cssRules->length,0,
++	is CSS::DOM::parse q" @page { (;fooo" =>-> cssRules->length,0,
+ 		'invalid ; in page rule';
+ 	ok $@, '$@ is set by invalid ; in page rule';
+-	is CSS'DOM'parse q" page @oo " =>-> cssRules->length,0,
++	is CSS::DOM::parse q" page @oo " =>-> cssRules->length,0,
+ 		'invalid @ in selector';
+ 	ok $@, '$@ is set by invalid @ in selector';
+-	is CSS'DOM'parse q" page ;( " =>-> cssRules->length,0,
++	is CSS::DOM::parse q" page ;( " =>-> cssRules->length,0,
+ 		'invalid ; in selector';
+ 	ok $@, '$@ is set by invalid ; in selector';
+-	is CSS'DOM'parse q" a { ( ;( " =>-> cssRules->length,0,
++	is CSS::DOM::parse q" a { ( ;( " =>-> cssRules->length,0,
+ 		'invalid ; in style declaration';
+ 	ok $@, '$@ is set by invalid ; in style declaration';
+ }
+ 
+ use tests 14; # @import
+ {
+-	my $sheet = new CSS'DOM; my $rule;
++	my $sheet = new CSS::DOM; my $rule;
+ 
+ 	$sheet->insertRule('@import"foo.css"print,screen;',0);
+ 	is +($rule=pop@{$sheet->cssRules})->type, IMPORT_RULE,
+@@ -722,7 +722,7 @@ use tests 14; # @import
+ 
+ use tests 8; # @font-face
+ {
+-	my $sheet = new CSS'DOM; my $rule;
++	my $sheet = new CSS::DOM; my $rule;
+ 
+ 	$sheet->insertRule('@font-face{color:blue}',0);
+ 	is +($rule=pop@{$sheet->cssRules})->type, FONT_FACE_RULE,
+@@ -751,7 +751,7 @@ use tests 8; # @font-face
+ 
+ use tests 13; # @charset
+ {
+-	my $sheet = new CSS'DOM; my $rule;
++	my $sheet = new CSS::DOM; my $rule;
+ 
+ 	$sheet->insertRule('@charset "utf-8";',0);
+ 	is +($rule=pop@{$sheet->cssRules})->type, CHARSET_RULE,
+@@ -799,4 +799,3 @@ use tests 13; # @charset
+ 	is +($rule=pop@{$sheet->cssRules})->type, UNKNOWN_RULE,
+ 		'@charset w/space b4 ; is an unknown rule';
+ }
+-
+diff --git a/t/parser-tokens.t b/t/parser-tokens.t
+index 9c0fae3..d6a42b7 100644
+--- a/t/parser-tokens.t
++++ b/t/parser-tokens.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings; no warnings qw 'utf8 parenthesis';
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -37,7 +37,7 @@ for('_', 'a'..'z', 'A'.."Z", map(chr,0x80..0x100) ,"\x{2003}","\x{3000}"){
+ {
+ 	my $style = CSS::DOM::Style::parse("--a: 65");
+ 	is $style->cssText, '', 'identifier can\'t begin with --';
+-	$style = CSS'DOM'Style'parse"-0b:-0b";
++	$style = CSS::DOM::Style::parse"-0b:-0b";
+ 	is $style->cssText, '', 'nor with -0';
+ }
+ 
+@@ -49,7 +49,7 @@ use tests 8; # strings
+ 		. q/\'\"/;
+ 	my $expect =
+ 		qq/ \x{10ffff}f-_abcABC}}}}}}}}\xff\x{2003}\x{100}\t'"/;
+-	my $rule = new CSS::DOM::Rule'Import; 
++	my $rule = new CSS::DOM::Rule::Import;
+ 
+ 	$rule->cssText('@import ' . "'$nasty_escaped_string'");
+ 	is $rule->href, $expect, "'...'";
+@@ -80,7 +80,7 @@ use tests 8; # strings
+ 
+ use tests 23; # urls
+ {
+-	my $rule = new CSS'DOM'Rule::Import;
++	my $rule = new CSS::DOM::Rule::Import;
+ 
+ 	$rule->cssText('@import url(!$#%&][\\\}|{*~foo/bar.gif)');
+ 	is $rule->href, '!$#%&][\}|{*~foo/bar.gif', 'unquoted url';
+@@ -118,7 +118,7 @@ use tests 23; # urls
+ 	is $rule->href, "\x{2000}\x{2000}\n 0  )\tz",
+ 		'double-quoted url with escapes';
+ 
+-	my $style = new CSS'DOM'Style;
++	my $style = new CSS::DOM::Style;
+ 
+ 	$style->name('url(foo');
+ 	is $style->name, 'url(foo)', 'unquoted, unterminated url';
+@@ -179,7 +179,7 @@ use tests 3; # spaces and comments
+ 		"name:valu  /*eeeee "  
+ 	);
+ 	is $style->name, 'valu', 'another ws /**/ test';
+-	$style = CSS'DOM'Style'parse( "name: /*\n*/valu");
++	$style = CSS::DOM::Style::parse( "name: /*\n*/valu");
+ 	is $style->name, 'valu', 'multiline comments';
+ }
+ 
+@@ -187,27 +187,27 @@ use tests 3; # spaces and comments
+ 
+ use tests 6; # <!-- -->
+ {
+-	my $sheet = CSS'DOM'parse ' <!--{ name: value }--> @media print{}';
++	my $sheet = CSS::DOM::parse ' <!--{ name: value }--> @media print{}';
+ 	is join('',map cssText$_,cssRules$sheet),
+ 		"{ name: value }\n\@media print {\n}\n",
+ 		'ignored <!-- -->';
+-	is CSS'DOM'parse"{}{name: <!-- value; n:v}" =>->
++	is CSS::DOM::parse"{}{name: <!-- value; n:v}" =>->
+ 		cssRules->length,
+ 	   1,
+ 		'invalid <!--';
+ 	ok $@, '$@ after invalid <!--';
+-	is CSS'DOM'parse"{}{name: --> value; n:v}" =>->
++	is CSS::DOM::parse"{}{name: --> value; n:v}" =>->
+ 		cssRules->length,
+ 	   1,
+ 		'invalid -->';
+ 	ok $@, '$@ after invalid -->';
+-	is CSS'DOM'Style'parse"name:'<!--value-->",->name,
++	is CSS::DOM::Style::parse"name:'<!--value-->",->name,
+ 		"'<!--value-->'", '<!-- --> in a string';
+ }
+ 
+ use tests 1; # miscellaneous tokens
+ {
+-	my $sheet = CSS'DOM'parse  '@foo ()[~=:,./+-]{[("\"';
++	my $sheet = CSS::DOM::parse  '@foo ()[~=:,./+-]{[("\"';
+ 	is $sheet->cssRules->[0]->cssText,
+ 		'@foo ()[~=:,./+-]{[("\"")]}'. "\n",
+ 		'miscellaneous tokens'
+diff --git a/t/property-parser.t b/t/property-parser.t
+index 6423b39..f785054 100644
+--- a/t/property-parser.t
++++ b/t/property-parser.t
+@@ -3,7 +3,7 @@
+ use strict; use warnings; no warnings qw 'utf8 parenthesis regexp once qw';
+ our $tests;
+ BEGIN { ++$INC{'tests.pm'} }
+-sub tests'VERSION { $tests += pop };
++sub tests::VERSION { $tests += pop };
+ use Test::More;
+ plan tests => $tests;
+ 
+@@ -18,11 +18,11 @@ isa_ok my $parser = CSS::DOM::PropertyParser->new,
+ 
+ use tests 4; # clone
+ my $clone = (my $css21 = $CSS::DOM::PropertyParser::CSS21)->clone;
+-isn't $clone, $css21, 'clone at the first level';
+-isn't $clone->get_property('background-position'),
++isnt $clone, $css21, 'clone at the first level';
++isnt $clone->get_property('background-position'),
+       $css21->get_property('background-position'),
+  'clone clones individual property specs';
+-isn't
++isnt
+  $clone->get_property('border-color')->{properties}
+   {'border-top-color'},
+  $css21->get_property('border-color')->{properties}
+@@ -1314,17 +1314,17 @@ use tests 2; # parsing colours
+ { # Tests for problems with colours in cygwin’s perl (broken in 0.08; fixed
+   # in 0.09) and for bugs temporarily introduced while those problems were
+   # being addressed.
+- my $p = new CSS'DOM'PropertyParser;
++ my $p = new CSS::DOM::PropertyParser;
+  $p->add_property(
+   'colours' => {
+     format => '<colour>+',
+    },
+  );
+- my $s = CSS'DOM'Style'parse(
++ my $s = CSS::DOM::Style::parse(
+   "colours: rgb(0,0,0) rgb(1,1,1)", 
+    property_parser => $p
+  );
+- use CSS'DOM'Constants 'CSS_CUSTOM';
++ use CSS::DOM::Constants 'CSS_CUSTOM';
+  is $s->getPropertyCSSValue('colours')->cssValueType, CSS_CUSTOM,
+    'quantified <colour>s';
+  $p->add_property(
+@@ -1346,18 +1346,18 @@ use tests 1; # backtracking with list properties
+   # local ${$whatever}[0]  localises one element.  But it  actually
+   # replaces the array temporarily with a new one,  which cannot
+   # work with references.
+- my $p = new CSS'DOM'PropertyParser;
++ my $p = new CSS::DOM::PropertyParser;
+  $p->add_property(
+   'foo' => {
+     format => '[(foo)|(foo),]+', # [(foo),?]+ does not trigger the bug
+     list   => 1,
+    },
+  );
+- my $s = CSS'DOM'Style'parse(
++ my $s = CSS::DOM::Style::parse(
+   "foo: foo, foo", 
+    property_parser => $p
+  );
+- use CSS'DOM'Constants 'CSS_VALUE_LIST';
++ use CSS::DOM::Constants 'CSS_VALUE_LIST';
+  is_deeply [map cssText $_, @{$s->getPropertyCSSValue('foo')}],[('foo')x2],
+    'backtracking does not preserve existing captures';
+ }
diff --git a/pkgs/development/python-modules/aioesphomeapi/default.nix b/pkgs/development/python-modules/aioesphomeapi/default.nix
index b22090a7593..17d09d6525f 100644
--- a/pkgs/development/python-modules/aioesphomeapi/default.nix
+++ b/pkgs/development/python-modules/aioesphomeapi/default.nix
@@ -22,7 +22,7 @@
 
 buildPythonPackage rec {
   pname = "aioesphomeapi";
-  version = "18.5.2";
+  version = "18.5.3";
   pyproject = true;
 
   disabled = pythonOlder "3.9";
@@ -31,7 +31,7 @@ buildPythonPackage rec {
     owner = "esphome";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-kj4FHsNsGsMxK+EI1jgqBfvldkyAoBkCTGT1yiZMmzY=";
+    hash = "sha256-k4CqpvmsKBO42oLkzogfm0ALenxRJnngdgxt1HK5i+Q=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/circus/default.nix b/pkgs/development/python-modules/circus/default.nix
index 90cf6a4be7f..95d29a4401b 100644
--- a/pkgs/development/python-modules/circus/default.nix
+++ b/pkgs/development/python-modules/circus/default.nix
@@ -1,4 +1,5 @@
 { lib
+, stdenv
 , buildPythonPackage
 , fetchPypi
 , flit-core
@@ -34,6 +35,11 @@ buildPythonPackage rec {
     pyyaml
   ];
 
+  # On darwin: Too many open files
+  preCheck = lib.optionalString stdenv.isDarwin ''
+    ulimit -n 1024
+  '';
+
   disabledTests = [
     # these tests raise circus.tests.support.TimeoutException
     "test_reload1"
diff --git a/pkgs/development/python-modules/echo/default.nix b/pkgs/development/python-modules/echo/default.nix
new file mode 100644
index 00000000000..af3a3d43a6d
--- /dev/null
+++ b/pkgs/development/python-modules/echo/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, setuptools
+, setuptools-scm
+, libxcrypt
+, numpy
+, qt6
+, qtpy
+, pyqt6
+, pytestCheckHook
+, pytest-cov
+}:
+
+buildPythonPackage rec {
+  pname = "echo";
+  version = "0.8.0";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "glue-viz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-0FmUA7kOFSRZXwbj8d7asujBPOjE2pFhu6TDNSGD4r0=";
+  };
+
+  nativeBuildInputs = [ setuptools setuptools-scm qt6.wrapQtAppsHook ];
+
+  buildInputs = lib.optionals (pythonOlder "3.9") [
+    libxcrypt
+  ];
+
+  propagatedBuildInputs = [
+    qt6.qtconnectivity
+    qt6.qtbase
+    qt6.qttools
+    pyqt6
+    numpy
+    qtpy
+  ];
+
+  env.SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  # collecting ... qt.qpa.xcb: could not connect to display
+  # qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
+  doCheck = false;
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    pytest-cov
+  ];
+
+  pythonImportsCheck = [ "echo" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/glue-viz/echo";
+    description = "Callback Properties in Python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ifurther ];
+  };
+}
diff --git a/pkgs/development/python-modules/fast-histogram/default.nix b/pkgs/development/python-modules/fast-histogram/default.nix
new file mode 100644
index 00000000000..fd00ff5df8e
--- /dev/null
+++ b/pkgs/development/python-modules/fast-histogram/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, buildPythonPackage
+, pytestCheckHook
+, fetchFromGitHub
+, python
+, pythonOlder
+, setuptools
+, setuptools-scm
+, numpy
+, wheel
+, hypothesis
+, pytest-cov
+}:
+
+buildPythonPackage rec {
+  pname = "fast-histogram";
+  version = "0.12";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "astrofrog";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Cz4BgbtxbUPxL2NSzvZYjbYIN4KUuliUV0bXRRtyvfM=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+    setuptools-scm
+    wheel
+  ];
+
+  propagatedBuildInputs = [ numpy ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    hypothesis
+    pytest-cov
+  ];
+
+  pytestFlagsArray = [ "${builtins.placeholder "out"}/${python.sitePackages}" ];
+
+  env.SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  pythonImportsCheck = [ "fast_histogram" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/astrofrog/fast-histogram";
+    description = "Fast 1D and 2D histogram functions in Python";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ifurther ];
+  };
+}
diff --git a/pkgs/development/python-modules/geomet/default.nix b/pkgs/development/python-modules/geomet/default.nix
index fb5f098f0d9..0f9742c3438 100644
--- a/pkgs/development/python-modules/geomet/default.nix
+++ b/pkgs/development/python-modules/geomet/default.nix
@@ -2,14 +2,15 @@
 , buildPythonPackage
 , fetchFromGitHub
 , click
+, setuptools
 , six
 , pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "geomet";
-  version = "1.0.0";
-  format = "setuptools";
+  version = "1.1.0";
+  format = "pyproject";
 
   disabled = pythonOlder "3.8";
 
@@ -17,9 +18,13 @@ buildPythonPackage rec {
     owner = "geomet";
     repo = "geomet";
     rev = "refs/tags/${version}";
-    hash = "sha256-dN0d6wu5FqL/5FQrpQn+wlyEvp52pa5dkxLu3j3bxnw=";
+    hash = "sha256-YfI29925nffzRBMJb6Gm3muvlpwP3zSw2YJ2vWcf+Bo=";
   };
 
+  nativeBuildInputs = [
+    setuptools
+  ];
+
   propagatedBuildInputs = [
     click
     six
diff --git a/pkgs/development/python-modules/glueviz/default.nix b/pkgs/development/python-modules/glueviz/default.nix
new file mode 100644
index 00000000000..c6fb2859b41
--- /dev/null
+++ b/pkgs/development/python-modules/glueviz/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, dill
+, astropy
+, numpy
+, pandas
+, qt6
+, pyqt6
+, pyqt-builder
+, qtconsole
+, setuptools
+, setuptools-scm
+, scipy
+, ipython
+, ipykernel
+, h5py
+, matplotlib
+, xlrd
+, mpl-scatter-density
+, pvextractor
+, openpyxl
+, echo
+, pytest
+, pytest-flakes
+, pytest-cov
+}:
+
+buildPythonPackage rec {
+  pname = "glueviz";
+  version = "1.14.1";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "glue-viz";
+    repo = "glue";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-pHUcvyDziE7l0foEz7cygMuAwggnIWzsQy9SFZCDkXA=";
+  };
+
+  buildInputs = [ pyqt-builder ];
+  nativeBuildInputs = [ setuptools setuptools-scm qt6.wrapQtAppsHook ];
+  propagatedBuildInputs = [
+    astropy
+    dill
+    setuptools
+    scipy
+    numpy
+    matplotlib
+    pandas
+    pyqt6
+    qtconsole
+    ipython
+    ipykernel
+    h5py
+    xlrd
+    mpl-scatter-density
+    pvextractor
+    openpyxl
+    echo
+  ];
+
+  dontConfigure = true;
+
+  env.SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  # collecting ... qt.qpa.xcb: could not connect to display
+  # qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
+  doCheck = false;
+
+  nativeCheckInputs = [ pytest pytest-flakes pytest-cov ];
+
+  pythonImportsCheck = [ "glue" ];
+
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    homepage = "https://glueviz.org";
+    description = "Linked Data Visualizations Across Multiple Files";
+    license = licenses.bsd3; # https://github.com/glue-viz/glue/blob/main/LICENSE
+    maintainers = with maintainers; [ ifurther ];
+  };
+}
diff --git a/pkgs/development/python-modules/imgtool/default.nix b/pkgs/development/python-modules/imgtool/default.nix
new file mode 100644
index 00000000000..88ceeb23370
--- /dev/null
+++ b/pkgs/development/python-modules/imgtool/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, setuptools
+, cbor2
+, click
+, cryptography
+, intelhex
+}:
+
+buildPythonPackage rec {
+  pname = "imgtool";
+  version = "1.10.0";
+  pyproject = true;
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-A7NOdZNKw9lufEK2vK8Rzq9PRT98bybBfXJr0YMQS0A=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    cbor2
+    click
+    cryptography
+    intelhex
+  ];
+
+  pythonImportsCheck = [
+    "imgtool"
+  ];
+
+  meta = with lib; {
+    description = "MCUboot's image signing and key management";
+    homepage = "https://github.com/mcu-tools/mcuboot";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ samueltardieu ];
+  };
+}
diff --git a/pkgs/development/python-modules/mitmproxy-macos/default.nix b/pkgs/development/python-modules/mitmproxy-macos/default.nix
new file mode 100644
index 00000000000..39798d90b15
--- /dev/null
+++ b/pkgs/development/python-modules/mitmproxy-macos/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, hatchling
+}:
+
+buildPythonPackage rec {
+  pname = "mitmproxy-macos";
+  version = "0.3.11";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "mitmproxy";
+    repo = "mitmproxy_rs";
+    rev = version;
+    hash = "sha256-V6LUr1jJiTo0+53jipkTyzG5JSw6uHaS6ziyBaFbETw=";
+  };
+
+  sourceRoot = "${src.name}/mitmproxy-macos";
+  pythonImportsCheck = [ "mitmproxy_macos" ];
+  nativeBuildInputs = [
+    hatchling
+  ];
+
+  meta = with lib; {
+    description = "The MacOS Rust bits in mitmproxy";
+    homepage = "https://github.com/mitmproxy/mitmproxy_rs/tree/main/mitmproxy-macos";
+    changelog = "https://github.com/mitmproxy/mitmproxy_rs/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ boltzmannrain ];
+    platforms = platforms.darwin;
+  };
+}
diff --git a/pkgs/development/python-modules/mitmproxy-rs/default.nix b/pkgs/development/python-modules/mitmproxy-rs/default.nix
index 15850ab7cd7..d90e1e0c2a9 100644
--- a/pkgs/development/python-modules/mitmproxy-rs/default.nix
+++ b/pkgs/development/python-modules/mitmproxy-rs/default.nix
@@ -4,6 +4,8 @@
 , fetchFromGitHub
 , rustPlatform
 , darwin
+, libiconv
+, mitmproxy-macos
 }:
 
 buildPythonPackage rec {
@@ -34,13 +36,15 @@ buildPythonPackage rec {
 
   buildInputs = lib.optionals stdenv.isDarwin [
     darwin.apple_sdk.frameworks.Security
+    libiconv
+    mitmproxy-macos
   ];
 
   pythonImportsCheck = [ "mitmproxy_rs" ];
 
   meta = with lib; {
     description = "The Rust bits in mitmproxy";
-    homepage = " https://github.com/mitmproxy/mitmproxy_rs";
+    homepage = "https://github.com/mitmproxy/mitmproxy_rs";
     changelog = "https://github.com/mitmproxy/mitmproxy_rs/blob/${src.rev}/CHANGELOG.md";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/development/python-modules/mitmproxy/default.nix b/pkgs/development/python-modules/mitmproxy/default.nix
index 1c57361a640..566c1e0b329 100644
--- a/pkgs/development/python-modules/mitmproxy/default.nix
+++ b/pkgs/development/python-modules/mitmproxy/default.nix
@@ -2,6 +2,7 @@
 , fetchFromGitHub
 , buildPythonPackage
 , pythonOlder
+, stdenv
   # Mitmproxy requirements
 , aioquic
 , asgiref
@@ -15,6 +16,7 @@
 , hyperframe
 , kaitaistruct
 , ldap3
+, mitmproxy-macos
 , mitmproxy-rs
 , msgpack
 , passlib
@@ -81,6 +83,8 @@ buildPythonPackage rec {
     urwid
     wsproto
     zstandard
+  ] ++ lib.optionals stdenv.isDarwin [
+    mitmproxy-macos
   ];
 
   nativeCheckInputs = [
diff --git a/pkgs/development/python-modules/mpl-scatter-density/default.nix b/pkgs/development/python-modules/mpl-scatter-density/default.nix
new file mode 100644
index 00000000000..f0523c3594d
--- /dev/null
+++ b/pkgs/development/python-modules/mpl-scatter-density/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, buildPythonPackage
+, pytestCheckHook
+, fetchFromGitHub
+, fetchpatch
+, pythonOlder
+, setuptools-scm
+, setuptools
+, fast-histogram
+, matplotlib
+, numpy
+, wheel
+, pytest-mpl
+}:
+
+buildPythonPackage rec {
+  pname = "mpl-scatter-density";
+  version = "0.7";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "astrofrog";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-MMxM+iv5p9ZLcBpqa3tBBPbsMM/PTg6BXaDpGgSw+DE=";
+  };
+
+  patches = [
+    # https://github.com/astrofrog/mpl-scatter-density/pull/37
+    (fetchpatch {
+      name = "distutils-removal.patch";
+      url = "https://github.com/ifurther/mpl-scatter-density/commit/6feedabe1e82da67d8eec46a80eb370d9f334251.patch";
+      sha256 = "sha256-JqWlSm8mIwqjRPa+kMEaKipJyzGEO+gJK+Q045N1MXA=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    setuptools
+    setuptools-scm
+    wheel
+  ];
+
+  propagatedBuildInputs = [ matplotlib numpy fast-histogram ];
+
+  env.SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    pytest-mpl
+  ];
+
+  disabledTests = [
+    # AssertionError: (240, 240) != (216, 216)
+    # Erroneous pinning of figure DPI, sensitive to runtime environment
+    "test_default_dpi"
+  ];
+
+  pythonImportsCheck = [ "mpl_scatter_density" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/astrofrog/mpl-scatter-density";
+    description = "Fast scatter density plots for Matplotlib";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ifurther ];
+  };
+}
diff --git a/pkgs/development/python-modules/oca-port/default.nix b/pkgs/development/python-modules/oca-port/default.nix
index 0a603b0b91c..7b948c4ffdf 100644
--- a/pkgs/development/python-modules/oca-port/default.nix
+++ b/pkgs/development/python-modules/oca-port/default.nix
@@ -11,13 +11,13 @@
 
 buildPythonPackage rec {
   pname = "oca-port";
-  version = "0.13";
+  version = "0.14";
   format = "pyproject";
 
   src = fetchPypi {
     inherit version;
     pname = "oca_port";
-    hash = "sha256-9ihqjnGdBPasiRD2pZeaiibwzFQKI9t+s/zMzvyLLHQ=";
+    hash = "sha256-P+uCoC2u5lR4oTtloNFd4N+CjssUa5PbzbnhEulaRoc=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/openai-whisper/default.nix b/pkgs/development/python-modules/openai-whisper/default.nix
index 68f692e4c37..7983abd2e98 100644
--- a/pkgs/development/python-modules/openai-whisper/default.nix
+++ b/pkgs/development/python-modules/openai-whisper/default.nix
@@ -2,22 +2,23 @@
 , fetchFromGitHub
 , buildPythonPackage
 , substituteAll
-, cudaSupport ? false
+
+# build-system
+, setuptools
 
 # runtime
 , ffmpeg-headless
 
 # propagates
-, numpy
-, torch
-, torchWithCuda
-, tqdm
 , more-itertools
-, transformers
 , numba
+, numpy
 , openai-triton
 , scipy
 , tiktoken
+, torch
+, tqdm
+, transformers
 
 # tests
 , pytestCheckHook
@@ -25,14 +26,14 @@
 
 buildPythonPackage rec {
   pname = "whisper";
-  version = "20230918";
-  format = "setuptools";
+  version = "20231117";
+  pyproject = true;
 
   src = fetchFromGitHub {
     owner = "openai";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-wBAanFVEIIzTcoX40P9eI26UdEu0SC/xuife/zi2Xho=";
+    hash = "sha256-MJ1XjB/GuYUiECCuuHS0NWHvvs+ko0oTvLuDI7zLNiY=";
   };
 
   patches = [
@@ -42,32 +43,22 @@ buildPythonPackage rec {
     })
   ];
 
+  nativeBuildInputs = [
+    setuptools
+  ];
+
   propagatedBuildInputs = [
-    numpy
-    tqdm
     more-itertools
-    transformers
     numba
+    numpy
+    openai-triton
     scipy
     tiktoken
-  ] ++ lib.optionals (!cudaSupport) [
     torch
-  ] ++ lib.optionals (cudaSupport) [
-    openai-triton
-    torchWithCuda
+    tqdm
+    transformers
   ];
 
-  postPatch = ''
-    substituteInPlace requirements.txt \
-      --replace "tiktoken==0.3.3" "tiktoken>=0.3.3"
-  ''
-  # openai-triton is only needed for CUDA support.
-  # triton needs CUDA to be build.
-  # -> by making it optional, we can build whisper without unfree packages enabled
-  + lib.optionalString (!cudaSupport) ''
-    sed -i '/if sys.platform.startswith("linux") and platform.machine() == "x86_64":/{N;d}' setup.py
-  '';
-
   preCheck = ''
     export HOME=$TMPDIR
   '';
@@ -85,7 +76,7 @@ buildPythonPackage rec {
   ];
 
   meta = with lib; {
-    changelog = "https://github.com/openai/whisper/blob/v$[version}/CHANGELOG.md";
+    changelog = "https://github.com/openai/whisper/blob/v${version}/CHANGELOG.md";
     description = "General-purpose speech recognition model";
     homepage = "https://github.com/openai/whisper";
     license = licenses.mit;
diff --git a/pkgs/development/python-modules/plaid-python/default.nix b/pkgs/development/python-modules/plaid-python/default.nix
index a88ce34ab0d..1fcff9e4780 100644
--- a/pkgs/development/python-modules/plaid-python/default.nix
+++ b/pkgs/development/python-modules/plaid-python/default.nix
@@ -9,14 +9,14 @@
 
 buildPythonPackage rec {
   pname = "plaid-python";
-  version = "17.0.0";
+  version = "18.0.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-rVYyS2Wc3PC3BvkzUSe88sSXxJCElmP5s7B1NxSFAWY=";
+    hash = "sha256-1OV/oybxZXF2kjLoSA2KyQaTR91jqEWstpELSlUIg2o=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pvextractor/default.nix b/pkgs/development/python-modules/pvextractor/default.nix
new file mode 100644
index 00000000000..315d0411b8e
--- /dev/null
+++ b/pkgs/development/python-modules/pvextractor/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, astropy
+, qtpy
+, pyqt6
+, pyqt-builder
+, setuptools
+, setuptools-scm
+, scipy
+, matplotlib
+, spectral-cube
+, pytestCheckHook
+, pytest-astropy
+}:
+
+buildPythonPackage rec {
+  pname = "pvextractor";
+  version = "0.3";
+
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "radio-astro-tools";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-HYus2Gk3hzKq+3lJLOJQ+EE6LeO+DrvqLK3NpqrUYeI=";
+  };
+
+  buildInputs = [ pyqt-builder ];
+  nativeBuildInputs = [ setuptools setuptools-scm ];
+  propagatedBuildInputs = [
+    astropy
+    scipy
+    matplotlib
+    pyqt6
+    qtpy
+    spectral-cube
+  ];
+
+  env.SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  # collecting ... qt.qpa.xcb: could not connect to display
+  # qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
+  doCheck = false;
+
+  nativeCheckInputs = [
+    pytestCheckHook
+    pytest-astropy
+  ];
+
+  pythonImportsCheck = [ "pvextractor" ];
+
+  meta = with lib; {
+    homepage = "http://pvextractor.readthedocs.io";
+    description = "Position-velocity diagram extractor";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ifurther ];
+  };
+}
diff --git a/pkgs/development/python-modules/pyvmomi/default.nix b/pkgs/development/python-modules/pyvmomi/default.nix
index 7a740efe5a4..f395f88bf7d 100644
--- a/pkgs/development/python-modules/pyvmomi/default.nix
+++ b/pkgs/development/python-modules/pyvmomi/default.nix
@@ -1,14 +1,16 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
+, lxml
 , requests
 , six
+, pyopenssl
 , pythonOlder
 }:
 
 buildPythonPackage rec {
   pname = "pyvmomi";
-  version = "8.0.2.0";
+  version = "8.0.2.0.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -17,7 +19,7 @@ buildPythonPackage rec {
     owner = "vmware";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-IoYxk/lS7dhw0q3kfpq7y/oDNmc1dOra0YA3CiHe8YM=";
+    hash = "sha256-Y7Zor70P4lhkAslckg/prfCmnszVMFPntWdJpfWnvIM=";
   };
 
   propagatedBuildInputs = [
@@ -25,6 +27,13 @@ buildPythonPackage rec {
     six
   ];
 
+  passthru.optional-dependencies = {
+    sso = [
+      lxml
+      pyopenssl
+    ];
+  };
+
   # Requires old version of vcrpy
   doCheck = false;
 
diff --git a/pkgs/development/python-modules/scs/default.nix b/pkgs/development/python-modules/scs/default.nix
index 0a242e23137..5e95bed4cbd 100644
--- a/pkgs/development/python-modules/scs/default.nix
+++ b/pkgs/development/python-modules/scs/default.nix
@@ -2,6 +2,10 @@
 , stdenv
 , buildPythonPackage
 , fetchFromGitHub
+, fetchpatch
+, meson-python
+, pkg-config
+, Accelerate
 , blas
 , lapack
 , numpy
@@ -12,19 +16,43 @@
 
 buildPythonPackage rec {
   pname = "scs";
-  version = "3.2.3";
+  version = "3.2.4";
+  pyproject = true;
 
   src = fetchFromGitHub {
     owner = "bodono";
     repo = "scs-python";
     rev = version;
-    hash = "sha256-/5yGvZy3luGQkbYcsb/6TZLYou91lpA3UKONviMVpuM=";
+    hash = "sha256-UmMbnj7QZSvHWSUk1Qa0VP4i3iDCYHxoa+qBmEdFjRs=";
     fetchSubmodules = true;
   };
 
-  buildInputs = [
-    lapack
+  patches = [
+    # needed for building against netlib's reference blas implementation and
+    # the pkg-config patch. remove on next update
+    (fetchpatch {
+      name = "find-and-ld-lapack.patch";
+      url = "https://github.com/bodono/scs-python/commit/a0aea80e7d490770d6a47d2c79396f6c3341c1f9.patch";
+      hash = "sha256-yHF8f7SLoG7veZ6DEq1HVH6rT2KtFONwJtqSiKcxOdg=";
+    })
+    # add support for pkg-config. remove on next update
+    (fetchpatch {
+      name = "use-pkg-config.patch";
+      url = "https://github.com/bodono/scs-python/commit/dd17e2e5282ebe85f2df8a7c6b25cfdeb894970d.patch";
+      hash = "sha256-vSeSJeeu5Wx3RXPyB39YTo0RU8HtAojrUw85Q76/QzA=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    meson-python
+    pkg-config
+  ];
+
+  buildInputs = if stdenv.isDarwin then [
+    Accelerate
+  ] else [
     blas
+    lapack
   ];
 
   propagatedBuildInputs = [
@@ -51,6 +79,6 @@ buildPythonPackage rec {
     homepage = "https://github.com/cvxgrp/scs"; # upstream C package
     downloadPage = "https://github.com/bodono/scs-python";
     license = licenses.mit;
-    maintainers = with maintainers; [ drewrisinger ];
+    maintainers = with maintainers; [ a-n-n-a-l-e-e drewrisinger ];
   };
 }
diff --git a/pkgs/development/python-modules/succulent/default.nix b/pkgs/development/python-modules/succulent/default.nix
index 3b191bae9b8..e1ad7981b04 100644
--- a/pkgs/development/python-modules/succulent/default.nix
+++ b/pkgs/development/python-modules/succulent/default.nix
@@ -13,7 +13,7 @@
 
 buildPythonPackage rec {
   pname = "succulent";
-  version = "0.2.5";
+  version = "0.2.6";
   format = "pyproject";
 
   disabled = pythonOlder "3.7";
@@ -21,8 +21,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "firefly-cpp";
     repo = "succulent";
-    rev = version;
-    hash = "sha256-fSsb2UQM69AAjJd/Rvzuok7jBeAa6udbB8FbuNP8Ztw=";
+    rev = "refs/tags/${version}";
+    hash = "sha256-CGDgt6tv+KysrytJsgDKwf2yv6shXizvD67XsGBg+nI=";
   };
 
   pythonRelaxDeps = [
diff --git a/pkgs/development/tools/analysis/flow/default.nix b/pkgs/development/tools/analysis/flow/default.nix
index ba5e608bd35..6ed8c18d0b1 100644
--- a/pkgs/development/tools/analysis/flow/default.nix
+++ b/pkgs/development/tools/analysis/flow/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "flow";
-  version = "0.219.5";
+  version = "0.222.0";
 
   src = fetchFromGitHub {
     owner = "facebook";
     repo = "flow";
     rev = "v${version}";
-    sha256 = "sha256-cg0tqwvYQ43Nvu6fQHGEX002sjmDBcz2AGke+K5Gk7g=";
+    sha256 = "sha256-IOy6zsDGUfiSeOalQnku/4uNyjqpz2bMcpmf7Vq9fyI=";
   };
 
   postPatch = ''
diff --git a/pkgs/development/tools/api-linter/default.nix b/pkgs/development/tools/api-linter/default.nix
index b34e2ed4f80..5b0e8e7c592 100644
--- a/pkgs/development/tools/api-linter/default.nix
+++ b/pkgs/development/tools/api-linter/default.nix
@@ -5,16 +5,16 @@
 
 buildGoModule rec {
   pname = "api-linter";
-  version = "1.59.0";
+  version = "1.59.1";
 
   src = fetchFromGitHub {
     owner = "googleapis";
     repo = "api-linter";
     rev = "v${version}";
-    hash = "sha256-rT7mN/vW7o7Qj2BUYmwePJtvURYdgvRK7Oi7Rw/RK4A=";
+    hash = "sha256-PgDdCcXiy9Dpop2myuRoi8KQROZdJ76ce4ax7wU4bpc=";
   };
 
-  vendorHash = "sha256-TV0lA0DkQu3e9aq2uX4Ea8vrvDXxM8vgOn7EXGjld9E=";
+  vendorHash = "sha256-egAZ4CeSSStfkN2mGgzGHTBojHKHoVEf3o0oi+OpMkw=";
 
   subPackages = [ "cmd/api-linter" ];
 
@@ -23,7 +23,7 @@ buildGoModule rec {
     "-w"
   ];
 
-  # reference: https://github.com/googleapis/api-linter/blob/v1.59.0/.github/workflows/release.yaml#L76
+  # reference: https://github.com/googleapis/api-linter/blob/v1.59.1/.github/workflows/release.yaml#L76
   preBuild = ''
     cat > cmd/api-linter/version.go <<EOF
     package main
diff --git a/pkgs/development/tools/biome/default.nix b/pkgs/development/tools/biome/default.nix
index c96e5a71948..65a039d34cf 100644
--- a/pkgs/development/tools/biome/default.nix
+++ b/pkgs/development/tools/biome/default.nix
@@ -3,6 +3,7 @@
 , fetchFromGitHub
 , pkg-config
 , libgit2_1_6
+, rust-jemalloc-sys
 , zlib
 , stdenv
 , darwin
@@ -28,6 +29,7 @@ rustPlatform.buildRustPackage rec {
 
   buildInputs = [
     libgit2_1_6
+    rust-jemalloc-sys
     zlib
   ] ++ lib.optionals stdenv.isDarwin [
     darwin.apple_sdk.frameworks.Security
diff --git a/pkgs/development/tools/buildah/default.nix b/pkgs/development/tools/buildah/default.nix
index a2215059436..a6761a7350c 100644
--- a/pkgs/development/tools/buildah/default.nix
+++ b/pkgs/development/tools/buildah/default.nix
@@ -17,13 +17,13 @@
 
 buildGoModule rec {
   pname = "buildah";
-  version = "1.32.1";
+  version = "1.32.2";
 
   src = fetchFromGitHub {
     owner = "containers";
     repo = "buildah";
     rev = "v${version}";
-    hash = "sha256-imhl8CezFoSi0M0nMxIFL/ZVa8eDAA4s/ZVIMr/QUJ4=";
+    hash = "sha256-Av4wrJ+anVu1pTSFTpaseBhj+7ECsRoKb1bATrUKYuo=";
   };
 
   outputs = [ "out" "man" ];
diff --git a/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix b/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
index f07ac564b88..479f319c542 100644
--- a/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
+++ b/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
@@ -1,7 +1,7 @@
 { lib, buildGoModule, fetchFromGitLab, fetchurl, bash }:
 
 let
-  version = "16.5.0";
+  version = "16.6.0";
 in
 buildGoModule rec {
   inherit version;
@@ -17,13 +17,13 @@ buildGoModule rec {
   # For patchShebangs
   buildInputs = [ bash ];
 
-  vendorHash = "sha256-C37ijxvyY9PG/Qn29Fmk0pxK+hq45kHIBveBltfIfTo=";
+  vendorHash = "sha256-m0+iAJITX0JfBd5ZboqlcG6eNbPJ35gHa4LV21jX5d8=";
 
   src = fetchFromGitLab {
     owner = "gitlab-org";
     repo = "gitlab-runner";
     rev = "v${version}";
-    sha256 = "sha256-NLidtwn1zT7BxzMEF5K41fwbZaICA/KuAr8MIjpJD+A=";
+    sha256 = "sha256-4N00+yO7Ps0+jy7WmHhm4Eh4MXt3beH00ScZ1RWNByE=";
   };
 
   patches = [
diff --git a/pkgs/development/tools/darklua/default.nix b/pkgs/development/tools/darklua/default.nix
index 3703cc757c6..ba7ebe5db17 100644
--- a/pkgs/development/tools/darklua/default.nix
+++ b/pkgs/development/tools/darklua/default.nix
@@ -7,16 +7,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "darklua";
-  version = "0.11.0";
+  version = "0.11.1";
 
   src = fetchFromGitHub {
     owner = "seaofvoices";
     repo = "darklua";
     rev = "v${version}";
-    hash = "sha256-lBnEMQqAUkr377aYNRvpbIyZMmB6NIY/bmB1Oe8QPIM=";
+    hash = "sha256-9ukhKAhN4dD36Em90Eox8o+7W1eXboG2xAE8+oPlhaI=";
   };
 
-  cargoHash = "sha256-YmtOVS58I8YdNpWBXBuwSFUVKQsVSuGlql70SPFkamM=";
+  cargoHash = "sha256-hi9kzCwsw8c1tcvSsFV0do/jQ/KyDz3TcTEfOqHNxyw=";
 
   buildInputs = lib.optionals stdenv.isDarwin [
     darwin.apple_sdk.frameworks.CoreServices
diff --git a/pkgs/development/tools/devbox/default.nix b/pkgs/development/tools/devbox/default.nix
index c373b18108a..f6dadecaefa 100644
--- a/pkgs/development/tools/devbox/default.nix
+++ b/pkgs/development/tools/devbox/default.nix
@@ -5,13 +5,13 @@
 }:
 buildGoModule rec {
   pname = "devbox";
-  version = "0.7.1";
+  version = "0.8.2";
 
   src = fetchFromGitHub {
     owner = "jetpack-io";
     repo = pname;
     rev = version;
-    hash = "sha256-xjmxikIcR3v5lpxq7w2p0bukPunUTYH/HTQhy9fAOz8=";
+    hash = "sha256-Hh4SfmdR7hujc6Ty+ay8uyl1vkjYuxwa5J5RacqHOAE=";
   };
 
   ldflags = [
@@ -23,7 +23,7 @@ buildGoModule rec {
   # integration tests want file system access
   doCheck = false;
 
-  vendorHash = "sha256-fDh+6aBrHUqioNbgufFiD5c4i8SGAYrUuFXgTVmhrRE=";
+  vendorHash = "sha256-SVChgkPgqhApWDNA1me41zS0hXd1G2oFrL/SsnFiIsg=";
 
   nativeBuildInputs = [ installShellFiles ];
 
diff --git a/pkgs/development/tools/ruff/default.nix b/pkgs/development/tools/ruff/default.nix
index 75e32e0c7c1..94f70251e50 100644
--- a/pkgs/development/tools/ruff/default.nix
+++ b/pkgs/development/tools/ruff/default.nix
@@ -11,16 +11,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "ruff";
-  version = "0.1.5";
+  version = "0.1.6";
 
   src = fetchFromGitHub {
     owner = "astral-sh";
     repo = "ruff";
     rev = "refs/tags/v${version}";
-    hash = "sha256-g52cIw0af/wQSuA4QhC2dCjcDGikirswBDAtwf8Drvo=";
+    hash = "sha256-EX1tXe8KlwjrohzgzKDeJP0PjfKw8+lnQ7eg9PAUAfQ=";
   };
 
-  cargoHash = "sha256-1jfKRpyGewNlvMkL/MKnOaRJyajwLAuw+YyeTyTtcP4=";
+  cargoHash = "sha256-ueWSBYXcdaxagjFjxfsImulOs0zVVqGHmfXp4pQLaMM=";
 
   nativeBuildInputs = [
     installShellFiles
diff --git a/pkgs/development/tools/rust/cargo-nextest/default.nix b/pkgs/development/tools/rust/cargo-nextest/default.nix
index 92e382071df..e472c977f5f 100644
--- a/pkgs/development/tools/rust/cargo-nextest/default.nix
+++ b/pkgs/development/tools/rust/cargo-nextest/default.nix
@@ -2,16 +2,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "cargo-nextest";
-  version = "0.9.62";
+  version = "0.9.63";
 
   src = fetchFromGitHub {
     owner = "nextest-rs";
     repo = "nextest";
     rev = "cargo-nextest-${version}";
-    hash = "sha256-GxDURkXmZvxaX9RLq/hlqtX1woWm2JKtv5x5goCY4ZU=";
+    hash = "sha256-xAFpTcugAWUmHwWe2Ny1urxrIzRXyfxUMb9kBoGa3SA=";
   };
 
-  cargoHash = "sha256-zQB8sPeKT43qC5JjrHa7E41NyDyiQ3PGvBqgszs+tBI=";
+  cargoHash = "sha256-ase0pfcDDkQGnTEtAD2ZTnBP7jdGS9pki1BoFbfUuFk=";
 
   buildInputs = lib.optionals stdenv.isDarwin [
     darwin.apple_sdk.frameworks.SystemConfiguration
diff --git a/pkgs/development/tools/rust/cargo-zigbuild/default.nix b/pkgs/development/tools/rust/cargo-zigbuild/default.nix
index 5a4e14a733c..3741be37772 100644
--- a/pkgs/development/tools/rust/cargo-zigbuild/default.nix
+++ b/pkgs/development/tools/rust/cargo-zigbuild/default.nix
@@ -2,16 +2,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "cargo-zigbuild";
-  version = "0.17.4";
+  version = "0.17.5";
 
   src = fetchFromGitHub {
     owner = "messense";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-7XY2hFmc4Vqh8fVCSrpQkoXZKZxX3kqppIDGc3T7qRw=";
+    hash = "sha256-x0TPbqwoCaXUlrjYQ47+x5KohsiK5yCrI2Q8yA2K8Zs=";
   };
 
-  cargoHash = "sha256-a/WRXiTSmQyAlxXqeFUWWSPFbHKL7Sifv2CW7rgbLWk=";
+  cargoHash = "sha256-FK6tTAbhP1f4VasG9HCahbMTDrJ9A6zXt/T6cs3HOZE=";
 
   nativeBuildInputs = [ makeWrapper ];
 
diff --git a/pkgs/development/tools/rust/humility/Cargo.lock b/pkgs/development/tools/rust/humility/Cargo.lock
index 7f20641b32b..8fd62d8cc56 100644
--- a/pkgs/development/tools/rust/humility/Cargo.lock
+++ b/pkgs/development/tools/rust/humility/Cargo.lock
@@ -3,64 +3,119 @@
 version = 3
 
 [[package]]
-name = "CoreFoundation-sys"
-version = "0.1.4"
+name = "addr2line"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0e9889e6db118d49d88d84728d0e964d973a5680befb5f85f55141beea5c20b"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
 dependencies = [
- "libc",
- "mach",
+ "gimli 0.27.2",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
 ]
 
 [[package]]
-name = "IOKit-sys"
+name = "android_system_properties"
 version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99696c398cbaf669d2368076bdb3d627fb0ce51a26899d7c61228c5c0af3bf4a"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
 dependencies = [
- "CoreFoundation-sys",
  "libc",
- "mach",
 ]
 
 [[package]]
-name = "addr2line"
-version = "0.17.0"
+name = "anstream"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
+checksum = "9e579a7752471abc2a8268df8b20005e3eadd975f585398f17efcfd8d4927371"
 dependencies = [
- "gimli 0.26.1",
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
 ]
 
 [[package]]
-name = "adler"
-version = "1.0.2"
+name = "anstyle"
+version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
 
 [[package]]
-name = "aho-corasick"
-version = "0.7.18"
+name = "anstyle-parse"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
 dependencies = [
- "memchr",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcd8291a340dd8ac70e18878bc4501dd7b4ff970cfa21c207d36ece51ea88fd"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "anyhow"
-version = "1.0.58"
+version = "1.0.70"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
+checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
 dependencies = [
  "backtrace",
 ]
 
 [[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
 name = "atomic-polyfill"
-version = "0.1.8"
+version = "0.1.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e14bf7b4f565e5e717d7a7a65b2a05c0b8c96e4db636d6f780f03b15108cdd1b"
+checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28"
 dependencies = [
  "critical-section",
 ]
@@ -71,7 +126,7 @@ version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
 dependencies = [
- "hermit-abi",
+ "hermit-abi 0.1.19",
  "libc",
  "winapi",
 ]
@@ -84,39 +139,30 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
 [[package]]
 name = "backtrace"
-version = "0.3.65"
+version = "0.3.67"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
 dependencies = [
  "addr2line",
  "cc",
  "cfg-if",
  "libc",
  "miniz_oxide",
- "object 0.28.4",
+ "object 0.30.3",
  "rustc-demangle",
 ]
 
 [[package]]
-name = "bare-metal"
-version = "0.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3"
-dependencies = [
- "rustc_version 0.2.3",
-]
-
-[[package]]
-name = "bare-metal"
-version = "1.0.0"
+name = "base64"
+version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
 
 [[package]]
-name = "base64"
-version = "0.13.0"
+name = "base64ct"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
 
 [[package]]
 name = "bincode"
@@ -128,12 +174,6 @@ dependencies = [
 ]
 
 [[package]]
-name = "bit_field"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4"
-
-[[package]]
 name = "bitfield"
 version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -146,10 +186,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
 
 [[package]]
+name = "bitflags"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c70beb79cbb5ce9c4f8e20849978f34225931f665bb49efa6982875a4d5facb3"
+
+[[package]]
 name = "bitvec"
-version = "0.22.3"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5237f00a8c86130a0cc317830e558b966dd7850d48a953d998c813f01a41b527"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
 dependencies = [
  "funty",
  "radium",
@@ -159,24 +205,18 @@ dependencies = [
 
 [[package]]
 name = "block-buffer"
-version = "0.10.2"
+version = "0.10.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
 dependencies = [
  "generic-array",
 ]
 
 [[package]]
-name = "bstr"
-version = "0.2.17"
+name = "bumpalo"
+version = "3.12.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
-dependencies = [
- "lazy_static",
- "memchr",
- "regex-automata",
- "serde",
-]
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
 
 [[package]]
 name = "byteorder"
@@ -186,15 +226,15 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
 
 [[package]]
 name = "bytes"
-version = "1.1.0"
+version = "1.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
 
 [[package]]
 name = "bzip2"
-version = "0.4.3"
+version = "0.4.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0"
+checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
 dependencies = [
  "bzip2-sys",
  "libc",
@@ -246,7 +286,7 @@ checksum = "7714a157da7991e23d90686b9524b9e12e0407a108647f52e9328f4b3d51ac7f"
 dependencies = [
  "cargo-platform",
  "semver 0.11.0",
- "semver-parser 0.10.2",
+ "semver-parser",
  "serde",
  "serde_json",
 ]
@@ -259,9 +299,12 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
 
 [[package]]
 name = "cc"
-version = "1.0.73"
+version = "1.0.79"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
 
 [[package]]
 name = "cfg-if"
@@ -270,13 +313,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
 [[package]]
+name = "chrono"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
 name = "clap"
-version = "3.2.6"
+version = "3.2.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f1fe12880bae935d142c8702d500c63a4e8634b6c3c57ad72bf978fc7b6249a"
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
 dependencies = [
  "atty",
- "bitflags",
+ "bitflags 1.3.2",
  "clap_derive",
  "clap_lex",
  "indexmap",
@@ -288,27 +355,43 @@ dependencies = [
 
 [[package]]
 name = "clap_derive"
-version = "3.2.6"
+version = "3.2.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed6db9e867166a43a53f7199b5e4d1f522a1e5bd626654be263c999ce59df39a"
+checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65"
 dependencies = [
- "heck 0.4.0",
+ "heck",
  "proc-macro-error",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.109",
 ]
 
 [[package]]
 name = "clap_lex"
-version = "0.2.3"
+version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87eba3c8c7f42ef17f6c659fc7416d0f4758cd3e58861ee63c5fa4a4dde649e4"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
 dependencies = [
  "os_str_bytes",
 ]
 
 [[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
 name = "colored"
 version = "2.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -321,47 +404,34 @@ dependencies = [
 
 [[package]]
 name = "combine"
-version = "4.6.4"
+version = "4.6.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a604e93b79d1808327a6fca85a6f2d69de66461e7620f5a4cbf5fb4d1d7c948"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
 dependencies = [
  "bytes",
  "memchr",
 ]
 
 [[package]]
-name = "concolor"
-version = "0.0.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "015267563b1df20adccdd00cb05257b1dfbea70a04928e9cf88ffb850c1a40af"
-dependencies = [
- "atty",
- "bitflags",
- "concolor-query",
-]
-
-[[package]]
-name = "concolor-query"
-version = "0.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6417fe6fc03a8b533fd2177742eeb39a90c7233eedec7bac96d4d6b69a09449"
-
-[[package]]
 name = "console"
-version = "0.15.0"
+version = "0.15.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31"
+checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60"
 dependencies = [
  "encode_unicode",
+ "lazy_static",
  "libc",
- "once_cell",
- "regex",
- "terminal_size",
  "unicode-width",
- "winapi",
+ "windows-sys 0.42.0",
 ]
 
 [[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
 name = "content_inspector"
 version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -372,54 +442,48 @@ dependencies = [
 
 [[package]]
 name = "convert_case"
-version = "0.3.2"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e1f025f441cdfb75831bec89b9d6a6ed02e5e763f78fc5e1ff30d4870fefaec"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
 
 [[package]]
-name = "cortex-m"
-version = "0.7.5"
+name = "coolor"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd20d4ac4aa86f4f75f239d59e542ef67de87cce2c282818dc6e84155d3ea126"
+checksum = "af4d7a805ca0d92f8c61a31c809d4323fdaa939b0b440e544d21db7797c5aaad"
 dependencies = [
- "bare-metal 0.2.5",
- "bitfield",
- "embedded-hal",
- "volatile-register",
+ "crossterm 0.23.2",
 ]
 
 [[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
 name = "cpufeatures"
-version = "0.2.2"
+version = "0.2.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "crc"
-version = "3.0.0"
+version = "3.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53757d12b596c16c78b83458d732a5d1a17ab3f53f2f7412f6fb57cc8a140ab3"
+checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe"
 dependencies = [
  "crc-catalog",
 ]
 
 [[package]]
-name = "crc-any"
-version = "2.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "774646b687f63643eb0f4bf13dc263cb581c8c9e57973b6ddf78bda3994d88df"
-dependencies = [
- "debug-helper",
-]
-
-[[package]]
 name = "crc-catalog"
-version = "2.1.0"
+version = "2.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d0165d2900ae6778e36e80bbc4da3b5eefccee9ba939761f9c2882a5d9af3ff"
+checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484"
 
 [[package]]
 name = "crc32fast"
@@ -432,21 +496,15 @@ dependencies = [
 
 [[package]]
 name = "critical-section"
-version = "0.2.7"
+version = "1.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95da181745b56d4bd339530ec393508910c909c784e8962d15d722bacf0bcbcd"
-dependencies = [
- "bare-metal 1.0.0",
- "cfg-if",
- "cortex-m",
- "riscv",
-]
+checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52"
 
 [[package]]
 name = "crossbeam"
-version = "0.8.1"
+version = "0.8.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ae5588f6b3c3cb05239e90bd110f257254aecd01e4635400391aeae07497845"
+checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
 dependencies = [
  "cfg-if",
  "crossbeam-channel",
@@ -458,9 +516,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-channel"
-version = "0.5.5"
+version = "0.5.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
 dependencies = [
  "cfg-if",
  "crossbeam-utils",
@@ -468,9 +526,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-deque"
-version = "0.8.1"
+version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
 dependencies = [
  "cfg-if",
  "crossbeam-epoch",
@@ -479,23 +537,22 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-epoch"
-version = "0.9.9"
+version = "0.9.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
 dependencies = [
  "autocfg",
  "cfg-if",
  "crossbeam-utils",
  "memoffset",
- "once_cell",
  "scopeguard",
 ]
 
 [[package]]
 name = "crossbeam-queue"
-version = "0.3.5"
+version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f25d8400f4a7a5778f0e4e52384a48cbd9b5c495d110786187fc750075277a2"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
 dependencies = [
  "cfg-if",
  "crossbeam-utils",
@@ -503,12 +560,11 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.9"
+version = "0.8.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
 dependencies = [
  "cfg-if",
- "once_cell",
 ]
 
 [[package]]
@@ -517,11 +573,44 @@ version = "0.20.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c0ebde6a9dd5e331cd6c6f48253254d117642c31653baa475e394657c59c1f7d"
 dependencies = [
- "bitflags",
- "crossterm_winapi",
+ "bitflags 1.3.2",
+ "crossterm_winapi 0.8.0",
+ "libc",
+ "mio 0.7.14",
+ "parking_lot 0.11.2",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2102ea4f781910f8a5b98dd061f4c2023f479ce7bb1236330099ceb5a93cf17"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm_winapi 0.9.0",
+ "libc",
+ "mio 0.8.6",
+ "parking_lot 0.12.1",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab9f7409c70a38a56216480fba371ee460207dd8926ccf5b4160591759559170"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm_winapi 0.9.0",
  "libc",
- "mio",
- "parking_lot",
+ "mio 0.8.6",
+ "parking_lot 0.12.1",
+ "serde",
  "signal-hook",
  "signal-hook-mio",
  "winapi",
@@ -537,10 +626,19 @@ dependencies = [
 ]
 
 [[package]]
+name = "crossterm_winapi"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
 name = "crypto-common"
-version = "0.1.3"
+version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
 dependencies = [
  "generic-array",
  "typenum",
@@ -548,13 +646,12 @@ dependencies = [
 
 [[package]]
 name = "csv"
-version = "1.1.6"
+version = "1.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad"
 dependencies = [
- "bstr",
  "csv-core",
- "itoa 0.4.8",
+ "itoa",
  "ryu",
  "serde",
 ]
@@ -570,12 +667,56 @@ dependencies = [
 
 [[package]]
 name = "ctrlc"
-version = "3.2.2"
+version = "3.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b37feaa84e6861e00a1f5e5aa8da3ee56d605c9992d33e082786754828e20865"
+checksum = "bbcf33c2a618cbe41ee43ae6e9f2e48368cd9f9db2896f10167d8d762679f639"
 dependencies = [
  "nix",
- "winapi",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
 ]
 
 [[package]]
@@ -599,7 +740,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "strsim",
- "syn",
+ "syn 1.0.109",
 ]
 
 [[package]]
@@ -610,46 +751,31 @@ checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
 dependencies = [
  "darling_core",
  "quote",
- "syn",
+ "syn 1.0.109",
 ]
 
 [[package]]
-name = "debug-helper"
-version = "0.3.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e"
-
-[[package]]
 name = "digest"
-version = "0.10.3"
+version = "0.10.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
 dependencies = [
  "block-buffer",
  "crypto-common",
+ "subtle",
 ]
 
 [[package]]
 name = "dunce"
-version = "1.0.2"
+version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "453440c271cf5577fd2a40e4942540cb7d0d2f85e27c8d07dd0023c925a67541"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
 
 [[package]]
 name = "either"
-version = "1.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
-
-[[package]]
-name = "embedded-hal"
-version = "0.2.7"
+version = "1.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff"
-dependencies = [
- "nb 0.1.3",
- "void",
-]
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
 
 [[package]]
 name = "encode_unicode"
@@ -665,14 +791,14 @@ checksum = "c375b9c5eadb68d0a6efee2999fef292f45854c3444c86f09d8ab086ba942b0e"
 dependencies = [
  "num-traits",
  "quote",
- "syn",
+ "syn 1.0.109",
 ]
 
 [[package]]
 name = "env_logger"
-version = "0.9.0"
+version = "0.9.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
+checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7"
 dependencies = [
  "atty",
  "humantime",
@@ -682,6 +808,27 @@ dependencies = [
 ]
 
 [[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
 name = "fallible-iterator"
 version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -689,30 +836,41 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
 
 [[package]]
 name = "fastrand"
-version = "1.7.0"
+version = "1.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
 dependencies = [
  "instant",
 ]
 
 [[package]]
+name = "fd-lock"
+version = "3.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39ae6b3d9530211fb3b12a95374b8b0823be812f53d09e18c5675c0146b09642"
+dependencies = [
+ "cfg-if",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
 name = "filetime"
-version = "0.2.16"
+version = "0.2.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
 dependencies = [
  "cfg-if",
  "libc",
- "redox_syscall",
- "winapi",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "flate2"
-version = "1.0.24"
+version = "1.0.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
 dependencies = [
  "crc32fast",
  "miniz_oxide",
@@ -726,21 +884,32 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
 
 [[package]]
 name = "funty"
-version = "1.2.0"
+version = "2.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1847abb9cb65d566acd5942e94aea9c8f547ad02c98e1649326fc0e8910b8b1e"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
 
 [[package]]
 name = "generic-array"
-version = "0.14.5"
+version = "0.14.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
 dependencies = [
  "typenum",
  "version_check",
 ]
 
 [[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
 name = "gimli"
 version = "0.22.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -753,19 +922,25 @@ dependencies = [
 
 [[package]]
 name = "gimli"
-version = "0.26.1"
+version = "0.26.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4"
+checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
 dependencies = [
  "fallible-iterator",
  "stable_deref_trait",
 ]
 
 [[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
 name = "glob"
-version = "0.3.0"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
 
 [[package]]
 name = "goblin"
@@ -789,19 +964,19 @@ dependencies = [
 
 [[package]]
 name = "hashbrown"
-version = "0.12.1"
+version = "0.12.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
 
 [[package]]
 name = "heapless"
-version = "0.7.14"
+version = "0.7.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "065681e99f9ef7e0e813702a0326aedbcbbde7db5e55f097aedd1bf50b9dca43"
+checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743"
 dependencies = [
  "atomic-polyfill",
  "hash32",
- "rustc_version 0.4.0",
+ "rustc_version",
  "serde",
  "spin",
  "stable_deref_trait",
@@ -809,29 +984,35 @@ dependencies = [
 
 [[package]]
 name = "heck"
-version = "0.3.3"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
 
 [[package]]
-name = "heck"
-version = "0.4.0"
+name = "hermit-abi"
+version = "0.1.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
 
 [[package]]
 name = "hermit-abi"
-version = "0.1.19"
+version = "0.2.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
 dependencies = [
  "libc",
 ]
 
 [[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
 name = "hidapi"
 version = "1.4.1"
 source = "git+https://github.com/oxidecomputer/hidapi-rs?branch=oxide-stable#91237483222a42f68d16adcdfd42bc8e32adf666"
@@ -852,6 +1033,36 @@ dependencies = [
 ]
 
 [[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "hubpack"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61a0b84aeae519f65e0ba3aa998327080993426024edbd5cc38dbaf5ec524303"
+dependencies = [
+ "hubpack_derive",
+ "serde",
+]
+
+[[package]]
+name = "hubpack_derive"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f928320aff16ee8818ef7309180f8b5897057fd79d9dcb8de3ed1ba6dcc125a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
 name = "humantime"
 version = "2.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -869,7 +1080,7 @@ dependencies = [
 
 [[package]]
 name = "humility"
-version = "0.8.14"
+version = "0.10.34"
 dependencies = [
  "anyhow",
  "bitfield",
@@ -880,9 +1091,12 @@ dependencies = [
  "env_logger",
  "fallible-iterator",
  "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-cmd-apptable",
  "humility-cmd-auxflash",
+ "humility-cmd-bankerase",
+ "humility-cmd-console-proxy",
  "humility-cmd-dashboard",
  "humility-cmd-debugmailbox",
  "humility-cmd-diagnose",
@@ -896,8 +1110,9 @@ dependencies = [
  "humility-cmd-gpio",
  "humility-cmd-hash",
  "humility-cmd-hiffy",
+ "humility-cmd-host",
  "humility-cmd-i2c",
- "humility-cmd-isp",
+ "humility-cmd-ibc",
  "humility-cmd-itm",
  "humility-cmd-jefe",
  "humility-cmd-lpc55gpio",
@@ -907,16 +1122,20 @@ dependencies = [
  "humility-cmd-net",
  "humility-cmd-openocd",
  "humility-cmd-pmbus",
+ "humility-cmd-power",
+ "humility-cmd-powershelf",
  "humility-cmd-probe",
  "humility-cmd-qspi",
  "humility-cmd-readmem",
  "humility-cmd-readvar",
+ "humility-cmd-rebootleby",
  "humility-cmd-registers",
  "humility-cmd-rencm",
  "humility-cmd-rendmp",
  "humility-cmd-reset",
  "humility-cmd-ringbuf",
  "humility-cmd-rpc",
+ "humility-cmd-sbrmi",
  "humility-cmd-sensors",
  "humility-cmd-spctrl",
  "humility-cmd-spd",
@@ -925,9 +1144,11 @@ dependencies = [
  "humility-cmd-stmsecure",
  "humility-cmd-tasks",
  "humility-cmd-test",
- "humility-cmd-trace",
+ "humility-cmd-tofino-eeprom",
+ "humility-cmd-update",
  "humility-cmd-validate",
  "humility-cmd-vpd",
+ "humility-cmd-writeword",
  "humility-core",
  "humility-cortex",
  "indexmap",
@@ -939,31 +1160,46 @@ dependencies = [
  "num-traits",
  "parse_int",
  "pmbus",
+ "reedline",
  "scroll",
  "serde",
  "spd",
- "toml",
+ "toml 0.5.11",
  "trycmd",
 ]
 
 [[package]]
-name = "humility-cmd"
+name = "humility-arch-arm"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "capstone",
+ "num-derive",
+ "num-traits",
+]
+
+[[package]]
+name = "humility-cli"
 version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
- "colored",
- "hif",
  "humility-core",
- "idol",
  "indexmap",
- "log",
  "parse_int",
- "postcard",
  "serde",
  "serde_json",
- "ssmarshal",
- "zerocopy",
+]
+
+[[package]]
+name = "humility-cmd"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-core",
+ "humility-net-core",
 ]
 
 [[package]]
@@ -972,6 +1208,7 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
 ]
@@ -984,18 +1221,48 @@ dependencies = [
  "clap",
  "colored",
  "hif",
+ "humility-cli",
  "humility-cmd",
- "humility-cmd-hiffy",
  "humility-core",
+ "humility-hiffy",
+ "humility-idol",
  "idol",
  "indicatif",
  "log",
  "parse_int",
- "regex",
  "tlvc",
- "vsc7448-info",
- "vsc7448-types",
- "zip",
+]
+
+[[package]]
+name = "humility-cmd-bankerase"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-cortex",
+ "ihex",
+ "parse_int",
+ "path-slash",
+ "tempfile",
+]
+
+[[package]]
+name = "humility-cmd-console-proxy"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "crossbeam-channel",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "parse_int",
+ "termios",
 ]
 
 [[package]]
@@ -1004,13 +1271,14 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
- "crossterm",
+ "crossterm 0.20.0",
  "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-hiffy",
+ "humility-idol",
  "idol",
- "indexmap",
- "log",
  "parse_int",
  "tui",
 ]
@@ -1022,17 +1290,11 @@ dependencies = [
  "anyhow",
  "byteorder",
  "clap",
+ "humility-cli",
  "humility-cmd",
- "humility-core",
  "humility-cortex",
- "log",
- "num-derive",
- "num-traits",
  "parse_int",
  "probe-rs",
- "strum",
- "strum_macros",
- "zerocopy",
 ]
 
 [[package]]
@@ -1041,8 +1303,11 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-doppel",
+ "humility-jefe",
  "parse_int",
 ]
 
@@ -1053,10 +1318,9 @@ dependencies = [
  "anyhow",
  "cargo_metadata",
  "clap",
+ "humility-cli",
  "humility-cmd",
- "humility-core",
- "lazy_static",
- "termimad",
+ "termimad 0.21.1",
 ]
 
 [[package]]
@@ -1065,9 +1329,23 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "goblin",
+ "hubpack",
+ "humility-arch-arm",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-dump-agent",
+ "humpty",
+ "indexmap",
+ "indicatif",
  "log",
+ "lzss",
+ "num-traits",
+ "parse_int",
+ "probe-rs",
+ "zerocopy",
+ "zip",
 ]
 
 [[package]]
@@ -1076,8 +1354,8 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
- "colored",
  "csv",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
  "humility-cortex",
@@ -1091,8 +1369,9 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
- "humility-core",
+ "humility-log",
  "serde_json",
  "splitty",
 ]
@@ -1103,8 +1382,9 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
- "humility-core",
+ "humility-log",
  "zip",
 ]
 
@@ -1115,18 +1395,16 @@ dependencies = [
  "anyhow",
  "clap",
  "goblin",
+ "humility-cli",
  "humility-cmd",
  "humility-cmd-auxflash",
  "humility-core",
  "humility-cortex",
  "ihex",
- "log",
  "num-traits",
  "parse_int",
  "path-slash",
- "regex",
  "ron 0.7.1",
- "serde",
  "srec",
  "tempfile",
 ]
@@ -1138,9 +1416,9 @@ dependencies = [
  "anyhow",
  "clap",
  "ctrlc",
+ "humility-cli",
  "humility-cmd",
  "humility-cmd-openocd",
- "humility-core",
  "tempfile",
 ]
 
@@ -1151,8 +1429,9 @@ dependencies = [
  "anyhow",
  "clap",
  "hif",
+ "humility-cli",
  "humility-cmd",
- "humility-core",
+ "humility-hiffy",
  "parse_int",
 ]
 
@@ -1163,10 +1442,11 @@ dependencies = [
  "anyhow",
  "clap",
  "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-hiffy",
  "indicatif",
- "log",
  "parse_int",
  "sha2",
 ]
@@ -1178,47 +1458,62 @@ dependencies = [
  "anyhow",
  "atty",
  "clap",
- "colored",
  "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-hiffy",
+ "humility-idol",
  "idol",
  "indexmap",
  "parse_int",
 ]
 
 [[package]]
+name = "humility-cmd-host"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-log",
+ "zerocopy",
+]
+
+[[package]]
 name = "humility-cmd-i2c"
 version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
  "hif",
+ "humility-cli",
  "humility-cmd",
- "humility-core",
+ "humility-hiffy",
+ "humility-i2c",
+ "humility-log",
  "indicatif",
- "log",
  "parse_int",
 ]
 
 [[package]]
-name = "humility-cmd-isp"
+name = "humility-cmd-ibc"
 version = "0.1.0"
 dependencies = [
  "anyhow",
- "byteorder",
  "clap",
- "crc-any",
+ "colored",
+ "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
- "humility-cortex",
- "log",
- "num-derive",
- "num-traits",
+ "humility-hiffy",
+ "humility-idol",
+ "idol",
  "parse_int",
- "serialport",
- "strum",
- "strum_macros",
+ "pmbus",
  "zerocopy",
 ]
 
@@ -1229,10 +1524,10 @@ dependencies = [
  "anyhow",
  "clap",
  "csv",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
  "humility-cortex",
- "log",
  "parse_int",
 ]
 
@@ -1242,9 +1537,10 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
- "log",
+ "humility-jefe",
  "parse_int",
 ]
 
@@ -1255,8 +1551,9 @@ dependencies = [
  "anyhow",
  "clap",
  "hif",
+ "humility-cli",
  "humility-cmd",
- "humility-core",
+ "humility-hiffy",
  "parse_int",
 ]
 
@@ -1266,8 +1563,10 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "serde_json",
 ]
 
 [[package]]
@@ -1276,6 +1575,7 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
 ]
@@ -1288,9 +1588,11 @@ dependencies = [
  "clap",
  "colored",
  "hif",
+ "humility-cli",
  "humility-cmd",
- "humility-cmd-hiffy",
  "humility-core",
+ "humility-hiffy",
+ "humility-idol",
  "idol",
  "log",
  "parse_int",
@@ -1307,9 +1609,11 @@ dependencies = [
  "clap",
  "colored",
  "hif",
+ "humility-cli",
  "humility-cmd",
- "humility-cmd-hiffy",
  "humility-core",
+ "humility-hiffy",
+ "humility-idol",
  "parse_int",
 ]
 
@@ -1320,8 +1624,8 @@ dependencies = [
  "anyhow",
  "clap",
  "ctrlc",
+ "humility-cli",
  "humility-cmd",
- "humility-core",
  "regex",
  "tempfile",
 ]
@@ -1334,8 +1638,49 @@ dependencies = [
  "clap",
  "colored",
  "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-hiffy",
+ "humility-i2c",
+ "humility-idol",
+ "humility-pmbus",
+ "indexmap",
+ "parse_int",
+ "pmbus",
+]
+
+[[package]]
+name = "humility-cmd-power"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "idol",
+ "indexmap",
+ "log",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-powershelf"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "idol",
  "indexmap",
  "log",
  "parse_int",
@@ -1348,10 +1693,11 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-arch-arm",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
  "humility-cortex",
- "log",
  "num-traits",
 ]
 
@@ -1362,8 +1708,11 @@ dependencies = [
  "anyhow",
  "clap",
  "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-hiffy",
+ "humility-idol",
  "indicatif",
  "log",
  "parse_int",
@@ -1376,8 +1725,11 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-log",
+ "parse-size",
  "parse_int",
 ]
 
@@ -1387,19 +1739,43 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
 ]
 
 [[package]]
+name = "humility-cmd-rebootleby"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-arch-arm",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-cortex",
+ "ihex",
+ "log",
+ "parse_int",
+ "path-slash",
+ "probe-rs",
+ "tempfile",
+ "zip",
+]
+
+[[package]]
 name = "humility-cmd-registers"
 version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-arch-arm",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
  "humility-cortex",
+ "humility-stack",
  "num-traits",
 ]
 
@@ -1411,15 +1787,16 @@ dependencies = [
  "clap",
  "csv",
  "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-hiffy",
+ "humility-i2c",
  "idt8a3xxxx",
  "itertools",
- "log",
  "parse_int",
  "serde",
  "serde-xml-rs",
- "serde_derive",
 ]
 
 [[package]]
@@ -1428,27 +1805,37 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "colored",
  "hif",
+ "humility-cli",
  "humility-cmd",
+ "humility-cmd-spd",
  "humility-core",
+ "humility-hiffy",
+ "humility-i2c",
+ "humility-idol",
+ "humility-pmbus",
  "indicatif",
- "log",
  "num-derive",
  "num-traits",
  "parse_int",
  "pmbus",
+ "zerocopy",
 ]
 
 [[package]]
+name = "humility-cmd-repl"
+version = "0.1.0"
+
+[[package]]
 name = "humility-cmd-reset"
 version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
- "log",
- "num-traits",
 ]
 
 [[package]]
@@ -1457,9 +1844,10 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
- "log",
+ "humility-doppel",
 ]
 
 [[package]]
@@ -1470,16 +1858,37 @@ dependencies = [
  "clap",
  "colored",
  "hif",
+ "hubpack",
+ "humility-cli",
  "humility-cmd",
  "humility-cmd-hiffy",
- "humility-cmd-net",
  "humility-core",
+ "humility-doppel",
+ "humility-hiffy",
+ "humility-idol",
  "idol",
  "indexmap",
- "libc",
- "log",
  "parse_int",
- "winapi",
+ "serde",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-cmd-sbrmi"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "colored",
+ "hif",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "parse_int",
+ "raw-cpuid",
+ "termimad 0.21.1",
  "zerocopy",
 ]
 
@@ -1490,11 +1899,13 @@ dependencies = [
  "anyhow",
  "clap",
  "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
- "idol",
+ "humility-hiffy",
+ "humility-idol",
  "indexmap",
- "log",
+ "itertools",
  "parse_int",
 ]
 
@@ -1505,9 +1916,9 @@ dependencies = [
  "anyhow",
  "clap",
  "hif",
+ "humility-cli",
  "humility-cmd",
- "humility-core",
- "log",
+ "humility-hiffy",
  "parse_int",
 ]
 
@@ -1518,10 +1929,13 @@ dependencies = [
  "anyhow",
  "clap",
  "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-hiffy",
+ "humility-i2c",
+ "humility-log",
  "jep106",
- "log",
  "parse_int",
  "spd",
 ]
@@ -1533,9 +1947,10 @@ dependencies = [
  "anyhow",
  "clap",
  "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
- "log",
+ "humility-hiffy",
  "parse_int",
 ]
 
@@ -1545,6 +1960,7 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
 ]
@@ -1555,6 +1971,8 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-arch-arm",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
  "parse_int",
@@ -1566,11 +1984,15 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
- "colored",
+ "humility-arch-arm",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-doppel",
+ "humility-stack",
  "log",
  "num-traits",
+ "parse_int",
 ]
 
 [[package]]
@@ -1579,20 +2001,45 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "colored",
+ "hif",
+ "humility-cli",
  "humility-cmd",
+ "humility-cmd-tasks",
  "humility-core",
  "humility-cortex",
+ "humility-hiffy",
+ "parse_int",
 ]
 
 [[package]]
-name = "humility-cmd-trace"
+name = "humility-cmd-tofino-eeprom"
 version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
- "humility-cortex",
+ "humility-hiffy",
+ "humility-idol",
+ "indicatif",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-cmd-update"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-hiffy",
+ "humility-idol",
+ "humility-log",
+ "indicatif",
+ "parse_int",
 ]
 
 [[package]]
@@ -1603,11 +2050,13 @@ dependencies = [
  "clap",
  "colored",
  "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-hiffy",
+ "humility-i2c",
+ "humility-idol",
  "idol",
- "indexmap",
- "log",
  "parse_int",
 ]
 
@@ -1617,48 +2066,74 @@ version = "0.1.0"
 dependencies = [
  "anyhow",
  "clap",
- "colored",
  "hif",
+ "humility-cli",
  "humility-cmd",
  "humility-core",
+ "humility-hiffy",
+ "humility-idol",
  "idol",
  "indexmap",
  "indicatif",
- "log",
  "parse_int",
+ "ron 0.7.1",
+ "serde",
  "tlvc",
  "tlvc-text",
  "zerocopy",
 ]
 
 [[package]]
+name = "humility-cmd-writeword"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "humility-cli",
+ "humility-cmd",
+ "humility-core",
+ "parse-size",
+ "parse_int",
+]
+
+[[package]]
 name = "humility-core"
 version = "0.1.0"
 dependencies = [
  "anyhow",
  "bitfield",
  "capstone",
- "colored",
+ "clap",
  "fallible-iterator",
  "gimli 0.22.0",
  "goblin",
+ "hubpack",
+ "humility-arch-arm",
+ "humility-log",
  "humility_load_derive",
+ "humpty",
  "idol",
  "indexmap",
  "indicatif",
+ "libc",
  "log",
  "multimap",
  "num-derive",
  "num-traits",
  "parse_int",
  "probe-rs",
+ "rayon",
  "regex",
+ "ron 0.7.1",
  "rusb",
  "rustc-demangle",
  "scroll",
  "serde",
- "ssmarshal",
- "toml",
+ "serde_json",
+ "thiserror",
+ "toml 0.5.11",
+ "winapi",
+ "zerocopy",
  "zip",
 ]
 
@@ -1678,12 +2153,158 @@ dependencies = [
 ]
 
 [[package]]
+name = "humility-doppel"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "humility-core",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-dump-agent"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "hif",
+ "hubpack",
+ "humility-arch-arm",
+ "humility-core",
+ "humility-hiffy",
+ "humility-idol",
+ "humpty",
+ "indexmap",
+ "indicatif",
+ "lzss",
+ "num-traits",
+ "rand",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-hiffy"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "hif",
+ "humility-core",
+ "humility-doppel",
+ "humility-idol",
+ "idol",
+ "parse_int",
+ "postcard",
+ "zerocopy",
+]
+
+[[package]]
+name = "humility-i2c"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "humility-core",
+ "parse_int",
+]
+
+[[package]]
+name = "humility-idol"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "hubpack",
+ "humility-core",
+ "idol",
+ "indexmap",
+ "parse_int",
+ "serde",
+]
+
+[[package]]
+name = "humility-jefe"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "humility-core",
+]
+
+[[package]]
+name = "humility-log"
+version = "0.1.0"
+dependencies = [
+ "colored",
+ "log",
+]
+
+[[package]]
+name = "humility-net-core"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "humility-arch-arm",
+ "humility-core",
+ "humility-dump-agent",
+ "humpty",
+]
+
+[[package]]
+name = "humility-pmbus"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "humility-core",
+]
+
+[[package]]
+name = "humility-stack"
+version = "0.1.0"
+dependencies = [
+ "humility-arch-arm",
+ "humility-core",
+]
+
+[[package]]
 name = "humility_load_derive"
 version = "0.1.0"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "humpty"
+version = "0.1.3"
+source = "git+https://github.com/oxidecomputer/humpty#f6871f6d8844c3d2ee09c467f50b9f186652cb41"
+dependencies = [
+ "hubpack",
+ "lzss",
+ "serde",
+ "serde-big-array",
+ "static_assertions",
+ "zerocopy",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
 ]
 
 [[package]]
@@ -1694,14 +2315,14 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
 
 [[package]]
 name = "idol"
-version = "0.2.0"
-source = "git+https://github.com/oxidecomputer/idolatry.git#994077e3ecff3ec6df15c082fc4f810cf27c97f2"
+version = "0.3.0"
+source = "git+https://github.com/oxidecomputer/idolatry.git#f2396893e786d4bfa75212312908198b8d6a5310"
 dependencies = [
  "indexmap",
  "quote",
- "ron 0.7.1",
+ "ron 0.8.0",
  "serde",
- "toml",
+ "toml 0.7.3",
 ]
 
 [[package]]
@@ -1722,9 +2343,9 @@ checksum = "365a784774bb381e8c19edb91190a90d7f2625e057b55de2bc0f6b57bc779ff2"
 
 [[package]]
 name = "indexmap"
-version = "1.9.1"
+version = "1.9.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
 dependencies = [
  "autocfg",
  "hashbrown",
@@ -1753,25 +2374,42 @@ dependencies = [
 ]
 
 [[package]]
-name = "itertools"
-version = "0.10.3"
+name = "io-lifetimes"
+version = "1.0.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
 dependencies = [
- "either",
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
-name = "itoa"
-version = "0.4.8"
+name = "is-terminal"
+version = "0.4.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
 
 [[package]]
 name = "itoa"
-version = "1.0.2"
+version = "1.0.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
 
 [[package]]
 name = "jaylink"
@@ -1779,7 +2417,7 @@ version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3f58b72b6aa9d25083b8c19d292fe015a936185fa200d15e225e1524a18222e9"
 dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
  "byteorder",
  "log",
  "rusb",
@@ -1787,50 +2425,48 @@ dependencies = [
 
 [[package]]
 name = "jep106"
-version = "0.2.6"
+version = "0.2.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e80f965a2a659a7a4d9cdb9821a869d6e33c10f3e094e8f7d01648063c425953"
+checksum = "ff93b33ae176e47fe588708ff6a4cccae22bd369b81c2d26d2179a8d41c0a0b0"
 dependencies = [
  "serde",
 ]
 
 [[package]]
-name = "lazy_static"
-version = "1.4.0"
+name = "jobserver"
+version = "0.1.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
 
 [[package]]
-name = "libc"
-version = "0.2.126"
+name = "js-sys"
+version = "0.3.61"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
 
 [[package]]
-name = "libm"
-version = "0.2.2"
+name = "lazy_static"
+version = "1.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33a33a362ce288760ec6a508b94caaec573ae7d3bbbd91b87aa0bad4456839db"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
 
 [[package]]
-name = "libudev"
-version = "0.3.0"
+name = "libc"
+version = "0.2.142"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78b324152da65df7bb95acfcaab55e3097ceaab02fb19b228a9eb74d55f135e0"
-dependencies = [
- "libc",
- "libudev-sys",
-]
+checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
 
 [[package]]
-name = "libudev-sys"
-version = "0.1.4"
+name = "libm"
+version = "0.2.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324"
-dependencies = [
- "libc",
- "pkg-config",
-]
+checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
 
 [[package]]
 name = "libusb1-sys"
@@ -1844,16 +2480,31 @@ dependencies = [
 ]
 
 [[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
 name = "linked-hash-map"
-version = "0.5.4"
+version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b085a4f2cde5781fc4b1717f2e86c62f5cda49de7ba99a7c2eae02b61c9064c"
 
 [[package]]
 name = "lock_api"
-version = "0.4.7"
+version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
 dependencies = [
  "autocfg",
  "scopeguard",
@@ -1869,21 +2520,12 @@ dependencies = [
 ]
 
 [[package]]
-name = "mach"
-version = "0.1.2"
+name = "lzss"
+version = "0.8.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fd13ee2dd61cc82833ba05ade5a30bb3d63f7ced605ef827063c63078302de9"
+checksum = "39e2b9a6124e5200c13bb5c5d1124bf93b451bff69b651912810039e36ca97eb"
 dependencies = [
- "libc",
-]
-
-[[package]]
-name = "mach2"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8"
-dependencies = [
- "libc",
+ "void",
 ]
 
 [[package]]
@@ -1894,27 +2536,36 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
 
 [[package]]
 name = "memoffset"
-version = "0.6.5"
+version = "0.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
 dependencies = [
  "autocfg",
 ]
 
 [[package]]
 name = "minimad"
-version = "0.8.0"
+version = "0.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8957f240ecb82a4e699bcf4db189fe8a7f5aa68b9e6d5abf829c62a9ee4630ed"
+checksum = "fed1b13e2000bd8e238d97a97de6fc30224f89a08b0aa5aaa09ed1bd68ba2fa1"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "minimad"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b136454924e4d020e55c4992e07c105b40d5c41b84662862f0e15bc0a2efef"
 dependencies = [
  "once_cell",
 ]
 
 [[package]]
 name = "miniz_oxide"
-version = "0.5.3"
+version = "0.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
 dependencies = [
  "adler",
 ]
@@ -1933,6 +2584,18 @@ dependencies = [
 ]
 
 [[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
 name = "miow"
 version = "0.3.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1951,29 +2614,15 @@ dependencies = [
 ]
 
 [[package]]
-name = "nb"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f"
-dependencies = [
- "nb 1.0.0",
-]
-
-[[package]]
-name = "nb"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "546c37ac5d9e56f55e73b677106873d9d9f5190605e41a856503623648488cae"
-
-[[package]]
 name = "nix"
-version = "0.24.1"
+version = "0.26.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f17df307904acd05aa8e32e97bb20f2a0df1728bbc2d771ae8f9a90463441e9"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
 dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
  "cfg-if",
  "libc",
+ "static_assertions",
 ]
 
 [[package]]
@@ -1992,6 +2641,16 @@ dependencies = [
 ]
 
 [[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
 name = "num-derive"
 version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1999,7 +2658,17 @@ checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
 ]
 
 [[package]]
@@ -2013,11 +2682,11 @@ dependencies = [
 
 [[package]]
 name = "num_cpus"
-version = "1.13.1"
+version = "1.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
 dependencies = [
- "hermit-abi",
+ "hermit-abi 0.2.6",
  "libc",
 ]
 
@@ -2038,34 +2707,46 @@ dependencies = [
 
 [[package]]
 name = "object"
-version = "0.28.4"
+version = "0.30.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
 dependencies = [
  "memchr",
 ]
 
 [[package]]
 name = "once_cell"
-version = "1.12.0"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
 
 [[package]]
 name = "os_pipe"
-version = "1.0.1"
+version = "1.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c92f2b54f081d635c77e7120862d48db8e91f7f21cef23ab1b4fe9971c59f55"
+checksum = "a53dbb20faf34b16087a931834cba2d7a73cc74af2b7ef345a4c8324e2409a12"
 dependencies = [
  "libc",
- "winapi",
+ "windows-sys 0.45.0",
 ]
 
 [[package]]
 name = "os_str_bytes"
-version = "6.1.0"
+version = "6.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa"
+checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
 
 [[package]]
 name = "parking_lot"
@@ -2075,24 +2756,53 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
 dependencies = [
  "instant",
  "lock_api",
- "parking_lot_core",
+ "parking_lot_core 0.8.6",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.7",
 ]
 
 [[package]]
 name = "parking_lot_core"
-version = "0.8.5"
+version = "0.8.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
 dependencies = [
  "cfg-if",
  "instant",
  "libc",
- "redox_syscall",
+ "redox_syscall 0.2.16",
  "smallvec",
  "winapi",
 ]
 
 [[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "parse-size"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "944553dd59c802559559161f9816429058b869003836120e262e8caec061b7ae"
+
+[[package]]
 name = "parse_int"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2102,6 +2812,17 @@ dependencies = [
 ]
 
 [[package]]
+name = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
 name = "paste"
 version = "0.1.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2122,24 +2843,37 @@ dependencies = [
 
 [[package]]
 name = "path-slash"
-version = "0.1.4"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "498a099351efa4becc6a19c72aa9270598e8fd274ca47052e37455241c88b696"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3cacbb3c4ff353b534a67fb8d7524d00229da4cb1dc8c79f4db96e375ab5b619"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest",
+ "hmac",
+ "password-hash",
+ "sha2",
+]
 
 [[package]]
 name = "pest"
-version = "2.1.3"
+version = "2.5.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
+checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122"
 dependencies = [
+ "thiserror",
  "ucd-trie",
 ]
 
 [[package]]
 name = "pkg-config"
-version = "0.3.25"
+version = "0.3.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
 
 [[package]]
 name = "pkg-version"
@@ -2169,14 +2903,14 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
 [[package]]
 name = "pmbus"
 version = "0.1.0"
-source = "git+https://github.com/oxidecomputer/pmbus#5ede5b7d35ece31a5e05fef9de1840f29a1435ba"
+source = "git+https://github.com/oxidecomputer/pmbus#5af447d53a4bc863b7e0700cee23cbf89da39cd5"
 dependencies = [
  "anyhow",
  "convert_case",
  "libm",
  "num-derive",
  "num-traits",
- "ron 0.6.6",
+ "ron 0.8.0",
  "serde",
  "serde_with",
 ]
@@ -2199,9 +2933,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7c68cb38ed13fd7bc9dd5db8f165b7c8d9c1a315104083a2b10f11354c2af97f"
 
 [[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
 name = "probe-rs"
 version = "0.12.0"
-source = "git+https://github.com/oxidecomputer/probe-rs.git?branch=oxide-v0.12.0#6ff8fae61fb1e74c87d2ba160071b1989ca64bba"
+source = "git+https://github.com/oxidecomputer/probe-rs.git?branch=oxide-v0.12.0#078eafb444c4e03fa7d41c7273264d00564210ce"
 dependencies = [
  "anyhow",
  "base64",
@@ -2209,7 +2949,7 @@ dependencies = [
  "bitfield",
  "bitvec",
  "enum-primitive-derive",
- "gimli 0.26.1",
+ "gimli 0.26.2",
  "hidapi",
  "ihex",
  "jaylink",
@@ -2232,7 +2972,7 @@ dependencies = [
 [[package]]
 name = "probe-rs-target"
 version = "0.12.0"
-source = "git+https://github.com/oxidecomputer/probe-rs.git?branch=oxide-v0.12.0#6ff8fae61fb1e74c87d2ba160071b1989ca64bba"
+source = "git+https://github.com/oxidecomputer/probe-rs.git?branch=oxide-v0.12.0#078eafb444c4e03fa7d41c7273264d00564210ce"
 dependencies = [
  "base64",
  "jep106",
@@ -2248,7 +2988,7 @@ dependencies = [
  "proc-macro-error-attr",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.109",
  "version_check",
 ]
 
@@ -2265,51 +3005,92 @@ dependencies = [
 
 [[package]]
 name = "proc-macro-hack"
-version = "0.5.19"
+version = "0.5.20+deprecated"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.40"
+version = "1.0.56"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.20"
+version = "1.0.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
 dependencies = [
  "proc-macro2",
 ]
 
 [[package]]
 name = "radium"
-version = "0.6.2"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "raw-cpuid"
+version = "11.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1782673f85471a9985c2210df529a11853c89567511fab7ebf14e10853cba849"
+dependencies = [
+ "bitflags 2.1.0",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "termimad 0.23.0",
+]
 
 [[package]]
 name = "rayon"
-version = "1.5.3"
+version = "1.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
 dependencies = [
- "autocfg",
- "crossbeam-deque",
  "either",
  "rayon-core",
 ]
 
 [[package]]
 name = "rayon-core"
-version = "1.9.3"
+version = "1.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
 dependencies = [
  "crossbeam-channel",
  "crossbeam-deque",
@@ -2319,65 +3100,58 @@ dependencies = [
 
 [[package]]
 name = "redox_syscall"
-version = "0.2.13"
+version = "0.2.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
 dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
 ]
 
 [[package]]
-name = "regex"
-version = "1.5.6"
+name = "redox_syscall"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
 dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
+ "bitflags 1.3.2",
 ]
 
 [[package]]
-name = "regex-automata"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
-
-[[package]]
-name = "regex-syntax"
-version = "0.6.26"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
-
-[[package]]
-name = "remove_dir_all"
-version = "0.5.3"
+name = "reedline"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+checksum = "5559b5ab4817b0da0c6fc6814edfae537209e01d955a2f3e7595606e3d039691"
 dependencies = [
- "winapi",
+ "chrono",
+ "crossterm 0.24.0",
+ "fd-lock",
+ "itertools",
+ "nu-ansi-term",
+ "serde",
+ "strip-ansi-escapes",
+ "strum",
+ "strum_macros",
+ "thiserror",
+ "unicode-segmentation",
+ "unicode-width",
 ]
 
 [[package]]
-name = "riscv"
-version = "0.7.0"
+name = "regex"
+version = "1.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6907ccdd7a31012b70faf2af85cd9e5ba97657cc3987c4f13f8e4d2c2a088aba"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
 dependencies = [
- "bare-metal 1.0.0",
- "bit_field",
- "riscv-target",
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
 ]
 
 [[package]]
-name = "riscv-target"
-version = "0.1.2"
+name = "regex-syntax"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88aa938cda42a0cf62a20cfe8d139ff1af20c2e681212b5b34adb5a58333f222"
-dependencies = [
- "lazy_static",
- "regex",
-]
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
 
 [[package]]
 name = "ron"
@@ -2386,7 +3160,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "86018df177b1beef6c7c8ef949969c4f7cb9a9344181b92486b23c79995bdaa4"
 dependencies = [
  "base64",
- "bitflags",
+ "bitflags 1.3.2",
  "serde",
 ]
 
@@ -2397,7 +3171,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a"
 dependencies = [
  "base64",
- "bitflags",
+ "bitflags 1.3.2",
  "serde",
 ]
 
@@ -2408,7 +3182,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff"
 dependencies = [
  "base64",
- "bitflags",
+ "bitflags 1.3.2",
  "serde",
 ]
 
@@ -2424,33 +3198,44 @@ dependencies = [
 
 [[package]]
 name = "rustc-demangle"
-version = "0.1.21"
+version = "0.1.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
 
 [[package]]
 name = "rustc_version"
-version = "0.2.3"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
 dependencies = [
- "semver 0.9.0",
+ "semver 1.0.17",
 ]
 
 [[package]]
-name = "rustc_version"
-version = "0.4.0"
+name = "rustix"
+version = "0.37.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+checksum = "f79bef90eb6d984c72722595b5b1348ab39275a5e5123faca6863bf07d75a4e0"
 dependencies = [
- "semver 1.0.10",
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
+[[package]]
 name = "ryu"
-version = "1.0.10"
+version = "1.0.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
 
 [[package]]
 name = "same-file"
@@ -2468,6 +3253,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
 
 [[package]]
+name = "scratch"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
+
+[[package]]
 name = "scroll"
 version = "0.10.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2484,16 +3275,7 @@ checksum = "aaaae8f38bb311444cfb7f1979af0bc9240d95795f75f9ceddf6a59b79ceffa0"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
-]
-
-[[package]]
-name = "semver"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
-dependencies = [
- "semver-parser 0.7.0",
+ "syn 1.0.109",
 ]
 
 [[package]]
@@ -2502,21 +3284,15 @@ version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
 dependencies = [
- "semver-parser 0.10.2",
+ "semver-parser",
  "serde",
 ]
 
 [[package]]
 name = "semver"
-version = "1.0.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a41d061efea015927ac527063765e73601444cdc344ba855bc7bd44578b25e1c"
-
-[[package]]
-name = "semver-parser"
-version = "0.7.0"
+version = "1.0.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
 
 [[package]]
 name = "semver-parser"
@@ -2529,14 +3305,23 @@ dependencies = [
 
 [[package]]
 name = "serde"
-version = "1.0.137"
+version = "1.0.160"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
+checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
+name = "serde-big-array"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f"
+dependencies = [
+ "serde",
+]
+
+[[package]]
 name = "serde-xml-rs"
 version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2550,27 +3335,36 @@ dependencies = [
 
 [[package]]
 name = "serde_derive"
-version = "1.0.137"
+version = "1.0.160"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
+checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.15",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.81"
+version = "1.0.96"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
 dependencies = [
- "itoa 1.0.2",
+ "itoa",
  "ryu",
  "serde",
 ]
 
 [[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
 name = "serde_with"
 version = "1.14.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2589,14 +3383,14 @@ dependencies = [
  "darling",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.109",
 ]
 
 [[package]]
 name = "serde_yaml"
-version = "0.8.24"
+version = "0.8.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "707d15895415db6628332b737c838b88c598522e4dc70647e59b72312924aebc"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
 dependencies = [
  "indexmap",
  "ryu",
@@ -2605,26 +3399,21 @@ dependencies = [
 ]
 
 [[package]]
-name = "serialport"
-version = "4.2.1-alpha.0"
-source = "git+https://github.com/jgallagher/serialport-rs?branch=illumos-support#36c9f0e0292eac32215ab77c5847bf7afb13f000"
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
 dependencies = [
- "CoreFoundation-sys",
- "IOKit-sys",
- "bitflags",
  "cfg-if",
- "libudev",
- "mach2",
- "nix",
- "regex",
- "winapi",
+ "cpufeatures",
+ "digest",
 ]
 
 [[package]]
 name = "sha2"
-version = "0.10.2"
+version = "0.10.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -2639,9 +3428,9 @@ checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
 
 [[package]]
 name = "signal-hook"
-version = "0.3.14"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
+checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
 dependencies = [
  "libc",
  "signal-hook-registry",
@@ -2654,41 +3443,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
 dependencies = [
  "libc",
- "mio",
+ "mio 0.7.14",
+ "mio 0.8.6",
  "signal-hook",
 ]
 
 [[package]]
 name = "signal-hook-registry"
-version = "1.4.0"
+version = "1.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "similar"
-version = "2.1.0"
+version = "2.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e24979f63a11545f5f2c60141afe249d4f19f84581ea2138065e400941d83d3"
+checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf"
 
 [[package]]
 name = "smallvec"
-version = "1.8.0"
+version = "1.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
 
 [[package]]
 name = "snapbox"
-version = "0.2.10"
+version = "0.4.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "767a1d5da232b6959cd1bd5c9e8db8a7cce09c3038e89deedb49a549a2aefd93"
+checksum = "f6bccd62078347f89a914e3004d94582e13824d4e3d8a816317862884c423835"
 dependencies = [
- "concolor",
+ "anstream",
+ "anstyle",
  "content_inspector",
  "dunce",
  "filetime",
+ "libc",
  "normalize-line-endings",
  "os_pipe",
  "similar",
@@ -2696,14 +3488,17 @@ dependencies = [
  "tempfile",
  "wait-timeout",
  "walkdir",
- "yansi",
+ "windows-sys 0.45.0",
 ]
 
 [[package]]
 name = "snapbox-macros"
-version = "0.2.1"
+version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c01dea7e04cbb27ef4c86e9922184608185f7cd95c1763bc30d727cda4a5e930"
+checksum = "eaaf09df9f0eeae82be96290918520214530e738a7fe5a351b0f24cf77c0ca31"
+dependencies = [
+ "anstream",
+]
 
 [[package]]
 name = "spd"
@@ -2716,9 +3511,9 @@ dependencies = [
 
 [[package]]
 name = "spin"
-version = "0.9.3"
+version = "0.9.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c530c2b0d0bf8b69304b39fe2001993e267461948b890cd037d8ad4293fa1a0d"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
 dependencies = [
  "lock_api",
 ]
@@ -2736,16 +3531,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "17c3a0538ec242e3cd333cdcdc8b720faa2fa0a9d7f444cf1ff63e7d3303adfb"
 
 [[package]]
-name = "ssmarshal"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3e6ad23b128192ed337dfa4f1b8099ced0c2bf30d61e551b65fda5916dbb850"
-dependencies = [
- "encode_unicode",
- "serde",
-]
-
-[[package]]
 name = "stable_deref_trait"
 version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2758,6 +3543,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
 
 [[package]]
+name = "strip-ansi-escapes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "011cbb39cf7c1f62871aea3cc46e5817b0937b49e9447370c93cacbe93a766d8"
+dependencies = [
+ "vte",
+]
+
+[[package]]
 name = "strsim"
 version = "0.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2765,33 +3559,40 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
 
 [[package]]
 name = "strum"
-version = "0.22.0"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
 
 [[package]]
 name = "strum_macros"
-version = "0.22.0"
+version = "0.24.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb"
+checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
 dependencies = [
- "heck 0.3.3",
+ "heck",
  "proc-macro2",
  "quote",
- "syn",
+ "rustversion",
+ "syn 1.0.109",
 ]
 
 [[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
 name = "svg"
-version = "0.10.0"
+version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e72d8b19ab05827afefcca66bf47040c1e66a0901eb814784c77d4ec118bd309"
+checksum = "02d815ad337e8449d2374d4248448645edfe74e699343dd5719139d93fa87112"
 
 [[package]]
 name = "syn"
-version = "1.0.98"
+version = "1.0.109"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2799,15 +3600,14 @@ dependencies = [
 ]
 
 [[package]]
-name = "synstructure"
-version = "0.12.6"
+name = "syn"
+version = "2.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
- "unicode-xid",
+ "unicode-ident",
 ]
 
 [[package]]
@@ -2818,74 +3618,87 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
 
 [[package]]
 name = "tempfile"
-version = "3.3.0"
+version = "3.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
 dependencies = [
  "cfg-if",
  "fastrand",
- "libc",
- "redox_syscall",
- "remove_dir_all",
- "winapi",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
 ]
 
 [[package]]
 name = "termcolor"
-version = "1.1.3"
+version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
 dependencies = [
  "winapi-util",
 ]
 
 [[package]]
 name = "termimad"
-version = "0.14.3"
+version = "0.21.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1ea6e542eaec310898d8ba84e5dbda91e95b27e5e023722f0140ca57d72136e"
+checksum = "8743d628f9b0eb33087c1e1c4915d91efca23ae69f7c81981489128a0e17d300"
 dependencies = [
+ "coolor",
  "crossbeam",
- "crossterm",
- "minimad",
+ "crossterm 0.23.2",
+ "minimad 0.10.0",
  "thiserror",
  "unicode-width",
 ]
 
 [[package]]
-name = "terminal_size"
-version = "0.1.17"
+name = "termimad"
+version = "0.23.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+checksum = "749b18b17745261a883ab334d931adffc8c5e07e71c73a861e77124557e7b41f"
+dependencies = [
+ "coolor",
+ "crossbeam",
+ "crossterm 0.23.2",
+ "minimad 0.12.0",
+ "thiserror",
+ "unicode-width",
+]
+
+[[package]]
+name = "termios"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b"
 dependencies = [
  "libc",
- "winapi",
 ]
 
 [[package]]
 name = "textwrap"
-version = "0.15.0"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
 
 [[package]]
 name = "thiserror"
-version = "1.0.31"
+version = "1.0.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.31"
+version = "1.0.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.15",
 ]
 
 [[package]]
@@ -2896,19 +3709,35 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820"
 
 [[package]]
 name = "time"
-version = "0.1.44"
+version = "0.1.45"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
 dependencies = [
  "libc",
- "wasi",
+ "wasi 0.10.0+wasi-snapshot-preview1",
  "winapi",
 ]
 
 [[package]]
-name = "tlvc"
+name = "time"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+dependencies = [
+ "serde",
+ "time-core",
+]
+
+[[package]]
+name = "time-core"
 version = "0.1.0"
-source = "git+https://github.com/oxidecomputer/tlvc#4287f4b7cecb42617342f913dbd8ced40eb79646"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "tlvc"
+version = "0.2.0"
+source = "git+https://github.com/oxidecomputer/tlvc#533f0bf26b0a8f32d287af4f2ea09320bc05c2cd"
 dependencies = [
  "byteorder",
  "crc",
@@ -2918,7 +3747,7 @@ dependencies = [
 [[package]]
 name = "tlvc-text"
 version = "0.1.0"
-source = "git+https://github.com/oxidecomputer/tlvc#2643765eb7775d1f5e8ec56910f1ab15e9c75170"
+source = "git+https://github.com/oxidecomputer/tlvc#533f0bf26b0a8f32d287af4f2ea09320bc05c2cd"
 dependencies = [
  "ron 0.8.0",
  "serde",
@@ -2928,9 +3757,29 @@ dependencies = [
 
 [[package]]
 name = "toml"
-version = "0.5.9"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
 dependencies = [
  "serde",
 ]
@@ -2949,9 +3798,9 @@ dependencies = [
 
 [[package]]
 name = "trycmd"
-version = "0.13.4"
+version = "0.13.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffb4185126cc904642173a54c185083f410c86d1202ada6761aacf7c40829f13"
+checksum = "a5377b33cbe8bb69d97da63e2a2266065a642a47cc9bb3d783c28279d0029fea"
 dependencies = [
  "glob",
  "humantime",
@@ -2969,54 +3818,48 @@ version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "39c8ce4e27049eed97cfa363a5048b09d995e209994634a0efc26a14ab6c0c23"
 dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
  "cassowary",
- "crossterm",
+ "crossterm 0.20.0",
  "unicode-segmentation",
  "unicode-width",
 ]
 
 [[package]]
 name = "typenum"
-version = "1.15.0"
+version = "1.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
 
 [[package]]
 name = "ucd-trie"
-version = "0.1.3"
+version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
+checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.1"
+version = "1.0.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
 
 [[package]]
 name = "unicode-segmentation"
-version = "1.9.0"
+version = "1.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
 
 [[package]]
 name = "unicode-width"
-version = "0.1.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
-
-[[package]]
-name = "unicode-xid"
-version = "0.2.3"
+version = "0.1.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
 
 [[package]]
-name = "vcell"
-version = "0.1.3"
+name = "utf8parse"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
 
 [[package]]
 name = "vcpkg"
@@ -3037,15 +3880,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
 
 [[package]]
-name = "volatile-register"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ee8f19f9d74293faf70901bc20ad067dc1ad390d2cbf1e3f75f721ffee908b6"
-dependencies = [
- "vcell",
-]
-
-[[package]]
 name = "vsc7448-info"
 version = "0.1.0"
 source = "git+https://github.com/oxidecomputer/vsc7448.git#a9e71588498885e9a77282186f2bb576812f1af2"
@@ -3067,6 +3901,27 @@ dependencies = [
 ]
 
 [[package]]
+name = "vte"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983"
+dependencies = [
+ "arrayvec",
+ "utf8parse",
+ "vte_generate_state_changes",
+]
+
+[[package]]
+name = "vte_generate_state_changes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
 name = "wait-timeout"
 version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3077,12 +3932,11 @@ dependencies = [
 
 [[package]]
 name = "walkdir"
-version = "2.3.2"
+version = "2.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
 dependencies = [
  "same-file",
- "winapi",
  "winapi-util",
 ]
 
@@ -3093,6 +3947,66 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
 
 [[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
 name = "winapi"
 version = "0.3.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3124,10 +4038,166 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 
 [[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
 name = "wyz"
-version = "0.4.0"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "129e027ad65ce1453680623c3fb5163cbf7107bfe1aa32257e7d0e63f9ced188"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
 dependencies = [
  "tap",
 ]
@@ -3157,12 +4227,6 @@ dependencies = [
 ]
 
 [[package]]
-name = "yansi"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
-
-[[package]]
 name = "zerocopy"
 version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3174,25 +4238,61 @@ dependencies = [
 
 [[package]]
 name = "zerocopy-derive"
-version = "0.3.1"
+version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0fbc82b82efe24da867ee52e015e58178684bd9dd64c34e66bdf21da2582a9f"
+checksum = "6505e6815af7de1746a08f69c69606bb45695a17149517680f3b2149713b19a3"
 dependencies = [
  "proc-macro2",
- "syn",
- "synstructure",
+ "quote",
+ "syn 1.0.109",
 ]
 
 [[package]]
 name = "zip"
-version = "0.5.13"
+version = "0.6.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815"
+checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef"
 dependencies = [
+ "aes",
  "byteorder",
  "bzip2",
+ "constant_time_eq",
  "crc32fast",
+ "crossbeam-utils",
  "flate2",
- "thiserror",
- "time",
+ "hmac",
+ "pbkdf2",
+ "sha1",
+ "time 0.3.20",
+ "zstd",
+]
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.8+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
 ]
diff --git a/pkgs/development/tools/rust/humility/default.nix b/pkgs/development/tools/rust/humility/default.nix
index 9bb9cdaacbd..399d9dcf41b 100644
--- a/pkgs/development/tools/rust/humility/default.nix
+++ b/pkgs/development/tools/rust/humility/default.nix
@@ -11,7 +11,7 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "humility";
-  version = "unstable-2022-09-15";
+  version = "unstable-2023-11-08";
 
   nativeBuildInputs = [ pkg-config cargo-readme ];
   buildInputs = [ libusb1 libftdi ] ++ lib.optionals stdenv.isDarwin [
@@ -21,8 +21,8 @@ rustPlatform.buildRustPackage rec {
   src = fetchFromGitHub {
     owner = "oxidecomputer";
     repo = pname;
-    rev = "d336c21c7b6da7f8203a9331c7657581de2bc6ad";
-    sha256 = "sha256-yW7QcxTWbL2YsV2bvfhbqQ2nawlPQbYxBfIGCWo28GY=";
+    rev = "67d932edde8b32c11e5d6356a54e97d65f7b9b2b";
+    sha256 = "sha256-3EVNlOAVfx/wUFn83VBKs1N5PanS4jVADUPlhCIok5M=";
   };
 
   cargoLock = {
@@ -31,15 +31,14 @@ rustPlatform.buildRustPackage rec {
       "capstone-0.10.0" = "sha256-x0p005W6u3QsTKRupj9HEg+dZB3xCXlKb9VCKv+LJ0U=";
       "hidapi-1.4.1" = "sha256-2SBQu94ArGGwPU3wJYV0vwwVOXMCCq+jbeBHfKuE+pA=";
       "hif-0.3.1" = "sha256-o3r1akaSARfqIzuP86SJc6/s0b2PIkaZENjYO3DPAUo=";
-      "idol-0.2.0" = "sha256-T4wxeSTH2tFBR8L5wL5a0gLDfcRLpALyGBE0dYNQwLI=";
+      "humpty-0.1.3" = "sha256-efeb+RaAjQs9XU3KkfVo8mVK2dGyv+2xFKSVKS0vyTc=";
+      "idol-0.3.0" = "sha256-s6ZM/EyBE1eOySPah5GtT0/l7RIQKkeUPybMmqUpmt8=";
       "idt8a3xxxx-0.1.0" = "sha256-S36fS9hYTIn57Tt9msRiM7OFfujJEf8ED+9R9p0zgK4=";
       "libusb1-sys-0.5.0" = "sha256-7Bb1lpZvCb+OrKGYiD6NV+lMJuxFbukkRXsufaro5OQ=";
-      "pmbus-0.1.0" = "sha256-KBc7gFwrN1jv1HXygda7qE3ZYNWAO10Wl3X6alc2JOE=";
-      "probe-rs-0.12.0" = "sha256-L2kQNAdSvv5x1goELuy3pZZzmoUDc4tMX3OJ7A5rAD0=";
-      "serialport-4.2.1-alpha.0" = "sha256-a2A2rKll2RTSyvohqRUSQ4Sw6puJdlTZoof5rePxPVE=";
+      "pmbus-0.1.0" = "sha256-20peEHZl6aXcLhw/OWb4RHAXWRNqoMcDXXglwNP+Gpc=";
+      "probe-rs-0.12.0" = "sha256-/L+85K6uxzUmz/TlLLFbMlyekoXC/ClO33EQ/yYjQKU=";
       "spd-0.1.0" = "sha256-X6XUx+huQp77XF5EZDYYqRqaHsdDSbDMK8qcuSGob3E=";
-      "tlvc-0.1.0" = "sha256-SKaVDKFUveZ/iSbKUrVbFIbni7HxCZG4P7fZxkBxY1k=";
-      "tlvc-text-0.1.0" = "sha256-uHPPyc3Ns5L1/EFNCzH8eBEoqLlJoqguZxwNCNxfM6Q=";
+      "tlvc-0.2.0" = "sha256-HiqDRqmKOTxz6UQSXNMOZdWdc5W+cFGuKBkNrqFvIIE=";
       "vsc7448-info-0.1.0" = "sha256-otNLdfGIzuyu03wEb7tzhZVVMdS0of2sU/AKSNSsoho=";
     };
   };
diff --git a/pkgs/development/tools/unityhub/default.nix b/pkgs/development/tools/unityhub/default.nix
index 1f3f0765db2..c8c51055313 100644
--- a/pkgs/development/tools/unityhub/default.nix
+++ b/pkgs/development/tools/unityhub/default.nix
@@ -10,11 +10,11 @@
 
 stdenv.mkDerivation rec {
   pname = "unityhub";
-  version = "3.5.2";
+  version = "3.6.1";
 
   src = fetchurl {
     url = "https://hub-dist.unity3d.com/artifactory/hub-debian-prod-local/pool/main/u/unity/unityhub_amd64/unityhub-amd64-${version}.deb";
-    sha256 = "sha256-MiehcBs+Egfen7MzkzzWxLuTrWrHkqIj1y47sPI3Y74=";
+    sha256 = "sha256-rpH87aFvbYanthwPw/SlluOH/rtj6owcVetBD4+TJeU=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/web/flyctl/default.nix b/pkgs/development/web/flyctl/default.nix
index 4ced81546ca..862b7279f7e 100644
--- a/pkgs/development/web/flyctl/default.nix
+++ b/pkgs/development/web/flyctl/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "flyctl";
-  version = "0.1.117";
+  version = "0.1.127";
 
   src = fetchFromGitHub {
     owner = "superfly";
     repo = "flyctl";
     rev = "v${version}";
-    hash = "sha256-cB1t7TKAqHuzbvrXkOMJPXtNXTqNB/TBDS3OHYX96ko=";
+    hash = "sha256-ho2dbuejQWU7K4j107fV4Lf5r3grsePifaE+HbRdCys=";
   };
 
-  vendorHash = "sha256-+mCOSgRmvfAXHwtLup3vYhLY0zTtXIJeOtYD69B4/7o=";
+  vendorHash = "sha256-qo1P2PSiWco3oKqKOCmCuM6QOz6a9ov2d2MpggBU4N8=";
 
   subPackages = [ "." ];
 
diff --git a/pkgs/games/itch/default.nix b/pkgs/games/itch/default.nix
index a075a789f9d..897d8f3941c 100644
--- a/pkgs/games/itch/default.nix
+++ b/pkgs/games/itch/default.nix
@@ -3,7 +3,7 @@
 , fetchzip
 , fetchFromGitHub
 , butler
-, electron_11
+, electron
 , steam-run
 , makeWrapper
 , copyDesktopItems
@@ -11,12 +11,13 @@
 }:
 stdenvNoCC.mkDerivation rec {
   pname = "itch";
-  version = "25.6.2";
+  version = "26.1.2";
 
+  # TODO: Using kitch instead of itch, revert when possible
   src = fetchzip {
-    url = "https://broth.itch.ovh/${pname}/linux-amd64/${version}/itch.zip";
+    url = "https://broth.itch.ovh/k${pname}/linux-amd64/${version}/archive/default#.zip";
     stripRoot = false;
-    sha256 = "sha256-F/vaYBHCygseiKNMJ+jBy31YDIFqYToAETGUl/pkHII=";
+    sha256 = "sha256-thXe+glpltSiKNGIRgvOZQZPJWfDHWo3dLdziyp2BM4=";
   };
 
   itch-setup = fetchzip {
@@ -29,8 +30,8 @@ stdenvNoCC.mkDerivation rec {
     fetchFromGitHub {
         owner = "itchio";
         repo = pname;
-        rev = "v25.6.1-canary"; # Use ${version} if possible
-        hash = "sha256-iBp7K7AW97SOlRa8N8TW2LcVtmUi9JU00fYUuPwKORc=";
+        rev = "v${version}-canary";
+        sha256 = "sha256-veZiKs9qHge+gCEpJ119bAT56ssXJAH3HBcYkEHqBFg=";
         sparseCheckout = [ sparseCheckout ];
       } + sparseCheckout;
 
@@ -53,6 +54,10 @@ stdenvNoCC.mkDerivation rec {
   installPhase = ''
     runHook preInstall
 
+    # TODO: Remove when the next stable Itch is stabilized
+    substituteInPlace ./resources/app/package.json \
+      --replace "kitch" "itch"
+
     mkdir -p $out/bin $out/share/${pname}/resources/app
     cp -r resources/app "$out/share/${pname}/resources/"
 
@@ -72,7 +77,7 @@ stdenvNoCC.mkDerivation rec {
 
   postFixup = ''
     makeWrapper ${steam-run}/bin/steam-run $out/bin/${pname} \
-      --add-flags ${electron_11}/bin/electron \
+      --add-flags ${electron}/bin/electron \
       --add-flags $out/share/${pname}/resources/app \
       --set BROTH_USE_LOCAL butler,itch-setup \
       --prefix PATH : ${butler}/bin/:${itch-setup}
diff --git a/pkgs/misc/cups/drivers/brother/dcp375cw/default.nix b/pkgs/misc/cups/drivers/brother/dcp375cw/default.nix
new file mode 100644
index 00000000000..c9e92e839a0
--- /dev/null
+++ b/pkgs/misc/cups/drivers/brother/dcp375cw/default.nix
@@ -0,0 +1,97 @@
+{ lib, stdenv, fetchurl, cups, dpkg, gnused, makeWrapper, ghostscript, file
+, a2ps, coreutils, gnugrep, which, gawk }:
+
+let
+  version = "1.1.3";
+  model = "dcp375cw";
+in rec {
+  driver = stdenv.mkDerivation {
+    pname = "${model}-lpr";
+    inherit version;
+
+    src = fetchurl {
+      url =
+        "https://download.brother.com/welcome/dlf005427/dcp375cwlpr-${version}-1.i386.deb";
+      sha256 =
+        "6daf0144b5802ea8da394ca14db0e6f0200d4049545649283791f899b7f7bd26";
+    };
+
+    nativeBuildInputs = [ dpkg makeWrapper ];
+    buildInputs = [ cups ghostscript a2ps gawk ];
+    unpackPhase = "dpkg-deb -x $src $out";
+
+    installPhase = ''
+      substituteInPlace $out/opt/brother/Printers/${model}/lpd/filter${model} \
+      --replace /opt "$out/opt"
+
+      patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      $out/opt/brother/Printers/${model}/lpd/br${model}filter
+
+      mkdir -p $out/lib/cups/filter/
+      ln -s $out/opt/brother/Printers/${model}/lpd/filter${model} $out/lib/cups/filter/brlpdwrapper${model}
+
+      wrapProgram $out/opt/brother/Printers/${model}/lpd/filter${model} \
+        --prefix PATH ":" ${
+          lib.makeBinPath [
+            gawk
+            ghostscript
+            a2ps
+            file
+            gnused
+            gnugrep
+            coreutils
+            which
+          ]
+        }
+    '';
+
+    meta = with lib; {
+      homepage = "http://www.brother.com/";
+      description = "Brother ${model} printer driver";
+      sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+      license = licenses.unfree;
+      platforms = platforms.linux;
+      downloadPage =
+        "https://support.brother.com/g/b/downloadlist.aspx?c=gb&lang=en&prod=${model}_all&os=128";
+      maintainers = with maintainers; [ marcovergueira ];
+    };
+  };
+
+  cupswrapper = stdenv.mkDerivation {
+    pname = "${model}-cupswrapper";
+    inherit version;
+
+    src = fetchurl {
+      url =
+        "https://download.brother.com/welcome/dlf005429/dcp375cwcupswrapper-${version}-1.i386.deb";
+      sha256 =
+        "9a255728b595d2667b2caf9d0d332b677e1a6829a3ec1ed6d4e900a44069cf2d";
+    };
+
+    nativeBuildInputs = [ dpkg makeWrapper ];
+    buildInputs = [ cups ghostscript a2ps gawk ];
+    unpackPhase = "dpkg-deb -x $src $out";
+
+    installPhase = ''
+      for f in $out/opt/brother/Printers/${model}/cupswrapper/cupswrapper${model}; do
+        wrapProgram $f --prefix PATH : ${
+          lib.makeBinPath [ coreutils ghostscript gnugrep gnused ]
+        }
+      done
+
+      mkdir -p $out/share/cups/model
+      ln -s $out/opt/brother/Printers/${model}/cupswrapper/brother_${model}_printer_en.ppd $out/share/cups/model/
+    '';
+
+    meta = with lib; {
+      homepage = "http://www.brother.com/";
+      description = "Brother ${model} printer CUPS wrapper driver";
+      sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+      license = licenses.unfree;
+      platforms = platforms.linux;
+      downloadPage =
+        "https://support.brother.com/g/b/downloadlist.aspx?c=gb&lang=en&prod=${model}_all&os=128";
+      maintainers = with maintainers; [ marcovergueira ];
+    };
+  };
+}
diff --git a/pkgs/misc/cups/drivers/brother/mfc465cncupswrapper/default.nix b/pkgs/misc/cups/drivers/brother/mfc465cncupswrapper/default.nix
new file mode 100644
index 00000000000..c64e48a86ce
--- /dev/null
+++ b/pkgs/misc/cups/drivers/brother/mfc465cncupswrapper/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, stdenv
+, fetchurl
+, dpkg
+, makeWrapper
+, coreutils
+, gnugrep
+, gnused
+, mfc465cnlpr
+, pkgsi686Linux
+, psutils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mfc465cncupswrapper";
+  version = "1.0.1-1";
+
+  src = fetchurl {
+    url = "https://download.brother.com/welcome/dlf006134/${pname}-${version}.i386.deb";
+    sha256 = "59a62ed3cf10f1565c08ace55832bd48bd5034f7067662870edf7ff3bf0cb76a";
+  };
+
+  unpackPhase = ''
+    dpkg-deb -x $src $out
+  '';
+
+  nativeBuildInputs = [
+    dpkg
+    makeWrapper
+  ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    lpr=${mfc465cnlpr}/usr/local/Brother/Printer/mfc465cn
+    dir=$out/usr/local/Brother/Printer/mfc465cn
+    interpreter=${pkgsi686Linux.glibc.out}/lib/ld-linux.so.2
+    patchelf --set-interpreter "$interpreter" "$dir/cupswrapper/brcupsconfpt1"
+    substituteInPlace $dir/cupswrapper/cupswrappermfc465cn \
+      --replace "mkdir -p /usr" ": # mkdir -p /usr" \
+      --replace '/''${printer_model}' "/mfc465cn" \
+      --replace 'br''${printer_model}' "brmfc465cn" \
+      --replace 'brlpdwrapper''${printer_model}' "brlpdwrappermfc465cn" \
+      --replace 'filter''${printer_model}' "filtermfc465cn" \
+      --replace ' ''${printer_name}' " MFC465CN" \
+      --replace ' ''${device_name}' " MFC-465CN" \
+      --replace '(''${device_name}' "(MFC-465CN" \
+      --replace ':''${device_name}' ":MFC-465CN" \
+      --replace '/''${device_name}' "/MFC-465CN" \
+      --replace 'BR''${pcfilename}' "BR465" \
+      --replace '/''${device_model}' "/Printer" \
+      --replace '/usr/lib64/cups/filter/brlpdwrappermfc465cn' "$out/lib/cups/filter/brlpdwrappermfc465cn" \
+      --replace '/usr/local/Brother/Printer/mfc465cn/lpd/filtermfc465cn' "$lpr/lpd/filtermfc465cn" \
+      --replace '/usr/share/ppd/brmfc465cn.ppd' "$dir/cupswrapper/brmfc465.ppd" \
+      --replace '/usr/share/cups/model/brmfc465cn.ppd' "$dir/cupswrapper/brmfc465.ppd" \
+      --replace '/usr/lib/cups/filter/brlpdwrappermfc465cn' "$out/usr/lib/cups/filter/brlpdwrappermfc465cn" \
+      --replace 'nup="psnup' "nup=\"${psutils}/bin/psnup" \
+      --replace '/usr/bin/psnup' "${psutils}/bin/psnup" \
+      --replace '/usr/local/Brother/Printer/mfc465cn/cupswrapper/brcupsconfpt1' "$dir/cupswrapper/brcupsconfpt1" \
+      --replace '/usr/local/Brother/Printer/mfc465cn/inf' "$lpr/inf"
+    # Create the PPD file from the cupswrapper file
+    sed -n '/ENDOFPPDFILE1/,/ENDOFPPDFILE1/p' "$dir/cupswrapper/cupswrappermfc465cn" | head -n -1 | tail -n +2 > $dir/cupswrapper/brmfc465.ppd
+    sed -n '/ENDOFPPDFILE_END/,/ENDOFPPDFILE_END/p' "$dir/cupswrapper/cupswrappermfc465cn" | head -n -1 | tail -n +2 >> $dir/cupswrapper/brmfc465.ppd
+    chmod 644 $dir/cupswrapper/brmfc465.ppd
+    mkdir -p $out/lib/cups/filter
+    mkdir -p $out/share/cups/model
+    ln $dir/cupswrapper/cupswrappermfc465cn $out/lib/cups/filter
+    ln $dir/cupswrapper/brmfc465.ppd $out/share/cups/model
+    sed -n '/!ENDOFWFILTER!/,/!ENDOFWFILTER!/p' "$dir/cupswrapper/cupswrappermfc465cn" | sed '1 br; b; :r s/.*/printer_model=mfc465cn; cat <<!ENDOFWFILTER!/'  | bash > $out/lib/cups/filter/brlpdwrappermfc465cn
+    sed -i "/#! \/bin\/sh/a PATH=${lib.makeBinPath [ coreutils gnused gnugrep ]}:\$PATH" $out/lib/cups/filter/brlpdwrappermfc465cn
+    chmod 755 $out/lib/cups/filter/brlpdwrappermfc465cn
+    '';
+
+  meta = with lib; {
+    description = "Brother MFC-465CN CUPS wrapper driver";
+    homepage = "http://www.brother.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ phrogg ];
+  };
+}
diff --git a/pkgs/misc/cups/drivers/brother/mfc465cnlpr/default.nix b/pkgs/misc/cups/drivers/brother/mfc465cnlpr/default.nix
new file mode 100644
index 00000000000..dc0be00a693
--- /dev/null
+++ b/pkgs/misc/cups/drivers/brother/mfc465cnlpr/default.nix
@@ -0,0 +1,67 @@
+{ stdenv
+, lib
+, fetchurl
+, dpkg
+, makeWrapper
+, coreutils
+, file
+, gawk
+, ghostscript
+, gnused
+, pkgsi686Linux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mfc465cnlpr";
+  version = "1.0.1-1";
+
+  src = fetchurl {
+    url = "https://download.brother.com/welcome/dlf006132/${pname}-${version}.i386.deb";
+    sha256 = "cfe0289510bf36bee6014286ea78b1ebc6bbb948dbfd3aee02f0664a7743f99b";
+  };
+
+  unpackPhase = ''
+    dpkg-deb -x $src $out
+  '';
+
+  nativeBuildInputs = [
+    dpkg
+    makeWrapper
+  ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    dir=$out/usr/local/Brother/Printer/mfc465cn
+    patchelf --set-interpreter ${pkgsi686Linux.glibc.out}/lib/ld-linux.so.2 $dir/lpd/brmfc465cnfilter
+    wrapProgram $dir/inf/setupPrintcapij \
+      --prefix PATH : ${lib.makeBinPath [
+        coreutils
+      ]}
+    substituteInPlace $dir/lpd/filtermfc465cn \
+      --replace "BR_PRT_PATH=" "BR_PRT_PATH=\"$dir/\" #"
+    wrapProgram $dir/lpd/filtermfc465cn \
+      --prefix PATH : ${lib.makeBinPath [
+        coreutils
+        file
+        ghostscript
+        gnused
+      ]}
+    substituteInPlace $dir/lpd/psconvertij2 \
+      --replace '`which gs`' "${ghostscript}/bin/gs"
+    wrapProgram $dir/lpd/psconvertij2 \
+      --prefix PATH : ${lib.makeBinPath [
+        gnused
+        gawk
+      ]}
+    chmod -R a+w $dir/inf/
+  '';
+
+  meta = with lib; {
+    description = "Brother MFC-465CN LPR printer driver";
+    homepage = "http://www.brother.com/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ phrogg ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/pkgs/os-specific/darwin/apple-source-releases/libiconv/default.nix b/pkgs/os-specific/darwin/apple-source-releases/libiconv/default.nix
index 72ef086f599..6a3bddc211e 100644
--- a/pkgs/os-specific/darwin/apple-source-releases/libiconv/default.nix
+++ b/pkgs/os-specific/darwin/apple-source-releases/libiconv/default.nix
@@ -32,6 +32,7 @@ appleDerivation {
   ];
 
   meta = {
+    mainProgram = "iconv";
     platforms = lib.platforms.darwin;
   };
 }
diff --git a/pkgs/os-specific/linux/uhk-agent/default.nix b/pkgs/os-specific/linux/uhk-agent/default.nix
index fe01cecc8cc..5ee485b09cf 100644
--- a/pkgs/os-specific/linux/uhk-agent/default.nix
+++ b/pkgs/os-specific/linux/uhk-agent/default.nix
@@ -11,12 +11,12 @@
 
 let
   pname = "uhk-agent";
-  version = "3.2.0";
+  version = "3.2.1";
 
   src = fetchurl {
     url = "https://github.com/UltimateHackingKeyboard/agent/releases/download/v${version}/UHK.Agent-${version}-linux-x86_64.AppImage";
     name = "${pname}-${version}.AppImage";
-    sha256 = "sha256-YMm84jKtWz5DeGJhBlmo2hlIy4iarEvWylgAWY/itII=";
+    sha256 = "sha256-qAZ92/iN5E+1KGPs6u9Bb6vLfi0Keog/yOcLtnRD7yc=";
   };
 
   appimageContents = appimageTools.extract {
diff --git a/pkgs/servers/microbin/default.nix b/pkgs/servers/microbin/default.nix
index 3d75a7ff8c7..163b4ba7d80 100644
--- a/pkgs/servers/microbin/default.nix
+++ b/pkgs/servers/microbin/default.nix
@@ -1,11 +1,12 @@
-{ lib
-, rustPlatform
+{ darwin
 , fetchFromGitHub
-, pkg-config
+, fetchpatch
+, lib
 , oniguruma
 , openssl
+, pkg-config
+, rustPlatform
 , stdenv
-, darwin
 }:
 
 rustPlatform.buildRustPackage rec {
@@ -21,6 +22,44 @@ rustPlatform.buildRustPackage rec {
 
   cargoHash = "sha256-7GSgyh2aJ2f8pozoh/0Yxzbk8Wg3JYuqSy/34ywAc2s=";
 
+  patches = [
+    # Prefix some URLs with args.public_path_as_str() by PeterUpfold
+    # https://github.com/szabodanika/microbin/pull/194
+    # MicroBin returns wrong URLs on deployments with non-root URLs.
+    (fetchpatch {
+      name = "0001-fixup-explicit-urls.patch";
+      url = "https://github.com/szabodanika/microbin/compare/b8a0c5490d681550d982ad02d67a1aaa0897f503..df062134cbaf3fd0ebcb67af8453a4c66844cd13.patch";
+      hash = "sha256-h13FBuzu2O4AwdhRHF5EX5LaKyPeWJAcaV6SGTaYzTg=";
+    })
+
+    # Minor fixups by LuK1337
+    # https://github.com/szabodanika/microbin/pull/211
+    # Fixup styling, password protected and private pastas.
+    (fetchpatch {
+      name = "0002-minor-fixups.patch";
+      url = "https://github.com/szabodanika/microbin/compare/b8a0c5490d681550d982ad02d67a1aaa0897f503..3b0c025e9b6dc1ca69269541940bdb53032a048a.patch";
+      hash = "sha256-cZB/jx5d6F+C4xOn49TQ1at/Z4ov26efo9PTtWEdCHw=";
+    })
+
+    # Fix MICROBIN_ETERNAL_PASTA by SouthFox-D
+    # https://github.com/szabodanika/microbin/pull/215
+    # MICROBIN_ETERNAL_PASTA config doesn't work without this.
+    (fetchpatch {
+      name = "0003-fix-microbin-eternal-pasta.patch";
+      url = "https://github.com/szabodanika/microbin/compare/b8a0c5490d681550d982ad02d67a1aaa0897f503..c7c846c64344b8d51500aa9a4b2e9a92de8d09d8.patch";
+      hash = "sha256-gCio73Jt0F7YCFtQxtf6pPBDLNcyOAcfSsiyjLFzEzY=";
+    })
+
+    # Fix raw pastes returning 404 by GizmoTjaz
+    # https://github.com/szabodanika/microbin/pull/218
+    # Existing pastas return code 404 even when they exist.
+    (fetchpatch {
+      name = "0004-fix-raw-pastas-returning-404.patch";
+      url = "https://github.com/szabodanika/microbin/compare/b8a0c5490d681550d982ad02d67a1aaa0897f503..e789901520824d4bf610d28923097affe85ead7d.patch";
+      hash = "sha256-R47ozwu/FD1kCu5nx4Gf1cOFeLVFdS67K8RNDygwoZM=";
+    })
+  ];
+
   nativeBuildInputs = [
     pkg-config
   ];
diff --git a/pkgs/servers/monitoring/uptime-kuma/default.nix b/pkgs/servers/monitoring/uptime-kuma/default.nix
index 917343ffecd..572b83ba9ce 100644
--- a/pkgs/servers/monitoring/uptime-kuma/default.nix
+++ b/pkgs/servers/monitoring/uptime-kuma/default.nix
@@ -2,16 +2,16 @@
 
 buildNpmPackage rec {
   pname = "uptime-kuma";
-  version = "1.23.3";
+  version = "1.23.6";
 
   src = fetchFromGitHub {
     owner = "louislam";
     repo = "uptime-kuma";
     rev = version;
-    hash = "sha256-YffkCFws/61uX6BwYqTeuAq5vqLOC+FeUt6rtQG6xws=";
+    hash = "sha256-E/iyusAZnEnfXQ63LZA+9dgE0MvhFOKmrIXCEZ+LGi8=";
   };
 
-  npmDepsHash = "sha256-USyLvC6ior1YhiZz6YySaG7xiYziHB01SHC9BPwuvJo=";
+  npmDepsHash = "sha256-AeN6+0DKd+Q2g3I960PeL3IBla5S7X0od9J244HiwLU=";
 
   patches = [
     # Fixes the permissions of the database being not set correctly
diff --git a/pkgs/servers/web-apps/wordpress/packages/plugins.json b/pkgs/servers/web-apps/wordpress/packages/plugins.json
index 5514822edb9..346c459530a 100644
--- a/pkgs/servers/web-apps/wordpress/packages/plugins.json
+++ b/pkgs/servers/web-apps/wordpress/packages/plugins.json
@@ -102,16 +102,16 @@
     "version": "2.06"
   },
   "mailpoet": {
-    "path": "mailpoet/tags/4.35.1",
-    "rev": "2990976",
-    "sha256": "0pf7r8q939420bzwd0mlv5zbnlkg824hg40vf3w082ryclzyiap5",
-    "version": "4.35.1"
+    "path": "mailpoet/tags/4.36.0",
+    "rev": "2995974",
+    "sha256": "1782z2b1bwg7mx9qzvyzpiymmkqiafd5ymb31q11i7ks19gxlmbw",
+    "version": "4.36.0"
   },
   "merge-minify-refresh": {
     "path": "merge-minify-refresh/trunk",
-    "rev": "2980433",
-    "sha256": "0vx71g1dihlmxrrgmc8fa3glxxndgxcrysidbc23hz33xd18wcbh",
-    "version": "1.15.1"
+    "rev": "2997367",
+    "sha256": "158i9pqn4qqa5mzn57pg4m9gsln35c0gfb8v7sg1y02hp9876shg",
+    "version": "2.2"
   },
   "opengraph": {
     "path": "opengraph/tags/1.11.2",
@@ -131,6 +131,12 @@
     "sha256": "1mrwgqp1ril54xqr8k2gwgjcsbf4xv3671v15xawapwz730h2c4r",
     "version": "0.10.0"
   },
+  "tc-custom-javascript": {
+    "path": "tc-custom-javascript/tags/1.2.3",
+    "rev": "2870386",
+    "sha256": "0lcprrnf25p6a12mf5hkfnl6r470n35pgfdl9nizjh4q43qzdcam",
+    "version": "1.2.3"
+  },
   "webp-converter-for-media": {
     "path": "webp-converter-for-media/tags/5.11.4",
     "rev": "2995294",
diff --git a/pkgs/servers/web-apps/wordpress/packages/wordpress-plugins.json b/pkgs/servers/web-apps/wordpress/packages/wordpress-plugins.json
index da458b8ede9..ebcf43c24b0 100644
--- a/pkgs/servers/web-apps/wordpress/packages/wordpress-plugins.json
+++ b/pkgs/servers/web-apps/wordpress/packages/wordpress-plugins.json
@@ -21,6 +21,7 @@
 , "opengraph"
 , "simple-login-captcha"
 , "static-mail-sender-configurator"
+, "tc-custom-javascript"
 , "webp-converter-for-media"
 , "webp-express"
 , "wordpress-seo"
diff --git a/pkgs/shells/zsh/zsh-prezto/default.nix b/pkgs/shells/zsh/zsh-prezto/default.nix
index 7c7ba87d848..1565fb8b16f 100644
--- a/pkgs/shells/zsh/zsh-prezto/default.nix
+++ b/pkgs/shells/zsh/zsh-prezto/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "zsh-prezto";
-  version = "unstable-2023-09-12";
+  version = "unstable-2023-11-08";
 
   src = fetchFromGitHub {
     owner = "sorin-ionescu";
     repo = "prezto";
-    rev = "5ac930d96be3a51730f7d9d7330f28d9c9c36e0a";
-    sha256 = "tyroeGADhBRCQ9/WqNSqMV7kvFUPdC2fcs/B5G5qYhI=";
+    rev = "f04191aa8ae475cf71f491830d424226d84501c9";
+    sha256 = "7cdtDKNyTSUn3Fo6BO3f0SMBgOQs4/5SnHXB7JtAdkA=";
     fetchSubmodules = true;
   };
 
diff --git a/pkgs/test/cross/default.nix b/pkgs/test/cross/default.nix
index 71d7d5f75ef..b4da2de5c5b 100644
--- a/pkgs/test/cross/default.nix
+++ b/pkgs/test/cross/default.nix
@@ -156,6 +156,9 @@ let
     # Two web browsers -- exercises almost the entire packageset
     pkgs.pkgsCross.aarch64-multiplatform.qt5.qutebrowser
     pkgs.pkgsCross.aarch64-multiplatform.firefox
+
+    # Uses pkgsCross.riscv64-embedded; see https://github.com/NixOS/nixpkgs/issues/267859
+    pkgs.spike
   ];
 
 in {
diff --git a/pkgs/tools/X11/srandrd/default.nix b/pkgs/tools/X11/srandrd/default.nix
index 4c79e11765c..84f43301bbd 100644
--- a/pkgs/tools/X11/srandrd/default.nix
+++ b/pkgs/tools/X11/srandrd/default.nix
@@ -7,13 +7,13 @@
 
 stdenv.mkDerivation rec {
   pname = "srandrd";
-  version = "0.6.0";
+  version = "0.6.3";
 
   src = fetchFromGitHub {
     owner = "jceb";
     repo = pname;
     rev = "v${version}";
-    sha256 = "07r1ck2ijj30n19ylndgw75ly9k3815kj9inpxblfnjpwbbw6ic0";
+    sha256 = "sha256-Wf+tVqDaNAiH6UHN8fFv2wM+LEch6wKlZOkqWEqLLkw=";
   };
 
   buildInputs = [ libX11 libXrandr libXinerama ];
diff --git a/pkgs/tools/admin/copilot-cli/default.nix b/pkgs/tools/admin/copilot-cli/default.nix
index 8257c7a3869..331d83292bf 100644
--- a/pkgs/tools/admin/copilot-cli/default.nix
+++ b/pkgs/tools/admin/copilot-cli/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "copilot-cli";
-  version = "1.31.0";
+  version = "1.32.0";
 
   src = fetchFromGitHub {
     owner = "aws";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-9+K1d35wghK/j4hp7tGRDvj/5s3wiwj/++wovUf6n4Q=";
+    hash = "sha256-w63mNGDUc5YrlBrqsXRyy4SPC35kNKWhiHe6Sfc30tI=";
   };
 
-  vendorHash = "sha256-qV2uZX2In+NYpzlQRuTfRtmWhozYwviVaFxMC+4kf7I=";
+  vendorHash = "sha256-8hZFsYMZQ8RxImEG2t0kfukbRjAJMEDSYF+ryLOZelc=";
 
   nativeBuildInputs = [ installShellFiles ];
 
diff --git a/pkgs/tools/filesystems/bcachefs-tools/default.nix b/pkgs/tools/filesystems/bcachefs-tools/default.nix
index 918f0bd841d..f6e1cb2e0b1 100644
--- a/pkgs/tools/filesystems/bcachefs-tools/default.nix
+++ b/pkgs/tools/filesystems/bcachefs-tools/default.nix
@@ -81,7 +81,13 @@ stdenv.mkDerivation (finalAttrs: {
   passthru = {
     tests = {
       smoke-test = nixosTests.bcachefs;
-      inherit (nixosTests.installer) bcachefsSimple bcachefsEncrypted bcachefsMulti;
+
+      inherit (nixosTests.installer)
+        bcachefsSimple
+        bcachefsEncrypted
+        bcachefsMulti
+        bcachefsLinuxTesting
+        bcachefsUpgradeToLinuxTesting;
     };
 
     updateScript = writeScript "update-bcachefs-tools-and-cargo-lock.sh" ''
diff --git a/pkgs/tools/graphics/lsix/default.nix b/pkgs/tools/graphics/lsix/default.nix
index a9f8aa21bf1..dcf078654b8 100644
--- a/pkgs/tools/graphics/lsix/default.nix
+++ b/pkgs/tools/graphics/lsix/default.nix
@@ -2,13 +2,13 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "lsix";
-  version = "1.8";
+  version = "1.8.2";
 
   src = fetchFromGitHub {
     owner = "hackerb9";
     repo = pname;
     rev = version;
-    sha256 = "sha256-Qx6/PFm1XBmEI6iI+Ref9jNe6sXIhsVL4VQ1CX+caZE=";
+    sha256 = "sha256-xlOlAfZonSo/RERt5WxPqMvppVrY5/Yhh7SgCCsYDQE=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/tools/misc/entr/default.nix b/pkgs/tools/misc/entr/default.nix
index b46b9403708..efee9f7043e 100644
--- a/pkgs/tools/misc/entr/default.nix
+++ b/pkgs/tools/misc/entr/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "entr";
-  version = "5.4";
+  version = "5.5";
 
   src = fetchurl {
     url = "https://eradman.com/entrproject/code/${pname}-${version}.tar.gz";
-    hash = "sha256-SR3e0sw/Hc2NJvSWpMezqZa5HHqyCIPKN1A3o5giH54=";
+    hash = "sha256-EowM4u/qWua9P9M8PNMeFh6wwCYJ2HF6036VtBZW5SY=";
   };
 
   postPatch = ''
diff --git a/pkgs/tools/misc/esphome/default.nix b/pkgs/tools/misc/esphome/default.nix
index 8639358ebca..60c81924805 100644
--- a/pkgs/tools/misc/esphome/default.nix
+++ b/pkgs/tools/misc/esphome/default.nix
@@ -16,14 +16,14 @@ let
 in
 python.pkgs.buildPythonApplication rec {
   pname = "esphome";
-  version = "2023.11.1";
+  version = "2023.11.2";
   format = "setuptools";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-hdSWrKOht1McZxTJtgvy+vqN49bi/P54/D7WDxIRb4w=";
+    hash = "sha256-7VYGrWoElc/urs+jomJrRt0dzdmJhCenRvb9bHCl6H4=";
   };
 
   postPatch = ''
diff --git a/pkgs/tools/misc/fend/default.nix b/pkgs/tools/misc/fend/default.nix
index fe1d957437d..074088f3f19 100644
--- a/pkgs/tools/misc/fend/default.nix
+++ b/pkgs/tools/misc/fend/default.nix
@@ -12,16 +12,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "fend";
-  version = "1.3.1";
+  version = "1.3.2";
 
   src = fetchFromGitHub {
     owner = "printfn";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-iF1E9wBX9UVv/zuCgznXqKLBF+Xk0LqVdJfxFNpmzRI=";
+    sha256 = "sha256-An1biuaqPeRniJZroxoT2o9IEA4XFf5l6ut4nmOsQJI=";
   };
 
-  cargoHash = "sha256-xf4Q6nk2sYuAV+B7dsRF+feiLRKLXDSHnlYmw+o5bNc=";
+  cargoHash = "sha256-gnFu0JsMt1wMfifF6EnjDwwydFnVyqpkHV0cyR5Qt3Y=";
 
   nativeBuildInputs = [ pandoc installShellFiles copyDesktopItems ];
   buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
diff --git a/pkgs/tools/misc/ripdrag/default.nix b/pkgs/tools/misc/ripdrag/default.nix
index 3417382bab9..b2288810d30 100644
--- a/pkgs/tools/misc/ripdrag/default.nix
+++ b/pkgs/tools/misc/ripdrag/default.nix
@@ -2,16 +2,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "ripdrag";
-  version = "0.4.4";
+  version = "0.4.5";
 
   src = fetchFromGitHub {
     owner = "nik012003";
     repo = "ripdrag";
     rev = "v${version}";
-    hash = "sha256-GWNu970nyD4E2mWghOtHnuvVYGhgZ87zNCNxSpxOsgQ=";
+    hash = "sha256-mU2S4DhS2KXO7uIMBhJvaTjLpkFCljyEVoPcq4b2jKc=";
   };
 
-  cargoHash = "sha256-aN+25hhE6LhI8M+enyzsfSTARIxbY36mdeP70rjBJQ8=";
+  cargoHash = "sha256-PWFNLtEXIgZ0RheDS5j9/MMXgzFjgCJKMi/51Z2ta8I=";
 
   nativeBuildInputs = [ pkg-config wrapGAppsHook4 ];
 
diff --git a/pkgs/tools/misc/sharedown/default.nix b/pkgs/tools/misc/sharedown/default.nix
index f6b372d9264..0f93551965e 100644
--- a/pkgs/tools/misc/sharedown/default.nix
+++ b/pkgs/tools/misc/sharedown/default.nix
@@ -114,7 +114,5 @@ stdenvNoCC.mkDerivation rec {
     maintainers = with maintainers; [
     ];
     platforms = platforms.unix;
-    # "Couldn't find any versions for \"node-gyp\" that matches \"latest\" in our cache (possible versions are \"\")
-    broken = true;
   };
 }
diff --git a/pkgs/tools/misc/vtm/default.nix b/pkgs/tools/misc/vtm/default.nix
index 52b561e5790..a0acfcf7f7d 100644
--- a/pkgs/tools/misc/vtm/default.nix
+++ b/pkgs/tools/misc/vtm/default.nix
@@ -6,13 +6,13 @@
 
 stdenv.mkDerivation rec {
   pname = "vtm";
-  version = "0.9.9w.1";
+  version = "0.9.16";
 
   src = fetchFromGitHub {
     owner = "netxs-group";
     repo = "vtm";
     rev = "v${version}";
-    sha256 = "sha256-/EQ8+8ac1MnWuXL9aNYl5U2ZfTpd/iThyvXygorbPmM=";
+    sha256 = "sha256-nX7T3TAGgxAB65X8D2HlI+3T6p7aH3bwG3N1pScX/4g=";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/pkgs/tools/misc/wasm-tools/default.nix b/pkgs/tools/misc/wasm-tools/default.nix
index 6d772a8ba5c..2249ea83d1a 100644
--- a/pkgs/tools/misc/wasm-tools/default.nix
+++ b/pkgs/tools/misc/wasm-tools/default.nix
@@ -5,19 +5,19 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "wasm-tools";
-  version = "1.0.51";
+  version = "1.0.52";
 
   src = fetchFromGitHub {
     owner = "bytecodealliance";
     repo = pname;
     rev = "${pname}-${version}";
-    hash = "sha256-SeUwd9S2WMGbNqj9NzZZKW1tQWc0cbe+uZmHc1PWKR8=";
+    hash = "sha256-6x2H+WY23XxBWmAqD2Lsc4TdCY76XiR/BhSU++XuIFY=";
     fetchSubmodules = true;
   };
 
   # Disable cargo-auditable until https://github.com/rust-secure-code/cargo-auditable/issues/124 is solved.
   auditable = false;
-  cargoHash = "sha256-G7pIy8KuDEEVVhH0WzY93eDhH2oTT9sP5CqTgfxYB0c=";
+  cargoHash = "sha256-1YnoHL+FKXhopcW0Scya22sRBwantRH9gF7w/rxU0H8=";
   cargoBuildFlags = [ "--package" "wasm-tools" ];
   cargoTestFlags = [ "--all" ];
 
diff --git a/pkgs/tools/networking/hp2p/default.nix b/pkgs/tools/networking/hp2p/default.nix
index 52f3455ed4d..9e2b5d63904 100644
--- a/pkgs/tools/networking/hp2p/default.nix
+++ b/pkgs/tools/networking/hp2p/default.nix
@@ -2,20 +2,19 @@
 
 stdenv.mkDerivation rec {
   pname = "hp2p";
-  version = "3.3";
+  version = "unstable-2023-10-25";
 
   src = fetchFromGitHub {
     owner = "cea-hpc";
     repo = "hp2p";
-    rev = version;
-    sha256 = "0zvlwb941rlp3vrf9yzv7njgpj3mh4671ch7qvxfa4hq2ivd52br";
+    rev = "711f6cc5b4e552d969c2436ad77afd35d31bfd05";
+    sha256 = "sha256-mBTJZb3DPmIlL7N+PfjlWmBw0WfFF2DesImVZlbDQKc=";
   };
 
-  patches = [ ./python3.patch ];
   enableParallelBuilding = true;
   nativeBuildInputs = [ autoconf automake python3Packages.wrapPython ];
-  buildInputs = [ mpi ] ++ (with python3Packages; [ python numpy matplotlib plotly mpldatacursor ]) ;
-  pythonPath = (with python3Packages; [ numpy matplotlib plotly mpldatacursor ]) ;
+  buildInputs = [ mpi ] ++ (with python3Packages; [ python plotly ]) ;
+  pythonPath = (with python3Packages; [ plotly ]) ;
 
   preConfigure = ''
     patchShebangs autogen.sh
diff --git a/pkgs/tools/networking/hp2p/python3.patch b/pkgs/tools/networking/hp2p/python3.patch
deleted file mode 100644
index 13043d9f09f..00000000000
--- a/pkgs/tools/networking/hp2p/python3.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-diff -u -r source.orig/src/vizhp2p source/src/vizhp2p
---- source.orig/src/vizhp2p	1970-01-01 01:00:01.000000000 +0100
-+++ source/src/vizhp2p	2021-08-24 10:41:42.926881770 +0200
-@@ -94,25 +94,25 @@
-             with open(hostfile) as fd:
-                 for line in fd:
-                     if line.startswith(motif_rank):
--                        print line
-+                        print(line)
-                         c,v = line[len(motif_rank)+1:-1].split(separator)
-                         nodes[c] = v
-                         
-         # display k worst nodes indices
--        print "\nTop %d bad mean:" % k
-+        print("\nTop %d bad mean:" % k)
-         mean_order = np.argsort(a_mean)
--        print [nodes[str(c)] for c in mean_order[:k]]
-+        print([nodes[str(c)] for c in mean_order[:k]])
-         mean_st = "Top nodes with bad mean:\n"
-         for i in range(0, k, hostname_per_line):
-             mean_st += repr([nodes[str(c)] for c 
-                              in mean_order[i:i + hostname_per_line]]) + "\n"
- 
--        print "Top %d bad std:" % k
--        print [nodes[str(c)] for c in np.argsort(a_std)[-k:][::-1]]
-+        print("Top %d bad std:" % k)
-+        print([nodes[str(c)] for c in np.argsort(a_std)[-k:][::-1]])
- 
--        print "Top %d bad mean/std:" % k
-+        print("Top %d bad mean/std:" % k)
-         pen_order = np.argsort(a_mean / a_std)
--        print [nodes[str(c)] for c in pen_order[:k]]
-+        print([nodes[str(c)] for c in pen_order[:k]])
-         pen_st = "Top nodes with bad mean/std:\n"
-         for i in range(0, k, hostname_per_line):
-             pen_st += repr([nodes[str(c)] for c 
-@@ -293,9 +293,9 @@
- # and 'p' (snapshot) 
- def onrefresh(event):
-     if event.key == 'r':
--        print "refreshing...",
-+        print("refreshing...", end=' ')
-         loop()
--        print "ok"
-+        print("ok")
-     elif event.key == 'q':
-         exit()
-     elif event.key == 'p':
-@@ -303,9 +303,9 @@
-         fig1.savefig(snapfile)
-         snapfile = outputname + "_snapshot_time.png"
-         fig2.savefig(snapfile)
--        print 'snapshot saved (%s)' % snapfile
-+        print('snapshot saved (%s)' % snapfile)
-     else:
--        print "The answer to %s is 42." % event.key
-+        print("The answer to %s is 42." % event.key)
- 
- 
- if __name__ == "__main__":
-@@ -356,11 +356,11 @@
-         countfile = outputname + ".count.bin"
- 
-     print("visu_hp2p configuration:")
--    print("   DATAFILE            : %s"%resfile)
--    print("   BIN_TIMER_FILE      : %s"%resfile_time)
--    print("   HOSTFILE            : %s"%hostfile)
--    print("   Bad nodes to display: %d"%k)
--    print("   GUI resolution      : %s"%resolution)
-+    print(("   DATAFILE            : %s"%resfile))
-+    print(("   BIN_TIMER_FILE      : %s"%resfile_time))
-+    print(("   HOSTFILE            : %s"%hostfile))
-+    print(("   Bad nodes to display: %d"%k))
-+    print(("   GUI resolution      : %s"%resolution))
- 
-     hostname_per_line = 4 # for GUI layout
-     refresh_in_sec = 60
-@@ -377,7 +377,7 @@
-     # wait for resfile
-     while not os.path.exists(resfile) :
-         time.sleep(5)
--        print "Waiting for input files..."
-+        print("Waiting for input files...")
- 
-     # add callback on key press event
-     cid1 = fig1.canvas.mpl_connect('key_press_event', onrefresh)
-Only in source/src: vizhp2p.bak
-diff -u -r source.orig/src/vizhp2p_html source/src/vizhp2p_html
---- source.orig/src/vizhp2p_html	1970-01-01 01:00:01.000000000 +0100
-+++ source/src/vizhp2p_html	2021-08-24 10:41:54.799946303 +0200
-@@ -118,7 +118,7 @@
-     hostfile = args.hostfile
-     clustername = args.clustername
-     if len(args.OutputName) == 0:
--        print "No DATAFILE given! Please provide Hp2p output files name !"
-+        print("No DATAFILE given! Please provide Hp2p output files name !")
-         exit(0)
-     else:
-         outputname = args.OutputName.split('.')[0]
-@@ -134,13 +134,13 @@
-         else:
-             outfile = args.outfile
- 
--    print "%s configuration:"%commandname
--    print "   DATAFILE            : %s"%resfile
--    print "   HOSTFILE            : %s"%hostfile
--    print "   CLUSTER             : %s"%clustername
--    print "   OUTPUTFILE          : %s"%outfile
-+    print("%s configuration:"%commandname)
-+    print("   DATAFILE            : %s"%resfile)
-+    print("   HOSTFILE            : %s"%hostfile)
-+    print("   CLUSTER             : %s"%clustername)
-+    print("   OUTPUTFILE          : %s"%outfile)
-     if not os.path.exists(resfile):
--        print "%s doesn't exist...Exiting"%resfile
-+        print("%s doesn't exist...Exiting"%resfile)
-         exit(0)
- 
- # Data management
-Only in source/src: vizhp2p_html.bak
diff --git a/pkgs/tools/networking/networkmanager/applet/default.nix b/pkgs/tools/networking/networkmanager/applet/default.nix
index a968191b05f..20f5d52ff68 100644
--- a/pkgs/tools/networking/networkmanager/applet/default.nix
+++ b/pkgs/tools/networking/networkmanager/applet/default.nix
@@ -18,7 +18,7 @@
 , gobject-introspection
 , python3
 , gtk3
-, libappindicator-gtk3
+, libayatana-appindicator
 , glib
 }:
 
@@ -50,7 +50,7 @@ stdenv.mkDerivation rec {
     jansson
     glib
     glib-networking
-    libappindicator-gtk3
+    libayatana-appindicator
     gnome.adwaita-icon-theme
   ];
 
diff --git a/pkgs/tools/networking/norouter/default.nix b/pkgs/tools/networking/norouter/default.nix
index c3fdd57a592..e76cc4544e3 100644
--- a/pkgs/tools/networking/norouter/default.nix
+++ b/pkgs/tools/networking/norouter/default.nix
@@ -31,7 +31,5 @@ buildGoModule rec {
     homepage = "https://github.com/norouter/norouter";
     license = licenses.asl20;
     maintainers = with maintainers; [ blaggacao ];
-    # out is empty
-    broken = true;
   };
 }
diff --git a/pkgs/tools/package-management/dpkg/default.nix b/pkgs/tools/package-management/dpkg/default.nix
index 79bf6f8c508..59e25954199 100644
--- a/pkgs/tools/package-management/dpkg/default.nix
+++ b/pkgs/tools/package-management/dpkg/default.nix
@@ -18,12 +18,12 @@
 
 stdenv.mkDerivation rec {
   pname = "dpkg";
-  version = "1.22.0";
+  version = "1.22.1";
 
   src = fetchgit {
     url = "https://git.launchpad.net/ubuntu/+source/dpkg";
     rev = "applied/${version}";
-    hash = "sha256-q+kP0PuQyGKuKahA1/TwtJG380a/sNR433xZhxvGO9M=";
+    hash = "sha256-63XRO3Img+XS2F5Krb5DAw0LMhtxB+eJi754O03Lx8Q=";
   };
 
   configureFlags = [
diff --git a/pkgs/tools/security/cmospwd/default.nix b/pkgs/tools/security/cmospwd/default.nix
index fa04ac65207..96929891805 100644
--- a/pkgs/tools/security/cmospwd/default.nix
+++ b/pkgs/tools/security/cmospwd/default.nix
@@ -12,6 +12,8 @@ stdenv.mkDerivation (finalAttrs: {
     hash = "sha256-8pbSl5eUsKa3JrgK/JLk0FnGXcJhKksJN3wWiDPYYvQ=";
   };
 
+  makeFlags = [ "CC:=$(CC)" ];
+
   preConfigure = ''
     cd src
 
@@ -32,6 +34,6 @@ stdenv.mkDerivation (finalAttrs: {
     homepage = "https://www.cgsecurity.org/wiki/CmosPwd";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ t4ccer ];
-    platforms = platforms.linux;
+    platforms = platforms.x86_64;
   };
 })
diff --git a/pkgs/tools/security/ghidra/0001-Use-protobuf-gradle-plugin.patch b/pkgs/tools/security/ghidra/0001-Use-protobuf-gradle-plugin.patch
index 03ddf76e8ff..7fb7d53e352 100644
--- a/pkgs/tools/security/ghidra/0001-Use-protobuf-gradle-plugin.patch
+++ b/pkgs/tools/security/ghidra/0001-Use-protobuf-gradle-plugin.patch
@@ -1,112 +1,129 @@
 diff --git a/Ghidra/Debug/Debugger-gadp/build.gradle b/Ghidra/Debug/Debugger-gadp/build.gradle
-index f4dbd3cd0..6108e8534 100644
+index 9e1c57faf..3a3242eb5 100644
 --- a/Ghidra/Debug/Debugger-gadp/build.gradle
 +++ b/Ghidra/Debug/Debugger-gadp/build.gradle
-@@ -23,42 +23,18 @@ apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
+@@ -18,11 +18,16 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
  apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
+-apply from: "${rootProject.projectDir}/gradle/debugger/hasProtobuf.gradle"
++apply plugin: 'com.google.protobuf'
  
  apply plugin: 'eclipse'
-+apply plugin: 'com.google.protobuf'
  eclipse.project.name = 'Debug Debugger-gadp'
  
--configurations {
--	allProtocArtifacts
--	protocArtifact
--}
--
- def platform = getCurrentPlatformName()
- 
--dependencies {
--	allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:windows-x86_64@exe'
--	allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:linux-x86_64@exe'
--	allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:linux-aarch_64@exe'
--	allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:osx-x86_64@exe'
--	allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:osx-aarch_64@exe'
--
--	if (isCurrentWindows()) {
--		protocArtifact 'com.google.protobuf:protoc:3.21.8:windows-x86_64@exe'
--	}
--	if (isCurrentLinux()) {
--		if (platform.endsWith("x86_64")) {
--			protocArtifact 'com.google.protobuf:protoc:3.21.8:linux-x86_64@exe'
--		}
--		else {
--			protocArtifact 'com.google.protobuf:protoc:3.21.8:linux-aarch_64@exe'
--		}
--	}
--	if (isCurrentMac()) {
--		if (platform.endsWith("x86_64")) {
--			protocArtifact 'com.google.protobuf:protoc:3.21.8:osx-x86_64@exe'
--		}
--		else {
--			protocArtifact 'com.google.protobuf:protoc:3.21.8:osx-aarch_64@exe'
--		}
 +buildscript {
 +	dependencies {
 +		classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
- 	}
++	}
 +}
- 
-+dependencies {
+ dependencies {
  	api project(':Framework-AsyncComm')
  	api project(':Framework-Debugging')
- 	api project(':ProposedUtils')
-@@ -73,37 +49,3 @@ dependencies {
- 	}
- }*/
- 
--task generateProto {
--	ext.srcdir = file("src/main/proto")
--	ext.src = fileTree(srcdir) {
--		include "**/*.proto"
--	}
--	ext.outdir = file("build/generated/source/proto/main/java")
--	outputs.dir(outdir)
--	inputs.files(src)
--	dependsOn(configurations.protocArtifact)
--	doLast {
--		def exe = configurations.protocArtifact.first()
--		if (!isCurrentWindows()) {
--			exe.setExecutable(true)
--		}
--		exec {
--			commandLine exe, "--java_out=$outdir", "-I$srcdir"
--			args src
--		}
--	}
--}
--
--tasks.compileJava.dependsOn(tasks.generateProto)
--tasks.eclipse.dependsOn(tasks.generateProto)
--rootProject.tasks.prepDev.dependsOn(tasks.generateProto)
--
--sourceSets {
--	main {
--		java {
--			srcDir tasks.generateProto.outdir
--		}
--	}
--}
--zipSourceSubproject.dependsOn generateProto
--
 diff --git a/Ghidra/Debug/Debugger-isf/build.gradle b/Ghidra/Debug/Debugger-isf/build.gradle
-index 6bf945c2e..3225d095d 100644
+index d135294a0..785681ca2 100644
 --- a/Ghidra/Debug/Debugger-isf/build.gradle
 +++ b/Ghidra/Debug/Debugger-isf/build.gradle
-@@ -20,42 +20,18 @@ apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
+@@ -18,11 +18,15 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
  apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
- 
- apply plugin: 'eclipse'
+-apply from: "${rootProject.projectDir}/gradle/debugger/hasProtobuf.gradle"
+-
 +apply plugin: 'com.google.protobuf'
+ apply plugin: 'eclipse'
  eclipse.project.name = 'Debug Debugger-isf'
  
++buildscript {
++	dependencies {
++		classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
++	}
++}
+ dependencies {
+ 	api project(':Framework-AsyncComm')
+ 	api project(':Framework-Debugging')
+diff --git a/Ghidra/Debug/Debugger-rmi-trace/build.gradle b/Ghidra/Debug/Debugger-rmi-trace/build.gradle
+index eec00786e..666cccafc 100644
+--- a/Ghidra/Debug/Debugger-rmi-trace/build.gradle
++++ b/Ghidra/Debug/Debugger-rmi-trace/build.gradle
+@@ -18,12 +18,17 @@ apply from: "${rootProject.projectDir}/gradle/javaProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/jacocoProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
+ apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
+-apply from: "${rootProject.projectDir}/gradle/debugger/hasProtobuf.gradle"
++apply plugin: 'com.google.protobuf'
+ apply from: "${rootProject.projectDir}/gradle/debugger/hasPythonPackage.gradle"
+ 
+ apply plugin: 'eclipse'
+ eclipse.project.name = 'Debug Debugger-rmi-trace'
+ 
++buildscript {
++	dependencies {
++		classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
++	}
++}
+ dependencies {
+ 	api project(':Debugger')
+ }
+@@ -36,7 +41,7 @@ task generateProtoPy {
+ 	ext.outdir = file("build/generated/source/proto/main/py")
+ 	outputs.dir(outdir)
+ 	inputs.files(src)
+-	dependsOn(configurations.protocArtifact)
++	dependsOn(protobuf.generateProtoTasks.all())
+ 	doLast {
+ 		def exe = configurations.protocArtifact.first()
+ 		if (!isCurrentWindows()) {
+diff --git a/build.gradle b/build.gradle
+index b0c717fb1..5f56506a5 100644
+--- a/build.gradle
++++ b/build.gradle
+@@ -74,6 +74,12 @@ if (flatRepo.isDirectory()) {
+ 			jcenter()
+ 			flatDir name: "flat", dirs:["$flatRepo"]
+ 		}
++		buildscript {
++			repositories {
++				mavenLocal()
++				mavenCentral()
++			}
++		}
+ 	}
+ }
+ else {	
+diff --git a/gradle/debugger/hasProtobuf.gradle b/gradle/debugger/hasProtobuf.gradle
+deleted file mode 100644
+index 23b4ce74b..000000000
+--- a/gradle/debugger/hasProtobuf.gradle
++++ /dev/null
+@@ -1,94 +0,0 @@
+-/* ###
+- * IP: GHIDRA
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- * 
+- *      http://www.apache.org/licenses/LICENSE-2.0
+- * 
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-/*plugins {
+-	id 'com.google.protobuf' version '0.8.10'
+-}*/
+-
 -configurations {
 -	allProtocArtifacts
 -	protocArtifact
 -}
 -
- def platform = getCurrentPlatformName()
- 
+-def platform = getCurrentPlatformName()
+-
+-
 -dependencies {
 -	allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:windows-x86_64@exe'
 -	allProtocArtifacts 'com.google.protobuf:protoc:3.21.8:linux-x86_64@exe'
@@ -132,20 +149,15 @@ index 6bf945c2e..3225d095d 100644
 -		else {
 -			protocArtifact 'com.google.protobuf:protoc:3.21.8:osx-aarch_64@exe'
 -		}
-+buildscript {
-+	dependencies {
-+		classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
- 	}
-+}
- 
-+dependencies {
- 	api project(':Framework-AsyncComm')
- 	api project(':Framework-Debugging')
- 	api project(':ProposedUtils')
-@@ -64,40 +40,6 @@ dependencies {
- 	testImplementation project(path: ':Framework-Debugging', configuration: 'testArtifacts')
- }
- 
+-	}
+-}
+-
+-/*protobuf {
+-	protoc {
+-		artifact = 'com.google.protobuf:protoc:3.21.8'
+-	}
+-}*/
+-
 -task generateProto {
 -	ext.srcdir = file("src/main/proto")
 -	ext.src = fileTree(srcdir) {
@@ -179,24 +191,3 @@ index 6bf945c2e..3225d095d 100644
 -	}
 -}
 -zipSourceSubproject.dependsOn generateProto
--
- // Include buildable native source in distribution
- rootProject.assembleDistribution {
-     from (this.project.projectDir.toString()) {
-diff --git a/build.gradle b/build.gradle
-index b0c717fb1..5f56506a5 100644
---- a/build.gradle
-+++ b/build.gradle
-@@ -74,6 +74,12 @@ if (flatRepo.isDirectory()) {
- 			jcenter()
- 			flatDir name: "flat", dirs:["$flatRepo"]
- 		}
-+		buildscript {
-+			repositories {
-+				mavenLocal()
-+				mavenCentral()
-+			}
-+		}
- 	}
- }
- else {	
diff --git a/pkgs/tools/security/ghidra/build.nix b/pkgs/tools/security/ghidra/build.nix
index 16bc1dbe5cd..50fd64656f4 100644
--- a/pkgs/tools/security/ghidra/build.nix
+++ b/pkgs/tools/security/ghidra/build.nix
@@ -10,18 +10,19 @@
 , icoutils
 , xcbuild
 , protobuf
+, fetchurl
 }:
 
 let
   pkg_path = "$out/lib/ghidra";
   pname = "ghidra";
-  version = "10.3.3";
+  version = "10.4";
 
   src = fetchFromGitHub {
     owner = "NationalSecurityAgency";
     repo = "Ghidra";
     rev = "Ghidra_${version}_build";
-    hash = "sha256-KDSiZ/JwAqX6Obg9UD8ZQut01l/eMXbioJy//GluXn0=";
+    hash = "sha256-g0JM6pm1vkCh9yBB5mfrOiNrImqoyWdQcEe2g+AO6LQ=";
   };
 
   gradle = gradle_7;
@@ -36,24 +37,6 @@ let
   };
 
   # postPatch scripts.
-  # Tells ghidra to use our own protoc binary instead of the prebuilt one.
-  fixProtoc = ''
-    cat >>Ghidra/Debug/Debugger-gadp/build.gradle <<HERE
-protobuf {
-  protoc {
-    path = '${protobuf}/bin/protoc'
-  }
-}
-HERE
-    cat >>Ghidra/Debug/Debugger-isf/build.gradle <<HERE
-protobuf {
-  protoc {
-    path = '${protobuf}/bin/protoc'
-  }
-}
-HERE
-  '';
-
   # Adds a gradle step that downloads all the dependencies to the gradle cache.
   addResolveStep = ''
     cat >>build.gradle <<HERE
@@ -85,7 +68,7 @@ HERE
     inherit version src;
 
     patches = [ ./0001-Use-protobuf-gradle-plugin.patch ];
-    postPatch = fixProtoc + addResolveStep;
+    postPatch = addResolveStep;
 
     nativeBuildInputs = [ gradle perl ] ++ lib.optional stdenv.isDarwin xcbuild;
     buildPhase = ''
@@ -116,13 +99,21 @@ in stdenv.mkDerivation {
   inherit pname version src;
 
   nativeBuildInputs = [
-    gradle unzip makeWrapper icoutils
+    gradle unzip makeWrapper icoutils protobuf
   ] ++ lib.optional stdenv.isDarwin xcbuild;
 
   dontStrip = true;
 
-  patches = [ ./0001-Use-protobuf-gradle-plugin.patch ];
-  postPatch = fixProtoc;
+  patches = [
+    ./0001-Use-protobuf-gradle-plugin.patch
+    # we use fetchurl since the fetchpatch normalization strips the whole diff
+    # https://github.com/NixOS/nixpkgs/issues/266556
+    (fetchurl {
+      name = "0002-remove-executable-bit.patch";
+      url = "https://github.com/NationalSecurityAgency/ghidra/commit/e2a945624b74e5d42dc85e9c1f992315dd154db1.diff";
+      sha256 = "07mjfl7hvag2akk65g4cknp330qlk07dgbmh20dyg9qxzmk91fyq";
+    })
+  ];
 
   buildPhase = ''
     export HOME="$NIX_BUILD_TOP/home"
diff --git a/pkgs/tools/security/gitleaks/default.nix b/pkgs/tools/security/gitleaks/default.nix
index 96c4b0f4e15..7fc15a3fb2b 100644
--- a/pkgs/tools/security/gitleaks/default.nix
+++ b/pkgs/tools/security/gitleaks/default.nix
@@ -8,16 +8,16 @@
 
 buildGoModule rec {
   pname = "gitleaks";
-  version = "8.18.0";
+  version = "8.18.1";
 
   src = fetchFromGitHub {
     owner = "zricethezav";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-659wQBv8DuYB4vI+qnBLS9u22kGlg4ne4DyKFoomlOw=";
+    hash = "sha256-v0d/ulxYJRkyyhVctnQjKW2ODWtu+gSwp/qSkVLQ1Jo=";
   };
 
-  vendorHash = "sha256-PPEEQ2Bt20UK+mQL59jVnX8HtzCsqW4uRwR3mOdhDis=";
+  vendorHash = "sha256-lPfvoeHPYWSnFPuAR9CxG6+pQ++cZEw/jYuGgDrm57E=";
 
   ldflags = [
     "-s"
diff --git a/pkgs/tools/security/metasploit/Gemfile b/pkgs/tools/security/metasploit/Gemfile
index 4d7b793a84b..539e6b8bc8d 100644
--- a/pkgs/tools/security/metasploit/Gemfile
+++ b/pkgs/tools/security/metasploit/Gemfile
@@ -1,4 +1,4 @@
 # frozen_string_literal: true
 source "https://rubygems.org"
 
-gem "metasploit-framework", git: "https://github.com/rapid7/metasploit-framework", ref: "refs/tags/6.3.42"
+gem "metasploit-framework", git: "https://github.com/rapid7/metasploit-framework", ref: "refs/tags/6.3.43"
diff --git a/pkgs/tools/security/metasploit/Gemfile.lock b/pkgs/tools/security/metasploit/Gemfile.lock
index 58929753c59..adc032baf21 100644
--- a/pkgs/tools/security/metasploit/Gemfile.lock
+++ b/pkgs/tools/security/metasploit/Gemfile.lock
@@ -1,9 +1,9 @@
 GIT
   remote: https://github.com/rapid7/metasploit-framework
-  revision: adf413fba45b298c4e16f7f1043dc69f99d2fbdb
-  ref: refs/tags/6.3.42
+  revision: 58dcabe21524d8b2c4d05618ca8509dc42cc6515
+  ref: refs/tags/6.3.43
   specs:
-    metasploit-framework (6.3.42)
+    metasploit-framework (6.3.43)
       actionpack (~> 7.0.0)
       activerecord (~> 7.0.0)
       activesupport (~> 7.0.0)
diff --git a/pkgs/tools/security/metasploit/default.nix b/pkgs/tools/security/metasploit/default.nix
index 44b672cd6e4..6f88b96cd6a 100644
--- a/pkgs/tools/security/metasploit/default.nix
+++ b/pkgs/tools/security/metasploit/default.nix
@@ -15,13 +15,13 @@ let
   };
 in stdenv.mkDerivation rec {
   pname = "metasploit-framework";
-  version = "6.3.42";
+  version = "6.3.43";
 
   src = fetchFromGitHub {
     owner = "rapid7";
     repo = "metasploit-framework";
     rev = version;
-    sha256 = "sha256-6ddW6VlbWV71BERJISF67UPRcwLQY8Hpw4kf80lCNBE=";
+    sha256 = "sha256-IWdSxXhJFGbNTo9xqEjBJNEWB6imzdwzgnXoUbfao/g=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/tools/security/metasploit/gemset.nix b/pkgs/tools/security/metasploit/gemset.nix
index 8ba7f0e698a..cf24944c403 100644
--- a/pkgs/tools/security/metasploit/gemset.nix
+++ b/pkgs/tools/security/metasploit/gemset.nix
@@ -654,12 +654,12 @@
     platforms = [];
     source = {
       fetchSubmodules = false;
-      rev = "adf413fba45b298c4e16f7f1043dc69f99d2fbdb";
-      sha256 = "049l894z67w9qglw2qyh09rx2hzdg8hj2ja40ksmwnavb7lmdmz9";
+      rev = "58dcabe21524d8b2c4d05618ca8509dc42cc6515";
+      sha256 = "1y53vavm3s3mh8rxrkd6m03idl94q54ahwcg9v6nc529g32m4rr1";
       type = "git";
       url = "https://github.com/rapid7/metasploit-framework";
     };
-    version = "6.3.42";
+    version = "6.3.43";
   };
   metasploit-model = {
     groups = ["default"];
diff --git a/pkgs/tools/system/automatic-timezoned/default.nix b/pkgs/tools/system/automatic-timezoned/default.nix
index 709558fad50..7233a41142e 100644
--- a/pkgs/tools/system/automatic-timezoned/default.nix
+++ b/pkgs/tools/system/automatic-timezoned/default.nix
@@ -5,16 +5,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "automatic-timezoned";
-  version = "1.0.130";
+  version = "1.0.131";
 
   src = fetchFromGitHub {
     owner = "maxbrunet";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-uQg3segJamYrM8RRP5BEE7O1Jepr20ucdNUVwNllQlw=";
+    sha256 = "sha256-92OpvUt+0iN+UdEGjDdVCjUUlbuOjUgOjc+DGMUnx9U=";
   };
 
-  cargoHash = "sha256-8DEvGRerIV9PB4uPAzFwymb67gcg9wdO8rruENR2M6Q=";
+  cargoHash = "sha256-FaQwxt3XcDOXlzcKEdMyE9TpmGykQOnJdxtM3EqMpfU=";
 
   meta = with lib; {
     description = "Automatically update system timezone based on location";
diff --git a/pkgs/tools/system/nsc/default.nix b/pkgs/tools/system/nsc/default.nix
index c3d0394c658..bec4a311410 100644
--- a/pkgs/tools/system/nsc/default.nix
+++ b/pkgs/tools/system/nsc/default.nix
@@ -7,13 +7,13 @@
 
 buildGoModule rec {
   pname = "nsc";
-  version = "2.8.1";
+  version = "2.8.5";
 
   src = fetchFromGitHub {
     owner = "nats-io";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-kNfA/MQuXauQPWQhUspreqo4oOKb+qBqh9NdmQM1Q+A=";
+    hash = "sha256-9qsHZTbK2RCDiQ5wlo2D79GeI5dbCvL2LofPnF7f8Cc=";
   };
 
   ldflags = [
@@ -23,7 +23,7 @@ buildGoModule rec {
     "-X main.builtBy=nixpkgs"
   ];
 
-  vendorHash = "sha256-8cTegiNVtGSZdf9O+KVoOgnjjMIv8w7YBSkFhk7gHfk=";
+  vendorHash = "sha256-B3uIFJaEsj9tpjPBiU+rXVlfcgVwZUQe3VSSoZQqBG8=";
 
   nativeBuildInputs = [ installShellFiles ];
 
@@ -44,7 +44,7 @@ buildGoModule rec {
   # the test strips table formatting from the command output in a naive way
   # that removes all the table characters, including '-'.
   # The nix build directory looks something like:
-  # /private/tmp/nix-build-nsc-2.8.1.drv-0/nsc_test2000598938/keys
+  # /private/tmp/nix-build-nsc-2.8.5.drv-0/nsc_test2000598938/keys
   # Then the `-` are removed from the path unintentionally and the test fails.
   # This should be fixed upstream to avoid mangling the path when
   # removing the table decorations from the command output.
diff --git a/pkgs/tools/system/zram-generator/Cargo.lock b/pkgs/tools/system/zram-generator/Cargo.lock
index d061c364b27..29c643c10bd 100644
--- a/pkgs/tools/system/zram-generator/Cargo.lock
+++ b/pkgs/tools/system/zram-generator/Cargo.lock
@@ -79,9 +79,9 @@ dependencies = [
 
 [[package]]
 name = "errno"
-version = "0.3.5"
+version = "0.3.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+checksum = "f258a7194e7f7c2a7837a8913aeab7fd8c383457034fa20ce4dd3dcb813e8eb8"
 dependencies = [
  "libc",
  "windows-sys",
@@ -107,9 +107,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
 
 [[package]]
 name = "getrandom"
-version = "0.2.10"
+version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
 dependencies = [
  "cfg-if",
  "libc",
@@ -127,9 +127,9 @@ dependencies = [
 
 [[package]]
 name = "libc"
-version = "0.2.149"
+version = "0.2.150"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
 
 [[package]]
 name = "liboverdrop"
@@ -142,9 +142,9 @@ dependencies = [
 
 [[package]]
 name = "linux-raw-sys"
-version = "0.4.10"
+version = "0.4.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
 
 [[package]]
 name = "log"
@@ -240,9 +240,9 @@ dependencies = [
 
 [[package]]
 name = "redox_syscall"
-version = "0.3.5"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
 dependencies = [
  "bitflags 1.3.2",
 ]
@@ -259,9 +259,9 @@ dependencies = [
 
 [[package]]
 name = "rustix"
-version = "0.38.20"
+version = "0.38.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67ce50cb2e16c2903e30d1cbccfd8387a74b9d4c938b6a4c5ec6cc7556f7a8a0"
+checksum = "9ad981d6c340a49cdc40a1028d9c6084ec7e9fa33fcb839cab656a267071e234"
 dependencies = [
  "bitflags 2.4.1",
  "errno",
@@ -283,9 +283,9 @@ dependencies = [
 
 [[package]]
 name = "tempfile"
-version = "3.8.0"
+version = "3.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
 dependencies = [
  "cfg-if",
  "fastrand",
diff --git a/pkgs/tools/text/vale/default.nix b/pkgs/tools/text/vale/default.nix
index d4ed3ba55a9..7ae0de13ed9 100644
--- a/pkgs/tools/text/vale/default.nix
+++ b/pkgs/tools/text/vale/default.nix
@@ -2,7 +2,7 @@
 
 buildGoModule rec {
   pname = "vale";
-  version = "2.29.6";
+  version = "2.29.7";
 
   subPackages = [ "cmd/vale" ];
   outputs = [ "out" "data" ];
@@ -11,10 +11,10 @@ buildGoModule rec {
     owner = "errata-ai";
     repo = "vale";
     rev = "v${version}";
-    hash = "sha256-0btFCTpVB50097yQEggpm1rmm4aciTgfdLAkczQ1mj4=";
+    hash = "sha256-5fOEZG+ucp9EpizNHvKzqksnDzV8x0miGSKnTelxmzs=";
   };
 
-  vendorHash = "sha256-EbhLz4agDWAlALfBcGUbVNz+teUvgroxzaSN8T19AJY=";
+  vendorHash = "sha256-FnzuumOIvjpoDr+yBaRc8UjMDNW8mgrJiz1ZyzNW0Ts=";
 
   postInstall = ''
     mkdir -p $data/share/vale
diff --git a/pkgs/tools/virtualization/govc/default.nix b/pkgs/tools/virtualization/govc/default.nix
index aa8e7664e08..a2c37dfb679 100644
--- a/pkgs/tools/virtualization/govc/default.nix
+++ b/pkgs/tools/virtualization/govc/default.nix
@@ -2,7 +2,7 @@
 
 buildGoModule rec {
   pname = "govc";
-  version = "0.33.0";
+  version = "0.33.1";
 
   subPackages = [ "govc" ];
 
@@ -10,7 +10,7 @@ buildGoModule rec {
     rev = "v${version}";
     owner = "vmware";
     repo = "govmomi";
-    sha256 = "sha256-YY/rTrL6zEhZkeaYz2yG/h2s81IefClou4abbmQuDiU=";
+    sha256 = "sha256-5zFyOWfVxQL/QveOlX4Xkg8FBwo8mZzR7ea2IacSrS4=";
   };
 
   vendorHash = "sha256-DBcovHOOfIy4dfi8U9zaCUzz5Zz8oIG44JCqMKtdxgg=";
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index c5fbc24f93d..10dade171a1 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -22732,6 +22732,8 @@ with pkgs;
 
   libfprint-2-tod1-vfs0090 = callPackage ../development/libraries/libfprint-2-tod1-vfs0090 { };
 
+  libfprint-2-tod1-elan = callPackage ../development/libraries/libfprint-2-tod1-elan { };
+
   libfpx = callPackage ../development/libraries/libfpx { };
 
   libgadu = callPackage ../development/libraries/libgadu { };
@@ -28106,6 +28108,7 @@ with pkgs;
   linuxPackages_testing = linuxKernel.packages.linux_testing;
   linux_testing = linuxKernel.kernels.linux_testing;
 
+  # FIXME: Remove and alias to `linux(Packages)_testing`` after 23.11 is released
   linuxPackages_testing_bcachefs = linuxKernel.packages.linux_testing_bcachefs;
   linux_testing_bcachefs = linuxKernel.kernels.linux_testing_bcachefs;
 
@@ -33925,7 +33928,11 @@ with pkgs;
 
   normalize = callPackage ../applications/audio/normalize { };
 
-  norouter = callPackage ../tools/networking/norouter { };
+  norouter = callPackage ../tools/networking/norouter {
+    # doesn't build with go 1.21
+    # https://github.com/norouter/norouter/issues/165
+    buildGoModule = buildGo120Module;
+  };
 
   nqptp = callPackage ../tools/networking/nqptp { };
 
@@ -34065,8 +34072,6 @@ with pkgs;
 
   nwg-dock-hyprland = callPackage ../applications/misc/nwg-dock-hyprland { };
 
-  nwg-drawer = callPackage ../applications/misc/nwg-drawer { };
-
   nwg-launchers = callPackage ../applications/misc/nwg-launchers { };
 
   nwg-look = callPackage ../applications/misc/nwg-look { };
@@ -40211,6 +40216,10 @@ with pkgs;
 
   cups-bjnp = callPackage ../misc/cups/drivers/cups-bjnp { };
 
+  dcp375cwlpr = (pkgsi686Linux.callPackage ../misc/cups/drivers/brother/dcp375cw { }).driver;
+
+  dcp375cw-cupswrapper = (callPackage ../misc/cups/drivers/brother/dcp375cw { }).cupswrapper;
+
   dcp9020cdwlpr = (pkgsi686Linux.callPackage ../misc/cups/drivers/brother/dcp9020cdw { }).driver;
 
   dcp9020cdw-cupswrapper = (callPackage ../misc/cups/drivers/brother/dcp9020cdw { }).cupswrapper;
@@ -41025,6 +41034,9 @@ with pkgs;
 
   hll2390dw-cups = callPackage ../misc/cups/drivers/hll2390dw-cups { };
 
+  mfc465cncupswrapper = callPackage ../misc/cups/drivers/brother/mfc465cncupswrapper { };
+  mfc465cnlpr = callPackage ../misc/cups/drivers/brother/mfc465cnlpr { };
+
   mfcj470dw-cupswrapper = callPackage ../misc/cups/drivers/mfcj470dwcupswrapper { };
   mfcj470dwlpr = pkgsi686Linux.callPackage ../misc/cups/drivers/mfcj470dwlpr { };
 
diff --git a/pkgs/top-level/linux-kernels.nix b/pkgs/top-level/linux-kernels.nix
index 2cd4319e665..12ad5a678f2 100644
--- a/pkgs/top-level/linux-kernels.nix
+++ b/pkgs/top-level/linux-kernels.nix
@@ -201,6 +201,7 @@ in {
        then latest
        else testing;
 
+    # FIXME: Remove after 23.11 is released
     linux_testing_bcachefs = callPackage ../os-specific/linux/kernel/linux-testing-bcachefs.nix {
       # Pinned on the last version which Kent's commits can be cleany rebased up.
       kernel = linux_6_5;
@@ -612,6 +613,7 @@ in {
 
     # Intentionally lacks recurseIntoAttrs, as -rc kernels will quite likely break out-of-tree modules and cause failed Hydra builds.
     linux_testing = packagesFor kernels.linux_testing;
+    # FIXME: Remove after 23.11 is released
     linux_testing_bcachefs = recurseIntoAttrs (packagesFor kernels.linux_testing_bcachefs);
 
     linux_hardened = recurseIntoAttrs (packagesFor kernels.linux_hardened);
diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix
index 47484eaf80f..eafccffef9c 100644
--- a/pkgs/top-level/perl-packages.nix
+++ b/pkgs/top-level/perl-packages.nix
@@ -772,7 +772,7 @@ with self; {
     };
     propagatedBuildInputs = [ ExceptionClass Tk X11ProtocolOther XMLSimple ];
     buildInputs = [ DataDump FileWhich Readonly TestDifferences TestTrap ];
-    preCheck = "rm t/30cluster.t"; # do not run failing tests
+    preCheck = "rm t/30cluster.t t/15config.t"; # do not run failing tests
     postInstall = ''
       mkdir -p $out/share/bash-completion/completions
       mv $out/bin/clusterssh_bash_completion.dist \
@@ -5619,10 +5619,14 @@ with self; {
       url = "mirror://cpan/authors/id/S/SP/SPROUT/CSS-DOM-0.17.tar.gz";
       hash = "sha256-Zbl46/PDmF5V7jK7baHp+upJSoXTAFxjuux+lphZ8CY=";
     };
+
+    patches = [
+      # Replace apostrophe as package separator
+      # https://rt.cpan.org/Public/Bug/Display.html?id=146661
+      ../development/perl-modules/CSSDOM-replace-apostrophe.patch
+    ];
+
     propagatedBuildInputs = [ Clone ];
-    preCheck = ''
-      rm t/css-dom.t # Remove test that fails due to deprecated package separator warning
-    '';
     meta = {
       description = "Document Object Model for Cascading Style Sheets";
       license = with lib.licenses; [ artistic1 gpl1Plus ];
@@ -8840,6 +8844,19 @@ with self; {
     };
   };
 
+  ENVUtil = buildPerlPackage {
+    pname = "ENV-Util";
+    version = "0.03";
+    src = fetchurl {
+      url = "mirror://cpan/authors/id/G/GA/GARU/ENV-Util-0.03.tar.gz";
+      hash = "sha256-B1574ehSxD6wiGYvr978FS9O9WyEPB4F2QDaGQb3P60=";
+    };
+    meta = {
+      description = "Parse prefixed environment variables and dotnev (.env) files into Perl";
+      license = with lib.licenses; [ artistic1 gpl1Plus ];
+    };
+  };
+
   Error = buildPerlModule {
     pname = "Error";
     version = "0.17029";
@@ -18904,6 +18921,20 @@ with self; {
     };
   };
 
+  NetNVD = buildPerlPackage {
+    pname = "Net-NVD";
+    version = "0.0.3";
+    src = fetchurl {
+      url = "mirror://cpan/authors/id/G/GA/GARU/Net-NVD-0.0.3.tar.gz";
+      hash = "sha256-uKZXEg+UsO7R2OvbA4i8M2DSj6Xw+CNrnNjNrovv5Bg=";
+    };
+    propagatedBuildInputs = [ IOSocketSSL JSON ];
+    meta = {
+      description = "Query CVE data from NIST's NVD (National Vulnerability Database)";
+      license = with lib.licenses; [ artistic1 gpl1Plus ];
+    };
+  };
+
   NetOAuth = buildPerlModule {
     pname = "Net-OAuth";
     version = "0.28";
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 6fb69887aef..4b29edee0ec 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -3441,6 +3441,8 @@ self: super: with self; {
 
   ecdsa = callPackage ../development/python-modules/ecdsa { };
 
+  echo = callPackage ../development/python-modules/echo { };
+
   ecoaliface = callPackage ../development/python-modules/ecoaliface { };
 
   ecos = callPackage ../development/python-modules/ecos { };
@@ -3803,6 +3805,8 @@ self: super: with self; {
 
   fastapi-mail = callPackage ../development/python-modules/fastapi-mail { };
 
+  fast-histogram = callPackage ../development/python-modules/fast-histogram { };
+
   fastavro = callPackage ../development/python-modules/fastavro { };
 
   fastbencode = callPackage ../development/python-modules/fastbencode { };
@@ -4508,6 +4512,8 @@ self: super: with self; {
 
   glom = callPackage ../development/python-modules/glom { };
 
+  glueviz = callPackage ../development/python-modules/glueviz { };
+
   glymur = callPackage ../development/python-modules/glymur { };
 
   gmpy2 = callPackage ../development/python-modules/gmpy2 { };
@@ -5324,6 +5330,8 @@ self: super: with self; {
 
   imgsize = callPackage ../development/python-modules/imgsize { };
 
+  imgtool = callPackage ../development/python-modules/imgtool { };
+
   iminuit = callPackage ../development/python-modules/iminuit { };
 
   immutabledict = callPackage ../development/python-modules/immutabledict { };
@@ -6887,6 +6895,8 @@ self: super: with self; {
 
   mitmproxy = callPackage ../development/python-modules/mitmproxy { };
 
+  mitmproxy-macos = callPackage ../development/python-modules/mitmproxy-macos { };
+
   mitmproxy-rs = callPackage ../development/python-modules/mitmproxy-rs { };
 
   mitmproxy-wireguard = callPackage ../development/python-modules/mitmproxy-wireguard { };
@@ -7072,6 +7082,8 @@ self: super: with self; {
 
   mplleaflet = callPackage ../development/python-modules/mplleaflet { };
 
+  mpl-scatter-density = callPackage ../development/python-modules/mpl-scatter-density { };
+
   mpmath = callPackage ../development/python-modules/mpmath { };
 
   mpris-server = callPackage ../development/python-modules/mpris-server { };
@@ -8458,10 +8470,7 @@ self: super: with self; {
 
   openai-triton-bin = callPackage ../development/python-modules/openai-triton/bin.nix { };
 
-  openai-whisper = callPackage ../development/python-modules/openai-whisper {
-    inherit (pkgs.config) cudaSupport;
-    openai-triton = self.openai-triton-cuda;
-  };
+  openai-whisper = callPackage ../development/python-modules/openai-whisper { };
 
   openant = callPackage ../development/python-modules/openant { };
 
@@ -9694,6 +9703,8 @@ self: super: with self; {
 
   pushover-complete = callPackage ../development/python-modules/pushover-complete { };
 
+  pvextractor = callPackage ../development/python-modules/pvextractor { };
+
   pvlib = callPackage ../development/python-modules/pvlib { };
 
   pvo = callPackage ../development/python-modules/pvo { };
@@ -12672,7 +12683,9 @@ self: super: with self; {
 
   scikit-survival = callPackage ../development/python-modules/scikit-survival { };
 
-  scs = callPackage ../development/python-modules/scs { };
+  scs = callPackage ../development/python-modules/scs {
+    inherit (pkgs.darwin.apple_sdk.frameworks) Accelerate;
+  };
 
   sdds = callPackage ../development/python-modules/sdds { };