about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nixos/modules/security/acme.nix38
-rw-r--r--nixos/modules/services/desktops/pipewire/README.md6
-rw-r--r--nixos/modules/services/desktops/pipewire/client-rt.conf.json31
-rw-r--r--nixos/modules/services/desktops/pipewire/client.conf.json28
-rw-r--r--nixos/modules/services/desktops/pipewire/jack.conf.json19
-rw-r--r--nixos/modules/services/desktops/pipewire/media-session.conf.json31
-rw-r--r--nixos/modules/services/desktops/pipewire/pipewire-media-session.nix11
-rw-r--r--nixos/modules/services/desktops/pipewire/pipewire-pulse.conf.json26
-rw-r--r--nixos/modules/services/desktops/pipewire/pipewire.conf.json62
-rw-r--r--nixos/modules/services/desktops/pipewire/pipewire.nix40
-rw-r--r--nixos/modules/virtualisation/containers.nix3
-rw-r--r--nixos/tests/podman.nix9
-rw-r--r--pkgs/applications/virtualization/catatonit/default.nix39
-rw-r--r--pkgs/development/interpreters/perl/default.nix8
-rw-r--r--pkgs/development/interpreters/rakudo/zef.nix4
-rw-r--r--pkgs/development/libraries/audio/rtmidi/default.nix8
-rw-r--r--pkgs/development/libraries/pipewire/0055-pipewire-media-session-path.patch10
-rw-r--r--pkgs/development/libraries/pipewire/0070-installed-tests-path.patch24
-rw-r--r--pkgs/development/libraries/pipewire/default.nix29
-rw-r--r--pkgs/development/ocaml-modules/faraday/async.nix14
-rw-r--r--pkgs/development/ocaml-modules/faraday/lwt-unix.nix12
-rw-r--r--pkgs/development/ocaml-modules/faraday/lwt.nix12
-rw-r--r--pkgs/development/python-modules/tatsu/default.nix23
-rw-r--r--pkgs/development/tools/analysis/flow/default.nix5
-rw-r--r--pkgs/development/tools/continuous-integration/gitlab-runner/default.nix8
-rw-r--r--pkgs/development/tools/coursier/default.nix4
-rw-r--r--pkgs/misc/scimark/default.nix35
-rw-r--r--pkgs/tools/misc/disfetch/default.nix4
-rw-r--r--pkgs/top-level/all-packages.nix4
-rw-r--r--pkgs/top-level/ocaml-packages.nix6
30 files changed, 381 insertions, 172 deletions
diff --git a/nixos/modules/security/acme.nix b/nixos/modules/security/acme.nix
index c33a92580d4cd..6ea0cfe615b10 100644
--- a/nixos/modules/security/acme.nix
+++ b/nixos/modules/security/acme.nix
@@ -235,7 +235,7 @@ let
       # https://github.com/NixOS/nixpkgs/pull/81371#issuecomment-605526099
       wantedBy = optionals (!config.boot.isContainer) [ "multi-user.target" ];
 
-      path = with pkgs; [ lego coreutils diffutils ];
+      path = with pkgs; [ lego coreutils diffutils openssl ];
 
       serviceConfig = commonServiceConfig // {
         Group = data.group;
@@ -274,6 +274,34 @@ let
       script = ''
         set -euxo pipefail
 
+        # This reimplements the expiration date check, but without querying
+        # the acme server first. By doing this offline, we avoid errors
+        # when the network or DNS are unavailable, which can happen during
+        # nixos-rebuild switch.
+        is_expiration_skippable() {
+          pem=$1
+
+          # This function relies on set -e to exit early if any of the
+          # conditions or programs fail.
+
+          [[ -e $pem ]]
+
+          expiration_line="$(
+            set -euxo pipefail
+            openssl x509 -noout -enddate <$pem \
+                  | grep notAfter \
+                  | sed -e 's/^notAfter=//'
+          )"
+          [[ -n "$expiration_line" ]]
+
+          expiration_date="$(date -d "$expiration_line" +%s)"
+          now="$(date +%s)"
+          expiration_s=$[expiration_date - now]
+          expiration_days=$[expiration_s / (3600 * 24)]   # rounds down
+
+          [[ $expiration_days -gt ${toString cfg.validMinDays} ]]
+        }
+
         ${optionalString (data.webroot != null) ''
           # Ensure the webroot exists
           mkdir -p '${data.webroot}/.well-known/acme-challenge'
@@ -288,8 +316,14 @@ let
           # When domains are updated, there's no need to do a full
           # Lego run, but it's likely renew won't work if days is too low.
           if [ -e certificates/domainhash.txt ] && cmp -s domainhash.txt certificates/domainhash.txt; then
-            lego ${renewOpts} --days ${toString cfg.validMinDays}
+            if is_expiration_skippable out/full.pem; then
+              echo 1>&2 "nixos-acme: skipping renewal because expiration isn't within the coming ${toString cfg.validMinDays} days"
+            else
+              echo 1>&2 "nixos-acme: renewing now, because certificate expires within the configured ${toString cfg.validMinDays} days"
+              lego ${renewOpts} --days ${toString cfg.validMinDays}
+            fi
           else
+            echo 1>&2 "certificate domain(s) have changed; will renew now"
             # Any number > 90 works, but this one is over 9000 ;-)
             lego ${renewOpts} --days 9001
           fi
diff --git a/nixos/modules/services/desktops/pipewire/README.md b/nixos/modules/services/desktops/pipewire/README.md
new file mode 100644
index 0000000000000..87288a81cfe1a
--- /dev/null
+++ b/nixos/modules/services/desktops/pipewire/README.md
@@ -0,0 +1,6 @@
+# Updating
+
+1. Update the version & hash in pkgs/development/libraries/pipewire/default.nix
+2. run `nix build -f /path/to/nixpkgs/checkout pipewire pipewire.mediaSession`
+3. copy all JSON files from result/etc/pipewire and result-mediaSession/etc/pipewire/media-session.d to this directory
+4. add new files to the module config and passthru tests
diff --git a/nixos/modules/services/desktops/pipewire/client-rt.conf.json b/nixos/modules/services/desktops/pipewire/client-rt.conf.json
index d294927b4f642..284d8c394a611 100644
--- a/nixos/modules/services/desktops/pipewire/client-rt.conf.json
+++ b/nixos/modules/services/desktops/pipewire/client-rt.conf.json
@@ -6,21 +6,34 @@
     "audio.convert.*": "audioconvert/libspa-audioconvert",
     "support.*": "support/libspa-support"
   },
