about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--lib/systems/default.nix2
-rw-r--r--maintainers/maintainer-list.nix30
-rw-r--r--nixos/lib/test-driver/test_driver/machine.py2
-rw-r--r--nixos/modules/services/networking/nat.nix7
-rw-r--r--pkgs/applications/editors/vscode/extensions/default.nix16
-rw-r--r--pkgs/applications/graphics/yacreader/default.nix8
-rw-r--r--pkgs/applications/misc/electrum-grs/default.nix11
-rw-r--r--pkgs/applications/misc/passky-desktop/default.nix59
-rw-r--r--pkgs/applications/misc/phockup/default.nix35
-rw-r--r--pkgs/applications/networking/cluster/arkade/default.nix4
-rw-r--r--pkgs/applications/networking/cluster/cmctl/default.nix7
-rwxr-xr-xpkgs/applications/networking/cluster/cmctl/update.sh41
-rw-r--r--pkgs/applications/networking/mailreaders/notmuch-bower/default.nix4
-rw-r--r--pkgs/applications/office/beancount/beancount-ing-diba.nix31
-rw-r--r--pkgs/applications/science/math/polymake/default.nix4
-rw-r--r--pkgs/applications/science/math/sage/patches/sphinx-fix-matplotlib-css-perms.patch21
-rw-r--r--pkgs/applications/science/math/sage/sage-src.nix4
-rw-r--r--pkgs/applications/video/obs-studio/plugins/default.nix38
-rw-r--r--pkgs/development/node-packages/overrides.nix4
-rw-r--r--pkgs/development/python-modules/bayesian-optimization/default.nix31
-rw-r--r--pkgs/development/python-modules/bluemaestro-ble/default.nix55
-rw-r--r--pkgs/development/python-modules/ete3/default.nix37
-rw-r--r--pkgs/development/python-modules/libsixel/default.nix30
-rw-r--r--pkgs/development/python-modules/psycopg/ctypes.patch46
-rw-r--r--pkgs/development/python-modules/psycopg/default.nix7
-rw-r--r--pkgs/development/python-modules/psycopg/libpq.patch22
-rw-r--r--pkgs/development/python-modules/tcxreader/default.nix37
-rw-r--r--pkgs/development/python-modules/telegraph/default.nix52
-rw-r--r--pkgs/development/tools/build-managers/goredo/default.nix58
-rw-r--r--pkgs/development/tools/build-managers/goredo/fix-tests.diff36
-rw-r--r--pkgs/development/tools/ddosify/default.nix4
-rw-r--r--pkgs/development/tools/rust/cargo-public-api/default.nix6
-rw-r--r--pkgs/games/steam/fhsenv.nix8
-rw-r--r--pkgs/servers/monitoring/prometheus/exportarr/default.nix (renamed from pkgs/servers/monitoring/exportarr/default.nix)14
-rw-r--r--pkgs/tools/misc/esphome/default.nix4
-rw-r--r--pkgs/tools/misc/fclones/default.nix6
-rw-r--r--pkgs/tools/misc/less/default.nix4
-rw-r--r--pkgs/tools/wayland/swaycwd/default.nix6
-rw-r--r--pkgs/top-level/all-packages.nix12
-rw-r--r--pkgs/top-level/python-packages.nix13
40 files changed, 723 insertions, 93 deletions
diff --git a/lib/systems/default.nix b/lib/systems/default.nix
index eaee4ffa2874..1e65bcc26795 100644
--- a/lib/systems/default.nix
+++ b/lib/systems/default.nix
@@ -99,7 +99,7 @@ rec {
           genode = "Genode";
         }.${final.parsed.kernel.name} or null;
 
-         # uname -p
+         # uname -m
          processor = final.parsed.cpu.name;
 
          # uname -r
diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix
index e80001cd8436..08fd6cca03cd 100644
--- a/maintainers/maintainer-list.nix
+++ b/maintainers/maintainer-list.nix
@@ -490,6 +490,15 @@
     github = "akho";
     githubId = 104951;
   };
+  akkesm = {
+    name = "Alessandro Barenghi";
+    email = "alessandro.barenghi@tuta.io";
+    github = "akkesm";
+    githubId = 56970006;
+    keys = [{
+      fingerprint = "50E2 669C AB38 2F4A 5F72  1667 0D6B FC01 D45E DADD";
+    }];
+  };
   akru = {
     email = "mail@akru.me";
     github = "akru";
@@ -2628,6 +2637,12 @@
     githubId = 244239;
     name = "Mauricio Collares";
   };
+  CompEng0001 = {
+    email = "sb1501@canterbury.ac.uk";
+    github = "CompEng0001";
+    githubId = 40290417;
+    name = "Seb Blair";
+  };
   copumpkin = {
     email = "pumpkingod@gmail.com";
     github = "copumpkin";
@@ -3121,6 +3136,12 @@
     github = "delan";
     githubId = 465303;
   };
+  delehef = {
+    name = "Franklin Delehelle";
+    email = "nix@odena.eu";
+    github = "delehef";
+    githubId = 1153808;
+  };
   deliciouslytyped = {
     email = "47436522+deliciouslytyped@users.noreply.github.com";
     github = "deliciouslytyped";
@@ -4893,6 +4914,15 @@
       fingerprint = "5214 2D39 A7CE F8FA 872B  CA7F DE62 E1E2 A614 5556";
     }];
   };
+  gp2112 = {
+    email = "me@guip.dev";
+    github = "gp2112";
+    githubId = 26512375;
+    name = "Guilherme Paixão";
+    keys = [{
+      fingerprint = "4382 7E28 86E5 C34F 38D5  7753 8C81 4D62 5FBD 99D1";
+    }];
+  };
   gpanders = {
     name = "Gregory Anders";
     email = "greg@gpanders.com";
diff --git a/nixos/lib/test-driver/test_driver/machine.py b/nixos/lib/test-driver/test_driver/machine.py
index 117d9d59e025..e45c83086fb5 100644
--- a/nixos/lib/test-driver/test_driver/machine.py
+++ b/nixos/lib/test-driver/test_driver/machine.py
@@ -712,7 +712,7 @@ class Machine:
             status, _ = self.execute("nc -z localhost {}".format(port))
             return status != 0
 
-        with self.nested("waiting for TCP port {} to be closed"):
+        with self.nested("waiting for TCP port {} to be closed".format(port)):
             retry(port_is_closed)
 
     def start_job(self, jobname: str, user: Optional[str] = None) -> Tuple[int, str]:
diff --git a/nixos/modules/services/networking/nat.nix b/nixos/modules/services/networking/nat.nix
index 0eb9b158e686..0b70ae47ccf5 100644
--- a/nixos/modules/services/networking/nat.nix
+++ b/nixos/modules/services/networking/nat.nix
@@ -319,7 +319,10 @@ in
         }
       ];
 
-      environment.systemPackages = [ pkgs.iptables ];
+      # Use the same iptables package as in config.networking.firewall.
+      # When the firewall is enabled, this should be deduplicated without any
+      # error.
+      environment.systemPackages = [ config.networking.firewall.package ];
 
       boot = {
         kernelModules = [ "nf_nat_ftp" ];
@@ -347,7 +350,7 @@ in
         description = "Network Address Translation";
         wantedBy = [ "network.target" ];
         after = [ "network-pre.target" "systemd-modules-load.service" ];
-        path = [ pkgs.iptables ];
+        path = [ config.networking.firewall.package ];
         unitConfig.ConditionCapability = "CAP_NET_ADMIN";
 
         serviceConfig = {
diff --git a/pkgs/applications/editors/vscode/extensions/default.nix b/pkgs/applications/editors/vscode/extensions/default.nix
index 6ddf060d5405..5643cad16cbe 100644
--- a/pkgs/applications/editors/vscode/extensions/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/default.nix
@@ -48,6 +48,22 @@ let
         };
       };
 
