about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nixos/doc/manual/release-notes/rl-2311.section.md2
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--nixos/modules/services/networking/sing-box.nix66
-rw-r--r--nixos/modules/services/web-apps/pixelfed.nix11
-rw-r--r--nixos/tests/all-tests.nix1
-rw-r--r--nixos/tests/sing-box.nix45
-rw-r--r--pkgs/applications/science/logic/klee/default.nix15
-rw-r--r--pkgs/development/ocaml-modules/mldoc/default.nix6
-rw-r--r--pkgs/development/python-modules/ipydatawidgets/default.nix4
-rw-r--r--pkgs/development/python-modules/micawber/default.nix20
-rw-r--r--pkgs/development/python-modules/moreorless/default.nix56
-rw-r--r--pkgs/development/python-modules/pyinstrument/default.nix6
-rw-r--r--pkgs/development/python-modules/pysequoia/default.nix61
-rw-r--r--pkgs/development/python-modules/pysqueezebox/default.nix4
-rw-r--r--pkgs/development/python-modules/pytado/default.nix6
-rw-r--r--pkgs/development/python-modules/python-sql/default.nix4
-rw-r--r--pkgs/development/python-modules/softlayer/default.nix4
-rw-r--r--pkgs/development/python-modules/stdlibs/default.nix40
-rw-r--r--pkgs/development/python-modules/trailrunner/default.nix47
-rw-r--r--pkgs/development/python-modules/ufmt/default.nix61
-rw-r--r--pkgs/development/python-modules/usort/default.nix65
-rw-r--r--pkgs/development/python-modules/volatile/default.nix36
-rw-r--r--pkgs/development/python-modules/zigpy-znp/default.nix4
-rw-r--r--pkgs/servers/web-apps/pixelfed/default.nix10
-rw-r--r--pkgs/servers/web-apps/pixelfed/php-packages.nix727
-rwxr-xr-xpkgs/servers/web-apps/pixelfed/update.sh36
-rw-r--r--pkgs/tools/admin/awscli2/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/ventoy/default.nix27
-rw-r--r--pkgs/tools/games/steamback/default.nix61
-rw-r--r--pkgs/tools/networking/pathvector/default.nix4
-rw-r--r--pkgs/tools/networking/sing-box/default.nix18
-rw-r--r--pkgs/tools/security/networkminer/default.nix73
-rw-r--r--pkgs/tools/security/networkminer/deps.nix8
-rw-r--r--pkgs/tools/security/networkminer/xdg-dirs.patch174
-rw-r--r--pkgs/tools/security/sequoia-sq/default.nix62
-rw-r--r--pkgs/tools/security/sequoia/default.nix109
-rw-r--r--pkgs/top-level/aliases.nix1
-rw-r--r--pkgs/top-level/all-packages.nix12
-rw-r--r--pkgs/top-level/python-aliases.nix1
-rw-r--r--pkgs/top-level/python-packages.nix19
-rw-r--r--pkgs/top-level/python2-packages.nix2
41 files changed, 1172 insertions, 741 deletions
diff --git a/nixos/doc/manual/release-notes/rl-2311.section.md b/nixos/doc/manual/release-notes/rl-2311.section.md
index 00d52376b18a8..8009e23378880 100644
--- a/nixos/doc/manual/release-notes/rl-2311.section.md
+++ b/nixos/doc/manual/release-notes/rl-2311.section.md
@@ -22,6 +22,8 @@
 
 ## Backward Incompatibilities {#sec-release-23.11-incompatibilities}
 