-  "context.modules": {
-    "libpipewire-module-rtkit": {
+  "context.modules": [
+    {
+      "name": "libpipewire-module-rtkit",
       "args": {},
       "flags": [
         "ifexists",
         "nofail"
       ]
     },
-    "libpipewire-module-protocol-native": null,
-    "libpipewire-module-client-node": null,
-    "libpipewire-module-client-device": null,
-    "libpipewire-module-adapter": null,
-    "libpipewire-module-metadata": null,
-    "libpipewire-module-session-manager": null
-  },
+    {
+      "name": "libpipewire-module-protocol-native"
+    },
+    {
+      "name": "libpipewire-module-client-node"
+    },
+    {
+      "name": "libpipewire-module-client-device"
+    },
+    {
+      "name": "libpipewire-module-adapter"
+    },
+    {
+      "name": "libpipewire-module-metadata"
+    },
+    {
+      "name": "libpipewire-module-session-manager"
+    }
+  ],
   "filter.properties": {},
   "stream.properties": {}
 }
diff --git a/nixos/modules/services/desktops/pipewire/client.conf.json b/nixos/modules/services/desktops/pipewire/client.conf.json
index 224938abbbcf7..71294a0e78a2d 100644
--- a/nixos/modules/services/desktops/pipewire/client.conf.json
+++ b/nixos/modules/services/desktops/pipewire/client.conf.json
@@ -6,14 +6,26 @@
     "audio.convert.*": "audioconvert/libspa-audioconvert",
     "support.*": "support/libspa-support"
   },
-  "context.modules": {
-    "libpipewire-module-protocol-native": null,
-    "libpipewire-module-client-node": null,
-    "libpipewire-module-client-device": null,
-    "libpipewire-module-adapter": null,
-    "libpipewire-module-metadata": null,
-    "libpipewire-module-session-manager": null
-  },
+  "context.modules": [
+    {
+      "name": "libpipewire-module-protocol-native"
+    },
+    {
+      "name": "libpipewire-module-client-node"
+    },
+    {
+      "name": "libpipewire-module-client-device"
+    },
+    {
+      "name": "libpipewire-module-adapter"
+    },
+    {
+      "name": "libpipewire-module-metadata"
+    },
+    {
+      "name": "libpipewire-module-session-manager"
+    }
+  ],
   "filter.properties": {},
   "stream.properties": {}
 }
diff --git a/nixos/modules/services/desktops/pipewire/jack.conf.json b/nixos/modules/services/desktops/pipewire/jack.conf.json
index 2de04036b312d..a6bd34917851b 100644
--- a/nixos/modules/services/desktops/pipewire/jack.conf.json
+++ b/nixos/modules/services/desktops/pipewire/jack.conf.json
@@ -5,17 +5,24 @@
   "context.spa-libs": {
     "support.*": "support/libspa-support"
   },
-  "context.modules": {
-    "libpipewire-module-rtkit": {
+  "context.modules": [
+    {
+      "name": "libpipewire-module-rtkit",
       "args": {},
       "flags": [
         "ifexists",
         "nofail"
       ]
     },
-    "libpipewire-module-protocol-native": null,
-    "libpipewire-module-client-node": null,
-    "libpipewire-module-metadata": null
-  },
+    {
+      "name": "libpipewire-module-protocol-native"
+    },
+    {
+      "name": "libpipewire-module-client-node"
+    },
+    {
+      "name": "libpipewire-module-metadata"
+    }
+  ],
   "jack.properties": {}
 }
diff --git a/nixos/modules/services/desktops/pipewire/media-session.conf.json b/nixos/modules/services/desktops/pipewire/media-session.conf.json
index 4b2505ff8164c..62e59935dbe5e 100644
--- a/nixos/modules/services/desktops/pipewire/media-session.conf.json
+++ b/nixos/modules/services/desktops/pipewire/media-session.conf.json
@@ -6,21 +6,34 @@
     "api.v4l2.*": "v4l2/libspa-v4l2",
     "api.libcamera.*": "libcamera/libspa-libcamera"
   },