+      _2gua.rainbow-brackets = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "2gua";
+          name = "rainbow-brackets";
+          version = "0.0.6";
+          sha256 = "TVBvF/5KQVvWX1uHwZDlmvwGjOO5/lXbgVzB26U8rNQ=";
+        };
+        meta = with lib; {
+          description = "A Visual Studio Code extension providing rainbow brackets";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=2gua.rainbow-brackets";
+          homepage = "https://github.com/lcultx/rainbow-brackets";
+          license = licenses.mit;
+          maintainers = with maintainers; [ CompEng0001 ];
+        };
+      };
+
       _4ops.terraform = buildVscodeMarketplaceExtension {
         mktplcRef = {
           publisher = "4ops";
diff --git a/pkgs/applications/graphics/yacreader/default.nix b/pkgs/applications/graphics/yacreader/default.nix
index 0a25889c2dcd..990e279c5901 100644
--- a/pkgs/applications/graphics/yacreader/default.nix
+++ b/pkgs/applications/graphics/yacreader/default.nix
@@ -1,22 +1,22 @@
 { mkDerivation, lib, fetchFromGitHub, qmake, poppler, pkg-config, libunarr
-, libGLU, qtdeclarative, qtgraphicaleffects, qtmultimedia, qtquickcontrols
+, libGLU, qtdeclarative, qtgraphicaleffects, qtmultimedia, qtquickcontrols2
 , qtscript
 }:
 
 mkDerivation rec {
   pname = "yacreader";
-  version = "9.8.2";
+  version = "9.9.1";
 
   src = fetchFromGitHub {
     owner = "YACReader";
     repo = pname;
     rev = version;
-    sha256 = "sha256-Xvf0xXtMs3x1fPgAvS4GJXrZgDZWhzIgrOF4yECr7/g=";
+    sha256 = "sha256-D+ZmFMg9ZixZNUAMjPHwz7gcwKjG49lm5hTEqftbIrY=";
   };
 
   nativeBuildInputs = [ qmake pkg-config ];
   buildInputs = [ poppler libunarr libGLU qtmultimedia qtscript ];
-  propagatedBuildInputs = [ qtquickcontrols qtgraphicaleffects qtdeclarative ];
+  propagatedBuildInputs = [ qtquickcontrols2 qtgraphicaleffects qtdeclarative ];
 
   meta = {
     description = "A comic reader for cross-platform reading and managing your digital comic collection";
diff --git a/pkgs/applications/misc/electrum-grs/default.nix b/pkgs/applications/misc/electrum-grs/default.nix
index d35941ccfb1b..e07e337477ae 100644
--- a/pkgs/applications/misc/electrum-grs/default.nix
+++ b/pkgs/applications/misc/electrum-grs/default.nix
@@ -9,7 +9,7 @@
 }:
 
 let
-  version = "4.2.0";
+  version = "4.3.1";
 
   libsecp256k1_name =
     if stdenv.isLinux then "libsecp256k1.so.0"
@@ -18,6 +18,7 @@ let
 
   libzbar_name =
     if stdenv.isLinux then "libzbar.so.0"
+    else if stdenv.isDarwin then "libzbar.0.dylib"
     else "libzbar${stdenv.hostPlatform.extensions.sharedLibrary}";
 
 in
@@ -30,7 +31,7 @@ python3.pkgs.buildPythonApplication {
     owner = "Groestlcoin";
     repo = "electrum-grs";
     rev = "refs/tags/v${version}";
-    sha256 = "15n6snrs1kgdqkhp4wgs0bxxdz6mzl8dvf8h7s0jzc6r4b74vv3n";
+    sha256 = "1h9r32wdn0p7br36r719x96c8gay83dijw80y2ks951mam16mkkb";
   };
 
   nativeBuildInputs = lib.optionals enableQt [ wrapQtAppsHook ];
@@ -63,7 +64,6 @@ python3.pkgs.buildPythonApplication {
   ];
 
   preBuild = ''
-    sed -i 's,usr_share = .*,usr_share = "'$out'/share",g' setup.py
     substituteInPlace ./electrum_grs/ecc_fast.py \
       --replace ${libsecp256k1_name} ${secp256k1}/lib/libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}
   '' + (if enableQt then ''
@@ -74,16 +74,11 @@ python3.pkgs.buildPythonApplication {
   '');
 
   postInstall = lib.optionalString stdenv.isLinux ''
-    # Despite setting usr_share above, these files are installed under $out/nix ...
-    mv $out/${python3.sitePackages}/nix/store/*/share $out
-    rm -rf $out/${python3.sitePackages}/nix
-
     substituteInPlace $out/share/applications/electrum-grs.desktop \
       --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum-grs %u"' \
                 "Exec=$out/bin/electrum-grs %u" \
       --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum-grs --testnet %u"' \
                 "Exec=$out/bin/electrum-grs --testnet %u"
-
   '';
 
   postFixup = lib.optionalString enableQt ''
diff --git a/pkgs/applications/misc/passky-desktop/default.nix b/pkgs/applications/misc/passky-desktop/default.nix
new file mode 100644
index 000000000000..f247329158ac
--- /dev/null
+++ b/pkgs/applications/misc/passky-desktop/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, fetchurl, appimageTools, undmg }:
+
+let
+  pname = "passky-desktop";
+  version = "5.0.0";
+
+  srcs = {
+    x86_64-linux = fetchurl {
+      url = "https://github.com/Rabbit-Company/Passky-Desktop/releases/download/v${version}/Passky-${version}.AppImage";
+      sha256 = "19sy9y2bcxrf10ifszinh4yn32q3032h3d1qxm046zffzl069807";
+    };
+    x86_64-darwin = fetchurl {
+      url = "https://github.com/Rabbit-Company/Passky-Desktop/releases/download/v${version}/Passky-${version}.dmg";
+      sha256 = "sha256-lclJOaYe+2XeKhJb2WcOAzjBMzK3YEmlS4rXuRUJYU0=";
+    };
+  };
+  src = srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  appimageContents = appimageTools.extract { inherit pname version src; };
+  meta = with lib; {
+    homepage = "https://passky.org";
+    downloadPage = "https://github.com/Rabbit-Company/Passky-Desktop/releases";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ akkesm ];
+    platforms = builtins.attrNames srcs;
+  };
+
+  linux = appimageTools.wrapType2 {
+    inherit pname version src meta;
+
+    extraInstallCommands = ''
+      mv $out/bin/${pname}-${version} $out/bin/${pname}
+
+      install -D ${appimageContents}/passky.desktop \
+        $out/share/applications/${pname}.desktop
+
+      substituteInPlace $out/share/applications/${pname}.desktop \
+        --replace 'Exec=AppRun' 'Exec=${pname}'
+
+      cp -r ${appimageContents}/usr/share/icons $out/share
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version src meta;
+
+    nativeBuildInputs = [ undmg ];
+
+    sourceRoot = ".";
+
+    installPhase = ''
+      mkdir -p $out/Applications
+      cp -r *.app $out/Applications
+    '';
+  };
+in
+if stdenv.isDarwin
+  then darwin
+  else linux
diff --git a/pkgs/applications/misc/phockup/default.nix b/pkgs/applications/misc/phockup/default.nix
new file mode 100644
index 000000000000..f93c2b78c4a1
--- /dev/null
+++ b/pkgs/applications/misc/phockup/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, python3, fetchFromGitHub, exiftool, makeWrapper }:
+let
+  pythonEnv = python3.withPackages (p: with p; [ tqdm ]);
+in
+stdenv.mkDerivation rec {
+  pname = "phockup";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "ivandokov";
+    repo = "phockup";
+    rev = version;
+    sha256 = "sha256-Ho9aZjBvSwFMur2NubhP4olPN31SNTEdQGCUV7nX0uE=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    # based roughly on https://github.com/ivandokov/phockup#linux-without-snap
+    mkdir -p $out/bin $out/opt
+    mv * $out/opt
+    makeWrapper ${pythonEnv.interpreter} $out/bin/phockup --add-flags "$out/opt/phockup.py" --suffix PATH : ${lib.makeBinPath [ exiftool ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Media sorting tool to organize photos and videos from your camera in folders by year, month and day";
+    homepage = "https://github.com/ivandokov/phockup";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aanderse ];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/arkade/default.nix b/pkgs/applications/networking/cluster/arkade/default.nix
index 4b8bbc31caf9..1c1d9b024e62 100644
--- a/pkgs/applications/networking/cluster/arkade/default.nix
+++ b/pkgs/applications/networking/cluster/arkade/default.nix
@@ -7,13 +7,13 @@
 
 buildGoModule rec {
   pname = "arkade";
-  version = "0.8.41";
+  version = "0.8.42";
 
   src = fetchFromGitHub {
     owner = "alexellis";
     repo = "arkade";
     rev = version;
-    sha256 = "sha256-PcP/D/uq+zl8Utbv7TkFGoZGpIGOddzSqaqrpSp6Rgw=";
+    sha256 = "sha256-bq4tCizdi8TPRWpNaDmD817rOpnSr9aR4tkDWn48K2w=";
   };
 
   CGO_ENABLED = 0;
diff --git a/pkgs/applications/networking/cluster/cmctl/default.nix b/pkgs/applications/networking/cluster/cmctl/default.nix
index 3cef6be03c46..4a990caf3b50 100644
--- a/pkgs/applications/networking/cluster/cmctl/default.nix
+++ b/pkgs/applications/networking/cluster/cmctl/default.nix
@@ -7,8 +7,8 @@ buildGoModule rec {
   src = fetchFromGitHub {
     owner = "cert-manager";
     repo = "cert-manager";
-    rev = "v${version}";
-    hash = "sha256-Z1aJ18X4mfJPlCPBC7QgfdX5Tk4+PK8mYoJZhGwz9ec=";
+    rev = "4486c01f726f17d2790a8a563ae6bc6e98465505";
+    sha256 = "1rzm6dn88nc2c8kayg1y9r7gkmbx42s0ph93ji7z56gqqpbqjmk7";
   };
 
   vendorSha256 = "sha256-45+tZZAEHaLdTN1NQCueJVTx5x2IanwDl+Y9MELqdBE=";
@@ -19,6 +19,8 @@ buildGoModule rec {
     "-s" "-w"
     "-X github.com/cert-manager/cert-manager/cmd/ctl/pkg/build.name=cmctl"
     "-X github.com/cert-manager/cert-manager/cmd/ctl/pkg/build/commands.registerCompletion=true"
+    "-X github.com/cert-manager/cert-manager/pkg/util.AppVersion=v${version}"
+    "-X github.com/cert-manager/cert-manager/pkg/util.AppGitCommit=${src.rev}"
   ];
 
   nativeBuildInputs = [ installShellFiles ];
@@ -49,4 +51,3 @@ buildGoModule rec {
     maintainers = with maintainers; [ joshvanl superherointj ];
   };
 }
-
diff --git a/pkgs/applications/networking/cluster/cmctl/update.sh b/pkgs/applications/networking/cluster/cmctl/update.sh
new file mode 100755
index 000000000000..70b088a6880a
--- /dev/null
+++ b/pkgs/applications/networking/cluster/cmctl/update.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnugrep gnused jq
+
+set -x -eu -o pipefail
+
+NIXPKGS_PATH="$(git rev-parse --show-toplevel)"
+CMCTL_PATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+
+OLD_VERSION="$(nix-instantiate --eval -E "with import $NIXPKGS_PATH {}; cmctl.version or (builtins.parseDrvName cmctl.name).version" | tr -d '"')"
+LATEST_TAG="$(curl -s ${GITHUB_TOKEN:+"-u \":$GITHUB_TOKEN\""} "https://api.github.com/repos/cert-manager/cert-manager/releases" | jq '.[].tag_name' --raw-output | sed '/-/d' | sort --version-sort -r | head -n 1)"
+LATEST_VERSION="${LATEST_TAG:1}"
+
+if [ ! "$OLD_VERSION" = "$LATEST_VERSION" ]; then
+    SHA256=$(nix-prefetch-url --quiet --unpack https://github.com/cert-manager/cert-manager/archive/refs/tags/${LATEST_TAG}.tar.gz)
+    TAG_SHA=$(curl -s ${GITHUB_TOKEN:+"-u \":$GITHUB_TOKEN\""}  "https://api.github.com/repos/cert-manager/cert-manager/git/ref/tags/${LATEST_TAG}" | jq -r '.object.sha')
+    TAG_COMMIT_SHA=$(curl -s ${GITHUB_TOKEN:+"-u \":$GITHUB_TOKEN\""} "https://api.github.com/repos/cert-manager/cert-manager/git/tags/${TAG_SHA}" | jq '.object.sha' --raw-output)
+
+    setKV () {
+        sed -i "s|$1 = \".*\"|$1 = \"${2:-}\"|" "${CMCTL_PATH}/default.nix"
+    }
+
+    setKV version ${LATEST_VERSION}
+    setKV sha256 "${SHA256}"
+    setKV rev ${TAG_COMMIT_SHA}
+    setKV vendorSha256 "0000000000000000000000000000000000000000000000000000" # The same as lib.fakeSha256
+
+    set +e
+    VENDOR_SHA256=$(nix-build --no-out-link -A cmctl $NIXPKGS_PATH 2>&1 >/dev/null | grep "got:" | cut -d':' -f2 | sed 's| ||g')
+    set -e
+
+    if [ -n "${VENDOR_SHA256:-}" ]; then
+        setKV vendorSha256 ${VENDOR_SHA256}
+    else
+        echo "Update failed. VENDOR_SHA256 is empty."
+        exit 1
+    fi
+
+    echo "updated cmctl to $LATEST_VERSION, please commit changes."
+else
+    echo "cmctl is already up-to-date at $OLD_VERSION"
+fi
diff --git a/pkgs/applications/networking/mailreaders/notmuch-bower/default.nix b/pkgs/applications/networking/mailreaders/notmuch-bower/default.nix
index 46115f4a56d7..235991396f57 100644
--- a/pkgs/applications/networking/mailreaders/notmuch-bower/default.nix
+++ b/pkgs/applications/networking/mailreaders/notmuch-bower/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "notmuch-bower";
-  version = "0.13";
+  version = "1.0";
 
   src = fetchFromGitHub {
     owner = "wangp";
     repo = "bower";
     rev = version;
-    sha256 = "0r5s16pc3ym5nd33lv9ljv1p1gpb7yysrdni4g7w7yvjrnwk35l6";
+    sha256 = "sha256-BNuJEVuzreI2AK/fqVMRHq8ZhPQjO33Y2FzkrWlfmm0=";
   };
 
   nativeBuildInputs = [ mercury pandoc ];
diff --git a/pkgs/applications/office/beancount/beancount-ing-diba.nix b/pkgs/applications/office/beancount/beancount-ing-diba.nix
new file mode 100644
index 000000000000..67c76f738119
--- /dev/null
+++ b/pkgs/applications/office/beancount/beancount-ing-diba.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, buildPythonApplication
+, poetry
+}:
+
+buildPythonApplication rec {
+  pname = "beancount-ing-diba";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "siddhantgoel";
+    repo = "beancount-ing-diba";
+    rev = "v${version}";
+    sha256 = "sha256-1cdXqdeTz38n0g13EXJ1/IF/gJJCe1uL/Z5NJz4DL+E=";
+  };
+
+  format = "pyproject";
+
+  nativeBuildInputs = [
+    poetry
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/siddhantgoel/beancount-ing-diba";
+    description = "Beancount Importers for ING-DiBa (Germany) CSV Exports";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer ];
+  };
+}
diff --git a/pkgs/applications/science/math/polymake/default.nix b/pkgs/applications/science/math/polymake/default.nix
index d132a98dcb9a..073275e410b7 100644
--- a/pkgs/applications/science/math/polymake/default.nix
+++ b/pkgs/applications/science/math/polymake/default.nix
@@ -12,13 +12,13 @@
 
 stdenv.mkDerivation rec {
   pname = "polymake";
-  version = "4.6";
+  version = "4.7";
 
   src = fetchurl {
     # "The minimal version is a packager friendly version which omits
     # the bundled sources of cdd, lrs, libnormaliz, nauty and jReality."
     url = "https://polymake.org/lib/exe/fetch.php/download/polymake-${version}-minimal.tar.bz2";
-    sha256 = "sha256-QjpE3e8R6uqEV6sV3V2G3beovMbJuxF3b54pWNfc+dA=";
+    sha256 = "sha256-1qv+3gIsbM1xHh02S3ybkcvVkKS3OZDNNWfJt2nybmE=";
   };
 
   buildInputs = [
diff --git a/pkgs/applications/science/math/sage/patches/sphinx-fix-matplotlib-css-perms.patch b/pkgs/applications/science/math/sage/patches/sphinx-fix-matplotlib-css-perms.patch
new file mode 100644
index 000000000000..764ecffa2377
--- /dev/null
+++ b/pkgs/applications/science/math/sage/patches/sphinx-fix-matplotlib-css-perms.patch
@@ -0,0 +1,21 @@
+diff --git a/src/sage_docbuild/ext/multidocs.py b/src/sage_docbuild/ext/multidocs.py
+index f91c7753ca..edeb81ff2e 100644
+--- a/src/sage_docbuild/ext/multidocs.py
++++ b/src/sage_docbuild/ext/multidocs.py
+@@ -284,6 +284,16 @@ def init_subdoc(app):
+         if not app.config.multidoc_first_pass:
+             app.connect('env-updated', fetch_citation)
+ 
++            def fix_matplotlib_css_permissions(app: Sphinx, env):
++                css_file = os.path.join(app.builder.outdir, '_static', 'plot_directive.css')
++                try:
++                    os.chmod(css_file, 0o644)
++                except:
++                    pass
++
++            # executed after matplotlib's _copy_css_file
++            app.connect('build-finished', fix_matplotlib_css_permissions, priority=600)
++
+         # Monkey patch copy_static_files to make a symlink to "../"
+         def link_static_files():
+             """
diff --git a/pkgs/applications/science/math/sage/sage-src.nix b/pkgs/applications/science/math/sage/sage-src.nix
index 514cbb66ea7d..8da3c0358f45 100644
--- a/pkgs/applications/science/math/sage/sage-src.nix
+++ b/pkgs/applications/science/math/sage/sage-src.nix
@@ -81,6 +81,10 @@ stdenv.mkDerivation rec {
     # Parallelize docubuild using subprocesses, fixing an isolation issue. See
     # https://groups.google.com/forum/#!topic/sage-packaging/YGOm8tkADrE
     ./patches/sphinx-docbuild-subprocesses.patch
+
+    # Docbuilding copies files from the Nix store and expects them to be writable.
+    # Remove when https://github.com/matplotlib/matplotlib/pull/23805 lands.
+    ./patches/sphinx-fix-matplotlib-css-perms.patch
   ];
 
   # Since sage unfortunately does not release bugfix releases, packagers must
diff --git a/pkgs/applications/video/obs-studio/plugins/default.nix b/pkgs/applications/video/obs-studio/plugins/default.nix
index 34246f13b0c5..b9be0a2b6eb1 100644
--- a/pkgs/applications/video/obs-studio/plugins/default.nix
+++ b/pkgs/applications/video/obs-studio/plugins/default.nix
@@ -1,18 +1,34 @@
 { callPackage, libsForQt5, pkgsi686Linux }:
 
+# When adding new plugins:
+# - Respect alphabetical order. On diversion, file a PR.
+# - Plugin name should reflect upstream's name. Including or excluding "obs" prefix/suffix.
+# - Add plugin to it's own directory (because of future patches).
+
 {
-  obs-gstreamer = callPackage ./obs-gstreamer.nix {};
-  obs-move-transition = callPackage ./obs-move-transition.nix {};
-  obs-multi-rtmp = libsForQt5.callPackage ./obs-multi-rtmp.nix {};
-  obs-ndi = libsForQt5.callPackage ./obs-ndi.nix {};
-  obs-websocket = libsForQt5.callPackage ./obs-websocket.nix {};
-  wlrobs = callPackage ./wlrobs.nix {};
-  looking-glass-obs = callPackage ./looking-glass-obs.nix {};
-  obs-nvfbc = callPackage ./obs-nvfbc.nix {};
-  obs-pipewire-audio-capture = callPackage ./obs-pipewire-audio-capture.nix {};
+  looking-glass-obs = callPackage ./looking-glass-obs.nix { };
+
+  obs-backgroundremoval = callPackage ./obs-backgroundremoval.nix { };
+
+  obs-gstreamer = callPackage ./obs-gstreamer.nix { };
+
+  obs-hyperion = callPackage ./obs-hyperion/default.nix { };
+
+  obs-move-transition = callPackage ./obs-move-transition.nix { };
+
+  obs-multi-rtmp = libsForQt5.callPackage ./obs-multi-rtmp.nix { };
+
+  obs-ndi = libsForQt5.callPackage ./obs-ndi.nix { };
+
+  obs-nvfbc = callPackage ./obs-nvfbc.nix { };
+
+  obs-pipewire-audio-capture = callPackage ./obs-pipewire-audio-capture.nix { };
+
   obs-vkcapture = callPackage ./obs-vkcapture.nix {
     obs-vkcapture32 = pkgsi686Linux.obs-studio-plugins.obs-vkcapture;
   };
-  obs-backgroundremoval = callPackage ./obs-backgroundremoval.nix {};
-  obs-hyperion = callPackage ./obs-hyperion/default.nix {};
+
+  obs-websocket = libsForQt5.callPackage ./obs-websocket.nix { };
+
+  wlrobs = callPackage ./wlrobs.nix { };
 }
diff --git a/pkgs/development/node-packages/overrides.nix b/pkgs/development/node-packages/overrides.nix
index 62a3daea8398..b03a76f31005 100644
--- a/pkgs/development/node-packages/overrides.nix
+++ b/pkgs/development/node-packages/overrides.nix
@@ -517,8 +517,8 @@ final: prev: {
       postInstall = ''
         cd node_modules
         for dep in ${final.vega-cli}/lib/node_modules/vega-cli/node_modules/*; do
-          if [[ ! -d $dep ]]; then
-            ln -s "${final.vega-cli}/lib/node_modules/vega-cli/node_modules/$dep"
+          if [[ ! -d ''${dep##*/} ]]; then
+            ln -s "${final.vega-cli}/lib/node_modules/vega-cli/node_modules/''${dep##*/}"
           fi
         done
       '';