+- `python3.pkgs.sequoia` was removed in favor of `python3.pkgs.pysequoia`. The latter package is based on upstream's dedicated repository for sequoia's Python bindings, where the Python bindings from [gitlab:sequoia-pgp/sequoia](https://gitlab.com/sequoia-pgp/sequoia) were removed long ago.
+
 - `writeTextFile` now requires `executable` to be boolean, values like `null` or `""` will now fail to evaluate.
 
 - The latest version of `clonehero` now stores custom content in `~/.clonehero`. See the [migration instructions](https://clonehero.net/2022/11/29/v23-to-v1-migration-instructions.html). Typically, these content files would exist along side the binary, but the previous build used a wrapper script that would store them in `~/.config/unity3d/srylain Inc_/Clone Hero`.
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 43fcc68ded42a..6e8f062c16941 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -1013,6 +1013,7 @@
   ./services/networking/shorewall.nix
   ./services/networking/shorewall6.nix
   ./services/networking/shout.nix
+  ./services/networking/sing-box.nix
   ./services/networking/sitespeed-io.nix
   ./services/networking/skydns.nix
   ./services/networking/smartdns.nix
diff --git a/nixos/modules/services/networking/sing-box.nix b/nixos/modules/services/networking/sing-box.nix
new file mode 100644
index 0000000000000..d32725f77147a
--- /dev/null
+++ b/nixos/modules/services/networking/sing-box.nix
@@ -0,0 +1,66 @@
+{ config, lib, pkgs, utils, ... }:
+let
+  cfg = config.services.sing-box;
+  settingsFormat = pkgs.formats.json { };
+in
+{
+
+  meta = {
+    maintainers = with lib.maintainers; [ nickcao ];
+  };
+
+  options = {
+    services.sing-box = {
+      enable = lib.mkEnableOption (lib.mdDoc "sing-box universal proxy platform");
+
+      package = lib.mkPackageOptionMD pkgs "sing-box" { };
+
+      settings = lib.mkOption {
+        type = lib.types.submodule {
+          freeformType = settingsFormat.type;
+          options = {
+            route = {
+              geoip.path = lib.mkOption {
+                type = lib.types.path;
+                default = "${pkgs.sing-geoip}/share/sing-box/geoip.db";
+                defaultText = lib.literalExpression "\${pkgs.sing-geoip}/share/sing-box/geoip.db";
+                description = lib.mdDoc ''
+                  The path to the sing-geoip database.
+                '';
+              };
+              geosite.path = lib.mkOption {
+                type = lib.types.path;
+                default = "${pkgs.sing-geosite}/share/sing-box/geosite.db";
+                defaultText = lib.literalExpression "\${pkgs.sing-geosite}/share/sing-box/geosite.db";
+                description = lib.mdDoc ''
+                  The path to the sing-geosite database.
+                '';
+              };
+            };
+          };
+        };
+        default = { };
+        description = lib.mdDoc ''
+          The sing-box configuration, see https://sing-box.sagernet.org/configuration/ for documentation.
+
+          Options containing secret data should be set to an attribute set
+          containing the attribute `_secret` - a string pointing to a file
+          containing the value the option should be set to.
+        '';
+      };
+    };
+  };
+
+  config = lib.mkIf cfg.enable {
+    systemd.packages = [ cfg.package ];
+
+    systemd.services.sing-box = {
+      preStart = ''
+        mkdir -p /etc/sing-box
+        ${utils.genJqSecretsReplacementSnippet cfg.settings "/etc/sing-box/config.json"}
+      '';
+      wantedBy = [ "multi-user.target" ];
+    };
+  };
+
+}
diff --git a/nixos/modules/services/web-apps/pixelfed.nix b/nixos/modules/services/web-apps/pixelfed.nix
index a696d3f9323fa..159fb52476aab 100644
--- a/nixos/modules/services/web-apps/pixelfed.nix
+++ b/nixos/modules/services/web-apps/pixelfed.nix
@@ -380,6 +380,12 @@ in {
       };
 
       script = ''
+        # Before running any PHP program, cleanup the code cache.
+        # It's necessary if you upgrade the application otherwise you might
+        # try to import non-existent modules.
+        rm -f ${cfg.runtimeDir}/app.php
+        rm -rf ${cfg.runtimeDir}/cache/*
+
         # Concatenate non-secret .env and secret .env
         rm -f ${cfg.dataDir}/.env
         cp --no-preserve=all ${configFile} ${cfg.dataDir}/.env
@@ -406,11 +412,6 @@ in {
         # Install Horizon
         # FIXME: require write access to public/ — should be done as part of install — pixelfed-manage horizon:publish
 
-        # Before running any PHP program, cleanup the bootstrap.
-        # It's necessary if you upgrade the application otherwise you might
-        # try to import non-existent modules.
-        rm -rf ${cfg.runtimeDir}/bootstrap/*
-
         # Perform the first migration.
         [[ ! -f ${cfg.dataDir}/.initial-migration ]] && pixelfed-manage migrate --force && touch ${cfg.dataDir}/.initial-migration
 
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 6e9c893c809e4..e1ecda9af42cf 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -686,6 +686,7 @@ in {
   shiori = handleTest ./shiori.nix {};
   signal-desktop = handleTest ./signal-desktop.nix {};
   simple = handleTest ./simple.nix {};
+  sing-box = handleTest ./sing-box.nix {};
   slurm = handleTest ./slurm.nix {};
   smokeping = handleTest ./smokeping.nix {};
   snapcast = handleTest ./snapcast.nix {};
diff --git a/nixos/tests/sing-box.nix b/nixos/tests/sing-box.nix
new file mode 100644
index 0000000000000..43be89317642c
--- /dev/null
+++ b/nixos/tests/sing-box.nix
@@ -0,0 +1,45 @@
+import ./make-test-python.nix ({ lib, pkgs, ... }: {
+
+  name = "sing-box";
+
+  meta = {
+    maintainers = with lib.maintainers; [ nickcao ];
+  };
+
+  nodes.machine = { pkgs, ... }: {
+    environment.systemPackages = [ pkgs.curl ];
+    services.nginx.enable = true;
+    services.sing-box = {
+      enable = true;
+      settings = {
+        inbounds = [{
+          type = "mixed";
+          tag = "inbound";
+          listen = "127.0.0.1";
+          listen_port = 1080;
+          users = [{
+            username = "user";
+            password = { _secret = pkgs.writeText "password" "supersecret"; };
+          }];
+        }];
+        outbounds = [{
+          type = "direct";
+          tag = "outbound";
+        }];
+      };
+    };
+  };
+
+  testScript = ''
+    machine.wait_for_unit("nginx.service")
+    machine.wait_for_unit("sing-box.service")
+
+    machine.wait_for_open_port(80)
+    machine.wait_for_open_port(1080)
+
+    machine.succeed("curl --fail --max-time 10 --proxy http://user:supersecret@localhost:1080 http://localhost")
+    machine.fail("curl --fail --max-time 10 --proxy http://user:supervillain@localhost:1080 http://localhost")
+    machine.succeed("curl --fail --max-time 10 --proxy socks5://user:supersecret@localhost:1080 http://localhost")
+  '';
+
+})
diff --git a/pkgs/applications/science/logic/klee/default.nix b/pkgs/applications/science/logic/klee/default.nix
index a82d9c51e3be7..401b2f48a6eaa 100644
--- a/pkgs/applications/science/logic/klee/default.nix
+++ b/pkgs/applications/science/logic/klee/default.nix
@@ -45,30 +45,24 @@ let
   };
 in stdenv.mkDerivation rec {
   pname = "klee";
-  version = "2.3";
+  version = "3.0";
 
   src = fetchFromGitHub {
     owner = "klee";
     repo = "klee";
     rev = "v${version}";
-    sha256 = "sha256-E1c6K6Q+LAWm342W8I00JI6+LMvqmULHZLkv9Kj5RmY=";
+    hash = "sha256-y5lWmtIcLAthQ0oHYQNd+ir75YaxHZR9Jgiz+ZUFQjY=";
   };
 
+  nativeBuildInputs = [ cmake ];
   buildInputs = [
     cryptominisat
     gperftools
-    lit # Configure phase checking for lit
     llvm
     sqlite
     stp
     z3
   ];
-
-  nativeBuildInputs = [
-    clang
-    cmake
-  ];
-
   nativeCheckInputs = [
     gtest
 
@@ -83,8 +77,9 @@ in stdenv.mkDerivation rec {
   in [
     "-DCMAKE_BUILD_TYPE=${if debug then "Debug" else if !debug && includeDebugInfo then "RelWithDebInfo" else "MinSizeRel"}"
     "-DKLEE_RUNTIME_BUILD_TYPE=${if debugRuntime then "Debug" else "Release"}"
+    "-DLLVMCC=${clang}/bin/clang"
+    "-DLLVMCXX=${clang}/bin/clang++"
     "-DKLEE_ENABLE_TIMESTAMP=${onOff false}"
-    "-DENABLE_KLEE_UCLIBC=${onOff true}"
     "-DKLEE_UCLIBC_PATH=${kleeuClibc}"
     "-DENABLE_KLEE_ASSERTS=${onOff asserts}"
     "-DENABLE_POSIX_RUNTIME=${onOff true}"
diff --git a/pkgs/development/ocaml-modules/mldoc/default.nix b/pkgs/development/ocaml-modules/mldoc/default.nix
index 7960042ff9cc8..7a7e83d3c6568 100644
--- a/pkgs/development/ocaml-modules/mldoc/default.nix
+++ b/pkgs/development/ocaml-modules/mldoc/default.nix
@@ -29,7 +29,7 @@ let
 in
 buildDunePackage rec {
   pname = "mldoc";
-  version = "1.5.2";
+  version = "1.5.6";
 
   minimalOCamlVersion = "4.10";
 
@@ -38,8 +38,8 @@ buildDunePackage rec {
   src = fetchFromGitHub {
     owner = "logseq";
     repo = "mldoc";
-    rev = "v${version}";
-    hash = "sha256-FiBlgTTGL5TQkbhpkOCKtBgDDxDs4S88Ps+XAHcNsJ4=";
+    rev = "2a700b2e4797e47505f423fd47dc07372bd7b04e"; # version not tagged
+    hash = "sha256-OS06fb/Nz8grztFEVwWiqsQQt2PQjqcgQFxQuAEYC54=";
   };
 
   buildInputs = [
diff --git a/pkgs/development/python-modules/ipydatawidgets/default.nix b/pkgs/development/python-modules/ipydatawidgets/default.nix
index 09a7ddab47469..df7fe7ac3fc26 100644
--- a/pkgs/development/python-modules/ipydatawidgets/default.nix
+++ b/pkgs/development/python-modules/ipydatawidgets/default.nix
@@ -14,13 +14,13 @@
 
 buildPythonPackage rec {
   pname = "ipydatawidgets";
-  version = "4.3.3";
+  version = "4.3.5";
 
   disabled = isPy27;
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-T7LOaT+yaM2ukAN0z6GpFkHiLZUU0eweYtp0cFCST3Y=";
+    hash = "sha256-OU8kiVdlh8/XVTd6CaBn9GytIggZZQkgIf0avL54Uqg=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/micawber/default.nix b/pkgs/development/python-modules/micawber/default.nix
index a7956241adf2a..0a4decb49e4dd 100644
--- a/pkgs/development/python-modules/micawber/default.nix
+++ b/pkgs/development/python-modules/micawber/default.nix
@@ -1,19 +1,29 @@
-{ lib, buildPythonPackage, fetchPypi, beautifulsoup4 }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, beautifulsoup4
+, pythonOlder
+}:
 
 buildPythonPackage rec {
   pname = "micawber";
-  version = "0.5.4";
+  version = "0.5.5";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "003c5345aafe84f6b60fd289c003e8b1fef04c14e015c2d52d792a6b88135c89";
+    sha256 = "sha256-CsWBS2X/KngfsTlLkaI6ipX3NJK2u49wW67q2C6t1UM=";
   };
 
-  propagatedBuildInputs = [ beautifulsoup4 ];
+  propagatedBuildInputs = [
+    beautifulsoup4
+  ];
 
   meta = with lib; {
     homepage = "https://micawber.readthedocs.io/en/latest/";
-    description = "A small library for extracting rich content from urls";
+    description = "Module for extracting rich content from URLs";
     license = licenses.mit;
     longDescription = ''
       micawber supplies a few methods for retrieving rich metadata
diff --git a/pkgs/development/python-modules/moreorless/default.nix b/pkgs/development/python-modules/moreorless/default.nix
new file mode 100644
index 0000000000000..8f849b42f1378
--- /dev/null
+++ b/pkgs/development/python-modules/moreorless/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, buildPythonPackage
+, click
+, fetchFromGitHub
+, parameterized
+, pytestCheckHook
+, pythonOlder
+, setuptools-scm
+}:
+
+buildPythonPackage rec {
+  pname = "moreorless";
+  version = "0.4.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "thatch";
+    repo = "moreorless";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-N11iqsxMGgzwW2QYeOoHQaR/aDEuoUnnd/2Mc5culN0=";
+  };
+
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  nativeBuildInputs = [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = [
+    click
+  ];
+
+  nativeCheckInputs = [
+    parameterized
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "moreorless"
+  ];
+
+  pytestFlagsArray = [
+    "moreorless/tests/click.py"
+    "moreorless/tests/general.py"
+    "moreorless/tests/patch.py"
+  ];
+
+  meta = with lib; {
+    description = "Wrapper to make difflib.unified_diff more fun to use";
+    homepage = "https://github.com/thatch/moreorless/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/pyinstrument/default.nix b/pkgs/development/python-modules/pyinstrument/default.nix
index acff1fba1c98a..9dfe3b82cb555 100644
--- a/pkgs/development/python-modules/pyinstrument/default.nix
+++ b/pkgs/development/python-modules/pyinstrument/default.nix
@@ -6,13 +6,13 @@
 
 buildPythonPackage rec {
   pname = "pyinstrument";
-  version = "4.4.0";
+  version = "4.5.0";
 
   src = fetchFromGitHub {
     owner = "joerick";
     repo = pname;
-    rev = "v${version}";
-    hash = "sha256-0GbJkYBgSOIZrHSKM93SW93jXD+ieYN6A01kWoFbyvQ=";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-HvPapa3b9/Wc4ClaMOmCAIeHS7H4V9aCR9JCDol2ElE=";
   };
 
   # Module import recursion
diff --git a/pkgs/development/python-modules/pysequoia/default.nix b/pkgs/development/python-modules/pysequoia/default.nix
new file mode 100644
index 0000000000000..ffc7486cf20aa
--- /dev/null
+++ b/pkgs/development/python-modules/pysequoia/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitLab
+, pkg-config
+, rustPlatform
+, cargo
+, rustc
+, bzip2
+, nettle
+, openssl
+, pcsclite
+, stdenv
+, darwin
+}:
+
+buildPythonPackage rec {
+  pname = "pysequoia";
+  version = "0.1.14";
+  format = "pyproject";
+
+  src = fetchFromGitLab {
+    owner = "sequoia-pgp";
+    repo = "pysequoia";
+    rev = "v${version}";
+    hash = "sha256-63kUUxZTG33cB/IiD4AiDpLOI6Uew/fETgqhaGc7zp0=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-S/j3bGgU46nvVQFs35ih05teVEIJrFN4Ryq4B7rLFDE=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+    rustPlatform.cargoSetupHook
+    rustPlatform.maturinBuildHook
+    cargo
+    rustc
+  ];
+
+  buildInputs = [
+    bzip2
+    nettle
+    openssl
+    pcsclite
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  pythonImportsCheck = [ "pysequoia" ];
+
+  meta = with lib; {
+    description = "This library provides OpenPGP facilities in Python through the Sequoia PGP library";
+    homepage = "https://sequoia-pgp.gitlab.io/pysequoia";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/pkgs/development/python-modules/pysqueezebox/default.nix b/pkgs/development/python-modules/pysqueezebox/default.nix
index 7762a7645467e..7c9425a9d02ac 100644
--- a/pkgs/development/python-modules/pysqueezebox/default.nix
+++ b/pkgs/development/python-modules/pysqueezebox/default.nix
@@ -9,7 +9,7 @@
 
 buildPythonPackage rec {
   pname = "pysqueezebox";
-  version = "0.7.0";
+  version = "0.7.1";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
@@ -18,7 +18,7 @@ buildPythonPackage rec {
     owner = "rajlaud";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-nNCxptQDabNPKtKFy19kBl5rIhlHlgvvKkz/JWj3k8A=";
+    hash = "sha256-WnL9Va3uaWlUHVBtit4v+XdYOFmPpxG91mAHEGwI+7c=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pytado/default.nix b/pkgs/development/python-modules/pytado/default.nix
index 44d38fb6636a2..ddd618d6d14fb 100644
--- a/pkgs/development/python-modules/pytado/default.nix
+++ b/pkgs/development/python-modules/pytado/default.nix
@@ -7,14 +7,14 @@
 
 buildPythonPackage rec {
   pname = "pytado";
-  version = "0.13.0";
+  version = "0.16.0";
 
   src = fetchFromGitHub {
     owner = "wmalgadey";
     repo = "PyTado";
     # Upstream hasn't tagged 0.13.0 yet
-    rev = "2a243174e9ae01ef7adae940ecc6e340992ab28d";
-    sha256 = "Y1FxEzs/AF0ZTPdOK/1v+2U2fidfu+AmZbPddJCWIFc=";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-tpWr+VlkJ9svN9XtBIDEAos4uxYCl6njvUBPIJG++Yg=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/python-sql/default.nix b/pkgs/development/python-modules/python-sql/default.nix
index 783f7654d49ec..424c1635f91a3 100644
--- a/pkgs/development/python-modules/python-sql/default.nix
+++ b/pkgs/development/python-modules/python-sql/default.nix
@@ -7,14 +7,14 @@
 
 buildPythonPackage rec {
   pname = "python-sql";
-  version = "1.4.1";
+  version = "1.4.2";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-KkcvQLQPlFmdBi6/92BHm2NTX2LQLrnH1nGR4Iq/ctw=";
+    hash = "sha256-stuHXGcgwblayCyD6lLOu5RMQHvmii7wN8zdi6ucxTw=";
   };
 
   nativeCheckInputs = [
diff --git a/pkgs/development/python-modules/softlayer/default.nix b/pkgs/development/python-modules/softlayer/default.nix
index 032b5827d2581..4ae4e85111b28 100644
--- a/pkgs/development/python-modules/softlayer/default.nix
+++ b/pkgs/development/python-modules/softlayer/default.nix
@@ -21,7 +21,7 @@
 
 buildPythonPackage rec {
   pname = "softlayer";
-  version = "6.1.4";
+  version = "6.1.7";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -30,7 +30,7 @@ buildPythonPackage rec {
     owner = pname;
     repo = "softlayer-python";
     rev = "refs/tags/v${version}";
-    hash = "sha256-Ofl8MmGn70CJPuPZi0W0GJiMiceMNMACSNVKaOPdQN8=";
+    hash = "sha256-WL/hv1/eB8/ynSo0XOTOYE2rGWV/4VsgSQsRioR2ACE=";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/stdlibs/default.nix b/pkgs/development/python-modules/stdlibs/default.nix
new file mode 100644
index 0000000000000..4d3398d326c35
--- /dev/null
+++ b/pkgs/development/python-modules/stdlibs/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, flit-core
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "stdlibs";
+  version = "2022.10.9";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "omnilib";
+    repo = "stdlibs";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-HkGZw58gQGd8mHnCP4aF6JWXxlpIIfe7B//HJiHVwA4=";
+  };
+
+  nativeBuildInputs = [
+    flit-core
+  ];
+
+  # Module has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "stdlibs"
+  ];
+
+  meta = with lib; {
+    description = "Overview of the Python stdlib";
+    homepage = "https://github.com/omnilib/stdlibs";
+    changelog = "https://github.com/omnilib/stdlibs/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/trailrunner/default.nix b/pkgs/development/python-modules/trailrunner/default.nix
new file mode 100644
index 0000000000000..04cf6b0c071fa
--- /dev/null
+++ b/pkgs/development/python-modules/trailrunner/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, flit-core
+, pathspec
+, pythonOlder
+, unittestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "trailrunner";
+  version = "1.4.0";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "omnilib";
+    repo = "trailrunner";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-qtEBr22yyj6WcSfyYr/4r0IuuMJ6chFFqnmb+uMfQPA=";
+  };
+
+  nativeBuildInputs = [
+    flit-core
+  ];
+
+  propagatedBuildInputs = [
+    pathspec
+  ];
+
+  nativeCheckInputs = [
+    unittestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "trailrunner"
+  ];
+
+  meta = with lib; {
+    description = "Module to walk paths and run things";
+    homepage = "https://github.com/omnilib/trailrunner";
+    changelog = "https://github.com/omnilib/trailrunner/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/ufmt/default.nix b/pkgs/development/python-modules/ufmt/default.nix
new file mode 100644
index 0000000000000..cc510c0fa76f6
--- /dev/null
+++ b/pkgs/development/python-modules/ufmt/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, black
+, buildPythonPackage
+, click
+, fetchFromGitHub
+, flit-core
+, libcst
+, moreorless
+, pythonOlder
+, tomlkit
+, trailrunner
+, typing-extensions
+, unittestCheckHook
+, usort
+}:
+
+buildPythonPackage rec {
+  pname = "ufmt";
+  version = "2.1.0";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "omnilib";
+    repo = "ufmt";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-eQIbSC0Oxi6JD7/3o2y9f+KhT8GIiFiYiV4A3QBoWl0=";
+  };
+
+  nativeBuildInputs = [
+    flit-core
+  ];
+
+  propagatedBuildInputs = [
+    black
+    click
+    libcst
+    moreorless
+    tomlkit
+    trailrunner
+    typing-extensions
+    usort
+  ];
+
+  nativeCheckInputs = [
+    unittestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "ufmt"
+  ];
+
+  meta = with lib; {
+    description = "Safe, atomic formatting with black and usort";
+    homepage = "https://github.com/omnilib/ufmt";
+    changelog = "https://github.com/omnilib/ufmt/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/usort/default.nix b/pkgs/development/python-modules/usort/default.nix
new file mode 100644
index 0000000000000..2f61e8847ac66
--- /dev/null
+++ b/pkgs/development/python-modules/usort/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, attrs
+, buildPythonPackage
+, click
+, fetchFromGitHub
+, hatch-vcs
+, hatchling
+, libcst
+, moreorless
+, pythonOlder
+, stdlibs
+, toml
+, trailrunner
+, unittestCheckHook
+, volatile
+}:
+
+buildPythonPackage rec {
+  pname = "usort";
+  version = "1.1.0b2";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "usort";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-c3gQ+f/BRgM+Nwc+mEP7dcmig7ws7FqL5zwQhNJJlsI=";
+  };
+
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  nativeBuildInputs = [
+    hatch-vcs
+    hatchling
+  ];
+
+  propagatedBuildInputs = [
+    attrs
+    click
+    libcst
+    moreorless
+    stdlibs
+    toml
+    trailrunner
+  ];
+
+  nativeCheckInputs = [
+    unittestCheckHook
+    volatile
+  ];
+
+  pythonImportsCheck = [
+    "usort"
+  ];
+
+  meta = with lib; {
+    description = "Safe, minimal import sorting for Python projects";
+    homepage = "https://github.com/facebook/usort";
+    changelog = "https://github.com/facebook/usort/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/volatile/default.nix b/pkgs/development/python-modules/volatile/default.nix
new file mode 100644
index 0000000000000..7be5989b159b3
--- /dev/null
+++ b/pkgs/development/python-modules/volatile/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "volatile";
+  version = "2.1.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "mbr";
+    repo = "volatile";
+    rev = "refs/tags/${version}";
+    hash = "sha256-TYUvr0bscM/FaPk9oiF4Ob7HdKa2HlbpEFmaPfh4ir0=";
+  };
+
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "volatile"
+  ];
+
+  meta = with lib; {
+    description = "A small extension for the tempfile module";
+    homepage = "https://github.com/mbr/volatile";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/zigpy-znp/default.nix b/pkgs/development/python-modules/zigpy-znp/default.nix
index e110e001c6168..ed2c14231876f 100644
--- a/pkgs/development/python-modules/zigpy-znp/default.nix
+++ b/pkgs/development/python-modules/zigpy-znp/default.nix
@@ -16,7 +16,7 @@
 
 buildPythonPackage rec {
   pname = "zigpy-znp";
-  version = "0.11.1";
+  version = "0.11.2";
   format = "setuptools";
 
   disabled = pythonOlder "3.7";
@@ -25,7 +25,7 @@ buildPythonPackage rec {
     owner = "zigpy";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-gYzk3XHXlF4+lnrRHYS5RB2QD0oDHgnMov9UFmXder8=";
+    hash = "sha256-qCc02iv7SlIPY+e3WNg3BBGijCSuaWAxNrZKSjJhxrs=";
   };
 
   postPatch = ''
diff --git a/pkgs/servers/web-apps/pixelfed/default.nix b/pkgs/servers/web-apps/pixelfed/default.nix
index 5a8dfbabd395a..5b0da39f23dbd 100644
--- a/pkgs/servers/web-apps/pixelfed/default.nix
+++ b/pkgs/servers/web-apps/pixelfed/default.nix
@@ -28,17 +28,19 @@ let
   });
 in package.override rec {
   pname = "pixelfed";
-  version = "0.11.5";
+  version = "0.11.8";
 
-  # GitHub distribution does not include vendored files
   src = fetchFromGitHub {
     owner = "pixelfed";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-ZrvYKMSx5WymWR46/UKr5jCsclXXzBeY21ju22zeqN0=";
+    hash = "sha256-du+xwSrMqt4KIzQRUos6EmVBRp+39gHuoLSRsgLe1CQ=";
   };
 
-  passthru.tests = { inherit (nixosTests) pixelfed; };
+  passthru = {
+    tests = { inherit (nixosTests) pixelfed; };
+    updateScript = ./update.sh;
+  };
 
   meta = with lib; {
     description = "A federated image sharing platform";
diff --git a/pkgs/servers/web-apps/pixelfed/php-packages.nix b/pkgs/servers/web-apps/pixelfed/php-packages.nix
index 1b1643af27fcf..deaf587e5c089 100644
--- a/pkgs/servers/web-apps/pixelfed/php-packages.nix
+++ b/pkgs/servers/web-apps/pixelfed/php-packages.nix
@@ -2,16 +2,6 @@
 
 let
   packages = {
-    "asm89/stack-cors" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "asm89-stack-cors-73e5b88775c64ccc0b84fb60836b30dc9d92ac4a";
-        src = fetchurl {
-          url = "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a";
-          sha256 = "1idpisw39ba2dic9jl2s2yrkdgbyny9dfxf0qdr5i0wfvvlmbdih";
-        };
-      };
-    };
     "aws/aws-crt-php" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
@@ -25,10 +15,10 @@ let
     "aws/aws-sdk-php" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "aws-aws-sdk-php-42ca7ade60a775fc5eb103d4631df3d366b48a29";
+        name = "aws-aws-sdk-php-f481134d37b8303fa2e82ca7fe2a3124144057f6";
         src = fetchurl {
-          url = "https://api.github.com/repos/aws/aws-sdk-php/zipball/42ca7ade60a775fc5eb103d4631df3d366b48a29";
-          sha256 = "07bcpwsx0by2h5bgrd3bjl6fndzgpbsnaz9g65ga4yb5d36799br";
+          url = "https://api.github.com/repos/aws/aws-sdk-php/zipball/f481134d37b8303fa2e82ca7fe2a3124144057f6";
+          sha256 = "0ym593x000cm7yjsav0i53sq36np8d4r1j1zhbhfc06765s0x05q";
         };
       };
     };
@@ -65,10 +55,10 @@ let
     "buzz/laravel-h-captcha" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "buzz-laravel-h-captcha-502a4a15953cde6e0a17df6fec1459a565504d9b";
+        name = "buzz-laravel-h-captcha-f2db3734203876ef1f69ba4dc0f4d9d71462f534";
         src = fetchurl {
-          url = "https://api.github.com/repos/thinhbuzz/laravel-h-captcha/zipball/502a4a15953cde6e0a17df6fec1459a565504d9b";
-          sha256 = "1ki38b3cjxgydn3845d9a7zrxdiqmdq5ahsl7r3nwcf0m0xj9yby";
+          url = "https://api.github.com/repos/thinhbuzz/laravel-h-captcha/zipball/f2db3734203876ef1f69ba4dc0f4d9d71462f534";
+          sha256 = "1zpjn2h2181g25acp9j40ll6yigqwpkhvwavxf2dgg08rw76z50h";
         };
       };
     };
@@ -125,10 +115,10 @@ let
     "doctrine/dbal" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "doctrine-dbal-c480849ca3ad6706a39c970cdfe6888fa8a058b8";
+        name = "doctrine-dbal-b4bd1cfbd2b916951696d82e57d054394d84864c";
         src = fetchurl {
-          url = "https://api.github.com/repos/doctrine/dbal/zipball/c480849ca3ad6706a39c970cdfe6888fa8a058b8";
-          sha256 = "15j98h80li6m1aj53p8ddy0lkbkanc5kdy6xrikpdd6zhmsfgq9k";
+          url = "https://api.github.com/repos/doctrine/dbal/zipball/b4bd1cfbd2b916951696d82e57d054394d84864c";
+          sha256 = "04qiilphjk1zx4j5pwjh0svi90ad7vrb94h3x02wscfracxbwhjz";
         };
       };
     };
@@ -145,10 +135,10 @@ let
     "doctrine/event-manager" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "doctrine-event-manager-95aa4cb529f1e96576f3fda9f5705ada4056a520";
+        name = "doctrine-event-manager-750671534e0241a7c50ea5b43f67e23eb5c96f32";
         src = fetchurl {
-          url = "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520";
-          sha256 = "0xi2s28jmmvrndg1yd0r5s10d9a0q6j2dxdbazvcbws9waf0yrvj";
+          url = "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32";
+          sha256 = "1inhh3k8ai8d6rhx5xsbdx0ifc3yjjfrahi0cy1npz9nx3383cfh";
         };
       };
     };
@@ -235,20 +225,10 @@ let
     "firebase/php-jwt" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "firebase-php-jwt-4dd1e007f22a927ac77da5a3fbb067b42d3bc224";
-        src = fetchurl {
-          url = "https://api.github.com/repos/firebase/php-jwt/zipball/4dd1e007f22a927ac77da5a3fbb067b42d3bc224";
-          sha256 = "0wl5glq7bzqrph6pm6js05qnydp0rlchc494cjhbv54rawyb6wfs";
-        };
-      };
-    };
-    "fruitcake/laravel-cors" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "fruitcake-laravel-cors-783a74f5e3431d7b9805be8afb60fd0a8f743534";
+        name = "firebase-php-jwt-e94e7353302b0c11ec3cfff7180cd0b1743975d2";
         src = fetchurl {
-          url = "https://api.github.com/repos/fruitcake/laravel-cors/zipball/783a74f5e3431d7b9805be8afb60fd0a8f743534";
-          sha256 = "13mqhjks048fb5042l0rfrr52rz7knp9gjn8qviw9cx76kllw2c9";
+          url = "https://api.github.com/repos/firebase/php-jwt/zipball/e94e7353302b0c11ec3cfff7180cd0b1743975d2";
+          sha256 = "1iv1252x141m7nhhxzg2bawfyzsvaprhlclhlyhacra9pd5ng61y";
         };
       };
     };
@@ -275,30 +255,30 @@ let
     "guzzlehttp/guzzle" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "guzzlehttp-guzzle-b50a2a1251152e43f6a37f0fa053e730a67d25ba";
+        name = "guzzlehttp-guzzle-fb7566caccf22d74d1ab270de3551f72a58399f5";
         src = fetchurl {
-          url = "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba";
-          sha256 = "0cy828r0kafx58jh0k1cy17y77qh248d9kfk9ncn9pyq2q5v9p9p";
+          url = "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5";
+          sha256 = "0cmpq50s5xi9sg1dygllrhwj5dz5bxxj83xkvjspz63751xr51cs";
         };
       };
     };
     "guzzlehttp/promises" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "guzzlehttp-promises-b94b2807d85443f9719887892882d0329d1e2598";
+        name = "guzzlehttp-promises-67ab6e18aaa14d753cc148911d273f6e6cb6721e";
         src = fetchurl {
-          url = "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598";
-          sha256 = "1vvac7y5ax955qjg7dyjmaw3vab9v2lypjygap0040rv3z4x9vz8";
+          url = "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e";
+          sha256 = "0y3md6lkpk60kvmi607mgj29cfjg2bljc5nhfh3qf9hzk6c1b2j6";
         };
       };
     };
     "guzzlehttp/psr7" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "guzzlehttp-psr7-3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf";
+        name = "guzzlehttp-psr7-b635f279edd83fc275f822a1188157ffea568ff6";
         src = fetchurl {
-          url = "https://api.github.com/repos/guzzle/psr7/zipball/3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf";
-          sha256 = "1zgnykvv9fz2adava0gb2sm8wgnxkqj1jy2fky1v6vk1r7xdmr3j";
+          url = "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6";
+          sha256 = "0734h3r8db06hcffagr8s7bxhjkvlfzvqg1klwmqidflwdwk7yj1";
         };
       };
     };
@@ -345,10 +325,10 @@ let
     "laravel/framework" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "laravel-framework-9239128cfb4d22afefb64060dfecf53e82987267";
+        name = "laravel-framework-9e6dcff23ab1d4b522bef56074c31625cf077576";
         src = fetchurl {
-          url = "https://api.github.com/repos/laravel/framework/zipball/9239128cfb4d22afefb64060dfecf53e82987267";
-          sha256 = "1lpkhhhga9g5njig1qf8n2fs0szni5al19cr3ilnlqhy55dmmrb6";
+          url = "https://api.github.com/repos/laravel/framework/zipball/9e6dcff23ab1d4b522bef56074c31625cf077576";
+          sha256 = "0nw3isfjmwqs1a4n3qvw0kvsg6jsrx5wcapkxdbcfp2lha0sbmld";
         };
       };
     };
@@ -365,20 +345,20 @@ let
     "laravel/horizon" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "laravel-horizon-b49be302566365e0e4d517aac9995a8fe20b580e";
+        name = "laravel-horizon-4f762b1bd47b51f0557da84873a208410de9eece";
         src = fetchurl {
-          url = "https://api.github.com/repos/laravel/horizon/zipball/b49be302566365e0e4d517aac9995a8fe20b580e";
-          sha256 = "0q2f9q670cfxnzdaij4g5h1h5nd8xjh72hksqcxl469nxnnz0f16";
+          url = "https://api.github.com/repos/laravel/horizon/zipball/4f762b1bd47b51f0557da84873a208410de9eece";
+          sha256 = "0f9bxc63kqf1ljs1hv5g8h7j337wdy1xs0bcv45dwmh49f1fzkwm";
         };
       };
     };
     "laravel/passport" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "laravel-passport-4bfdb9610575a0c84a6810701f4fd45fb8ab3888";
+        name = "laravel-passport-48a03ffbfce7217b7ceba2c8e685ae8caa68db10";
         src = fetchurl {
-          url = "https://api.github.com/repos/laravel/passport/zipball/4bfdb9610575a0c84a6810701f4fd45fb8ab3888";
-          sha256 = "0nkp1gkvyp16i1cpb7wn5slbichyv12rpjfq35s7riyaynhbpkzr";
+          url = "https://api.github.com/repos/laravel/passport/zipball/48a03ffbfce7217b7ceba2c8e685ae8caa68db10";
+          sha256 = "1lnz22l2jxixbhk0833kvx04xh97q0vz5rqc8dzggim22mdrpd0c";
         };
       };
     };
@@ -405,10 +385,10 @@ let
     "laravel/ui" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "laravel-ui-65ec5c03f7fee2c8ecae785795b829a15be48c2c";
+        name = "laravel-ui-a58ec468db4a340b33f3426c778784717a2c144b";
         src = fetchurl {
-          url = "https://api.github.com/repos/laravel/ui/zipball/65ec5c03f7fee2c8ecae785795b829a15be48c2c";
-          sha256 = "0hr8kkbxvxxidnw86r1i92938wajhskv68zjn1627h1i16b10ysm";
+          url = "https://api.github.com/repos/laravel/ui/zipball/a58ec468db4a340b33f3426c778784717a2c144b";
+          sha256 = "0qrfr7rbi5b90inx3xf5yy5p9h38rs9b2567p2vh3711w4kqjmqd";
         };
       };
     };
@@ -425,10 +405,10 @@ let
     "lcobucci/jwt" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "lcobucci-jwt-4d7de2fe0d51a96418c0d04004986e410e87f6b4";
+        name = "lcobucci-jwt-47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34";
         src = fetchurl {
-          url = "https://api.github.com/repos/lcobucci/jwt/zipball/4d7de2fe0d51a96418c0d04004986e410e87f6b4";
-          sha256 = "0ripqfq90zf5xgap22zkhw2n5m8ip872lj39bd7fvwcchfjc5rx0";
+          url = "https://api.github.com/repos/lcobucci/jwt/zipball/47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34";
+          sha256 = "0bkkf98iflgdpryxm270wwgzw9id627h2iszjgw7ddkibn14lgq3";
         };
       };
     };
@@ -465,20 +445,30 @@ let
     "league/flysystem" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "league-flysystem-81e87e74dd5213795c7846d65089712d2dda90ce";
+        name = "league-flysystem-a141d430414fcb8bf797a18716b09f759a385bed";
         src = fetchurl {
-          url = "https://api.github.com/repos/thephpleague/flysystem/zipball/81e87e74dd5213795c7846d65089712d2dda90ce";
-          sha256 = "1lhcl71nbbkq27ssd92ilwbjicddnlwwf4ggihxwwv213847bdl9";
+          url = "https://api.github.com/repos/thephpleague/flysystem/zipball/a141d430414fcb8bf797a18716b09f759a385bed";
+          sha256 = "0w476nkv4izdrh8dn4g58lrqnfwrp8ijhj6fj8d8cpvr81kq0wiv";
         };
       };
     };
     "league/flysystem-aws-s3-v3" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "league-flysystem-aws-s3-v3-645e14e4a80bd2da8b01e57388e7296a695a80c2";
+        name = "league-flysystem-aws-s3-v3-d8de61ee10b6a607e7996cff388c5a3a663e8c8a";
         src = fetchurl {
-          url = "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/645e14e4a80bd2da8b01e57388e7296a695a80c2";
-          sha256 = "0dqyjdxwcdfb2jmi4739mz2g6rgnkana5lfbm3a4hz9xnxlw77wq";
+          url = "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/d8de61ee10b6a607e7996cff388c5a3a663e8c8a";
+          sha256 = "0hr11wwn2c2f26w0kj5yanx17ln17plk0si8yajkd470z3ssprwj";
+        };
+      };
+    };
+    "league/flysystem-local" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "league-flysystem-local-543f64c397fefdf9cfeac443ffb6beff602796b3";
+        src = fetchurl {
+          url = "https://api.github.com/repos/thephpleague/flysystem-local/zipball/543f64c397fefdf9cfeac443ffb6beff602796b3";
+          sha256 = "1f44jgjip7pgnjafwlazmbv9jap3xsw3jfzhgakbsa4bkx3aavr2";
         };
       };
     };
@@ -505,10 +495,10 @@ let
     "league/oauth2-server" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "league-oauth2-server-eed31d86d8cc8e6e9c9f58fbb2113494f8b41e24";
+        name = "league-oauth2-server-43cd4d406906c6be5c8de2cee9bd3ad3753544ef";
         src = fetchurl {
-          url = "https://api.github.com/repos/thephpleague/oauth2-server/zipball/eed31d86d8cc8e6e9c9f58fbb2113494f8b41e24";
-          sha256 = "19rz6gbvm3hj2l3hcwhdaqqgw5k3yr0yp47bl0bd7pm0wc4hdqk0";
+          url = "https://api.github.com/repos/thephpleague/oauth2-server/zipball/43cd4d406906c6be5c8de2cee9bd3ad3753544ef";
+          sha256 = "01amlk9r8srsk3603d56qswbq81hvksyw6jbn3i8f97l7fsdvaa9";
         };
       };
     };
@@ -545,10 +535,10 @@ let
     "monolog/monolog" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "monolog-monolog-f259e2b15fb95494c83f52d3caad003bbf5ffaa1";
+        name = "monolog-monolog-9b5daeaffce5b926cac47923798bba91059e60e2";
         src = fetchurl {
-          url = "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1";
-          sha256 = "0lz7lgr1bcxsh4c63z8k26bxawkx14h689wgdiap8992rf97kbk2";
+          url = "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2";
+          sha256 = "18nll4p6fh5zmw2wgzgp4lznkqqr6d598663rrji424dfpv55233";
         };
       };
     };
@@ -565,10 +555,10 @@ let
     "nesbot/carbon" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "nesbot-carbon-496712849902241f04902033b0441b269effe001";
+        name = "nesbot-carbon-c1001b3bc75039b07f38a79db5237c4c529e04c8";
         src = fetchurl {
-          url = "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001";
-          sha256 = "1bs1a0cji8fyjw7bys23da6162hymwps0pzm0mqib5rx4g0f1v0x";
+          url = "https://api.github.com/repos/briannesbitt/Carbon/zipball/c1001b3bc75039b07f38a79db5237c4c529e04c8";
+          sha256 = "0w5gk7b05pfsbf091plfr0ag6sx6h90sckz1phr46kd6cnrzk3rh";
         };
       };
     };
@@ -595,10 +585,10 @@ let
     "nikic/php-parser" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "nikic-php-parser-6bb5176bc4af8bcb7d926f88718db9b96a2d4290";
+        name = "nikic-php-parser-11e2663a5bc9db5d714eedb4277ee300403b4a9e";
         src = fetchurl {
-          url = "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290";
-          sha256 = "1q7a8wmjn9x28v5snxxriiih3vj12aqc3za0w6pdhbxs9ywxsg9n";
+          url = "https://api.github.com/repos/nikic/PHP-Parser/zipball/11e2663a5bc9db5d714eedb4277ee300403b4a9e";
+          sha256 = "1kkz11dsc11zhflc8wxjxxa8xjww371nwkmjf7ncn0spjf6hx4g5";
         };
       };
     };
@@ -615,10 +605,10 @@ let
     "nyholm/psr7" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "nyholm-psr7-f734364e38a876a23be4d906a2a089e1315be18a";
+        name = "nyholm-psr7-3cb4d163b58589e47b35103e8e5e6a6a475b47be";
         src = fetchurl {
-          url = "https://api.github.com/repos/Nyholm/psr7/zipball/f734364e38a876a23be4d906a2a089e1315be18a";
-          sha256 = "0w8i5l1qg8dkc1zsyz1gpwn2awgkhlm295l1b8smmzabqdc65dcx";
+          url = "https://api.github.com/repos/Nyholm/psr7/zipball/3cb4d163b58589e47b35103e8e5e6a6a475b47be";
+          sha256 = "1wbg5fcqkv8bg1ll0ndxp3jmi353sz6cd6gzdldbh35p1b2mp4jm";
         };
       };
     };
@@ -645,10 +635,10 @@ let
     "paragonie/sodium_compat" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "paragonie-sodium_compat-cb15e403ecbe6a6cc515f855c310eb6b1872a933";
+        name = "paragonie-sodium_compat-e592a3e06d1fa0d43988c7c7d9948ca836f644b6";
         src = fetchurl {
-          url = "https://api.github.com/repos/paragonie/sodium_compat/zipball/cb15e403ecbe6a6cc515f855c310eb6b1872a933";
-          sha256 = "01jxl868i8bkx5szgp2fp6mi438ani80bqkdcc7rnn9z22lrsm78";
+          url = "https://api.github.com/repos/paragonie/sodium_compat/zipball/e592a3e06d1fa0d43988c7c7d9948ca836f644b6";
+          sha256 = "0jp8il8mx5ylfx03wqa068437xidrrcgwsfcwxi9qbafhds3mhnm";
         };
       };
     };
@@ -672,16 +662,6 @@ let
         };
       };
     };
-    "php-http/message-factory" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "php-http-message-factory-a478cb11f66a6ac48d8954216cfed9aa06a501a1";
-        src = fetchurl {
-          url = "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1";
-          sha256 = "13drpc83bq332hz0b97whibkm7jpk56msq4yppw9nmrchzwgy7cs";
-        };
-      };
-    };
     "phpoption/phpoption" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
@@ -795,30 +775,30 @@ let
     "psr/http-client" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "psr-http-client-2dfb5f6c5eff0e91e20e913f8c5452ed95b86621";
+        name = "psr-http-client-0955afe48220520692d2d09f7ab7e0f93ffd6a31";
         src = fetchurl {
-          url = "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621";
-          sha256 = "0cmkifa3ji1r8kn3y1rwg81rh8g2crvnhbv2am6d688dzsbw967v";
+          url = "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31";
+          sha256 = "09r970lfpwil861gzm47446ck1s6km6ijibkxl13p1ymwdchnv6m";
         };
       };
     };
     "psr/http-factory" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "psr-http-factory-12ac7fcd07e5b077433f5f2bee95b3a771bf61be";
+        name = "psr-http-factory-e616d01114759c4c489f93b099585439f795fe35";
         src = fetchurl {
-          url = "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be";
-          sha256 = "0inbnqpc5bfhbbda9dwazsrw9xscfnc8rdx82q1qm3r446mc1vds";
+          url = "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35";
+          sha256 = "1vzimn3h01lfz0jx0lh3cy9whr3kdh103m1fw07qric4pnnz5kx8";
         };
       };
     };
     "psr/http-message" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "psr-http-message-f6561bf28d520154e4b0ec72be95418abe6d9363";
+        name = "psr-http-message-cb6ce4845ce34a8ad9e68117c10ee90a29919eba";
         src = fetchurl {
-          url = "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363";
-          sha256 = "195dd67hva9bmr52iadr4kyp2gw2f5l51lplfiay2pv6l9y4cf45";
+          url = "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba";
+          sha256 = "1s87sajxsxl30ciqyhx0vir2pai63va4ssbnq7ki6s050i4vm80h";
         };
       };
     };
@@ -845,20 +825,20 @@ let
     "psy/psysh" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "psy-psysh-722317c9f5627e588788e340f29b923e58f92f54";
+        name = "psy-psysh-4f00ee9e236fa6a48f4560d1300b9c961a70a7ec";
         src = fetchurl {
-          url = "https://api.github.com/repos/bobthecow/psysh/zipball/722317c9f5627e588788e340f29b923e58f92f54";
-          sha256 = "122fc66rcv2jwpw2c8di471r4yxcm1289wvpsnadaq345nj3v4bd";
+          url = "https://api.github.com/repos/bobthecow/psysh/zipball/4f00ee9e236fa6a48f4560d1300b9c961a70a7ec";
+          sha256 = "10754cxjwjf818g7i3vyd4jk0sy8r3i36jxpqk38n70ckasdd7w0";
         };
       };
     };
     "pusher/pusher-php-server" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "pusher-pusher-php-server-4ace4873873b06c25cecb2dd6d9fdcbf2f20b640";
+        name = "pusher-pusher-php-server-416e68dd5f640175ad5982131c42a7a666d1d8e9";
         src = fetchurl {
-          url = "https://api.github.com/repos/pusher/pusher-http-php/zipball/4ace4873873b06c25cecb2dd6d9fdcbf2f20b640";
-          sha256 = "0kkzhazdxqr6j225gyrbzmxfjc9zz89nckxbmx97bx8p4lrpdk9k";
+          url = "https://api.github.com/repos/pusher/pusher-http-php/zipball/416e68dd5f640175ad5982131c42a7a666d1d8e9";
+          sha256 = "13vrpfrpq7g92fshlb5s0pmpyxihmx4267cm1szrwpvza50iirqs";
         };
       };
     };
@@ -885,10 +865,10 @@ let
     "ramsey/uuid" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "ramsey-uuid-433b2014e3979047db08a17a205f410ba3869cf2";
+        name = "ramsey-uuid-60a4c63ab724854332900504274f6150ff26d286";
         src = fetchurl {
-          url = "https://api.github.com/repos/ramsey/uuid/zipball/433b2014e3979047db08a17a205f410ba3869cf2";
-          sha256 = "1yvdbbgblnzzv1zjzwggpayfb8n2kpbwki9dnxc42g4wrxissb8j";
+          url = "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286";
+          sha256 = "1w1i50pbd18awmvzqjkbszw79dl09912ibn95qm8lxr4nsjvbb27";
         };
       };
     };
@@ -925,40 +905,30 @@ let
     "react/event-loop" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "react-event-loop-187fb56f46d424afb6ec4ad089269c72eec2e137";
+        name = "react-event-loop-6e7e587714fff7a83dcc7025aee42ab3b265ae05";
         src = fetchurl {
-          url = "https://api.github.com/repos/reactphp/event-loop/zipball/187fb56f46d424afb6ec4ad089269c72eec2e137";
-          sha256 = "1nnxfdnigzx7zdc521s0fy4467z809dmw8488ig7r1yypv4ri1yc";
+          url = "https://api.github.com/repos/reactphp/event-loop/zipball/6e7e587714fff7a83dcc7025aee42ab3b265ae05";
+          sha256 = "0f71ahram6w45ksnvscgsgw163m1wylipnpvc4a7gmwzncl9fkw7";
         };
       };
     };
     "react/http" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "react-http-aa7512ee17258c88466de30f9cb44ec5f9df3ff3";
+        name = "react-http-bb3154dbaf2dfe3f0467f956a05f614a69d5f1d0";
         src = fetchurl {
-          url = "https://api.github.com/repos/reactphp/http/zipball/aa7512ee17258c88466de30f9cb44ec5f9df3ff3";
-          sha256 = "08zwgskkf7c3ixqf70r4xld0lrcdj1nk4l2jg994z8pyi2j3biyq";
+          url = "https://api.github.com/repos/reactphp/http/zipball/bb3154dbaf2dfe3f0467f956a05f614a69d5f1d0";
+          sha256 = "012idw77hrkdhcxh6vb3mfq0i21zbwqkibmrmh9ln5x4c3z4yn7a";
         };
       };
     };
     "react/promise" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "react-promise-234f8fd1023c9158e2314fa9d7d0e6a83db42910";
+        name = "react-promise-f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38";
         src = fetchurl {
-          url = "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910";
-          sha256 = "0p3n6jzlny75qcqwvrz0920ry3p902nq4v64cpg9ndd0g79dbdz4";
-        };
-      };
-    };
-    "react/promise-stream" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "react-promise-stream-e6d2805e09ad50c4896f65f5e8705fe4ee7731a3";
-        src = fetchurl {
-          url = "https://api.github.com/repos/reactphp/promise-stream/zipball/e6d2805e09ad50c4896f65f5e8705fe4ee7731a3";
-          sha256 = "0vkxqznj221qgqdndag9gx8dvmaqki37r7ipl6jwgn11hw8xpka9";
+          url = "https://api.github.com/repos/reactphp/promise/zipball/f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38";
+          sha256 = "1awzjaryj6lyi5wn0rmzwf5wyn1lg5wl3c6jp88i1gc9mp50g0n4";
         };
       };
     };
@@ -1005,10 +975,10 @@ let
     "spatie/db-dumper" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "spatie-db-dumper-129b8254b2c9f10881a754a692bd9507b09a1893";
+        name = "spatie-db-dumper-3b9fd47899bf6a59d3452392121c9ce675d55d34";
         src = fetchurl {
-          url = "https://api.github.com/repos/spatie/db-dumper/zipball/129b8254b2c9f10881a754a692bd9507b09a1893";
-          sha256 = "0q0xi4kcqlsghy8pmlr7sx7h6fbrwxbrrhnppsfnczjbkx5y76fv";
+          url = "https://api.github.com/repos/spatie/db-dumper/zipball/3b9fd47899bf6a59d3452392121c9ce675d55d34";
+          sha256 = "0w9maf9gz8s76whxfq93wm1r795j82l76y0xypqabrr3kngkmzas";
         };
       };
     };
@@ -1025,10 +995,10 @@ let
     "spatie/laravel-backup" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "spatie-laravel-backup-f073c8c9f5715272060e4bdceecedd02c29005f9";
+        name = "spatie-laravel-backup-a743a8bc21e388e5cc1bceff676859180f018771";
         src = fetchurl {
-          url = "https://api.github.com/repos/spatie/laravel-backup/zipball/f073c8c9f5715272060e4bdceecedd02c29005f9";
-          sha256 = "1p1v7wag0iqkq6h256k1xqmgf50wx4iygzi12wf942g6sgsf1yll";
+          url = "https://api.github.com/repos/spatie/laravel-backup/zipball/a743a8bc21e388e5cc1bceff676859180f018771";
+          sha256 = "1k7vygfjf784a6wnr5w3qhzgh7vz7hgvrshb4b994yk4f8ggr3hk";
         };
       };
     };
@@ -1045,10 +1015,10 @@ let
     "spatie/laravel-package-tools" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "spatie-laravel-package-tools-bab62023a4745a61170ad5424184533685e73c2d";
+        name = "spatie-laravel-package-tools-efab1844b8826443135201c4443690f032c3d533";
         src = fetchurl {
-          url = "https://api.github.com/repos/spatie/laravel-package-tools/zipball/bab62023a4745a61170ad5424184533685e73c2d";
-          sha256 = "0y4zfyk6v12kkkgz4sp00h1n8gqsr1idir5blcvzy3f540wxl30y";
+          url = "https://api.github.com/repos/spatie/laravel-package-tools/zipball/efab1844b8826443135201c4443690f032c3d533";
+          sha256 = "1527wh9gyb5k066fmmyngvyy2ldkmc34glqx2dk9swflc1jfjgpb";
         };
       };
     };
@@ -1065,30 +1035,30 @@ let
     "spatie/temporary-directory" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "spatie-temporary-directory-e2818d871783d520b319c2d38dc37c10ecdcde20";
+        name = "spatie-temporary-directory-0c804873f6b4042aa8836839dca683c7d0f71831";
         src = fetchurl {
-          url = "https://api.github.com/repos/spatie/temporary-directory/zipball/e2818d871783d520b319c2d38dc37c10ecdcde20";
-          sha256 = "18zay4l05sh21zfnbs0l6l12192j4y0mn2yfvnsyhm617kr14vgj";
+          url = "https://api.github.com/repos/spatie/temporary-directory/zipball/0c804873f6b4042aa8836839dca683c7d0f71831";
+          sha256 = "007vxm2x1anrlnzwhrqyk4nw7yflaicfhr4q9wlp5bhy7d3ixljr";
         };
       };
     };
     "stevebauman/purify" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "stevebauman-purify-e56289062ed8a25c78c88f35e9106f00d01369c1";
+        name = "stevebauman-purify-7b63762b05db9eadc36d7e8b74cf58fa64bfa527";
         src = fetchurl {
-          url = "https://api.github.com/repos/stevebauman/purify/zipball/e56289062ed8a25c78c88f35e9106f00d01369c1";
-          sha256 = "0bqzk203c526sdz8dgpvm3kffxk9x67xy1qbjl4p13fl4cwyi8wb";
+          url = "https://api.github.com/repos/stevebauman/purify/zipball/7b63762b05db9eadc36d7e8b74cf58fa64bfa527";
+          sha256 = "08l5qhx7awd64mivxwhim1vm007h5l244g3ssshz56i44qqji673";
         };
       };
     };
     "symfony/cache" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-cache-01a36b32f930018764bcbde006fbbe421fa6b61e";
+        name = "symfony-cache-1ce7ed8e7ca6948892b6a3a52bb60cf2b04f7c94";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/cache/zipball/01a36b32f930018764bcbde006fbbe421fa6b61e";
-          sha256 = "1i484nh0zy4nbq8p3j1wdw7jiz6rs387w8gyrhligfvhv6kkfd2f";
+          url = "https://api.github.com/repos/symfony/cache/zipball/1ce7ed8e7ca6948892b6a3a52bb60cf2b04f7c94";
+          sha256 = "0n9f8snanv7gxgi7kwjq8z3isjirhjc44ciw2ss3glij63864rwj";
         };
       };
     };
@@ -1105,10 +1075,10 @@ let
     "symfony/console" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-console-cbad09eb8925b6ad4fb721c7a179344dc4a19d45";
+        name = "symfony-console-5aa03db8ef0a5457c316ec580e69562d97734c77";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/console/zipball/cbad09eb8925b6ad4fb721c7a179344dc4a19d45";
-          sha256 = "0373y1dqy8mschqqhw2hvv906i1nc68h4yd5jm1dj4rf8qrynplb";
+          url = "https://api.github.com/repos/symfony/console/zipball/5aa03db8ef0a5457c316ec580e69562d97734c77";
+          sha256 = "1dc90j27brsidzp025rz3jkk3ir1qyk9chlp2b6vbg617yyr8ipk";
         };
       };
     };
@@ -1135,20 +1105,20 @@ let
     "symfony/error-handler" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-error-handler-61e90f94eb014054000bc902257d2763fac09166";
+        name = "symfony-error-handler-e847ba47e7a8f9708082990cb40ab4ff0440a11e";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/error-handler/zipball/61e90f94eb014054000bc902257d2763fac09166";
-          sha256 = "1kxm9pzvvlrd2b1gwbq9b45qgq6sckl0xr078cis7vsbhw9kwbkn";
+          url = "https://api.github.com/repos/symfony/error-handler/zipball/e847ba47e7a8f9708082990cb40ab4ff0440a11e";
+          sha256 = "1ffx7y5pcsxwb95jxdir8kx06p27bkf2bs7c7qbqmlkb6srga1pg";
         };
       };
     };
     "symfony/event-dispatcher" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-event-dispatcher-404b307de426c1c488e5afad64403e5f145e82a5";
+        name = "symfony-event-dispatcher-04046f35fd7d72f9646e721fc2ecb8f9c67d3339";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/event-dispatcher/zipball/404b307de426c1c488e5afad64403e5f145e82a5";
-          sha256 = "0262hqisnnv3mzb7gn6yjyvr8dhgsqrs18a19s72nwcj0cs7k6mi";
+          url = "https://api.github.com/repos/symfony/event-dispatcher/zipball/04046f35fd7d72f9646e721fc2ecb8f9c67d3339";
+          sha256 = "1va0impcvcmbf3v8xpjkwrm0l5w14pb2n2fs2k29xp23xjd7lnil";
         };
       };
     };
@@ -1175,10 +1145,10 @@ let
     "symfony/http-client" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-http-client-0a5be6cbc570ae23b51b49d67341f378629d78e4";
+        name = "symfony-http-client-39f679c12648cc43bd9f0db12cc69b82041b91a1";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/http-client/zipball/0a5be6cbc570ae23b51b49d67341f378629d78e4";
-          sha256 = "1jkgy3k4g2x33952vnbw8n5lv6986fbq8qallpsl8rfcczyzliq3";
+          url = "https://api.github.com/repos/symfony/http-client/zipball/39f679c12648cc43bd9f0db12cc69b82041b91a1";
+          sha256 = "1mn4nf6hwxdgb0x8xmrfmgbayyr1hy613w632ag8rj582bfmag6z";
         };
       };
     };
@@ -1195,50 +1165,50 @@ let
     "symfony/http-foundation" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-http-foundation-5fc3038d4a594223f9ea42e4e985548f3fcc9a3b";
+        name = "symfony-http-foundation-df27f4191a4292d01fd062296e09cbc8b657cb57";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/http-foundation/zipball/5fc3038d4a594223f9ea42e4e985548f3fcc9a3b";
-          sha256 = "13wn8kgxakp9133sjgvn2bfr51r5rxymm6d8vhs8kjxxgkx050l5";
+          url = "https://api.github.com/repos/symfony/http-foundation/zipball/df27f4191a4292d01fd062296e09cbc8b657cb57";
+          sha256 = "1kdzs427q1qxbd3209fpwas3dq40ihjm0skbh6avxarwsyw9vfwk";
         };
       };
     };
     "symfony/http-kernel" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-http-kernel-ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd";
+        name = "symfony-http-kernel-954a1a3b178309b216261eedc735c079709e4ab3";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/http-kernel/zipball/ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd";
-          sha256 = "14b700kcw4ibz9hackx9wvghmv5rnks18vhr4vjb5zskfdajp4qd";
+          url = "https://api.github.com/repos/symfony/http-kernel/zipball/954a1a3b178309b216261eedc735c079709e4ab3";
+          sha256 = "1iga2bbshrm7d9m90bxmqkh5crzwzziqfyw3g62b6z01iwrp1k42";
         };
       };
     };
     "symfony/mailer" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-mailer-e4f84c633b72ec70efc50b8016871c3bc43e691e";
+        name = "symfony-mailer-bfcfa015c67e19c6fdb7ca6fe70700af1e740a17";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/mailer/zipball/e4f84c633b72ec70efc50b8016871c3bc43e691e";
-          sha256 = "15bi1vy4162mv0k49wscdshwznjmmcwr9g7g03jgadanjq4afyzj";
+          url = "https://api.github.com/repos/symfony/mailer/zipball/bfcfa015c67e19c6fdb7ca6fe70700af1e740a17";
+          sha256 = "1i6q57w3jhfy69z86jyqvjwx7y50rl8z3y7n6gc1kafw97g1yyn8";
         };
       };
     };
     "symfony/mailgun-mailer" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-mailgun-mailer-9e27b8ec2f6ee7575c6229a61be1578a5a4b21ee";
+        name = "symfony-mailgun-mailer-2c9d47b11cc154d2db3f571030cd965d128de1a8";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/mailgun-mailer/zipball/9e27b8ec2f6ee7575c6229a61be1578a5a4b21ee";
-          sha256 = "14ny9mqvl8lqfa049cvxd0zqiqssidk82794sg80g6cl1irmj6rp";
+          url = "https://api.github.com/repos/symfony/mailgun-mailer/zipball/2c9d47b11cc154d2db3f571030cd965d128de1a8";
+          sha256 = "0ppsp07mkj382s4h4wh1g5f0w104a4brw6vl3dwr6kjciakxc3hd";
         };
       };
     };
     "symfony/mime" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-mime-62e341f80699badb0ad70b31149c8df89a2d778e";
+        name = "symfony-mime-b6c137fc53a9f7c4c951cd3f362b3734c7a97723";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/mime/zipball/62e341f80699badb0ad70b31149c8df89a2d778e";
-          sha256 = "1l56y494n4phiyafcgc7sa8vfxzsvz6lbzxhnqirdgv19y4zvbim";
+          url = "https://api.github.com/repos/symfony/mime/zipball/b6c137fc53a9f7c4c951cd3f362b3734c7a97723";
+          sha256 = "1cy2xp4hw8lz3d1n5qc5q5afpzk2y7n0kkn0gl68dnn5ffd06xmr";
         };
       };
     };
@@ -1325,30 +1295,30 @@ let
     "symfony/process" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-process-680e8a2ea6b3f87aecc07a6a65a203ae573d1902";
+        name = "symfony-process-97ae9721bead9d1a39b5650e2f4b7834b93b539c";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/process/zipball/680e8a2ea6b3f87aecc07a6a65a203ae573d1902";
-          sha256 = "16g99h6ir2mf3v0kciqckjgjg4x8sqyl2b6r7rf9bw1rnfmh3xk7";
+          url = "https://api.github.com/repos/symfony/process/zipball/97ae9721bead9d1a39b5650e2f4b7834b93b539c";
+          sha256 = "0z5hip2ackw8a97fkf6a5zz7rd8sfv72qj44w4zyw776br0rcviw";
         };
       };
     };
     "symfony/psr-http-message-bridge" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-psr-http-message-bridge-a125b93ef378c492e274f217874906fb9babdebb";
+        name = "symfony-psr-http-message-bridge-28a732c05bbad801304ad5a5c674cf2970508993";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a125b93ef378c492e274f217874906fb9babdebb";
-          sha256 = "1c23bv3j2zwbxklizvkvkzrgn2fd1164qb0smgswa15pshwmr0gw";
+          url = "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/28a732c05bbad801304ad5a5c674cf2970508993";
+          sha256 = "0mbs6d1f05n7ws4nyw3w748q5qp7c28i7d96q9c4lyc6cvxbl12n";
         };
       };
     };
     "symfony/routing" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-routing-fa643fa4c56de161f8bc8c0492a76a60140b50e4";
+        name = "symfony-routing-69062e2823f03b82265d73a966999660f0e1e404";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/routing/zipball/fa643fa4c56de161f8bc8c0492a76a60140b50e4";
-          sha256 = "1kv9ijzligl3y6z6hwkk5kjf8h8lff5fh6y0f1ws1ivwxrid8r33";
+          url = "https://api.github.com/repos/symfony/routing/zipball/69062e2823f03b82265d73a966999660f0e1e404";
+          sha256 = "03nzrw3kvraf3cyn31hmpvnip4aihj84234i5qh5iv59jzpz517p";
         };
       };
     };
@@ -1365,20 +1335,20 @@ let
     "symfony/string" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-string-67b8c1eec78296b85dc1c7d9743830160218993d";
+        name = "symfony-string-193e83bbd6617d6b2151c37fff10fa7168ebddef";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/string/zipball/67b8c1eec78296b85dc1c7d9743830160218993d";
-          sha256 = "1jvxxb6f5mf1hl1fl6pr46b0g79w8zinqxgw40c871lxw8xmk6hy";
+          url = "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef";
+          sha256 = "1478grgcbh5vwylwnx89bzjrws5akm8h7kmm7j4h741wvhzv45j6";
         };
       };
     };
     "symfony/translation" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-translation-90db1c6138c90527917671cd9ffa9e8b359e3a73";
+        name = "symfony-translation-64113df3e8b009f92fad63014f4ec647e65bc927";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/translation/zipball/90db1c6138c90527917671cd9ffa9e8b359e3a73";
-          sha256 = "1fwg6fwlkjv2zxxg7mjxp9i9c3slxfdiixykpl3r9rsddjvpvyjr";
+          url = "https://api.github.com/repos/symfony/translation/zipball/64113df3e8b009f92fad63014f4ec647e65bc927";
+          sha256 = "18w8yp5l1w0rcrnmm020y4my898ncxldhf7s94875vk7xks69nby";
         };
       };
     };
@@ -1405,20 +1375,20 @@ let
     "symfony/var-dumper" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-var-dumper-cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e";
+        name = "symfony-var-dumper-7d10f2a5a452bda385692fc7d38cd6eccfebe756";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/var-dumper/zipball/cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e";
-          sha256 = "1l771q02a9m4j09dv96y4g1fb9lpmfxnz2hy11hmz57afscl3m7s";
+          url = "https://api.github.com/repos/symfony/var-dumper/zipball/7d10f2a5a452bda385692fc7d38cd6eccfebe756";
+          sha256 = "1sb6mjh88rd5ycqkkq0rcx0kplvyvyxf2xa1avyv9f8hjlcyydhv";
         };
       };
     };
     "symfony/var-exporter" = {
       targetDir = "";
       src = composerEnv.buildZipPackage {
-        name = "symfony-var-exporter-86062dd0103530e151588c8f60f5b85a139f1442";
+        name = "symfony-var-exporter-9a07920c2058bafee921ce4d90aeef2193837d63";
         src = fetchurl {
-          url = "https://api.github.com/repos/symfony/var-exporter/zipball/86062dd0103530e151588c8f60f5b85a139f1442";
-          sha256 = "1w13ww6qr7bra2c8j2da6wzrr96agp1ks4b81g1h8psyybvb48m6";
+          url = "https://api.github.com/repos/symfony/var-exporter/zipball/9a07920c2058bafee921ce4d90aeef2193837d63";
+          sha256 = "1vggk9ya9b2703i0qj70bvqp00c3dbddmcg7sax8c8a0hq308r7m";
         };
       };
     };
@@ -1473,372 +1443,11 @@ let
       };
     };
   };
-  devPackages = {
-    "brianium/paratest" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "brianium-paratest-51691208db882922c55d6c465be3e7d95028c449";
-        src = fetchurl {
-          url = "https://api.github.com/repos/paratestphp/paratest/zipball/51691208db882922c55d6c465be3e7d95028c449";
-          sha256 = "0gmp7zg3lfvsg4lqsh3q5zxl00iz004d5qbvnmya6y97skig2ja6";
-        };
-      };
-    };
-    "doctrine/instantiator" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "doctrine-instantiator-c6222283fa3f4ac679f8b9ced9a4e23f163e80d0";
-        src = fetchurl {
-          url = "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0";
-          sha256 = "059ahw73z0m24cal4f805j6h1i53f90mrmjr7s4f45yfxgwcqvcn";
-        };
-      };
-    };
-    "fakerphp/faker" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "fakerphp-faker-92efad6a967f0b79c499705c69b662f738cc9e4d";
-        src = fetchurl {
-          url = "https://api.github.com/repos/FakerPHP/Faker/zipball/92efad6a967f0b79c499705c69b662f738cc9e4d";
-          sha256 = "0yxl4vicv0yc5jxsfslxkhh7fjgryg3anmpvdvbqim2df5wv4pqg";
-        };
-      };
-    };
-    "fidry/cpu-core-counter" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "fidry-cpu-core-counter-b58e5a3933e541dc286cc91fc4f3898bbc6f1623";
-        src = fetchurl {
-          url = "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/b58e5a3933e541dc286cc91fc4f3898bbc6f1623";
-          sha256 = "154qkm931w5d3dy202w455wxfa0wsjx7mmfj23mb36zpp1gck19j";
-        };
-      };
-    };
-    "filp/whoops" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "filp-whoops-e864ac957acd66e1565f25efda61e37791a5db0b";
-        src = fetchurl {
-          url = "https://api.github.com/repos/filp/whoops/zipball/e864ac957acd66e1565f25efda61e37791a5db0b";
-          sha256 = "1q6lx0d2h1372flsh7qqacyb9gljhhlnasgbvydhil11v1mai50g";
-        };
-      };
-    };
-    "hamcrest/hamcrest-php" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "hamcrest-hamcrest-php-8c3d0a3f6af734494ad8f6fbbee0ba92422859f3";
-        src = fetchurl {
-          url = "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3";
-          sha256 = "1ixmmpplaf1z36f34d9f1342qjbcizvi5ddkjdli6jgrbla6a6hr";
-        };
-      };
-    };
-    "jean85/pretty-package-versions" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "jean85-pretty-package-versions-ae547e455a3d8babd07b96966b17d7fd21d9c6af";
-        src = fetchurl {
-          url = "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af";
-          sha256 = "07s7hl7705vgmyr5m7czja4426rsqrxqh8m362irn29vbc35k6q8";
-        };
-      };
-    };
-    "laravel/telescope" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "laravel-telescope-fafad2e32883eb9dc03b646d0f82b2987e8af880";
-        src = fetchurl {
-          url = "https://api.github.com/repos/laravel/telescope/zipball/fafad2e32883eb9dc03b646d0f82b2987e8af880";
-          sha256 = "1pr1a4b07nmwj05ck4c7c1ip1hhr32blr9pwcvapyrh862vv5p13";
-        };
-      };
-    };
-    "mockery/mockery" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "mockery-mockery-e92dcc83d5a51851baf5f5591d32cb2b16e3684e";
-        src = fetchurl {
-          url = "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e";
-          sha256 = "0dvkr0ff37cn6s72s7sqw26j6i5fja780x980zhl099frflkw5s9";
-        };
-      };
-    };
-    "myclabs/deep-copy" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "myclabs-deep-copy-7284c22080590fb39f2ffa3e9057f10a4ddd0e0c";
-        src = fetchurl {
-          url = "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c";
-          sha256 = "16k44y94bcr439bsxm5158xvmlyraph2c6n17qa5y29b04jqdw5j";
-        };
-      };
-    };
-    "nunomaduro/collision" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "nunomaduro-collision-f05978827b9343cba381ca05b8c7deee346b6015";
-        src = fetchurl {
-          url = "https://api.github.com/repos/nunomaduro/collision/zipball/f05978827b9343cba381ca05b8c7deee346b6015";
-          sha256 = "09bpw23vq3yyilrkd6k798igrg0ypryxpw2bfbdgjvjwhs4ndf29";
-        };
-      };
-    };
-    "phar-io/manifest" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "phar-io-manifest-97803eca37d319dfa7826cc2437fc020857acb53";
-        src = fetchurl {
-          url = "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53";
-          sha256 = "107dsj04ckswywc84dvw42kdrqd4y6yvb2qwacigyrn05p075c1w";
-        };
-      };
-    };
-    "phar-io/version" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "phar-io-version-4f7fd7836c6f332bb2933569e566a0d6c4cbed74";
-        src = fetchurl {
-          url = "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74";
-          sha256 = "0mdbzh1y0m2vvpf54vw7ckcbcf1yfhivwxgc9j9rbb7yifmlyvsg";
-        };
-      };
-    };
-    "phpunit/php-code-coverage" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "phpunit-php-code-coverage-443bc6912c9bd5b409254a40f4b0f4ced7c80ea1";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1";
-          sha256 = "18v2xs142pw4dl9l6imcmkdvv5m18zd36ar41i586f4mg8d961d1";
-        };
-      };
-    };
-    "phpunit/php-file-iterator" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "phpunit-php-file-iterator-cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf";
-          sha256 = "1407d8f1h35w4sdikq2n6cz726css2xjvlyr1m4l9a53544zxcnr";
-        };
-      };
-    };
-    "phpunit/php-invoker" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "phpunit-php-invoker-5a10147d0aaf65b58940a0b72f71c9ac0423cc67";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67";
-          sha256 = "1vqnnjnw94mzm30n9n5p2bfgd3wd5jah92q6cj3gz1nf0qigr4fh";
-        };
-      };
-    };
-    "phpunit/php-text-template" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "phpunit-php-text-template-5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28";
-          sha256 = "0ff87yzywizi6j2ps3w0nalpx16mfyw3imzn6gj9jjsfwc2bb8lq";
-        };
-      };
-    };
-    "phpunit/php-timer" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "phpunit-php-timer-5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2";
-          sha256 = "0g1g7yy4zk1bidyh165fsbqx5y8f1c8pxikvcahzlfsr9p2qxk6a";
-        };
-      };
-    };
-    "phpunit/phpunit" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "phpunit-phpunit-86e761949019ae83f49240b2f2123fb5ab3b2fc5";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/86e761949019ae83f49240b2f2123fb5ab3b2fc5";
-          sha256 = "1jqsw5qd5cv07fzpbw6m31314s2b64zwz0hz3g83179yf5h4r99z";
-        };
-      };
-    };
-    "sebastian/cli-parser" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-cli-parser-442e7c7e687e42adc03470c7b668bc4b2402c0b2";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2";
-          sha256 = "074qzdq19k9x4svhq3nak5h348xska56v1sqnhk1aj0jnrx02h37";
-        };
-      };
-    };
-    "sebastian/code-unit" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-code-unit-1fc9f64c0927627ef78ba436c9b17d967e68e120";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120";
-          sha256 = "04vlx050rrd54mxal7d93pz4119pas17w3gg5h532anfxjw8j7pm";
-        };
-      };
-    };
-    "sebastian/code-unit-reverse-lookup" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-code-unit-reverse-lookup-ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5";
-          sha256 = "1h1jbzz3zak19qi4mab2yd0ddblpz7p000jfyxfwd2ds0gmrnsja";
-        };
-      };
-    };
-    "sebastian/comparator" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-comparator-fa0f136dd2334583309d32b62544682ee972b51a";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a";
-          sha256 = "0m8ibkwaxw2q5v84rlvy7ylpkddscsa8hng0cjczy4bqpqavr83w";
-        };
-      };
-    };
-    "sebastian/complexity" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-complexity-739b35e53379900cc9ac327b2147867b8b6efd88";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88";
-          sha256 = "1y4yz8n8hszbhinf9ipx3pqyvgm7gz0krgyn19z0097yq3bbq8yf";
-        };
-      };
-    };
-    "sebastian/diff" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-diff-3461e3fccc7cfdfc2720be910d3bd73c69be590d";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d";
-          sha256 = "0967nl6cdnr0v0z83w4xy59agn60kfv8gb41aw3fpy1n2wpp62dj";
-        };
-      };
-    };
-    "sebastian/environment" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-environment-830c43a844f1f8d5b7a1f6d6076b784454d8b7ed";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed";
-          sha256 = "02045n3in01zk571v1phyhj0b2mvnvx8qnlqvw4j33r7qdd4clzn";
-        };
-      };
-    };
-    "sebastian/exporter" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-exporter-ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d";
-          sha256 = "1a6yj8v8rwj3igip8xysdifvbd7gkzmwrj9whdx951pdq7add46j";
-        };
-      };
-    };
-    "sebastian/global-state" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-global-state-0ca8db5a5fc9c8646244e629625ac486fa286bf2";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2";
-          sha256 = "1csrfa5b7ivza712lfmbywp9jhwf4ls5lc0vn812xljkj7w24kg1";
-        };
-      };
-    };
-    "sebastian/lines-of-code" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-lines-of-code-c1c2e997aa3146983ed888ad08b15470a2e22ecc";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc";
-          sha256 = "0fay9s5cm16gbwr7qjihwrzxn7sikiwba0gvda16xng903argbk0";
-        };
-      };
-    };
-    "sebastian/object-enumerator" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-object-enumerator-5c9eeac41b290a3712d88851518825ad78f45c71";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71";
-          sha256 = "11853z07w8h1a67wsjy3a6ir5x7khgx6iw5bmrkhjkiyvandqcn1";
-        };
-      };
-    };
-    "sebastian/object-reflector" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-object-reflector-b4f479ebdbf63ac605d183ece17d8d7fe49c15c7";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7";
-          sha256 = "0g5m1fswy6wlf300x1vcipjdljmd3vh05hjqhqfc91byrjbk4rsg";
-        };
-      };
-    };
-    "sebastian/recursion-context" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-recursion-context-e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1";
-          sha256 = "1ag6ysxffhxyg7g4rj9xjjlwq853r4x92mmin4f09hn5mqn9f0l1";
-        };
-      };
-    };
-    "sebastian/resource-operations" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-resource-operations-0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8";
-          sha256 = "0p5s8rp7mrhw20yz5wx1i4k8ywf0h0ximcqan39n9qnma1dlnbyr";
-        };
-      };
-    };
-    "sebastian/type" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-type-75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7";
-          sha256 = "0bvfvb62qbpy2hzxs4bjzb0xhks6h3cp6qx96z4qlyz6wl2fa1w5";
-        };
-      };
-    };
-    "sebastian/version" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "sebastian-version-c6c1022351a901512170118436c764e473f6de8c";
-        src = fetchurl {
-          url = "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c";
-          sha256 = "1bs7bwa9m0fin1zdk7vqy5lxzlfa9la90lkl27sn0wr00m745ig1";
-        };
-      };
-    };
-    "theseer/tokenizer" = {
-      targetDir = "";
-      src = composerEnv.buildZipPackage {
-        name = "theseer-tokenizer-34a41e998c2183e22995f158c581e7b5e755ab9e";
-        src = fetchurl {
-          url = "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e";
-          sha256 = "1za4a017kjb4rw2ydglip4bp5q2y7mfiycj3fvnp145i84jc7n0q";
-        };
-      };
-    };
-  };
+  devPackages = {};
 in
 composerEnv.buildPackage {
   inherit packages devPackages noDev;
-  name = "pixelfed-pixelfed";
+  name = "pixelfed";
   src = composerEnv.filterSrc ./.;
   executable = false;
   symlinkDependencies = false;
diff --git a/pkgs/servers/web-apps/pixelfed/update.sh b/pkgs/servers/web-apps/pixelfed/update.sh
new file mode 100755
index 0000000000000..f629444013d6c
--- /dev/null
+++ b/pkgs/servers/web-apps/pixelfed/update.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -I nixpkgs=../../../.. -i bash -p nix curl jq nix-update
+
+# check if composer2nix is installed
+if ! command -v composer2nix &> /dev/null; then
+  echo "Please install composer2nix (https://github.com/svanderburg/composer2nix) to run this script."
+  exit 1
+fi
+
+CURRENT_VERSION=$(nix eval -f ../../../.. --raw pixelfed.version)
+TARGET_VERSION_REMOTE=$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} https://api.github.com/repos/pixelfed/pixelfed/releases/latest | jq -r ".tag_name")
+TARGET_VERSION=${TARGET_VERSION_REMOTE:1}
+PIXELFED=https://github.com/pixelfed/pixelfed/raw/$TARGET_VERSION_REMOTE
+SHA256=$(nix-prefetch-url --unpack "https://github.com/pixelfed/pixelfed/archive/v$TARGET_VERSION/pixelfed.tar.gz")
+SRI_HASH=$(nix hash to-sri --type sha256 "$SHA256")
+
+if [[ "$CURRENT_VERSION" == "$TARGET_VERSION" ]]; then
+  echo "pixelfed is up-to-date: ${CURRENT_VERSION}"
+  exit 0
+fi
+
+curl -LO "$PIXELFED/composer.json"
+curl -LO "$PIXELFED/composer.lock"
+
+composer2nix --name "pixelfed" \
+  --composition=composition.nix \
+  --no-dev
+rm composer.json composer.lock
+
+# change version number
+sed -e "s/version =.*;/version = \"$TARGET_VERSION\";/g" \
+    -e "s/hash =.*;/hash = \"$SRI_HASH\";/g" \
+    -i ./default.nix
+
+cd ../../../..
+nix-build -A pixelfed
diff --git a/pkgs/tools/admin/awscli2/default.nix b/pkgs/tools/admin/awscli2/default.nix
index e0404b681ae0e..a47d75232040d 100644
--- a/pkgs/tools/admin/awscli2/default.nix
+++ b/pkgs/tools/admin/awscli2/default.nix
@@ -18,14 +18,14 @@ let
 in
 with py.pkgs; buildPythonApplication rec {
   pname = "awscli2";
-  version = "2.12.2"; # N.B: if you change this, check if overrides are still up-to-date
+  version = "2.12.3"; # N.B: if you change this, check if overrides are still up-to-date
   format = "pyproject";
 
   src = fetchFromGitHub {
     owner = "aws";
     repo = "aws-cli";
     rev = version;
-    hash = "sha256-BEg7Zlc1gmZ5PpbIY6xL9l69DVz0l2b6e5oiECRucLw=";
+    hash = "sha256-56eRINxIAuVkgySNvk+bOEC1sYgkOeujNQsIihKefc8=";
   };
 
   postPatch = ''
diff --git a/pkgs/tools/cd-dvd/ventoy/default.nix b/pkgs/tools/cd-dvd/ventoy/default.nix
index 3c931248305c1..2edf7a5fdb714 100644
--- a/pkgs/tools/cd-dvd/ventoy/default.nix
+++ b/pkgs/tools/cd-dvd/ventoy/default.nix
@@ -51,14 +51,16 @@ let
 in
 stdenv.mkDerivation (finalAttrs: {
   pname = "ventoy";
-  version = "1.0.91";
+  version = "1.0.93";
 
-  src = let
-    inherit (finalAttrs) version;
-  in fetchurl {
-    url = "https://github.com/ventoy/Ventoy/releases/download/v${version}/ventoy-${version}-linux.tar.gz";
-    hash = "sha256-9vsFdOxsW1Cs06gVPvQusju2+wp4PpBwbHZUugwb3co=";
-  };
+  src =
+    let
+      inherit (finalAttrs) version;
+    in
+    fetchurl {
+      url = "https://github.com/ventoy/Ventoy/releases/download/v${version}/ventoy-${version}-linux.tar.gz";
+      hash = "sha256-oz5IVq0QsPX90N4EBold2QQ8/CY4XF+KcQ41L+TR4iI=";
+    };
 
   patches = [
     ./000-nixos-sanitization.patch
@@ -112,7 +114,8 @@ stdenv.mkDerivation (finalAttrs: {
       terminal = false;
       categories = [ "Utility" ];
       startupNotify = true;
-    })];
+    })
+  ];
 
   dontConfigure = true;
   dontBuild = true;
@@ -183,7 +186,7 @@ stdenv.mkDerivation (finalAttrs: {
     runHook postInstall
   '';
 
-  meta = {
+  meta = with lib; {
     homepage = "https://www.ventoy.net";
     description = "A New Bootable USB Solution";
     longDescription = ''
@@ -200,9 +203,9 @@ stdenv.mkDerivation (finalAttrs: {
       800+ image files are tested.  90%+ distros in DistroWatch supported.
     '';
     changelog = "https://www.ventoy.net/doc_news.html";
-    license = lib.licenses.gpl3Plus;
-    maintainers = with lib.maintainers; [ AndersonTorres ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
     platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" "mipsel-linux" ];
-    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
   };
 })
diff --git a/pkgs/tools/games/steamback/default.nix b/pkgs/tools/games/steamback/default.nix
new file mode 100644
index 0000000000000..44ee3db8db08f
--- /dev/null
+++ b/pkgs/tools/games/steamback/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, pythonRelaxDepsHook
+, setuptools
+, pillow
+, psutil
+, async-tkinter-loop
+, timeago
+, platformdirs
+, sv-ttk
+}:
+
+buildPythonApplication rec {
+  pname = "steamback";
+  version = "0.3.6";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-hvMPSxIfwwQqo80JCpYhcbVY4kXs5jWtjjafVSMrw6o=";
+  };
+
+  nativeBuildInputs = [
+    pythonRelaxDepsHook
+  ];
+
+  buildInputs = [
+    setuptools
+    pillow
+  ];
+
+  propagatedBuildInputs = [
+    psutil
+    async-tkinter-loop
+    timeago
+    platformdirs
+    sv-ttk
+  ];
+
+  pythonRelaxDeps = [
+    "async-tkinter-loop"
+    "platformdirs"
+    "Pillow"
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+
+    $out/bin/${pname} --help
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "A Decky plugin to add versioned save-game snapshots to Steam-cloud enabled games";
+    homepage = "https://github.com/geeksville/steamback";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ AngryAnt ];
+  };
+}
diff --git a/pkgs/tools/networking/pathvector/default.nix b/pkgs/tools/networking/pathvector/default.nix
index cd4ebaf2b7a83..f8560793e9dc6 100644
--- a/pkgs/tools/networking/pathvector/default.nix
+++ b/pkgs/tools/networking/pathvector/default.nix
@@ -2,13 +2,13 @@
 
 buildGoModule rec {
   pname = "pathvector";
-  version = "6.3.0";
+  version = "6.3.2";
 
   src = fetchFromGitHub {
     owner = "natesales";
     repo = "pathvector";
     rev = "v${version}";
-    sha256 = "sha256-N4mlEfJWov1utqv+Dy+I2G1kf8t82hFYn74guzrsKF0=";
+    sha256 = "sha256-TqGasguEAcA5ET2E/uFjgIl7IHI2v9m5EaXpIMG3T8c=";
   };
 
   vendorHash = "sha256-hgUuntT6jMWI14qDE3Yjm5W8UqQ6CcvoILmSDaVEZac=";
diff --git a/pkgs/tools/networking/sing-box/default.nix b/pkgs/tools/networking/sing-box/default.nix
index a93a973e4b398..1e15eaf9a192f 100644
--- a/pkgs/tools/networking/sing-box/default.nix
+++ b/pkgs/tools/networking/sing-box/default.nix
@@ -4,21 +4,23 @@
 , fetchFromGitHub
 , installShellFiles
 , buildPackages
+, coreutils
 , nix-update-script
+, nixosTests
 }:
 
 buildGoModule rec {
   pname = "sing-box";
-  version = "1.2.7";
+  version = "1.3.0";
 
   src = fetchFromGitHub {
     owner = "SagerNet";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-+pRG5nq0Be58at61qqu5QciHC2DMvw+wj7u8tZx8+eY=";
+    hash = "sha256-+zEjuoGFAZhajUCFPZXNr1SoAprjOsHf12nVCbDKOeY=";
   };
 
-  vendorHash = "sha256-gHPMJ4/W2ZisG/jAtHSLH/NlHgBitg7Bwe95wGJAsOY=";
+  vendorHash = "sha256-KJEjqcwtsNEByTQjp+TU9Yct/CJD8F9fnGuq9eeGtpQ=";
 
   tags = [
     "with_quic"
@@ -50,9 +52,17 @@ buildGoModule rec {
       --bash <(${emulator} $out/bin/sing-box completion bash) \
       --fish <(${emulator} $out/bin/sing-box completion fish) \
       --zsh  <(${emulator} $out/bin/sing-box completion zsh )
+
+    substituteInPlace release/config/sing-box{,@}.service \
+      --replace "/usr/bin/sing-box" "$out/bin/sing-box" \
+      --replace "/bin/kill" "${coreutils}/bin/kill"
+    install -Dm444 -t "$out/lib/systemd/system/" release/config/sing-box{,@}.service
   '';
 
-  passthru.updateScript = nix-update-script { };
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = { inherit (nixosTests) sing-box; };
+  };
 
   meta = with lib;{
     homepage = "https://sing-box.sagernet.org";
diff --git a/pkgs/tools/security/networkminer/default.nix b/pkgs/tools/security/networkminer/default.nix
new file mode 100644
index 0000000000000..c9c6c528cbc4d
--- /dev/null
+++ b/pkgs/tools/security/networkminer/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, buildDotnetModule
+, fetchurl
+, unzip
+, dos2unix
+, makeWrapper
+, msbuild
+, mono
+}:
+buildDotnetModule rec {
+  pname = "networkminer";
+  version = "2.8";
+
+  src = fetchurl {
+    # Upstream does not provide versioned releases, a mirror has been uploaded
+    # to archive.org
+    url = "https://archive.org/download/networkminer-${lib.replaceStrings ["."] ["-"] version}/NetworkMiner_${lib.replaceStrings ["."] ["-"] version}_source.zip";
+    sha256 = "1n2312acq5rq0jizlcfk0crslx3wgcsd836p47nk3pnapzw0cqvv";
+  };
+
+  nativeBuildInputs = [ unzip dos2unix msbuild ];
+
+  patches = [
+    # Store application data in XDG_DATA_DIRS instead of trying to write to nix store
+    ./xdg-dirs.patch
+  ];
+
+  postPatch = ''
+    # Not all files have UTF-8 BOM applied consistently
+    find . -type f -exec dos2unix -m {} \+
+
+    # Embedded base64-encoded app icon in resx fails to parse. Delete it
+    sed -zi 's|<data name="$this.Icon".*</data>||g' NetworkMiner/NamedPipeForm.resx
+    sed -zi 's|<data name="$this.Icon".*</data>||g' NetworkMiner/UpdateCheck.resx
+  '';
+
+  nugetDeps = ./deps.nix;
+
+  buildPhase = ''
+    runHook preBuild
+
+    msbuild /p:Configuration=Release NetworkMiner.sln
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share
+    cp -r NetworkMiner/bin/Release $out/share/NetworkMiner
+    makeWrapper ${mono}/bin/mono $out/bin/NetworkMiner \
+      --add-flags "$out/share/NetworkMiner/NetworkMiner.exe" \
+      --add-flags "--noupdatecheck"
+
+    install -D NetworkMiner/NetworkMiner.desktop $out/share/applications/NetworkMiner.desktop
+    substituteInPlace $out/share/applications/NetworkMiner.desktop \
+      --replace "Exec=mono NetworkMiner.exe %f" "Exec=NetworkMiner" \
+      --replace "Icon=./networkminericon-96x96.png" "Icon=NetworkMiner"
+    install -D NetworkMiner/networkminericon-96x96.png $out/share/pixmaps/NetworkMiner.png
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "The Open Source Network Forensic Analysis Tool (NFAT)";
+    homepage = "https://www.netresec.com/?page=NetworkMiner";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.linux;
+    mainProgram = "NetworkMiner";
+  };
+}
diff --git a/pkgs/tools/security/networkminer/deps.nix b/pkgs/tools/security/networkminer/deps.nix
new file mode 100644
index 0000000000000..196ca32bf1ead
--- /dev/null
+++ b/pkgs/tools/security/networkminer/deps.nix
@@ -0,0 +1,8 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.2"; sha256 = "0i42rn8xmvhn08799manpym06kpw89qy9080myyy2ngy565pqh0a"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies.net461"; version = "1.0.2"; sha256 = "0js3dp26nszx82q0phv7hmsm5z23dva7javbmk6a91lbkm07y8p2"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies.net472"; version = "1.0.2"; sha256 = "1dny43jksy6dm9zrkdm8j80gb25w6wdvjlxnphj7ngf0fbg3dd2c"; })
+]
diff --git a/pkgs/tools/security/networkminer/xdg-dirs.patch b/pkgs/tools/security/networkminer/xdg-dirs.patch
new file mode 100644
index 0000000000000..58c0745d338be
--- /dev/null
+++ b/pkgs/tools/security/networkminer/xdg-dirs.patch
@@ -0,0 +1,174 @@
+diff --git a/NetworkMiner/NetworkMinerForm.cs b/NetworkMiner/NetworkMinerForm.cs
+index 06c808b..6495b73 100644
+--- a/NetworkMiner/NetworkMinerForm.cs
++++ b/NetworkMiner/NetworkMinerForm.cs
+@@ -1,4 +1,4 @@
+-//  Copyright: Erik Hjelmvik, NETRESEC

++//  Copyright: Erik Hjelmvik, NETRESEC

+ //

+ //  NetworkMiner is free software; you can redistribute it and/or modify it

+ //  under the terms of the GNU General Public License

+@@ -419,7 +419,7 @@ namespace NetworkMiner {
+             }

+             try {

+                 //require FileIOPermission to be PermissionState.Unrestricted

+-                string path = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY;

++                string path = System.IO.Path.GetDirectoryName(SharedUtils.XdgDirectories.GetOrCreateXdgDataHome()) + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY;

+                 System.Security.Permissions.FileIOPermission fileIOPerm = new System.Security.Permissions.FileIOPermission(System.Security.Permissions.FileIOPermissionAccess.AllAccess, path);

+                 fileIOPerm.Demand();

+             }

+@@ -1023,13 +1023,13 @@ namespace NetworkMiner {
+         public void CreateNewPacketHandlerWrapper(System.IO.DirectoryInfo outputDirectory) {

+             //make sure that folders exists

+             try {

+-                System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(outputDirectory.FullName + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY);

++                System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY);

+                 if (!di.Exists)

+                     di.Create();

+-                di = new System.IO.DirectoryInfo(outputDirectory.FullName + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY + System.IO.Path.DirectorySeparatorChar + "cache");

++                di = new System.IO.DirectoryInfo(SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY + System.IO.Path.DirectorySeparatorChar + "cache");

+                 if (!di.Exists)

+                     di.Create();

+-                di = new System.IO.DirectoryInfo(outputDirectory.FullName + System.IO.Path.DirectorySeparatorChar + "Captures");

++                di = new System.IO.DirectoryInfo(SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + "Captures");

+                 if (!di.Exists)

+                     di.Create();

+             }

+@@ -1962,7 +1962,7 @@ namespace NetworkMiner {
+             string filename = Tools.GenerateCaptureFileName(DateTime.Now);

+             //string filename="NM_"+DateTime.Now.ToString("s", System.Globalization.DateTimeFormatInfo.InvariantInfo).Replace(':','-')+".pcap";

+ 

+-            string fileFullPath = this.OutputDirectory.FullName + "Captures" + System.IO.Path.DirectorySeparatorChar + filename;

++            string fileFullPath = SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + "Captures" + System.IO.Path.DirectorySeparatorChar + filename;

+             //string fileFullPath = System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(System.Windows.Forms.Application.ExecutablePath)) + System.IO.Path.DirectorySeparatorChar + "Captures" + System.IO.Path.DirectorySeparatorChar + filename;

+ 

+             //make sure to get the right datalink type

+@@ -2534,7 +2534,7 @@ namespace NetworkMiner {
+ 

+             if (removeCapturedFiles) {

+                 PacketParser.FileTransfer.FileStreamAssemblerList.RemoveTempFiles();

+-                string capturesDirectory = System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(System.Windows.Forms.Application.ExecutablePath)) + System.IO.Path.DirectorySeparatorChar + "Captures";

++                string capturesDirectory = System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(SharedUtils.XdgDirectories.GetOrCreateXdgDataHome())) + System.IO.Path.DirectorySeparatorChar + "Captures";

+                 if (System.IO.Directory.Exists(capturesDirectory)) {

+                     foreach (string pcapFile in System.IO.Directory.GetFiles(capturesDirectory))

+                         try {

+@@ -2545,7 +2545,7 @@ namespace NetworkMiner {
+                             //this.ShowAnomaly("Error deleting file \"" + pcapFile + "\"", DateTime.Now);

+                         }

+                 }

+-                capturesDirectory = this.packetHandlerWrapper.PacketHandler.OutputDirectory + "Captures";

++                capturesDirectory = SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + "Captures";

+                 if (System.IO.Directory.Exists(capturesDirectory)) {

+                     foreach (string pcapFile in System.IO.Directory.GetFiles(capturesDirectory))

+                         try {

+@@ -2635,7 +2635,7 @@ namespace NetworkMiner {
+                     try {

+                         PacketParser.Utils.ByteConverter.ToByteArrayFromHexString(keyword);//to force valid hex

+                         this.keywordListBox.Items.Add(keyword);

+-                        //Lägg till keywordet till PacketHandler.PacketHandler!!!

++                        //L�gg till keywordet till PacketHandler.PacketHandler!!!

+                     }

+                     catch (Exception ex) {

+                         errorMessage = ex.Message;

+@@ -2720,7 +2720,7 @@ namespace NetworkMiner {
+ #endregion

+ 

+         private void hostSortOrderComboBox_SelectedIndexChanged(object sender, EventArgs e) {

+-            //HÄR SKA detailsHeader LIGGA Enabled MASSA OLIKA SORTERINGSORDNINGAR:

++            //H�R SKA detailsHeader LIGGA Enabled MASSA OLIKA SORTERINGSORDNINGAR:

+             //IP, HOTSNAME, SENT PACKETS, RECEIVED PACKETS, MAC ADDRESS

+             this.RebuildHostsTree(sender, e);

+         }

+@@ -2754,7 +2754,7 @@ namespace NetworkMiner {
+             foreach (string p in paths) {

+                 if (!p.Contains(PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY))

+                     return false;

+-                if (!this.IsSubDirectoryOf(new System.IO.DirectoryInfo(p), new System.IO.DirectoryInfo(this.packetHandlerWrapper.PacketHandler.OutputDirectory + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY)))

++                if (!this.IsSubDirectoryOf(new System.IO.DirectoryInfo(p), new System.IO.DirectoryInfo(SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY)))

+                     return false;

+             }

+             return true;

+@@ -3976,7 +3976,7 @@ finally {
+         }

+ 

+         private void closeToolStripMenuItem_Click(object sender, EventArgs e) {

+-            DialogResult yesOrNo = MessageBox.Show("Would you like to delete all extracted files from:" + Environment.NewLine + this.OutputDirectory.FullName + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY + System.IO.Path.DirectorySeparatorChar, "Delete extracted files?", MessageBoxButtons.YesNo);

++            DialogResult yesOrNo = MessageBox.Show("Would you like to delete all extracted files from:" + Environment.NewLine + SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY + System.IO.Path.DirectorySeparatorChar, "Delete extracted files?", MessageBoxButtons.YesNo);

+             this.ResetCapturedData(false, yesOrNo == DialogResult.Yes, true);

+         }

+ 

+diff --git a/NetworkMiner/PcapOverIP/ReceivePcapOverTcpForm.cs b/NetworkMiner/PcapOverIP/ReceivePcapOverTcpForm.cs
+index 9bae5f0..72586d4 100644
+--- a/NetworkMiner/PcapOverIP/ReceivePcapOverTcpForm.cs
++++ b/NetworkMiner/PcapOverIP/ReceivePcapOverTcpForm.cs
+@@ -162,7 +162,7 @@ namespace NetworkMiner.PcapOverIP {
+             DateTime lastFrameTimestamp = DateTime.MinValue;

+ 

+             string filename = Tools.GenerateCaptureFileName(DateTime.Now);

+-            string fileFullPath = this.packetHandler.OutputDirectory + "Captures" + System.IO.Path.DirectorySeparatorChar + filename;

++            string fileFullPath = SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + "Captures" + System.IO.Path.DirectorySeparatorChar + filename;

+             //string fileFullPath = System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(System.Windows.Forms.Application.ExecutablePath)) + System.IO.Path.DirectorySeparatorChar + "Captures" + System.IO.Path.DirectorySeparatorChar + filename;

+ 

+             PcapFileWriter pcapFileWriter = new PcapFileWriter(fileFullPath, this.pcapStreamReader.FileDataLinkType[0]);

+diff --git a/PacketParser/FileTransfer/FileStreamAssemblerList.cs b/PacketParser/FileTransfer/FileStreamAssemblerList.cs
+index 4a6a4dd..129d48b 100644
+--- a/PacketParser/FileTransfer/FileStreamAssemblerList.cs
++++ b/PacketParser/FileTransfer/FileStreamAssemblerList.cs
+@@ -191,7 +191,7 @@ namespace PacketParser.FileTransfer {
+             if (removeExtractedFilesFromDisk) {

+                 //remove all files

+                 foreach (string subDirectory in System.IO.Directory.GetDirectories(this.FileOutputDirectory)) {

+-                    if (subDirectory == this.FileOutputDirectory + System.IO.Path.DirectorySeparatorChar + "cache") {

++                    if (subDirectory == SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + "cache") {

+                         foreach (string cacheFile in System.IO.Directory.GetFiles(subDirectory))

+                             try {

+                                 System.IO.File.Delete(cacheFile);

+diff --git a/PacketParser/PacketHandler.cs b/PacketParser/PacketHandler.cs
+index a600200..cb78071 100644
+--- a/PacketParser/PacketHandler.cs
++++ b/PacketParser/PacketHandler.cs
+@@ -1,4 +1,4 @@
+-//  Copyright: Erik Hjelmvik, NETRESEC

++//  Copyright: Erik Hjelmvik, NETRESEC

+ //

+ //  NetworkMiner is free software; you can redistribute it and/or modify it

+ //  under the terms of the GNU General Public License

+@@ -228,7 +228,7 @@ namespace PacketParser {
+             //this.networkTcpSessionDictionary=new Dictionary<int, NetworkTcpSession>();

+             this.networkTcpSessionList=new PopularityList<int, NetworkTcpSession>(200);

+             this.networkTcpSessionList.PopularityLost+=new PopularityList<int, NetworkTcpSession>.PopularityLostEventHandler(networkTcpSessionList_PopularityLost);

+-            this.FileStreamAssemblerList = new FileTransfer.FileStreamAssemblerList(this, 100, this.OutputDirectory + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY + System.IO.Path.DirectorySeparatorChar);

++            this.FileStreamAssemblerList = new FileTransfer.FileStreamAssemblerList(this, 100, SharedUtils.XdgDirectories.GetOrCreateXdgDataHome() + System.IO.Path.DirectorySeparatorChar + PacketParser.FileTransfer.FileStreamAssembler.ASSMEBLED_FILES_DIRECTORY + System.IO.Path.DirectorySeparatorChar);

+             this.FileStreamAssemblerList.PopularityLost += this.FileStreamAssemblerList_PopularityLost;

+             this.ReconstructedFileList=new List<FileTransfer.ReconstructedFile>();

+             this.credentialList=new SortedList<string, NetworkCredential>();

+@@ -874,7 +874,7 @@ namespace PacketParser {
+ 

+                     //check the frame content for keywords

+                     foreach (byte[] keyword in this.keywordList) {

+-                        //jAG SLUTADE HÄR. FUNKAR EJ VID RELOAD

++                        //jAG SLUTADE H�R. FUNKAR EJ VID RELOAD

+                         int keyIndex = receivedFrame.IndexOf(keyword);

+                         if (keyIndex >= 0) {

+                             if (networkPacket != null)

+diff --git a/SharedUtils/XdgDirectories.cs b/SharedUtils/XdgDirectories.cs
+new file mode 100644
+index 0000000..80c09e3
+--- /dev/null
++++ b/SharedUtils/XdgDirectories.cs
+@@ -0,0 +1,15 @@
++using System;

++using System.IO;

++

++namespace SharedUtils {

++    public class XdgDirectories {

++        public static string GetOrCreateXdgDataHome() {

++            string home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

++            string data = Environment.GetEnvironmentVariable("XDG_DATA_HOME") ?? home + System.IO.Path.DirectorySeparatorChar + ".local" + System.IO.Path.DirectorySeparatorChar + "share";

++            string dir = data + System.IO.Path.DirectorySeparatorChar + "NetworkMiner";

++            // Directory.CreateDirectory(dir);

++            return dir;

++        }

++

++    }

++}

diff --git a/pkgs/tools/security/sequoia-sq/default.nix b/pkgs/tools/security/sequoia-sq/default.nix
new file mode 100644
index 0000000000000..4da70b5155bfa
--- /dev/null
+++ b/pkgs/tools/security/sequoia-sq/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, fetchFromGitLab
+, lib
+, darwin
+, nettle
+, nix-update-script
+, rustPlatform
+, pkg-config
+, openssl
+, sqlite
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sequoia-sq";
+  version = "0.30.1";
+
+  src = fetchFromGitLab {
+    owner = "sequoia-pgp";
+    repo = "sequoia-sq";
+    rev = "v${version}";
+    hash = "sha256-uFcmuyz0JsUTvKqCb+3t8JdB4Dn4hJq00jeEhvMNW18=";
+  };
+
+  cargoHash = "sha256-9UQojec2jy9DVwQQplaKuPWYCeRXtWtdzj1d/LLyfJQ=";
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = [
+    openssl
+    sqlite
+    nettle
+  ] ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  # Sometimes, tests fail on CI (ofborg) & hydra without this
+  checkFlags = [
+    # doctest for sequoia-ipc fail for some reason
+    "--skip=macros::assert_send_and_sync"
+    "--skip=macros::time_it"
+  ];
+
+  # Install manual pages, see https://gitlab.com/sequoia-pgp/sequoia-sq#building
+  postInstall = ''
+    mkdir -p $out/share/man
+    SQ_MAN=$out/share/man/man1 cargo run
+  '';
+
+  doCheck = true;
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A cool new OpenPGP implementation";
+    homepage = "https://sequoia-pgp.org/";
+    changelog = "https://gitlab.com/sequoia-pgp/sequoia-sq/-/blob/v${version}/NEWS";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ minijackson doronbehar ];
+    mainProgram = "sq";
+  };
+}
diff --git a/pkgs/tools/security/sequoia/default.nix b/pkgs/tools/security/sequoia/default.nix
deleted file mode 100644
index aed53b57f55d8..0000000000000
--- a/pkgs/tools/security/sequoia/default.nix
+++ /dev/null
@@ -1,109 +0,0 @@
-{ stdenv
-, fetchFromGitLab
-, fetchpatch
-, lib
-, darwin
-, git
-, nettle
-, nix-update-script
-, cargo
-, rustc
-, rustPlatform
-, pkg-config
-, openssl
-, sqlite
-, capnproto
-, ensureNewerSourcesForZipFilesHook
-, pythonSupport ? true
-, pythonPackages ? null
-}:
-
-assert pythonSupport -> pythonPackages != null;
-
-rustPlatform.buildRustPackage rec {
-  pname = "sequoia";
-  # Upstream has separate version numbering for the library and the CLI frontend.
-  # This derivation provides the CLI frontend, and thus uses its version number.
-  version = "0.28.0";
-
-  src = fetchFromGitLab {
-    owner = "sequoia-pgp";
-    repo = "sequoia";
-    rev = "sq/v${version}";
-    hash = "sha256-T7WOYMqyBeVHs+4w8El99t0NTUKqMW1QeAkNGKcaWr0=";
-  };
-
-  cargoHash = "sha256-zaAAEFBumfHU4hGzAOmLvBu3X4J7LAlmexqixHtVPr8=";
-
-  patches = [
-    (fetchpatch {
-      url = "https://gitlab.com/sequoia-pgp/sequoia/-/commit/4dc6e624c2394936dc447f18aedb4a4810bb2ddb.patch";
-      hash = "sha256-T6hh7U1gvKvyn/OCuJBvLM7TG1VFnpvpAiWS72m3P6I=";
-    })
-  ];
-
-  nativeBuildInputs = [
-    pkg-config
-    cargo
-    rustc
-    git
-    rustPlatform.bindgenHook
-    ensureNewerSourcesForZipFilesHook
-    capnproto
-  ] ++
-    lib.optionals pythonSupport [ pythonPackages.setuptools ]
-  ;
-
-  nativeCheckInputs = lib.optionals pythonSupport [
-    pythonPackages.pytest
-    pythonPackages.pytest-runner
-  ];
-
-  buildInputs = [
-    openssl
-    sqlite
-    nettle
-  ] ++ lib.optionals pythonSupport [ pythonPackages.python pythonPackages.cffi ]
-    ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ]
-  ;
-
-  makeFlags = [
-    "PREFIX=${placeholder "out"}"
-    # Defaults to "ginstall" from some reason, although upstream's Makefiles check uname
-    "INSTALL=install"
-  ];
-
-  buildFlags = [
-    "build-release"
-  ];
-
-  # Sometimes, tests fail on CI (ofborg) & hydra without this
-  checkFlags = [
-    # doctest for sequoia-ipc fail for some reason
-    "--skip=macros::assert_send_and_sync"
-    "--skip=macros::time_it"
-  ];
-
-  preInstall = lib.optionalString pythonSupport ''
-    export installFlags="PYTHONPATH=$PYTHONPATH:$out/${pythonPackages.python.sitePackages}"
-  '' + lib.optionalString (!pythonSupport) ''
-    export makeFlags="PYTHON=disable"
-  '';
-
-  # Don't use buildRustPackage phases, only use it for rust deps setup
-  configurePhase = null;
-  buildPhase = null;
-  doCheck = true;
-  checkPhase = null;
-  installPhase = null;
-
-  passthru.updateScript = nix-update-script { };
-
-  meta = with lib; {
-    description = "A cool new OpenPGP implementation";
-    homepage = "https://sequoia-pgp.org/";
-    license = licenses.gpl2Plus;
-    maintainers = with maintainers; [ minijackson doronbehar ];
-    mainProgram = "sq";
-  };
-}
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index efae4ef550887..3969dc57923dd 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -1537,6 +1537,7 @@ mapAliases ({
   seeks = throw "seeks has been removed from nixpkgs, as it was unmaintained"; # Added 2020-06-21
   sepolgen = throw "sepolgen was merged into selinux-python"; # Added 2021-11-11
   session-desktop-appimage = session-desktop;
+  sequoia = sequoia-sq; # Added 2023-06-26
   sget = throw "sget has been removed from nixpkgs, as it is not supported upstream anymore see https://github.com/sigstore/sget/issues/145"; # Added 2023-05-26
   shared_mime_info = throw "'shared_mime_info' has been renamed to/replaced by 'shared-mime-info'"; # Converted to throw 2022-02-22
   inherit (libsForQt5.mauiPackages) shelf; # added 2022-05-17
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index b85950f1e450a..2187b3896cf50 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -9698,6 +9698,8 @@ with pkgs;
 
   netsniff-ng = callPackage ../tools/networking/netsniff-ng { };
 
+  networkminer = callPackage ../tools/security/networkminer { };
+
   nixpacks = callPackage ../applications/virtualization/nixpacks { };
 
   nkeys = callPackage ../tools/system/nkeys { };
@@ -12443,9 +12445,7 @@ with pkgs;
 
   seqdiag = with python3Packages; toPythonApplication seqdiag;
 
-  sequoia = callPackage ../tools/security/sequoia {
-    pythonPackages = python3Packages;
-  };
+  sequoia-sq = callPackage ../tools/security/sequoia-sq { };
 
   sequoia-chameleon-gnupg = callPackage ../tools/security/sequoia-chameleon-gnupg { };
 
@@ -13643,6 +13643,8 @@ with pkgs;
 
   usbmuxd2 = callPackage ../tools/misc/usbmuxd2 { };
 
+  usort = with python3Packages; toPythonApplication usort;
+
   ustreamer = callPackage ../applications/video/ustreamer { };
 
   usync = callPackage ../applications/misc/usync { };
@@ -14021,6 +14023,8 @@ with pkgs;
 
   udunits = callPackage ../development/libraries/udunits { };
 
+  ufmt = with python3Packages; toPythonApplication ufmt;
+
   uftp = callPackage ../servers/uftp { };
 
   uhttpmock = callPackage ../development/libraries/uhttpmock { };
@@ -37483,6 +37487,8 @@ with pkgs;
 
   steam-acf = callPackage ../tools/games/steam-acf { };
 
+  steamback = python311.pkgs.callPackage ../tools/games/steamback { };
+
   protontricks = python3Packages.callPackage ../tools/package-management/protontricks {
     inherit winetricks steam-run yad;
   };
diff --git a/pkgs/top-level/python-aliases.nix b/pkgs/top-level/python-aliases.nix
index c8418129950c3..c0f63cc0d865c 100644
--- a/pkgs/top-level/python-aliases.nix
+++ b/pkgs/top-level/python-aliases.nix
@@ -297,6 +297,7 @@ mapAliases ({
   scikitimage = scikit-image; # added 2023-05-14
   scikitlearn = scikit-learn; # added 2021-07-21
   selectors34 = throw "selectors34 has been removed: functionality provided by Python itself; archived by upstream."; # added 2021-06-10
+  sequoia = throw "python3Packages.sequoia was replaced by pysequoia - built from a dedicated repository, with a new API."; # added 2023-06-24
   setuptools_scm = setuptools-scm; # added 2021-06-03
   sharkiqpy = sharkiq; # added 2022-05-21
   ssh-mitm = throw "ssh-mitm was removed in favor of the top-level ssh-mitm"; # added 2023-05-09
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 3e2540841e3db..5f0c88314eeae 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -6456,6 +6456,8 @@ self: super: with self; {
 
   more-properties = callPackage ../development/python-modules/more-properties { };
 
+  moreorless = callPackage ../development/python-modules/moreorless { };
+
   moretools = callPackage ../development/python-modules/moretools { };
 
   morfessor = callPackage ../development/python-modules/morfessor { };
@@ -7823,6 +7825,8 @@ self: super: with self; {
 
   pysbd = callPackage ../development/python-modules/pysbd { };
 
+  pysequoia = callPackage ../development/python-modules/pysequoia { };
+
   pyschemes = callPackage ../development/python-modules/pyschemes { };
 
   pyschlage = callPackage ../development/python-modules/pyschlage { };
@@ -11149,11 +11153,6 @@ self: super: with self; {
 
   seqeval = callPackage ../development/python-modules/seqeval { };
 
-  sequoia = disabledIf isPyPy (toPythonModule (pkgs.sequoia.override {
-    pythonPackages = self;
-    pythonSupport = true;
-  }));
-
   serialio = callPackage ../development/python-modules/serialio { };
 
   serpent = callPackage ../development/python-modules/serpent { };
@@ -11814,6 +11813,8 @@ self: super: with self; {
 
   stdlib-list = callPackage ../development/python-modules/stdlib-list { };
 
+  stdlibs = callPackage ../development/python-modules/stdlibs { };
+
   steamodd = callPackage ../development/python-modules/steamodd { };
 
   steamship = callPackage ../development/python-modules/steamship { };
@@ -12454,6 +12455,8 @@ self: super: with self; {
 
   trackpy = callPackage ../development/python-modules/trackpy { };
 
+  trailrunner = callPackage ../development/python-modules/trailrunner {};
+
   trainer = callPackage ../development/python-modules/trainer {};
 
   traitlets = callPackage ../development/python-modules/traitlets { };
@@ -12710,6 +12713,8 @@ self: super: with self; {
     inherit (pkgs.xorg) libX11 libXext;
   };
 
+  ufmt = callPackage ../development/python-modules/ufmt { };
+
   ufo2ft = callPackage ../development/python-modules/ufo2ft { };
 
   ufoLib2 = callPackage ../development/python-modules/ufoLib2 { };
@@ -12866,6 +12871,8 @@ self: super: with self; {
 
   ush = callPackage ../development/python-modules/ush { };
 
+  usort = callPackage ../development/python-modules/usort { };
+
   utils = callPackage ../development/python-modules/utils { };
 
   uuid = callPackage ../development/python-modules/uuid { };
@@ -12982,6 +12989,8 @@ self: super: with self; {
 
   vobject = callPackage ../development/python-modules/vobject { };
 
+  volatile = callPackage ../development/python-modules/volatile { };
+
   volkszaehler = callPackage ../development/python-modules/volkszaehler { };
 
   voluptuous = callPackage ../development/python-modules/voluptuous { };
diff --git a/pkgs/top-level/python2-packages.nix b/pkgs/top-level/python2-packages.nix
index a79dc31ed9dd9..1a19118678eb3 100644
--- a/pkgs/top-level/python2-packages.nix
+++ b/pkgs/top-level/python2-packages.nix
@@ -71,8 +71,6 @@ with self; with super; {
 
   scandir = callPackage ../development/python2-modules/scandir { };
 
-  sequoia = disabled super.sequoia;
-
   setuptools = callPackage ../development/python2-modules/setuptools { };
 
   setuptools-scm = callPackage ../development/python2-modules/setuptools-scm { };