-  "context.modules": {
-    "libpipewire-module-rtkit": {
+  "context.modules": [
+    {
+      "name": "libpipewire-module-rtkit",
       "args": {},
       "flags": [
         "ifexists",
         "nofail"
       ]
     },
-    "libpipewire-module-protocol-native": null,
-    "libpipewire-module-client-node": null,
-    "libpipewire-module-client-device": null,
-    "libpipewire-module-adapter": null,
-    "libpipewire-module-metadata": null,
-    "libpipewire-module-session-manager": null
-  },
+    {
+      "name": "libpipewire-module-protocol-native"
+    },
+    {
+      "name": "libpipewire-module-client-node"
+    },
+    {
+      "name": "libpipewire-module-client-device"
+    },
+    {
+      "name": "libpipewire-module-adapter"
+    },
+    {
+      "name": "libpipewire-module-metadata"
+    },
+    {
+      "name": "libpipewire-module-session-manager"
+    }
+  ],
   "session.modules": {
     "default": [
       "flatpak",
diff --git a/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix b/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix
index b41ea349fb8db..539a4cf446940 100644
--- a/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix
+++ b/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix
@@ -9,21 +9,12 @@ let
                            && pkgs.stdenv.isx86_64
                            && pkgs.pkgsi686Linux.pipewire != null;
 
-  prioritizeNativeProtocol = {
-    "context.modules" = {
-      "libpipewire-module-protocol-native" = {
-        _priority = -100;
-        _content = null;
-      };
-    };
-  };
-
   # Use upstream config files passed through spa-json-dump as the base
   # Patched here as necessary for them to work with this module
   defaults = {
     alsa-monitor = (builtins.fromJSON (builtins.readFile ./alsa-monitor.conf.json));
     bluez-monitor = (builtins.fromJSON (builtins.readFile ./bluez-monitor.conf.json));
-    media-session = recursiveUpdate (builtins.fromJSON (builtins.readFile ./media-session.conf.json)) prioritizeNativeProtocol;
+    media-session = (builtins.fromJSON (builtins.readFile ./media-session.conf.json));
     v4l2-monitor = (builtins.fromJSON (builtins.readFile ./v4l2-monitor.conf.json));
   };
   # Helpers for generating the pipewire JSON config file
diff --git a/nixos/modules/services/desktops/pipewire/pipewire-pulse.conf.json b/nixos/modules/services/desktops/pipewire/pipewire-pulse.conf.json
index da08bcea2c90b..3e776fe75a2cd 100644
--- a/nixos/modules/services/desktops/pipewire/pipewire-pulse.conf.json
+++ b/nixos/modules/services/desktops/pipewire/pipewire-pulse.conf.json
@@ -4,25 +4,35 @@
     "audio.convert.*": "audioconvert/libspa-audioconvert",
     "support.*": "support/libspa-support"
   },
-  "context.modules": {
-    "libpipewire-module-rtkit": {
+  "context.modules": [
+    {
+      "name": "libpipewire-module-rtkit",
       "args": {},
       "flags": [
         "ifexists",
         "nofail"
       ]
     },
-    "libpipewire-module-protocol-native": null,
-    "libpipewire-module-client-node": null,
-    "libpipewire-module-adapter": null,
-    "libpipewire-module-metadata": null,
-    "libpipewire-module-protocol-pulse": {
+    {
+      "name": "libpipewire-module-protocol-native"
+    },
+    {
+      "name": "libpipewire-module-client-node"
+    },
+    {
+      "name": "libpipewire-module-adapter"
+    },
+    {
+      "name": "libpipewire-module-metadata"
+    },
+    {
+      "name": "libpipewire-module-protocol-pulse",
       "args": {
         "server.address": [
           "unix:native"
         ]
       }
     }
-  },
+  ],
   "stream.properties": {}
 }
diff --git a/nixos/modules/services/desktops/pipewire/pipewire.conf.json b/nixos/modules/services/desktops/pipewire/pipewire.conf.json
index 59e2afca09396..bae87dd663773 100644
--- a/nixos/modules/services/desktops/pipewire/pipewire.conf.json
+++ b/nixos/modules/services/desktops/pipewire/pipewire.conf.json
@@ -14,42 +14,66 @@
     "api.jack.*": "jack/libspa-jack",
     "support.*": "support/libspa-support"
   },
-  "context.modules": {
-    "libpipewire-module-rtkit": {
+  "context.modules": [
+    {
+      "name": "libpipewire-module-rtkit",
       "args": {},
       "flags": [
         "ifexists",
         "nofail"
       ]
     },
-    "libpipewire-module-protocol-native": null,
-    "libpipewire-module-profiler": null,
-    "libpipewire-module-metadata": null,
-    "libpipewire-module-spa-device-factory": null,
-    "libpipewire-module-spa-node-factory": null,
-    "libpipewire-module-client-node": null,
-    "libpipewire-module-client-device": null,
-    "libpipewire-module-portal": {
+    {
+      "name": "libpipewire-module-protocol-native"
+    },
+    {
+      "name": "libpipewire-module-profiler"
+    },
+    {
+      "name": "libpipewire-module-metadata"
+    },
+    {
+      "name": "libpipewire-module-spa-device-factory"
+    },
+    {
+      "name": "libpipewire-module-spa-node-factory"
+    },
+    {
+      "name": "libpipewire-module-client-node"
+    },
+    {
+      "name": "libpipewire-module-client-device"
+    },
+    {
+      "name": "libpipewire-module-portal",
       "flags": [
         "ifexists",
         "nofail"
       ]
     },
-    "libpipewire-module-access": {
+    {
+      "name": "libpipewire-module-access",
       "args": {}
     },
-    "libpipewire-module-adapter": null,
-    "libpipewire-module-link-factory": null,
-    "libpipewire-module-session-manager": null
-  },
-  "context.objects": {
-    "spa-node-factory": {
+    {
+      "name": "libpipewire-module-adapter"
+    },
+    {
+      "name": "libpipewire-module-link-factory"
+    },
+    {
+      "name": "libpipewire-module-session-manager"
+    }
+  ],
+  "context.objects": [
+    {
+      "factory": "spa-node-factory",
       "args": {
         "factory.name": "support.node.driver",
         "node.name": "Dummy-Driver",
         "priority.driver": 8000
       }
     }
-  },
-  "context.exec": {}
+  ],
+  "context.exec": []
 }
diff --git a/nixos/modules/services/desktops/pipewire/pipewire.nix b/nixos/modules/services/desktops/pipewire/pipewire.nix
index 2577e77c4a1ff..7cf19706a6333 100644
--- a/nixos/modules/services/desktops/pipewire/pipewire.nix
+++ b/nixos/modules/services/desktops/pipewire/pipewire.nix
@@ -18,45 +18,15 @@ let
     ln -s "${cfg.package.jack}/lib" "$out/lib/pipewire"
   '';
 
-  prioritizeNativeProtocol = {
-    "context.modules" = {
-      # Most other modules depend on this, so put it first
-      "libpipewire-module-protocol-native" = {
-        _priority = -100;
-        _content = null;
-      };
-    };
-  };
-
-  fixDaemonModulePriorities = {
-    "context.modules" = {
-      # Most other modules depend on thism so put it first
-      "libpipewire-module-protocol-native" = {
-        _priority = -100;
-        _content = null;
-      };
-      # Needs to be before libpipewire-module-access
-      "libpipewire-module-portal" = {
-        _priority = -50;
-        _content = {
-          flags = [
-            "ifexists"
-            "nofail"
-          ];
-        };
-      };
-    };
-  };
-
   # Use upstream config files passed through spa-json-dump as the base
   # Patched here as necessary for them to work with this module
   defaults = {
-    client = recursiveUpdate (builtins.fromJSON (builtins.readFile ./client.conf.json)) prioritizeNativeProtocol;
-    client-rt = recursiveUpdate (builtins.fromJSON (builtins.readFile ./client-rt.conf.json)) prioritizeNativeProtocol;
-    jack = recursiveUpdate (builtins.fromJSON (builtins.readFile ./jack.conf.json)) prioritizeNativeProtocol;
+    client = builtins.fromJSON (builtins.readFile ./client.conf.json);
+    client-rt = builtins.fromJSON (builtins.readFile ./client-rt.conf.json);
+    jack = builtins.fromJSON (builtins.readFile ./jack.conf.json);
     # Remove session manager invocation from the upstream generated file, it points to the wrong path
-    pipewire = recursiveUpdate (builtins.fromJSON (builtins.readFile ./pipewire.conf.json)) fixDaemonModulePriorities;
-    pipewire-pulse = recursiveUpdate (builtins.fromJSON (builtins.readFile ./pipewire-pulse.conf.json)) prioritizeNativeProtocol;
+    pipewire = builtins.fromJSON (builtins.readFile ./pipewire.conf.json);
+    pipewire-pulse = builtins.fromJSON (builtins.readFile ./pipewire-pulse.conf.json);
   };
 
   # Helpers for generating the pipewire JSON config file
diff --git a/nixos/modules/virtualisation/containers.nix b/nixos/modules/virtualisation/containers.nix
index 997edf77ba99f..148d0221998fb 100644
--- a/nixos/modules/virtualisation/containers.nix
+++ b/nixos/modules/virtualisation/containers.nix
@@ -118,8 +118,9 @@ in
       [network]
       cni_plugin_dirs = ["${pkgs.cni-plugins}/bin/"]
 
-      ${lib.optionalString (cfg.ociSeccompBpfHook.enable == true) ''
       [engine]
+      init_path = "${pkgs.catatonit}/bin/catatonit"
+      ${lib.optionalString (cfg.ociSeccompBpfHook.enable) ''
       hooks_dir = [
         "${config.boot.kernelPackages.oci-seccomp-bpf-hook}",
       ]
diff --git a/nixos/tests/podman.nix b/nixos/tests/podman.nix
index 4985ff60365c9..6078a936edeab 100644
--- a/nixos/tests/podman.nix
+++ b/nixos/tests/podman.nix
@@ -96,6 +96,15 @@ import ./make-test-python.nix (
           podman.succeed(su_cmd("podman ps | grep sleeping"))
           podman.succeed(su_cmd("podman stop sleeping"))
           podman.succeed(su_cmd("podman rm sleeping"))
+
+      with subtest("Run container with init"):
+          podman.succeed(
+              "tar cv -C ${pkgs.pkgsStatic.busybox} . | podman import - busybox"
+          )
+          pid = podman.succeed("podman run --rm busybox readlink /proc/self").strip()
+          assert pid == "1"
+          pid = podman.succeed("podman run --rm --init busybox readlink /proc/self").strip()
+          assert pid == "2"
     '';
   }
 )
diff --git a/pkgs/applications/virtualization/catatonit/default.nix b/pkgs/applications/virtualization/catatonit/default.nix
new file mode 100644
index 0000000000000..c44db31f50cbb
--- /dev/null
+++ b/pkgs/applications/virtualization/catatonit/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, glibc, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "catatonit";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "openSUSE";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "ciJ1MI7jr5P2PgxIykQ+BiwNUO8lQHGt0+U8CNbc5bI=";
+  };
+
+  patches = [
+    # Fix compilation with musl
+    (fetchpatch {
+      url = "https://github.com/openSUSE/catatonit/commit/75014b1c3099245b7d0f44f24d7f6dc4888a45fd.patch";
+      sha256 = "sha256-9VMNUT1U90ocjvE7EXYfLxuodDwTXXHYg89qqa5Jq0g=";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = lib.optionals (!stdenv.hostPlatform.isMusl) [ glibc glibc.static ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    readelf -d $out/bin/catatonit | grep 'There is no dynamic section in this file.'
+  '';
+
+  passthru.tests = { inherit (nixosTests) podman; };
+
+  meta = with lib; {
+    description = "A container init that is so simple it's effectively brain-dead";
+    homepage = "https://github.com/openSUSE/catatonit";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ erosennin ] ++ teams.podman.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/development/interpreters/perl/default.nix b/pkgs/development/interpreters/perl/default.nix
index e0c72d628a300..01b3e995f5e4b 100644
--- a/pkgs/development/interpreters/perl/default.nix
+++ b/pkgs/development/interpreters/perl/default.nix
@@ -171,11 +171,11 @@ let
       priority = 6; # in `buildEnv' (including the one inside `perl.withPackages') the library files will have priority over files in `perl`
     };
   } // optionalAttrs (stdenv.buildPlatform != stdenv.hostPlatform) rec {
-    crossVersion = "1.3.5"; # Jan 24, 2021
+    crossVersion = "e53999d0c340769792ba18d749751b0df3d1d177"; # Mar 21, 2021
 
     perl-cross-src = fetchurl {
       url = "https://github.com/arsv/perl-cross/archive/${crossVersion}.tar.gz";
-      sha256 = "1sa2f8s1hc604g5y98w6m6y5q43s9jiyrpnp4b34zkfx1qs3w6l4";
+      sha256 = "14vcpwjhq667yh0cs7ism70df8l7068vn4a0ww59hdjyj7yc84i6";
     };
 
     depsBuildBuild = [ buildPackages.stdenv.cc makeWrapper ];
@@ -211,7 +211,7 @@ in {
   perldevel = common {
     perl = pkgs.perldevel;
     buildPerl = buildPackages.perldevel;
-    version = "5.33.6";
-    sha256 = "1fx6b2q7wzd0xwy7qkmkvd5bdm09d3zfnynrb6afl9ghd8ww56fv";
+    version = "5.33.8";
+    sha256 = "1zr6sdsfcmk86n3f8j65x07xkv29v0pi8bwc986ahmjx7x92xzgl";
   };
 }
diff --git a/pkgs/development/interpreters/rakudo/zef.nix b/pkgs/development/interpreters/rakudo/zef.nix
index 42e82cd3a51be..61008f242b912 100644
--- a/pkgs/development/interpreters/rakudo/zef.nix
+++ b/pkgs/development/interpreters/rakudo/zef.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "zef";
-  version = "0.11.4";
+  version = "0.11.5";
 
   src = fetchFromGitHub {
     owner = "ugexe";
     repo = "zef";
     rev = "v${version}";
-    sha256 = "sha256-wccVMEUAfTWs/8hnrT7nrxfYPHyNl+lXt+KUDkyplto=";
+    sha256 = "sha256-LLUAwqky/q9KvFltrcff5U2BSLvOk/BbDSj07QlePSg=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/development/libraries/audio/rtmidi/default.nix b/pkgs/development/libraries/audio/rtmidi/default.nix
index 540e152655f63..ccfafd36a8a33 100644
--- a/pkgs/development/libraries/audio/rtmidi/default.nix
+++ b/pkgs/development/libraries/audio/rtmidi/default.nix
@@ -37,14 +37,16 @@ stdenv.mkDerivation rec {
       url = "https://github.com/thestk/rtmidi/pull/230/commits/7a32e23e3f6cb43c0d2d58443ce205d438e76f44.patch";
       sha256 = "06im8mb05wah6bnkadw2gpkhmilxb8p84pxqr50b205cchpq304w";
     })
+    (fetchpatch {
+      name = "RtMidi-Adjust-public-header-installs-to-match-autotools.patch";
+      url = "https://github.com/thestk/rtmidi/pull/230/commits/892fe5492f0e787484fa4a37027b08c265ce001f.patch";
+      sha256 = "0ca9m42xa3gmycimzvzvl67wa266xq9pfp1b4v555rh2fp52kbcj";
+    })
   ];
 
   postPatch = ''
     substituteInPlace rtmidi.pc.in \
       --replace 'Requires:' 'Requires.private:'
-    substituteInPlace CMakeLists.txt \
-      --replace 'PUBLIC_HEADER RtMidi.h' 'PUBLIC_HEADER "RtMidi.h;rtmidi_c.h"' \
-      --replace 'PUBLIC_HEADER DESTINATION $''\{CMAKE_INSTALL_INCLUDEDIR}' 'PUBLIC_HEADER DESTINATION $''\{CMAKE_INSTALL_INCLUDEDIR}/rtmidi'
   '';
 
   nativeBuildInputs = [ cmake pkg-config ];
diff --git a/pkgs/development/libraries/pipewire/0055-pipewire-media-session-path.patch b/pkgs/development/libraries/pipewire/0055-pipewire-media-session-path.patch
index ce1085f37f7f7..a4fb8b41e7a17 100644
--- a/pkgs/development/libraries/pipewire/0055-pipewire-media-session-path.patch
+++ b/pkgs/development/libraries/pipewire/0055-pipewire-media-session-path.patch
@@ -1,19 +1,19 @@
 diff --git a/meson_options.txt b/meson_options.txt
-index a6c8af72..8e5c3d73 100644
+index e2a1e028..310029f2 100644
 --- a/meson_options.txt
 +++ b/meson_options.txt
 @@ -10,6 +10,9 @@ option('media-session',
         description: 'Build and install pipewire-media-session',
-        type: 'boolean',
-        value: true)
+        type: 'feature',
+        value: 'auto')
 +option('media-session-prefix',
 +       description: 'Install directory for pipewire-media-session and its support files',
 +       type: 'string')
  option('man',
         description: 'Build manpages',
-        type: 'boolean',
+        type: 'feature',
 diff --git a/src/daemon/systemd/user/meson.build b/src/daemon/systemd/user/meson.build
-index 4a70b0b0..84c9a19e 100644
+index 5c4d1af0..7296220f 100644
 --- a/src/daemon/systemd/user/meson.build
 +++ b/src/daemon/systemd/user/meson.build
 @@ -10,7 +10,7 @@ install_data(
diff --git a/pkgs/development/libraries/pipewire/0070-installed-tests-path.patch b/pkgs/development/libraries/pipewire/0070-installed-tests-path.patch
index 2a92711626bf4..cb695fa398ca3 100644
--- a/pkgs/development/libraries/pipewire/0070-installed-tests-path.patch
+++ b/pkgs/development/libraries/pipewire/0070-installed-tests-path.patch
@@ -1,29 +1,29 @@
 diff --git a/meson.build b/meson.build
-index ffee41b4..bab6f019 100644
+index 97d4d939..b17358e5 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -318,8 +318,8 @@ alsa_dep = (get_option('pipewire-alsa')
-     ? dependency('alsa', version : '>=1.1.7')
-     : dependency('', required: false))
- 
+@@ -353,8 +353,8 @@ libinotify_dep = (build_machine.system() == 'freebsd'
+
+ alsa_dep = dependency('alsa', version : '>=1.1.7', required: get_option('pipewire-alsa'))
+
 -installed_tests_metadir = join_paths(pipewire_datadir, 'installed-tests', pipewire_name)
 -installed_tests_execdir = join_paths(pipewire_libexecdir, 'installed-tests', pipewire_name)
 +installed_tests_metadir = join_paths(get_option('installed_test_prefix'), 'share', 'installed-tests', pipewire_name)
 +installed_tests_execdir = join_paths(get_option('installed_test_prefix'), 'libexec', 'installed-tests', pipewire_name)
- installed_tests_enabled = get_option('installed_tests')
+ installed_tests_enabled = not get_option('installed_tests').disabled()
  installed_tests_template = files('template.test.in')
- 
+
 diff --git a/meson_options.txt b/meson_options.txt
-index f03033c3..32df6c53 100644
+index fba0d647..8c6106cd 100644
 --- a/meson_options.txt
 +++ b/meson_options.txt
-@@ -18,6 +18,9 @@ option('installed_tests',
+@@ -26,6 +26,9 @@ option('installed_tests',
         description: 'Install manual and automated test executables',
-        type: 'boolean',
-        value: false)
+        type: 'feature',
+        value: 'disabled')
 +option('installed_test_prefix',
 +       description: 'Prefix for installed tests',
 +       type: 'string')
  option('gstreamer',
         description: 'Build GStreamer plugins',
-        type: 'boolean',
+        type: 'feature',
diff --git a/pkgs/development/libraries/pipewire/default.nix b/pkgs/development/libraries/pipewire/default.nix
index 5c5578abc8df6..955a4d9da6e3f 100644
--- a/pkgs/development/libraries/pipewire/default.nix
+++ b/pkgs/development/libraries/pipewire/default.nix
@@ -39,11 +39,11 @@ let
     fontDirectories = [];
   };
 
-  mesonBool = b: if b then "true" else "false";
+  mesonEnable = b: if b then "enabled" else "disabled";
 
   self = stdenv.mkDerivation rec {
     pname = "pipewire";
-    version = "0.3.23";
+    version = "0.3.24";
 
     outputs = [
       "out"
@@ -61,7 +61,7 @@ let
       owner = "pipewire";
       repo = "pipewire";
       rev = version;
-      hash = "sha256:1HMUrE1NBmrdBRMKX3LRlXaCEH3wqP2jGtW8Rp9oyQA=";
+      hash = "sha256:PcY20FTtUtJYAwCscEs+HfkdwDksYPFZIVTVORP1ooI=";
     };
 
     patches = [
@@ -103,22 +103,23 @@ let
     ++ lib.optionals bluezSupport [ bluez libopenaptx ldacbt sbc fdk_aac ];
 
     mesonFlags = [
-      "-Ddocs=true"
-      "-Dman=false" # we don't have xmltoman
-      "-Dexamples=${mesonBool withMediaSession}" # only needed for `pipewire-media-session`
+      "-Ddocs=enabled"
+      "-Dman=disabled" # we don't have xmltoman
+      "-Dexamples=${mesonEnable withMediaSession}" # only needed for `pipewire-media-session`
       "-Dudevrulesdir=lib/udev/rules.d"
-      "-Dinstalled_tests=true"
+      "-Dinstalled_tests=enabled"
       "-Dinstalled_test_prefix=${placeholder "installedTests"}"
       "-Dpipewire_pulse_prefix=${placeholder "pulse"}"
       "-Dmedia-session-prefix=${placeholder "mediaSession"}"
       "-Dlibjack-path=${placeholder "jack"}/lib"
-      "-Dgstreamer=${mesonBool gstreamerSupport}"
-      "-Dffmpeg=${mesonBool ffmpegSupport}"
-      "-Dbluez5=${mesonBool bluezSupport}"
-      "-Dbluez5-backend-hsp-native=${mesonBool nativeHspSupport}"
-      "-Dbluez5-backend-hfp-native=${mesonBool nativeHfpSupport}"
-      "-Dbluez5-backend-ofono=${mesonBool ofonoSupport}"
-      "-Dbluez5-backend-hsphfpd=${mesonBool hsphfpdSupport}"
+      "-Dlibcamera=disabled"
+      "-Dgstreamer=${mesonEnable gstreamerSupport}"
+      "-Dffmpeg=${mesonEnable ffmpegSupport}"
+      "-Dbluez5=${mesonEnable bluezSupport}"
+      "-Dbluez5-backend-hsp-native=${mesonEnable nativeHspSupport}"
+      "-Dbluez5-backend-hfp-native=${mesonEnable nativeHfpSupport}"
+      "-Dbluez5-backend-ofono=${mesonEnable ofonoSupport}"
+      "-Dbluez5-backend-hsphfpd=${mesonEnable hsphfpdSupport}"
       "-Dpipewire_config_dir=/etc/pipewire"
     ];
 
diff --git a/pkgs/development/ocaml-modules/faraday/async.nix b/pkgs/development/ocaml-modules/faraday/async.nix
new file mode 100644
index 0000000000000..666eb684925ce
--- /dev/null
+++ b/pkgs/development/ocaml-modules/faraday/async.nix
@@ -0,0 +1,14 @@
+{ buildDunePackage, faraday, core, async }:
+
+buildDunePackage rec {
+  pname = "faraday-async";
+  inherit (faraday) version src useDune2;
+
+  minimumOCamlVersion = "4.08";
+
+  propagatedBuildInputs = [ faraday core async ];
+
+  meta = faraday.meta // {
+    description = "Async support for Faraday";
+  };
+}
diff --git a/pkgs/development/ocaml-modules/faraday/lwt-unix.nix b/pkgs/development/ocaml-modules/faraday/lwt-unix.nix
new file mode 100644
index 0000000000000..23914de265753
--- /dev/null
+++ b/pkgs/development/ocaml-modules/faraday/lwt-unix.nix
@@ -0,0 +1,12 @@
+{ buildDunePackage, faraday, faraday-lwt, lwt }:
+
+buildDunePackage rec {
+  pname = "faraday-lwt-unix";
+  inherit (faraday) version src useDune2 minimumOCamlVersion;
+
+  propagatedBuildInputs = [ lwt faraday-lwt ];
+
+  meta = faraday.meta // {
+    description = "Lwt + Unix support for Faraday";
+  };
+}
diff --git a/pkgs/development/ocaml-modules/faraday/lwt.nix b/pkgs/development/ocaml-modules/faraday/lwt.nix
new file mode 100644
index 0000000000000..7fe7319575c5c
--- /dev/null
+++ b/pkgs/development/ocaml-modules/faraday/lwt.nix
@@ -0,0 +1,12 @@
+{ buildDunePackage, faraday, lwt }:
+
+buildDunePackage rec {
+  pname = "faraday-lwt";
+  inherit (faraday) version src useDune2 minimumOCamlVersion;
+
+  propagatedBuildInputs = [ faraday lwt ];
+
+  meta = faraday.meta // {
+    description = "Lwt support for Faraday";
+  };
+}
diff --git a/pkgs/development/python-modules/tatsu/default.nix b/pkgs/development/python-modules/tatsu/default.nix
index 3a72b5c31021e..a663b6e21dd48 100644
--- a/pkgs/development/python-modules/tatsu/default.nix
+++ b/pkgs/development/python-modules/tatsu/default.nix
@@ -1,31 +1,26 @@
 { lib, buildPythonPackage, fetchFromGitHub, pythonOlder
-, colorama, mypy, pyyaml, regex
-, dataclasses, typing
-, pytestrunner, pytest-mypy
+, colorama, regex
+, pytestrunner, pytestCheckHook, pytest-mypy
 }:
 
 buildPythonPackage rec {
-  pname = "TatSu";
-  version = "5.5.0";
+  pname = "tatsu";
+  version = "5.6.0";
 
   src = fetchFromGitHub {
     owner = "neogeny";
-    repo = pname;
+    repo = "TatSu";
     rev = "v${version}";
-    sha256 = "07bmdnwh99p60cgzhlb8s5vwi5v4r5zi8shymxnnarannkc66hzn";
+    sha256 = "sha256-kC2MxMebS4TQEZBgTmYRBWaWSF36rVS3bXIsQgRrF0Y=";
   };
 
   disabled = pythonOlder "3.8";
 
   nativeBuildInputs = [ pytestrunner ];
-  propagatedBuildInputs = [ colorama mypy pyyaml regex ]
-    ++ lib.optionals (pythonOlder "3.7") [ dataclasses ]
-    ++ lib.optionals (pythonOlder "3.5") [ typing ];
-  checkInputs = [ pytest-mypy ];
+  propagatedBuildInputs = [ colorama regex ];
+  checkInputs = [ pytestCheckHook pytest-mypy ];
 
-  checkPhase = ''
-    pytest test/
-  '';
+  pythonImportsCheck = [ "tatsu" ];
 
   meta = with lib; {
     description = "Generates Python parsers from grammars in a variation of EBNF";
diff --git a/pkgs/development/tools/analysis/flow/default.nix b/pkgs/development/tools/analysis/flow/default.nix
index 0c6c9dbad0859..bbee2768a54c3 100644
--- a/pkgs/development/tools/analysis/flow/default.nix
+++ b/pkgs/development/tools/analysis/flow/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "flow";
-  version = "0.146.0";
+  version = "0.147.0";
 
   src = fetchFromGitHub {
     owner  = "facebook";
     repo   = "flow";
     rev    = "refs/tags/v${version}";
-    sha256 = "0kxws51hri0b4z7k05li6vg1arcdc7i5jzfibi0iplsfyy14159q";
+    sha256 = "sha256-3U8BOYUHl1YiOnxAIV2V6Ib+LZ0DydtSfwAxN2Hj09g=";
   };
 
   installPhase = ''
@@ -25,7 +25,6 @@ stdenv.mkDerivation rec {
     changelog = "https://github.com/facebook/flow/releases/tag/v${version}";
     license = licenses.mit;
     platforms = ocamlPackages.ocaml.meta.platforms;
-    broken = stdenv.isAarch64; # https://github.com/facebook/flow/issues/7556
     maintainers = with maintainers; [ marsam puffnfresh ];
   };
 }
diff --git a/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix b/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
index ad886e0c3c6ec..eeffee057d4a5 100644
--- a/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
+++ b/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
@@ -1,16 +1,16 @@
 { lib, buildGoPackage, fetchFromGitLab, fetchurl }:
 
 let
-  version = "13.9.0";
+  version = "13.10.0";
   # Gitlab runner embeds some docker images these are prebuilt for arm and x86_64
   docker_x86_64 = fetchurl {
     url = "https://gitlab-runner-downloads.s3.amazonaws.com/v${version}/helper-images/prebuilt-x86_64.tar.xz";
-    sha256 = "0zgnp6l0p1i7x6lppd24nfb6kqa8mw7rnr2p5gmwbmjv9i9zkycs";
+    sha256 = "0lw087xcbzf4d68mq0h0s31na7lww2d9nv43icw9qx05aknlcddv";
   };
 
   docker_arm = fetchurl {
     url = "https://gitlab-runner-downloads.s3.amazonaws.com/v${version}/helper-images/prebuilt-arm.tar.xz";
-    sha256 = "06b5p9ygcnrjrisp6bcgw9s3j2zlycp8jsri259bjf7rrfbwpkma";
+    sha256 = "1mf3w85ivc8r2rmb78r4b87rrxmbb1zda9pp8n4nvd0igg23xqk8";
   };
 in
 buildGoPackage rec {
@@ -30,7 +30,7 @@ buildGoPackage rec {
     owner = "gitlab-org";
     repo = "gitlab-runner";
     rev = "v${version}";
-    sha256 = "0wzqrfjg43wnf9lr34jn3ydlxi7vsnqs55pm5igba592q8ykfbxk";
+    sha256 = "0xy5mpcpxcmwfdrspd29z8nyn1m9i4ma7d5kbihwa2yxznylydpx";
   };
 
   patches = [ ./fix-shell-path.patch ];
diff --git a/pkgs/development/tools/coursier/default.nix b/pkgs/development/tools/coursier/default.nix
index bb5f8a4c9cd68..69e55463cc679 100644
--- a/pkgs/development/tools/coursier/default.nix
+++ b/pkgs/development/tools/coursier/default.nix
@@ -2,7 +2,7 @@
 , coreutils, git, gnused, nix, nixfmt }:
 
 let
-  version = "2.0.14";
+  version = "2.0.15";
 
   zshCompletion = fetchurl {
     url =
@@ -19,7 +19,7 @@ in stdenv.mkDerivation rec {
   src = fetchurl {
     url =
       "https://github.com/coursier/coursier/releases/download/v${version}/coursier";
-    sha256 = "sha256-mGVOg+I42O3VYj7RStEOfZajS9RZo9hLWKap6UdjJCE=";
+    sha256 = "sha256-XfTW8GNoPsNXamy0K9Ai3SSzBSyS1dNNCeWsbD8xCQI=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/misc/scimark/default.nix b/pkgs/misc/scimark/default.nix
new file mode 100644
index 0000000000000..7558c676ba52c
--- /dev/null
+++ b/pkgs/misc/scimark/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchurl
+, unzip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "scimark";
+  version = "4c";
+
+  src = fetchurl {
+    url = "https://math.nist.gov/scimark2/${pname}${version}.zip";
+    hash = "sha256-kcg5vKYp0B7+bC/CmFMO/tMwxf9q6nvuFv0vRSy3MbE=";
+  };
+
+  nativeBuildInputs = [
+    unzip
+  ];
+
+  dontConfigure = true;
+
+  installPhase = ''
+    install -d $out/bin/
+    install scimark4 $out/bin/
+  '';
+
+  meta = with lib; {
+    homepage = "https://math.nist.gov/scimark2/index.html";
+    description = "Scientific and numerical computing benchmark (ANSI C version)";
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.all;
+  };
+}
+# TODO [ AndersonTorres ]: Java version
diff --git a/pkgs/tools/misc/disfetch/default.nix b/pkgs/tools/misc/disfetch/default.nix
index 80afcb5cd9f48..58f7da84fc001 100644
--- a/pkgs/tools/misc/disfetch/default.nix
+++ b/pkgs/tools/misc/disfetch/default.nix
@@ -4,13 +4,13 @@
 
 stdenv.mkDerivation rec {
   pname = "disfetch";
-  version = "1.20";
+  version = "1.21";
 
   src = fetchFromGitHub {
     owner = "llathasa-veleth";
     repo = "disfetch";
     rev = version;
-    sha256 = "sha256-P5Sq8ld6pPACHn7iOJ9Uk+zR8ZLxHVvnRyFfkfGGv6I=";
+    sha256 = "sha256-AAfpv1paEnHu1S2B8yC0hyYOj5deKTkCyLGvp6Roz64=";
   };
 
   dontBuild = true;
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 6990a193ff020..5c46cf63bfa99 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -197,6 +197,8 @@ in
     inherit (python3Packages) sphinx;
   };
 
+  catatonit = callPackage ../applications/virtualization/catatonit { };
+
   cen64 = callPackage ../misc/emulators/cen64 { };
 
   cereal = callPackage ../development/libraries/cereal { };
@@ -7919,6 +7921,8 @@ in
     pulseSupport = config.pulseaudio or false;
   };
 
+  scimark = callPackage ../misc/scimark { };
+
   screen = callPackage ../tools/misc/screen {
     inherit (darwin.apple_sdk.libs) utmp;
   };
diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix
index 6a8d29e42b2b6..9606cd4872087 100644
--- a/pkgs/top-level/ocaml-packages.nix
+++ b/pkgs/top-level/ocaml-packages.nix
@@ -345,6 +345,12 @@ let
 
     faraday = callPackage ../development/ocaml-modules/faraday { };
 
+    faraday-async = callPackage ../development/ocaml-modules/faraday/async.nix { };
+
+    faraday-lwt = callPackage ../development/ocaml-modules/faraday/lwt.nix { };
+
+    faraday-lwt-unix = callPackage ../development/ocaml-modules/faraday/lwt-unix.nix { };
+
     farfadet = callPackage ../development/ocaml-modules/farfadet { };
 
     fdkaac = callPackage ../development/ocaml-modules/fdkaac { };