diff --git a/pkgs/development/python-modules/bayesian-optimization/default.nix b/pkgs/development/python-modules/bayesian-optimization/default.nix
index ec27aa5e37ae..03ac94ad6044 100644
--- a/pkgs/development/python-modules/bayesian-optimization/default.nix
+++ b/pkgs/development/python-modules/bayesian-optimization/default.nix
@@ -4,8 +4,9 @@
 , fetchFromGitHub
 , scikit-learn
 , scipy
-, pytest
+, pytestCheckHook
 , isPy27
+, fetchpatch
 }:
 
 buildPythonPackage rec {
@@ -25,15 +26,31 @@ buildPythonPackage rec {
     scipy
   ];
 
-  checkInputs = [ pytest ];
-  checkPhase = ''
-    # New sklearn broke one test: https://github.com/fmfn/BayesianOptimization/issues/243
-    pytest tests -k "not test_suggest_with_one_observation"
-  '';
+  patches = [
+    # TypeError with scipy >= 1.8
+    # https://github.com/fmfn/BayesianOptimization/issues/300
+    (fetchpatch {
+      url = "https://github.com/fmfn/BayesianOptimization/commit/b4e09a25842985a4a0acea0c0f5c8789b7be125e.patch";
+      sha256 = "sha256-PfcifCFd4GRNTA+4+T+6A760QAgyZxhDCTyzNn2crdM=";
+      name = "scipy_18_fix.patch";
+    })
+  ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  disabledTests = [
+    # New sklearn broke one test
+    # https://github.com/fmfn/BayesianOptimization/issues/243
+    "test_suggest_with_one_observation"
+  ];
+
+  pythonImportsCheck = [ "bayes_opt" ];
 
   meta = with lib; {
     broken = (stdenv.isLinux && stdenv.isAarch64) || stdenv.isDarwin;
-    description = "A Python implementation of global optimization with gaussian processes";
+    description = ''
+      A Python implementation of global optimization with gaussian processes
+    '';
     homepage = "https://github.com/fmfn/BayesianOptimization";
     license = licenses.mit;
     maintainers = [ maintainers.juliendehos ];
diff --git a/pkgs/development/python-modules/bluemaestro-ble/default.nix b/pkgs/development/python-modules/bluemaestro-ble/default.nix
new file mode 100644
index 000000000000..518a1c580a95
--- /dev/null
+++ b/pkgs/development/python-modules/bluemaestro-ble/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, bluetooth-data-tools
+, bluetooth-sensor-state-data
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+, pytestCheckHook
+, pythonOlder
+, sensor-state-data
+}:
+
+buildPythonPackage rec {
+  pname = "bluemaestro-ble";
+  version = "0.2.0";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.9";
+
+  src = fetchFromGitHub {
+    owner = "Bluetooth-Devices";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-lJYbbF6b1CazD/aVTNoZvyfH/XQf5jWBsddDdrP+FKA=";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    bluetooth-data-tools
+    bluetooth-sensor-state-data
+    sensor-state-data
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace " --cov=bluemaestro_ble --cov-report=term-missing:skip-covered" ""
+  '';
+
+  pythonImportsCheck = [
+    "bluemaestro_ble"
+  ];
+
+  meta = with lib; {
+    description = "Library for bluemaestro BLE devices";
+    homepage = "https://github.com/Bluetooth-Devices/bluemaestro-ble";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/ete3/default.nix b/pkgs/development/python-modules/ete3/default.nix
new file mode 100644
index 000000000000..6b27d2e073bc
--- /dev/null
+++ b/pkgs/development/python-modules/ete3/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, numpy
+, six
+, withTreeVisualization ? false
+, lxml
+, withXmlSupport ? false
+, pyqt4
+, pyqt5
+}:
+
+buildPythonPackage rec {
+  pname = "ete3";
+  version = "3.1.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "4fc987b8c529889d6608fab1101f1455cb5cbd42722788de6aea9c7d0a8e59e9";
+  };
+
+
+  doCheck = false; # Tests are (i) not 3.x compatible, (ii) broken under 2.7
+  pythonImportsCheck = [ "ete3" ];
+
+  propagatedBuildInputs = [ six numpy ]
+    ++ lib.optional withTreeVisualization (if isPy3k then pyqt5 else pyqt4)
+    ++ lib.optional withXmlSupport lxml;
+
+  meta = with lib; {
+    description = "A Python framework for the analysis and visualization of trees";
+    homepage = "http://etetoolkit.org/";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ delehef ];
+  };
+}
diff --git a/pkgs/development/python-modules/libsixel/default.nix b/pkgs/development/python-modules/libsixel/default.nix
new file mode 100644
index 000000000000..7760bb867479
--- /dev/null
+++ b/pkgs/development/python-modules/libsixel/default.nix
@@ -0,0 +1,30 @@
+{ buildPythonPackage
+, lib
+, libsixel
+}:
+
+buildPythonPackage rec {
+  version = libsixel.version;
+  pname = "libsixel";
+
+  src = libsixel.src;
+  sourceRoot = "${src.name}/python";
+
+  prePatch = ''
+    substituteInPlace libsixel/__init__.py --replace \
+      'from ctypes.util import find_library' \
+      'find_library = lambda _x: "${lib.getLib libsixel}/lib/libsixel.so"'
+  '';
+
+  # no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "libsixel" ];
+
+  meta = with lib; {
+    description = "SIXEL graphics encoder/decoder implementation";
+    homepage = "https://github.com/libsixel/libsixel";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rmcgibbo ];
+  };
+}
diff --git a/pkgs/development/python-modules/psycopg/ctypes.patch b/pkgs/development/python-modules/psycopg/ctypes.patch
new file mode 100644
index 000000000000..a76d38f85e80
--- /dev/null
+++ b/pkgs/development/python-modules/psycopg/ctypes.patch
@@ -0,0 +1,46 @@
+diff --git a/psycopg/psycopg/pq/_pq_ctypes.py b/psycopg/psycopg/pq/_pq_ctypes.py
+index 4f9d00fb..24b90ef6 100644
+--- a/psycopg/psycopg/pq/_pq_ctypes.py
++++ b/psycopg/psycopg/pq/_pq_ctypes.py
+@@ -11,14 +11,10 @@ from ctypes import Structure, CFUNCTYPE, POINTER
+ from ctypes import c_char, c_char_p, c_int, c_size_t, c_ubyte, c_uint, c_void_p
+ from typing import List, Optional, Tuple
+ 
+-from .misc import find_libpq_full_path
+ from ..errors import NotSupportedError
+ 
+-libname = find_libpq_full_path()
+-if not libname:
+-    raise ImportError("libpq library not found")
+ 
+-pq = ctypes.cdll.LoadLibrary(libname)
++pq = ctypes.cdll.LoadLibrary("@libpq@")
+ 
+ 
+ class FILE(Structure):
+@@ -28,9 +24,7 @@ class FILE(Structure):
+ FILE_ptr = POINTER(FILE)
+ 
+ if sys.platform == "linux":
+-    libcname = ctypes.util.find_library("c")
+-    assert libcname
+-    libc = ctypes.cdll.LoadLibrary(libcname)
++    libc = ctypes.cdll.LoadLibrary("@libc@")
+ 
+     fdopen = libc.fdopen
+     fdopen.argtypes = (c_int, c_char_p)
+diff --git a/tests/fix_pq.py b/tests/fix_pq.py
+index 6811a26c..c1829c82 100644
+--- a/tests/fix_pq.py
++++ b/tests/fix_pq.py
+@@ -51,9 +51,7 @@ def libpq():
+         from psycopg.pq.misc import find_libpq_full_path
+ 
+         # Not available when testing the binary package
+-        libname = find_libpq_full_path()
+-        assert libname, "libpq libname not found"
+-        return ctypes.pydll.LoadLibrary(libname)
++        return ctypes.pydll.LoadLibrary("@libpq@")
+     except Exception as e:
+         if pq.__impl__ == "binary":
+             pytest.skip(f"can't load libpq for testing: {e}")
diff --git a/pkgs/development/python-modules/psycopg/default.nix b/pkgs/development/python-modules/psycopg/default.nix
index a5fe3150d5d9..1f096ccac321 100644
--- a/pkgs/development/python-modules/psycopg/default.nix
+++ b/pkgs/development/python-modules/psycopg/default.nix
@@ -32,19 +32,20 @@
 
 let
   pname = "psycopg";
-  version = "3.1";
+  version = "3.1.1";
 
   src = fetchFromGitHub {
     owner = "psycopg";
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-N0Qc8pSWN2NFZn06lYZ7DKMbk6H8aIByS+wDnOQ/O+Y=";
+    hash = "sha256-PrWHjs8PLmx7bgKtyhXaiSKmz9oT2OhXDkKd4xi7e0A=";
   };
 
   patches = [
     (substituteAll {
-      src = ./libpq.patch;
+      src = ./ctypes.patch;
       libpq = "${postgresql.lib}/lib/libpq${stdenv.hostPlatform.extensions.sharedLibrary}";
+      libc = "${stdenv.cc.libc}/lib/libc.so.6";
     })
   ];
 
diff --git a/pkgs/development/python-modules/psycopg/libpq.patch b/pkgs/development/python-modules/psycopg/libpq.patch
deleted file mode 100644
index 51271c3021aa..000000000000
--- a/pkgs/development/python-modules/psycopg/libpq.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/psycopg/psycopg/pq/_pq_ctypes.py b/psycopg/psycopg/pq/_pq_ctypes.py
-index bf04d560..9e79fc3f 100644
---- a/psycopg/psycopg/pq/_pq_ctypes.py
-+++ b/psycopg/psycopg/pq/_pq_ctypes.py
-@@ -13,16 +13,7 @@ from typing import List, Optional, Tuple
- 
- from ..errors import NotSupportedError
- 
--if sys.platform == "win32":
--    libname = ctypes.util.find_library("libpq.dll")
--elif sys.platform == "darwin":
--    libname = ctypes.util.find_library("libpq.dylib")
--else:
--    libname = ctypes.util.find_library("pq")
--if not libname:
--    raise ImportError("libpq library not found")
--
--pq = ctypes.cdll.LoadLibrary(libname)
-+pq = ctypes.cdll.LoadLibrary("@libpq@")
- 
- # Get the libpq version to define what functions are available.
- 
diff --git a/pkgs/development/python-modules/tcxreader/default.nix b/pkgs/development/python-modules/tcxreader/default.nix
new file mode 100644
index 000000000000..1f20dfeffdf7
--- /dev/null
+++ b/pkgs/development/python-modules/tcxreader/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "tcxreader";
+  version = "0.4.1";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "alenrajsp";
+    repo = "tcxreader";
+    rev = "v${version}";
+    hash = "sha256-gPoYxdYCHVzSjCxhodRsbd60dGbPQtQQihdT0h3uVpU=";
+  };
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "tcxreader"
+  ];
+
+  meta = with lib; {
+    description = "A reader for Garmin’s TCX file format.";
+    homepage = "https://github.com/alenrajsp/tcxreader";
+    license = licenses.mit;
+    maintainers = with maintainers; [ firefly-cpp ];
+  };
+}
+
diff --git a/pkgs/development/python-modules/telegraph/default.nix b/pkgs/development/python-modules/telegraph/default.nix
new file mode 100644
index 000000000000..a27db889c887
--- /dev/null
+++ b/pkgs/development/python-modules/telegraph/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, requests
+, httpx
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "telegraph";
+  version = "2.1.0";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    repo = "telegraph";
+    owner = "python273";
+    sha256 = "ChlQJu4kHkXUf4gOtW5HS+ThP3eQL7LsyANeS/10pLo=";
+    rev = "da629de7c00c3b8b0c7ab8ef4bf23caf419a3c6c";
+  };
+
+  checkInputs = [ pytestCheckHook ];
+
+  pytestFlagsArray = [ "tests/" ];
+
+  disabledTests = [
+    "test_get_page"
+  ];
+
+  doCheck = true;
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  passthru.optional-dependencies = {
+    aio = [
+      httpx
+    ];
+  };
+
+
+  pythonImportsCheck = [ "telegraph" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/python273/telegraph";
+    description = "Telegraph API wrapper";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gp2112 ];
+  };
+}
+
diff --git a/pkgs/development/tools/build-managers/goredo/default.nix b/pkgs/development/tools/build-managers/goredo/default.nix
new file mode 100644
index 000000000000..473cbb8202bd
--- /dev/null
+++ b/pkgs/development/tools/build-managers/goredo/default.nix
@@ -0,0 +1,58 @@
+{ buildGoModule
+, fetchurl
+, lib
+, zstd
+, sharness
+, python3
+, perl
+}:
+
+buildGoModule rec {
+  pname = "goredo";
+  version = "1.21.0";
+
+  src = fetchurl {
+    url = "http://www.goredo.cypherpunks.ru/download/${pname}-${version}.tar.zst";
+    hash = "sha256-h882pt+xZWlhFLQar1kfmSAzMscwMXAajT6ezZl9P8M=";
+  };
+
+  patches = [ ./fix-tests.diff ];
+
+  nativeBuildInputs = [ zstd ];
+
+  checkInputs = lib.optionals doCheck [ python3 perl ];
+
+  SHARNESS_TEST_SRCDIR = sharness + "/share/sharness";
+
+  vendorSha256 = null;
+  subPackages = [ "." ];
+
+  preBuild = "cd src";
+
+  postBuild = ''
+    ( cd $GOPATH/bin; ./goredo -symlinks )
+    cd ..
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+    export PATH=$GOPATH/bin:$PATH
+    prove -f
+    runHook postCheck
+  '';
+
+  postInstall = ''
+    mkdir -p "$out/share/info"
+    cp goredo.info "$out/share/info"
+  '';
+
+  outputs = [ "out" "info" ];
+
+  meta = with lib; {
+    description = "djb's redo, a system for building files from source files. Written in Go";
+    homepage = "https://www.goredo.cypherpunks.ru";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.spacefrogg ];
+  };
+}
diff --git a/pkgs/development/tools/build-managers/goredo/fix-tests.diff b/pkgs/development/tools/build-managers/goredo/fix-tests.diff
new file mode 100644
index 000000000000..dd754870f75f
--- /dev/null
+++ b/pkgs/development/tools/build-managers/goredo/fix-tests.diff
@@ -0,0 +1,36 @@
+diff -ur goredo-1.4.1/t/apenwarr/105-sympath/all.do goredo-1.4.1.new/t/apenwarr/105-sympath/all.do
+--- goredo-1.4.1/t/apenwarr/105-sympath/all.do	2021-04-29 14:03:11.000000000 +0200
++++ goredo-1.4.1.new/t/apenwarr/105-sympath/all.do	2021-05-10 15:04:46.912799930 +0200
+@@ -11,12 +11,13 @@
+ 	(
+ 		cd y/x/x/x/x/x
+ 		IFS=$(printf '\n')
++		_wd=$(env pwd)
+ 		redo-ifchange static x/x/x/static $PWD/static \
+-			$(/bin/pwd)/static /etc/passwd
++			$_wd/static /etc/passwd
+ 		# goredo: that symlink path is not resolving even at OS level
+ 		# redo-ifchange $PWD/../static 2>/dev/null && exit 35
+ 		redo-ifchange 1.dyn x/x/x/2.dyn $PWD/3.dyn \
+-			 $PWD/../4.dyn $(/bin/pwd)/5.dyn
++			 $PWD/../4.dyn $_wd/5.dyn
+ 	)
+ 	[ -e y/1.dyn ] || exit $((iter + 1))
+ 	[ -e y/2.dyn ] || exit $((iter + 2))
+diff -ur goredo-1.4.1/t/apenwarr/clean.do goredo-1.4.1.new/t/apenwarr/clean.do
+--- goredo-1.4.1/t/apenwarr/clean.do	2021-04-29 14:03:11.000000000 +0200
++++ goredo-1.4.1.new/t/apenwarr/clean.do	2021-05-10 15:06:07.099591609 +0200
+@@ -1,3 +1,3 @@
+-/bin/ls [0-9s][0-9][0-9]*/clean.do |
++env ls [0-9s][0-9][0-9]*/clean.do |
+ sed 's/\.do$//' |
+ xargs redo
+diff -ur goredo-1.4.1/t/redo-sh.tests/clean.do goredo-1.4.1.new/t/redo-sh.tests/clean.do
+--- goredo-1.4.1/t/redo-sh.tests/clean.do	2021-04-29 14:03:11.000000000 +0200
++++ goredo-1.4.1.new/t/redo-sh.tests/clean.do	2021-05-10 15:02:41.607562802 +0200
+@@ -1,4 +1,4 @@
+ for f in * ; do
+     [ -d $f ] || continue
+-    find $f ! -name test -delete
++    find $f ! -name test -delete || true
+ done
diff --git a/pkgs/development/tools/ddosify/default.nix b/pkgs/development/tools/ddosify/default.nix
index a077c2f1246d..9d5436ba1712 100644
--- a/pkgs/development/tools/ddosify/default.nix
+++ b/pkgs/development/tools/ddosify/default.nix
@@ -2,13 +2,13 @@
 
 buildGoModule rec {
   pname = "ddosify";
-  version = "0.8.1";
+  version = "0.8.2";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-cedgJJd1+iWw3sxbKVBpi5XvmZdDcDL0sHhTELbkY9Q=";
+    sha256 = "sha256-GvRooRsSLny+KZcro/rmagp4QAt4U52THiqTWqdvhK8=";
   };
 
   vendorSha256 = "sha256-mq82KNa01gHvW+RUREra+ysaJ1YWIwX0v/uYMxmFN4M=";
