summary refs log tree commit diff
diff options
context:
space:
mode:
authorVladimír Čunát <v@cunat.cz>2022-07-18 08:29:53 +0200
committerVladimír Čunát <v@cunat.cz>2022-07-18 08:29:53 +0200
commit250922fd1e061f2132d33b778424f4e9ed42354a (patch)
treec26970f54a01d8d612c82818de8d2104172b9fa0
parent0ff0b14968e7474fbb917fbb096a8d89d121922f (diff)
parent950a258b9ef24ca4346bbf722a694c2ab54e4654 (diff)
downloadnixpkgs-250922fd1e061f2132d33b778424f4e9ed42354a.tar
nixpkgs-250922fd1e061f2132d33b778424f4e9ed42354a.tar.gz
nixpkgs-250922fd1e061f2132d33b778424f4e9ed42354a.tar.bz2
nixpkgs-250922fd1e061f2132d33b778424f4e9ed42354a.tar.lz
nixpkgs-250922fd1e061f2132d33b778424f4e9ed42354a.tar.xz
nixpkgs-250922fd1e061f2132d33b778424f4e9ed42354a.tar.zst
nixpkgs-250922fd1e061f2132d33b778424f4e9ed42354a.zip
Merge branch 'master' into staging-next
-rw-r--r--maintainers/maintainer-list.nix14
-rw-r--r--nixos/doc/manual/from_md/release-notes/rl-2211.section.xml9
-rw-r--r--nixos/doc/manual/release-notes/rl-2211.section.md2
-rw-r--r--nixos/modules/module-list.nix2
-rw-r--r--nixos/modules/programs/streamdeck-ui.nix28
-rw-r--r--nixos/modules/services/continuous-integration/jenkins/job-builder.nix2
-rw-r--r--nixos/modules/services/security/pass-secret-service.nix27
-rw-r--r--nixos/tests/all-tests.nix2
-rw-r--r--nixos/tests/libuiohook.nix21
-rw-r--r--nixos/tests/pass-secret-service.nix69
-rw-r--r--pkgs/applications/graphics/ImageMagick/6.x.nix87
-rw-r--r--pkgs/applications/graphics/ImageMagick/default.nix119
-rw-r--r--pkgs/applications/misc/bottles/default.nix6
-rw-r--r--pkgs/applications/misc/gpsbabel/default.nix1
-rw-r--r--pkgs/applications/misc/pass-secret-service/default.nix44
-rw-r--r--pkgs/applications/misc/pass-secret-service/int_from_bytes-deprecation-fix.patch22
-rw-r--r--pkgs/applications/misc/sigal/default.nix2
-rw-r--r--pkgs/applications/misc/streamdeck-ui/default.nix95
-rw-r--r--pkgs/applications/misc/tut/default.nix6
-rw-r--r--pkgs/applications/networking/browsers/chromium/upstream-info.json18
-rw-r--r--pkgs/applications/networking/instant-messengers/gajim/default.nix4
-rw-r--r--pkgs/applications/networking/instant-messengers/webex/default.nix175
-rw-r--r--pkgs/applications/networking/remote/wayvnc/default.nix2
-rw-r--r--pkgs/applications/science/engineering/strictdoc/conftest.py.patch15
-rw-r--r--pkgs/applications/science/engineering/strictdoc/default.nix100
-rw-r--r--pkgs/applications/science/math/nauty/default.nix4
-rw-r--r--pkgs/applications/science/math/sage/sage-src.nix7
-rw-r--r--pkgs/applications/version-management/git-and-tools/lab/default.nix16
-rw-r--r--pkgs/applications/virtualization/crosvm/default.nix2
-rw-r--r--pkgs/applications/virtualization/qemu/default.nix8
-rw-r--r--pkgs/applications/window-managers/weston/default.nix6
-rw-r--r--pkgs/data/fonts/iosevka/bin.nix2
-rw-r--r--pkgs/data/fonts/iosevka/variants.nix184
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-files/default.nix10
-rw-r--r--pkgs/development/compilers/dotnet/build-dotnet.nix7
-rw-r--r--pkgs/development/compilers/ligo/default.nix3
-rw-r--r--pkgs/development/compilers/ligo/ligo.patch134
-rw-r--r--pkgs/development/compilers/purescript/purescript/default.nix1
-rw-r--r--pkgs/development/coq-modules/mathcomp-finmap/default.nix2
-rw-r--r--pkgs/development/libraries/catch2/default.nix2
-rw-r--r--pkgs/development/libraries/eclib/default.nix4
-rw-r--r--pkgs/development/libraries/fcppt/default.nix10
-rw-r--r--pkgs/development/libraries/libgsf/default.nix4
-rw-r--r--pkgs/development/libraries/libplacebo/default.nix4
-rw-r--r--pkgs/development/libraries/libuiohook/default.nix71
-rw-r--r--pkgs/development/libraries/metal/default.nix23
-rw-r--r--pkgs/development/libraries/neatvnc/default.nix2
-rw-r--r--pkgs/development/libraries/protobuf/3.20.nix6
-rw-r--r--pkgs/development/libraries/protobuf/3.21.nix6
-rw-r--r--pkgs/development/libraries/protobuf/generic-v3-cmake.nix107
-rw-r--r--pkgs/development/libraries/science/astronomy/stellarsolver/default.nix4
-rw-r--r--pkgs/development/libraries/x265/default.nix2
-rw-r--r--pkgs/development/ocaml-modules/bap/default.nix10
-rw-r--r--pkgs/development/ocaml-modules/biocaml/default.nix9
-rw-r--r--pkgs/development/ocaml-modules/bistro/default.nix11
-rw-r--r--pkgs/development/ocaml-modules/cohttp/async.nix12
-rw-r--r--pkgs/development/ocaml-modules/faraday/async.nix7
-rw-r--r--pkgs/development/ocaml-modules/hack_parallel/default.nix8
-rw-r--r--pkgs/development/ocaml-modules/hack_parallel/hack_parallel.patch68
-rw-r--r--pkgs/development/ocaml-modules/janestreet/0.15.nix1007
-rw-r--r--pkgs/development/ocaml-modules/janestreet/bonsai_jsoo_4_0.patch13
-rw-r--r--pkgs/development/ocaml-modules/janestreet/janePackage_0_15.nix31
-rw-r--r--pkgs/development/ocaml-modules/janestreet/pythonlib.patch22
-rw-r--r--pkgs/development/ocaml-modules/phylogenetics/default.nix17
-rw-r--r--pkgs/development/ocaml-modules/tls/default.nix6
-rw-r--r--pkgs/development/python-modules/dalle-mini/default.nix4
-rw-r--r--pkgs/development/python-modules/datauri/default.nix37
-rw-r--r--pkgs/development/python-modules/fontparts/default.nix4
-rw-r--r--pkgs/development/python-modules/hg-evolve/default.nix4
-rw-r--r--pkgs/development/python-modules/iminuit/default.nix4
-rw-r--r--pkgs/development/python-modules/mitmproxy/default.nix6
-rw-r--r--pkgs/development/python-modules/nessclient/default.nix6
-rw-r--r--pkgs/development/python-modules/protobuf/default.nix7
-rw-r--r--pkgs/development/python-modules/pygtrie/default.nix4
-rw-r--r--pkgs/development/python-modules/pyside2/default.nix10
-rw-r--r--pkgs/development/python-modules/pytest-testmon/default.nix4
-rw-r--r--pkgs/development/python-modules/reqif/default.nix60
-rw-r--r--pkgs/development/python-modules/shiboken2/default.nix5
-rw-r--r--pkgs/development/python-modules/simplisafe-python/default.nix4
-rw-r--r--pkgs/development/python-modules/sqlite-utils/default.nix4
-rw-r--r--pkgs/development/python-modules/streamdeck/default.nix36
-rw-r--r--pkgs/development/python-modules/streamdeck/hardcode-libusb.patch13
-rw-r--r--pkgs/development/python-modules/testcontainers/default.nix39
-rw-r--r--pkgs/development/python-modules/textx/default.nix178
-rw-r--r--pkgs/development/python-modules/textx/tests.nix53
-rw-r--r--pkgs/development/python-modules/xlib/default.nix4
-rw-r--r--pkgs/development/python-modules/xlib/fix-no-protocol-specified.patch13
-rw-r--r--pkgs/development/tools/analysis/cppcheck/default.nix17
-rw-r--r--pkgs/development/tools/bacon/default.nix6
-rw-r--r--pkgs/development/tools/build-managers/bear/default.nix4
-rw-r--r--pkgs/development/tools/build-managers/bear/no-double-relative.patch35
-rw-r--r--pkgs/development/tools/cambalache/default.nix4
-rw-r--r--pkgs/development/tools/comby/comby.patch1025
-rw-r--r--pkgs/development/tools/comby/default.nix3
-rw-r--r--pkgs/development/tools/dprint/default.nix6
-rw-r--r--pkgs/development/tools/rust/rustup/default.nix2
-rw-r--r--pkgs/development/tools/sshs/default.nix32
-rw-r--r--pkgs/servers/endlessh-go/default.nix9
-rw-r--r--pkgs/servers/monitoring/prometheus/domain-exporter.nix18
-rw-r--r--pkgs/servers/sql/postgresql/ext/age.nix11
-rw-r--r--pkgs/servers/sql/postgresql/ext/pg_cron.nix4
-rw-r--r--pkgs/tools/admin/gtk-vnc/default.nix4
-rw-r--r--pkgs/tools/misc/dua/default.nix6
-rw-r--r--pkgs/tools/misc/flitter/default.nix12
-rw-r--r--pkgs/tools/misc/flitter/flitter.patch13
-rw-r--r--pkgs/tools/misc/page/default.nix6
-rw-r--r--pkgs/tools/misc/patdiff/default.nix4
-rw-r--r--pkgs/tools/typesetting/satysfi/default.nix2
-rw-r--r--pkgs/tools/virtualization/linode-cli/default.nix4
-rw-r--r--pkgs/top-level/aliases.nix1
-rw-r--r--pkgs/top-level/all-packages.nix110
-rw-r--r--pkgs/top-level/ocaml-packages.nix11
-rw-r--r--pkgs/top-level/python-packages.nix10
113 files changed, 4154 insertions, 428 deletions
diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix
index 40c834d9751..1a0b2ab335a 100644
--- a/maintainers/maintainer-list.nix
+++ b/maintainers/maintainer-list.nix
@@ -893,6 +893,13 @@
     githubId = 661909;
     name = "Antonio Nuno Monteiro";
   };
+  anoa = {
+    matrix = "@andrewm:amorgan.xyz";
+    email = "andrew@amorgan.xyz";
+    github = "anoadragon453";
+    githubId = 1342360;
+    name = "Andrew Morgan";
+  };
   anpryl = {
     email = "anpryl@gmail.com";
     github = "anpryl";
@@ -5405,6 +5412,13 @@
     githubId = 40234257;
     name = "ilkecan bozdogan";
   };