diff --git a/pkgs/development/tools/rust/cargo-public-api/default.nix b/pkgs/development/tools/rust/cargo-public-api/default.nix
index f51837cd3410..f5638d2043cb 100644
--- a/pkgs/development/tools/rust/cargo-public-api/default.nix
+++ b/pkgs/development/tools/rust/cargo-public-api/default.nix
@@ -8,14 +8,14 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "cargo-public-api";
-  version = "0.15.0";
+  version = "0.17.0";
 
   src = fetchCrate {
     inherit pname version;
-    sha256 = "sha256-3DBpvsjreBJz6NPHJsPV3dK+PvAvdwz7/gp9p/zBieI=";
+    sha256 = "sha256-NwWoF7VkCy+9/8xwaIhR7763JGtC3UheuJdj/FtGzMg=";
   };
 
-  cargoSha256 = "sha256-sP3oMphy+jbs8NUqyvanWHyDtEoFaUVQHKeTbOLfTH0=";
+  cargoSha256 = "sha256-HFTGtDS4dWzt0q2iC0qgby4fDvnoaNd+Y1eKzhwb3Hs=";
 
   nativeBuildInputs = [ pkg-config ];
 
diff --git a/pkgs/games/steam/fhsenv.nix b/pkgs/games/steam/fhsenv.nix
index f32f46f1f145..78877c8b0d8a 100644
--- a/pkgs/games/steam/fhsenv.nix
+++ b/pkgs/games/steam/fhsenv.nix
@@ -227,6 +227,14 @@ in buildFHSUserEnv rec {
         export TZ="$new_TZ"
       fi
     fi
+
+    # udev event notifications don't work reliably inside containers.
+    # SDL2 already tries to automatically detect flatpak and pressure-vessel
+    # and falls back to inotify-based discovery [1]. We make SDL2 do the
+    # same by telling it explicitly.
+    #
+    # [1] <https://github.com/libsdl-org/SDL/commit/8e2746cfb6e1f1a1da5088241a1440fd2535e321>
+    export SDL_JOYSTICK_DISABLE_UDEV=1
   '' + extraProfile;
 
   runScript = writeScript "steam-wrapper.sh" ''
diff --git a/pkgs/servers/monitoring/exportarr/default.nix b/pkgs/servers/monitoring/prometheus/exportarr/default.nix
index 911708a53c0c..f0ca48ac5bd5 100644
--- a/pkgs/servers/monitoring/exportarr/default.nix
+++ b/pkgs/servers/monitoring/prometheus/exportarr/default.nix
@@ -12,22 +12,22 @@ buildGoModule rec {
     owner = "onedr0p";
     repo = "exportarr";
     rev = "v${version}";
-    hash = "sha256-KTuOhyBFS6fgA9N70vq+5fJIGVsgEZ7Uxls8efqLuII=";
+    sha256 = "sha256-KTuOhyBFS6fgA9N70vq+5fJIGVsgEZ7Uxls8efqLuII=";
   };
 
   vendorSha256 = "sha256-Yox3LAVbTZqsDmk45uSuKgITRz3zE+HTAKxVf9wdtjE=";
 
   subPackages = [ "cmd/exportarr" ];
 
-  ldflags = [
-    "-s"
-    "-w"
-  ] ++ lib.optionals stdenv.isLinux [
-    "-extldflags=-static"
-  ];
+  CGO_ENABLE = 0;
+
+  ldflags = [ "-s" "-w" ];
 
   tags = lib.optionals stdenv.isLinux [ "netgo" ];
 
+  # There are no tests for this package.
+  doCheck = false;
+
   meta = with lib; {
     description = "AIO Prometheus Exporter for Sonarr, Radarr or Lidarr";
     homepage = "https://github.com/onedr0p/exportarr";
diff --git a/pkgs/tools/misc/esphome/default.nix b/pkgs/tools/misc/esphome/default.nix
index 6657b09f5e01..b2064b43ac85 100644
--- a/pkgs/tools/misc/esphome/default.nix
+++ b/pkgs/tools/misc/esphome/default.nix
@@ -15,14 +15,14 @@ let
 in
 with python.pkgs; buildPythonApplication rec {
   pname = "esphome";
-  version = "2022.8.1";
+  version = "2022.8.3";
   format = "setuptools";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-eBD7UC6xNxW9tkqXSLgntDqwyGpLwv6fpChIYgbIFBM=";
+    hash = "sha256-ep3o8VfY5jAsdheLpZF0TdWA/F9YO/owWEuPR7+0LeA=";
   };
 
   postPatch = ''
diff --git a/pkgs/tools/misc/fclones/default.nix b/pkgs/tools/misc/fclones/default.nix
index 9acede0e11bc..5dd351c30bb5 100644
--- a/pkgs/tools/misc/fclones/default.nix
+++ b/pkgs/tools/misc/fclones/default.nix
@@ -8,16 +8,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "fclones";
-  version = "0.27.1";
+  version = "0.27.2";
 
   src = fetchFromGitHub {
     owner = "pkolaczk";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-wU6iPOQA9rWchj4pOGos0r5QwTAWC9eoYWSRK8W1Gt0=";
+    sha256 = "sha256-cP17WnQsP2S78O9MfmpivibvN1vYMeSNBSrrOENHUiE=";
   };
 
-  cargoSha256 = "sha256-qVnFhES3On0qe0vdii2RMhJu7z6E0udFRD6xQy2+hbk=";
+  cargoSha256 = "sha256-P1T9AAeEmCOiM74RPE/3Lz/XGAj150xTF3egjDv+zvc=";
 
   buildInputs = lib.optionals stdenv.isDarwin [
     AppKit
diff --git a/pkgs/tools/misc/less/default.nix b/pkgs/tools/misc/less/default.nix
index cdea90ef5bb2..df8d9eef22ac 100644
--- a/pkgs/tools/misc/less/default.nix
+++ b/pkgs/tools/misc/less/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "less";
-  version = "600";
+  version = "608";
 
   src = fetchurl {
     url = "https://www.greenwoodsoftware.com/less/less-${version}.tar.gz";
-    sha256 = "sha256-ZjPWqis8xxevssIFd4x8QsRiD2Ox1oLz0SyYrwvnTSA=";
+    sha256 = "02f2d9d6hyf03va28ip620gjc6rf4aikmdyk47h7frqj18pbx6m6";
   };
 
   configureFlags = [ "--sysconfdir=/etc" ] # Look for ‘sysless’ in /etc.
diff --git a/pkgs/tools/wayland/swaycwd/default.nix b/pkgs/tools/wayland/swaycwd/default.nix
index 5aadc4484045..d53dc95dad5a 100644
--- a/pkgs/tools/wayland/swaycwd/default.nix
+++ b/pkgs/tools/wayland/swaycwd/default.nix
@@ -1,17 +1,17 @@
 { lib
 , nimPackages
 , fetchFromGitLab
-, enableShells ? [ "bash" "zsh" "fish" "sh" "posh" ]
+, enableShells ? [ "bash" "zsh" "fish" "sh" "posh" "codium" ]
 }:
 nimPackages.buildNimPackage rec{
   pname = "swaycwd";
-  version = "0.1.0";
+  version = "0.2.1";
 
   src = fetchFromGitLab {
     owner = "cab404";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-VrG3H6oTeYsfncdD0IBp3zbmkoF5YF146LRxL064ZAE=";
+    hash = "sha256-R/LnojbA0vBQVivGLaoM0+M4qVJ7vjf4kggB59i896w=";
   };
 
   preConfigure = ''
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index fb00b15e5c57..c48d7f0a790d 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -6185,7 +6185,7 @@ with pkgs;
 
   expect = callPackage ../tools/misc/expect { };
 
-  exportarr = callPackage ../servers/monitoring/exportarr { };
+  exportarr = callPackage ../servers/monitoring/prometheus/exportarr { };
 
   expliot = callPackage ../tools/security/expliot { };
 
@@ -9911,6 +9911,8 @@ with pkgs;
     wlroots = wlroots_0_14;
   };
 
+  phockup = callPackage ../applications/misc/phockup { };
+
   phodav = callPackage ../tools/networking/phodav { };
 
   photon-rss = callPackage ../applications/networking/feedreaders/photon { };
@@ -16450,6 +16452,8 @@ with pkgs;
 
   gocd-server = callPackage ../development/tools/continuous-integration/gocd-server { };
 
+  goredo = callPackage ../development/tools/build-managers/goredo { };
+
   gotify-server = callPackage ../servers/gotify { };
 
   gotty = callPackage ../servers/gotty { };
@@ -28408,6 +28412,8 @@ with pkgs;
 
   pass-secret-service = callPackage ../applications/misc/pass-secret-service { };
 
+  passky-desktop = callPackage ../applications/misc/passky-desktop { };
+
   pinboard = with python3Packages; toPythonApplication pinboard;
 
   pinboard-notes-backup = haskell.lib.compose.justStaticExecutables haskellPackages.pinboard-notes-backup;
@@ -32922,6 +32928,10 @@ with pkgs;
 
   bastet = callPackage ../games/bastet { };
 
+  beancount-ing-diba = callPackage ../applications/office/beancount/beancount-ing-diba.nix {
+    inherit (python3Packages) buildPythonApplication;
+  };
+
   black-hole-solver = callPackage ../games/black-hole-solver {
     inherit (perlPackages) PathTiny;
   };
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index c112586205c5..3d1d84c7440d 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -1404,6 +1404,8 @@ in {
 
   blspy = callPackage ../development/python-modules/blspy { };
 
+  bluemaestro-ble = callPackage ../development/python-modules/bluemaestro-ble { };
+
   bluepy = callPackage ../development/python-modules/bluepy { };
 
   bluepy-devices = callPackage ../development/python-modules/bluepy-devices { };
@@ -2988,6 +2990,8 @@ in {
 
   etcd = callPackage ../development/python-modules/etcd { };
 
+  ete3 = callPackage ../development/python-modules/ete3 { };
+
   etelemetry = callPackage ../development/python-modules/etelemetry { };
 
   etebase = callPackage ../development/python-modules/etebase {
@@ -5176,6 +5180,11 @@ in {
 
   libsavitar = callPackage ../development/python-modules/libsavitar { };
 
+
+  libsixel = callPackage ../development/python-modules/libsixel {
+    inherit (pkgs) libsixel;
+  };
+
   libselinux = lib.pipe pkgs.libselinux [
     toPythonModule
     (p:
@@ -10678,10 +10687,14 @@ in {
 
   tbm-utils = callPackage ../development/python-modules/tbm-utils { };
 
+  tcxreader = callPackage ../development/python-modules/tcxreader { };
+
   teamcity-messages = callPackage ../development/python-modules/teamcity-messages { };
 
   telegram = callPackage ../development/python-modules/telegram { };
 
+  telegraph = callPackage ../development/python-modules/telegraph { };
+
   telethon = callPackage ../development/python-modules/telethon {
     inherit (pkgs) openssl;
   };