+  ihatethefrench =  {
+    email = "michal@tar.black";
+    matrix = "@michal:tar.black";
+    github = "ihatethefrench";
+    githubId = 30374463;
+    name = "Michal S.";
+  };
   illegalprime = {
     email = "themichaeleden@gmail.com";
     github = "illegalprime";
diff --git a/nixos/doc/manual/from_md/release-notes/rl-2211.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2211.section.xml
index 550dddfaf35..864b6e47db2 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2211.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2211.section.xml
@@ -343,6 +343,15 @@
       </listitem>
       <listitem>
         <para>
+          The <literal>pass-secret-service</literal> package now
+          includes systemd units from upstream, so adding it to the
+          NixOS <literal>services.dbus.packages</literal> option will
+          make it start automatically as a systemd user service when an
+          application tries to talk to the libsecret D-Bus API.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
           There is a new module for the <literal>thunar</literal>
           program (the Xfce file manager), which depends on the
           <literal>xfconf</literal> dbus service, and also has a dbus
diff --git a/nixos/doc/manual/release-notes/rl-2211.section.md b/nixos/doc/manual/release-notes/rl-2211.section.md
index b652419bcf1..d4059e73932 100644
--- a/nixos/doc/manual/release-notes/rl-2211.section.md
+++ b/nixos/doc/manual/release-notes/rl-2211.section.md
@@ -128,6 +128,8 @@ Use `configure.packages` instead.
 
 - Add udev rules for the Teensy family of microcontrollers.
 
+- The `pass-secret-service` package now includes systemd units from upstream, so adding it to the NixOS `services.dbus.packages` option will make it start automatically as a systemd user service when an application tries to talk to the libsecret D-Bus API.
+
 - There is a new module for the `thunar` program (the Xfce file manager), which depends on the `xfconf` dbus service, and also has a dbus service and a systemd unit. The option `services.xserver.desktopManager.xfce.thunarPlugins` has been renamed to `programs.thunar.plugins`, and in a future release it may be removed.
 
 - There is a new module for the `xfconf` program (the Xfce configuration storage system), which has a dbus service.
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 268ebbf18dd..82c0b5d74de 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -215,6 +215,7 @@
   ./programs/systemtap.nix
   ./programs/starship.nix
   ./programs/steam.nix
+  ./programs/streamdeck-ui.nix
   ./programs/sway.nix
   ./programs/system-config-printer.nix
   ./programs/thefuck.nix
@@ -1002,6 +1003,7 @@
   ./services/security/oauth2_proxy.nix
   ./services/security/oauth2_proxy_nginx.nix
   ./services/security/opensnitch.nix
+  ./services/security/pass-secret-service.nix
   ./services/security/privacyidea.nix
   ./services/security/physlock.nix
   ./services/security/shibboleth-sp.nix
diff --git a/nixos/modules/programs/streamdeck-ui.nix b/nixos/modules/programs/streamdeck-ui.nix
new file mode 100644
index 00000000000..1434f82660d
--- /dev/null
+++ b/nixos/modules/programs/streamdeck-ui.nix
@@ -0,0 +1,28 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+  cfg = config.programs.streamdeck-ui;
+in {
+  options.programs.streamdeck-ui = {
+    enable = mkEnableOption "streamdeck-ui";
+
+    autoStart = mkOption {
+      default = true;
+      type = types.bool;
+      description = "Whether streamdeck-ui should be started automatically.";
+    };
+  };
+
+  config = mkIf cfg.enable {
+    environment.systemPackages = with pkgs; [
+      streamdeck-ui
+      (mkIf cfg.autoStart (makeAutostartItem { name = "streamdeck-ui"; package = streamdeck-ui; }))
+    ];
+
+    services.udev.packages = with pkgs; [ streamdeck-ui ];
+  };
+
+  meta.maintainers = with maintainers; [ majiir ];
+}
diff --git a/nixos/modules/services/continuous-integration/jenkins/job-builder.nix b/nixos/modules/services/continuous-integration/jenkins/job-builder.nix
index deabeec0b29..edbf31f5ca1 100644
--- a/nixos/modules/services/continuous-integration/jenkins/job-builder.nix
+++ b/nixos/modules/services/continuous-integration/jenkins/job-builder.nix
@@ -165,7 +165,7 @@ in {
             jenkins_url="http://${jenkinsCfg.listenAddress}:${toString jenkinsCfg.port}${jenkinsCfg.prefix}"
             auth_file="$RUNTIME_DIRECTORY/jenkins_auth_file.txt"
             trap 'rm -f "$auth_file"' EXIT
-            printf "${cfg.accessUser}:@password_placeholder@" >"$auth_file"
+            (umask 0077; printf "${cfg.accessUser}:@password_placeholder@" >"$auth_file")
             "${pkgs.replace-secret}/bin/replace-secret" "@password_placeholder@" "$access_token_file" "$auth_file"
 
             if ! "${pkgs.jenkins}/bin/jenkins-cli" -s "$jenkins_url" -auth "@$auth_file" reload-configuration; then
diff --git a/nixos/modules/services/security/pass-secret-service.nix b/nixos/modules/services/security/pass-secret-service.nix
new file mode 100644
index 00000000000..6ae190eb95e
--- /dev/null
+++ b/nixos/modules/services/security/pass-secret-service.nix
@@ -0,0 +1,27 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+  cfg = config.services.passSecretService;
+in
+{
+  options.services.passSecretService = {
+    enable = mkEnableOption "pass secret service";
+
+    package = mkOption {
+      type = types.package;
+      default = pkgs.pass-secret-service;
+      defaultText = literalExpression "pkgs.pass-secret-service";
+      description = "Which pass-secret-service package to use.";
+      example = literalExpression "pkgs.pass-secret-service.override { python3 = pkgs.python310 }";
+    };
+  };
+
+  config = mkIf cfg.enable {
+    systemd.packages = [ cfg.package ];
+    services.dbus.packages = [ cfg.package ];
+  };
+
+  meta.maintainers = with maintainers; [ aidalgol ];
+}
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 3253a3c750b..03a7f17c07c 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -279,6 +279,7 @@ in {
   libresprite = handleTest ./libresprite.nix {};
   libreswan = handleTest ./libreswan.nix {};
   librewolf = handleTest ./firefox.nix { firefoxPackage = pkgs.librewolf; };
+  libuiohook = handleTest ./libuiohook.nix {};
   lidarr = handleTest ./lidarr.nix {};
   lightdm = handleTest ./lightdm.nix {};
   limesurvey = handleTest ./limesurvey.nix {};
@@ -413,6 +414,7 @@ in {
   pam-oath-login = handleTest ./pam/pam-oath-login.nix {};
   pam-u2f = handleTest ./pam/pam-u2f.nix {};
   pam-ussh = handleTest ./pam/pam-ussh.nix {};
+  pass-secret-service = handleTest ./pass-secret-service.nix {};
   pantalaimon = handleTest ./matrix/pantalaimon.nix {};
   pantheon = handleTest ./pantheon.nix {};
   paperless = handleTest ./paperless.nix {};
diff --git a/nixos/tests/libuiohook.nix b/nixos/tests/libuiohook.nix
new file mode 100644
index 00000000000..66c5033d968
--- /dev/null
+++ b/nixos/tests/libuiohook.nix
@@ -0,0 +1,21 @@
+import ./make-test-python.nix ({ pkgs, lib, ... }: {
+  name = "libuiohook";
+  meta = with lib.maintainers; { maintainers = [ anoa ]; };
+
+  nodes.client = { nodes, ... }:
+      let user = nodes.client.config.users.users.alice;
+      in {
+        imports = [ ./common/user-account.nix ./common/x11.nix ];
+
+        environment.systemPackages = [ pkgs.libuiohook.test ];
+
+        test-support.displayManager.auto.user = user.name;
+      };
+
+  testScript = { nodes, ... }:
+    let user = nodes.client.config.users.users.alice;
+    in ''
+      client.wait_for_x()
+      client.succeed("su - alice -c ${pkgs.libuiohook.test}/share/uiohook_tests >&2 &")
+    '';
+})
diff --git a/nixos/tests/pass-secret-service.nix b/nixos/tests/pass-secret-service.nix
new file mode 100644
index 00000000000..a85a508bfe1
--- /dev/null
+++ b/nixos/tests/pass-secret-service.nix
@@ -0,0 +1,69 @@
+import ./make-test-python.nix ({ pkgs, lib, ... }: {
+  name = "pass-secret-service";
+  meta.maintainers = with lib; [ aidalgol ];
+
+  nodes.machine = { nodes, pkgs, ... }:
+    {
+      imports = [ ./common/user-account.nix ];
+
+      services.passSecretService.enable = true;
+
+      environment.systemPackages = [
+        # Create a script that tries to make a request to the D-Bus secrets API.
+        (pkgs.writers.writePython3Bin "secrets-dbus-init"
+          {
+            libraries = [ pkgs.python3Packages.secretstorage ];
+          } ''
+          import secretstorage
+          print("Initializing dbus connection...")
+          connection = secretstorage.dbus_init()
+          print("Requesting default collection...")
+          collection = secretstorage.get_default_collection(connection)
+          print("Done!  dbus-org.freedesktop.secrets should now be active.")
+        '')
+        pkgs.pass
+      ];
+
+      programs.gnupg = {
+        agent.enable = true;
+        agent.pinentryFlavor = "tty";
+        dirmngr.enable = true;
+      };
+    };
+
+  # Some of the commands are run via a virtual console because they need to be
+  # run under a real login session, with D-Bus running in the environment.
+  testScript = { nodes, ... }:
+    let
+      user = nodes.machine.config.users.users.alice;
+      gpg-uid = "alice@example.net";
+      gpg-pw = "foobar9000";
+      ready-file = "/tmp/secrets-dbus-init.done";
+    in
+    ''
+      # Initialise the pass(1) storage.
+      machine.succeed("""
+        sudo -u alice gpg --pinentry-mode loopback --batch --passphrase ${gpg-pw} \
+        --quick-gen-key ${gpg-uid} \
+      """)
+      machine.succeed("sudo -u alice pass init ${gpg-uid}")
+
+      with subtest("Service is not running on login"):
+          machine.wait_until_tty_matches("1", "login: ")
+          machine.send_chars("alice\n")
+          machine.wait_until_tty_matches("1", "login: alice")
+          machine.wait_until_succeeds("pgrep login")
+          machine.wait_until_tty_matches("1", "Password: ")
+          machine.send_chars("${user.password}\n")
+          machine.wait_until_succeeds("pgrep -u alice bash")
+
+          _, output = machine.systemctl("status dbus-org.freedesktop.secrets --no-pager", "alice")
+          assert "Active: inactive (dead)" in output
+
+      with subtest("Service starts after a client tries to talk to the D-Bus API"):
+          machine.send_chars("secrets-dbus-init; touch ${ready-file}\n")
+          machine.wait_for_file("${ready-file}")
+          _, output = machine.systemctl("status dbus-org.freedesktop.secrets --no-pager", "alice")
+          assert "Active: active (running)" in output
+    '';
+})
diff --git a/pkgs/applications/graphics/ImageMagick/6.x.nix b/pkgs/applications/graphics/ImageMagick/6.x.nix
index 032af6cf614..d0b76706dc9 100644
--- a/pkgs/applications/graphics/ImageMagick/6.x.nix
+++ b/pkgs/applications/graphics/ImageMagick/6.x.nix
@@ -1,6 +1,25 @@
 { lib, stdenv, fetchFromGitHub, pkg-config, libtool
-, bzip2, zlib, libX11, libXext, libXt, fontconfig, freetype, ghostscript, libjpeg, djvulibre
-, lcms2, openexr, libpng, liblqr1, librsvg, libtiff, libxml2, openjpeg, libwebp, fftw, libheif, libde265
+, bzip2Support ? true, bzip2
+, zlibSupport ? true, zlib
+, libX11Support ? !stdenv.hostPlatform.isMinGW, libX11
+, libXtSupport ? !stdenv.hostPlatform.isMinGW, libXt
+, fontconfigSupport ? true, fontconfig
+, freetypeSupport ? true, freetype
+, ghostscriptSupport ? false, ghostscript
+, libjpegSupport ? true, libjpeg
+, djvulibreSupport ? true, djvulibre
+, lcms2Support ? true, lcms2
+, openexrSupport ? !stdenv.hostPlatform.isMinGW, openexr
+, libpngSupport ? true, libpng
+, liblqr1Support ? true, liblqr1
+, librsvgSupport ? !stdenv.hostPlatform.isMinGW, librsvg
+, libtiffSupport ? true, libtiff
+, libxml2Support ? true, libxml2
+, openjpegSupport ? !stdenv.hostPlatform.isMinGW, openjpeg
+, libwebpSupport ? !stdenv.hostPlatform.isMinGW, libwebp
+, libheifSupport ? true, libheif
+, libde265Support ? true, libde265
+, fftw
 , ApplicationServices, Foundation
 }:
 
@@ -30,35 +49,47 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  configureFlags =
-    [ "--with-frozenpaths" ]
-    ++ (if arch != null then [ "--with-gcc-arch=${arch}" ] else [ "--without-gcc-arch" ])
-    ++ lib.optional (librsvg != null) "--with-rsvg"
-    ++ lib.optional (liblqr1 != null) "--with-lqr"
-    ++ lib.optionals (ghostscript != null)
-      [ "--with-gs-font-dir=${ghostscript}/share/ghostscript/fonts"
-        "--with-gslib"
-      ]
-    ++ lib.optionals (stdenv.hostPlatform.isMinGW)
-      [ "--enable-static" "--disable-shared" ] # due to libxml2 being without DLLs ATM
-    ;
+  configureFlags = [
+    "--with-frozenpaths"
+    (lib.withFeatureAs (arch != null) "gcc-arch" arch)
+    (lib.withFeature librsvgSupport "rsvg")
+    (lib.withFeature liblqr1Support "lqr")
+    (lib.withFeatureAs ghostscriptSupport "gs-font-dir" "${ghostscript}/share/ghostscript/fonts")
+    (lib.withFeature ghostscriptSupport "gslib")
+  ] ++ lib.optionals stdenv.hostPlatform.isMinGW [
+    # due to libxml2 being without DLLs ATM
+    "--enable-static" "--disable-shared"
+  ];
 
   nativeBuildInputs = [ pkg-config libtool ];
 
-  buildInputs =
-    [ zlib fontconfig freetype ghostscript
-      liblqr1 libpng libtiff libxml2 libheif libde265 djvulibre
-    ]
-    ++ lib.optionals (!stdenv.hostPlatform.isMinGW)
-      [ openexr librsvg openjpeg ]
-    ++ lib.optionals stdenv.isDarwin
-      [ ApplicationServices Foundation ];
+  buildInputs = [ ]
+    ++ lib.optional zlibSupport zlib
+    ++ lib.optional fontconfigSupport fontconfig
+    ++ lib.optional ghostscriptSupport ghostscript
+    ++ lib.optional liblqr1Support liblqr1
+    ++ lib.optional libpngSupport libpng
+    ++ lib.optional libtiffSupport libtiff
+    ++ lib.optional libxml2Support libxml2
+    ++ lib.optional libheifSupport libheif
+    ++ lib.optional libde265Support libde265
+    ++ lib.optional djvulibreSupport djvulibre
+    ++ lib.optional openexrSupport openexr
+    ++ lib.optional librsvgSupport librsvg
+    ++ lib.optional openjpegSupport openjpeg
+    ++ lib.optionals stdenv.isDarwin [
+      ApplicationServices
+      Foundation
+    ];
 
-  propagatedBuildInputs =
-    [ bzip2 freetype libjpeg lcms2 fftw ]
-    ++ lib.optionals (!stdenv.hostPlatform.isMinGW)
-      [ libX11 libXext libXt libwebp ]
-    ;
+  propagatedBuildInputs = [ fftw ]
+    ++ lib.optional bzip2Support bzip2
+    ++ lib.optional freetypeSupport freetype
+    ++ lib.optional libjpegSupport libjpeg
+    ++ lib.optional lcms2Support lcms2
+    ++ lib.optional libX11Support libX11
+    ++ lib.optional libXtSupport libXt
+    ++ lib.optional libwebpSupport libwebp;
 
   doCheck = false; # fails 6 out of 76 tests
 
@@ -72,7 +103,7 @@ stdenv.mkDerivation rec {
       substituteInPlace "$file" --replace ${pkg-config}/bin/pkg-config \
         "PKG_CONFIG_PATH='$dev/lib/pkgconfig' '${pkg-config}/bin/${pkg-config.targetPrefix}pkg-config'"
     done
-  '' + lib.optionalString (ghostscript != null) ''
+  '' + lib.optionalString ghostscriptSupport ''
     for la in $out/lib/*.la; do
       sed 's|-lgs|-L${lib.getLib ghostscript}/lib -lgs|' -i $la
     done
diff --git a/pkgs/applications/graphics/ImageMagick/default.nix b/pkgs/applications/graphics/ImageMagick/default.nix
index 0b4416aca51..3b58aba1e55 100644
--- a/pkgs/applications/graphics/ImageMagick/default.nix
+++ b/pkgs/applications/graphics/ImageMagick/default.nix
@@ -3,28 +3,27 @@
 , fetchFromGitHub
 , pkg-config
 , libtool
-, bzip2
-, zlib
-, libX11
-, libXext
-, libXt
-, fontconfig
-, freetype
-, ghostscript
-, libjpeg
-, djvulibre
-, lcms2
-, openexr
-, libjxl
-, libpng
-, liblqr1
-, libraw
-, librsvg
-, libtiff
-, libxml2
-, openjpeg
-, libwebp
-, libheif
+, bzip2Support ? true, bzip2
+, zlibSupport ? true, zlib
+, libX11Support ? !stdenv.hostPlatform.isMinGW, libX11
+, libXtSupport ? !stdenv.hostPlatform.isMinGW, libXt
+, fontconfigSupport ? true, fontconfig
+, freetypeSupport ? true, freetype
+, ghostscriptSupport ? false, ghostscript
+, libjpegSupport ? true, libjpeg
+, djvulibreSupport ? true, djvulibre
+, lcms2Support ? true, lcms2
+, openexrSupport ? !stdenv.hostPlatform.isMinGW, openexr
+, libjxlSupport ? true, libjxl
+, libpngSupport ? true, libpng
+, liblqr1Support ? true, liblqr1
+, librawSupport ? true, libraw
+, librsvgSupport ? !stdenv.hostPlatform.isMinGW, librsvg
+, libtiffSupport ? true, libtiff
+, libxml2Support ? true, libxml2
+, openjpegSupport ? !stdenv.hostPlatform.isMinGW, openjpeg
+, libwebpSupport ? !stdenv.hostPlatform.isMinGW, libwebp
+, libheifSupport ? true, libheif
 , potrace
 , curl
 , ApplicationServices
@@ -33,6 +32,8 @@
 , imagemagick
 }:
 
+assert libXtSupport -> libX11Support;
+
 let
   arch =
     if stdenv.hostPlatform.system == "i686-linux" then "i686"
@@ -59,51 +60,49 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  configureFlags =
-    [ "--with-frozenpaths" ]
-    ++ (if arch != null then [ "--with-gcc-arch=${arch}" ] else [ "--without-gcc-arch" ])
-    ++ lib.optional (librsvg != null) "--with-rsvg"
-    ++ lib.optional (liblqr1 != null) "--with-lqr"
-    ++ lib.optional (libjxl != null ) "--with-jxl"
-    ++ lib.optionals (ghostscript != null)
-      [
-        "--with-gs-font-dir=${ghostscript}/share/ghostscript/fonts"
-        "--with-gslib"
-      ]
-    ++ lib.optionals stdenv.hostPlatform.isMinGW
-      [ "--enable-static" "--disable-shared" ] # due to libxml2 being without DLLs ATM
-  ;
+  configureFlags = [
+    "--with-frozenpaths"
+    (lib.withFeatureAs (arch != null) "gcc-arch" arch)
+    (lib.withFeature librsvgSupport "rsvg")
+    (lib.withFeature liblqr1Support "lqr")
+    (lib.withFeature libjxlSupport "jxl")
+    (lib.withFeatureAs ghostscriptSupport "gs-font-dir" "${ghostscript}/share/ghostscript/fonts")
+    (lib.withFeature ghostscriptSupport "gslib")
+  ] ++ lib.optionals stdenv.hostPlatform.isMinGW [
+    # due to libxml2 being without DLLs ATM
+    "--enable-static" "--disable-shared"
+  ];
 
   nativeBuildInputs = [ pkg-config libtool ];
 
-  buildInputs =
-    [
-      zlib
-      fontconfig
-      freetype
-      ghostscript
-      potrace
-      liblqr1
-      libpng
-      libraw
-      libtiff
-      libxml2
-      libheif
-      djvulibre
-      libjxl
-    ]
-    ++ lib.optionals (!stdenv.hostPlatform.isMinGW)
-      [ openexr librsvg openjpeg ]
+  buildInputs = [ potrace ]
+    ++ lib.optional zlibSupport zlib
+    ++ lib.optional fontconfigSupport fontconfig
+    ++ lib.optional ghostscriptSupport ghostscript
+    ++ lib.optional liblqr1Support liblqr1
+    ++ lib.optional libpngSupport libpng
+    ++ lib.optional librawSupport libraw
+    ++ lib.optional libtiffSupport libtiff
+    ++ lib.optional libxml2Support libxml2
+    ++ lib.optional libheifSupport libheif
+    ++ lib.optional djvulibreSupport djvulibre
+    ++ lib.optional libjxlSupport libjxl
+    ++ lib.optional openexrSupport openexr
+    ++ lib.optional librsvgSupport librsvg
+    ++ lib.optional openjpegSupport openjpeg
     ++ lib.optionals stdenv.isDarwin [
       ApplicationServices
       Foundation
     ];
 
-  propagatedBuildInputs =
-    [ bzip2 freetype libjpeg lcms2 curl ]
-    ++ lib.optionals (!stdenv.hostPlatform.isMinGW)
-      [ libX11 libXext libXt libwebp ]
-  ;
+  propagatedBuildInputs = [ curl ]
+    ++ lib.optional bzip2Support bzip2
+    ++ lib.optional freetypeSupport freetype
+    ++ lib.optional libjpegSupport libjpeg
+    ++ lib.optional lcms2Support lcms2
+    ++ lib.optional libX11Support libX11
+    ++ lib.optional libXtSupport libXt
+    ++ lib.optional libwebpSupport libwebp;
 
   postInstall = ''
     (cd "$dev/include" && ln -s ImageMagick* ImageMagick)
@@ -113,7 +112,7 @@ stdenv.mkDerivation rec {
       substituteInPlace "$file" --replace pkg-config \
         "PKG_CONFIG_PATH='$dev/lib/pkgconfig' '${pkg-config}/bin/${pkg-config.targetPrefix}pkg-config'"
     done
-  '' + lib.optionalString (ghostscript != null) ''
+  '' + lib.optionalString ghostscriptSupport ''
     for la in $out/lib/*.la; do
       sed 's|-lgs|-L${lib.getLib ghostscript}/lib -lgs|' -i $la
     done
diff --git a/pkgs/applications/misc/bottles/default.nix b/pkgs/applications/misc/bottles/default.nix
index bf11f3e7f42..9b24e55cfbb 100644
--- a/pkgs/applications/misc/bottles/default.nix
+++ b/pkgs/applications/misc/bottles/default.nix
@@ -1,4 +1,4 @@
-{ lib, fetchFromGitHub
+{ lib, fetchFromGitHub, gitUpdater
 , meson, ninja, pkg-config, wrapGAppsHook
 , desktop-file-utils, gsettings-desktop-schemas, libnotify, libhandy, webkitgtk
 , python3Packages, gettext
@@ -95,6 +95,10 @@ python3Packages.buildPythonApplication rec {
     makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
   '';
 
+  passthru.updateScript = gitUpdater {
+    inherit pname version;
+  };
+
   meta = with lib; {
     description = "An easy-to-use wineprefix manager";
     homepage = "https://usebottles.com/";
diff --git a/pkgs/applications/misc/gpsbabel/default.nix b/pkgs/applications/misc/gpsbabel/default.nix
index b09e7ef725e..d7ba62f28c5 100644
--- a/pkgs/applications/misc/gpsbabel/default.nix
+++ b/pkgs/applications/misc/gpsbabel/default.nix
@@ -96,7 +96,6 @@ stdenv.mkDerivation rec {
   '');
 
   meta = with lib; {
-    broken = stdenv.isDarwin;
     description = "Convert, upload and download data from GPS and Map programs";
     longDescription = ''
       GPSBabel converts waypoints, tracks, and routes between popular
diff --git a/pkgs/applications/misc/pass-secret-service/default.nix b/pkgs/applications/misc/pass-secret-service/default.nix
index 12f8935797c..6a57c15b742 100644
--- a/pkgs/applications/misc/pass-secret-service/default.nix
+++ b/pkgs/applications/misc/pass-secret-service/default.nix
@@ -1,26 +1,50 @@
-{ lib, fetchFromGitHub, python3, dbus, gnupg }:
+{ lib
+, fetchFromGitHub
+, python3
+, dbus
+, gnupg
+, coreutils
+, nixosTests
+}:
 
 python3.pkgs.buildPythonApplication rec {
   pname = "pass-secret-service";
   # PyPI has old alpha version. Since then the project has switched from using a
   # seemingly abandoned D-Bus package pydbus and started using maintained
   # dbus-next. So let's use latest from GitHub.
-  version = "unstable-2020-04-12";
+  version = "unstable-2022-03-21";
 
   src = fetchFromGitHub {
     owner = "mdellweg";
     repo = "pass_secret_service";
-    rev = "f6fbca6ac3ccd16bfec407d845ed9257adf74dfa";
-    sha256 = "0rm4pbx1fiwds1v7f99khhh7x3inv9yniclwd95mrbgljk3cc6a4";
+    rev = "149f8557e07098eee2f46561eea61e83255ac59b";
+    sha256 = "sha256-+/pFi6+K8rl0Ihm6cp/emUQVtau6+Apl8/VEr9AI0Xs=";
   };
 
+  patches = [
+    # Only needed until https://github.com/mdellweg/pass_secret_service/pull/30
+    # is merged.
+    ./int_from_bytes-deprecation-fix.patch
+  ];
 
   # Need to specify session.conf file for tests because it won't be found under
   # /etc/ in check phase.
   postPatch = ''
     substituteInPlace Makefile \
       --replace "dbus-run-session" "dbus-run-session --config-file=${dbus}/share/dbus-1/session.conf" \
-      --replace '-p $(relpassstore)' '-p $(PASSWORD_STORE_DIR)'
+      --replace '-p $(relpassstore)' '-p $(PASSWORD_STORE_DIR)' \
+      --replace 'pytest-3' 'pytest'
+
+    substituteInPlace systemd/org.freedesktop.secrets.service \
+      --replace "/bin/false" "${coreutils}/bin/false"
+    substituteInPlace systemd/dbus-org.freedesktop.secrets.service \
+      --replace "/usr/local" "$out"
+  '';
+
+  postInstall = ''
+    mkdir -p "$out/share/dbus-1/services/" "$out/lib/systemd/user/"
+    cp systemd/org.freedesktop.secrets.service "$out/share/dbus-1/services/"
+    cp systemd/dbus-org.freedesktop.secrets.service "$out/lib/systemd/user/"
   '';
 
   propagatedBuildInputs = with python3.pkgs; [
@@ -44,17 +68,15 @@ python3.pkgs.buildPythonApplication rec {
       ps.pypass
     ];
 
-  checkPhase = ''
-    runHook preCheck
-    make test
-    runHook postCheck
-  '';
+  checkTarget = "test";
+
+  passthru.tests.pass-secret-service = nixosTests.pass-secret-service;
 
   meta = {
     description = "Libsecret D-Bus API with pass as the backend";
     homepage = "https://github.com/mdellweg/pass_secret_service/";
     license = lib.licenses.gpl3Only;
     platforms = lib.platforms.all;
-    maintainers = with lib.maintainers; [ jluttine ];
+    maintainers = with lib.maintainers; [ jluttine aidalgol ];
   };
 }
diff --git a/pkgs/applications/misc/pass-secret-service/int_from_bytes-deprecation-fix.patch b/pkgs/applications/misc/pass-secret-service/int_from_bytes-deprecation-fix.patch
new file mode 100644
index 00000000000..b7e78e7b791
--- /dev/null
+++ b/pkgs/applications/misc/pass-secret-service/int_from_bytes-deprecation-fix.patch
@@ -0,0 +1,22 @@
+--- a/pass_secret_service/interfaces/session.py
++++ b/pass_secret_service/interfaces/session.py
+@@ -4,7 +4,6 @@
+ import os
+ import hmac
+ from hashlib import sha256
+-from cryptography.utils import int_from_bytes
+ from cryptography.hazmat.backends import default_backend
+ from cryptography.hazmat.primitives.ciphers import Cipher
+ from cryptography.hazmat.primitives.ciphers.modes import CBC
+@@ -27,9 +26,9 @@ class Session(ServiceInterface, SerialMixin):
+     @classmethod
+     @run_in_executor
+     def _create_dh(cls, input):
+-        priv_key = int_from_bytes(os.urandom(0x80), "big")
++        priv_key = int.from_bytes(os.urandom(0x80), "big")
+         pub_key = pow(2, priv_key, dh_prime)
+-        shared_secret = pow(int_from_bytes(input, "big"), priv_key, dh_prime)
++        shared_secret = pow(int.from_bytes(input, "big"), priv_key, dh_prime)
+         salt = b"\x00" * 0x20
+         shared_key = hmac.new(salt, shared_secret.to_bytes(0x80, "big"), sha256).digest()
+         aes_key = hmac.new(shared_key, b"\x01", sha256).digest()[:0x10]
diff --git a/pkgs/applications/misc/sigal/default.nix b/pkgs/applications/misc/sigal/default.nix
index bc48ce3e2af..8289cc428db 100644
--- a/pkgs/applications/misc/sigal/default.nix
+++ b/pkgs/applications/misc/sigal/default.nix
@@ -28,6 +28,8 @@ python3.pkgs.buildPythonApplication rec {
     feedgenerator
     zopfli
     cryptography
+
+    setuptools # needs pkg_resources
   ];
 
   checkInputs = [
diff --git a/pkgs/applications/misc/streamdeck-ui/default.nix b/pkgs/applications/misc/streamdeck-ui/default.nix
new file mode 100644
index 00000000000..141652e63d6
--- /dev/null
+++ b/pkgs/applications/misc/streamdeck-ui/default.nix
@@ -0,0 +1,95 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, poetry
+, copyDesktopItems
+, wrapQtAppsHook
+, writeText
+, makeDesktopItem
+, xvfb-run
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "streamdeck-ui";
+  version = "2.0.4";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = "timothycrosley";
+    rev = "v${version}";
+    hash = "sha256-NV4BkHEgfxIOuLfmn0vcPNqivmHLD6v7jLdLZgnrb0Q=";
+  };
+
+  desktopItems = [ (makeDesktopItem {
+    name = "streamdeck-ui";
+    desktopName = "Stream Deck UI";
+    icon = "streamdeck-ui";
+    exec = "streamdeck --no-ui";
+    comment = "UI for the Elgato Stream Deck";
+    categories = [ "Utility" ];
+    noDisplay = true;
+  }) ];
+
+  postInstall =
+    let
+      udevRules = ''
+        SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", TAG+="uaccess"
+        SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0063", TAG+="uaccess"
+        SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006c", TAG+="uaccess"
+        SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006d", TAG+="uaccess"
+        SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0080", TAG+="uaccess"
+      '';
+    in
+      ''
+        mkdir -p "$out/etc/udev/rules.d"
+        cp ${writeText "70-streamdeck.rules" udevRules} $out/etc/udev/rules.d/70-streamdeck.rules
+
+        mkdir -p "$out/share/pixmaps"
+        cp streamdeck_ui/logo.png $out/share/pixmaps/streamdeck-ui.png
+      '';
+
+  dontWrapQtApps = true;
+  makeWrapperArgs = [ "\${qtWrapperArgs[@]}" ];
+
+  format = "pyproject";
+
+  nativeBuildInputs = [
+    poetry
+    copyDesktopItems
+    wrapQtAppsHook
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    setuptools
+    filetype
+    cairosvg
+    pillow
+    pynput
+    pyside2
+    streamdeck
+    xlib
+  ];
+
+  checkInputs = [
+    xvfb-run
+    python3Packages.pytest
+    python3Packages.hypothesis-auto
+  ];
+
+  # Ignored tests are not in a running or passing state.
+  # Fixes have been merged upstream but not yet released.
+  # Revisit these ignored tests on each update.
+  checkPhase = ''
+    xvfb-run pytest tests \
+      --ignore=tests/test_api.py \
+      --ignore=tests/test_filter.py \
+      --ignore=tests/test_stream_deck_monitor.py
+  '';
+
+  meta = with lib; {
+    description = "Linux compatible UI for the Elgato Stream Deck";
+    homepage = "https://timothycrosley.github.io/streamdeck-ui/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ majiir ];
+  };
+}
diff --git a/pkgs/applications/misc/tut/default.nix b/pkgs/applications/misc/tut/default.nix
index e7299326e87..8fa43da8098 100644
--- a/pkgs/applications/misc/tut/default.nix
+++ b/pkgs/applications/misc/tut/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "tut";
-  version = "0.0.46";
+  version = "1.0.13";
 
   src = fetchFromGitHub {
     owner = "RasmusLindroth";
     repo = pname;
     rev = version;
-    sha256 = "sha256-C9kyA6QuL8sqzCooaPzSP7VOpu7jcSFCUx9oaZLZ7/w=";
+    sha256 = "sha256-EORvIqA2bsmNUY1euUBmEYNMU02nW0doRDmTQjt15Os=";
   };
 
-  vendorSha256 = "sha256-kMGEAN/I2XsIc6zCDbhbbstYlyjDpXQsOPUzjaJqJBk=";
+  vendorSha256 = "sha256-ilq1sfFY6WuNACryDGjkpF5eUTan8Y6Yt26vot9XR54=";
 
   meta = with lib; {
     description = "A TUI for Mastodon with vim inspired keys";
diff --git a/pkgs/applications/networking/browsers/chromium/upstream-info.json b/pkgs/applications/networking/browsers/chromium/upstream-info.json
index a2f6d93f4d2..3ed40359ed3 100644
--- a/pkgs/applications/networking/browsers/chromium/upstream-info.json
+++ b/pkgs/applications/networking/browsers/chromium/upstream-info.json
@@ -19,9 +19,9 @@
     }
   },
   "beta": {
-    "version": "104.0.5112.39",
-    "sha256": "0xgw1n5lcqqbs0b8bpd05f1z0q2lpajg2dxangd1yfl7y16yfxv9",
-    "sha256bin64": "0abprih2sh483cqv9rqs67ha3cm9744h3gdc342lgqj3x8bmspmj",
+    "version": "104.0.5112.48",
+    "sha256": "1zk4ywphcy6nrv0yf38yhl2bcq6fk34makglx31aalf2nhhw945i",
+    "sha256bin64": "14cx0m6jak4cma62axli0l4gqzqqh4gs7gam2dfahmwxsgcdwwn7",
     "deps": {
       "gn": {
         "version": "2022-06-08",
@@ -32,15 +32,15 @@
     }
   },
   "dev": {
-    "version": "105.0.5148.2",
-    "sha256": "0qnkpda0chsxgfby5g38xmpkilyz2v12mrwlayfsp2iqhc7d07vz",
-    "sha256bin64": "045czwsra17iclgyzsnbbjr55lrmhzf97c2k0wwjrmd59cx4b1sa",
+    "version": "105.0.5176.3",
+    "sha256": "11zdihvy1n7d3vfl88477ppbfjd3mmkdsj4pfmfqm4mpw7zgi7fy",
+    "sha256bin64": "08rhg2am01dbb15djh7200wsg0wb48na09i706035wnnf0d8z313",
     "deps": {
       "gn": {
-        "version": "2022-06-22",
+        "version": "2022-07-11",
         "url": "https://gn.googlesource.com/gn",
-        "rev": "29accf5ac2eadfc53e687081583b7bc1592a8839",
-        "sha256": "0z9gaw8p88yhb7fi844pvylsbgjy3ni7bnca1yx37928fjw3ppln"
+        "rev": "9ef321772ecc161937db69acb346397e0ccc484d",
+        "sha256": "0j85kgf8c1psys6kfsq5mph8n80hcbzhr7d2blqiiysmjj0wc6ng"
       }
     }
   },
diff --git a/pkgs/applications/networking/instant-messengers/gajim/default.nix b/pkgs/applications/networking/instant-messengers/gajim/default.nix
index 7c18ebf763c..9725676da02 100644
--- a/pkgs/applications/networking/instant-messengers/gajim/default.nix
+++ b/pkgs/applications/networking/instant-messengers/gajim/default.nix
@@ -22,11 +22,11 @@
 
 python3.pkgs.buildPythonApplication rec {
   pname = "gajim";
-  version = "1.4.3";
+  version = "1.4.6";
 
   src = fetchurl {
     url = "https://gajim.org/downloads/${lib.versions.majorMinor version}/gajim-${version}.tar.gz";
-    sha256 = "sha256:0n6v96pwgds8655877fjgsphq4rd4gb9mz7cbqp4nkd4m7kvr3xv";
+    sha256 = "sha256-iiZ2Nv6voq67+OJ26hk+3JQSKevx9ti8s6DreSAsQk8=";
   };
 
   buildInputs = [
diff --git a/pkgs/applications/networking/instant-messengers/webex/default.nix b/pkgs/applications/networking/instant-messengers/webex/default.nix
new file mode 100644
index 00000000000..293f6747d3f
--- /dev/null
+++ b/pkgs/applications/networking/instant-messengers/webex/default.nix
@@ -0,0 +1,175 @@
+{ lib
+, writeScript
+, stdenv
+, fetchurl
+, alsaLib
+, at-spi2-atk
+, at-spi2-core
+, atk
+, cairo
+, cups
+, dbus
+, expat
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gtk3
+, harfbuzz
+, libdrm
+, libgcrypt
+, libglvnd
+, libkrb5
+, libpulseaudio
+, libsecret
+, udev
+, libxcb
+, libxkbcommon
+, lshw
+, mesa
+, nspr
+, nss
+, pango
+, zlib
+, libX11
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXext
+, libXfixes
+, libXi
+, libXrandr
+, libXrender
+, libXtst
+, libxshmfence
+, xcbutil
+, xcbutilimage
+, xcbutilkeysyms
+, xcbutilrenderutil
+, xcbutilwm
+, p7zip
+, wayland
+, libXScrnSaver
+}:
+
+stdenv.mkDerivation rec {
+  pname = "webex";
+  version = "42.8.0.22907";
+
+  src = fetchurl {
+    url = "https://binaries.webex.com/WebexDesktop-Ubuntu-Blue/20220712081040/Webex_ubuntu.7z";
+    sha256 = "b83950cdcf978a3beda93de27b25b70554fc82fcf072a5a7ea858d2ce0d176ac";
+  };
+
+  buildInputs = [
+    alsaLib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    glib
+    gdk-pixbuf
+    gtk3
+    harfbuzz
+    lshw
+    mesa
+    nspr
+    nss
+    pango
+    zlib
+    libdrm
+    libgcrypt
+    libglvnd
+    libkrb5
+    libpulseaudio
+    libsecret
+    udev
+    libxcb
+    libxkbcommon
+    libX11
+    libXcomposite
+    libXcursor
+    libXdamage
+    libXext
+    libXfixes
+    libXi
+    libXrandr
+    libXrender
+    libXtst
+    libxshmfence
+    xcbutil
+    xcbutilimage
+    libXScrnSaver
+    xcbutilkeysyms
+    xcbutilrenderutil
+    xcbutilwm
+    p7zip
+    wayland
+  ];
+
+  libPath = "$out/opt/Webex/lib:$out/opt/Webex/bin:${lib.makeLibraryPath buildInputs}";
+
+  unpackPhase = ''
+    7z x $src
+    mv Webex_ubuntu/opt .
+  '';
+
+  postPatch = ''
+    substituteInPlace opt/Webex/bin/webex.desktop --replace /opt $out/opt
+  '';
+
+  dontPatchELF = true;
+
+  buildPhase = ''
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${libPath}" \
+      opt/Webex/bin/CiscoCollabHost \
+      opt/Webex/bin/CiscoCollabHostCef \
+      opt/Webex/bin/CiscoCollabHostCefWM \
+      opt/Webex/bin/WebexFileSelector \
+      opt/Webex/bin/pxgsettings
+    for each in $(find opt/Webex -type f | grep \\.so); do
+      patchelf --set-rpath "${libPath}" "$each"
+    done
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/bin" "$out/share/applications"
+    cp -r opt "$out"
+
+    ln -s "$out/opt/Webex/bin/CiscoCollabHost" "$out/bin/webex"
+    chmod +x $out/bin/webex
+
+    mv "$out/opt/Webex/bin/webex.desktop" "$out/share/applications/webex.desktop"
+  '';
+
+  passthru.updateScript = writeScript "webex-update-script" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl jq common-updater-scripts
+    set -eou pipefail;
+
+    channel=blue
+    manifest=$(curl -s "https://client-upgrade-a.wbx2.com/client-upgrade/api/v1/webexteamsdesktop/upgrade/@me?channel=$channel&model=ubuntu" | jq '.manifest')
+
+    url=$(jq -r '.packageLocation' <<< "$manifest")
+    version=$(jq -r '.version' <<< "$manifest")
+    hash=$(jq -r '.checksum' <<< "$manifest")
+
+    update-source-version ${pname} "$version" "$hash" "$url" --file=./pkgs/applications/networking/instant-messengers/webex/default.nix
+  '';
+
+  meta = with lib; {
+    description = "The all-in-one app to call, meet, message, and get work done";
+    homepage = "https://webex.com/";
+    downloadPage = "https://www.webex.com/downloads.html";
+    license = licenses.unfree;
+    maintainers = with lib.maintainers; [ uvnikita ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/pkgs/applications/networking/remote/wayvnc/default.nix b/pkgs/applications/networking/remote/wayvnc/default.nix
index e24c4103948..e8618c4d389 100644
--- a/pkgs/applications/networking/remote/wayvnc/default.nix
+++ b/pkgs/applications/networking/remote/wayvnc/default.nix
@@ -29,6 +29,6 @@ stdenv.mkDerivation rec {
     changelog = "https://github.com/any1/wayvnc/releases/tag/v${version}";
     license = licenses.isc;
     platforms = platforms.linux;
-    maintainers = with maintainers; [ primeos ];
+    maintainers = with maintainers; [ nickcao ];
   };
 }
diff --git a/pkgs/applications/science/engineering/strictdoc/conftest.py.patch b/pkgs/applications/science/engineering/strictdoc/conftest.py.patch
new file mode 100644
index 00000000000..2fadf242b7a
--- /dev/null
+++ b/pkgs/applications/science/engineering/strictdoc/conftest.py.patch
@@ -0,0 +1,15 @@
+diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py
+index 932747c..9b3d6ac 100644
+--- a/tests/unit/conftest.py
++++ b/tests/unit/conftest.py
+@@ -1,9 +1,7 @@
+ import os
+ import sys
+ 
+-STRICTDOC_ROOT_PATH = os.path.abspath(
+-    os.path.join(__file__, "../../../../strictdoc")
+-)
++STRICTDOC_ROOT_PATH = "@strictdoc_root_path@"
+ assert os.path.exists(STRICTDOC_ROOT_PATH), "does not exist: {}".format(
+     STRICTDOC_ROOT_PATH
+ )
diff --git a/pkgs/applications/science/engineering/strictdoc/default.nix b/pkgs/applications/science/engineering/strictdoc/default.nix
new file mode 100644
index 00000000000..3fc61b84515
--- /dev/null
+++ b/pkgs/applications/science/engineering/strictdoc/default.nix
@@ -0,0 +1,100 @@
+{ lib
+, stdenv
+, buildPythonApplication
+, fetchFromGitHub
+, python3
+, pythonOlder
+, html5lib
+, invoke
+, openpyxl
+, poetry-core
+, tidylib
+, beautifulsoup4
+, dataclasses
+, datauri
+, docutils
+, jinja2
+, lxml
+, markupsafe
+, pygments
+, reqif
+, setuptools
+, textx
+, xlrd
+, XlsxWriter
+, pytestCheckHook
+}:
+
+buildPythonApplication rec {
+  pname = "strictdoc";
+  version = "0.0.26";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "strictdoc-project";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-SMAwji75AjW8CzXRKBDF+fR/a5++GhgIvkcuD+a/vp4=";
+  };
+
+  patches = [
+    ./conftest.py.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace ./tests/unit/conftest.py \
+      --replace @strictdoc_root_path@ "${placeholder "out"}/${python3.sitePackages}/strictdoc"
+
+    substituteInPlace requirements.txt \
+      --replace "jinja2 >= 2.11.2, <3.0" "jinja2 >= 2.11.2" \
+      --replace "reqif >= 0.0.18, == 0.*" "reqif>=0.0.8" \
+      --replace "==" ">=" \
+      --replace "~=" ">="
+  '';
+
+  nativeBuildInputs = [
+    html5lib
+    invoke
+    openpyxl
+    poetry-core
+    tidylib
+  ];
+
+  propagatedBuildInputs = [
+    beautifulsoup4
+    datauri
+    docutils
+    jinja2
+    lxml
+    markupsafe
+    pygments
+    reqif
+    setuptools
+    textx
+    xlrd
+    XlsxWriter
+  ] ++ lib.optionals (pythonOlder "3.7") [
+    dataclasses
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "strictdoc"
+  ];
+
+  disabledTests = [
+    # fixture 'fs' not found
+    "test_001_load_from_files"
+  ];
+
+  meta = with lib; {
+    description = "Software requirements specification tool";
+    homepage = "https://github.com/strictdoc-project/strictdoc";
+    changelog = "https://github.com/strictdoc-project/strictdoc/releases";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ yuu ];
+  };
+}
diff --git a/pkgs/applications/science/math/nauty/default.nix b/pkgs/applications/science/math/nauty/default.nix
index 9fae8c31ea4..ef8c041039b 100644
--- a/pkgs/applications/science/math/nauty/default.nix
+++ b/pkgs/applications/science/math/nauty/default.nix
@@ -4,11 +4,11 @@
 }:
 stdenv.mkDerivation rec {
   pname = "nauty";
-  version = "2.7r3";
+  version = "2.7r4";
 
   src = fetchurl {
     url = "https://pallini.di.uniroma1.it/nauty${builtins.replaceStrings ["."] [""] version}.tar.gz";
-    sha256 = "sha256-TwZltxalP3oU6irjAFnyPQZM4/5MEsATQE724e4LiMI=";
+    sha256 = "sha256-uBDIWm/imfO0yfJKr5KcrH+VRsLzXCDh3Qrbx0CISKY=";
   };
 
   outputs = [ "out" "dev" ];
diff --git a/pkgs/applications/science/math/sage/sage-src.nix b/pkgs/applications/science/math/sage/sage-src.nix
index 95da9b26e54..a0375a5184a 100644
--- a/pkgs/applications/science/math/sage/sage-src.nix
+++ b/pkgs/applications/science/math/sage/sage-src.nix
@@ -117,6 +117,13 @@ stdenv.mkDerivation rec {
     # 5.0 hits nixpkgs.
     # https://github.com/sphinx-doc/sphinx/pull/10372
     ./patches/docutils-0.18.1-deprecation.patch
+
+    (fetchSageDiff {
+      name = "eclib-20220621-update.patch";
+      base = "9.7.beta4";
+      rev = "9b65d73399b33043777ba628a4d318638aec6e0e";
+      sha256 = "sha256-pcb9Q9a0ROCZTyfT7TRMtgEqCom8SgrtAaZ8ATgeqVI=";
+    })
   ];
 
   patches = nixPatches ++ bugfixPatches ++ packageUpgradePatches;
diff --git a/pkgs/applications/version-management/git-and-tools/lab/default.nix b/pkgs/applications/version-management/git-and-tools/lab/default.nix
index d73d1d13bde..91346637562 100644
--- a/pkgs/applications/version-management/git-and-tools/lab/default.nix
+++ b/pkgs/applications/version-management/git-and-tools/lab/default.nix
@@ -1,14 +1,14 @@
-{ lib, buildGoModule, fetchFromGitHub, makeWrapper, xdg-utils, installShellFiles, git }:
+{ lib, buildGoModule, fetchFromGitHub, makeBinaryWrapper, xdg-utils, installShellFiles, git }:
 
 buildGoModule rec {
   pname = "lab";
-  version = "0.25.0";
+  version = "0.25.1";
 
   src = fetchFromGitHub {
     owner = "zaquestion";
     repo = "lab";
     rev = "v${version}";
-    sha256 = "sha256-7AUhH2aBRpsjUzZQGE2fHDOa1k0rMUfZJqUEKZXpJuM=";
+    sha256 = "sha256-VCvjP/bSd/0ywvNWPsseXn/SPkdp+BsXc/jTvB11EOk=";
   };
 
   subPackages = [ "." ];
@@ -17,16 +17,16 @@ buildGoModule rec {
 
   doCheck = false;
 
-  nativeBuildInputs = [ makeWrapper installShellFiles ];
+  nativeBuildInputs = [ makeBinaryWrapper installShellFiles ];
 
   ldflags = [ "-s" "-w" "-X main.version=${version}" ];
 
   postInstall = ''
     wrapProgram $out/bin/lab --prefix PATH ":" "${lib.makeBinPath [ git xdg-utils ]}";
-    for shell in bash fish zsh; do
-      $out/bin/lab completion $shell > lab.$shell
-      installShellCompletion lab.$shell
-    done
+    installShellCompletion --cmd lab \
+      --bash <($out/bin/lab completion bash) \
+      --fish <($out/bin/lab completion fish) \
+      --zsh <($out/bin/lab completion zsh)
   '';
 
   meta = with lib; {
diff --git a/pkgs/applications/virtualization/crosvm/default.nix b/pkgs/applications/virtualization/crosvm/default.nix
index db99d307db5..68ba3b56e2c 100644
--- a/pkgs/applications/virtualization/crosvm/default.nix
+++ b/pkgs/applications/virtualization/crosvm/default.nix
@@ -8,7 +8,7 @@ let
   upstreamInfo = with builtins; fromJSON (readFile ./upstream-info.json);
 
   arch = with stdenv.hostPlatform;
-    if isAarch64 then "arm"
+    if isAarch64 then "aarch64"
     else if isx86_64 then "x86_64"
     else throw "no seccomp policy files available for host platform";
 
diff --git a/pkgs/applications/virtualization/qemu/default.nix b/pkgs/applications/virtualization/qemu/default.nix
index a481b50f3e1..fb41e303f53 100644
--- a/pkgs/applications/virtualization/qemu/default.nix
+++ b/pkgs/applications/virtualization/qemu/default.nix
@@ -115,8 +115,14 @@ stdenv.mkDerivation rec {
       url = "https://gitlab.com/raboof/qemu/-/commit/3fb5e8fe4434130b1167a995b2a01c077cca2cd5.patch";
       sha256 = "sha256-evzrN3i4ntc/AFG0C0rezQpQbWcnx74nXO+5DLErX8o=";
     })
+    # fix 9p on macOS host, landed in master
+    (fetchpatch {
+      name = "fix-9p-on-macos.patch";
+      url = "https://gitlab.com/qemu/qemu/-/commit/f5643914a9e8f79c606a76e6a9d7ea82a3fc3e65.patch";
+      sha256 = "sha256-8i13wU135h+YxoXFtkXweBN3hMslpWoNoeQ7Ydmn3V4=";
+    })
   ]
-    ++ lib.optional nixosTestRunner ./force-uid0-on-9p.patch;
+  ++ lib.optional nixosTestRunner ./force-uid0-on-9p.patch;
 
   postPatch = ''
     # Otherwise tries to ensure /var/run exists.
diff --git a/pkgs/applications/window-managers/weston/default.nix b/pkgs/applications/window-managers/weston/default.nix
index eef1a14639b..10f67558cfc 100644
--- a/pkgs/applications/window-managers/weston/default.nix
+++ b/pkgs/applications/window-managers/weston/default.nix
@@ -10,11 +10,11 @@
 with lib;
 stdenv.mkDerivation rec {
   pname = "weston";
-  version = "10.0.0";
+  version = "10.0.1";
 
   src = fetchurl {
-    url = "https://wayland.freedesktop.org/releases/${pname}-${version}.tar.xz";
-    sha256 = "1bj7wnadr7ssn6xw7k8ki0wpj6np3kjd2pcysfz3h0mr290rc8sw";
+    url = "https://gitlab.freedesktop.org/wayland/weston/-/releases/${version}/downloads/weston-${version}.tar.xz";
+    sha256 = "05a10gfbadyxkwgsncc5vc343f493csgh10vk0878nl6d98557la";
   };
 
   patches = [
diff --git a/pkgs/data/fonts/iosevka/bin.nix b/pkgs/data/fonts/iosevka/bin.nix
index 05ad1662340..f180e5b4ffa 100644
--- a/pkgs/data/fonts/iosevka/bin.nix
+++ b/pkgs/data/fonts/iosevka/bin.nix
@@ -11,7 +11,7 @@ let
     (builtins.attrNames (builtins.removeAttrs variantHashes [ "iosevka" ]));
 in stdenv.mkDerivation rec {
   pname = "${name}-bin";
-  version = "15.5.2";
+  version = "15.6.0";
 
   src = fetchurl {
     url = "https://github.com/be5invis/Iosevka/releases/download/v${version}/ttc-${name}-${version}.zip";
diff --git a/pkgs/data/fonts/iosevka/variants.nix b/pkgs/data/fonts/iosevka/variants.nix
index 39112a72548..f666dec7a57 100644
--- a/pkgs/data/fonts/iosevka/variants.nix
+++ b/pkgs/data/fonts/iosevka/variants.nix
@@ -1,95 +1,95 @@
 # This file was autogenerated. DO NOT EDIT!
 {
-  iosevka = "1f96ngb6m5ssp5hcdv5mrb28jcqx4w8hmz9igi64rrbg3flj93ix";
-  iosevka-aile = "19b9mip3bffdfiwlr0gn2qs9zymdrill4kak1pbx2y6kjlbsz7c1";
-  iosevka-curly = "0mkkxi0sb50il400bvv5rsgcf0gdbzir0br9m6syxzqwg90lakl7";
-  iosevka-curly-slab = "1qbbk2nzgwp4skiwg5cck9i6hzdsqfd88l1cypbk4l4jvvmx0gxm";
-  iosevka-etoile = "1l6f8dgk8ajbd35gbf1hdrzjrn96fh6v2wqsp3q0ncyqa210yasp";
-  iosevka-slab = "1fnp92s7f73nzy1qlfaal15hl2wgayixl26z8gpcvkzz964zgip7";
-  iosevka-ss01 = "0fchf91kmgrisb0na5yig43w8dvpqasj87ppmc12jghybn6zfz8z";
-  iosevka-ss02 = "00sn5207s75w79qxlcn153vf0k9jfpwhvn7iydnrdibjgy1wr1h4";
-  iosevka-ss03 = "0j227mq286jm7ndd4lr9v3s6wmcw3ya5mbmyc2b7n0hq0jqnbi3h";
-  iosevka-ss04 = "1za5893fmbc78jzh7l1ggp3hzm3wjxmmdanc0xg5dj95nrp878di";
-  iosevka-ss05 = "0x6z60ig01x3r95izqr2w94d8ddiqawvml6ga1r476xsv3djvl4w";
-  iosevka-ss06 = "1w4p4bqrl29v2dpbrk8cdxr1zmipa5n8d2gnyd1ay0p8mrmclfl3";
-  iosevka-ss07 = "1abk0fnz5d5rlz226s8m45ndqss4f1sn9249fdhgbph939lcfqlr";
-  iosevka-ss08 = "0ilw5013rkl1sflri40pi1h56iir1hadnmxk8a3aa2l7ysmslz44";
-  iosevka-ss09 = "1v4y06d521c8hg03vw78h1lhdpvlij3ihdpm7g1ir2mfr1wz2dj9";
-  iosevka-ss10 = "1kk7gm2xzy3i8rr149f2lydwdzkgs21hp46yminv6k0ipzfhhy28";
-  iosevka-ss11 = "10sz5gncvizvi3f8sx7m6x7g1s1459v47xnap0j8w9qjp1c8d6c7";
-  iosevka-ss12 = "12gwiq5fpx3xiv40k0i3k7c3hj15vf0vp7i1glp00yv4v6vrx8an";
-  iosevka-ss13 = "05912nq3ll7ihalzazrs2r32krknfg9gpn8i05m7xn31zakizx98";
-  iosevka-ss14 = "0lfzxqywx6vjr9vwkgmf73j1bcqjyzgg2n0dk2l523bxlq26j9ng";
-  iosevka-ss15 = "0z5vx4hjclf06rirnacd3sdxa0cv6mbgdkiayjbl7k5j3xw2sh5r";
-  iosevka-ss16 = "1lhhbdkd5dd87l2b5jmkacnx8h2pp6gwql9clj7sq006ir6a7in4";
-  iosevka-ss17 = "0000x8zsfh7kpjdcqhd9fqi9sp4hfkq3i1rmwhlxjmjwcx1rbccd";
-  iosevka-ss18 = "16chvb7fz9nn5g87nx2qxfbzqydi6aqdrr5l5hbd42zgx06rxg6b";
-  sgr-iosevka = "1pxbqg4c9s63c6yg0hfzw2pky2izgi8m4rl987k7bisqmsmw7dz5";
-  sgr-iosevka-aile = "16b44mhvd86cfzazwgrxzvlb4pl79qgcyllw07r4xis3x1gb9n4x";
-  sgr-iosevka-curly = "011rr2z0c1sdydyb4g3wb7icf6w13qagsimg6wvwq5v49ybv2p51";
-  sgr-iosevka-curly-slab = "0rvddn0fw3p454f5kpnh5lc0vgg5zg9v5658a16yqq0pyabbqm1v";
-  sgr-iosevka-etoile = "1l4ljc4g1gfn8n79783cid991rpvffw2abp0br4j0sd8fy4vd97s";
-  sgr-iosevka-fixed = "0hkfc8lpqda5vrbckcb740vyysgr7xbfns0v2gsdgj8kbvmw21bc";
-  sgr-iosevka-fixed-curly = "19r03fvhcm49nknvf52cp2hrgiaas29jm6skw2xci377adl8xvy7";
-  sgr-iosevka-fixed-curly-slab = "1smas7dhsz5qqg22hwlzwhf2wqrasj9gm28pyrwqbqri68982d8i";
-  sgr-iosevka-fixed-slab = "1qsafga9xfx6zyyhnlli6d33n9mak5a44lj4klnipm631cfax539";
-  sgr-iosevka-fixed-ss01 = "1w3683s7dgwh4njqv4726ghanfki119grszlpkd4ry5l88naw9wz";
-  sgr-iosevka-fixed-ss02 = "0lxdx1d6ynywjifarcr5ijga60d8mj4jn4av57yk0m7430qj535m";
-  sgr-iosevka-fixed-ss03 = "0wzpn8ra4y6g8gyhx62yyq2s1k7vvp0rbr5cnn810hfqjhc49dhi";
-  sgr-iosevka-fixed-ss04 = "0135yadsykcnpjcn9ldhr3pj9l6qnqnixfyn2xvvkxlmlkhizkm9";
-  sgr-iosevka-fixed-ss05 = "18vwd9sz6mlzg23dms1w79a98xsy2prkm0d6wkmyczi3pmwc11f2";
-  sgr-iosevka-fixed-ss06 = "12mwqq8js5njlddkakpsb798vc8bbiabd2kkvkkvsqmbanpic9ih";
-  sgr-iosevka-fixed-ss07 = "19r5a11n8m8k5nqlzgh4wr28gid81gxm7f28bgcz8jmjyvhrkmsq";
-  sgr-iosevka-fixed-ss08 = "0ya22ig0aawfi9k7q2hbqd7nfkhij8mj6jaqcp5fqlglgy8r437b";
-  sgr-iosevka-fixed-ss09 = "0cyvzalw9jp09kssc9p6pyfw843pbjgyhhjs311b5l8sr33add4k";
-  sgr-iosevka-fixed-ss10 = "1bvjm58jcgpjcjyhas10bp0wy5zlvqfkzwj4pzn5h4640vlv7rab";
-  sgr-iosevka-fixed-ss11 = "0zm7ncl1n910lqzrp20wp8dayl0wnaijwjzjza7y7wi8f3wi072f";
-  sgr-iosevka-fixed-ss12 = "0y3iqkx7hkry9yj7vszvqywbpnim26gdlm6a9gq57i3ilnkh3fqq";
-  sgr-iosevka-fixed-ss13 = "10snkzp4ihfd25760sf535s0z736lszx9kmr37bjs0yfk91qcd6i";
-  sgr-iosevka-fixed-ss14 = "1h4l025xzsxfhwzs19bzib6kf4asj0066ynwn6a7hjicsy2l8als";
-  sgr-iosevka-fixed-ss15 = "1jplpd42ik9lvdxl4kl1hqpz7h1m580r10p0pnnpv64zw9vqpzzc";
-  sgr-iosevka-fixed-ss16 = "0w2fgg3c0qkwpsvj4jq287wjgidpx49gnd4ijyqqwlzwyijc8v2a";
-  sgr-iosevka-fixed-ss17 = "0m8qpimcan5i2s7v8dhy8j85lzddgmlqjyjf1sfg6694d2ar0hpb";
-  sgr-iosevka-fixed-ss18 = "0hbaa84j5izsmibmnx1cwg4s37bc5iq6pib1shlk97fd7c96b3g7";
-  sgr-iosevka-slab = "1fxwc9s9ic33fn65gc565fg7h91ny9vj09lvhqpwc5v6jqky7bx8";
-  sgr-iosevka-ss01 = "1x72r1k4bz7xg92f8h5lp627dvvcw1li7iq3z511hprf08diyj6w";
-  sgr-iosevka-ss02 = "1xzysnn656j8pwsy1grfgbsdkyhizfviah9b6plkfs0crkpjfrd4";
-  sgr-iosevka-ss03 = "18d8in437sp0bc3bqb6rim97ygzsmyimnyp7m0czn8f9nyq920xc";
-  sgr-iosevka-ss04 = "1vbdqygbw3m0vk4jxd7f8qzap9cms9h0f9i7sr6cn50k998f9pnx";
-  sgr-iosevka-ss05 = "0fzkh4a6ni4mc26ss0x4bmhil0xm81p3xwhk0w0cr4qz7m5hk5b7";
-  sgr-iosevka-ss06 = "1b7zmjlgzwjnvvkh743ma3lla7jqcq6fsg526kfh0ghxzhhp4s9y";
-  sgr-iosevka-ss07 = "0l75xqx4lp5pa65s6phany5gwhswmfs3y0sck211sfzgifmlqf73";
-  sgr-iosevka-ss08 = "06zj3msqc69xlmm2sjwcr5s7ibk4qlych7fhhfzjyrawy7mvxrq9";
-  sgr-iosevka-ss09 = "11ba3rlp7mnnklznjhmhqfhy3qcnj7fn3w1wjzpqczvi71kskrff";
-  sgr-iosevka-ss10 = "04y5q4wspay4y7clrybgyrdyx43kw89zknszzd2df6bz7jpa583x";
-  sgr-iosevka-ss11 = "13igcnw8ja2xcpdyshm75qv293x050nx5r9yzxq6rxbppgv7yac2";
-  sgr-iosevka-ss12 = "0f3qnldpcavacrnj3x1av7729api33zll4x00zi1rhxd0akldrlb";
-  sgr-iosevka-ss13 = "1zy59pa7h2bchxl9gp6xvlj56a6p7jms2m49rsss8l9x5aq2gar1";
-  sgr-iosevka-ss14 = "1m66cyr8iybxa7hag65lv82q28mnx02yncklssb516gv5swd4sly";
-  sgr-iosevka-ss15 = "03n0qglqhlvg078jnj4l2ni3257g9l5zrbl7y3j051qpn3lkradg";
-  sgr-iosevka-ss16 = "0zqyxinrmfnlmkd735laz8ijb22mp1p04xhgqvgvx1npnjkz79jx";
-  sgr-iosevka-ss17 = "13dyw8im15njkml0wzqky1jp1rf4pnp8c1jhich4c6s24y0nvnkk";
-  sgr-iosevka-ss18 = "1bmh3k5g4h9qq539dh7qhpb5ai1sqrnk6yla6yr8bwpym53knysd";
-  sgr-iosevka-term = "0rzl36kz7xfg2cqr8hq8d3vqgg3wnk6ki44xxpspdfgkhyhffz5v";
-  sgr-iosevka-term-curly = "0212hs0yp8d46vc12gg3wahmxd2chscrpxcpcwi19cpii8m1jvsx";
-  sgr-iosevka-term-curly-slab = "04vyaj8ah3vj90zrd3jv2iqhgdcndqa0sn31ff4s28jzqwfg4d5q";
-  sgr-iosevka-term-slab = "0g60dz0y69wwa47x4q5kdpf2bjwjzsmr2zdnphsxwp0iari3mnls";
-  sgr-iosevka-term-ss01 = "16s7mgll7filyjjzw5cd5xmfgy7w658xxp8h6x52prcb8b1jpaxr";
-  sgr-iosevka-term-ss02 = "1vbarkid9v77qk83ymls3ppgh81kh5qch7k2zqd293dvb25p1irc";
-  sgr-iosevka-term-ss03 = "0zgy4v7i7wnbr1rgwcq8mn7128m82f25i9xmbyv3nk66ic4dn17v";
-  sgr-iosevka-term-ss04 = "1vl1w9y1xrpnpdzgcnp86gq9k7kyili1spccb6rbziw7il0sva5w";
-  sgr-iosevka-term-ss05 = "0kfbkpd1zdh8wdqh72h6q20fq6yfr0xp48bk1nk4k5y1pakibdcs";
-  sgr-iosevka-term-ss06 = "1mmc5w6div7nz8c0bfhhzxi6hm0w0qhfn4v7barkl5pw39iy7hls";
-  sgr-iosevka-term-ss07 = "16ki4n6vw9vxhwkx7mc0gid456hzznhcv8adq5ky8f78x0d1b7sa";
-  sgr-iosevka-term-ss08 = "1c3fbn01dpp684znawk0c8d0vq9ldsiybwsl9jmz3ighx1wli6d0";
-  sgr-iosevka-term-ss09 = "1ch6g56y7jfm2720cvn3v1kb7lj23db23p4frnyx32wxngfb8fc7";
-  sgr-iosevka-term-ss10 = "08pq3y4112x7s72b7clv4j0hna6v4ks75ap62g0ll6xw541s5g7k";
-  sgr-iosevka-term-ss11 = "0bivi2kd01q2007zja7cnphy6g3f369qgc4i848agpsin7dzxavh";
-  sgr-iosevka-term-ss12 = "1jfinia1kmwm6kjyx5sfbzfhb9qyjq51hjynpafrlyc2jzi4jh2w";
-  sgr-iosevka-term-ss13 = "19jg7r1jz3b39brsp8l0xklmydm015v4z3lcm8waw84g6ahpsz4d";
-  sgr-iosevka-term-ss14 = "1060bnwvc0mfkfq03m45giv7n5b9cdn7ssz8y0dkavfkxxqjf3rb";
-  sgr-iosevka-term-ss15 = "1zjl2jxsvkp31h756l95bhg7vk2vmpsrrdvr8s1blgbywf73vs0h";
-  sgr-iosevka-term-ss16 = "104myf8pvxiqjzy6ws2b8yjxddrlmnympnlgi2klbda0snvipcah";
-  sgr-iosevka-term-ss17 = "0aas4q54mhrd0vnh0ridgcb5q9m8xism9lk87kwxr6nmkyp5fabj";
-  sgr-iosevka-term-ss18 = "0z0gcvvpiyb86i5x6c1haggbb02l2jx1asa8ag17mwdaf7cp792m";
+  iosevka = "1frma5fnrfq1z06mvpy3wvp7jkww8qlji308b3pxv0nxwgjd1vyv";
+  iosevka-aile = "086ml3r09k3raxrwdmqgn7s7xga1zgrkvzxsldzwjpsw9jsax0m6";
+  iosevka-curly = "000n3wsjsk562lpydmck2c36sxd0w2wkjgz8f7dm8iw57ls9pn6g";
+  iosevka-curly-slab = "1cybjnmiwqjxj0rw3lil7n5vc6c30dg7ak0dz4g6q5klbnsw354s";
+  iosevka-etoile = "0gxhsgsxzkz34lln20aqz0rd8wvm58090f6v8z4fi5qsm0dla06s";
+  iosevka-slab = "00nd3h8vyqzlwbp45by6crzjq9rjpmj0nmmbbq17xvjgxxfhjsxr";
+  iosevka-ss01 = "1yq8bnrbw3g24xsnrwbq1vl05m4dlcpjl29h8g8irhhpbnnm44nx";
+  iosevka-ss02 = "1r40drbjxpwb7aqa24hh90nxayzj3gah110fsf8yjq5l5azg9ds8";
+  iosevka-ss03 = "1mlg9qjfdfia0vwd86gi9ygbbnamld56lpf4h6m7gr8y8v00p07i";
+  iosevka-ss04 = "0ap45s2si80gbz78q5v8qqga2ipy9dsz9hkq5dyfh8axlx1wiy7p";
+  iosevka-ss05 = "1mah12ihqwqlkmr01l5z6kasb6h6xifgd7acfypz5547ip2zy425";
+  iosevka-ss06 = "09w0hm5djjhfvy6lhbynvlq6ckd70zisv0z5y7w4jfmanif8jns3";
+  iosevka-ss07 = "17imf7021ncpl9f8nbm1c0bjz5grz1iqgvpz48vpqd56632ac6k6";
+  iosevka-ss08 = "199bf0qa76z59ad5d7fcgkiq8m4fxcia7q162zzjlxpl5bgv0665";
+  iosevka-ss09 = "0w7jcgi4vn5ix58ji5cybpbnzvdl21k1r6rxad76z97ywwqbflag";
+  iosevka-ss10 = "18vm9p6jdbyfc8q3cz8wf3sgd0xn7pzyw3qxld9d2qg83siybsmk";
+  iosevka-ss11 = "0aj1l0g3zzcr3grkj1l6s39449g60v6hvjfmb4xx4kxg7h1h5b4i";
+  iosevka-ss12 = "0zl2ffmgnlrcaj8mzfgp5x5z7iras5svdpf0zl2xcgjn15k17lkx";
+  iosevka-ss13 = "0b58jjhd17i9pc5gdcx3xj9y8bgzwxrlh21j6di4cgvgj41gh46k";
+  iosevka-ss14 = "0vlqr5s40xcc2645vsaap42cgfswi2p4hbpqbfjfzsmf41w6j6qc";
+  iosevka-ss15 = "01qgvdmy8frbasb5d39c12dxjlha6iv1dq621il0dzm0850x48ys";
+  iosevka-ss16 = "12vl98p6w73l4rfy2scn57jrvg2jxk99d2vsndri013grx488lq5";
+  iosevka-ss17 = "0336m1i7vdd86jgyfdnsw4f6pdzcd4d757gxf8pa3h6jyczcn8n1";
+  iosevka-ss18 = "07sqd4zwc85q8mh9l1bc2nbyr966b0bh9fff9rk91jrk106fijcl";
+  sgr-iosevka = "0adxnngdwz6lmp4yla8amk0840y9k6d3k1jl90z5qd3dpl0m0w7z";
+  sgr-iosevka-aile = "07470h9apwbmnai1rzx5s9jw3195gsxqv6q0z1gnf56mp94wihg1";
+  sgr-iosevka-curly = "1jii49qqlrpvzczwqi39001j0qwbrzklc96bwampn9f0la1iqcbf";
+  sgr-iosevka-curly-slab = "0bwfsimzkw4pbk6qy4nvbpwcw0h3m16qsjaqwrwfhnzy8hqc6akc";
+  sgr-iosevka-etoile = "091ikanzxmkb673wfcfdg9qm56xqv4vwd3c1ph0c5bzc2nz3il50";
+  sgr-iosevka-fixed = "1nz7x90zcbmvwldiz5zv5j22qyjgjn4ba42liki747lr930f38lm";
+  sgr-iosevka-fixed-curly = "17y7h5jwim59zybpmkv3rqdcc41dxax5145xmhyzvagblsc7qlpk";
+  sgr-iosevka-fixed-curly-slab = "1xfaszbpydi6vzif14bymv5cqlwxvvkdadba4jhy0psc7b30k095";
+  sgr-iosevka-fixed-slab = "0pbmhr3nbb777ym30qmhlp4swq0q1f5aqc6i7453fc0lhygmcg55";
+  sgr-iosevka-fixed-ss01 = "1klxs5npm5i1sxgrnkbkf1rbn1dvrdxp6mr34kjxkjxrd5flrb6m";
+  sgr-iosevka-fixed-ss02 = "0aw0yqmvahk0wagyb2k6q6jibpdlyza3q7zn2a7pi36pcnm9b2rn";
+  sgr-iosevka-fixed-ss03 = "0ssxx7a7cskd8lcfy3lnjic1qgzy087d6vk7hmhnlg52jhcfbkjm";
+  sgr-iosevka-fixed-ss04 = "0fhqzj5ksvcp1rxa8g11a0jwznhwb5xw41wpvjqy1za1qh2h6shw";
+  sgr-iosevka-fixed-ss05 = "06z42m7x565wzsf9sfxi4p4846cb3mgz7mr5h3xa528789fk1sx0";
+  sgr-iosevka-fixed-ss06 = "0hzy5bj3ac009q515ylxlc73d1qwdfqcxfq8jxla5h6cgcfipnl4";
+  sgr-iosevka-fixed-ss07 = "1051ah3q8wgdana4a9v38szd36wdy0h3c15sf1blm0cv3y0q7cv3";
+  sgr-iosevka-fixed-ss08 = "05pg3ywxg8m4c1ij8xpd43azz1671v1bsw7r3szbiqmmlq651h9w";
+  sgr-iosevka-fixed-ss09 = "0way85q2jwkhz8ixicx73s1x1hsyznr524am95igqkzwaz7c72q9";
+  sgr-iosevka-fixed-ss10 = "12b91hk7i00766gmd04dgh3c6m42bvbc25y9h049c6rfimzd9f75";
+  sgr-iosevka-fixed-ss11 = "1pn06gz3jrksg6f2glk45gj9i7jmgnh4f509fi7qqa73r3an0pl8";
+  sgr-iosevka-fixed-ss12 = "0nb7g0kbi4riczhjl1dqbzg3kwwsw1vlxnsc5p0qfh8h1rnfpg9g";
+  sgr-iosevka-fixed-ss13 = "1nj3nbp0b9a4nmskxg4vv98y7qp7gnj6rqkckvsw7bw43mxa2faq";
+  sgr-iosevka-fixed-ss14 = "1fhwx95702qyr23iwp400l16lgq12pd3ckbf5dn1hyhfmm691cvg";
+  sgr-iosevka-fixed-ss15 = "088xdxr11gdpn5j4fbf4xscq4prc1cydb23xcsmpnci6gsv4ppzg";
+  sgr-iosevka-fixed-ss16 = "1p20k188c75jisrg7bqr6fq9pra07b44vyvj10ngm38xwfgqb5lz";
+  sgr-iosevka-fixed-ss17 = "03giwk9xlnirgshbkpbkqav3l97n2fm7y3wd21g449vi7r9srimk";
+  sgr-iosevka-fixed-ss18 = "1yl501fcik0kcm20b98n9a285zv9m3yc33ngkjdgj12ssgb02lj8";
+  sgr-iosevka-slab = "0svls9wajw539bj5xziqbcp3wgc3f3hvwvz0rsicc9wgm7h47i33";
+  sgr-iosevka-ss01 = "09i5iylma19jfiqcl0svm7dz4d2agi1ylkvzvsh050ggsk57nzv6";
+  sgr-iosevka-ss02 = "1l0c7519wj46m14aq318rlhajq51hkv5sddhl8nvaqpdmrxx0zcj";
+  sgr-iosevka-ss03 = "02yz6wqaqnc0in8b6j2n02kf6lws4x16182a5djnh3nnml2jhvi6";
+  sgr-iosevka-ss04 = "0llrnx6vh6fl0fn5jjxzkq4rk91siy90pcpwin010sm3bppc0qgf";
+  sgr-iosevka-ss05 = "166y9hywcm6d1zw2szqfrlaj9qaankamcs0ff02vd7q399bkl9a2";
+  sgr-iosevka-ss06 = "0q41sikcv60nkvxqs5l3zw1dram20192dd5nr17nsd2lrbbdw1qx";
+  sgr-iosevka-ss07 = "1nxgsj6ykgh5dj3gjba2ild1y5knilm7pzi5b5qbqpal89ymk5dq";
+  sgr-iosevka-ss08 = "19bidxh3zxid6md8y0zp6ij4yxhqbyhqxfmld12pcskvp9xdv5bc";
+  sgr-iosevka-ss09 = "15w7dqb73q2v0qkh0wmlhjd3sphcq6qilb8iqz0ifg3kbsix3hd3";
+  sgr-iosevka-ss10 = "04gcwjpi313sqmdq1limfzycjyhr6p05vnr8jsabvgbxididikdi";
+  sgr-iosevka-ss11 = "1mvhrqgbppx35h2v62ykhihdkh4zw2lwz5i7fd5qdw0ysiv1006d";
+  sgr-iosevka-ss12 = "0r7qlba9mx1fibs0jrqgjzbffk1j49912zzim441n9539n6rmpvp";
+  sgr-iosevka-ss13 = "1qvn83frjhy2w16i9jnhp3874rjlf0z95n7x1kmcg89hzy3x7288";
+  sgr-iosevka-ss14 = "1yjbdgj1b03p2cwvwsh7jl0npj4a840whgn35j61fi9ap74jld8c";
+  sgr-iosevka-ss15 = "1jrixb0lw04axv2h6d92mbwgavyzpc189n72b8wf729kwi22bvww";
+  sgr-iosevka-ss16 = "1mvgl5dh9frqmqvia17zwpyyy9hwm8iayx2azm7mhjkkff0f0sd9";
+  sgr-iosevka-ss17 = "00059jzz2w9xdfcl2lws2i0lwqgn08fakn0di6clqhjig695yglc";
+  sgr-iosevka-ss18 = "03sy0az47x9sc0qxjc1wvhkmp71wqrm7q998ijxmj6mkbd3kc24v";
+  sgr-iosevka-term = "0r5ah7rxqqi4cha3r6nz6dli6z55s1g91yb1x6b2q04irvm0hzrc";
+  sgr-iosevka-term-curly = "1c9vf1kcl0yai5smzh9dldhkbwanbxji2a1j6y1sw59kn9n7aygf";
+  sgr-iosevka-term-curly-slab = "02m3fpdj9gxskap4sp43pjr4ylyvr6fpbsbl5csjl5x4rlrh71kr";
+  sgr-iosevka-term-slab = "1bnb803vcrkk05igm80v3k8b3p6ji14bsa5rjrplxq7yrjq7ybk4";
+  sgr-iosevka-term-ss01 = "1wfz766fi0xi5nb80wdlpp4j4klggz8v2aa1prl6mbvmzq4g1alk";
+  sgr-iosevka-term-ss02 = "12vcmbx597h0mfmib9wzqpc7bchbim2jyqnk835fhgrdrddb1w0j";
+  sgr-iosevka-term-ss03 = "0a4dfrah8rg5bc7x8r08n2ijr6nfxr5nwbwj7ig0snbw1rrizm4i";
+  sgr-iosevka-term-ss04 = "0ix8wn6dbqs072s3bmcjc1k8jfi4zpgjikbbdld3fgsg13gncz2p";
+  sgr-iosevka-term-ss05 = "19jjvadmffizdymy21dniz43ac1qkik5i33a4imchk64kcn7nqin";
+  sgr-iosevka-term-ss06 = "0lx61ikw9c2glr7smxyqkx68271sww47khkdy68llmw16c1dcapc";
+  sgr-iosevka-term-ss07 = "12nx451b67cc6kx6pkb9x2jyk683xvjz3m21wg7zjplskrhlfaqa";
+  sgr-iosevka-term-ss08 = "19n39wpz09kp9km9gmb16q6g4xbp288dgnlpdy4jxnway3i23drp";
+  sgr-iosevka-term-ss09 = "1j4sh9fjyxi5qa85w72bs7sin5189qis8zdr2fbl39ma7igj5l5f";
+  sgr-iosevka-term-ss10 = "02bv19gc1n73qyrdghp5nfzf2vwcvws3qnrcx7k3jpz23xf1n8s8";
+  sgr-iosevka-term-ss11 = "1a93vv86sg38ipji4cbpndcr9bfcc2n4bg0s3f19lzyqpw3pa6r9";
+  sgr-iosevka-term-ss12 = "1c3d3cxna1m7qq77fc278jja7yz84591pazc1adij28l3xl7xh1z";
+  sgr-iosevka-term-ss13 = "0ss0l4373867csgis87miymby4m1vvxs321lqq00m73x35y9xrj2";
+  sgr-iosevka-term-ss14 = "0dzg0g5p9p1p8yajdz0xnir8advs69fyj325qwh5616in9y3lv32";
+  sgr-iosevka-term-ss15 = "0rx346bjrm33n9ww9bc4czn9dda16bkxjf6h9m4bnvlgxdflgd3y";
+  sgr-iosevka-term-ss16 = "14i3f4bwnsb3haai8003pi9hsahcmxm1r1vccbrzny5vx78892py";
+  sgr-iosevka-term-ss17 = "0idfiqxj0ixrmvfa0bhl1sg6pvaivcw0csjcfxpp7d406553a70i";
+  sgr-iosevka-term-ss18 = "1732sskv5jzpdaaf4dc6xcp45r5fpxxxdq35jlnxbwng0njww3qy";
 }
diff --git a/pkgs/desktops/pantheon/apps/elementary-files/default.nix b/pkgs/desktops/pantheon/apps/elementary-files/default.nix
index 6944dfac1ea..9817962920a 100644
--- a/pkgs/desktops/pantheon/apps/elementary-files/default.nix
+++ b/pkgs/desktops/pantheon/apps/elementary-files/default.nix
@@ -1,6 +1,7 @@
 { lib
 , stdenv
 , fetchFromGitHub
+, fetchpatch
 , nix-update-script
 , pkg-config
 , meson
@@ -32,6 +33,15 @@ stdenv.mkDerivation rec {
 
   outputs = [ "out" "dev" ];
 
+  patches = [
+    # Fix terminal critical warnings and possible crash when removing bookmark
+    # https://github.com/elementary/files/pull/2062
+    (fetchpatch {
+      url = "https://github.com/elementary/files/commit/daa5ab244b45aafdd7be49eb0bd6f052ded5b5a7.patch";
+      sha256 = "sha256-crGvbo9Ye9656cOy6YqNreMLE2pEMO0Rg8oz81OfJkw=";
+    })
+  ];
+
   src = fetchFromGitHub {
     owner = "elementary";
     repo = "files";
diff --git a/pkgs/development/compilers/dotnet/build-dotnet.nix b/pkgs/development/compilers/dotnet/build-dotnet.nix
index 11150ec7ca1..cadb6fb31d7 100644
--- a/pkgs/development/compilers/dotnet/build-dotnet.nix
+++ b/pkgs/development/compilers/dotnet/build-dotnet.nix
@@ -47,14 +47,11 @@ stdenv.mkDerivation rec {
     libunwind
     libuuid
     openssl
-  ] ++ lib.optionals stdenv.isLinux [
-    lttng-ust_2_12
-  ]);
+  ] ++ lib.optional stdenv.isLinux lttng-ust_2_12);
 
   nativeBuildInputs = [
-    autoPatchelfHook
     makeWrapper
-  ];
+  ] ++ lib.optional stdenv.isLinux autoPatchelfHook;
 
   buildInputs = [
     stdenv.cc.cc
diff --git a/pkgs/development/compilers/ligo/default.nix b/pkgs/development/compilers/ligo/default.nix
index 36ec5bba2e2..ab61043048a 100644
--- a/pkgs/development/compilers/ligo/default.nix
+++ b/pkgs/development/compilers/ligo/default.nix
@@ -46,6 +46,7 @@ coq.ocamlPackages.buildDunePackage rec {
     yojson
     getopt
     core
+    core_unix
     pprint
     linenoise
 
@@ -83,6 +84,8 @@ coq.ocamlPackages.buildDunePackage rec {
 
   doCheck = false; # Tests fail, but could not determine the reason
 
+  patches = [ ./ligo.patch ]; # fix for core >= 0.15.0
+
   meta = with lib; {
     homepage = "https://ligolang.org/";
     downloadPage = "https://ligolang.org/docs/intro/installation";
diff --git a/pkgs/development/compilers/ligo/ligo.patch b/pkgs/development/compilers/ligo/ligo.patch
new file mode 100644
index 00000000000..1a076cf18ce
--- /dev/null
+++ b/pkgs/development/compilers/ligo/ligo.patch
@@ -0,0 +1,134 @@
+diff --git a/ligo.opam b/ligo.opam
+index d561c74d1..3a8d34feb 100644
+--- a/ligo.opam
++++ b/ligo.opam
+@@ -10,7 +10,9 @@ license: "MIT"
+ # If you change the dependencies, run `opam lock` in the root
+ depends: [
+   # Jane Street Core
+-  "core"
++  "core" { >= "v0.14.0" & < "v0.16.0" }
++  "core_kernel" { >= "v0.14.0" & "v0.16.0" }
++  "core_unix" { >= "v0.14.0" & "v0.16.0" }
+   # Tooling
+   "odoc" { build }
+   "ocamlfind" { build }
+diff --git a/ligo.opam.locked b/ligo.opam.locked
+index b4501cc76..c8ed8a41f 100644
+--- a/ligo.opam.locked
++++ b/ligo.opam.locked
+@@ -50,8 +50,9 @@ depends: [
+   "conf-rust" {= "0.1"}
+   "conf-which" {= "1"}
+   "coq" {= "8.13.2"}
+-  "core" {= "v0.14.1"}
+-  "core_kernel" {= "v0.14.2"}
++  "core" {= "v0.15.0"}
++  "core_kernel" {= "v0.15.0"}
++  "core_unix" {= "v0.15.0"}
+   "cppo" {= "1.6.8"}
+   "csexp" {= "1.5.1"}
+   "cstruct" {= "6.0.1"}
+diff --git a/src/bin/cli.ml b/src/bin/cli.ml
+index a6fc13e0d..ef5177868 100644
+--- a/src/bin/cli.ml
++++ b/src/bin/cli.ml
+@@ -12,7 +12,7 @@ let entry_point =
+ let source_file =
+     let name = "SOURCE_FILE" in
+     let _doc = "the path to the smart contract file." in
+-    Command.Param.(anon (name %: Filename.arg_type))
++    Command.Param.(anon (name %: Filename_unix.arg_type))
+ 
+ let package_name =
+   let name = "PACKAGE_NAME" in
+@@ -662,7 +662,7 @@ let main = Command.group ~preserve_subcommand_order:() ~summary:"the LigoLANG co
+   ]
+ 
+ let run ?argv () =
+-  Command.run ~version:Version.version ?argv main;
++  Command_unix.run ~version:Version.version ?argv main;
+   (* Effect to error code *)
+   match !return with
+     Done -> 0;
+@@ -677,4 +677,3 @@ let run ?argv () =
+     match exn with
+     | Failure msg -> message msg
+     | exn -> message (Exn.to_string exn)
+-  
+diff --git a/src/bin/cli_helpers.ml b/src/bin/cli_helpers.ml
+index b64a17d53..8c4c43dde 100644
+--- a/src/bin/cli_helpers.ml
++++ b/src/bin/cli_helpers.ml
+@@ -66,7 +66,7 @@ let run_command (cmd : command) =
+     (fun p -> Lwt.map  
+       (fun status -> 
+         match status with
+-          Caml.Unix.WEXITED 0 -> Ok ()
++          Caml_unix.WEXITED 0 -> Ok ()
+         | _ -> Error ("unknown error"))
+         p#status) in
+   Lwt_main.run status
+\ No newline at end of file
+diff --git a/src/bin/dune b/src/bin/dune
+index 295c056f3..08d980439 100644
+--- a/src/bin/dune
++++ b/src/bin/dune
+@@ -11,7 +11,9 @@
+   repl
+   install
+   cli_helpers
+-  ligo_api)
++  ligo_api
++  core_unix.command_unix
++  core_unix.filename_unix)
+  (modules cli version))
+ 
+ (library
+diff --git a/src/main/interpreter/dune b/src/main/interpreter/dune
+index c55e24a88..f9762a297 100644
+--- a/src/main/interpreter/dune
++++ b/src/main/interpreter/dune
+@@ -4,4 +4,4 @@
+  (instrumentation
+   (backend bisect_ppx))
+  (libraries tezos-011-PtHangz2-test-helpers ast_aggregated ligo_interpreter
+-   main_errors ligo_compile build fuzz ligo_run self_ast_typed))
++   main_errors ligo_compile build fuzz ligo_run self_ast_typed core_unix.sys_unix))
+diff --git a/src/main/interpreter/interpreter.ml b/src/main/interpreter/interpreter.ml
+index b0379029c..530e08c3a 100644
+--- a/src/main/interpreter/interpreter.ml
++++ b/src/main/interpreter/interpreter.ml
+@@ -2,6 +2,7 @@ open Simple_utils.Trace
+ open Simple_utils
+ open Ligo_interpreter.Types
+ open Ligo_interpreter.Combinators
++module Sys = Sys_unix
+ 
+ module AST = Ast_aggregated
+ 
+diff --git a/vendors/ligo-utils/simple-utils/dune b/vendors/ligo-utils/simple-utils/dune
+index ca9f2bf5c..62c39087b 100644
+--- a/vendors/ligo-utils/simple-utils/dune
++++ b/vendors/ligo-utils/simple-utils/dune
+@@ -6,6 +6,7 @@
+   (libraries
+     ;; Third party
+    core
++   core_kernel.caml_unix
+    yojson
+    result
+    unix
+diff --git a/vendors/ligo-utils/simple-utils/snippet.ml b/vendors/ligo-utils/simple-utils/snippet.ml
+index 658f115f2..f23000590 100644
+--- a/vendors/ligo-utils/simple-utils/snippet.ml
++++ b/vendors/ligo-utils/simple-utils/snippet.ml
+@@ -1,7 +1,7 @@
+ (* used to show code snippets in error messages *)
+ 
+ let print_code ppf (l:Region.t) (input_line: unit -> string) =
+-  let dumb =String.equal (Caml.Unix.getenv "TERM") "dumb" in
++  let dumb =String.equal (Caml_unix.getenv "TERM") "dumb" in
+   let start = l#start#line in
+   let start_column = l#start#offset `Byte in
+   let stop = l#stop#line in
diff --git a/pkgs/development/compilers/purescript/purescript/default.nix b/pkgs/development/compilers/purescript/purescript/default.nix
index 46d74309660..8daed0ff783 100644
--- a/pkgs/development/compilers/purescript/purescript/default.nix
+++ b/pkgs/development/compilers/purescript/purescript/default.nix
@@ -61,6 +61,7 @@ in stdenv.mkDerivation rec {
     description = "A strongly-typed functional programming language that compiles to JavaScript";
     homepage = "https://www.purescript.org/";
     license = licenses.bsd3;
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
     maintainers = with maintainers; [ justinwoo mbbx6spp cdepillabout ];
     platforms = [ "x86_64-linux" "x86_64-darwin" ];
     mainProgram = "purs";
diff --git a/pkgs/development/coq-modules/mathcomp-finmap/default.nix b/pkgs/development/coq-modules/mathcomp-finmap/default.nix
index 744d5ea9851..dc19cd6e56e 100644
--- a/pkgs/development/coq-modules/mathcomp-finmap/default.nix
+++ b/pkgs/development/coq-modules/mathcomp-finmap/default.nix
@@ -7,6 +7,7 @@ with lib; mkCoqDerivation {
   owner = "math-comp";
   inherit version;
   defaultVersion = with versions; switch [ coq.version mathcomp.version ]  [
+      { cases = [ (range "8.13" "8.15")  (isGe "1.12") ];         out = "1.5.2"; }
       { cases = [ (isGe "8.10")          (isGe "1.11") ];         out = "1.5.1"; }
       { cases = [ (range "8.7" "8.11")   "1.11.0" ];              out = "1.5.0"; }
       { cases = [ (isEq "8.11")          (range "1.8" "1.10") ];  out = "1.4.0+coq-8.11"; }
@@ -16,6 +17,7 @@ with lib; mkCoqDerivation {
       { cases = [ (range "8.6" "8.7")    (range "1.6.1" "1.7") ]; out = "1.0.0"; }
     ] null;
   release = {
+    "1.5.2".sha256          = "sha256-0KmmSjc2AlUo6BKr9RZ4FjL9wlGISlTGU0X1Eu7l4sw=";
     "1.5.1".sha256          = "0ryfml4pf1dfya16d8ma80favasmrygvspvb923n06kfw9v986j7";
     "1.5.0".sha256          = "0vx9n1fi23592b3hv5p5ycy7mxc8qh1y5q05aksfwbzkk5zjkwnq";
     "1.4.1".sha256          = "0kx4nx24dml1igk0w0qijmw221r5bgxhwhl5qicnxp7ab3c35s8p";
diff --git a/pkgs/development/libraries/catch2/default.nix b/pkgs/development/libraries/catch2/default.nix
index bbbf08c6f07..111f1054f36 100644
--- a/pkgs/development/libraries/catch2/default.nix
+++ b/pkgs/development/libraries/catch2/default.nix
@@ -20,6 +20,6 @@ stdenv.mkDerivation rec {
     homepage = "http://catch-lib.net";
     license = licenses.boost;
     maintainers = with maintainers; [ edwtjo knedlsepp ];
-    platforms = with platforms; unix;
+    platforms = platforms.unix ++ [ "x86_64-windows" ];
   };
 }
diff --git a/pkgs/development/libraries/eclib/default.nix b/pkgs/development/libraries/eclib/default.nix
index 74a6f21992b..af358be3121 100644
--- a/pkgs/development/libraries/eclib/default.nix
+++ b/pkgs/development/libraries/eclib/default.nix
@@ -14,7 +14,7 @@ assert withFlint -> flint != null;
 
 stdenv.mkDerivation rec {
   pname = "eclib";
-  version = "20210625"; # upgrade might break the sage interface
+  version = "20220621"; # upgrade might break the sage interface
   # sage tests to run:
   # src/sage/interfaces/mwrank.py
   # src/sage/libs/eclib
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     # see https://github.com/JohnCremona/eclib/issues/64#issuecomment-789788561
     # for upstream's explanation of the above
     url = "https://github.com/JohnCremona/eclib/releases/download/${version}/eclib-${version}.tar.bz2";
-    sha256 = "sha256-fA3MPz/L+Q39sA8wxAYOUowlHRcgOd8VF4tpsBGI6BA=";
+    sha256 = "sha256-EfoCNhnXGuN5SxgPFES4BaevhSRzU1JvT3ARq9NMJhM=";
   };
   buildInputs = [
     pari
diff --git a/pkgs/development/libraries/fcppt/default.nix b/pkgs/development/libraries/fcppt/default.nix
index 46237505ff3..1a82a9289a6 100644
--- a/pkgs/development/libraries/fcppt/default.nix
+++ b/pkgs/development/libraries/fcppt/default.nix
@@ -1,17 +1,17 @@
-{ lib, stdenv, fetchFromGitHub, cmake, boost, catch2, metal }:
+{ lib, stdenv, fetchFromGitHub, cmake, boost, catch2 }:
 stdenv.mkDerivation rec {
   pname = "fcppt";
-  version = "3.5.0";
+  version = "4.2.1";
 
   src = fetchFromGitHub {
     owner = "freundlich";
     repo = "fcppt";
     rev = version;
-    sha256 = "045cmn4sym6ria96l4fsc1vrs8l4xrl1gzkmja82f4ddj8qkji2f";
+    sha256 = "1pcmi2ck12nanw1rnwf8lmyx85iq20897k6daxx3hw5f23j1kxv6";
   };
 
   nativeBuildInputs = [ cmake ];
-  buildInputs = [ boost catch2 metal ];
+  buildInputs = [ boost catch2 ];
 
   cmakeFlags = [
     "-DENABLE_BOOST=true"
@@ -32,6 +32,6 @@ stdenv.mkDerivation rec {
     homepage = "https://fcppt.org";
     license = licenses.boost;
     maintainers = with maintainers; [ pmiddend ];
-    platforms = platforms.linux;
+    platforms = [ "x86_64-linux" "x86_64-windows" ];
   };
 }
diff --git a/pkgs/development/libraries/libgsf/default.nix b/pkgs/development/libraries/libgsf/default.nix
index 8bc2dc76160..30324b04d85 100644
--- a/pkgs/development/libraries/libgsf/default.nix
+++ b/pkgs/development/libraries/libgsf/default.nix
@@ -17,13 +17,13 @@
 
 stdenv.mkDerivation rec {
   pname = "libgsf";
-  version = "1.14.49";
+  version = "1.14.50";
 
   outputs = [ "out" "dev" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "6evjZojwEMnm5AyJA/NzKUjeuKygMleNB9B1G9gs+Fc=";
+    sha256 = "bmwg0HeDOQadWDwNY3WdKX6BfqENDYl+u+ll8W4ujlI=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/libraries/libplacebo/default.nix b/pkgs/development/libraries/libplacebo/default.nix
index 94492132b9b..807b69f17f2 100644
--- a/pkgs/development/libraries/libplacebo/default.nix
+++ b/pkgs/development/libraries/libplacebo/default.nix
@@ -17,14 +17,14 @@
 
 stdenv.mkDerivation rec {
   pname = "libplacebo";
-  version = "4.192.1";
+  version = "4.208.0";
 
   src = fetchFromGitLab {
     domain = "code.videolan.org";
     owner = "videolan";
     repo = pname;
     rev = "v${version}";
-    sha256 = "13z2f0vwf9fgfzqgkqzvqwa8c8nkymrg5hv7xslfx53dacjfidhy";
+    sha256 = "161dp5781s74ca3gglaxlmchx7glyshf0wg43w98pl22n1jcm5qk";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/libraries/libuiohook/default.nix b/pkgs/development/libraries/libuiohook/default.nix
new file mode 100644
index 00000000000..3f1f48317fd
--- /dev/null
+++ b/pkgs/development/libraries/libuiohook/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, nixosTests
+, cmake
+, pkg-config
+, AppKit
+, ApplicationServices
+, Carbon
+, libX11
+, libxkbcommon
+, xinput
+, xorg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libuiohook";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "kwhat";
+    repo = pname;
+    rev = version;
+    sha256 = "1qlz55fp4i9dd8sdwmy1m8i4i1jy1s09cpmlxzrgf7v34w72ncm7";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs =
+    if stdenv.isDarwin then [ AppKit ApplicationServices Carbon ]
+    else [
+      libX11
+      libxkbcommon
+      xinput
+    ] ++
+    (with xorg; [
+      libXau
+      libXdmcp
+      libXi
+      libXinerama
+      libXt
+      libXtst
+      libXext
+      libxkbfile
+    ]);
+
+  outputs = [ "out" "test" ];
+
+  # We build the tests, but they're only installed when using the "test" output.
+  # This will produce a "uiohook_tests" binary which can be run to test the
+  # functionality of the library on the current system.
+  # Running the test binary requires a running X11 session.
+  cmakeFlags = [
+    "-DENABLE_TEST:BOOL=ON"
+  ];
+
+  postInstall = ''
+    mkdir -p $test/share
+    cp ./uiohook_tests $test/share
+  '';
+
+  meta = with lib; {
+    description = "A C library to provide global keyboard and mouse hooks from userland";
+    homepage = "https://github.com/kwhat/libuiohook";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ anoa ];
+  };
+
+  passthru.tests.libuiohook = nixosTests.libuiohook;
+}
diff --git a/pkgs/development/libraries/metal/default.nix b/pkgs/development/libraries/metal/default.nix
deleted file mode 100644
index 2f43485e05e..00000000000
--- a/pkgs/development/libraries/metal/default.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-{ lib, stdenv, fetchFromGitHub, cmake }:
-stdenv.mkDerivation rec {
-  pname = "metal";
-  version = "2.1.2";
-
-  src = fetchFromGitHub {
-    owner = "brunocodutra";
-    repo = "metal";
-    rev = "v${version}";
-    sha256 = "sha256-1I+EZtIz/2y4+dJGBONhTlUQGHgRdvXc1ZAOC9pmStw=";
-  };
-
-  nativeBuildInputs = [ cmake ];
-
-  meta = with lib; {
-    description = "Single-header C++11 library designed to make you love template metaprogramming";
-    homepage = "https://github.com/brunocodutra/metal";
-    license = licenses.mit;
-    maintainers = with maintainers; [ pmiddend ];
-    platforms = platforms.all;
-  };
-
-}
diff --git a/pkgs/development/libraries/neatvnc/default.nix b/pkgs/development/libraries/neatvnc/default.nix
index 728e4bf4272..68c0dff173a 100644
--- a/pkgs/development/libraries/neatvnc/default.nix
+++ b/pkgs/development/libraries/neatvnc/default.nix
@@ -29,6 +29,6 @@ stdenv.mkDerivation rec {
     changelog = "https://github.com/any1/neatvnc/releases/tag/v${version}";
     license = licenses.isc;
     platforms = platforms.linux;
-    maintainers = with maintainers; [ primeos ];
+    maintainers = with maintainers; [ nickcao ];
   };
 }
diff --git a/pkgs/development/libraries/protobuf/3.20.nix b/pkgs/development/libraries/protobuf/3.20.nix
new file mode 100644
index 00000000000..93d180159b8
--- /dev/null
+++ b/pkgs/development/libraries/protobuf/3.20.nix
@@ -0,0 +1,6 @@
+{ callPackage, abseil-cpp, ... }:
+
+callPackage ./generic-v3.nix {
+  version = "3.20.1";
+  sha256 = "sha256-pAMacD0UQetqysZHszu5slPqp0iREtDmHFv1cgcUBJA=";
+}
diff --git a/pkgs/development/libraries/protobuf/3.21.nix b/pkgs/development/libraries/protobuf/3.21.nix
new file mode 100644
index 00000000000..70c6095ae7b
--- /dev/null
+++ b/pkgs/development/libraries/protobuf/3.21.nix
@@ -0,0 +1,6 @@
+{ callPackage, abseil-cpp, ... }:
+
+callPackage ./generic-v3-cmake.nix {
+  version = "3.21.2";
+  sha256 = "sha256-DUv07pWiZV7jNeSA2ClDOz9DY0x/hiJynxkbSTeJOSs=";
+}
diff --git a/pkgs/development/libraries/protobuf/generic-v3-cmake.nix b/pkgs/development/libraries/protobuf/generic-v3-cmake.nix
new file mode 100644
index 00000000000..0b6967a6738
--- /dev/null
+++ b/pkgs/development/libraries/protobuf/generic-v3-cmake.nix
@@ -0,0 +1,107 @@
+# The cmake version of this build is meant to enable both cmake and .pc being exported
+# this is important because grpc exports a .cmake file which also expects for protobuf
+# to have been exported through cmake as well.
+{ lib
+, stdenv
+, abseil-cpp
+, buildPackages
+, cmake
+, fetchFromGitHub
+, fetchpatch
+, gtest
+, zlib
+, version
+, sha256
+
+# downstream dependencies
+, python3
+
+, ...
+}:
+
+let
+  self = stdenv.mkDerivation {
+    pname = "protobuf";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "protocolbuffers";
+      repo = "protobuf";
+      rev = "v${version}";
+      inherit sha256;
+    };
+
+    # re-create submodule logic
+    postPatch = ''
+      rm -rf gmock
+      cp -r ${gtest.src}/googlemock third_party/gmock
+      cp -r ${gtest.src}/googletest third_party/
+      chmod -R a+w third_party/
+
+      ln -s ../googletest third_party/gmock/gtest
+      ln -s ../gmock third_party/googletest/googlemock
+      ln -s $(pwd)/third_party/googletest third_party/googletest/googletest
+    '' + lib.optionalString stdenv.isDarwin ''
+      substituteInPlace src/google/protobuf/testing/googletest.cc \
+        --replace 'tmpnam(b)' '"'$TMPDIR'/foo"'
+    '';
+
+    patches = lib.optionals (lib.versionOlder version "3.22") [
+      # fix protobuf-targets.cmake installation paths, and allow for CMAKE_INSTALL_LIBDIR to be absolute
+      # https://github.com/protocolbuffers/protobuf/pull/10090
+      (fetchpatch {
+        url = "https://github.com/protocolbuffers/protobuf/commit/a7324f88e92bc16b57f3683403b6c993bf68070b.patch";
+        sha256 = "sha256-SmwaUjOjjZulg/wgNmR/F5b8rhYA2wkKAjHIOxjcQdQ=";
+      })
+    ];
+
+    nativeBuildInputs = let
+      protobufVersion = "${lib.versions.major version}_${lib.versions.minor version}";
+    in [
+      cmake
+    ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+      # protoc of the same version must be available for build. For non-cross builds, it's able to
+      # re-use the executable generated as part of the build
+      buildPackages."protobuf${protobufVersion}"
+    ];
+
+    buildInputs = [
+      abseil-cpp
+      zlib
+    ];
+
+    # After 3.20, CMakeLists.txt can now be found at the top-level, however
+    # a stub cmake/CMakeLists.txt still exists for compatibility with previous build assumptions
+    cmakeDir = "../cmake";
+    cmakeFlags = [
+      "-Dprotobuf_ABSL_PROVIDER=package"
+      ] ++ lib.optionals (!stdenv.targetPlatform.isStatic) [
+      "-Dprotobuf_BUILD_SHARED_LIBS=ON"
+    ];
+
+    # unfortunately the shared libraries have yet to been patched by nix, thus tests will fail
+    doCheck = false;
+
+    passthru = {
+      tests = {
+        pythonProtobuf = python3.pkgs.protobuf.override(_: {
+          protobuf = self;
+        });
+      };
+    };
+
+    meta = {
+      description = "Google's data interchange format";
+      longDescription = ''
+        Protocol Buffers are a way of encoding structured data in an efficient
+        yet extensible format. Google uses Protocol Buffers for almost all of
+        its internal RPC protocols and file formats.
+      '';
+      license = lib.licenses.bsd3;
+      platforms = lib.platforms.unix;
+      homepage = "https://developers.google.com/protocol-buffers/";
+      maintainers = with lib.maintainers; [ jonringer ];
+    };
+  };
+in
+  self
diff --git a/pkgs/development/libraries/science/astronomy/stellarsolver/default.nix b/pkgs/development/libraries/science/astronomy/stellarsolver/default.nix
index 754f408ca26..9236ac55eb6 100644
--- a/pkgs/development/libraries/science/astronomy/stellarsolver/default.nix
+++ b/pkgs/development/libraries/science/astronomy/stellarsolver/default.nix
@@ -3,13 +3,13 @@
 
 mkDerivation rec {
   pname = "stellarsolver";
-  version = "2.2";
+  version = "2.3";
 
   src = fetchFromGitHub {
     owner = "rlancaste";
     repo = pname;
     rev = version;
-    sha256 = "sha256-Ay7bszR4D5KKFiVLXfweJcc8jgUSZljnZVblEx7xh8o=";
+    sha256 = "sha256-DSydgn9brVQlVNfW8Lnw/ZNs7aftokkCuJshgqmegpY=";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/pkgs/development/libraries/x265/default.nix b/pkgs/development/libraries/x265/default.nix
index 20c56f4d903..3bf11737eb3 100644
--- a/pkgs/development/libraries/x265/default.nix
+++ b/pkgs/development/libraries/x265/default.nix
@@ -104,7 +104,7 @@ stdenv.mkDerivation rec {
 
   cmakeFlags = cmakeCommonFlags ++ [
     "-DGIT_ARCHETYPE=1" # https://bugs.gentoo.org/814116
-    "-DENABLE_SHARED=ON"
+    "-DENABLE_SHARED=${if stdenv.hostPlatform.isStatic then "OFF" else "ON"}"
     "-DHIGH_BIT_DEPTH=OFF"
     "-DENABLE_HDR10_PLUS=ON"
   ] ++ [
diff --git a/pkgs/development/ocaml-modules/bap/default.nix b/pkgs/development/ocaml-modules/bap/default.nix
index 4f87715a74a..eaaf621900a 100644
--- a/pkgs/development/ocaml-modules/bap/default.nix
+++ b/pkgs/development/ocaml-modules/bap/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchFromGitHub, fetchurl
+{ lib, stdenv, fetchFromGitHub, fetchurl, fetchpatch
 , ocaml, findlib, ocamlbuild, ocaml_oasis
 , bitstring, camlzip, cmdliner, core_kernel, ezjsonm, fileutils, ocaml_lwt, ocamlgraph, ocurl, re, uri, zarith, piqi, piqi-ocaml, uuidm, llvm, frontc, ounit, ppx_jane, parsexp
 , utop, libxml2, ncurses
@@ -64,7 +64,13 @@ stdenv.mkDerivation rec {
   disableIda = "--disable-ida";
   disableGhidra = "--disable-ghidra";
 
-  patches = [ ./curses_is_ncurses.patch ];
+  patches = [
+    ./curses_is_ncurses.patch
+    (fetchpatch {
+      url = "https://github.com/BinaryAnalysisPlatform/bap/commit/8b1bba30ebb551256a5b15122e70d07f40184039.patch";
+      sha256 = "0il0ik5f6nyqyrlln3n43mz1zpqq34lfnhmp10wdsah4ck2dy75h";
+    })
+  ];
 
   preConfigure = ''
     substituteInPlace oasis/elf-loader --replace bitstring.ppx ppx_bitstring
diff --git a/pkgs/development/ocaml-modules/biocaml/default.nix b/pkgs/development/ocaml-modules/biocaml/default.nix
index 596ed6161d7..b82ec736179 100644
--- a/pkgs/development/ocaml-modules/biocaml/default.nix
+++ b/pkgs/development/ocaml-modules/biocaml/default.nix
@@ -4,7 +4,7 @@
 
 buildDunePackage rec {
   pname = "biocaml";
-  version = "0.11.1";
+  version = "0.11.2";
 
   useDune2 = true;
 
@@ -14,7 +14,12 @@ buildDunePackage rec {
     owner = "biocaml";
     repo   = pname;
     rev    = "v${version}";
-    sha256 = "1il84vvypgkhdyc2j5fmgh14a58069s6ijbd5dvyl2i7jdxaazji";
+    sha256 = "01yw12yixs45ya1scpb9jy2f7dw1mbj7741xib2xpq3kkc1hc21s";
+  };
+
+  patches = fetchpatch {
+    url = "https://github.com/biocaml/biocaml/commit/3ef74d0eb4bb48d2fb7dd8b66fb3ad8fe0aa4d78.patch";
+    sha256 = "0rcvf8gwq7sz15mghl9ing722rl2zpnqif9dfxrnpdxiv0rl0731";
   };
 
   buildInputs = [ ppx_jane ppx_sexp_conv ];
diff --git a/pkgs/development/ocaml-modules/bistro/default.nix b/pkgs/development/ocaml-modules/bistro/default.nix
index 348d1bb97d4..43cbd33f738 100644
--- a/pkgs/development/ocaml-modules/bistro/default.nix
+++ b/pkgs/development/ocaml-modules/bistro/default.nix
@@ -1,10 +1,13 @@
 { lib
 , ocaml
+, fetchpatch
 , fetchFromGitHub
 , buildDunePackage
 , base64
 , bos
 , core
+, core_kernel
+, core_unix
 , lwt_react
 , ocamlgraph
 , ppx_sexp_conv
@@ -15,21 +18,23 @@
 
 buildDunePackage rec {
   pname = "bistro";
-  version = "unstable-2021-11-13";
+  version = "unstable-2022-05-07";
 
   useDune2 = true;
 
   src = fetchFromGitHub {
     owner = "pveber";
     repo = pname;
-    rev = "fb285b2c6d8adccda3c71e2293bceb01febd6624";
-    sha256 = "sha256-JChDU1WH8W9Czkppx9SHiVIu9/7QFWJy2A89oksp0Ek=";
+    rev = "d363bd2d8257babbcb6db15bd83fd6465df7c268";
+    sha256 = "0g11324j1s2631zzf7zxc8s0nqd4fwvcni0kbvfpfxg96gy2wwfm";
   };
 
   propagatedBuildInputs = [
     base64
     bos
     core
+    core_kernel
+    core_unix
     lwt_react
     ocamlgraph
     ppx_sexp_conv
diff --git a/pkgs/development/ocaml-modules/cohttp/async.nix b/pkgs/development/ocaml-modules/cohttp/async.nix
index fed31fbe495..2ad452ff6e6 100644
--- a/pkgs/development/ocaml-modules/cohttp/async.nix
+++ b/pkgs/development/ocaml-modules/cohttp/async.nix
@@ -1,4 +1,6 @@
 { lib
+, fetchpatch
+, fetchurl
 , buildDunePackage
 , ppx_sexp_conv
 , base
@@ -47,13 +49,21 @@ buildDunePackage {
     ipaddr
   ];
 
-  doCheck = true;
+  # Examples don't compile with core 0.15.  See https://github.com/mirage/ocaml-cohttp/pull/864.
+  doCheck = false;
   checkInputs = [
     ounit
     mirage-crypto
     core
   ];
 
+  # Compatibility with core 0.15.  No longer needed after updating cohttp to 5.0.0.
+  patches = fetchpatch {
+    url = "https://github.com/mirage/ocaml-cohttp/commit/5a7124478ed31c6b1fa6a9a50602c2ec839083b5.patch";
+    sha256 = "0i99rl8604xqwb6d0yzk9ws4dflbn0j4hv2nba2qscbqrrn22rw3";
+  };
+  patchFlags = "-p1 -F3";
+
   meta = cohttp.meta // {
     description = "CoHTTP implementation for the Async concurrency library";
   };
diff --git a/pkgs/development/ocaml-modules/faraday/async.nix b/pkgs/development/ocaml-modules/faraday/async.nix
index 666eb684925..05b085f92ac 100644
--- a/pkgs/development/ocaml-modules/faraday/async.nix
+++ b/pkgs/development/ocaml-modules/faraday/async.nix
@@ -1,9 +1,14 @@
-{ buildDunePackage, faraday, core, async }:
+{ buildDunePackage, fetchpatch, faraday, core, async }:
 
 buildDunePackage rec {
   pname = "faraday-async";
   inherit (faraday) version src useDune2;
 
+  patches = fetchpatch {
+    url = "https://github.com/inhabitedtype/faraday/commit/31c3fc7f91ecca0f1deea10b40fd5e33bcd35f75.patch";
+    sha256 = "05z5gk7hxq7qvwg6f73hdhfcnx19p1dq6wqh8prx667y8zsaq2zj";
+  };
+
   minimumOCamlVersion = "4.08";
 
   propagatedBuildInputs = [ faraday core async ];
diff --git a/pkgs/development/ocaml-modules/hack_parallel/default.nix b/pkgs/development/ocaml-modules/hack_parallel/default.nix
index 122ee2149f3..8d1414731f1 100644
--- a/pkgs/development/ocaml-modules/hack_parallel/default.nix
+++ b/pkgs/development/ocaml-modules/hack_parallel/default.nix
@@ -1,5 +1,5 @@
-{ lib, fetchFromGitHub, buildDunePackage, core, core_kernel, pkg-config, sqlite
-}:
+{ lib, fetchFromGitHub, buildDunePackage, core, core_unix, pkg-config
+, sqlite }:
 buildDunePackage rec {
   pname = "hack_parallel";
   version = "1.0.1";
@@ -13,9 +13,11 @@ buildDunePackage rec {
     sha256 = "0qjlkw35r4q2cm0n2x0i73zvx1xgrp6axaia2nm8zxpm49mid629";
   };
 
+  patches = [ ./hack_parallel.patch ];
+
   nativeBuildInputs = [ pkg-config ];
 
-  propagatedBuildInputs = [ core core_kernel sqlite ];
+  propagatedBuildInputs = [ core core_unix sqlite ];
 
   meta = {
     description =
diff --git a/pkgs/development/ocaml-modules/hack_parallel/hack_parallel.patch b/pkgs/development/ocaml-modules/hack_parallel/hack_parallel.patch
new file mode 100644
index 00000000000..174803a3481
--- /dev/null
+++ b/pkgs/development/ocaml-modules/hack_parallel/hack_parallel.patch
@@ -0,0 +1,68 @@
+diff --git a/src/heap/sharedMem.ml b/src/heap/sharedMem.ml
+index 600e272..511b724 100644
+--- a/src/heap/sharedMem.ml
++++ b/src/heap/sharedMem.ml
+@@ -521,7 +521,7 @@ end = struct
+ 
+     let stack: t option ref = ref None
+ 
+-    let has_local_changes () = Core_kernel.Option.is_some (!stack)
++    let has_local_changes () = Core.Option.is_some (!stack)
+ 
+     let rec mem stack_opt key =
+       match stack_opt with
+diff --git a/src/interface/memory.ml b/src/interface/memory.ml
+index 3554b17..09aa1f5 100644
+--- a/src/interface/memory.ml
++++ b/src/interface/memory.ml
+@@ -66,10 +66,10 @@ let get_heap_handle () =
+ 
+ 
+ let heap_use_ratio () =
+-  Core_kernel.Float.of_int (SharedMemory.heap_size ()) /.
+-  Core_kernel.Float.of_int initial_heap_size
++  Core.Float.of_int (SharedMemory.heap_size ()) /.
++  Core.Float.of_int initial_heap_size
+ 
+ 
+ let slot_use_ratio () =
+   let { SharedMemory.used_slots; slots; _ } = SharedMemory.hash_stats () in
+-  Core_kernel.Float.of_int used_slots /. Core_kernel.Float.of_int slots
++  Core.Float.of_int used_slots /. Core.Float.of_int slots
+diff --git a/src/interface/scheduler.ml b/src/interface/scheduler.ml
+index 9b8282a..b5d41b5 100644
+--- a/src/interface/scheduler.ml
++++ b/src/interface/scheduler.ml
+@@ -48,7 +48,7 @@ let map_reduce
+     | Some exact_size when exact_size > 0 ->
+       (List.length work / exact_size) + 1
+     | _ ->
+-      let bucket_multiplier = Core_kernel.Int.min bucket_multiplier (1 + (List.length work / 400)) in
++      let bucket_multiplier = Core.Int.min bucket_multiplier (1 + (List.length work / 400)) in
+       number_of_workers * bucket_multiplier
+   in
+   MultiWorker.call
+diff --git a/src/utils/dune b/src/utils/dune
+index 50a4c42..45e4a5a 100644
+--- a/src/utils/dune
++++ b/src/utils/dune
+@@ -15,6 +15,7 @@
+     sysinfo)
+   (libraries
+     core
++    core_unix
+     str
+     hack_parallel.collections
+     hack_parallel.disk
+diff --git a/src/utils/hh_logger.ml b/src/utils/hh_logger.ml
+index 4c99f05..8075ed5 100644
+--- a/src/utils/hh_logger.ml
++++ b/src/utils/hh_logger.ml
+@@ -9,6 +9,7 @@
+ *)
+ 
+ open Core
++module Unix = Core_unix
+ 
+ let timestamp_string () =
+   let open Unix in
diff --git a/pkgs/development/ocaml-modules/janestreet/0.15.nix b/pkgs/development/ocaml-modules/janestreet/0.15.nix
new file mode 100644
index 00000000000..8510b3a8c29
--- /dev/null
+++ b/pkgs/development/ocaml-modules/janestreet/0.15.nix
@@ -0,0 +1,1007 @@
+{ self
+, fetchpatch
+, lib
+, openssl
+, patdiff
+, zstd
+}:
+
+with self;
+
+{
+
+  abstract_algebra = janePackage {
+    pname = "abstract_algebra";
+    minimumOCamlVersion = "4.08";
+    hash = "12imf6ibm7qb8r1fpqnrl20x2z14zl3ri1vzg0z8qby9l8bv2fbd";
+    meta.description = "A small library describing abstract algebra concepts";
+    propagatedBuildInputs = [ base ppx_jane ];
+  };
+
+  accessor = janePackage {
+    pname = "accessor";
+    minimumOCamlVersion = "4.09";
+    hash = "17rzf0jpc9s3yrxcnn630jhgsw5mrnrhwbfh62hqxqanascc5rxh";
+    meta.description = "A library that makes it nicer to work with nested functional data structures";
+    propagatedBuildInputs = [ higher_kinded ];
+  };
+
+  accessor_async = janePackage {
+    pname = "accessor_async";
+    minimumOCamlVersion = "4.09";
+    hash = "17r6af55ms0i496jsfx0xpdm336c2vhyf49b3s8s1gpz521wrgmc";
+    meta.description = "Accessors for Async types, for use with the Accessor library";
+    propagatedBuildInputs = [ accessor_core async_kernel ];
+  };
+
+  accessor_base = janePackage {
+    pname = "accessor_base";
+    minimumOCamlVersion = "4.09";
+    hash = "1qvq005vxf6n1c7swzb4bzcqdh471bfb9gcmdj4m57xg85xznc1n";
+    meta.description = "Accessors for Base types, for use with the Accessor library";
+    propagatedBuildInputs = [ ppx_accessor ];
+  };
+
+  accessor_core = janePackage {
+    minimumOCamlVersion = "4.09";
+    pname = "accessor_core";
+    hash = "0zrs5zbyrhfbah73g22l19bw1mmljhyb3l2mrwcxgbjq9pqp0k9v";
+    meta.description = "Accessors for Core types, for use with the Accessor library";
+    propagatedBuildInputs = [ accessor_base core_kernel ];
+  };
+
+  async = janePackage {
+    pname = "async";
+    hash = "0pykmnsil754jsnr8gss91ykyjvivngx4ii0ih3nsg1x2jl9xmy2";
+    meta.description = "Monadic concurrency library";
+    propagatedBuildInputs = [ async_rpc_kernel async_unix textutils ];
+    doCheck = false; # we don't have netkit_sockets
+  };
+
+  async_extra = janePackage {
+    pname = "async_extra";
+    hash = "0pxp0b4shz9krsj8xfzajv8a1mijgf0xdgxrn2abdqrz3rvj6pig";
+    meta.description = "Monadic concurrency library";
+    propagatedBuildInputs = [ async_kernel ];
+  };
+
+  async_find = janePackage {
+    pname = "async_find";
+    hash = "119988nkcnw6l6wch4llqkvsrawv2gkbn5q4hngpdwvnw0g0aapv";
+    meta.description = "Directory traversal with Async";
+    propagatedBuildInputs = [ async ];
+  };
+
+  async_inotify = janePackage {
+    pname = "async_inotify";
+    hash = "1nxz6bijp7liy18ljrxg92v2m8v8fqcs1pmzg9kbcf0d4vij8j2p";
+    meta.description = "Async wrapper for inotify";
+    propagatedBuildInputs = [ async_find inotify ];
+  };
+
+  async_interactive = janePackage {
+    pname = "async_interactive";
+    hash = "00hr2lhs8p3hwnyllmns59rwlpimc5b7r6v4zn6cmpb1riblaxqp";
+    meta.description = "Utilities for building simple command-line based user interfaces";
+    propagatedBuildInputs = [ async ];
+  };
+
+  async_js = janePackage {
+    pname = "async_js";
+    hash = "184j077bz686k5lrqswircnrdqldb316ngpzq7xri1pcsl39sy3q";
+    meta.description = "A small library that provide Async support for JavaScript platforms";
+    buildInputs = [ js_of_ocaml-ppx ];
+    propagatedBuildInputs = [ async_rpc_kernel js_of_ocaml uri-sexp ];
+  };
+
+  async_kernel = janePackage {
+    pname = "async_kernel";
+    hash = "01if6c8l2h64v7sk56xr8acnmj6g9whxcjrzzzvczspq88hq2bfh";
+    meta.description = "Monadic concurrency library";
+    propagatedBuildInputs = [ core_kernel ];
+  };
+
+  async_rpc_kernel = janePackage {
+    pname = "async_rpc_kernel";
+    hash = "1b5rp5yam03ir4f1sixpzjg1zdqmkb7lvnaa82kac4fzk80gfrfr";
+    meta.description = "Platform-independent core of Async RPC library";
+    propagatedBuildInputs = [ async_kernel protocol_version_header ];
+  };
+
+  async_rpc_websocket = janePackage {
+    pname = "async_rpc_websocket";
+    hash = "1n93jhkz5r76xcc40c4i4sxcyfz1dbppz8sjfxpwcwjyi6lyhp1p";
+    meta.description = "Library to serve and dispatch Async RPCs over websockets";
+    propagatedBuildInputs = [ async_rpc_kernel async_websocket cohttp_async_websocket ];
+  };
+
+  async_sendfile = janePackage {
+    pname = "async_sendfile";
+    hash = "0lnagdxfnac4z29narphf2ab5a23ys883zmc45r96rssfx82i3fs";
+    meta.description = "Thin wrapper around [Linux_ext.sendfile] to send full files";
+    propagatedBuildInputs = [ async_unix ];
+  };
+
+  async_shell = janePackage {
+    pname = "async_shell";
+    hash = "07iwlyrc4smk6hsnz89cz2ihp670mllq0y9wbdafvagm1y1p62vx";
+    meta.description = "Shell helpers for Async";
+    propagatedBuildInputs = [ async shell ];
+  };
+
+  async_smtp = janePackage {
+    pname = "async_smtp";
+    hash = "1m00j7wcb0blipnc1m6by70gd96a1k621b4dgvgffp8as04a461r";
+    meta.description = "SMTP client and server";
+    propagatedBuildInputs = [ async_extra async_inotify async_sendfile async_shell async_ssl email_message resource_cache re2_stable sexp_macro ];
+  };
+
+  async_ssl = janePackage {
+    pname = "async_ssl";
+    hash = "1b7f7p3xj4jr2n2dxy2lp7a9k7944w6x2nrg6524clvcsd1ax4hn";
+    meta.description = "Async wrappers for SSL";
+    buildInputs = [ dune-configurator ];
+    propagatedBuildInputs = [ async ctypes openssl ];
+    # in ctypes.foreign 0.18.0 threaded and unthreaded have been merged
+    postPatch = ''
+      substituteInPlace bindings/dune \
+        --replace "ctypes.foreign.threaded" "ctypes.foreign"
+    '';
+  };
+
+  async_unix = janePackage {
+    pname = "async_unix";
+    hash = "0z4fgpn93iw0abd7l9kac28qgzgc5qr2x0s1n2zh49lsdn02n6ys";
+    meta.description = "Monadic concurrency library";
+    propagatedBuildInputs = [ async_kernel core_unix ];
+  };
+
+  async_websocket = janePackage {
+    pname = "async_websocket";
+    hash = "16ixqfnx9jp77bvx11dlzsq0pzfpyiif60hl2q06zncyswky9xgb";
+    meta.description = "A library that implements the websocket protocol on top of Async";
+    propagatedBuildInputs = [ async cryptokit ];
+  };
+
+  base = janePackage {
+    pname = "base";
+    hash = "1qyycqqr4dijvxm4hhy79c964wd91kpsfvb89kna1qwgllg0hrpj";
+    minimumOCamlVersion = "4.10";
+    meta.description = "Full standard library replacement for OCaml";
+    buildInputs = [ dune-configurator ];
+    propagatedBuildInputs = [ sexplib0 ];
+    checkInputs = [ alcotest ];
+  };
+
+  base_bigstring = janePackage {
+    pname = "base_bigstring";
+    hash = "1hv3hw2fwqmkrxms1g6rw3c18mmla1z5bva3anx45mnff903iv4q";
+    minimumOCamlVersion = "4.08";
+    meta.description = "String type based on [Bigarray], for use in I/O and C-bindings";
+    propagatedBuildInputs = [ int_repr ppx_jane ];
+  };
+
+  base_quickcheck = janePackage {
+    pname = "base_quickcheck";
+    hash = "0q73kfr67cz5wp4qn4rq3lpa922hqmvwdiinnans0js65fvlgqsi";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Randomized testing framework, designed for compatibility with Base";
+    propagatedBuildInputs = [ ppx_base ppx_fields_conv ppx_let ppx_sexp_value splittable_random ];
+  };
+
+  bignum = janePackage {
+    pname = "bignum";
+    hash = "12q3xcv78b4s9srnc17jbyn53d5drmwmyvgp62p7nk3fs4f7cr4f";
+    propagatedBuildInputs = [ core_kernel zarith zarith_stubs_js ];
+    meta.description = "Core-flavoured wrapper around zarith's arbitrary-precision rationals";
+  };
+
+  bin_prot = janePackage {
+    pname = "bin_prot";
+    hash = "1qfqglscc25wwnjx7byqmjcnjww1msnr8940gyg8h93wdq43fjnh";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "A binary protocol generator";
+    propagatedBuildInputs = [ ppx_compare ppx_custom_printf ppx_fields_conv ppx_optcomp ppx_variants_conv ];
+  };
+
+  bonsai = janePackage {
+    pname = "bonsai";
+    hash = "150zx2g1dmhyrxwqq8j7f2m3hjpmk5bk182ihx2gdbarhw1ainpm";
+    meta.description = "A library for building dynamic webapps, using Js_of_ocaml";
+    buildInputs = [ ppx_pattern_bind ];
+    nativeBuildInputs = [ js_of_ocaml-compiler ocaml-embed-file ];
+    propagatedBuildInputs = [
+      async
+      async_extra
+      async_rpc_websocket
+      cohttp-async
+      core_bench
+      fuzzy_match
+      incr_dom
+      js_of_ocaml-ppx
+      patdiff
+      ppx_css
+      ppx_typed_fields
+      profunctor
+      textutils
+    ];
+    patches = [ ./bonsai_jsoo_4_0.patch ];
+  };
+
+  cinaps = janePackage {
+    pname = "cinaps";
+    version = "0.15.1";
+    hash = "0g856cxmxg4vicwslhqldplkpwi158s2d62vwzv26xg5m6wjn9rg";
+    minimumOCamlVersion = "4.04";
+    meta.description = "Trivial metaprogramming tool";
+    propagatedBuildInputs = [ re ];
+    doCheck = false; # fails because ppx_base doesn't include ppx_js_style
+  };
+
+  cohttp_async_websocket = janePackage {
+    pname = "cohttp_async_websocket";
+    hash = "0d0smavnxpnwrmhlcf3b5a3cm3n9kz1y8fh6l28xv6zrn4sc7ik8";
+    meta.description = "Websocket library for use with cohttp and async";
+    propagatedBuildInputs = [ async_websocket cohttp-async ppx_jane uri-sexp ];
+  };
+
+  core = janePackage {
+    pname = "core";
+    hash = "1m2ybvlz9zlb2d0jc0j7wdgd18mx9sh3ds2ylkv0cfjx1pzi0l25";
+    meta.description = "Industrial strength alternative to OCaml's standard library";
+    buildInputs = [ jst-config ];
+    propagatedBuildInputs = [ base base_bigstring base_quickcheck ppx_jane time_now ];
+    doCheck = false; # circular dependency with core_kernel
+  };
+
+  core_bench = janePackage {
+    pname = "core_bench";
+    hash = "0v6lm9vz6y1qd7h8pg9l5jsy8qr74vlk1nd4qzchld4jhwq7mbdi";
+    meta.description = "Benchmarking library";
+    propagatedBuildInputs = [ textutils ];
+  };
+
+  core_extended = janePackage {
+    pname = "core_extended";
+    hash = "0sx79hc1y1daczib2p4nbyw4aqnznmdd83knrhs5q153j7lnlalx";
+    meta.description = "Extra components that are not as closely vetted or as stable as Core";
+    propagatedBuildInputs = [ core_unix record_builder ];
+  };
+
+  core_kernel = janePackage {
+    pname = "core_kernel";
+    hash = "05mb4vbf293iq1xx4acyrmi9cgcw6capwrsa54ils62alby6w6yq";
+    meta.description = "System-independent part of Core";
+    buildInputs = [ jst-config ];
+    propagatedBuildInputs = [ base_bigstring core int_repr sexplib ];
+    doCheck = false; # we don't have quickcheck_deprecated
+  };
+
+  core_unix = janePackage {
+    pname = "core_unix";
+    hash = "1xzxqzg23in5ivz0v3qshzpr4w92laayscqj9im7jylh2ar1xi0a";
+    meta.description = "Unix-specific portions of Core";
+    buildInputs = [ jst-config ];
+    propagatedBuildInputs = [ core_kernel expect_test_helpers_core ocaml_intrinsics ppx_jane timezone spawn ];
+    postPatch = ''
+      patchShebangs unix_pseudo_terminal/src/discover.sh
+    '';
+  };
+
+  csvfields = janePackage {
+    pname = "csvfields";
+    hash = "0z47pq17bw776hzvk48ypbd92ps9vlvl86mnhw3j6cqx4ahbjik3";
+    propagatedBuildInputs = [ core num ];
+    meta.description = "Runtime support for ppx_xml_conv and ppx_csv_conv";
+  };
+
+  delimited_parsing = janePackage {
+    pname = "delimited_parsing";
+    hash = "0d050v58zzi8c4qiwxbfcyrdw6zvncnnl3qj79qi0yq4xkg7820r";
+    propagatedBuildInputs = [ async core_extended ];
+    meta.description = "Parsing of character (e.g., comma) separated and fixed-width values";
+  };
+
+  ecaml = janePackage {
+    pname = "ecaml";
+    hash = "08g2bl06vkn3bkqzkmvk2646aqb6jj4a7n3wgzpcx1c2gl3iw5i6";
+    meta.description = "Library for writing Emacs plugin in OCaml";
+    propagatedBuildInputs = [ async expect_test_helpers_core ];
+  };
+
+  email_message = janePackage {
+    pname = "email_message";
+    hash = "00h66l2g5rjaay0hbyqy4v9i866g779miriwv20h9k4mliqdq7in";
+    meta.description = "E-mail message parser";
+    propagatedBuildInputs = [ angstrom async base64 cryptokit magic-mime re2 ];
+  };
+
+  expect_test_helpers_async = janePackage {
+    pname = "expect_test_helpers_async";
+    hash = "14v4966p5dmqgjb9sgrvnsixv0w0bagicn8v44g9mf9d88z8pfym";
+    meta.description = "Async helpers for writing expectation tests";
+    propagatedBuildInputs = [ async expect_test_helpers_core ];
+  };
+
+  expect_test_helpers_core = janePackage {
+    pname = "expect_test_helpers_core";
+    hash = "0bxs3g0zzym8agfcbpg5lmrh6hcb86z861bq40xhhfwqf4pzdbfa";
+    meta.description = "Helpers for writing expectation tests";
+    propagatedBuildInputs = [ core_kernel sexp_pretty ];
+  };
+
+  fieldslib = janePackage {
+    pname = "fieldslib";
+    hash = "0xwf9mdxlyr3f0vv5y82cyw2bsckwl8rwf6jm6bai1gqpgxjq756";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Syntax extension to define first class values representing record fields, to get and set record fields, iterate and fold over all fields of a record and create new record values";
+    propagatedBuildInputs = [ base ];
+  };
+
+  fuzzy_match = janePackage {
+    pname = "fuzzy_match";
+    hash = "0s5w81698b07l5m11nwx8xbjcpmp54dnf5fcrnlva22jrlsf14h4";
+    meta.description = "A library for fuzzy string matching";
+    propagatedBuildInputs = [ core ppx_jane ];
+  };
+
+  higher_kinded = janePackage {
+    pname = "higher_kinded";
+    minimumOCamlVersion = "4.09";
+    hash = "0rafxxajqswi070h8sinhjna0swh1hc6d7i3q7y099yj3wlr2y1l";
+    meta.description = "A library with an encoding of higher kinded types in OCaml";
+    propagatedBuildInputs = [ base ppx_jane ];
+  };
+
+  incr_dom = janePackage {
+    pname = "incr_dom";
+    hash = "1sija9w2im8vdp61h387w0mww9hh7jgkgsjcccps4lbv936ac7c1";
+    meta.description = "A library for building dynamic webapps, using Js_of_ocaml";
+    buildInputs = [ js_of_ocaml-ppx ];
+    propagatedBuildInputs = [ async_js incr_map incr_select virtual_dom ];
+    patches = [ ./incr_dom_jsoo_4_0.patch ];
+  };
+
+  incr_map = janePackage {
+    pname = "incr_map";
+    hash = "0aq8wfylvq68him92vzh1fqmr7r0lfwc5cdiqr10r5x032vzpnii";
+    meta.description = "Helpers for incremental operations on map like data structures";
+    buildInputs = [ ppx_pattern_bind ];
+    propagatedBuildInputs = [ abstract_algebra incremental ];
+  };
+
+  incr_select = janePackage {
+    pname = "incr_select";
+    hash = "0qm2i4hb5jh2ra95kq881s4chkwbd2prvql1c0nahd63h829m57l";
+    meta.description = "Handling of large set of incremental outputs from a single input";
+    propagatedBuildInputs = [ incremental ];
+  };
+
+  incremental = janePackage {
+    pname = "incremental";
+    hash = "1dp30mhljnbcxqimydwbmxx0x4y4xnb55gyhldm1f5qrwdxdl747";
+    meta.description = "Library for incremental computations";
+    propagatedBuildInputs = [ core_kernel ];
+  };
+
+  int_repr = janePackage {
+    pname = "int_repr";
+    hash = "0ph88ym3s9dk30n17si2xam40sp8wv1xffw5cl3bskc2vfya1nvl";
+    meta.description = "Integers of various widths";
+    propagatedBuildInputs = [ base ppx_jane ];
+  };
+
+  jane-street-headers = janePackage {
+    pname = "jane-street-headers";
+    hash = "1lzk3w66x4429n2j75lwm55xafc46mywgdrbh9nc9jwqwgzf0wwx";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Jane Street C header files";
+  };
+
+  jsonaf = janePackage {
+    pname = "jsonaf";
+    hash = "1j9rn8vsvfpgmdpmdqb5qhvss5171j8n3ii1bcgnavqinchbvqa6";
+    meta.description = "A library for parsing, manipulating, and serializing data structured as JSON";
+    propagatedBuildInputs = [ base ppx_jane angstrom faraday ];
+  };
+
+  jst-config = janePackage {
+    pname = "jst-config";
+    hash = "1lxqsj5k3v8p7g802vj1xc6bs5wrfpszh3q61xvpcd42pf3ahma9";
+    meta.description = "Compile-time configuration for Jane Street libraries";
+    buildInputs = [ dune-configurator ppx_assert stdio ];
+    patches = [
+      # remove on next release
+      (fetchpatch {
+        url = "https://github.com/janestreet/jst-config/commit/e5fdac6e5df9ba93e014a4d2db841fdbf209446f.patch";
+        sha256 = "sha256-8hVC76z5ilYD/++xRHVswy/l+zzDt63jH4hfSJ/rPaA=";
+      })
+    ];
+  };
+
+  ocaml-compiler-libs = janePackage {
+    pname = "ocaml-compiler-libs";
+    version = "0.12.4";
+    minimumOCamlVersion = "4.04.1";
+    hash = "00if2f7j9d8igdkj4rck3p74y17j6b233l91mq02drzrxj199qjv";
+    meta.description = "OCaml compiler libraries repackaged";
+  };
+
+  ocaml-embed-file = janePackage {
+    pname = "ocaml-embed-file";
+    hash = "1nzgc0q05f0j3q1kwfpyhhhpgwrfjvmkqqifrkrm4y7d1i44bfnw";
+    propagatedBuildInputs = [ async ppx_jane ];
+    meta.description = "Files contents as module constants";
+  };
+
+  ocaml_intrinsics = janePackage {
+    pname = "ocaml_intrinsics";
+    minimumOCamlVersion = "4.08";
+    hash = "1fdfl78b8br0j9w4046i0fmmaqn4cgl06q94rsniyagx9747pnsr";
+    meta.description = "Intrinsics";
+    buildInputs = [ dune-configurator ];
+    doCheck = false; # test rules broken
+  };
+
+  parsexp = janePackage {
+    pname = "parsexp";
+    hash = "1grzpxi39318vcqhwf723hqh11k68irh59zb3dyg9lw8wjn7752a";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "S-expression parsing library";
+    propagatedBuildInputs = [ base sexplib0 ];
+  };
+
+  patience_diff = janePackage {
+    pname = "patience_diff";
+    hash = "17yrhn4qfi31m8g1ygb3m6i9z4fqd8f60fn6viazgx06s3x4xp3v";
+    meta.description = "Diff library using Bram Cohen's patience diff algorithm";
+    propagatedBuildInputs = [ core_kernel ];
+  };
+
+  posixat = janePackage {
+    pname = "posixat";
+    hash = "1xgycwa0janrfn9psb7xrm0820blr82mqf1lvjy9ipqalj7v9w1f";
+    minimumOCamlVersion = "4.07";
+    propagatedBuildInputs = [ ppx_optcomp ppx_sexp_conv ];
+    meta.description = "Binding to the posix *at functions";
+  };
+
+  ppx_accessor = janePackage {
+    pname = "ppx_accessor";
+    minimumOCamlVersion = "4.09";
+    hash = "0qv51if1nk0zff2v6q946h8ac7bpd5xa4ivyixl9g4h2mk29w4qb";
+    meta.description = "[@@deriving] plugin to generate accessors for use with the Accessor libraries";
+    propagatedBuildInputs = [ accessor ];
+  };
+
+  ppx_assert = janePackage {
+    pname = "ppx_assert";
+    hash = "0dic250q3flrjs3i70a2qqqnhqqj75ddlixpy7hdfghjw32azw90";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Assert-like extension nodes that raise useful errors on failure";
+    propagatedBuildInputs = [ ppx_cold ppx_compare ppx_here ppx_sexp_conv ];
+  };
+
+  ppx_base = janePackage {
+    pname = "ppx_base";
+    hash = "13rfmy2fxvwi7z5l1mai474ri5anqjm8q4hs7dblplsjjd9m5ld1";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Base set of ppx rewriters";
+    propagatedBuildInputs = [ ppx_cold ppx_enumerate ppx_hash ];
+  };
+
+  ppx_bench = janePackage {
+    pname = "ppx_bench";
+    hash = "0bc0gbm922417wqisafxh35jslcp7xy1s0h0a1q32rhx0ivxx3g6";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Syntax extension for writing in-line benchmarks in ocaml code";
+    propagatedBuildInputs = [ ppx_inline_test ];
+  };
+
+  ppx_bin_prot = janePackage {
+    pname = "ppx_bin_prot";
+    hash = "1280wsls061fmvmdysjqn3lv4mnkyg400jnjf4jyfr14s33h1ad5";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Generation of bin_prot readers and writers from types";
+    propagatedBuildInputs = [ bin_prot ppx_here ];
+    doCheck = false; # circular dependency with ppx_jane
+  };
+
+  ppx_cold = janePackage {
+    pname = "ppx_cold";
+    hash = "0x7xgpvy0l28k971xy08ibhr4w9nh8d9zvxc6jfxxx4fbfcv5gca";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Expands [@cold] into [@inline never][@specialise never][@local never]";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_compare = janePackage {
+    pname = "ppx_compare";
+    hash = "1wjwqkr71p61vjidbr80l93y4kkad7xsfyp04w8qfqrj7h5nm625";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Generation of comparison functions from types";
+    propagatedBuildInputs = [ ppxlib base ];
+  };
+
+  ppx_custom_printf = janePackage {
+    pname = "ppx_custom_printf";
+    hash = "1k8nmq6kwqz2wpkm9ymq749dz1vd8lxrjc711knp1wyz5935hnsv";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Printf-style format-strings for user-defined string conversion";
+    propagatedBuildInputs = [ ppx_sexp_conv ];
+  };
+
+  ppx_css = janePackage {
+    pname = "ppx_css";
+    hash = "09dpmj3f3m3z1ji9hq775iqr3cfmv5gh7q9zlblizj4wx4y0ibyi";
+    meta.description = "A ppx that takes in css strings and produces a module for accessing the unique names defined within";
+    propagatedBuildInputs = [ core_kernel ppxlib js_of_ocaml js_of_ocaml-ppx sedlex ];
+  };
+
+  ppx_disable_unused_warnings = janePackage {
+    pname = "ppx_disable_unused_warnings";
+    hash = "0sb5i4v7p9df2bxk66rjs30k9fqdrwsq1jgykjv6wyrx2d9bv955";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Expands [@disable_unused_warnings] into [@warning \"-20-26-32-33-34-35-36-37-38-39-60-66-67\"]";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_enumerate = janePackage {
+    pname = "ppx_enumerate";
+    hash = "1i0f6jv5cappw3idd70wpg76d7x6mvxapa89kri1bwz47hhg4pkz";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Generate a list containing all values of a finite type";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_expect = janePackage {
+    pname = "ppx_expect";
+    hash = "134dl5qhjxsj2mcmrx9f3m0iys0n5mjfpz9flj8zn8d2jir43776";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Cram like framework for OCaml";
+    propagatedBuildInputs = [ ppx_here ppx_inline_test re ];
+    doCheck = false; # test build rules broken
+  };
+
+  ppx_fields_conv = janePackage {
+    pname = "ppx_fields_conv";
+    hash = "094wsnw7fcwgl9xg6vkjb0wbgpn9scsp847yhdd184sz9v1amz14";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Generation of accessor and iteration functions for ocaml records";
+    propagatedBuildInputs = [ fieldslib ppxlib ];
+  };
+
+  ppx_fixed_literal = janePackage {
+    pname = "ppx_fixed_literal";
+    hash = "10siwcqrqa4gh0mg6fkaby0jjskc01r81pcblc67h3vmbjjh08j9";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Simpler notation for fixed point literals";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_hash = janePackage {
+    pname = "ppx_hash";
+    hash = "15agkwavadllzxdv4syjna02083nfnap8qs4yqf5s0adjw73fzyg";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "A ppx rewriter that generates hash functions from type expressions and definitions";
+    propagatedBuildInputs = [ ppx_compare ppx_sexp_conv ];
+  };
+
+  ppx_here = janePackage {
+    pname = "ppx_here";
+    hash = "0jv81k8x18q8rxdyfwavrvx8yq9k5m3abpmgdg6zipx2ajcjzvag";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Expands [%here] into its location";
+    propagatedBuildInputs = [ ppxlib ];
+    doCheck = false; # test build rules broken
+  };
+
+  ppx_ignore_instrumentation = janePackage {
+    pname = "ppx_ignore_instrumentation";
+    hash = "16fgig88g3jr0m3i636fr52h29h1yzhi8nhnl4029zn808kcdyj2";
+    minimumOCamlVersion = "4.08";
+    meta.description = "Ignore Jane Street specific instrumentation extensions";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_inline_test = janePackage {
+    pname = "ppx_inline_test";
+    hash = "1a0gaj9p6gbn5j7c258mnzr7yjlq0hqi3aqqgyj1g2dbk1sxdbjz";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Syntax extension for writing in-line tests in ocaml code";
+    propagatedBuildInputs = [ ppxlib time_now ];
+    doCheck = false; # test build rules broken
+  };
+
+  ppx_jane = janePackage {
+    pname = "ppx_jane";
+    hash = "1p6847gdfnnj6qpa4yh57s6wwpsl7rfgy0q7993chz24h9mhz5lk";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Standard Jane Street ppx rewriters";
+    propagatedBuildInputs = [ base_quickcheck ppx_bin_prot ppx_disable_unused_warnings ppx_expect ppx_fixed_literal ppx_ignore_instrumentation ppx_log ppx_module_timer ppx_optcomp ppx_optional ppx_pipebang ppx_stable ppx_string ppx_typerep_conv ppx_variants_conv ];
+  };
+
+  ppx_js_style = janePackage {
+    pname = "ppx_js_style";
+    hash = "0q2p9pvmlncgv0hprph95xiv7s6q44ynvp4yl4dckf1qx68rb3ba";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Code style checker for Jane Street Packages";
+    propagatedBuildInputs = [ octavius ppxlib ];
+  };
+
+  ppx_let = janePackage {
+    pname = "ppx_let";
+    hash = "04v3fq0vnvvavxbc7hfsrg8732pwxbyw8pjl3xfplqdqci6fj15n";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Monadic let-bindings";
+    propagatedBuildInputs = [ ppxlib ppx_here ];
+  };
+
+  ppx_log = janePackage {
+    pname = "ppx_log";
+    hash = "08i9gz3f4w3bmlrfdw7ja9awsfkhhldz03bnnc4hijfmn8sawzi0";
+    minimumOCamlVersion = "4.08.0";
+    meta.description = "Ppx_sexp_message-like extension nodes for lazily rendering log messages";
+    propagatedBuildInputs = [ base ppx_here ppx_sexp_conv ppx_sexp_message sexplib ];
+  };
+
+  ppx_module_timer = janePackage {
+    pname = "ppx_module_timer";
+    hash = "0lzi5hxi10p89ddqbrc667267f888kqslal76gfhmszyk60n20av";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Ppx rewriter that records top-level module startup times";
+    propagatedBuildInputs = [ time_now ];
+  };
+
+  ppx_optcomp = janePackage {
+    pname = "ppx_optcomp";
+    hash = "0ypivfipi8fcr9pqyvl2ajpcivmr1irdwwv248i4x6mggpc2pl0b";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Optional compilation for OCaml";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_optional = janePackage {
+    pname = "ppx_optional";
+    hash = "0amxwxhkyzamgnxx400qhvxzqr3m4sazhhkc516lm007pynv7xq2";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Pattern matching on flat options";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_pattern_bind = janePackage {
+    pname = "ppx_pattern_bind";
+    hash = "01nfdk9yvk92r7sjl4ngxfsx8fyqh2dsjxz0i299nszv9jc4rn4f";
+    minimumOCamlVersion = "4.07";
+    meta.description = "A ppx for writing fast incremental bind nodes in a pattern match";
+    propagatedBuildInputs = [ ppx_let ];
+  };
+
+  ppx_pipebang = janePackage {
+    pname = "ppx_pipebang";
+    hash = "0sm5dghyalhws3hy1cc2ih36az1k4q02hcgj6l26gwyma3y4irvq";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "A ppx rewriter that inlines reverse application operators `|>` and `|!`";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_python = janePackage {
+    pname = "ppx_python";
+    hash = "1d2wf0rkvxg07q6xq2zmxh6hmvnwlsmny3mm92jsg1s7bdl39gap";
+    meta.description = "A [@@deriving] plugin to generate Python conversion functions ";
+    propagatedBuildInputs = [ ppx_base ppxlib pyml ];
+  };
+
+  ppx_sexp_conv = janePackage {
+    pname = "ppx_sexp_conv";
+    minimumOCamlVersion = "4.04.2";
+    hash = "1fyf7hgxprn7pj58rmmrfpv938a0avpzvvk6wzihpmfm6whgbdm8";
+    meta.description = "[@@deriving] plugin to generate S-expression conversion functions";
+    propagatedBuildInputs = [ ppxlib sexplib0 base ];
+  };
+
+  ppx_sexp_message = janePackage {
+    pname = "ppx_sexp_message";
+    hash = "0a7hx50bkkc5n5msc3zzc4ixnp7674x3mallknb9j31jnd8l90nj";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "A ppx rewriter for easy construction of s-expressions";
+    propagatedBuildInputs = [ ppx_here ppx_sexp_conv ];
+  };
+
+  ppx_sexp_value = janePackage {
+    pname = "ppx_sexp_value";
+    hash = "0kz83j9v6yz3v8c6vr9ilhkcci4hhjd6i6r6afnx72jh6i7d3hnv";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "A ppx rewriter that simplifies building s-expressions from ocaml values";
+    propagatedBuildInputs = [ ppx_here ppx_sexp_conv ];
+  };
+
+  ppx_stable = janePackage {
+    pname = "ppx_stable";
+    hash = "1as0v0x8c9ilyhngax55lvwyyi4a2wshyan668v0f2s1608cwb1l";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Stable types conversions generator";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_string = janePackage {
+    pname = "ppx_string";
+    minimumOCamlVersion = "4.04.2";
+    hash = "1dp5frk6cig5m3m5rrh2alw63snyf845x7zlkkaljip02pqcbw1s";
+    meta.description = "Ppx extension for string interpolation";
+    propagatedBuildInputs = [ ppx_base ppxlib stdio ];
+  };
+
+  ppx_typed_fields = janePackage {
+    pname = "ppx_typed_fields";
+    hash = "0hxililjgy4jh66b4xmphrfhv6qpp7dz7xbz3islp357hf18niqy";
+    meta.description = "GADT-based field accessors and utilities";
+    propagatedBuildInputs = [ core ppx_jane ppxlib ];
+  };
+
+  ppx_typerep_conv = janePackage {
+    pname = "ppx_typerep_conv";
+    minimumOCamlVersion = "4.04.2";
+    hash = "1q1lzykpm83ra4l5jh4rfddhd3c96kx4s4rvx0w4b51z1qk56zam";
+    meta.description = "Generation of runtime types from type declarations";
+    propagatedBuildInputs = [ ppxlib typerep ];
+  };
+
+  ppx_variants_conv = janePackage {
+    pname = "ppx_variants_conv";
+    minimumOCamlVersion = "4.04.2";
+    hash = "1dh0bw9dn246k00pymf59yjkl6x6bxd76lkk9b5xpq2692wwlc3s";
+    meta.description = "Generation of accessor and iteration functions for ocaml variant types";
+    propagatedBuildInputs = [ variantslib ppxlib ];
+  };
+
+  profunctor = janePackage {
+    pname = "profunctor";
+    hash = "151vk0cagjwn0isnnwryn6gmvnpds4dyj1in9jvv5is8yij203gg";
+    meta.description = "A library providing a signature for simple profunctors and traversal of a record";
+    propagatedBuildInputs = [ base ppx_jane record_builder ];
+  };
+
+  protocol_version_header = janePackage {
+    pname = "protocol_version_header";
+    hash = "0s638cwf1357gg754rc4306654hhrhzqaqm2lp3yv5vj3ml8p4qy";
+    meta.description = "Protocol versioning";
+    propagatedBuildInputs = [ core_kernel ];
+  };
+
+  pythonlib = janePackage {
+    pname = "pythonlib";
+    hash = "0p88vmp19zmr0r58dz6sawsmbn4yi2vyymad2c82kp93kg66nm1v";
+    meta.description = "A library to help writing wrappers around ocaml code for python";
+    patches = lib.optional (lib.versionAtLeast ocaml.version "4.13") ./pythonlib.patch;
+    propagatedBuildInputs = [ ppx_expect ppx_let ppx_python stdio typerep ];
+  };
+
+  re2 = janePackage {
+    pname = "re2";
+    hash = "0z1cajd8abrryf3gz322jpynba79nv4a2kmmcdz0314ran5w68v3";
+    meta.description = "OCaml bindings for RE2, Google's regular expression library";
+    propagatedBuildInputs = [ core_kernel ];
+    prePatch = ''
+      substituteInPlace src/re2_c/dune --replace 'CXX=g++' 'CXX=c++'
+      substituteInPlace src/dune --replace '(cxx_flags (:standard \ -pedantic) (-I re2_c/libre2))' '(cxx_flags (:standard \ -pedantic) (-I re2_c/libre2) (-x c++))'
+    '';
+  };
+
+  re2_stable = janePackage {
+    pname = "re2_stable";
+    version = "0.14.0";
+    hash = "0kjc0ff6b3509s3b9n4q8ilb06d5fngdh3z58cm95vg7zkcas9w3";
+    meta.description = "Re2_stable adds an incomplete but stable serialization of Re2";
+    propagatedBuildInputs = [ core re2 ];
+  };
+
+  record_builder = janePackage {
+    pname = "record_builder";
+    hash = "004nqcmwll0vy47mb3d3jlk21cc6adcjy62dkv2k966n9jkh472h";
+    meta.description = "A library which provides traversal of records with an applicative";
+    propagatedBuildInputs = [ base ppx_jane ];
+  };
+
+  resource_cache = janePackage {
+    pname = "resource_cache";
+    hash = "13wzx8ixgbb7jj5yrps890irw2wvkchnihsn7rfrcvnvrjzzjshm";
+    meta.description = "General resource cache";
+    propagatedBuildInputs = [ async_rpc_kernel ];
+  };
+
+  sexp = janePackage {
+    pname = "sexp";
+    hash = "00xlsymm1mpgs8cqkb6c36vh5hfw0saghvwiqh7jry65qc5nvv9z";
+    propagatedBuildInputs = [
+      async
+      core
+      csvfields
+      jsonaf
+      re2
+      sexp_diff
+      sexp_macro
+      sexp_pretty
+      sexp_select
+    ];
+    meta.description = "S-expression swiss knife";
+  };
+
+  sexp_diff = janePackage {
+    pname = "sexp_diff";
+    hash = "1p5xwhj634ij4a0m5k6a3abddi5315y7is1a6ha1lifdz3v985ll";
+    propagatedBuildInputs = [ core_kernel ];
+    meta.description = "Code for computing the diff of two sexps";
+  };
+
+  sexp_macro = janePackage {
+    pname = "sexp_macro";
+    hash = "1l5dsv9gawmf5dg3rf8sxphp9qs3n4n038nlmf9rxzypzyn112k8";
+    propagatedBuildInputs = [ async sexplib ];
+    meta.description = "Sexp macros";
+  };
+
+  sexp_pretty = janePackage {
+    pname = "sexp_pretty";
+    hash = "1p1jspwjvrhm8li22xl0n8wngs12d9g7nc1svk6xc32jralnxblg";
+    minimumOCamlVersion = "4.07";
+    meta.description = "S-expression pretty-printer";
+    propagatedBuildInputs = [ ppx_base re sexplib ];
+  };
+
+  sexp_select = janePackage {
+    pname = "sexp_select";
+    hash = "0mmvga9w3gbb2gd1h4l8f1c3l2lrpn1zld2a8xgqyfqfff3vg31p";
+    minimumOCamlVersion = "4.07";
+    propagatedBuildInputs = [ base ppx_jane ];
+    meta.description = "A library to use CSS-style selectors to traverse sexp trees";
+  };
+
+  sexplib0 = janePackage {
+    pname = "sexplib0";
+    hash = "0jag0bz2173b0n7hx013fhghydhh92arqjlrcnf5x025bw8nz66v";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Library containing the definition of S-expressions and some base converters";
+  };
+
+  sexplib = janePackage {
+    pname = "sexplib";
+    hash = "05h34fm3p0179xivc14bixc50pzc8zws46l5gsq310kpm37srq3c";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Library for serializing OCaml values to and from S-expressions";
+    propagatedBuildInputs = [ num parsexp ];
+  };
+
+  shell = janePackage {
+    pname = "shell";
+    hash = "1vzdif7w9y1kw2qynlfixwphdgiflrf43j0fzinjp9f56vlhghhy";
+    meta.description = "Yet another implementation of fork&exec and related functionality";
+    buildInputs = [ jst-config ];
+    propagatedBuildInputs = [ textutils ];
+    checkInputs = [ ounit ];
+    # This currently fails with dune
+    strictDeps = false;
+  };
+
+  shexp = janePackage {
+    pname = "shexp";
+    hash = "05iswnhi92f4yvrh76j3254bvls6fbrdb56mv6vc6mi5f8z4l79i";
+    minimumOCamlVersion = "4.07";
+    propagatedBuildInputs = [ posixat spawn ];
+    meta.description = "Process library and s-expression based shell";
+  };
+
+  spawn = janePackage {
+    pname = "spawn";
+    minimumOCamlVersion = "4.02.3";
+    hash = "1fjr91psas5zmk1hxvxh0dchhn0pkyzlr4gg232f5g9vdgissi0p";
+    meta.description = "Spawning sub-processes";
+    buildInputs = [ ppx_expect ];
+  };
+
+  splay_tree = janePackage {
+    pname = "splay_tree";
+    hash = "1jxfh7f2hjrms5pm2cy1cf6ivphgiqqvyyr9hdcz8d3vi612p4dm";
+    meta.description = "A splay tree implementation";
+    propagatedBuildInputs = [ core_kernel ];
+  };
+
+  splittable_random = janePackage {
+    pname = "splittable_random";
+    hash = "0ap5z4z1aagz4z02q9642cbl25jzws9lbc2x5xkpyjlc0qcm9v3m";
+    meta.description = "PRNG that can be split into independent streams";
+    propagatedBuildInputs = [ base ppx_assert ppx_bench ppx_sexp_message ];
+  };
+
+  stdio = janePackage {
+    pname = "stdio";
+    hash = "0g00b00kpjcadikq2asng35w7kvd24q9ldkiylwmn3gv3lrbipa8";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Standard IO library for OCaml";
+    propagatedBuildInputs = [ base ];
+  };
+
+  textutils = janePackage {
+    pname = "textutils";
+    hash = "1wass49h645wql9b7nck2iqlkf4648dkxvlvxixr7z80zcnb5rxr";
+    meta.description = "Text output utilities";
+    propagatedBuildInputs = [ core_unix textutils_kernel ];
+  };
+
+  textutils_kernel = janePackage {
+    pname = "textutils_kernel";
+    hash = "068g11d98wsb5a6ds0p5xybdmx5nx9bxa0k11dmh3l57kn4c169x";
+    meta.description = "Text output utilities";
+    propagatedBuildInputs = [ core ppx_jane uutf ];
+  };
+
+  time_now = janePackage {
+    pname = "time_now";
+    hash = "1pa0hyh470j9jylii4983qagb6hq2dz6s0q2fnrcph9qbw83bc0c";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Reports the current time";
+    buildInputs = [ jst-config ppx_optcomp ];
+    propagatedBuildInputs = [ jane-street-headers base ppx_base ];
+  };
+
+  timezone = janePackage {
+    pname = "timezone";
+    hash = "00a007aji5rbz42kgbq1w90py6fm9k9akycs5abkcfll5rd0cbhx";
+    meta.description = "Time-zone handling";
+    propagatedBuildInputs = [ core_kernel ];
+  };
+
+  topological_sort = janePackage {
+    pname = "topological_sort";
+    hash = "0iqhp8n6g5n1ng80brjpav54229lykm2c1fc104s58lk3rqfvj9v";
+    meta.description = "Topological sort algorithm";
+    propagatedBuildInputs = [ ppx_jane stdio ];
+  };
+
+  typerep = janePackage {
+    pname = "typerep";
+    hash = "1qxfi01qim0hrgd6d0bgvpxg36i99mmm8cw4wqpr9kxyqvgzv26z";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Typerep is a library for runtime types";
+    propagatedBuildInputs = [ base ];
+  };
+
+  variantslib = janePackage {
+    pname = "variantslib";
+    hash = "033ns8ph6bd8g5cdfryjfcnrnzkdshppjyw5kl7cvszjfrz33ij7";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Part of Jane Street's Core library";
+    propagatedBuildInputs = [ base ];
+  };
+
+  vcaml = janePackage {
+    pname = "vcaml";
+    hash = "12fd29x9dgf4f14xrx7z4y1bm1wbfynrs3jismjbiqnckfpbqrib";
+    meta.description = "OCaml bindings for the Neovim API";
+    propagatedBuildInputs = [ angstrom-async async_extra expect_test_helpers_async faraday ];
+  };
+
+  virtual_dom = janePackage {
+    pname = "virtual_dom";
+    hash = "15xia9v4ighzm0gv3vbqk9nvg47cvzqmfnl2zr67yxv4b98kyzv3";
+    meta.description = "OCaml bindings for the virtual-dom library";
+    buildInputs = [ js_of_ocaml-ppx ];
+    propagatedBuildInputs = [ core_kernel gen_js_api js_of_ocaml lambdasoup tyxml ];
+  };
+
+  zarith_stubs_js = janePackage {
+    pname = "zarith_stubs_js";
+    hash = "119xgr3kla9q1bvs4a5z2ivbmsrz4db3a9z0gf77ryqg4i22ywvl";
+    minimumOCamlVersion = "4.04.2";
+    meta.description = "Javascripts stubs for the Zarith library";
+  };
+
+  zstandard = janePackage {
+    pname = "zstandard";
+    hash = "1blkv35g5q1drkc6zmc4m027gjz6vfdadra1kw1xkp1wlc2l4v3k";
+    meta.description = "OCaml bindings to Zstandard";
+    buildInputs = [ ppx_jane ];
+    propagatedBuildInputs = [ core_kernel ctypes zstd ];
+  };
+
+}
diff --git a/pkgs/development/ocaml-modules/janestreet/bonsai_jsoo_4_0.patch b/pkgs/development/ocaml-modules/janestreet/bonsai_jsoo_4_0.patch
new file mode 100644
index 00000000000..e658ba05ca4
--- /dev/null
+++ b/pkgs/development/ocaml-modules/janestreet/bonsai_jsoo_4_0.patch
@@ -0,0 +1,13 @@
+diff --git a/web_ui/element_size_hooks/visibility_tracker.ml b/web_ui/element_size_hooks/visibility_tracker.ml
+index 2e5dbe0..61df433 100644
+--- a/web_ui/element_size_hooks/visibility_tracker.ml
++++ b/web_ui/element_size_hooks/visibility_tracker.ml
+@@ -23,8 +23,6 @@ let get_conservative_vis_bounds (element : Dom_html.element Js.t) : Bounds.t opt
+   and client_height = client_bounds##.height
+   and window_height = Dom_html.window##.innerHeight
+   and window_width = Dom_html.window##.innerWidth in
+-  let%bind.Option window_height = Js.Optdef.to_option window_height in
+-  let%bind.Option window_width = Js.Optdef.to_option window_width in
+   let window_height = Float.of_int window_height
+   and window_width = Float.of_int window_width
+   and client_width = Js.Optdef.get client_width (Fn.const 0.0)
diff --git a/pkgs/development/ocaml-modules/janestreet/janePackage_0_15.nix b/pkgs/development/ocaml-modules/janestreet/janePackage_0_15.nix
new file mode 100644
index 00000000000..67859908994
--- /dev/null
+++ b/pkgs/development/ocaml-modules/janestreet/janePackage_0_15.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, buildDunePackage, defaultVersion ? "0.15.0" }:
+
+{ pname
+, version ? defaultVersion
+, hash
+, minimumOCamlVersion ? "4.11"
+, doCheck ? true
+, buildInputs ? []
+, strictDeps ? true
+, ...}@args:
+
+buildDunePackage (args // {
+  useDune2 = true;
+  inherit version buildInputs strictDeps;
+
+  inherit minimumOCamlVersion;
+
+  src = fetchFromGitHub {
+    owner = "janestreet";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = hash;
+  };
+
+  inherit doCheck;
+
+  meta = {
+    license = lib.licenses.mit;
+    homepage = "https://github.com/janestreet/${pname}";
+  } // args.meta;
+})
diff --git a/pkgs/development/ocaml-modules/janestreet/pythonlib.patch b/pkgs/development/ocaml-modules/janestreet/pythonlib.patch
new file mode 100644
index 00000000000..71a32fd0236
--- /dev/null
+++ b/pkgs/development/ocaml-modules/janestreet/pythonlib.patch
@@ -0,0 +1,22 @@
+diff --git a/src/type.ml b/src/type.ml
+index 8a9e648..3f3b0e9 100644
+--- a/src/type.ml
++++ b/src/type.ml
+@@ -31,12 +31,12 @@ let of_type_desc type_desc ~env =
+     | Tunivar _ -> Or_error.error_string "not handled: Tunivar"
+     | Tvariant _ -> Or_error.error_string "not handled: Tvariant"
+     | Tnil -> Or_error.error_string "not handled: Tnil"
+-    | Tobject (_, _) -> Or_error.error_string "not handled: Tobject"
+-    | Tfield (_, _, _, _) -> Or_error.error_string "not handled: Tfield"
+-    | Tpackage (_, _, _) -> Or_error.error_string "not handled: Tpackage"
+-    | Tpoly (_, _) -> Or_error.error_string "not handled: Tpoly"
++    | Tobject _ -> Or_error.error_string "not handled: Tobject"
++    | Tfield _ -> Or_error.error_string "not handled: Tfield"
++    | Tpackage _ -> Or_error.error_string "not handled: Tpackage"
++    | Tpoly _ -> Or_error.error_string "not handled: Tpoly"
+     | Tlink e -> walk e.desc
+-    | Tsubst e -> walk e.desc
++    | Tsubst (e, _) -> walk e.desc
+     | Ttuple es ->
+       let%bind tuple = List.map es ~f:(fun e -> walk e.desc) |> Or_error.all in
+       (match tuple with
diff --git a/pkgs/development/ocaml-modules/phylogenetics/default.nix b/pkgs/development/ocaml-modules/phylogenetics/default.nix
index 11da66bd760..1cf9651e6ec 100644
--- a/pkgs/development/ocaml-modules/phylogenetics/default.nix
+++ b/pkgs/development/ocaml-modules/phylogenetics/default.nix
@@ -1,6 +1,6 @@
 { lib
 , buildDunePackage
-, fetchurl
+, fetchFromGitHub
 , ppx_deriving
 , bppsuite
 , alcotest
@@ -16,18 +16,15 @@
 
 buildDunePackage rec {
   pname = "phylogenetics";
-  version = "0.1.0";
+  version = "unstable-2022-05-06";
 
-  src = fetchurl {
-    url = "https://github.com/biocaml/phylogenetics/releases/download/v${version}/${pname}-${version}.tbz";
-    sha256 = "sha256:064ldljzh17h8pp0c27xd1pf6c50yhccw2g3hddzhk07a95q8v16";
+  src = fetchFromGitHub {
+    owner = "biocaml";
+    repo = pname;
+    rev = "cd7c624d0f98e31b02933ca4511b9809b26d35b5";
+    sha256 = "sha256:0w0xyah3hj05hxg1rsa40hhma3dm1cyq0zvnjrihhf22laxap7ga";
   };
 
-  # Ensure compatibility with printbox ≥ 0.6
-  preConfigure = ''
-    substituteInPlace lib/dune --replace printbox printbox-text
-  '';
-
   minimalOCamlVersion = "4.08";
 
   checkInputs = [ alcotest bppsuite ];
diff --git a/pkgs/development/ocaml-modules/tls/default.nix b/pkgs/development/ocaml-modules/tls/default.nix
index 81f0a176bfc..3f45aa91966 100644
--- a/pkgs/development/ocaml-modules/tls/default.nix
+++ b/pkgs/development/ocaml-modules/tls/default.nix
@@ -6,11 +6,11 @@
 
 buildDunePackage rec {
   pname = "tls";
-  version = "0.15.2";
+  version = "0.15.3";
 
   src = fetchurl {
-    url = "https://github.com/mirleft/ocaml-tls/releases/download/v${version}/tls-v${version}.tbz";
-    sha256 = "b76371757249bbeabb12c333de4ea2a09c095767bdbbc83322538c0da1fc1e36";
+    url = "https://github.com/mirleft/ocaml-tls/releases/download/v${version}/tls-${version}.tbz";
+    sha256 = "0nj6fhgrirn8ky4hb24m3ilhr41ynzgk6bqmjs17g8rdibwmdd2x";
   };
 
   minimumOCamlVersion = "4.08";
diff --git a/pkgs/development/python-modules/dalle-mini/default.nix b/pkgs/development/python-modules/dalle-mini/default.nix
index e6612a3cd2a..1cafda70872 100644
--- a/pkgs/development/python-modules/dalle-mini/default.nix
+++ b/pkgs/development/python-modules/dalle-mini/default.nix
@@ -15,11 +15,11 @@
 
 buildPythonPackage rec {
   pname = "dalle-mini";
-  version = "0.1.0";
+  version = "0.1.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-Sbos44uWGnJLYMx/xy0wkyAJHlDhVIeOS7rnYt2W53w=";
+    sha256 = "sha256-/wGIuYSWEUgJmeRN5K9/xuoCs+hpFX4/Tu1un1C4ljk=";
   };
 
   format = "setuptools";
diff --git a/pkgs/development/python-modules/datauri/default.nix b/pkgs/development/python-modules/datauri/default.nix
new file mode 100644
index 00000000000..da6ffe3bd26
--- /dev/null
+++ b/pkgs/development/python-modules/datauri/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "datauri";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "fcurella";
+    repo = "python-datauri";
+    rev = "v${version}";
+    sha256 = "sha256-Eevd/xxKgxvvsAfI/L/KShH+PfxffBGyVwKewLgyEu0=";
+  };
+
+  pythonImportsCheck = [
+    "datauri"
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # UnicodeDecodeError: 'utf-8' codec can't decode
+    "tests/test_file_ebcdic.txt"
+  ];
+
+  meta = with lib; {
+    description = "Data URI manipulation made easy.";
+    homepage = "https://github.com/fcurella/python-datauri";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ yuu ];
+  };
+}
diff --git a/pkgs/development/python-modules/fontparts/default.nix b/pkgs/development/python-modules/fontparts/default.nix
index 1dfaa3f3d5e..28972b62b97 100644
--- a/pkgs/development/python-modules/fontparts/default.nix
+++ b/pkgs/development/python-modules/fontparts/default.nix
@@ -6,13 +6,13 @@
 
 buildPythonPackage rec {
   pname = "fontParts";
-  version = "0.10.6";
+  version = "0.10.7";
 
   disabled = pythonOlder "3.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-mEnQWmzzZ5S8rWzmXuJDjcuoICi6Q+aneX8hGXj11Gg=";
+    sha256 = "sha256-u0hKI2LLWAUGIVRECk6b5y7UKgJHUx2I8R5Q+qkKxcg=";
     extension = "zip";
   };
 
diff --git a/pkgs/development/python-modules/hg-evolve/default.nix b/pkgs/development/python-modules/hg-evolve/default.nix
index f068fab049a..831ed1235e7 100644
--- a/pkgs/development/python-modules/hg-evolve/default.nix
+++ b/pkgs/development/python-modules/hg-evolve/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "hg-evolve";
-  version = "10.5.1";
+  version = "10.5.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-JGk9PdCDXiDkP8Arw2pfpU+sEj/sCHwwHHWVwF3Ofzw=";
+    sha256 = "sha256-45FOAQDJgAfhlTF/XBmIfvmMM1X7LUzsHAb7NMQl9Fs=";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/iminuit/default.nix b/pkgs/development/python-modules/iminuit/default.nix
index d5337c0b194..f0b744bfbca 100644
--- a/pkgs/development/python-modules/iminuit/default.nix
+++ b/pkgs/development/python-modules/iminuit/default.nix
@@ -9,14 +9,14 @@
 
 buildPythonPackage rec {
   pname = "iminuit";
-  version = "2.12.1";
+  version = "2.13.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-+le1b3wpze7QL5U1p7ZYB6zWoZfyCIUQlIIiLxoCPt4=";
+    hash = "sha256-40eFwqLArqb/hmcv6BuAoErJ1Cp57YJJYw8lKaj2oPo=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/mitmproxy/default.nix b/pkgs/development/python-modules/mitmproxy/default.nix
index 055cb8aee99..ea0f5dd1045 100644
--- a/pkgs/development/python-modules/mitmproxy/default.nix
+++ b/pkgs/development/python-modules/mitmproxy/default.nix
@@ -45,14 +45,14 @@
 
 buildPythonPackage rec {
   pname = "mitmproxy";
-  version = "8.0.0";
+  version = "8.1.1";
   disabled = pythonOlder "3.8";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-Efazsi8BjBrk7lBKSn2APKHxCc7mzxNrC92BL0VsnCM=";
+    sha256 = "sha256-nW/WfiY6uF67qNa95tvNvSv/alP2WmzTk34LEBma/04=";
   };
 
   propagatedBuildInputs = [
@@ -110,6 +110,8 @@ buildPythonPackage rec {
     # https://github.com/mitmproxy/mitmproxy/commit/36ebf11916704b3cdaf4be840eaafa66a115ac03
     # Tests require terminal
     "test_integration"
+    "test_contentview_flowview"
+    "test_flowview"
   ];
   dontUsePytestXdist = true;
 
diff --git a/pkgs/development/python-modules/nessclient/default.nix b/pkgs/development/python-modules/nessclient/default.nix
index d91a80eb9d0..591d74a95a5 100644
--- a/pkgs/development/python-modules/nessclient/default.nix
+++ b/pkgs/development/python-modules/nessclient/default.nix
@@ -11,7 +11,7 @@
 
 buildPythonPackage rec {
   pname = "nessclient";
-  version = "0.9.16b2";
+  version = "0.10.0";
   format = "setuptools";
 
   disabled = pythonOlder "3.8";
@@ -19,8 +19,8 @@ buildPythonPackage rec {
   src = fetchFromGitHub {
     owner = "nickw444";
     repo = pname;
-    rev = version;
-    sha256 = "1g3q9bv1nn1b8n6bklc05k8pac4cndzfxfr7liky0gnnbri15k81";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-zjUYdSHIMCB4cCAsOOQZ9YgmFTskzlTUs5z/xPFt01Q=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/protobuf/default.nix b/pkgs/development/python-modules/protobuf/default.nix
index 30e9fbf9ea7..ee1d0bbffb5 100644
--- a/pkgs/development/python-modules/protobuf/default.nix
+++ b/pkgs/development/python-modules/protobuf/default.nix
@@ -19,7 +19,12 @@ buildPythonPackage {
   doCheck = doCheck && !isPy27; # setuptools>=41.4 no longer collects correctly on python2
 
   propagatedBuildInputs = [ six ] ++ lib.optionals isPy27 [ google-apputils ];
-  propagatedNativeBuildInputs = [ buildPackages.protobuf ]; # For protoc.
+  propagatedNativeBuildInputs = let
+    protobufVersion = "${lib.versions.major protobuf.version}_${lib.versions.minor protobuf.version}";
+  in [
+    buildPackages."protobuf${protobufVersion}" # For protoc of the same version.
+  ];
+
   nativeBuildInputs = [ pyext ] ++ lib.optionals isPy27 [ google-apputils ];
   buildInputs = [ protobuf ];
 
diff --git a/pkgs/development/python-modules/pygtrie/default.nix b/pkgs/development/python-modules/pygtrie/default.nix
index 8ee176e80c2..c7738a9f3ec 100644
--- a/pkgs/development/python-modules/pygtrie/default.nix
+++ b/pkgs/development/python-modules/pygtrie/default.nix
@@ -1,10 +1,10 @@
 { lib, fetchPypi, buildPythonPackage, ... }:
 buildPythonPackage rec {
   pname = "pygtrie";
-  version = "2.4.2";
+  version = "2.5.0";
   src = fetchPypi {
     inherit pname version;
-    sha256 = "43205559d28863358dbbf25045029f58e2ab357317a59b11f11ade278ac64692";
+    sha256 = "sha256-IDUUrYJutAPasdLi3dA04NFTS75NvgITuwWT9mvrpOI=";
   };
   meta = {
     homepage = "https://github.com/mina86/pygtrie";
diff --git a/pkgs/development/python-modules/pyside2/default.nix b/pkgs/development/python-modules/pyside2/default.nix
index 3be201d3c91..81df3cbe94c 100644
--- a/pkgs/development/python-modules/pyside2/default.nix
+++ b/pkgs/development/python-modules/pyside2/default.nix
@@ -24,14 +24,22 @@ stdenv.mkDerivation rec {
   ];
 
   nativeBuildInputs = [ cmake ninja qt5.qmake python ];
-  buildInputs = with qt5; [
+  buildInputs = (with qt5; [
     qtbase qtxmlpatterns qtmultimedia qttools qtx11extras qtlocation qtscript
     qtwebsockets qtwebengine qtwebchannel qtcharts qtsensors qtsvg
+  ]) ++ [
+    python.pkgs.setuptools
   ];
   propagatedBuildInputs = [ shiboken2 ];
 
   dontWrapQtApps = true;
 
+  postInstall = ''
+    cd ../../..
+    ${python.interpreter} setup.py egg_info --build-type=pyside2
+    cp -r PySide2.egg-info $out/${python.sitePackages}/
+  '';
+
   meta = with lib; {
     description = "LGPL-licensed Python bindings for Qt";
     license = licenses.lgpl21;
diff --git a/pkgs/development/python-modules/pytest-testmon/default.nix b/pkgs/development/python-modules/pytest-testmon/default.nix
index 667927bfe10..9652e028946 100644
--- a/pkgs/development/python-modules/pytest-testmon/default.nix
+++ b/pkgs/development/python-modules/pytest-testmon/default.nix
@@ -8,12 +8,12 @@
 
 buildPythonPackage rec {
   pname = "pytest-testmon";
-  version = "1.3.3";
+  version = "1.3.4";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-Csg5wIm9+ZdAQYdZozlx09rMaVz3GazeS5Z/f4jRECw=";
+    sha256 = "sha256-jr+uKjtm5nFYHrZpG63VNK/wO93TQJh1x4SoTxJtlw0=";
   };
 
   propagatedBuildInputs = [ pytest coverage ];
diff --git a/pkgs/development/python-modules/reqif/default.nix b/pkgs/development/python-modules/reqif/default.nix
new file mode 100644
index 00000000000..3f8376f659e
--- /dev/null
+++ b/pkgs/development/python-modules/reqif/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, buildPythonPackage
+, python3
+, pythonOlder
+, fetchFromGitHub
+, poetry-core
+, beautifulsoup4
+, lxml
+, jinja2
+, dataclasses
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "reqif";
+  version = "0.0.8";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "strictdoc-project";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-PtzRJUvv+Oee08+sdakFviKIhwfLngyal1WSWDtMELg=";
+  };
+
+  postPatch = ''
+    substituteInPlace ./tests/unit/conftest.py --replace \
+       "os.path.abspath(os.path.join(__file__, \"../../../../reqif\"))" \
+      "\"${placeholder "out"}/${python3.sitePackages}/reqif\""
+    substituteInPlace pyproject.toml --replace "^" ">="
+    substituteInPlace requirements.txt --replace "==" ">="
+  '';
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    beautifulsoup4
+    lxml
+    jinja2
+  ] ++ lib.optionals (pythonOlder "3.7") [
+    dataclasses
+  ];
+
+  pythonImportsCheck = [
+    "reqif"
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = "Python library for ReqIF format";
+    homepage = "https://github.com/strictdoc-project/reqif";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ yuu ];
+  };
+}
diff --git a/pkgs/development/python-modules/shiboken2/default.nix b/pkgs/development/python-modules/shiboken2/default.nix
index 11461a9545c..c4210cfeda2 100644
--- a/pkgs/development/python-modules/shiboken2/default.nix
+++ b/pkgs/development/python-modules/shiboken2/default.nix
@@ -17,7 +17,7 @@ stdenv.mkDerivation {
   CLANG_INSTALL_DIR = llvmPackages.libclang.out;
 
   nativeBuildInputs = [ cmake ];
-  buildInputs = [ llvmPackages.libclang python qt5.qtbase qt5.qtxmlpatterns ];
+  buildInputs = [ llvmPackages.libclang python python.pkgs.setuptools qt5.qtbase qt5.qtxmlpatterns ];
 
   cmakeFlags = [
     "-DBUILD_TESTS=OFF"
@@ -26,6 +26,9 @@ stdenv.mkDerivation {
   dontWrapQtApps = true;
 
   postInstall = ''
+    cd ../../..
+    ${python.interpreter} setup.py egg_info --build-type=shiboken2
+    cp -r shiboken2.egg-info $out/${python.sitePackages}/
     rm $out/bin/shiboken_tool.py
   '';
 
diff --git a/pkgs/development/python-modules/simplisafe-python/default.nix b/pkgs/development/python-modules/simplisafe-python/default.nix
index 07f0c1bf1e8..62edf7b0fc2 100644
--- a/pkgs/development/python-modules/simplisafe-python/default.nix
+++ b/pkgs/development/python-modules/simplisafe-python/default.nix
@@ -20,7 +20,7 @@
 
 buildPythonPackage rec {
   pname = "simplisafe-python";
-  version = "2022.06.1";
+  version = "2022.07.0";
   format = "pyproject";
 
   disabled = pythonOlder "3.8";
@@ -29,7 +29,7 @@ buildPythonPackage rec {
     owner = "bachya";
     repo = pname;
     rev = "refs/tags/${version}";
-    sha256 = "sha256-5zhj1EAFZ2XCeSfcFN+7gHrcPx/YrEZQ8QfcmLUboIg=";
+    sha256 = "sha256-v3N2f5B6BrwTb4ik2bME8OLzwsHZ3qWx+Jx1pv7KX8A=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/python-modules/sqlite-utils/default.nix b/pkgs/development/python-modules/sqlite-utils/default.nix
index e682365f927..fccbc4affab 100644
--- a/pkgs/development/python-modules/sqlite-utils/default.nix
+++ b/pkgs/development/python-modules/sqlite-utils/default.nix
@@ -14,14 +14,14 @@
 
 buildPythonPackage rec {
   pname = "sqlite-utils";
-  version = "3.27";
+  version = "3.28";
   format = "setuptools";
 
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-SercPK2Svrq7rEULglvjq1J3FV0x0aHHKs72HmXkTGo=";
+    hash = "sha256-eQsB9L4WwydWubXq4HtrfJBbZhPKU41kaHfFCwWwpTo=";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/streamdeck/default.nix b/pkgs/development/python-modules/streamdeck/default.nix
new file mode 100644
index 00000000000..7d7f0071037
--- /dev/null
+++ b/pkgs/development/python-modules/streamdeck/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, buildPythonPackage
+, fetchPypi
+, substituteAll
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "streamdeck";
+  version = "0.9.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0116a376afc18f3abbf79cc1a4409f81472e19197d5641b9e97e697d105cbdc0";
+  };
+
+  patches = [
+    # substitute libusb path
+    (substituteAll {
+      src = ./hardcode-libusb.patch;
+      libusb = "${pkgs.hidapi}/lib/libhidapi-libusb${stdenv.hostPlatform.extensions.sharedLibrary}";
+    })
+  ];
+
+  pythonImportsCheck = [ "StreamDeck" ];
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Python library to control the Elgato Stream Deck";
+    homepage = "https://github.com/abcminiuser/python-elgato-streamdeck";
+    license = licenses.mit;
+    maintainers = with maintainers; [ majiir ];
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/pkgs/development/python-modules/streamdeck/hardcode-libusb.patch b/pkgs/development/python-modules/streamdeck/hardcode-libusb.patch
new file mode 100644
index 00000000000..acef15b5405
--- /dev/null
+++ b/pkgs/development/python-modules/streamdeck/hardcode-libusb.patch
@@ -0,0 +1,13 @@
+diff --git a/src/StreamDeck/Transport/LibUSBHIDAPI.py b/src/StreamDeck/Transport/LibUSBHIDAPI.py
+index 824c59c..f13754e 100644
+--- a/src/StreamDeck/Transport/LibUSBHIDAPI.py
++++ b/src/StreamDeck/Transport/LibUSBHIDAPI.py
+@@ -110,7 +110,7 @@ class LibUSBHIDAPI(Transport):
+ 

+             search_library_names = {

+                 "Windows": ["hidapi.dll", "libhidapi-0.dll"],

+-                "Linux": ["libhidapi-libusb.so", "libhidapi-libusb.so.0"],

++                "Linux": ["@libusb@"],

+                 "Darwin": ["libhidapi.dylib"],

+             }

+ 

diff --git a/pkgs/development/python-modules/testcontainers/default.nix b/pkgs/development/python-modules/testcontainers/default.nix
new file mode 100644
index 00000000000..a690be88334
--- /dev/null
+++ b/pkgs/development/python-modules/testcontainers/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, buildPythonPackage
+, deprecation
+, docker
+, wrapt
+}:
+
+buildPythonPackage rec {
+  pname = "testcontainers";
+  version = "3.5.0";
+
+  src = fetchFromGitHub {
+    owner = "testcontainers";
+    repo = "testcontainers-python";
+    rev = "v${version}";
+    sha256 = "sha256-uB3MbRVQzbUdZRxkGl635O+K17bkHIGY2JbU8R23Kt0=";
+  };
+
+  buildInputs = [
+    deprecation
+    docker
+    wrapt
+  ];
+
+  # Tests require various container and database services running
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "testcontainers"
+  ];
+
+  meta = with lib; {
+    description = "Allows using docker containers for functional and integration testing";
+    homepage = "https://github.com/testcontainers/testcontainers-python";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ onny ];
+  };
+}
diff --git a/pkgs/development/python-modules/textx/default.nix b/pkgs/development/python-modules/textx/default.nix
new file mode 100644
index 00000000000..9243d3a3edb
--- /dev/null
+++ b/pkgs/development/python-modules/textx/default.nix
@@ -0,0 +1,178 @@
+{ lib
+, buildPythonPackage
+, python3
+, fetchFromGitHub
+, mkdocs
+, twine
+, arpeggio
+, click
+, future
+, setuptools
+, callPackage
+, gprof2dot
+, html5lib
+, jinja2
+, memory_profiler
+, psutil
+, pytestCheckHook
+}:
+
+let
+  textx = buildPythonPackage rec {
+    pname = "textx";
+    version = "3.0.0";
+    format = "setuptools";
+
+    src = fetchFromGitHub {
+      owner = pname;
+      repo = pname;
+      rev = version;
+      sha256 = "sha256-uZlO82dKtWQQR5+Q7dWk3+ZoUzAjDJ8qzC4UMLCtnBk=";
+    };
+
+    postPatch = ''
+      substituteInPlace setup.cfg --replace "click >=7.0, <8.0" "click >=7.0"
+    '';
+
+    outputs = [
+      "out"
+      "testout"
+    ];
+
+    nativeBuildInputs = [
+      mkdocs
+      twine
+    ];
+
+    propagatedBuildInputs = [
+      arpeggio
+      click
+      future
+      setuptools
+    ];
+
+    postInstall = ''
+      # FileNotFoundError: [Errno 2] No such file or directory: '$out/lib/python3.10/site-packages/textx/textx.tx
+      cp "$src/textx/textx.tx" "$out/${python3.sitePackages}/${pname}/"
+
+      # Install tests as the tests output.
+      mkdir $testout
+      cp -r tests $testout/tests
+    '';
+
+    pythonImportsCheck = [
+      "textx"
+    ];
+
+    # Circular dependencies, do tests in passthru.tests instead.
+    doCheck = false;
+
+    passthru.tests = {
+      textxTests = callPackage ./tests.nix {
+        inherit
+          textx-data-dsl
+          textx-example-project
+          textx-flow-codegen
+          textx-flow-dsl
+          textx-types-dsl;
+       };
+    };
+
+    meta = with lib; {
+      description = "Domain-specific languages and parsers in Python";
+      homepage = "https://github.com/textx/textx/";
+      license = licenses.mit;
+      maintainers = with maintainers; [ yuu ];
+    };
+  };
+
+  textx-data-dsl = buildPythonPackage rec {
+    pname = "textx-data-dsl";
+    version = "1.0.0";
+    inherit (textx) src;
+    # `format` isn't included in the output of `mk-python-derivation`.
+    # So can't inherit format: `error: attribute 'format' missing`.
+    format = "setuptools";
+    pathToSourceRoot = "tests/functional/registration/projects/data_dsl";
+    sourceRoot = "${src.name}/" + pathToSourceRoot;
+    propagatedBuildInputs = [
+      textx
+      textx-types-dsl
+    ];
+    meta = with lib; {
+      inherit (textx.meta) license maintainers;
+      description = "Sample textX language for testing";
+      homepage = textx.homepage + "tree/${version}/" + pathToSourceRoot;
+    };
+  };
+
+  textx-flow-codegen = buildPythonPackage rec {
+    pname = "textx-flow-codegen";
+    version = "1.0.0";
+    inherit (textx) src;
+    format = "setuptools";
+    pathToSourceRoot = "tests/functional/registration/projects/flow_codegen";
+    sourceRoot = "${src.name}/" + pathToSourceRoot;
+    propagatedBuildInputs = [
+      click
+      textx
+    ];
+    meta = with lib; {
+      inherit (textx.meta) license maintainers;
+      description = "Sample textX language for testing";
+      homepage = textx.homepage + "tree/${version}/" + pathToSourceRoot;
+    };
+  };
+
+  textx-flow-dsl = buildPythonPackage rec {
+    pname = "textx-flow-dsl";
+    version = "1.0.0";
+    inherit (textx) src;
+    format = "setuptools";
+    pathToSourceRoot = "tests/functional/registration/projects/flow_dsl";
+    sourceRoot = "${src.name}/" + pathToSourceRoot;
+    propagatedBuildInputs = [
+      textx
+    ];
+    meta = with lib; {
+      inherit (textx.meta) license maintainers;
+      description = "Sample textX language for testing";
+      homepage = textx.homepage + "tree/${version}/" + pathToSourceRoot;
+    };
+  };
+
+  textx-types-dsl = buildPythonPackage rec {
+    pname = "textx-types-dsl";
+    version = "1.0.0";
+    inherit (textx) src;
+    format = "setuptools";
+    pathToSourceRoot = "tests/functional/registration/projects/types_dsl";
+    sourceRoot = "${src.name}/" + pathToSourceRoot;
+    propagatedBuildInputs = [
+      textx
+    ];
+    meta = with lib; {
+      inherit (textx.meta) license maintainers;
+      description = "Sample textX language for testing";
+      homepage = textx.homepage + "tree/${version}/" + pathToSourceRoot;
+    };
+  };
+
+  textx-example-project = buildPythonPackage rec {
+    pname = "textx-example-project";
+    version = "1.0.0";
+    inherit (textx) src;
+    format = "setuptools";
+    pathToSourceRoot = "tests/functional/subcommands/example_project";
+    sourceRoot = "${src.name}/" + pathToSourceRoot;
+    propagatedBuildInputs = [
+      textx
+    ];
+    meta = with lib; {
+      inherit (textx.meta) license maintainers;
+      description = "Sample textX sub-command for testing";
+      homepage = textx.homepage + "tree/${version}/" + pathToSourceRoot;
+    };
+  };
+in
+  textx
diff --git a/pkgs/development/python-modules/textx/tests.nix b/pkgs/development/python-modules/textx/tests.nix
new file mode 100644
index 00000000000..021224e9f35
--- /dev/null
+++ b/pkgs/development/python-modules/textx/tests.nix
@@ -0,0 +1,53 @@
+{ lib
+, buildPythonPackage
+, click
+, gprof2dot
+, html5lib
+, jinja2
+, memory_profiler
+, psutil
+, pytestCheckHook
+, setuptools
+, textx
+, textx-data-dsl
+, textx-example-project
+, textx-flow-codegen
+, textx-flow-dsl
+, textx-types-dsl
+}:
+
+buildPythonPackage {
+  pname = "textx-tests";
+  inherit (textx) version;
+
+  srcs = textx.testout;
+
+  dontBuild = true;
+  dontInstall = true;
+
+  checkInputs = [
+    click
+    gprof2dot
+    html5lib
+    jinja2
+    memory_profiler
+    psutil
+    pytestCheckHook
+    setuptools
+    textx-data-dsl
+    textx-example-project
+    textx-flow-codegen
+    textx-flow-dsl
+    textx-types-dsl
+  ];
+
+  pytestFlagsArray = [
+    "tests/functional"
+  ];
+
+  meta = with lib; {
+    inherit (textx.meta) license maintainers;
+    description = "passthru.tests for textx";
+    homepage = textx.homepage + "tree/${version}/" + "tests/";
+  };
+}
diff --git a/pkgs/development/python-modules/xlib/default.nix b/pkgs/development/python-modules/xlib/default.nix
index edb4761af3a..05d5e095a16 100644
--- a/pkgs/development/python-modules/xlib/default.nix
+++ b/pkgs/development/python-modules/xlib/default.nix
@@ -22,6 +22,10 @@ buildPythonPackage rec {
     sha256 = "155p9xhsk01z9vdml74h07svlqy6gljnx9c6qbydcr14lwghwn06";
   };
 
+  patches = [
+    ./fix-no-protocol-specified.patch
+  ];
+
   nativeBuildInputs = [ setuptools-scm ];
   buildInputs = [ xorg.libX11 ];
   propagatedBuildInputs = [ six ];
diff --git a/pkgs/development/python-modules/xlib/fix-no-protocol-specified.patch b/pkgs/development/python-modules/xlib/fix-no-protocol-specified.patch
new file mode 100644
index 00000000000..1f3ab927f84
--- /dev/null
+++ b/pkgs/development/python-modules/xlib/fix-no-protocol-specified.patch
@@ -0,0 +1,13 @@
+diff --git a/Xlib/xauth.py b/Xlib/xauth.py
+index 2ed7dd5..303bd49 100644
+--- a/Xlib/xauth.py
++++ b/Xlib/xauth.py
+@@ -120,6 +120,8 @@ class Xauthority(object):
+         matches = {}
+ 
+         for efam, eaddr, enum, ename, edata in self.entries:
++            if enum == b'' and ename not in matches:
++                enum = num
+             if efam == family and eaddr == address and num == enum:
+                 matches[ename] = edata
+ 
diff --git a/pkgs/development/tools/analysis/cppcheck/default.nix b/pkgs/development/tools/analysis/cppcheck/default.nix
index d49baed1578..7b85a761850 100644
--- a/pkgs/development/tools/analysis/cppcheck/default.nix
+++ b/pkgs/development/tools/analysis/cppcheck/default.nix
@@ -1,4 +1,15 @@
-{ lib, stdenv, fetchFromGitHub, libxslt, docbook_xsl, docbook_xml_dtd_45, pcre, withZ3 ? true, z3, python3 }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, pcre
+, python3
+, libxslt
+, docbook_xsl
+, docbook_xml_dtd_45
+, withZ3 ? true
+, z3
+, which
+}:
 
 stdenv.mkDerivation rec {
   pname = "cppcheck";
@@ -14,9 +25,9 @@ stdenv.mkDerivation rec {
   buildInputs = [ pcre
     (python3.withPackages (ps: [ps.pygments]))
   ] ++ lib.optionals withZ3 [ z3 ];
-  nativeBuildInputs = [ libxslt docbook_xsl docbook_xml_dtd_45 ];
+  nativeBuildInputs = [ libxslt docbook_xsl docbook_xml_dtd_45 which ];
 
-  makeFlags = [ "PREFIX=$(out)" "FILESDIR=$(out)/cfg" "HAVE_RULES=yes" ]
+  makeFlags = [ "PREFIX=$(out)" "MATCHCOMPILER=yes" "FILESDIR=$(out)/share/cppcheck" "HAVE_RULES=yes" ]
    ++ lib.optionals withZ3 [ "USE_Z3=yes" "CPPFLAGS=-DNEW_Z3=1" ];
 
   outputs = [ "out" "man" ];
diff --git a/pkgs/development/tools/bacon/default.nix b/pkgs/development/tools/bacon/default.nix
index 6f5fc569de1..d6374b0163d 100644
--- a/pkgs/development/tools/bacon/default.nix
+++ b/pkgs/development/tools/bacon/default.nix
@@ -2,16 +2,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "bacon";
-  version = "2.2.0";
+  version = "2.2.1";
 
   src = fetchFromGitHub {
     owner = "Canop";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-GoaWlnlE/UfLX3HjbQXPMBOdlplParq7HHAfCUcdGLc=";
+    sha256 = "sha256-DpTN/Aw27M1s8T6ka1gwlI4WZ2MqP3PJ96XwxqlS0eM=";
   };
 
-  cargoSha256 = "sha256-3heAu8n1Dm7ewYTSCwxtgpF2vn/D5B52BuM9qz0X7Yc=";
+  cargoSha256 = "sha256-yY8oFvb++vye17aSCGw5BZ/Jgd46vPNJpqK+gKRoPvw=";
 
   buildInputs = lib.optional stdenv.isDarwin CoreServices;
 
diff --git a/pkgs/development/tools/build-managers/bear/default.nix b/pkgs/development/tools/build-managers/bear/default.nix
index 21f7512588c..e636f938c77 100644
--- a/pkgs/development/tools/build-managers/bear/default.nix
+++ b/pkgs/development/tools/build-managers/bear/default.nix
@@ -17,13 +17,13 @@
 
 stdenv.mkDerivation rec {
   pname = "bear";
-  version = "3.0.14";
+  version = "3.0.19";
 
   src = fetchFromGitHub {
     owner = "rizsotto";
     repo = pname;
     rev = version;
-    sha256 = "0qy96dyd29bjvfhi46y30hli5cvshw8am0spvcv9v43660wbczd7";
+    sha256 = "sha256-Jj38dmzr8NDDMercfWyJrMFxGBSExCGPeG2IVEtnSxY=";
   };
 
   nativeBuildInputs = [ cmake pkg-config ];
diff --git a/pkgs/development/tools/build-managers/bear/no-double-relative.patch b/pkgs/development/tools/build-managers/bear/no-double-relative.patch
index 257c7ffea38..e8087feb1af 100644
--- a/pkgs/development/tools/build-managers/bear/no-double-relative.patch
+++ b/pkgs/development/tools/build-managers/bear/no-double-relative.patch
@@ -1,22 +1,27 @@
-diff --git i/source/config.h.in w/source/config.h.in
-index ffcce3a..0caba6d 100644
---- i/source/config.h.in
-+++ w/source/config.h.in
-@@ -107,7 +107,7 @@ namespace cmd {
+diff --git a/source/config.h.in b/source/config.h.in
+index 6b659c2..f7bdf22 100644
+--- a/source/config.h.in
++++ b/source/config.h.in
+@@ -108,8 +108,8 @@ namespace cmd {
      }
  
      namespace wrapper {
--        constexpr char DEFAULT_PATH[] = "@ROOT_INSTALL_PREFIX@/@PRIVATE_INSTALLDIR@/wrapper";
-+        constexpr char DEFAULT_PATH[] = "@PRIVATE_INSTALLDIR@/wrapper";
-         constexpr char DEFAULT_DIR_PATH[] = "@ROOT_INSTALL_PREFIX@/@PRIVATE_INSTALLDIR@/wrapper.d";
+-        constexpr char DEFAULT_PATH[] = "@ROOT_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/bear/wrapper";
+-        constexpr char DEFAULT_DIR_PATH[] = "@ROOT_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/bear/wrapper.d";
++        constexpr char DEFAULT_PATH[] = "@CMAKE_INSTALL_LIBDIR@/bear/wrapper";
++        constexpr char DEFAULT_DIR_PATH[] = "@CMAKE_INSTALL_LIBDIR@/bear/wrapper.d";
  
          constexpr char FLAG_VERBOSE[] = "--verbose";
-@@ -120,7 +120,7 @@ namespace cmd {
-     }
- 
-     namespace library {
--        constexpr char DEFAULT_PATH[] = "@ROOT_INSTALL_PREFIX@/@PRIVATE_INSTALLDIR@/@CMAKE_SHARED_LIBRARY_PREFIX@exec@CMAKE_SHARED_LIBRARY_SUFFIX@";
-+        constexpr char DEFAULT_PATH[] = "@PRIVATE_INSTALLDIR@/@CMAKE_SHARED_LIBRARY_PREFIX@exec@CMAKE_SHARED_LIBRARY_SUFFIX@";
- 
+         constexpr char FLAG_DESTINATION[] = "--destination";
+@@ -134,9 +134,9 @@ namespace cmd {
+         // And use the `libexec.so` path default value with a single path,
+         // that matches both. (The match can be achieved by the $LIB token
+         // expansion from the dynamic loader. See `man ld.so` for more.)
+-        constexpr char DEFAULT_PATH[] = "@ROOT_INSTALL_PREFIX@/$LIB/bear/@CMAKE_SHARED_LIBRARY_PREFIX@exec@CMAKE_SHARED_LIBRARY_SUFFIX@";
++        constexpr char DEFAULT_PATH[] = "$LIB/bear/@CMAKE_SHARED_LIBRARY_PREFIX@exec@CMAKE_SHARED_LIBRARY_SUFFIX@";
+ #else
+-        constexpr char DEFAULT_PATH[] = "@ROOT_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/bear/@CMAKE_SHARED_LIBRARY_PREFIX@exec@CMAKE_SHARED_LIBRARY_SUFFIX@";
++        constexpr char DEFAULT_PATH[] = "@CMAKE_INSTALL_LIBDIR@/bear/@CMAKE_SHARED_LIBRARY_PREFIX@exec@CMAKE_SHARED_LIBRARY_SUFFIX@";
+ #endif
          constexpr char KEY_REPORTER[] = "INTERCEPT_REPORT_COMMAND";
          constexpr char KEY_DESTINATION[] = "INTERCEPT_REPORT_DESTINATION";
diff --git a/pkgs/development/tools/cambalache/default.nix b/pkgs/development/tools/cambalache/default.nix
index 781dd86cd75..0fc470ca9a2 100644
--- a/pkgs/development/tools/cambalache/default.nix
+++ b/pkgs/development/tools/cambalache/default.nix
@@ -20,7 +20,7 @@
 
 python3.pkgs.buildPythonApplication rec {
   pname = "cambalache";
-  version = "0.10.2";
+  version = "0.10.3";
 
   format = "other";
 
@@ -29,7 +29,7 @@ python3.pkgs.buildPythonApplication rec {
     owner = "jpu";
     repo = pname;
     rev = version;
-    sha256 = "sha256-/0HMtNR9R/Oq1ZoBaLe4iU0OOVZUozuo8gP0j9J8hdc=";
+    sha256 = "sha256-Xm8h3BBRibdLCeI/OeprF5dCCiNrfJCg7aE24uleCds=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/tools/comby/comby.patch b/pkgs/development/tools/comby/comby.patch
new file mode 100644
index 00000000000..ec1f5141985
--- /dev/null
+++ b/pkgs/development/tools/comby/comby.patch
@@ -0,0 +1,1025 @@
+diff --git a/comby-kernel.opam b/comby-kernel.opam
+index 828c5a3..00f6c3d 100644
+--- a/comby-kernel.opam
++++ b/comby-kernel.opam
+@@ -20,7 +20,7 @@ build: [
+ depends: [
+   "dune" {>= "2.8.0"}
+   "ocaml" {>= "4.08.1"}
+-  "core_kernel"
++  "core_kernel" {>= "v0.15.0"}
+   "mparser" {>= "1.3"}
+   "mparser-pcre"
+   "ppx_deriving"
+diff --git a/comby-semantic.opam b/comby-semantic.opam
+index cb9dcc7..443749f 100644
+--- a/comby-semantic.opam
++++ b/comby-semantic.opam
+@@ -20,7 +20,7 @@ build: [
+ depends: [
+   "dune" {>= "2.8.0"}
+   "ocaml" {>= "4.08.1"}
+-  "core_kernel"
++  "core_kernel" {>= "v0.15.0"}
+   "ppx_deriving"
+   "lwt"
+   "cohttp"
+diff --git a/comby.opam b/comby.opam
+index 98bdc19..d45892c 100644
+--- a/comby.opam
++++ b/comby.opam
+@@ -31,7 +31,7 @@ depends: [
+   "cohttp-lwt-unix"
+   "comby-kernel" {= "1.7.0"}
+   "comby-semantic" {= "1.7.0"}
+-  "core"
++  "core" {>= "v0.15.0"}
+   "hack_parallel" {arch != "arm32" & arch != "arm64"}
+   "lwt"
+   "lwt_react"
+diff --git a/dune b/dune
+index 53b1312..a71571a 100644
+--- a/dune
++++ b/dune
+@@ -1,6 +1,8 @@
+ (env
+  (dev
+-  (flags (:standard -w A-3-4-32-34-37-39-40-41-42-44-45-48-49-50-57-60-66-67)))
++  (flags
++   (:standard -w A-3-4-32-34-37-39-40-41-42-44-45-48-49-50-57-60-66-67)))
+  (release
+-  (flags (:standard -w A-3-4-32-34-37-39-40-41-42-44-45-48-49-50-57-60-66-67))
+- (ocamlopt_flags (-O3))))
++  (flags
++   (:standard -w A-3-4-32-34-37-39-40-41-42-44-45-48-49-50-57-60-66-67))
++  (ocamlopt_flags (-O3))))
+diff --git a/lib/app/configuration/command_configuration.ml b/lib/app/configuration/command_configuration.ml
+index eed8420..aea4dfa 100644
+--- a/lib/app/configuration/command_configuration.ml
++++ b/lib/app/configuration/command_configuration.ml
+@@ -16,21 +16,21 @@ type 'a next =
+ 
+ let fold_directory ?(sorted=false) root ~init ~f =
+   let rec aux acc absolute_path depth =
+-    if Sys.is_file absolute_path = `Yes then
++    if Sys_unix.is_file absolute_path = `Yes then
+       match f acc ~depth ~absolute_path ~is_file:true with
+       | Continue acc
+       | Skip acc -> acc
+-    else if Sys.is_directory absolute_path = `Yes then
++    else if Sys_unix.is_directory absolute_path = `Yes then
+       match f acc ~depth ~absolute_path ~is_file:false with
+       | Skip acc -> acc
+       | Continue acc ->
+         let dir_contents =
+           if Option.is_some (Sys.getenv "COMBY_TEST") || sorted then
+-            Sys.ls_dir absolute_path
++            Sys_unix.ls_dir absolute_path
+             |> List.sort ~compare:String.compare
+             |> List.rev
+           else
+-            Sys.ls_dir absolute_path
++            Sys_unix.ls_dir absolute_path
+         in
+         List.fold dir_contents ~init:acc ~f:(fun acc subdir ->
+             aux acc (Filename.concat absolute_path subdir) (depth + 1))
+@@ -50,8 +50,8 @@ let parse_source_directories
+   let exact_file_paths, file_patterns =
+     List.partition_map file_filters ~f:(fun path ->
+         let is_exact path =
+-          (String.contains path '/' && Sys.is_file path = `Yes)
+-          || (Sys.is_file ("." ^/ path) = `Yes) (* See if it matches something in the current directory *)
++          (String.contains path '/' && Sys_unix.is_file path = `Yes)
++          || (Sys_unix.is_file ("." ^/ path) = `Yes) (* See if it matches something in the current directory *)
+         in
+         if is_exact path then Either.First path else Either.Second path)
+   in
+@@ -167,8 +167,8 @@ let parse_templates ?metasyntax ?(warn_for_missing_file_in_dir = false) paths =
+   let f acc ~depth:_ ~absolute_path ~is_file =
+     let is_leaf_directory absolute_path =
+       not is_file &&
+-      Sys.ls_dir absolute_path
+-      |> List.for_all ~f:(fun path -> Sys.is_directory (absolute_path ^/ path) = `No)
++      Sys_unix.ls_dir absolute_path
++      |> List.for_all ~f:(fun path -> Sys_unix.is_directory (absolute_path ^/ path) = `No)
+     in
+     if is_leaf_directory absolute_path then
+       match parse_directory absolute_path with
+@@ -178,7 +178,7 @@ let parse_templates ?metasyntax ?(warn_for_missing_file_in_dir = false) paths =
+       Continue acc
+   in
+   List.concat_map paths ~f:(fun path ->
+-      if Sys.is_directory path = `Yes then
++      if Sys_unix.is_directory path = `Yes then
+         fold_directory path ~sorted:true ~init:[] ~f
+       else
+         parse_toml ?metasyntax path)
+@@ -421,7 +421,7 @@ let parse_metasyntax metasyntax_path =
+   match metasyntax_path with
+   | None -> Matchers.Metasyntax.default_metasyntax
+   | Some metasyntax_path ->
+-    match Sys.file_exists metasyntax_path with
++    match Sys_unix.file_exists metasyntax_path with
+     | `No | `Unknown ->
+       Format.eprintf "Could not open file: %s@." metasyntax_path;
+       exit 1
+@@ -470,12 +470,12 @@ let emit_errors { input_options; output_options; _ } =
+     ; Option.is_some input_options.directory_depth
+       && Option.value_exn (input_options.directory_depth) < 0
+     , "-depth must be 0 or greater."
+-    ; Sys.is_directory input_options.target_directory = `No
++    ; Sys_unix.is_directory input_options.target_directory = `No
+     , "Directory specified with -d or -directory is not a directory."
+     ; output_options.json_only_diff && not output_options.json_lines
+     , "-json-only-diff can only be supplied with -json-lines."
+     ; Option.is_some output_options.interactive_review &&
+-      (not (String.equal input_options.target_directory (Sys.getcwd ())))
++      (not (String.equal input_options.target_directory (Sys_unix.getcwd ())))
+     , "Please remove the -d option and `cd` to the directory where you want to \
+        review from. The -review, -editor, or -default-no options should only be run \
+        at the root directory of the project files to patch."
+@@ -483,11 +483,11 @@ let emit_errors { input_options; output_options; _ } =
+          match input_options.templates with
+          | Some inputs ->
+            List.find_map inputs ~f:(fun input ->
+-               if Sys.is_file input = `Yes then
++               if Sys_unix.is_file input = `Yes then
+                  (match Toml.Parser.from_filename input with
+                   | `Error (s, _) -> Some s
+                   | _ -> None)
+-               else if not (Sys.is_directory input = `Yes) then
++               else if not (Sys_unix.is_directory input = `Yes) then
+                  Some (Format.sprintf "Directory %S specified with -templates is not a directory." input)
+                else
+                  None)
+@@ -599,7 +599,7 @@ let filter_zip_entries file_filters exclude_directory_prefix exclude_file_prefix
+ 
+ let syntax custom_matcher_path =
+   match
+-    Sys.file_exists custom_matcher_path with
++    Sys_unix.file_exists custom_matcher_path with
+   | `No | `Unknown ->
+     Format.eprintf "Could not open file: %s@." custom_matcher_path;
+     exit 1
+@@ -783,7 +783,7 @@ let create
+     | Directory ->
+       let target_directory =
+         if target_directory = "." then
+-          Filename.realpath target_directory
++          Filename_unix.realpath target_directory
+         else
+           target_directory
+       in
+diff --git a/lib/app/configuration/dune b/lib/app/configuration/dune
+index e0f9748..e417cfe 100644
+--- a/lib/app/configuration/dune
++++ b/lib/app/configuration/dune
+@@ -1,6 +1,21 @@
+ (library
+-  (name configuration)
+-  (public_name comby.configuration)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_deriving.show ppx_sexp_conv ppx_sexp_message ppx_deriving_yojson))
+-  (libraries comby-kernel comby-semantic comby.patdiff comby.camlzip core yojson ppx_deriving_yojson toml lwt lwt.unix tar tar-unix))
++ (name configuration)
++ (public_name comby.configuration)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving.show ppx_sexp_conv ppx_sexp_message ppx_deriving_yojson))
++ (libraries
++  comby-kernel
++  comby-semantic
++  comby.patdiff
++  comby.camlzip
++  core
++  core_unix.sys_unix
++  yojson
++  ppx_deriving_yojson
++  toml
++  lwt
++  lwt.unix
++  tar
++  tar-unix))
+diff --git a/lib/app/configuration/external_semantic.ml b/lib/app/configuration/external_semantic.ml
+index bdc7051..ac69b1b 100644
+--- a/lib/app/configuration/external_semantic.ml
++++ b/lib/app/configuration/external_semantic.ml
+@@ -2,13 +2,10 @@ open Core_kernel
+ 
+ open Comby_semantic
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+ let lsif_hover ~name:_ ~filepath ~line ~column =
+-  String.chop_prefix_if_exists filepath ~prefix:(Sys.getcwd ()) |> fun filepath_relative_root ->
++  String.chop_prefix_if_exists filepath ~prefix:(Sys_unix.getcwd ()) |> fun filepath_relative_root ->
+   if debug then Format.printf "File relative root: %s@." filepath;
+   if debug then Format.printf "Querying type at %d::%d@." line column;
+   let context =
+diff --git a/lib/app/dune b/lib/app/dune
+index 2ed553c..a91f826 100644
+--- a/lib/app/dune
++++ b/lib/app/dune
+@@ -1,9 +1,8 @@
+ (library
+-  (name comby)
+-  (public_name comby)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv))
+-  (libraries 
+-   core 
+-   comby-kernel
+-   comby.pipeline))
++ (name comby)
++ (public_name comby)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv))
++ (libraries core comby-kernel comby.pipeline))
+diff --git a/lib/app/interactive/dune b/lib/app/interactive/dune
+index 815aff5..63c1757 100644
+--- a/lib/app/interactive/dune
++++ b/lib/app/interactive/dune
+@@ -1,5 +1,12 @@
+ (library
+-  (name interactive)
+-  (public_name comby.interactive)
+-  (preprocess (pps ppx_sexp_conv))
+-  (libraries comby-kernel comby.configuration core shell.filename_extended lwt lwt.unix))
++ (name interactive)
++ (public_name comby.interactive)
++ (preprocess
++  (pps ppx_sexp_conv))
++ (libraries
++  comby-kernel
++  comby.configuration
++  core
++  shell.filename_extended
++  lwt
++  lwt.unix))
+diff --git a/lib/app/interactive/interactive.ml b/lib/app/interactive/interactive.ml
+index d4bf200..b27105a 100644
+--- a/lib/app/interactive/interactive.ml
++++ b/lib/app/interactive/interactive.ml
+@@ -1,5 +1,6 @@
+ open Core
+ open Lwt
++module Unix = Core_unix
+ 
+ open Configuration
+ 
+@@ -37,6 +38,7 @@ module Diff = struct
+           ~big_enough:line_big_enough
+           ~prev
+           ~next
++          ()
+       | Some prog ->
+         let compare x y =
+           let cmd = sprintf "%s %S %S" prog x y in
+@@ -52,7 +54,7 @@ module Diff = struct
+             let compare = compare
+           end)
+         in
+-        P.get_hunks ~transform ~context ~big_enough:line_big_enough ~prev ~next
++        P.get_hunks ~transform ~context ~big_enough:line_big_enough ~prev ~next ()
+     in
+     match float_tolerance with
+     | None -> hunks
+diff --git a/lib/app/pipeline/dune b/lib/app/pipeline/dune
+index 3369b9e..e6ec880 100644
+--- a/lib/app/pipeline/dune
++++ b/lib/app/pipeline/dune
+@@ -1,11 +1,23 @@
+ (library
+-  (name pipeline)
+-  (public_name comby.pipeline)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_sexp_conv ppx_deriving_yojson))
+-  (libraries comby-kernel comby.statistics comby.configuration comby.interactive comby.camlzip core core.uuid yojson ppx_deriving_yojson parany
+-    (select parallel_hack.ml from
+-      (hack_parallel -> parallel_hack.available.ml)
+-      (!hack_parallel -> parallel_hack.parany_fallback.ml)) 
+-  ))
+-
++ (name pipeline)
++ (public_name comby.pipeline)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_sexp_conv ppx_deriving_yojson))
++ (libraries
++  comby-kernel
++  comby.statistics
++  comby.configuration
++  comby.interactive
++  comby.camlzip
++  core
++  core_unix.uuid
++  yojson
++  ppx_deriving_yojson
++  parany
++  (select
++   parallel_hack.ml
++   from
++   (hack_parallel -> parallel_hack.available.ml)
++   (!hack_parallel -> parallel_hack.parany_fallback.ml))))
+diff --git a/lib/app/pipeline/parallel_hack.available.ml b/lib/app/pipeline/parallel_hack.available.ml
+index a901eea..ad33070 100644
+--- a/lib/app/pipeline/parallel_hack.available.ml
++++ b/lib/app/pipeline/parallel_hack.available.ml
+@@ -1,4 +1,5 @@
+ open Core
++module Unix = Core_unix
+ 
+ open Hack_parallel
+ 
+diff --git a/lib/app/statistics/dune b/lib/app/statistics/dune
+index b14d5b1..12aff7f 100644
+--- a/lib/app/statistics/dune
++++ b/lib/app/statistics/dune
+@@ -1,6 +1,8 @@
+ (library
+-  (name statistics)
+-  (public_name comby.statistics)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_deriving_yojson))
+-  (libraries yojson ppx_deriving_yojson ppx_deriving_yojson.runtime))
++ (name statistics)
++ (public_name comby.statistics)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving_yojson))
++ (libraries yojson ppx_deriving_yojson ppx_deriving_yojson.runtime))
+diff --git a/lib/app/vendored/camlzip/dune b/lib/app/vendored/camlzip/dune
+index 56ea8ff..1c67be1 100644
+--- a/lib/app/vendored/camlzip/dune
++++ b/lib/app/vendored/camlzip/dune
+@@ -7,7 +7,9 @@
+  ; as long as the unix parts are not needed, but I want it to 
+  ; compile executables for tests
+  (libraries unix)
+- (foreign_stubs (language c) (names zlibstubs))
++ (foreign_stubs
++  (language c)
++  (names zlibstubs))
+  (c_library_flags
+   (:include c_flags.sexp)
+   (:include c_library_flags.sexp)))
+@@ -21,7 +23,9 @@
+ 
+ (env
+  (dev
+-  (flags (:standard -w A-3-4-27-29-32-34-35-39-40-41-42-44-45-48-49-50-57-60)))
++  (flags
++   (:standard -w A-3-4-27-29-32-34-35-39-40-41-42-44-45-48-49-50-57-60)))
+  (release
+-  (flags (:standard -w A-3-4-27-29-32-34-35-39-40-41-42-44-45-48-49-50-57-60))
+- (ocamlopt_flags (-O3))))
++  (flags
++   (:standard -w A-3-4-27-29-32-34-35-39-40-41-42-44-45-48-49-50-57-60))
++  (ocamlopt_flags (-O3))))
+diff --git a/lib/app/vendored/patdiff/kernel/src/dune b/lib/app/vendored/patdiff/kernel/src/dune
+index 7a6353d..b79cba2 100644
+--- a/lib/app/vendored/patdiff/kernel/src/dune
++++ b/lib/app/vendored/patdiff/kernel/src/dune
+@@ -1,3 +1,6 @@
+-(library (name patdiff_kernel) (public_name comby.patdiff_kernel)
++(library
++ (name patdiff_kernel)
++ (public_name comby.patdiff_kernel)
+  (libraries core_kernel.composition_infix core_kernel patience_diff re)
+- (preprocess (pps ppx_jane)))
++ (preprocess
++  (pps ppx_jane)))
+diff --git a/lib/app/vendored/patdiff/kernel/src/patdiff_core.ml b/lib/app/vendored/patdiff/kernel/src/patdiff_core.ml
+index 4f53a0b..88ee0e3 100644
+--- a/lib/app/vendored/patdiff/kernel/src/patdiff_core.ml
++++ b/lib/app/vendored/patdiff/kernel/src/patdiff_core.ml
+@@ -138,6 +138,7 @@ module Make (Output_impls : Output_impls) = struct
+       ~big_enough:line_big_enough
+       ~prev
+       ~next
++      ()
+   ;;
+ 
+   type word_or_newline =
+@@ -345,6 +346,7 @@ module Make (Output_impls : Output_impls) = struct
+       ~big_enough:word_big_enough
+       ~prev:prev_pieces
+       ~next:next_pieces
++      ()
+   ;;
+ 
+   let ranges_are_just_whitespace (ranges : _ Patience_diff.Range.t list) =
+diff --git a/lib/app/vendored/patdiff/lib/src/compare_core.ml b/lib/app/vendored/patdiff/lib/src/compare_core.ml
+index fafb201..8b40d09 100644
+--- a/lib/app/vendored/patdiff/lib/src/compare_core.ml
++++ b/lib/app/vendored/patdiff/lib/src/compare_core.ml
+@@ -1,5 +1,6 @@
+ open! Core
+ open! Import
++module Unix = Core_unix
+ 
+ let lines_of_contents contents =
+   let lines = Array.of_list (String.split_lines contents) in
+@@ -100,6 +101,7 @@ let compare_lines (config : Configuration.t) ?prev_diff ?next_diff ~prev ~next (
+         ~big_enough:line_big_enough
+         ~prev
+         ~next
++        ()
+     | Some prog ->
+       let compare x y =
+         let cmd = sprintf "%s %S %S" prog x y in
+@@ -116,7 +118,7 @@ let compare_lines (config : Configuration.t) ?prev_diff ?next_diff ~prev ~next (
+           let compare = compare
+         end)
+       in
+-      P.get_hunks ~transform ~context ~big_enough:line_big_enough ~prev ~next
++      P.get_hunks ~transform ~context ~big_enough:line_big_enough ~prev ~next ()
+   in
+   let hunks =
+     match config.float_tolerance with
+@@ -361,7 +363,7 @@ let rec diff_dirs_internal (config : Configuration.t) ~prev_dir ~next_dir ~file_
+       | None -> Fn.const true
+       | Some file_filter -> file_filter
+     in
+-    Sys.ls_dir (File_name.real_name_exn dir)
++    Sys_unix.ls_dir (File_name.real_name_exn dir)
+     |> List.filter ~f:(fun x ->
+       let x = File_name.real_name_exn dir ^/ x in
+       match Unix.stat x with
+diff --git a/lib/app/vendored/patdiff/lib/src/compare_core.mli b/lib/app/vendored/patdiff/lib/src/compare_core.mli
+index e919512..caa8dcb 100644
+--- a/lib/app/vendored/patdiff/lib/src/compare_core.mli
++++ b/lib/app/vendored/patdiff/lib/src/compare_core.mli
+@@ -1,5 +1,6 @@
+ open! Core
+ open! Import
++module Unix = Core_unix
+ 
+ val diff_files
+   :  Configuration.t
+diff --git a/lib/app/vendored/patdiff/lib/src/configuration.ml b/lib/app/vendored/patdiff/lib/src/configuration.ml
+index 6879daa..7d59706 100644
+--- a/lib/app/vendored/patdiff/lib/src/configuration.ml
++++ b/lib/app/vendored/patdiff/lib/src/configuration.ml
+@@ -481,7 +481,7 @@ let rec load_exn' ~set config_file =
+        | Error _another_exn -> raise exn
+        | Ok c ->
+          (let new_file = config_file ^ ".new" in
+-          match Sys.file_exists new_file with
++          match Sys_unix.file_exists new_file with
+           | `Yes | `Unknown -> ()
+           | `No ->
+             (try Sexp.save_hum new_file (On_disk.V1.sexp_of_t c) with
+@@ -564,7 +564,7 @@ let get_config ?filename () =
+       (* ~/.patdiff exists *)
+       Option.bind (Sys.getenv "HOME") ~f:(fun home ->
+         let f = home ^/ ".patdiff" in
+-        match Sys.file_exists f with
++        match Sys_unix.file_exists f with
+         | `Yes -> Some f
+         | `No | `Unknown -> None)
+   in
+diff --git a/lib/app/vendored/patdiff/lib/src/dune b/lib/app/vendored/patdiff/lib/src/dune
+index 007acad..b6a0f80 100644
+--- a/lib/app/vendored/patdiff/lib/src/dune
++++ b/lib/app/vendored/patdiff/lib/src/dune
+@@ -1,4 +1,13 @@
+-(library (name patdiff) (public_name comby.patdiff)
+- (libraries core_kernel.composition_infix core core.linux_ext comby.patdiff_kernel
++(library
++ (name patdiff)
++ (public_name comby.patdiff)
++ (libraries
++  core_kernel.composition_infix
++  core
++  core_unix
++  core_unix.linux_ext
++  core_unix.sys_unix
++  comby.patdiff_kernel
+   patience_diff)
+- (preprocess (pps ppx_jane)))
++ (preprocess
++  (pps ppx_jane)))
+diff --git a/lib/app/vendored/patdiff/lib/src/html_output.ml b/lib/app/vendored/patdiff/lib/src/html_output.ml
+index 3d08f91..93ae8af 100644
+--- a/lib/app/vendored/patdiff/lib/src/html_output.ml
++++ b/lib/app/vendored/patdiff/lib/src/html_output.ml
+@@ -1,5 +1,6 @@
+ open! Core
+ open! Import
++module Unix = Core_unix
+ 
+ include Patdiff_kernel.Html_output.Private.Make (struct
+     let mtime file =
+diff --git a/lib/kernel/dune b/lib/kernel/dune
+index 0961dad..07a929b 100644
+--- a/lib/kernel/dune
++++ b/lib/kernel/dune
+@@ -1,10 +1,12 @@
+ (library
+-  (name comby_kernel)
+-  (public_name comby-kernel)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv))
+-  (libraries 
+-   core_kernel
+-   comby-kernel.match
+-   comby-kernel.matchers
+-   comby-kernel.replacement))
++ (name comby_kernel)
++ (public_name comby-kernel)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv))
++ (libraries
++  core_kernel
++  comby-kernel.match
++  comby-kernel.matchers
++  comby-kernel.replacement))
+diff --git a/lib/kernel/match/dune b/lib/kernel/match/dune
+index 03b120a..4d48b61 100644
+--- a/lib/kernel/match/dune
++++ b/lib/kernel/match/dune
+@@ -1,6 +1,12 @@
+ (library
+-  (name match)
+-  (public_name comby-kernel.match)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_deriving.eq ppx_sexp_conv ppx_deriving_yojson))
+-  (libraries core_kernel yojson ppx_deriving_yojson ppx_deriving_yojson.runtime))
++ (name match)
++ (public_name comby-kernel.match)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving.eq ppx_sexp_conv ppx_deriving_yojson))
++ (libraries
++  core_kernel
++  yojson
++  ppx_deriving_yojson
++  ppx_deriving_yojson.runtime))
+diff --git a/lib/kernel/matchers/alpha.ml b/lib/kernel/matchers/alpha.ml
+index e31094d..01adb52 100644
+--- a/lib/kernel/matchers/alpha.ml
++++ b/lib/kernel/matchers/alpha.ml
+@@ -13,20 +13,11 @@ module R = MakeRegexp(Regexp)
+ let configuration_ref = ref (Configuration.create ())
+ let weaken_delimiter_hole_matching = false
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+-let debug_hole =
+-  match Sys.getenv "DEBUG_COMBY_HOLE" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug_hole = Sys.getenv "DEBUG_COMBY_HOLE" |> Option.is_some
+ 
+-let debug_position =
+-  match Sys.getenv "DEBUG_COMBY_POS" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug_position = Sys.getenv "DEBUG_COMBY_POS" |> Option.is_some
+ 
+ let f _ = return Types.Unit
+ 
+@@ -147,7 +138,7 @@ module Make (Lang : Types.Language.S) (Meta : Types.Metasyntax.S) (Ext : Types.E
+         ]
+       >>= fun _ -> f Types.Unit
+ 
+-    let sequence_chain (plist : ('c, Match.t) parser sexp_list) : ('c, Match.t) parser =
++    let sequence_chain (plist : ('c, Match.t) parser list) : ('c, Match.t) parser =
+       List.fold plist ~init:(return Types.Unit) ~f:(>>)
+ 
+     let with_debug_matcher s tag =
+diff --git a/lib/kernel/matchers/dune b/lib/kernel/matchers/dune
+index 12ed326..4625458 100644
+--- a/lib/kernel/matchers/dune
++++ b/lib/kernel/matchers/dune
+@@ -1,6 +1,18 @@
+ (library
+-  (name matchers)
+-  (public_name comby-kernel.matchers)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_here ppx_sexp_conv ppx_sexp_message ppx_deriving_yojson))
+-  (libraries comby-kernel.replacement comby-kernel.parsers comby-kernel.match comby-kernel.vangstrom core_kernel mparser mparser-pcre re yojson ppx_deriving_yojson))
++ (name matchers)
++ (public_name comby-kernel.matchers)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_here ppx_sexp_conv ppx_sexp_message ppx_deriving_yojson))
++ (libraries
++  comby-kernel.replacement
++  comby-kernel.parsers
++  comby-kernel.match
++  comby-kernel.vangstrom
++  core_kernel
++  mparser
++  mparser-pcre
++  re
++  yojson
++  ppx_deriving_yojson))
+diff --git a/lib/kernel/matchers/evaluate.ml b/lib/kernel/matchers/evaluate.ml
+index 9ea71a0..288f79a 100644
+--- a/lib/kernel/matchers/evaluate.ml
++++ b/lib/kernel/matchers/evaluate.ml
+@@ -3,10 +3,7 @@ open Core_kernel
+ open Match
+ open Types.Ast
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+ type result = bool * Match.environment option
+ 
+diff --git a/lib/kernel/matchers/omega.ml b/lib/kernel/matchers/omega.ml
+index eeec516..1eb3ccc 100644
+--- a/lib/kernel/matchers/omega.ml
++++ b/lib/kernel/matchers/omega.ml
+@@ -32,15 +32,9 @@ let push_source_ref : string ref = ref ""
+ 
+ let filepath_ref : string option ref = ref None
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+-let rewrite =
+-  match Sys.getenv "REWRITE" with
+-  | exception Not_found -> false
+-  | _ -> true
++let rewrite = Sys.getenv "REWRITE" |> Option.is_some
+ 
+ let actual = Buffer.create 10
+ 
+diff --git a/lib/kernel/matchers/preprocess.ml b/lib/kernel/matchers/preprocess.ml
+index 84f3ed0..b6d10e7 100644
+--- a/lib/kernel/matchers/preprocess.ml
++++ b/lib/kernel/matchers/preprocess.ml
+@@ -1,9 +1,6 @@
+ open Core_kernel
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+ let append_rule (module Parser : Types.Rule.S) rule parent_rule =
+   let open Option in
+diff --git a/lib/kernel/matchers/regexp.ml b/lib/kernel/matchers/regexp.ml
+index ef0bd59..906820b 100644
+--- a/lib/kernel/matchers/regexp.ml
++++ b/lib/kernel/matchers/regexp.ml
+@@ -3,7 +3,7 @@ open Vangstrom
+ let debug =
+   match Sys.getenv "DEBUG_COMBY" with
+   | exception Not_found -> false
+-  | _ -> true
++  | (_ : string) -> true
+ 
+ module type Regexp_engine_intf = sig
+   type t
+diff --git a/lib/kernel/matchers/rewrite.ml b/lib/kernel/matchers/rewrite.ml
+index 32c4740..2fc28db 100644
+--- a/lib/kernel/matchers/rewrite.ml
++++ b/lib/kernel/matchers/rewrite.ml
+@@ -4,10 +4,7 @@ open Core_kernel
+ open Match
+ open Replacement
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+ let counter =
+   let uuid_for_id_counter = ref 0 in
+diff --git a/lib/kernel/matchers/template.ml b/lib/kernel/matchers/template.ml
+index 423a07f..136236c 100644
+--- a/lib/kernel/matchers/template.ml
++++ b/lib/kernel/matchers/template.ml
+@@ -4,10 +4,7 @@ open Core_kernel
+ open Match
+ open Types.Template
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+ module Make (Metasyntax : Types.Metasyntax.S) (External : Types.External.S) : Types.Template.S = struct
+ 
+diff --git a/lib/kernel/parsers/dune b/lib/kernel/parsers/dune
+index 28b020c..0cc1fa5 100644
+--- a/lib/kernel/parsers/dune
++++ b/lib/kernel/parsers/dune
+@@ -1,6 +1,8 @@
+ (library
+-  (name parsers)
+-  (public_name comby-kernel.parsers)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_sexp_conv))
+-  (libraries core_kernel comby-kernel.vangstrom mparser))
++ (name parsers)
++ (public_name comby-kernel.parsers)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_sexp_conv))
++ (libraries core_kernel comby-kernel.vangstrom mparser))
+diff --git a/lib/kernel/replacement/dune b/lib/kernel/replacement/dune
+index 3e62de6..485b716 100644
+--- a/lib/kernel/replacement/dune
++++ b/lib/kernel/replacement/dune
+@@ -1,6 +1,13 @@
+ (library
+-  (name replacement)
+-  (public_name comby-kernel.replacement)
+-  (instrumentation (backend bisect_ppx))
+-  (preprocess (pps ppx_deriving_yojson))
+-  (libraries comby-kernel.match core_kernel yojson ppx_deriving_yojson ppx_deriving_yojson.runtime))
++ (name replacement)
++ (public_name comby-kernel.replacement)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving_yojson))
++ (libraries
++  comby-kernel.match
++  core_kernel
++  yojson
++  ppx_deriving_yojson
++  ppx_deriving_yojson.runtime))
+diff --git a/lib/semantic/dune b/lib/semantic/dune
+index 9a244d3..186a2ed 100644
+--- a/lib/semantic/dune
++++ b/lib/semantic/dune
+@@ -1,11 +1,8 @@
+ (library
+-   (name comby_semantic)
+-   (public_name comby-semantic)
+-   (instrumentation (backend bisect_ppx))
+-   (preprocess (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv))
+-   (libraries
+-      core_kernel
+-      lwt
+-      cohttp
+-      cohttp-lwt-unix
+-      yojson))
++ (name comby_semantic)
++ (public_name comby-semantic)
++ (instrumentation
++  (backend bisect_ppx))
++ (preprocess
++  (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv))
++ (libraries core_kernel lwt cohttp cohttp-lwt-unix yojson))
+diff --git a/lib/semantic/lsif.ml b/lib/semantic/lsif.ml
+index 49747bc..d6b3e19 100644
+--- a/lib/semantic/lsif.ml
++++ b/lib/semantic/lsif.ml
+@@ -3,10 +3,7 @@ open Lwt
+ open Cohttp
+ open Cohttp_lwt_unix
+ 
+-let debug =
+-  match Sys.getenv "DEBUG_COMBY" with
+-  | exception Not_found -> false
+-  | _ -> true
++let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some
+ 
+ module Formatting = struct
+   type t =
+diff --git a/src/dune b/src/dune
+index 444a5a3..f006195 100644
+--- a/src/dune
++++ b/src/dune
+@@ -1,10 +1,17 @@
+ (executables
+- (libraries comby core ppx_deriving_yojson ppx_deriving_yojson.runtime
+-    (select if_hack_parallel.ml from
+-      (hack_parallel -> if_hack_parallel.available.ml)
+-      (!hack_parallel -> if_hack_parallel.unavailable.ml))
+- )
+- (preprocess (pps ppx_deriving_yojson ppx_let ppx_deriving.show ppx_sexp_conv))
++ (libraries
++  comby
++  core
++  core_unix.command_unix
++  ppx_deriving_yojson
++  ppx_deriving_yojson.runtime
++  (select
++   if_hack_parallel.ml
++   from
++   (hack_parallel -> if_hack_parallel.available.ml)
++   (!hack_parallel -> if_hack_parallel.unavailable.ml)))
++ (preprocess
++  (pps ppx_deriving_yojson ppx_let ppx_deriving.show ppx_sexp_conv))
+  (modules main if_hack_parallel)
+  (modes byte exe)
+  (names main))
+@@ -20,4 +27,5 @@
+ (install
+  (package comby)
+  (section bin)
+- (files (main.exe as comby)))
++ (files
++  (main.exe as comby)))
+diff --git a/src/main.ml b/src/main.ml
+index 5cad346..48784d1 100644
+--- a/src/main.ml
++++ b/src/main.ml
+@@ -1,4 +1,5 @@
+ open Core
++module Unix = Core_unix
+ open Command.Let_syntax
+ 
+ open Comby_kernel
+@@ -47,7 +48,7 @@ let substitute_environment_only_and_exit metasyntax_path anonymous_arguments jso
+     match metasyntax_path with
+     | None -> Matchers.Metasyntax.default_metasyntax
+     | Some metasyntax_path ->
+-      match Sys.file_exists metasyntax_path with
++      match Sys_unix.file_exists metasyntax_path with
+       | `No | `Unknown ->
+         Format.eprintf "Could not open file: %s@." metasyntax_path;
+         exit 1
+@@ -95,7 +96,7 @@ let base_command_parameters : (unit -> 'result) Command.Param.t =
+     and verbose = flag "verbose" no_arg ~doc:(Format.sprintf "Log to %s" verbose_out_file)
+     and rule = flag "rule" (optional_with_default "where true" string) ~doc:"rule Apply rules to matches."
+     and match_timeout = flag "timeout" (optional_with_default 3 int) ~doc:"seconds Set match timeout on a source. Default: 3 seconds"
+-    and target_directory = flag "directory" ~aliases:["d"] (optional_with_default (Sys.getcwd ()) string) ~doc:(Format.sprintf "path Run recursively on files in a directory relative to the root. Default is current directory: %s" @@ Sys.getcwd ())
++    and target_directory = flag "directory" ~aliases:["d"] (optional_with_default (Sys_unix.getcwd ()) string) ~doc:(Format.sprintf "path Run recursively on files in a directory relative to the root. Default is current directory: %s" @@ Sys_unix.getcwd ())
+     and directory_depth = flag "depth" (optional int) ~doc:"n Depth to recursively descend into directories"
+     and templates = flag "templates" ~aliases:["config"; "configuration"] (optional (Arg_type.comma_separated string)) ~doc:"paths CSV of directories containing templates, or TOML configuration files"
+     and file_filters = flag "extensions" ~aliases:["e"; "file-extensions"; "f"] (optional (Arg_type.comma_separated string)) ~doc:"extensions Comma-separated extensions to include, like \".go\" or \".c,.h\". It is just a file suffix, so you can use it to filter file names like \"main.go\". The extension will be used to infer a matcher, unless -custom-matcher or -matcher is specified"
+@@ -146,7 +147,7 @@ let base_command_parameters : (unit -> 'result) Command.Param.t =
+       | l ->
+         List.map l ~f:(fun pattern ->
+             if String.contains pattern '/' then
+-              match Filename.realpath pattern with
++              match Filename_unix.realpath pattern with
+               | exception Unix.Unix_error _ ->
+                 Format.eprintf
+                   "No such file or directory: %s. Comby interprets \
+@@ -203,7 +204,7 @@ let base_command_parameters : (unit -> 'result) Command.Param.t =
+     let omega = omega || omega_env in
+     let fast_offset_conversion_env = Option.is_some @@ Sys.getenv "FAST_OFFSET_CONVERSION_COMBY" in
+     let fast_offset_conversion = fast_offset_conversion_env || fast_offset_conversion in
+-    let arch = Unix.Utsname.machine (Core.Unix.uname ()) in
++    let arch = Unix.Utsname.machine (Unix.uname ()) in
+     let compute_mode = match sequential, parany, arch with
+       | true, _, _ -> `Sequential
+       | _, true, _
+@@ -301,7 +302,7 @@ let parse_comby_dot_file () =
+ 
+ let () =
+   If_hack_parallel.check_entry_point ();
+-  Command.run default_command ~version:"1.7.1" ~extend:(fun _ ->
+-      match Sys.file_exists ".comby" with
++  Command_unix.run default_command ~version:"1.7.1" ~extend:(fun _ ->
++      match Sys_unix.file_exists ".comby" with
+       | `Yes -> parse_comby_dot_file ()
+       | _ -> [])
+diff --git a/test/alpha/dune b/test/alpha/dune
+index d7e5532..020677c 100644
+--- a/test/alpha/dune
++++ b/test/alpha/dune
+@@ -1,17 +1,14 @@
+ (library
+  (name alpha_test_integration)
+  (package comby)
+- (modules
+-  test_special_matcher_cases
+-  test_substring_disabled)
++ (modules test_special_matcher_cases test_substring_disabled)
+  (inline_tests)
+- (preprocess (pps ppx_expect ppx_sexp_message ppx_deriving_yojson))
+- (libraries
+-  comby
+-  cohttp-lwt-unix
+-  core
+-  camlzip))
++ (preprocess
++  (pps ppx_expect ppx_sexp_message ppx_deriving_yojson))
++ (libraries comby cohttp-lwt-unix core camlzip))
+ 
+ (alias
+-(name runtest)
+-(deps (source_tree example) (source_tree example/src/.ignore-me)))
++ (name runtest)
++ (deps
++  (source_tree example)
++  (source_tree example/src/.ignore-me)))
+diff --git a/test/common/dune b/test/common/dune
+index aa83b0c..3793242 100644
+--- a/test/common/dune
++++ b/test/common/dune
+@@ -34,16 +34,14 @@
+   test_regex_holes
+   test_template_constraints
+   test_custom_metasyntax
+-  test_rewrite_attributes
+-  )
++  test_rewrite_attributes)
+  (inline_tests)
+- (preprocess (pps ppx_expect ppx_sexp_message ppx_deriving_yojson))
+- (libraries
+-  comby
+-  cohttp-lwt-unix
+-  core
+-  camlzip))
++ (preprocess
++  (pps ppx_expect ppx_sexp_message ppx_deriving_yojson))
++ (libraries comby cohttp-lwt-unix core camlzip))
+ 
+ (alias
+-(name runtest)
+-(deps (source_tree example) (source_tree example/src/.ignore-me)))
++ (name runtest)
++ (deps
++  (source_tree example)
++  (source_tree example/src/.ignore-me)))
+diff --git a/test/common/test_cli.ml b/test/common/test_cli.ml
+index 3606367..d5d0c0b 100644
+--- a/test/common/test_cli.ml
++++ b/test/common/test_cli.ml
+@@ -1,7 +1,10 @@
+ open Core
+ open Camlzip
+ 
++module Filename = Filename_unix
++module Sys = Sys_unix
+ module Time = Core_kernel.Time_ns.Span
++module Unix = Core_unix
+ 
+ let binary_path = "../../../../comby"
+ 
+diff --git a/test/common/test_cli_helper.ml b/test/common/test_cli_helper.ml
+index 5791ee6..18372ae 100644
+--- a/test/common/test_cli_helper.ml
++++ b/test/common/test_cli_helper.ml
+@@ -1,6 +1,7 @@
+ open Core
+ 
+ module Time = Core_kernel.Time_ns.Span
++module Unix = Core_unix
+ 
+ let binary_path = "../../../../comby"
+ 
+diff --git a/test/omega/dune b/test/omega/dune
+index 3b31a7e..bf68dcb 100644
+--- a/test/omega/dune
++++ b/test/omega/dune
+@@ -2,20 +2,19 @@
+  (name omega_test_integration)
+  (package comby)
+  (modules
+-;
+-; TODO
+-;
++  ;
++  ; TODO
++  ;
+   test_optional_holes
+   test_special_matcher_cases
+   test_substring_disabled)
+  (inline_tests)
+- (preprocess (pps ppx_expect ppx_sexp_message ppx_deriving_yojson))
+- (libraries
+-  comby
+-  cohttp-lwt-unix
+-  core
+-  camlzip))
++ (preprocess
++  (pps ppx_expect ppx_sexp_message ppx_deriving_yojson))
++ (libraries comby cohttp-lwt-unix core camlzip))
+ 
+ (alias
+-(name runtest)
+-(deps (source_tree example) (source_tree example/src/.ignore-me)))
++ (name runtest)
++ (deps
++  (source_tree example)
++  (source_tree example/src/.ignore-me)))
diff --git a/pkgs/development/tools/comby/default.nix b/pkgs/development/tools/comby/default.nix
index cd3251841ad..34eb2696040 100644
--- a/pkgs/development/tools/comby/default.nix
+++ b/pkgs/development/tools/comby/default.nix
@@ -26,6 +26,8 @@ let
         sha256 = "0k60hj8wcrvrk0isr210vnalylkd63ria1kgz5n49inl7w1hfwpv";
       };
 
+      patches = [ ./comby.patch ];
+
       nativeBuildInputs = [
         ocamlPackages.ppx_deriving
         ocamlPackages.ppx_deriving_yojson
@@ -35,6 +37,7 @@ let
 
       buildInputs = [
         ocamlPackages.core
+        ocamlPackages.core_kernel
         ocamlPackages.ocaml_pcre
         ocamlPackages.mparser
         ocamlPackages.mparser-pcre
diff --git a/pkgs/development/tools/dprint/default.nix b/pkgs/development/tools/dprint/default.nix
index ae84a786de3..63a6a6a39f3 100644
--- a/pkgs/development/tools/dprint/default.nix
+++ b/pkgs/development/tools/dprint/default.nix
@@ -2,14 +2,14 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "dprint";
-  version = "0.29.1";
+  version = "0.30.3";
 
   src = fetchCrate {
     inherit pname version;
-    sha256 = "sha256-uLNZUIp8+fKr6l+vi8rqjXn9PrwAmpYnYuwtYjl2y+o=";
+    sha256 = "sha256-/lptdZEcnbBQL9hYj0xyI95fMT22tGy8zeQz+8VwMog=";
   };
 
-  cargoSha256 = "sha256-bmbrnzUZfHvO5waMixZoD0DmWxVGtUXhIwZLLlHqPhs=";
+  cargoSha256 = "sha256-BJGOaZgY03CYC8fa0wnlDmc9SO72lrLmdafovFD3BBI=";
 
   buildInputs = lib.optionals stdenv.isDarwin [ Security ];
 
diff --git a/pkgs/development/tools/rust/rustup/default.nix b/pkgs/development/tools/rust/rustup/default.nix
index 0a591cc8141..65bad79aa8c 100644
--- a/pkgs/development/tools/rust/rustup/default.nix
+++ b/pkgs/development/tools/rust/rustup/default.nix
@@ -61,7 +61,7 @@ rustPlatform.buildRustPackage rec {
     mv rustup-init rustup
     binlinks=(
       cargo rustc rustdoc rust-gdb rust-lldb rls rustfmt cargo-fmt
-      cargo-clippy clippy-driver cargo-miri
+      cargo-clippy clippy-driver cargo-miri rust-gdbgui
     )
     for link in ''${binlinks[@]}; do
       ln -s rustup $link
diff --git a/pkgs/development/tools/sshs/default.nix b/pkgs/development/tools/sshs/default.nix
new file mode 100644
index 00000000000..76cd63876ad
--- /dev/null
+++ b/pkgs/development/tools/sshs/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nix-update-script
+}:
+
+buildGoModule rec {
+  pname = "sshs";
+  version = "3.2.0";
+
+  src = fetchFromGitHub {
+    owner = "quantumsheep";
+    repo = pname;
+    rev = version;
+    sha256 = "D9doNVb2sTnzM8tF8cSJbIoaIYjGurkUHEyhcE3OqQg=";
+  };
+
+  vendorSha256 = "QWFz85bOrTnPGum5atccB5hKeATlZvDAt32by+DO/Fo=";
+
+  ldflags = [ "-s" "-w" "-X github.com/quantumsheep/sshs/cmd.Version=${version}" ];
+
+  passthru.updateScript = nix-update-script {
+    attrPath = pname;
+  };
+
+  meta = with lib; {
+    description = "Terminal user interface for SSH";
+    homepage = "https://github.com/quantumsheep/sshs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ihatethefrench ];
+  };
+}
diff --git a/pkgs/servers/endlessh-go/default.nix b/pkgs/servers/endlessh-go/default.nix
index a1eb7b970ea..320d5c4137c 100644
--- a/pkgs/servers/endlessh-go/default.nix
+++ b/pkgs/servers/endlessh-go/default.nix
@@ -5,22 +5,25 @@
 
 buildGoModule rec {
   pname = "endlessh-go";
-  version = "20220308.1";
+  version = "20220710";
 
   src = fetchFromGitHub {
     owner = "shizunge";
     repo = "endlessh-go";
     rev = version;
-    hash = "sha256-U+h/WmTVwwUIBEOiNa/EKS6HvkeoGNmP3NpeP1fcqYw=";
+    sha256 = "sha256-T8DLzHfITMLeHJtKuK4AjEzGGCIDJUPlqF2Lj56xPxY=";
   };
 
-  vendorSha256 = "sha256-5a/V2OQGVRIJVl/YG+lvtbLeHCy/1eiZu69zKIFqRKM=";
+  vendorSha256 = "sha256-hMCjYAqsI6h9B8iGVYQcNbKU5icalOHavvPKwOmvf/w=";
 
   proxyVendor = true;
 
+  ldflags = [ "-s" "-w" ];
+
   meta = with lib; {
     description = "An implementation of endlessh exporting Prometheus metrics";
     homepage = "https://github.com/shizunge/endlessh-go";
+    changelog = "https://github.com/shizunge/endlessh-go/releases/tag/${version}";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ azahi ];
   };
diff --git a/pkgs/servers/monitoring/prometheus/domain-exporter.nix b/pkgs/servers/monitoring/prometheus/domain-exporter.nix
index 78c35d8cf16..fc455b92ae8 100644
--- a/pkgs/servers/monitoring/prometheus/domain-exporter.nix
+++ b/pkgs/servers/monitoring/prometheus/domain-exporter.nix
@@ -1,17 +1,25 @@
-{ lib, buildGoModule, fetchFromGitHub, nixosTests }:
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, nixosTests }:
 
 buildGoModule rec {
   pname = "domain-exporter";
-  version = "1.11.0";
+  version = "1.17.1";
 
   src = fetchFromGitHub {
     owner = "caarlos0";
     repo = "domain_exporter";
     rev = "v${version}";
-    sha256 = "018y0xwdn2f2shhwaa0hqm4y8xsbqwif0733qb0377wpjbj4v137";
+    hash = "sha256-18r+jUdVcv7hA9KdWkgvu2tNUIGf9f1uj2cwwMDnAs8=";
   };
 
-  vendorSha256 = "0s1hs8byba9y57abg386n09wfg1wcqpzs164ap0km8ap2i96bdlb";
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/caarlos0/domain_exporter/commit/32815b0956056c5c14313d0b860d1e9db754e545.patch";
+      hash = "sha256-iEYnJ4BU+MWQd0BgKmRb8RNj/lH2V/Z9uwFS2muR4Go=";
+      name = "sg_domains.patch";
+    })
+  ];
+
+  vendorSha256 = "sha256-LHs2DSLNe+E3NUXZS7TV5M53ueUbCjjNM87UPRTaCpo=";
 
   doCheck = false; # needs internet connection
 
@@ -21,6 +29,6 @@ buildGoModule rec {
     homepage = "https://github.com/caarlos0/domain_exporter";
     description = "Exports the expiration time of your domains as prometheus metrics";
     license = licenses.mit;
-    maintainers = with maintainers; [ mmilata prusnak ];
+    maintainers = with maintainers; [ mmilata prusnak peterhoeg ];
   };
 }
diff --git a/pkgs/servers/sql/postgresql/ext/age.nix b/pkgs/servers/sql/postgresql/ext/age.nix
index 781a1c86be2..e1725f1da84 100644
--- a/pkgs/servers/sql/postgresql/ext/age.nix
+++ b/pkgs/servers/sql/postgresql/ext/age.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "age";
-  version = "0.6.0";
+  version = "1.0.0-rc1";
 
   src = fetchFromGitHub {
     owner = "apache";
-    repo = "incubator-age";
+    repo = "age";
     rev = "v${version}";
-    sha256 = "1cl6p9qz2yhgm603ljlyjdn0msk3hzga1frjqsmqmpp3nw4dbkka";
+    sha256 = "sha256-b5cBpS5xWaohRZf5H0DwzNq0BodqWDjkAP44osPVYps=";
   };
 
   buildInputs = [ postgresql ];
@@ -54,10 +54,11 @@ stdenv.mkDerivation rec {
   };
 
   meta = with lib; {
-    broken = true;
+    # Only supports PostgreSQL 11 https://github.com/apache/age/issues/225
+    broken = versions.major postgresql.version != "11";
     description = "A graph database extension for PostgreSQL";
     homepage = "https://age.apache.org/";
-    changelog = "https://github.com/apache/incubator-age/releases/tag/v${version}";
+    changelog = "https://github.com/apache/age/raw/v${version}/RELEASE";
     maintainers = with maintainers; [ ];
     platforms = postgresql.meta.platforms;
     license = licenses.asl20;
diff --git a/pkgs/servers/sql/postgresql/ext/pg_cron.nix b/pkgs/servers/sql/postgresql/ext/pg_cron.nix
index 73d90ccdecb..e437de887c7 100644
--- a/pkgs/servers/sql/postgresql/ext/pg_cron.nix
+++ b/pkgs/servers/sql/postgresql/ext/pg_cron.nix
@@ -2,7 +2,7 @@
 
 stdenv.mkDerivation rec {
   pname = "pg_cron";
-  version = "1.4.1";
+  version = "1.4.2";
 
   buildInputs = [ postgresql ];
 
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     owner  = "citusdata";
     repo   = pname;
     rev    = "v${version}";
-    sha256 = "1fknr7z1m24dpp4hm5s6y5phdns7yvvj88cl481wjhw8bigz6kns";
+    sha256 = "sha256-P0Fd10Q1p+KrExb35G6otHpc6pD61WnMll45H2jkevM=";
   };
 
   installPhase = ''
diff --git a/pkgs/tools/admin/gtk-vnc/default.nix b/pkgs/tools/admin/gtk-vnc/default.nix
index 060c95a8f76..f4c4b0facde 100644
--- a/pkgs/tools/admin/gtk-vnc/default.nix
+++ b/pkgs/tools/admin/gtk-vnc/default.nix
@@ -23,13 +23,13 @@
 
 stdenv.mkDerivation rec {
   pname = "gtk-vnc";
-  version = "1.3.0";
+  version = "1.3.1";
 
   outputs = [ "out" "bin" "man" "dev" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "X6qlgjuMvowLC6HkVsTnDEsa5mhcn+gaQoLZjPAKIR0=";
+    sha256 = "USdjrE4FWdAVi2aCyl3Ro71jPwgvXkNJ1xWOa1+A8c4=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/tools/misc/dua/default.nix b/pkgs/tools/misc/dua/default.nix
index 526eb705e4c..33504df8d4f 100644
--- a/pkgs/tools/misc/dua/default.nix
+++ b/pkgs/tools/misc/dua/default.nix
@@ -2,7 +2,7 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "dua";
-  version = "2.17.7";
+  version = "2.17.8";
 
   buildInputs = lib.optionals stdenv.isDarwin [ libiconv Foundation ];
 
@@ -10,7 +10,7 @@ rustPlatform.buildRustPackage rec {
     owner = "Byron";
     repo = "dua-cli";
     rev = "v${version}";
-    sha256 = "sha256-FiTjN4coOJZ3Uu9LfaJxcpvVKS+5MVYWQPmwllBh1Jg=";
+    sha256 = "sha256-zlXv5RY/JRDS2vzC/LhSumZX+OOeaFoOmLq5TaulGDY=";
     # Remove unicode file names which leads to different checksums on HFS+
     # vs. other filesystems because of unicode normalisation.
     postFetch = ''
@@ -18,7 +18,7 @@ rustPlatform.buildRustPackage rec {
     '';
   };
 
-  cargoSha256 = "sha256-xCHbS+D7ss85hklv9xftJTsctvQlAjkKtuJbTt5R8nM=";
+  cargoSha256 = "sha256-PSAhRUODedmJg67K00W0RQ5LycMme2bidL4L8gd6qkw=";
 
   doCheck = false;
 
diff --git a/pkgs/tools/misc/flitter/default.nix b/pkgs/tools/misc/flitter/default.nix
index 49903559c13..a46b3b72abe 100644
--- a/pkgs/tools/misc/flitter/default.nix
+++ b/pkgs/tools/misc/flitter/default.nix
@@ -20,11 +20,17 @@ ocamlPackages.buildDunePackage rec {
     sha256 = "1k3m7bjq5yrrq7vhnbdykni65dsqhq6knnv9wvwq3svb3n07z4w3";
   };
 
+  # compatibility with core >= 0.15
+  patches = [ ./flitter.patch ];
+
   # https://github.com/alexozer/flitter/issues/28
   postPatch = ''
-    for f in src/colors.ml src/duration.ml src/event_loop.ml src/splits.ml; do
+    for f in src/*.ml; do
       substituteInPlace "$f" \
-        --replace 'Unix.gettimeofday' 'Caml_unix.gettimeofday'
+        --replace 'Unix.gettimeofday' 'Caml_unix.gettimeofday' \
+        --replace 'Core_kernel' 'Core' \
+        --replace 'sexp_option' 'option[@sexp.option]' \
+        --replace 'sexp_list' 'list[@sexp.list]'
     done
   '';
 
@@ -33,7 +39,7 @@ ocamlPackages.buildDunePackage rec {
   ];
 
   buildInputs = with ocamlPackages; [
-    core
+    core_unix
     lwt_ppx
     sexp_pretty
     color
diff --git a/pkgs/tools/misc/flitter/flitter.patch b/pkgs/tools/misc/flitter/flitter.patch
new file mode 100644
index 00000000000..f59b8a22eb6
--- /dev/null
+++ b/pkgs/tools/misc/flitter/flitter.patch
@@ -0,0 +1,13 @@
+diff --git a/src/dune b/src/dune
+index a50b09a..54cc770 100644
+--- a/src/dune
++++ b/src/dune
+@@ -1,7 +1,7 @@
+ (library
+   (name flitter)
+   (wrapped false)
+-  (libraries core lwt.unix notty notty.unix re color sexp_pretty)
++  (libraries core core_kernel.caml_unix lwt.unix notty notty.unix re color sexp_pretty)
+   (preprocess (pps lwt_ppx ppx_sexp_conv))
+   )
+ 
diff --git a/pkgs/tools/misc/page/default.nix b/pkgs/tools/misc/page/default.nix
index 818642af975..7d574586a8a 100644
--- a/pkgs/tools/misc/page/default.nix
+++ b/pkgs/tools/misc/page/default.nix
@@ -2,13 +2,13 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "page";
-  version = "3.1.0";
+  version = "3.1.2";
 
   src = fetchFromGitHub {
     owner = "I60R";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-3XRtTiIqUI2j9kmsg0yeuipgHEzdJRG2abO3Ll7ukmA=";
+    sha256 = "sha256-e6GkvIojMfsIm4UxRyEvvNkZPGSmUnf9K/0ZISy8kj4=";
   };
 
   nativeBuildInputs = [ installShellFiles ];
@@ -19,7 +19,7 @@ rustPlatform.buildRustPackage rec {
     installShellCompletion --zsh $completions_dir/_page
   '';
 
-  cargoSha256 = "sha256-4Z58OkCvlGXmuTeVl0me3a/YImcKwggF9tXfenQnjtA=";
+  cargoSha256 = "sha256-qyaHW4mbJXZ/iGQlIzmTo2dgPLC9JlPKBee+uAuW5PQ=";
 
   meta = with lib; {
     description = "Use neovim as pager";
diff --git a/pkgs/tools/misc/patdiff/default.nix b/pkgs/tools/misc/patdiff/default.nix
index dcd06ce1d2b..2e84d0015d3 100644
--- a/pkgs/tools/misc/patdiff/default.nix
+++ b/pkgs/tools/misc/patdiff/default.nix
@@ -4,8 +4,8 @@ with ocamlPackages;
 
 janePackage {
   pname = "patdiff";
-  hash = "1yslj6xxyv8rx8y5s1civ1zq8y6vvxmkszdds958zdm1p1ign54r";
-  buildInputs = [ core patience_diff ocaml_pcre ];
+  hash = "0623a7n5r659rkxbp96g361mvxkcgc6x9lcbkm3glnppplk5kxr9";
+  propagatedBuildInputs = [ core_unix patience_diff ocaml_pcre ];
   meta = {
     description = "File Diff using the Patience Diff algorithm";
   };
diff --git a/pkgs/tools/typesetting/satysfi/default.nix b/pkgs/tools/typesetting/satysfi/default.nix
index 89d2724eaad..d270c46d1ae 100644
--- a/pkgs/tools/typesetting/satysfi/default.nix
+++ b/pkgs/tools/typesetting/satysfi/default.nix
@@ -50,6 +50,8 @@ in
       $out/share/satysfi
     '';
 
+    DUNE_PROFILE = "release";
+
     nativeBuildInputs = [ ruby dune_2 ];
 
     buildInputs = [ camlpdf otfm yojson-with-position ] ++ (with ocamlPackages; [
diff --git a/pkgs/tools/virtualization/linode-cli/default.nix b/pkgs/tools/virtualization/linode-cli/default.nix
index 743764196c5..d7a58779399 100644
--- a/pkgs/tools/virtualization/linode-cli/default.nix
+++ b/pkgs/tools/virtualization/linode-cli/default.nix
@@ -13,8 +13,8 @@
 let
   sha256 = "1yglnmwspdncqmy5x0zc0g43bfm4597zfmwfvs7qkalv1pprf0s3";
   # specVersion taken from: https://www.linode.com/docs/api/openapi.yaml at `info.version`.
-  specVersion = "4.129.0";
-  specSha256 = "02bf1jcqn7sp6qmkd56jgmgpfg3agbw47cd38zha6fksm2knmd32";
+  specVersion = "4.130.0";
+  specSha256 = "0qwydx6bsbi37135zmwm8vx1yzwa5gyi8bz1zsvkd64wjv79yra1";
   spec = fetchurl {
     url = "https://raw.githubusercontent.com/linode/linode-api-docs/v${specVersion}/openapi.yaml";
     sha256 = specSha256;
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index 7c70c043d58..c8f4cdde0da 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -865,6 +865,7 @@ mapAliases ({
   mercurial_4 = throw "mercurial_4 has been removed as it's unmaintained"; # Added 2021-10-18
   mesos = throw "mesos has been removed from nixpkgs, as it's unmaintained"; # Added 2020-08-15
   mess = mame; # Added 2019-10-30
+  metal = throw "metal has been removed due to lack of maintainers";
   mididings = throw "mididings has been removed from nixpkgs as it doesn't support recent python3 versions and its upstream stopped maintaining it"; # Added 2022-01-12
   midoriWrapper = throw "'midoriWrapper' has been renamed to/replaced by 'midori'"; # Converted to throw 2022-02-22
   mime-types = mailcap; # Added 2022-01-21
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index e66b718e696..18c82f113e6 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -2652,6 +2652,8 @@ with pkgs;
 
   sshchecker = callPackage ../tools/security/sshchecker { };
 
+  sshs = callPackage ../development/tools/sshs { };
+
   titaniumenv = callPackage ../development/mobile/titaniumenv { };
 
   abootimg = callPackage ../development/mobile/abootimg {};
@@ -4246,6 +4248,7 @@ with pkgs;
 
   noti = callPackage ../tools/misc/noti {
     inherit (darwin.apple_sdk.frameworks) Cocoa;
+    buildGoPackage = buildGo117Package;
   };
 
   notify = callPackage ../tools/misc/notify { };
@@ -14249,7 +14252,6 @@ with pkgs;
     coursier = coursier.override { jre = jdk8; };
   };
 
-  metal = callPackage ../development/libraries/metal { };
   metals = callPackage ../development/tools/metals { };
   scalafix = callPackage ../development/tools/scalafix {
     jre = jre8; # TODO: remove override https://github.com/NixOS/nixpkgs/pull/89731
@@ -19670,6 +19672,10 @@ with pkgs;
 
   libuinputplus = callPackage ../development/libraries/libuinputplus { };
 
+  libuiohook = callPackage ../development/libraries/libuiohook {
+    inherit (darwin.apple_sdk.frameworks) AppKit ApplicationServices Carbon;
+  };
+
   libunistring = callPackage ../development/libraries/libunistring { };
 
   libupnp = callPackage ../development/libraries/pupnp { };
@@ -20525,6 +20531,8 @@ with pkgs;
 
   protobuf = protobuf3_19;
 
+  protobuf3_21 = callPackage ../development/libraries/protobuf/3.21.nix { };
+  protobuf3_20 = callPackage ../development/libraries/protobuf/3.20.nix { };
   protobuf3_19 = callPackage ../development/libraries/protobuf/3.19.nix { };
   protobuf3_17 = callPackage ../development/libraries/protobuf/3.17.nix { };
   protobuf3_11 = callPackage ../development/libraries/protobuf/3.11.nix { };
@@ -27684,6 +27692,8 @@ with pkgs;
 
   srain = callPackage ../applications/networking/irc/srain { };
 
+  streamdeck-ui = libsForQt5.callPackage ../applications/misc/streamdeck-ui { };
+
   super-productivity = callPackage ../applications/office/super-productivity {
     electron = electron_17;
   };
@@ -27838,66 +27848,64 @@ with pkgs;
   fiji = callPackage ../applications/graphics/fiji { };
 
   imagemagick6_light = imagemagick6.override {
-    bzip2 = null;
-    zlib = null;
-    libX11 = null;
-    libXext = null;
-    libXt = null;
-    fontconfig = null;
-    freetype = null;
-    ghostscript = null;
-    libjpeg = null;
-    djvulibre = null;
-    lcms2 = null;
-    openexr = null;
-    libpng = null;
-    liblqr1 = null;
-    librsvg = null;
-    libtiff = null;
-    libxml2 = null;
-    openjpeg = null;
-    libwebp = null;
-    libheif = null;
-    libde265 = null;
+    bzip2Support = false;
+    zlibSupport = false;
+    libX11Support = false;
+    libXtSupport = false;
+    fontconfigSupport = false;
+    freetypeSupport = false;
+    ghostscriptSupport = false;
+    libjpegSupport = false;
+    djvulibreSupport = false;
+    lcms2Support = false;
+    openexrSupport = false;
+    libpngSupport = false;
+    liblqr1Support = false;
+    librsvgSupport = false;
+    libtiffSupport = false;
+    libxml2Support = false;
+    openjpegSupport = false;
+    libwebpSupport = false;
+    libheifSupport = false;
+    libde265Support = false;
   };
 
   imagemagick6 = callPackage ../applications/graphics/ImageMagick/6.x.nix {
     inherit (darwin.apple_sdk.frameworks) ApplicationServices Foundation;
-    ghostscript = null;
   };
 
-  imagemagick6Big = imagemagick6.override { inherit ghostscript; };
+  imagemagick6Big = imagemagick6.override {
+    ghostscriptSupport = true;
+  };
 
   imagemagick_light = lowPrio (imagemagick.override {
-    bzip2 = null;
-    zlib = null;
-    libX11 = null;
-    libXext = null;
-    libXt = null;
-    fontconfig = null;
-    freetype = null;
-    ghostscript = null;
-    libjpeg = null;
-    djvulibre = null;
-    lcms2 = null;
-    openexr = null;
-    libjxl = null;
-    libpng = null;
-    liblqr1 = null;
-    librsvg = null;
-    libtiff = null;
-    libxml2 = null;
-    openjpeg = null;
-    libwebp = null;
-    libheif = null;
+    bzip2Support = false;
+    zlibSupport = false;
+    libX11Support = false;
+    libXtSupport = false;
+    fontconfigSupport = false;
+    freetypeSupport = false;
+    libjpegSupport = false;
+    djvulibreSupport = false;
+    lcms2Support = false;
+    openexrSupport = false;
+    libjxlSupport = false;
+    libpngSupport = false;
+    liblqr1Support = false;
+    librsvgSupport = false;
+    libtiffSupport = false;
+    libxml2Support = false;
+    openjpegSupport = false;
+    libwebpSupport = false;
+    libheifSupport = false;
   });
 
-  imagemagick = lowPrio (imagemagickBig.override {
-    ghostscript = null;
+  imagemagick = lowPrio (callPackage ../applications/graphics/ImageMagick {
+    inherit (darwin.apple_sdk.frameworks) ApplicationServices Foundation;
   });
 
-  imagemagickBig = lowPrio (callPackage ../applications/graphics/ImageMagick {
-    inherit (darwin.apple_sdk.frameworks) ApplicationServices Foundation;
+  imagemagickBig = lowPrio (imagemagick.override {
+    ghostscriptSupport = true;
   });
 
   imagination = callPackage ../applications/video/imagination { };
@@ -31113,6 +31121,8 @@ with pkgs;
 
   webcamoid = libsForQt5.callPackage ../applications/video/webcamoid { };
 
+  webex = callPackage ../applications/networking/instant-messengers/webex {};
+
   webmacs = libsForQt5.callPackage ../applications/networking/browsers/webmacs {};
 
   webssh = with python3Packages; toPythonApplication webssh;
@@ -34079,6 +34089,8 @@ with pkgs;
 
   jflap = callPackage ../applications/science/engineering/jflap { };
 
+  strictdoc = python3.pkgs.callPackage ../applications/science/engineering/strictdoc { };
+
   ### SCIENCE / ELECTRONICS
 
   adms = callPackage ../applications/science/electronics/adms { };
diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix
index 55817beb5c8..d794592461f 100644
--- a/pkgs/top-level/ocaml-packages.nix
+++ b/pkgs/top-level/ocaml-packages.nix
@@ -1533,14 +1533,21 @@ let
     # Jane Street
 
     janePackage =
-      if lib.versionOlder "4.08" ocaml.version
+      if lib.versionOlder "4.10.2" ocaml.version
+      then callPackage ../development/ocaml-modules/janestreet/janePackage_0_15.nix {}
+      else if lib.versionOlder "4.08" ocaml.version
       then callPackage ../development/ocaml-modules/janestreet/janePackage_0_14.nix {}
       else if lib.versionOlder "4.07" ocaml.version
       then callPackage ../development/ocaml-modules/janestreet/janePackage_0_12.nix {}
       else callPackage ../development/ocaml-modules/janestreet/janePackage.nix {};
 
     janeStreet =
-    if lib.versionOlder "4.08" ocaml.version
+    if lib.versionOlder "4.10.2" ocaml.version
+    then import ../development/ocaml-modules/janestreet/0.15.nix {
+      inherit self;
+      inherit (pkgs) fetchpatch lib openssl patdiff zstd;
+    }
+    else if lib.versionOlder "4.08" ocaml.version
     then import ../development/ocaml-modules/janestreet/0.14.nix {
       inherit self;
       inherit (pkgs) fetchpatch lib openssl zstd;
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index ff5c109d671..223b190b43e 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2156,6 +2156,8 @@ in {
 
   datatable = callPackage ../development/python-modules/datatable { };
 
+  datauri = callPackage ../development/python-modules/datauri { };
+
   dateparser = callPackage ../development/python-modules/dateparser { };
 
   dateutils = callPackage ../development/python-modules/dateutils { };
@@ -9239,6 +9241,8 @@ in {
 
   reproject = callPackage ../development/python-modules/reproject { };
 
+  reqif = callPackage ../development/python-modules/reqif { };
+
   requests-aws4auth = callPackage ../development/python-modules/requests-aws4auth { };
 
   requests-cache = callPackage ../development/python-modules/requests-cache { };
@@ -10248,6 +10252,8 @@ in {
 
   stravalib = callPackage ../development/python-modules/stravalib { };
 
+  streamdeck = callPackage ../development/python-modules/streamdeck { };
+
   streaming-form-data = callPackage ../development/python-modules/streaming-form-data { };
 
   streamlabswater = callPackage ../development/python-modules/streamlabswater { };
@@ -10504,6 +10510,8 @@ in {
 
   tesserocr = callPackage ../development/python-modules/tesserocr { };
 
+  testcontainers = callPackage ../development/python-modules/testcontainers { };
+
   testfixtures = callPackage ../development/python-modules/testfixtures { };
 
   textfsm = callPackage ../development/python-modules/textfsm { };
@@ -10538,6 +10546,8 @@ in {
 
   textwrap3 = callPackage ../development/python-modules/textwrap3 { };
 
+  textx = callPackage ../development/python-modules/textx { };
+
   tflearn = callPackage ../development/python-modules/tflearn { };
 
   tgcrypto = callPackage ../development/python-modules/tgcrypto { };