about summary refs log tree commit diff
path: root/pkgs/tools/package-management
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/package-management')
-rw-r--r--pkgs/tools/package-management/akku/default.nix1
-rw-r--r--pkgs/tools/package-management/apk-tools/default.nix1
-rw-r--r--pkgs/tools/package-management/apkg/default.nix1
-rw-r--r--pkgs/tools/package-management/apt/default.nix87
-rw-r--r--pkgs/tools/package-management/apx/default.nix18
-rw-r--r--pkgs/tools/package-management/auditwheel/default.nix59
-rw-r--r--pkgs/tools/package-management/ciel/default.nix3
-rw-r--r--pkgs/tools/package-management/conda/default.nix6
-rw-r--r--pkgs/tools/package-management/deploy-rs/default.nix8
-rw-r--r--pkgs/tools/package-management/disnix/DisnixWebService/default.nix23
-rw-r--r--pkgs/tools/package-management/dnf5/default.nix38
-rw-r--r--pkgs/tools/package-management/elm-github-install/default.nix1
-rw-r--r--pkgs/tools/package-management/emplace/default.nix1
-rw-r--r--pkgs/tools/package-management/fortran-fpm/default.nix5
-rw-r--r--pkgs/tools/package-management/fpm/default.nix1
-rw-r--r--pkgs/tools/package-management/fusesoc/default.nix1
-rw-r--r--pkgs/tools/package-management/gx/default.nix1
-rw-r--r--pkgs/tools/package-management/harmonia/default.nix18
-rw-r--r--pkgs/tools/package-management/holo-build/default.nix1
-rw-r--r--pkgs/tools/package-management/home-manager/default.nix7
-rw-r--r--pkgs/tools/package-management/libcomps/default.nix65
-rw-r--r--pkgs/tools/package-management/libcomps/fix-python-install-dir.patch13
-rw-r--r--pkgs/tools/package-management/libdnf/default.nix34
-rw-r--r--pkgs/tools/package-management/libdnf/fix-python-install-dir.patch12
-rw-r--r--pkgs/tools/package-management/licensee/Gemfile.lock28
-rw-r--r--pkgs/tools/package-management/licensee/default.nix1
-rw-r--r--pkgs/tools/package-management/licensee/gemset.nix52
-rw-r--r--pkgs/tools/package-management/microdnf/default.nix1
-rw-r--r--pkgs/tools/package-management/micromamba/default.nix5
-rw-r--r--pkgs/tools/package-management/morph/default.nix1
-rw-r--r--pkgs/tools/package-management/nfpm/default.nix7
-rw-r--r--pkgs/tools/package-management/niff/default.nix1
-rw-r--r--pkgs/tools/package-management/nix-doc/default.nix7
-rw-r--r--pkgs/tools/package-management/nix-du/default.nix12
-rw-r--r--pkgs/tools/package-management/nix-eval-jobs/default.nix5
-rw-r--r--pkgs/tools/package-management/nix-pin/default.nix1
-rw-r--r--pkgs/tools/package-management/nix-prefetch/default.nix1
-rw-r--r--pkgs/tools/package-management/nix-serve/default.nix1
-rw-r--r--pkgs/tools/package-management/nix-simple-deploy/default.nix1
-rw-r--r--pkgs/tools/package-management/nix-template/default.nix1
-rw-r--r--pkgs/tools/package-management/nix-top/default.nix1
-rw-r--r--pkgs/tools/package-management/nix-universal-prefetch/default.nix1
-rw-r--r--pkgs/tools/package-management/nix-update-source/default.nix1
-rw-r--r--pkgs/tools/package-management/nix/common.nix47
-rw-r--r--pkgs/tools/package-management/nix/default.nix40
-rw-r--r--pkgs/tools/package-management/npm-check-updates/default.nix6
-rw-r--r--pkgs/tools/package-management/packagekit/qt.nix8
-rw-r--r--pkgs/tools/package-management/pacman/default.nix3
-rw-r--r--pkgs/tools/package-management/pacup/default.nix1
-rw-r--r--pkgs/tools/package-management/pdm/default.nix23
-rw-r--r--pkgs/tools/package-management/pkg/default.nix1
-rw-r--r--pkgs/tools/package-management/poetry/default.nix15
-rw-r--r--pkgs/tools/package-management/poetry/plugins/poetry-plugin-export.nix6
-rw-r--r--pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix4
-rw-r--r--pkgs/tools/package-management/poetry/unwrapped.nix31
-rw-r--r--pkgs/tools/package-management/poetry2conda/default.nix1
-rw-r--r--pkgs/tools/package-management/protontricks/default.nix23
-rw-r--r--pkgs/tools/package-management/protontricks/steam-run.patch433
-rw-r--r--pkgs/tools/package-management/repro-get/default.nix1
-rw-r--r--pkgs/tools/package-management/reuse/default.nix40
-rw-r--r--pkgs/tools/package-management/rpm/default.nix36
-rw-r--r--pkgs/tools/package-management/smlpkg/default.nix1
-rw-r--r--pkgs/tools/package-management/yarn-lock-converter/default.nix1
63 files changed, 472 insertions, 782 deletions
diff --git a/pkgs/tools/package-management/akku/default.nix b/pkgs/tools/package-management/akku/default.nix
index e1baf2e0b1eb..68ee94d3f94e 100644
--- a/pkgs/tools/package-management/akku/default.nix
+++ b/pkgs/tools/package-management/akku/default.nix
@@ -37,5 +37,6 @@ stdenv.mkDerivation rec {
     platforms = platforms.all;
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ marsam ];
+    mainProgram = "akku";
   };
 }
diff --git a/pkgs/tools/package-management/apk-tools/default.nix b/pkgs/tools/package-management/apk-tools/default.nix
index 5b37982e83f5..4a460adfd0ff 100644
--- a/pkgs/tools/package-management/apk-tools/default.nix
+++ b/pkgs/tools/package-management/apk-tools/default.nix
@@ -44,5 +44,6 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ qyliss ];
     license = licenses.gpl2Only;
     platforms = platforms.linux;
+    mainProgram = "apk";
   };
 }
diff --git a/pkgs/tools/package-management/apkg/default.nix b/pkgs/tools/package-management/apkg/default.nix
index 901a7aeff2b4..18b52f0bcdb8 100644
--- a/pkgs/tools/package-management/apkg/default.nix
+++ b/pkgs/tools/package-management/apkg/default.nix
@@ -47,5 +47,6 @@ python3Packages.buildPythonApplication rec {
     homepage = "https://pkg.labs.nic.cz/pages/apkg";
     license = licenses.gpl3Plus;
     maintainers = [ maintainers.vcunat /* close to upstream */ ];
+    mainProgram = "apkg";
   };
 }
diff --git a/pkgs/tools/package-management/apt/default.nix b/pkgs/tools/package-management/apt/default.nix
deleted file mode 100644
index 6991a5a3cd64..000000000000
--- a/pkgs/tools/package-management/apt/default.nix
+++ /dev/null
@@ -1,87 +0,0 @@
-{ lib
-, stdenv
-, fetchurl
-, bzip2
-, cmake
-, curl
-, db
-, docbook_xml_dtd_45
-, docbook_xsl
-, dpkg
-, gnutls
-, gtest
-, libgcrypt
-, libseccomp
-, libtasn1
-, libxslt
-, lz4
-, perlPackages
-, pkg-config
-, triehash
-, udev
-, xxHash
-, xz
-, zstd
-, withDocs ? true , w3m, doxygen
-, withNLS ? true , gettext
-}:
-
-stdenv.mkDerivation rec {
-  pname = "apt";
-  version = "2.7.6";
-
-  src = fetchurl {
-    url = "mirror://debian/pool/main/a/apt/apt_${version}.tar.xz";
-    hash = "sha256-hoP1Tv8L9U5R4CWzSL0HdND9Q3eZYW9IUSlWzxXAX2c=";
-  };
-
-  nativeBuildInputs = [
-    cmake
-    gtest
-    libxslt.bin
-    pkg-config
-    triehash
-  ];
-
-  buildInputs = [
-    bzip2
-    curl
-    db
-    dpkg
-    gnutls
-    libgcrypt
-    libseccomp
-    libtasn1
-    lz4
-    perlPackages.perl
-    udev
-    xxHash
-    xz
-    zstd
-  ] ++ lib.optionals withDocs [
-    docbook_xml_dtd_45
-    doxygen
-    perlPackages.Po4a
-    w3m
-  ] ++ lib.optionals withNLS [
-    gettext
-  ];
-
-  cmakeFlags = [
-    "-DBERKELEY_INCLUDE_DIRS=${db.dev}/include"
-    "-DDOCBOOK_XSL=${docbook_xsl}/share/xml/docbook-xsl"
-    "-DGNUTLS_INCLUDE_DIR=${gnutls.dev}/include"
-    "-DROOT_GROUP=root"
-    "-DUSE_NLS=${if withNLS then "ON" else "OFF"}"
-    "-DWITH_DOC=${if withDocs then "ON" else "OFF"}"
-  ];
-
-  meta = with lib; {
-    homepage = "https://salsa.debian.org/apt-team/apt";
-    description = "Command-line package management tools used on Debian-based systems";
-    changelog = "https://salsa.debian.org/apt-team/apt/-/raw/${version}/debian/changelog";
-    license = licenses.gpl2Plus;
-    platforms = platforms.linux;
-    maintainers = with maintainers; [ ];
-  };
-}
diff --git a/pkgs/tools/package-management/apx/default.nix b/pkgs/tools/package-management/apx/default.nix
index 8671cb611dc8..d24a5bc07106 100644
--- a/pkgs/tools/package-management/apx/default.nix
+++ b/pkgs/tools/package-management/apx/default.nix
@@ -2,34 +2,37 @@
 , buildGoModule
 , fetchFromGitHub
 , distrobox
+, installShellFiles
 }:
 
 buildGoModule rec {
   pname = "apx";
-  version = "2.0.0";
+  version = "2.3.0";
 
   src = fetchFromGitHub {
     owner = "Vanilla-OS";
-    repo = pname;
+    repo = "apx";
     rev = "v${version}";
-    hash = "sha256-3CelqEntpfld0n+Ewg7NCkowVjgCf5b6StfSkYbgV5k=";
+    hash = "sha256-/RGL2mCfJiJInnt5zgc1xXPqZxXCAcoWIbky99okvL0=";
   };
 
   vendorHash = null;
 
+  nativeBuildInputs = [ installShellFiles ];
+
   ldflags = [ "-s" "-w" ];
 
   postPatch = ''
     substituteInPlace config/apx.json \
-      --replace "/usr/share/apx/distrobox" "${distrobox}/bin/distrobox" \
+      --replace "/usr/share/apx/distrobox/distrobox" "${distrobox}/bin/distrobox" \
       --replace "/usr/share/apx" "$out/bin/apx"
     substituteInPlace settings/config.go \
       --replace "/usr/share/apx/" "$out/share/apx/"
   '';
 
   postInstall = ''
-    install -D config/apx.json -t $out/share/apx/
-    install -D man/man1/apx.1 -t $out/man/man1/
+    install -m 444 -D config/apx.json -t $out/share/apx/
+    installManPage man/man1/*
   '';
 
   meta = with lib; {
@@ -37,6 +40,7 @@ buildGoModule rec {
     homepage = "https://github.com/Vanilla-OS/apx";
     changelog = "https://github.com/Vanilla-OS/apx/releases/tag/v${version}";
     license = licenses.gpl3Only;
-    maintainers = with maintainers; [ dit7ya jgarcia ];
+    maintainers = with maintainers; [ dit7ya chewblacka ];
+    mainProgram = "apx";
   };
 }
diff --git a/pkgs/tools/package-management/auditwheel/default.nix b/pkgs/tools/package-management/auditwheel/default.nix
deleted file mode 100644
index 6ea176ab1ca4..000000000000
--- a/pkgs/tools/package-management/auditwheel/default.nix
+++ /dev/null
@@ -1,59 +0,0 @@
-{ lib
-, bzip2
-, patchelf
-, python3
-, fetchPypi
-, gnutar
-, unzip
-}:
-
-python3.pkgs.buildPythonApplication rec {
-  pname = "auditwheel";
-  version = "5.1.2";
-  format = "setuptools";
-
-  src = fetchPypi {
-    inherit pname version;
-    hash = "sha256-PuWDABSTHqhK9c0GXGN7ZhTvoD2biL2Pv8kk5+0B1ro=";
-  };
-
-  nativeBuildInputs = with python3.pkgs; [
-    pbr
-  ];
-
-  propagatedBuildInputs = with python3.pkgs; [
-    pyelftools
-    setuptools
-  ];
-
-  nativeCheckInputs = with python3.pkgs; [
-    pretend
-    pytestCheckHook
-  ];
-
-  # Integration tests require docker and networking
-  disabledTestPaths = [
-    "tests/integration"
-  ];
-
-  # Ensure that there are no undeclared deps
-  postCheck = ''
-    PATH= PYTHONPATH= $out/bin/auditwheel --version > /dev/null
-  '';
-
-  makeWrapperArgs = [
-    "--prefix" "PATH" ":" (lib.makeBinPath [ bzip2 gnutar patchelf unzip ])
-  ];
-
-  meta = with lib; {
-    description = "Auditing and relabeling cross-distribution Linux wheels";
-    homepage = "https://github.com/pypa/auditwheel";
-    license = with licenses; [
-      mit  # auditwheel and nibabel
-      bsd2  # from https://github.com/matthew-brett/delocate
-      bsd3  # from https://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-projects/pax-utils/lddtree.py
-    ];
-    maintainers = with maintainers; [ davhau ];
-    platforms = platforms.linux;
-  };
-}
diff --git a/pkgs/tools/package-management/ciel/default.nix b/pkgs/tools/package-management/ciel/default.nix
index d6040c4a0763..c5809fdca944 100644
--- a/pkgs/tools/package-management/ciel/default.nix
+++ b/pkgs/tools/package-management/ciel/default.nix
@@ -62,10 +62,11 @@ rustPlatform.buildRustPackage rec {
   '';
 
   meta = with lib; {
-    description = "A tool for controlling AOSC OS packaging environments using multi-layer filesystems and containers.";
+    description = "A tool for controlling AOSC OS packaging environments using multi-layer filesystems and containers";
     homepage = "https://github.com/AOSC-Dev/ciel-rs";
     license = licenses.mit;
     platforms = platforms.linux;
     maintainers = with maintainers; [ yisuidenghua ];
+    mainProgram = "ciel";
   };
 }
diff --git a/pkgs/tools/package-management/conda/default.nix b/pkgs/tools/package-management/conda/default.nix
index b20165a07861..5638676838f7 100644
--- a/pkgs/tools/package-management/conda/default.nix
+++ b/pkgs/tools/package-management/conda/default.nix
@@ -77,7 +77,11 @@ in
       export QTCOMPOSE=${xorg.libX11}/share/X11/locale
       export LIBARCHIVE=${libarchive.lib}/lib/libarchive.so
       # Allows `conda activate` to work properly
-      source ${installationPath}/etc/profile.d/conda.sh
+      condaSh=${installationPath}/etc/profile.d/conda.sh
+      if [ ! -f $condaSh ]; then
+        conda-install
+      fi
+      source $condaSh
     '';
 
     runScript = "bash -l";
diff --git a/pkgs/tools/package-management/deploy-rs/default.nix b/pkgs/tools/package-management/deploy-rs/default.nix
index 7f4aeac5a45a..72eacb558bb8 100644
--- a/pkgs/tools/package-management/deploy-rs/default.nix
+++ b/pkgs/tools/package-management/deploy-rs/default.nix
@@ -8,16 +8,16 @@
 
 rustPlatform.buildRustPackage {
   pname = "deploy-rs";
-  version = "unstable-2023-09-12";
+  version = "unstable-2023-12-20";
 
   src = fetchFromGitHub {
     owner = "serokell";
     repo = "deploy-rs";
-    rev = "31c32fb2959103a796e07bbe47e0a5e287c343a8";
-    hash = "sha256-wE5kHco3+FQjc+MwTPwLVqYz4hM7uno2CgXDXUFMCpc=";
+    rev = "b709d63debafce9f5645a5ba550c9e0983b3d1f7";
+    hash = "sha256-0VUbWBW8VyiDRuimMuLsEO4elGuUw/nc2WDeuO1eN1M=";
   };
 
-  cargoHash = "sha256-WqZnDWMrqWy1rzR6n+acFW6VHWbDnQmoxtPDA5B37JU=";
+  cargoHash = "sha256-PVeCB1g3JSYE6PKWHyE3hfN/CKlb9XErt8uaD/ZyxIs=";
 
   buildInputs = lib.optionals stdenv.isDarwin [
     CoreServices
diff --git a/pkgs/tools/package-management/disnix/DisnixWebService/default.nix b/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
index 9fd10a3aba08..461c0cacc06a 100644
--- a/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
+++ b/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
@@ -1,12 +1,25 @@
-{lib, stdenv, fetchurl, apacheAnt, jdk, axis2, dbus_java }:
+{lib, stdenv, fetchFromGitHub, fetchpatch, apacheAnt, jdk, axis2, dbus_java }:
 
 stdenv.mkDerivation rec {
   pname = "DisnixWebService";
   version = "0.10.1";
-  src = fetchurl {
-    url = "https://github.com/svanderburg/DisnixWebService/releases/download/DisnixWebService-${version}/DisnixWebService-${version}.tar.gz";
-    sha256 = "02jxbgn9a0c9cr6knzp78bp9wiywzczy89wav7yxhg79vff8a1gr";
+
+  src = fetchFromGitHub {
+    owner = "svanderburg";
+    repo = "DisnixWebService";
+    rev = "refs/tags/DisnixWebService-${version}";
+    hash = "sha256-zcYr2Ytx4pevSthTQLpnQ330wDxN9dWsZA20jbO6PxQ=";
   };
+
+  patches = [
+    # Correct the DisnixWebService build for compatibility with Axis2 1.8.1
+    # See https://github.com/svanderburg/DisnixWebService/pull/2
+    (fetchpatch {
+      url = "https://github.com/svanderburg/DisnixWebService/commit/cee99c6af744b5dda16728a70ebd2800f61871a0.patch";
+      hash = "sha256-4rSEN8AwivUXUCIUYFBRIoE19jVDv+Vpgakmy8fR06A=";
+    })
+  ];
+
   buildInputs = [ apacheAnt jdk ];
   PREFIX = "\${env.out}";
   AXIS2_LIB = "${axis2}/lib";
@@ -22,6 +35,8 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A SOAP interface and client for Disnix";
+    homepage = "https://github.com/svanderburg/DisnixWebService";
+    changelog = "https://github.com/svanderburg/DisnixWebService/blob/DisnixWebService-${version}/NEWS.txt";
     license = lib.licenses.mit;
     maintainers = [ lib.maintainers.sander ];
     platforms = lib.platforms.linux;
diff --git a/pkgs/tools/package-management/dnf5/default.nix b/pkgs/tools/package-management/dnf5/default.nix
index 97c9ba29b6a7..31a19b542e70 100644
--- a/pkgs/tools/package-management/dnf5/default.nix
+++ b/pkgs/tools/package-management/dnf5/default.nix
@@ -3,9 +3,11 @@
 , fetchFromGitHub
 , cmake
 , createrepo_c
+, doxygen
 , gettext
 , help2man
 , pkg-config
+, python3Packages
 , cppunit
 , fmt
 , json_c
@@ -14,27 +16,45 @@
 , libsmartcols
 , libsolv
 , libxml2
+, libyaml
 , pcre2
 , rpm
 , sdbus-cpp
+, sphinx
 , sqlite
 , systemd
+, testers
 , toml11
 , zchunk
 }:
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "dnf5";
-  version = "5.1.7";
+  version = "5.1.10";
+
+  outputs = [ "out" "man" ];
 
   src = fetchFromGitHub {
     owner = "rpm-software-management";
     repo = "dnf5";
     rev = finalAttrs.version;
-    hash = "sha256-SXgl4YFWl1A3N2/IkDftvBl6Rwhnymxe8AqqaekGHTc=";
+    hash = "sha256-u+UiiCl67VtIedW4kn3fycafkgBVsFFkWQcN3NXQKl4=";
   };
 
-  nativeBuildInputs = [ cmake createrepo_c gettext help2man pkg-config ];
+  nativeBuildInputs = [
+    cmake
+    createrepo_c
+    doxygen
+    gettext
+    help2man
+    pkg-config
+    sphinx
+  ] ++ (with python3Packages; [
+    breathe
+    sphinx-autoapi
+    sphinx-rtd-theme
+  ]);
+
   buildInputs = [
     cppunit
     fmt
@@ -44,6 +64,7 @@ stdenv.mkDerivation (finalAttrs: {
     libsmartcols
     libsolv
     libxml2
+    libyaml
     pcre2.dev
     rpm
     sdbus-cpp
@@ -60,9 +81,6 @@ stdenv.mkDerivation (finalAttrs: {
     "-DWITH_PERL5=OFF"
     "-DWITH_PYTHON3=OFF"
     "-DWITH_RUBY=OFF"
-    "-DWITH_TESTS=OFF"
-    # TODO: fix man installation paths
-    "-DWITH_MAN=OFF"
     "-DWITH_PLUGIN_RHSM=OFF" # Red Hat Subscription Manager plugin
     # the cmake package does not handle absolute CMAKE_INSTALL_INCLUDEDIR correctly
     # (setting it to an absolute path causes include files to go to $out/$out/include,
@@ -71,6 +89,10 @@ stdenv.mkDerivation (finalAttrs: {
     "-DCMAKE_INSTALL_LIBDIR=lib"
   ];
 
+  postBuild = ''
+    make doc
+  '';
+
   prePatch = ''
     substituteInPlace dnf5daemon-server/dbus/CMakeLists.txt \
       --replace '/etc' "$out/etc" \
@@ -83,6 +105,10 @@ stdenv.mkDerivation (finalAttrs: {
 
   dontFixCmake = true;
 
+  passthru.tests = {
+    version = testers.testVersion { package = finalAttrs.finalPackage; };
+  };
+
   meta = with lib; {
     description = "Next-generation RPM package management system";
     homepage = "https://github.com/rpm-software-management/dnf5";
diff --git a/pkgs/tools/package-management/elm-github-install/default.nix b/pkgs/tools/package-management/elm-github-install/default.nix
index f86cdc55ecc1..3c77af2b82bf 100644
--- a/pkgs/tools/package-management/elm-github-install/default.nix
+++ b/pkgs/tools/package-management/elm-github-install/default.nix
@@ -17,5 +17,6 @@ bundlerEnv rec {
     license     = licenses.unfree;
     maintainers = with maintainers; [ roberth nicknovitski ];
     platforms   = platforms.all;
+    mainProgram = "elm-install";
   };
 }
diff --git a/pkgs/tools/package-management/emplace/default.nix b/pkgs/tools/package-management/emplace/default.nix
index 07f17343cb7b..0a2656e12932 100644
--- a/pkgs/tools/package-management/emplace/default.nix
+++ b/pkgs/tools/package-management/emplace/default.nix
@@ -18,5 +18,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/tversteeg/emplace";
     license = licenses.agpl3Plus;
     maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "emplace";
   };
 }
diff --git a/pkgs/tools/package-management/fortran-fpm/default.nix b/pkgs/tools/package-management/fortran-fpm/default.nix
index 6e7c68aa17f1..0945b0c67e32 100644
--- a/pkgs/tools/package-management/fortran-fpm/default.nix
+++ b/pkgs/tools/package-management/fortran-fpm/default.nix
@@ -7,11 +7,11 @@
 stdenv.mkDerivation rec {
   pname = "fortran-fpm";
 
-  version = "0.9.0";
+  version = "0.10.0";
 
   src = fetchurl {
     url = "https://github.com/fortran-lang/fpm/releases/download/v${version}/fpm-${version}.F90";
-    sha256 = "sha256-VWs4g7odtv1iyZunFD8el+u0CXKcQgnwOqPG/JcMzj8=";
+    sha256 = "sha256-SOVj23Sva5OW6+Sme9NxIQ4uqMbis8wjDmgYPOdQlCI=";
   };
 
   dontUnpack = true;
@@ -44,5 +44,6 @@ stdenv.mkDerivation rec {
     maintainers = [ maintainers.proofconstruction ];
     license = licenses.mit;
     platforms = platforms.all;
+    mainProgram = "fortran-fpm";
   };
 }
diff --git a/pkgs/tools/package-management/fpm/default.nix b/pkgs/tools/package-management/fpm/default.nix
index 4eab1556d954..6be2687d67ad 100644
--- a/pkgs/tools/package-management/fpm/default.nix
+++ b/pkgs/tools/package-management/fpm/default.nix
@@ -13,5 +13,6 @@ bundlerApp {
     license     = licenses.mit;
     maintainers = with maintainers; [ manveru nicknovitski ];
     platforms   = platforms.unix;
+    mainProgram = "fpm";
   };
 }
diff --git a/pkgs/tools/package-management/fusesoc/default.nix b/pkgs/tools/package-management/fusesoc/default.nix
index 99926fd5c047..680cbc020945 100644
--- a/pkgs/tools/package-management/fusesoc/default.nix
+++ b/pkgs/tools/package-management/fusesoc/default.nix
@@ -34,5 +34,6 @@ buildPythonPackage rec {
     description = "A package manager and build tools for HDL code";
     maintainers = with maintainers; [ genericnerdyusername ];
     license = licenses.bsd3;
+    mainProgram = "fusesoc";
   };
 }
diff --git a/pkgs/tools/package-management/gx/default.nix b/pkgs/tools/package-management/gx/default.nix
index e53fdf48413f..3f757dde448c 100644
--- a/pkgs/tools/package-management/gx/default.nix
+++ b/pkgs/tools/package-management/gx/default.nix
@@ -20,5 +20,6 @@ buildGoModule rec {
     homepage = "https://github.com/whyrusleeping/gx";
     license = licenses.mit;
     maintainers = with maintainers; [ zimbatm ];
+    mainProgram = "gx";
   };
 }
diff --git a/pkgs/tools/package-management/harmonia/default.nix b/pkgs/tools/package-management/harmonia/default.nix
index fd1ce1063245..9830570a07fd 100644
--- a/pkgs/tools/package-management/harmonia/default.nix
+++ b/pkgs/tools/package-management/harmonia/default.nix
@@ -2,36 +2,42 @@
 , boost
 , fetchFromGitHub
 , libsodium
-, nix
+, nixVersions
 , pkg-config
 , rustPlatform
+, stdenv
 , nix-update-script
 , nixosTests
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "harmonia";
-  version = "0.7.3";
+  version = "0.7.4";
 
   src = fetchFromGitHub {
     owner = "nix-community";
     repo = pname;
     rev = "refs/tags/${pname}-v${version}";
-    hash = "sha256-XtnK54HvZMKZGSCrVD0FO5PQLMo3Vkj8ezUlsfqStq0=";
+    hash = "sha256-72JMrXmxw/FuGjqXXxMIGiAbUUOqXEERdQwch+s3iwU=";
   };
 
-  cargoHash = "sha256-oQVHrfNPhslYk6APB/bhW+h+vk/gNTW/ZypoGGb5zPk=";
+  cargoHash = "sha256-Q5Y5v7mmJpfZFGRgurTcRBRtbApFRrwqOBHdZTJbyzc=";
 
   nativeBuildInputs = [
-    pkg-config nix
+    pkg-config nixVersions.nix_2_19
   ];
 
   buildInputs = [
     boost
     libsodium
-    nix
+    nixVersions.nix_2_19
   ];
 
+  # Workaround for https://github.com/NixOS/nixpkgs/issues/166205
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
   passthru = {
     updateScript = nix-update-script {
       extraArgs = [ "--version-regex" "harmonia-v(.*)" ];
diff --git a/pkgs/tools/package-management/holo-build/default.nix b/pkgs/tools/package-management/holo-build/default.nix
index fca55807f516..41444e8533d5 100644
--- a/pkgs/tools/package-management/holo-build/default.nix
+++ b/pkgs/tools/package-management/holo-build/default.nix
@@ -55,5 +55,6 @@ buildGoModule rec {
     homepage = "https://holocm.org/";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ];
+    mainProgram = "holo-build";
   };
 }
diff --git a/pkgs/tools/package-management/home-manager/default.nix b/pkgs/tools/package-management/home-manager/default.nix
index fa642cff5dd5..e1c3b781fc85 100644
--- a/pkgs/tools/package-management/home-manager/default.nix
+++ b/pkgs/tools/package-management/home-manager/default.nix
@@ -16,14 +16,14 @@
 
 stdenvNoCC.mkDerivation (finalAttrs: {
   pname = "home-manager";
-  version = "2023-09-14";
+  version = "unstable-2024-01-23";
 
   src = fetchFromGitHub {
     name = "home-manager-source";
     owner = "nix-community";
     repo = "home-manager";
-    rev = "d9b88b43524db1591fb3d9410a21428198d75d49";
-    hash = "sha256-pv2k/5FvyirDE8g4TNehzwZ0T4UOMMmqWSQnM/luRtE=";
+    rev = "3df2a80f3f85f91ea06e5e91071fa74ba92e5084";
+    hash = "sha256-J7Bs9LHdZubgNHZ6+eE/7C18lZ1P6S5/zdJSdXFItI4=";
   };
 
   nativeBuildInputs = [
@@ -88,5 +88,6 @@ stdenvNoCC.mkDerivation (finalAttrs: {
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ AndersonTorres ];
     platforms = lib.platforms.unix;
+    mainProgram = "home-manager";
   };
 })
diff --git a/pkgs/tools/package-management/libcomps/default.nix b/pkgs/tools/package-management/libcomps/default.nix
new file mode 100644
index 000000000000..89c2982497df
--- /dev/null
+++ b/pkgs/tools/package-management/libcomps/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, check
+, cmake
+, doxygen
+, expat
+, fetchFromGitHub
+, libxml2
+, python
+, sphinx
+, stdenv
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libcomps";
+  version = "0.1.20";
+
+  outputs = [ "out" "dev" "py" ];
+
+  src = fetchFromGitHub {
+    owner = "rpm-software-management";
+    repo = "libcomps";
+    rev = version;
+    hash = "sha256-IX4du1+G7lwWrGnllydnBDap2aqK5pzos1Mdyu4MzOU=";
+  };
+
+  patches = [
+    ./fix-python-install-dir.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace libcomps/src/python/src/CMakeLists.txt \
+      --replace "@PYTHON_INSTALL_DIR@" "$out/${python.sitePackages}"
+  '';
+
+  nativeBuildInputs = [
+    check
+    cmake
+    doxygen
+    python
+    sphinx
+  ];
+
+  buildInputs = [
+    expat
+    libxml2
+    zlib
+  ];
+
+  dontUseCmakeBuildDir = true;
+  cmakeDir = "libcomps";
+
+  postFixup = ''
+    ls $out/lib
+    moveToOutput "lib/${python.libPrefix}" "$py"
+  '';
+
+  meta = with lib; {
+    description = "Comps XML file manipulation library";
+    homepage = "https://github.com/rpm-software-management/libcomps";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ katexochen ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/package-management/libcomps/fix-python-install-dir.patch b/pkgs/tools/package-management/libcomps/fix-python-install-dir.patch
new file mode 100644
index 000000000000..958b4c80843c
--- /dev/null
+++ b/pkgs/tools/package-management/libcomps/fix-python-install-dir.patch
@@ -0,0 +1,13 @@
+diff --git a/libcomps/src/python/src/CMakeLists.txt b/libcomps/src/python/src/CMakeLists.txt
+index d22b84e..57bd1c2 100644
+--- a/libcomps/src/python/src/CMakeLists.txt
++++ b/libcomps/src/python/src/CMakeLists.txt
+@@ -85,7 +85,7 @@ IF (SKBUILD)
+     INSTALL(FILES libcomps/__init__.py DESTINATION libcomps/src/python/src/libcomps)
+     INSTALL(TARGETS pycomps LIBRARY DESTINATION libcomps/src/python/src/libcomps)
+ ELSE ()
+-    EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from sysconfig import get_path; stdout.write(get_path('platlib'))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
++    SET(PYTHON_INSTALL_DIR "@PYTHON_INSTALL_DIR@")
+
+     INSTALL(FILES ${pycomps_SRCDIR}/libcomps/__init__.py DESTINATION ${PYTHON_INSTALL_DIR}/libcomps)
+     #INSTALL(FILES ${pycomps_SRCDIR}/tests/__test.py DESTINATION
diff --git a/pkgs/tools/package-management/libdnf/default.nix b/pkgs/tools/package-management/libdnf/default.nix
index 739210ce9240..e7ecfc9c94db 100644
--- a/pkgs/tools/package-management/libdnf/default.nix
+++ b/pkgs/tools/package-management/libdnf/default.nix
@@ -15,12 +15,19 @@
 , libyaml
 , rpm
 , zchunk
+, cppunit
+, python
+, swig
+, glib
+, sphinx
 }:
 
 stdenv.mkDerivation rec {
   pname = "libdnf";
   version = "0.72.0";
 
+  outputs = [ "out" "dev" "py" ];
+
   src = fetchFromGitHub {
     owner = "rpm-software-management";
     repo = pname;
@@ -36,12 +43,16 @@ stdenv.mkDerivation rec {
 
   buildInputs = [
     check
+    cppunit
     openssl
     json_c
     libsmartcols
     libyaml
     libmodulemd
     zchunk
+    python
+    swig
+    sphinx
   ];
 
   propagatedBuildInputs = [
@@ -56,29 +67,38 @@ stdenv.mkDerivation rec {
     cp ${libsolv}/share/cmake/Modules/FindLibSolv.cmake cmake/modules/
   '';
 
-  postPatch = ''
-    # See https://github.com/NixOS/nixpkgs/issues/107428
-    substituteInPlace CMakeLists.txt \
-      --replace "enable_testing()" "" \
-      --replace "add_subdirectory(tests)" ""
+  patches = [
+    ./fix-python-install-dir.patch
+  ];
 
+  postPatch = ''
     # https://github.com/rpm-software-management/libdnf/issues/1518
     substituteInPlace libdnf/libdnf.pc.in \
       --replace '$'{prefix}/@CMAKE_INSTALL_LIBDIR@ @CMAKE_INSTALL_FULL_LIBDIR@
+    substituteInPlace cmake/modules/FindPythonInstDir.cmake \
+      --replace "@PYTHON_INSTALL_DIR@" "$out/${python.sitePackages}"
   '';
 
   cmakeFlags = [
     "-DWITH_GTKDOC=OFF"
     "-DWITH_HTML=OFF"
-    "-DWITH_BINDINGS=OFF"
+    "-DPYTHON_DESIRED=${lib.head (lib.splitString ["."] python.version)}"
   ];
 
+  postInstall = ''
+    rm -r $out/${python.sitePackages}/hawkey/test
+  '';
+
+  postFixup = ''
+    moveToOutput "lib/${python.libPrefix}" "$py"
+  '';
+
   meta = with lib; {
     description = "Package management library";
     homepage = "https://github.com/rpm-software-management/libdnf";
     changelog = "https://github.com/rpm-software-management/libdnf/releases/tag/${version}";
     license = licenses.gpl2Plus;
     platforms = platforms.linux ++ platforms.darwin;
-    maintainers = with maintainers; [ rb2k ];
+    maintainers = with maintainers; [ rb2k katexochen ];
   };
 }
diff --git a/pkgs/tools/package-management/libdnf/fix-python-install-dir.patch b/pkgs/tools/package-management/libdnf/fix-python-install-dir.patch
new file mode 100644
index 000000000000..d08ec9deec02
--- /dev/null
+++ b/pkgs/tools/package-management/libdnf/fix-python-install-dir.patch
@@ -0,0 +1,12 @@
+diff --git a/cmake/modules/FindPythonInstDir.cmake b/cmake/modules/FindPythonInstDir.cmake
+index ed098ded..2a2e1543 100644
+--- a/cmake/modules/FindPythonInstDir.cmake
++++ b/cmake/modules/FindPythonInstDir.cmake
+@@ -1,6 +1 @@
+-EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "
+-from sys import stdout
+-from sysconfig import get_path
+-path=get_path(name='platlib', vars={'platbase':'${CMAKE_INSTALL_PREFIX}'})
+-stdout.write(path)"
+-OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
++SET(PYTHON_INSTALL_DIR "@PYTHON_INSTALL_DIR@")
diff --git a/pkgs/tools/package-management/licensee/Gemfile.lock b/pkgs/tools/package-management/licensee/Gemfile.lock
index 487224bf5da2..6bfe70664bd1 100644
--- a/pkgs/tools/package-management/licensee/Gemfile.lock
+++ b/pkgs/tools/package-management/licensee/Gemfile.lock
@@ -1,36 +1,38 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    addressable (2.8.1)
+    addressable (2.8.6)
       public_suffix (>= 2.0.2, < 6.0)
+    base64 (0.2.0)
     dotenv (2.8.1)
-    faraday (2.7.2)
+    faraday (2.8.1)
+      base64
       faraday-net_http (>= 2.0, < 3.1)
       ruby2_keywords (>= 0.0.4)
     faraday-net_http (3.0.2)
-    licensee (9.16.0)
+    licensee (9.16.1)
       dotenv (~> 2.0)
-      octokit (>= 4.20, < 7.0)
+      octokit (>= 4.20, < 9.0)
       reverse_markdown (>= 1, < 3)
       rugged (>= 0.24, < 2.0)
       thor (>= 0.19, < 2.0)
-    mini_portile2 (2.8.1)
-    nokogiri (1.13.10)
-      mini_portile2 (~> 2.8.0)
+    mini_portile2 (2.8.5)
+    nokogiri (1.16.0)
+      mini_portile2 (~> 2.8.2)
       racc (~> 1.4)
-    octokit (6.0.1)
+    octokit (8.0.0)
       faraday (>= 1, < 3)
       sawyer (~> 0.9)
-    public_suffix (5.0.1)
-    racc (1.6.2)
+    public_suffix (5.0.4)
+    racc (1.7.3)
     reverse_markdown (2.1.1)
       nokogiri
     ruby2_keywords (0.0.5)
-    rugged (1.5.0.1)
+    rugged (1.7.1)
     sawyer (0.9.2)
       addressable (>= 2.3.5)
       faraday (>= 0.17.3, < 3)
-    thor (1.2.1)
+    thor (1.3.0)
 
 PLATFORMS
   ruby
@@ -39,4 +41,4 @@ DEPENDENCIES
   licensee
 
 BUNDLED WITH
-   2.3.26
+   2.4.22
diff --git a/pkgs/tools/package-management/licensee/default.nix b/pkgs/tools/package-management/licensee/default.nix
index fb33f498bbc3..b72c218cd16a 100644
--- a/pkgs/tools/package-management/licensee/default.nix
+++ b/pkgs/tools/package-management/licensee/default.nix
@@ -13,5 +13,6 @@ bundlerApp {
     license     = licenses.mit;
     maintainers = [ maintainers.sternenseemann ];
     platforms   = platforms.unix;
+    mainProgram = "licensee";
   };
 }
diff --git a/pkgs/tools/package-management/licensee/gemset.nix b/pkgs/tools/package-management/licensee/gemset.nix
index 25726d2ac5c2..0a850ba8758b 100644
--- a/pkgs/tools/package-management/licensee/gemset.nix
+++ b/pkgs/tools/package-management/licensee/gemset.nix
@@ -5,10 +5,20 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1ypdmpdn20hxp5vwxz3zc04r5xcwqc25qszdlg41h8ghdqbllwmw";
+      sha256 = "0irbdwkkjwzajq1ip6ba46q49sxnrl2cw7ddkdhsfhb6aprnm3vr";
       type = "gem";
     };
-    version = "2.8.1";
+    version = "2.8.6";
+  };
+  base64 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01qml0yilb9basf7is2614skjp8384h2pycfx86cr8023arfj98g";
+      type = "gem";
+    };
+    version = "0.2.0";
   };
   dotenv = {
     groups = ["default"];
@@ -21,15 +31,15 @@
     version = "2.8.1";
   };
   faraday = {
-    dependencies = ["faraday-net_http" "ruby2_keywords"];
+    dependencies = ["base64" "faraday-net_http" "ruby2_keywords"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "17lacy6n0hsayafvgxgzmngfq2x62b2arbn32bj2yyzmgxwyxhqn";
+      sha256 = "19p45ryrvxff6ggdj4fq76dk7wlkfgrh474c3kwzdsjx3xpdq8x8";
       type = "gem";
     };
-    version = "2.7.2";
+    version = "2.8.1";
   };
   faraday-net_http = {
     groups = ["default"];
@@ -47,20 +57,20 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0i4hs0vbgp0w3pdddr37zhydm16af122rmr0w39v3nqrj1ir65kv";
+      sha256 = "05g5w9c4jlfhwn0hfz117s1c7hfdm5yn7cywr4mah7xr41yvbh04";
       type = "gem";
     };
-    version = "9.16.0";
+    version = "9.16.1";
   };
   mini_portile2 = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1af4yarhbbx62f7qsmgg5fynrik0s36wjy3difkawy536xg343mp";
+      sha256 = "1kl9c3kdchjabrihdqfmcplk3lq4cw1rr9f378y6q22qwy5dndvs";
       type = "gem";
     };
-    version = "2.8.1";
+    version = "2.8.5";
   };
   nokogiri = {
     dependencies = ["mini_portile2" "racc"];
@@ -68,10 +78,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0n79k78c5vdcyl0m3y3l5x9kxl6xf5lgriwi2vd665qmdkr01vnk";
+      sha256 = "1l8b0i24h4irivyhwy9xmkjbggw86cxkzkiqdqg0jpcp9qc8h4rl";
       type = "gem";
     };
-    version = "1.13.10";
+    version = "1.16.0";
   };
   octokit = {
     dependencies = ["faraday" "sawyer"];
@@ -79,30 +89,30 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0a5iy1v1n8f5ggp6q601mn8dz1n08ffs4gv0zsh5ca68j8dfmpx5";
+      sha256 = "11fhv1a43c51jkgmqf62aypf9yw74lc6ph4qmzsh2bydwwzbwqn3";
       type = "gem";
     };
-    version = "6.0.1";
+    version = "8.0.0";
   };
   public_suffix = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0hz0bx2qs2pwb0bwazzsah03ilpf3aai8b7lk7s35jsfzwbkjq35";
+      sha256 = "1bni4qjrsh2q49pnmmd6if4iv3ak36bd2cckrs6npl111n769k9m";
       type = "gem";
     };
-    version = "5.0.1";
+    version = "5.0.4";
   };
   racc = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "09jgz6r0f7v84a7jz9an85q8vvmp743dqcsdm3z9c8rqcqv6pljq";
+      sha256 = "01b9662zd2x9bp4rdjfid07h09zxj7kvn7f5fghbqhzc625ap1dp";
       type = "gem";
     };
-    version = "1.6.2";
+    version = "1.7.3";
   };
   reverse_markdown = {
     dependencies = ["nokogiri"];
@@ -130,10 +140,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "02h1cv73znwfgy61mqmfylcfvwyyp3lddiz3njgivfx234mpz50x";
+      sha256 = "02m9zksfy3dwzhbv56xq2wwmlghca5209hdg895pi2x2d2sbkahi";
       type = "gem";
     };
-    version = "1.5.0.1";
+    version = "1.7.1";
   };
   sawyer = {
     dependencies = ["addressable" "faraday"];
@@ -151,9 +161,9 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
+      sha256 = "1hx77jxkrwi66yvs10wfxqa8s25ds25ywgrrf66acm9nbfg7zp0s";
       type = "gem";
     };
-    version = "1.2.1";
+    version = "1.3.0";
   };
 }
diff --git a/pkgs/tools/package-management/microdnf/default.nix b/pkgs/tools/package-management/microdnf/default.nix
index be3041f253d8..79fcdf0300c2 100644
--- a/pkgs/tools/package-management/microdnf/default.nix
+++ b/pkgs/tools/package-management/microdnf/default.nix
@@ -20,5 +20,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     maintainers = with lib.maintainers; [ rb2k ];
     platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "microdnf";
   };
 }
diff --git a/pkgs/tools/package-management/micromamba/default.nix b/pkgs/tools/package-management/micromamba/default.nix
index b60edf0b0426..5ff23ec7188d 100644
--- a/pkgs/tools/package-management/micromamba/default.nix
+++ b/pkgs/tools/package-management/micromamba/default.nix
@@ -35,13 +35,13 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "micromamba";
-  version = "1.4.4";
+  version = "1.5.4";
 
   src = fetchFromGitHub {
     owner = "mamba-org";
     repo = "mamba";
     rev = "micromamba-" + version;
-    hash = "sha256-Z6hED0fiXzEKpVm8tUBR9ynqWCvHGXkXHzAXbbWlq9Y=";
+    hash = "sha256-29SuR4RDW0+yNR1RHlm3I4avy0CjBTGxv1FKxMDZxO0=";
   };
 
   nativeBuildInputs = [ cmake ];
@@ -74,5 +74,6 @@ stdenv.mkDerivation rec {
     license = licenses.bsd3;
     platforms = platforms.all;
     maintainers = with maintainers; [ mausch ];
+    mainProgram = "micromamba";
   };
 }
diff --git a/pkgs/tools/package-management/morph/default.nix b/pkgs/tools/package-management/morph/default.nix
index dfb41df33708..71c9c285f308 100644
--- a/pkgs/tools/package-management/morph/default.nix
+++ b/pkgs/tools/package-management/morph/default.nix
@@ -33,5 +33,6 @@ buildGoModule rec {
     license = licenses.mit;
     homepage = "https://github.com/dbcdk/morph";
     maintainers = with maintainers; [adamt johanot];
+    mainProgram = "morph";
   };
 }
diff --git a/pkgs/tools/package-management/nfpm/default.nix b/pkgs/tools/package-management/nfpm/default.nix
index 9d04dd026404..12facbb5fdba 100644
--- a/pkgs/tools/package-management/nfpm/default.nix
+++ b/pkgs/tools/package-management/nfpm/default.nix
@@ -8,16 +8,16 @@
 
 buildGoModule rec {
   pname = "nfpm";
-  version = "2.34.0";
+  version = "2.35.2";
 
   src = fetchFromGitHub {
     owner = "goreleaser";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-O7qxJ2TE62XDYljqvNsO3ssD/YhfOLfy9zF0W++T0Hw=";
+    hash = "sha256-ic6SOgIE+g7ccvg163xCwTmz960mWYcxN8ghEdB11To=";
   };
 
-  vendorHash = "sha256-qihPtpygHoIfGf2wj+klDWwL4sTHqDxi1jxjv57vUx4=";
+  vendorHash = "sha256-rIgEctBGff5/pzbPPaDgqZCwmIVDjF98wmLBD17KXTM=";
 
   ldflags = [ "-s" "-w" "-X main.version=${version}" ];
 
@@ -40,5 +40,6 @@ buildGoModule rec {
     changelog = "https://github.com/goreleaser/nfpm/releases/tag/v${version}";
     maintainers = with maintainers; [ marsam techknowlogick caarlos0 ];
     license = with licenses; [ mit ];
+    mainProgram = "nfpm";
   };
 }
diff --git a/pkgs/tools/package-management/niff/default.nix b/pkgs/tools/package-management/niff/default.nix
index 93406095df25..827d4353f283 100644
--- a/pkgs/tools/package-management/niff/default.nix
+++ b/pkgs/tools/package-management/niff/default.nix
@@ -30,5 +30,6 @@ in stdenv.mkDerivation {
     homepage = "https://github.com/FRidh/niff";
     license = lib.licenses.mit;
     maintainers = [ lib.maintainers.fridh ];
+    mainProgram = "niff";
   };
 }
diff --git a/pkgs/tools/package-management/nix-doc/default.nix b/pkgs/tools/package-management/nix-doc/default.nix
index 2d0815e8af9b..8a4e523e98b5 100644
--- a/pkgs/tools/package-management/nix-doc/default.nix
+++ b/pkgs/tools/package-management/nix-doc/default.nix
@@ -2,13 +2,13 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "nix-doc";
-  version = "0.6.2";
+  version = "0.6.4";
 
   src = fetchFromGitHub {
     rev = "v${version}";
     owner = "lf-";
     repo = "nix-doc";
-    sha256 = "sha256-H81U0gR/7oWjP1z7JC8tTek+tqzTwyJWgaJQOSyNn5M=";
+    sha256 = "sha256-yL0oG0NiQ7OdGQ/kZxQbSbNphKapu5HBFNP5E2fVe+Y=";
   };
 
   doCheck = true;
@@ -29,7 +29,7 @@ rustPlatform.buildRustPackage rec {
     RUSTFLAGS = "-Z relro-level=partial";
   };
 
-  cargoSha256 = "sha256-yYVDToPLhGUYLrPNyyKwsYXe3QOTR26wtl3SCw4Za5s=";
+  cargoSha256 = "sha256-4bzLZt45ZLTZyZPZ4Nkvz7mNe4oqOIoaZUbCbNWBKG0=";
 
   meta = with lib; {
     description = "An interactive Nix documentation tool";
@@ -38,5 +38,6 @@ rustPlatform.buildRustPackage rec {
     license = licenses.lgpl3Plus;
     maintainers = [ maintainers.lf- ];
     platforms = platforms.unix;
+    mainProgram = "nix-doc";
   };
 }
diff --git a/pkgs/tools/package-management/nix-du/default.nix b/pkgs/tools/package-management/nix-du/default.nix
index dcd1e24ff34a..a3a1f0d97108 100644
--- a/pkgs/tools/package-management/nix-du/default.nix
+++ b/pkgs/tools/package-management/nix-du/default.nix
@@ -12,16 +12,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "nix-du";
-  version = "1.1.1";
+  version = "1.2.0";
 
   src = fetchFromGitHub {
     owner = "symphorien";
     repo = "nix-du";
     rev = "v${version}";
-    sha256 = "sha256-LI9XWqi3ihcmUBjScQVQbn30e5eLaCYwkmnbj7Y8kuU=";
+    sha256 = "sha256-HfmMZVlsdg9hTWGUihl6OlQAp/n1XRvPLfAKJ8as8Ew=";
   };
 
-  cargoSha256 = "sha256-AM89yYeEsYOcHtbSiQgz5qVQhFvDibVxA0ACaE8Gw2Y=";
+  cargoSha256 = "sha256-oUxxuBqec4aI2h8BAn1WSA44UU7f5APkv0DIwuSun0M=";
 
   doCheck = true;
   nativeCheckInputs = [ nix graphviz ];
@@ -34,11 +34,17 @@ rustPlatform.buildRustPackage rec {
 
   nativeBuildInputs = [ pkg-config rustPlatform.bindgenHook ];
 
+  # Workaround for https://github.com/NixOS/nixpkgs/issues/166205
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
   meta = with lib; {
     description = "A tool to determine which gc-roots take space in your nix store";
     homepage = "https://github.com/symphorien/nix-du";
     license = licenses.lgpl3Only;
     maintainers = [ maintainers.symphorien ];
     platforms = platforms.unix;
+    mainProgram = "nix-du";
   };
 }
diff --git a/pkgs/tools/package-management/nix-eval-jobs/default.nix b/pkgs/tools/package-management/nix-eval-jobs/default.nix
index 95cfa9a447d2..bf2d48e4adfb 100644
--- a/pkgs/tools/package-management/nix-eval-jobs/default.nix
+++ b/pkgs/tools/package-management/nix-eval-jobs/default.nix
@@ -11,12 +11,12 @@
 }:
 stdenv.mkDerivation rec {
   pname = "nix-eval-jobs";
-  version = "2.18.0";
+  version = "2.19.4";
   src = fetchFromGitHub {
     owner = "nix-community";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-k/yMWbtMHpiNHeR0ihNPV/idOUSRJuhf0RSCodxmOhc=";
+    hash = "sha256-97ZqhTMqnAr1rzEy96faceWzFyWexnYbH1aTfc1y0JE=";
   };
   buildInputs = [
     boost
@@ -42,5 +42,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.gpl3;
     maintainers = with lib.maintainers; [ adisbladis mic92 ];
     platforms = lib.platforms.unix;
+    mainProgram = "nix-eval-jobs";
   };
 }
diff --git a/pkgs/tools/package-management/nix-pin/default.nix b/pkgs/tools/package-management/nix-pin/default.nix
index b924c8c07f4a..59422ff22cc2 100644
--- a/pkgs/tools/package-management/nix-pin/default.nix
+++ b/pkgs/tools/package-management/nix-pin/default.nix
@@ -46,5 +46,6 @@ let self = stdenv.mkDerivation rec {
     license = licenses.mit;
     maintainers = [ maintainers.timbertson ];
     platforms = platforms.all;
+    mainProgram = "nix-pin";
   };
 }; in self
diff --git a/pkgs/tools/package-management/nix-prefetch/default.nix b/pkgs/tools/package-management/nix-prefetch/default.nix
index ee537733e7cb..8ed71d078b78 100644
--- a/pkgs/tools/package-management/nix-prefetch/default.nix
+++ b/pkgs/tools/package-management/nix-prefetch/default.nix
@@ -76,5 +76,6 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ msteen ];
     homepage = "https://github.com/msteen/nix-prefetch";
     platforms = platforms.all;
+    mainProgram = "nix-prefetch";
   };
 }
diff --git a/pkgs/tools/package-management/nix-serve/default.nix b/pkgs/tools/package-management/nix-serve/default.nix
index 20f374b8d108..a149b490f5aa 100644
--- a/pkgs/tools/package-management/nix-serve/default.nix
+++ b/pkgs/tools/package-management/nix-serve/default.nix
@@ -46,5 +46,6 @@ stdenv.mkDerivation {
     maintainers = [ maintainers.eelco ];
     license = licenses.lgpl21;
     platforms = nix.meta.platforms;
+    mainProgram = "nix-serve";
   };
 }
diff --git a/pkgs/tools/package-management/nix-simple-deploy/default.nix b/pkgs/tools/package-management/nix-simple-deploy/default.nix
index 0077c6c01895..647a11b01fdc 100644
--- a/pkgs/tools/package-management/nix-simple-deploy/default.nix
+++ b/pkgs/tools/package-management/nix-simple-deploy/default.nix
@@ -26,5 +26,6 @@ rustPlatform.buildRustPackage rec {
     platforms = platforms.unix;
     license = with licenses; [ asl20 /* OR */ mit ];
     maintainers = with maintainers; [ misuzu ];
+    mainProgram = "nix-simple-deploy";
   };
 }
diff --git a/pkgs/tools/package-management/nix-template/default.nix b/pkgs/tools/package-management/nix-template/default.nix
index 84afede50fe2..e1431532f857 100644
--- a/pkgs/tools/package-management/nix-template/default.nix
+++ b/pkgs/tools/package-management/nix-template/default.nix
@@ -47,5 +47,6 @@ rustPlatform.buildRustPackage rec {
     changelog = "https://github.com/jonringer/nix-template/releases/tag/v${version}";
     license = licenses.cc0;
     maintainers = with maintainers; [ jonringer ];
+    mainProgram = "nix-template";
   };
 }
diff --git a/pkgs/tools/package-management/nix-top/default.nix b/pkgs/tools/package-management/nix-top/default.nix
index 523f15bd4662..dc49f2a739e9 100644
--- a/pkgs/tools/package-management/nix-top/default.nix
+++ b/pkgs/tools/package-management/nix-top/default.nix
@@ -48,5 +48,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     maintainers = with maintainers; [ samueldr ];
     platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "nix-top";
   };
 }
diff --git a/pkgs/tools/package-management/nix-universal-prefetch/default.nix b/pkgs/tools/package-management/nix-universal-prefetch/default.nix
index 69ebf1c7cd00..be31ca34ad60 100644
--- a/pkgs/tools/package-management/nix-universal-prefetch/default.nix
+++ b/pkgs/tools/package-management/nix-universal-prefetch/default.nix
@@ -28,5 +28,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     maintainers = with maintainers; [ samueldr ];
     platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "nix-universal-prefetch";
   };
 }
diff --git a/pkgs/tools/package-management/nix-update-source/default.nix b/pkgs/tools/package-management/nix-update-source/default.nix
index ebfd730544e1..533f487e3974 100644
--- a/pkgs/tools/package-management/nix-update-source/default.nix
+++ b/pkgs/tools/package-management/nix-update-source/default.nix
@@ -54,5 +54,6 @@ python3Packages.buildPythonApplication rec {
     description = "Utility to automate updating of nix derivation sources";
     maintainers = with lib.maintainers; [ timbertson ];
     license = lib.licenses.mit;
+    mainProgram = "nix-update-source";
   };
 }
diff --git a/pkgs/tools/package-management/nix/common.nix b/pkgs/tools/package-management/nix/common.nix
index 798c7cc918d5..670e2282aa20 100644
--- a/pkgs/tools/package-management/nix/common.nix
+++ b/pkgs/tools/package-management/nix/common.nix
@@ -1,10 +1,12 @@
-{ lib, fetchFromGitHub
+{ lib
+, fetchFromGitHub
 , version
 , suffix ? ""
 , hash ? null
 , src ? fetchFromGitHub { owner = "NixOS"; repo = "nix"; rev = version; inherit hash; }
 , patches ? [ ]
-}:
+, maintainers ? with lib.maintainers; [ eelco lovesegfault artturin ]
+}@args:
 assert (hash == null) -> (src != null);
 let
   atLeast24 = lib.versionAtLeast version "2.4pre";
@@ -27,6 +29,8 @@ in
 , callPackage
 , coreutils
 , curl
+, docbook_xsl_ns
+, docbook5
 , editline
 , flex
 , gnutar
@@ -37,6 +41,8 @@ in
 , libarchive
 , libcpuid
 , libsodium
+, libxml2
+, libxslt
 , lowdown
 , mdbook
 , mdbook-linkcheck
@@ -86,13 +92,17 @@ self = stdenv.mkDerivation {
 
   nativeBuildInputs = [
     pkg-config
-  ] ++ lib.optionals atLeast24 [
     autoconf-archive
     autoreconfHook
     bison
     flex
     jq
-  ] ++ lib.optionals (atLeast24 && enableDocumentation) [
+  ] ++ lib.optionals (enableDocumentation && !atLeast24) [
+    libxslt
+    libxml2
+    docbook_xsl_ns
+    docbook5
+  ] ++ lib.optionals (enableDocumentation && atLeast24) [
     (lib.getBin lowdown)
     mdbook
   ] ++ lib.optionals (atLeast213 && enableDocumentation) [
@@ -111,13 +121,12 @@ self = stdenv.mkDerivation {
     openssl
     sqlite
     xz
-  ] ++ lib.optionals stdenv.isDarwin [
-    Security
-  ] ++ lib.optionals atLeast24 [
     gtest
     libarchive
     lowdown
-  ] ++ lib.optionals (atLeast24 && stdenv.isx86_64) [
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ] ++ lib.optionals (stdenv.isx86_64) [
     libcpuid
   ] ++ lib.optionals atLeast214 [
     rapidcheck
@@ -133,13 +142,6 @@ self = stdenv.mkDerivation {
     nlohmann_json
   ];
 
-  NIX_LDFLAGS = lib.optionals (!atLeast24) [
-    # https://github.com/NixOS/nix/commit/3e85c57a6cbf46d5f0fe8a89b368a43abd26daba
-    (lib.optionalString enableStatic "-lssl -lbrotlicommon -lssh2 -lz -lnghttp2 -lcrypto")
-    # https://github.com/NixOS/nix/commits/74b4737d8f0e1922ef5314a158271acf81cd79f8
-    (lib.optionalString (stdenv.hostPlatform.system == "armv5tel-linux" || stdenv.hostPlatform.system == "armv6l-linux") "-latomic")
-  ];
-
   postPatch = ''
     patchShebangs --build tests
   '';
@@ -180,11 +182,6 @@ self = stdenv.mkDerivation {
     "--enable-gc"
   ] ++ lib.optionals (!enableDocumentation) [
     "--disable-doc-gen"
-  ] ++ lib.optionals (!atLeast24) [
-    # option was removed in 2.4
-    "--disable-init-state"
-  ] ++ lib.optionals atLeast214 [
-    "CXXFLAGS=-I${lib.getDev rapidcheck}/extras/gtest/include"
   ] ++ lib.optionals stdenv.isLinux [
     "--with-sandbox-shell=${busybox-sandbox-shell}/bin/busybox"
   ] ++ lib.optionals (atLeast210 && stdenv.isLinux && stdenv.hostPlatform.isStatic) [
@@ -216,6 +213,11 @@ self = stdenv.mkDerivation {
   preInstallCheck = lib.optionalString stdenv.isDarwin ''
     export TMPDIR=$NIX_BUILD_TOP
   ''
+  # Prevent crashes in libcurl due to invoking Objective-C `+initialize` methods after `fork`.
+  # See http://sealiesoftware.com/blog/archive/2017/6/5/Objective-C_and_fork_in_macOS_1013.html.
+  + lib.optionalString stdenv.isDarwin ''
+    export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
+  ''
   # See https://github.com/NixOS/nix/issues/5687
   + lib.optionalString (atLeast25 && stdenv.isDarwin) ''
     echo "exit 99" > tests/gc-non-blocking.sh
@@ -235,6 +237,9 @@ self = stdenv.mkDerivation {
     };
   };
 
+  # point 'nix edit' and ofborg at the file that defines the attribute,
+  # not this common file.
+  pos = builtins.unsafeGetAttrPos "version" args;
   meta = with lib; {
     description = "Powerful package manager that makes package management reliable and reproducible";
     longDescription = ''
@@ -246,7 +251,7 @@ self = stdenv.mkDerivation {
     '';
     homepage = "https://nixos.org/";
     license = licenses.lgpl2Plus;
-    maintainers = with maintainers; [ eelco lovesegfault artturin ];
+    inherit maintainers;
     platforms = platforms.unix;
     outputsToInstall = [ "out" ] ++ optional enableDocumentation "man";
     mainProgram = "nix";
diff --git a/pkgs/tools/package-management/nix/default.nix b/pkgs/tools/package-management/nix/default.nix
index 2bf354fbc69f..c3f970f78fb3 100644
--- a/pkgs/tools/package-management/nix/default.nix
+++ b/pkgs/tools/package-management/nix/default.nix
@@ -4,7 +4,6 @@
 , boehmgc
 , callPackage
 , fetchFromGitHub
-, fetchurl
 , fetchpatch
 , fetchpatch2
 , runCommand
@@ -113,6 +112,13 @@ let
     hash = "sha256-s1ybRFCjQaSGj7LKu0Z5g7UiHqdJGeD+iPoQL0vaiS0=";
   };
 
+  patch-rapidcheck-shared = fetchpatch2 {
+    # https://github.com/NixOS/nix/pull/9431
+    name = "fix-missing-librapidcheck.patch";
+    url = "https://github.com/NixOS/nix/commit/46131567da96ffac298b9ec54016b37114b0dfd5.patch";
+    hash = "sha256-lShYxYKRDWwBqCysAFmFBudhhAL1eendWcL8sEFLCGg=";
+  };
+
   # Intentionally does not support overrideAttrs etc
   # Use only for tests that are about the package relation to `pkgs` and/or NixOS.
   addTestsShallowly = tests: pkg: pkg // {
@@ -145,15 +151,13 @@ let
     pkg;
 
 in lib.makeExtensible (self: ({
-  nix_2_3 = (common rec {
-    version = "2.3.16";
-    src = fetchurl {
-      url = "https://nixos.org/releases/nix/nix-${version}/nix-${version}.tar.xz";
-      hash = "sha256-fuaBtp8FtSVJLSAsO+3Nne4ZYLuBj2JpD2xEk7fCqrw=";
-    };
+  nix_2_3 = (common {
+    version = "2.3.17";
+    hash = "sha256-EK0pgHDekJFqr0oMj+8ANIjq96WPjICe2s0m4xkUdH4=";
     patches = [
       patch-monitorfdhup
     ];
+    maintainers = with lib.maintainers; [ flokli raitobezarius ];
   }).override { boehmgc = boehmgc-nix_2_3; };
 
   nix_2_10 = common {
@@ -196,26 +200,46 @@ in lib.makeExtensible (self: ({
   nix_2_14 = common {
     version = "2.14.1";
     hash = "sha256-5aCmGZbsFcLIckCDfvnPD4clGPQI7qYAqHYlttN/Wkg=";
+    patches = [
+      patch-rapidcheck-shared
+    ];
   };
 
   nix_2_15 = common {
     version = "2.15.3";
     hash = "sha256-sfFXbjC5iIdSAbctZIuFozxX0uux/KFBNr9oh33xINs=";
+    patches = [
+      patch-rapidcheck-shared
+    ];
   };
 
   nix_2_16 = common {
     version = "2.16.2";
     hash = "sha256-VXIYCDkvAWeMoU0W2ZI0TeOszCZA1o8trz6YCPFD5ac=";
+    patches = [
+      patch-rapidcheck-shared
+    ];
   };
 
   nix_2_17 = common {
     version = "2.17.1";
     hash = "sha256-Q5L+rHzjp0bYuR2ogg+YPCn6isjmlQ4CJVT0zpn/hFc=";
+    patches = [
+      patch-rapidcheck-shared
+    ];
   };
 
   nix_2_18 = common {
     version = "2.18.1";
     hash = "sha256-WNmifcTsN9aG1ONkv+l2BC4sHZZxtNKy0keqBHXXQ7w=";
+    patches = [
+      patch-rapidcheck-shared
+    ];
+  };
+
+  nix_2_19 = common {
+    version = "2.19.3";
+    hash = "sha256-EtL6M0H5+0mFbFh+teVjm+0B+xmHoKwtBvigS5NMWoo=";
   };
 
   # The minimum Nix version supported by Nixpkgs
@@ -237,7 +261,7 @@ in lib.makeExtensible (self: ({
 
   stable = addFallbackPathsCheck self.nix_2_18;
 
-  unstable = self.nix_2_18;
+  unstable = self.nix_2_19;
 } // lib.optionalAttrs config.allowAliases {
   nix_2_4 = throw "nixVersions.nix_2_4 has been removed";
 
diff --git a/pkgs/tools/package-management/npm-check-updates/default.nix b/pkgs/tools/package-management/npm-check-updates/default.nix
index 93585593a494..7f88dc4e4e00 100644
--- a/pkgs/tools/package-management/npm-check-updates/default.nix
+++ b/pkgs/tools/package-management/npm-check-updates/default.nix
@@ -5,16 +5,16 @@
 
 buildNpmPackage rec {
   pname = "npm-check-updates";
-  version = "16.13.0";
+  version = "16.14.12";
 
   src = fetchFromGitHub {
     owner = "raineorshine";
     repo = "npm-check-updates";
     rev = "v${version}";
-    hash = "sha256-RrNO1TAPNFB/6JWY8xZjNCZ+FDgM0MCn7vaDXoCSIfI=";
+    hash = "sha256-3/DaEgPF9+wofYqA1XrJul4/cNGuGeXAeRg0HW0O+Ok=";
   };
 
-  npmDepsHash = "sha256-aghW4d3/8cJmwpmI5PcHioCnc91Yu4N5EfwuoaB5Xqw=";
+  npmDepsHash = "sha256-zUJKuiMycVCuXMh6caMzmi6qpgknVsvmqV3XykhlSBI=";
 
   meta = {
     changelog = "https://github.com/raineorshine/npm-check-updates/blob/${src.rev}/CHANGELOG.md";
diff --git a/pkgs/tools/package-management/packagekit/qt.nix b/pkgs/tools/package-management/packagekit/qt.nix
index 72045735cba3..897f8d9e7b4a 100644
--- a/pkgs/tools/package-management/packagekit/qt.nix
+++ b/pkgs/tools/package-management/packagekit/qt.nix
@@ -1,7 +1,9 @@
-{ stdenv, fetchFromGitHub, cmake, pkg-config
+{ stdenv, lib, fetchFromGitHub, cmake, pkg-config
 , qttools, packagekit }:
 
-stdenv.mkDerivation rec {
+let
+  isQt6 = lib.versions.major qttools.version == "6";
+in stdenv.mkDerivation rec {
   pname = "packagekit-qt";
   version = "1.1.1";
 
@@ -16,6 +18,8 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ cmake pkg-config qttools ];
 
+  cmakeFlags = [ (lib.cmakeBool "BUILD_WITH_QT6" isQt6) ];
+
   dontWrapQtApps = true;
 
   meta = packagekit.meta // {
diff --git a/pkgs/tools/package-management/pacman/default.nix b/pkgs/tools/package-management/pacman/default.nix
index f9a7fcdcde59..800e392f0f24 100644
--- a/pkgs/tools/package-management/pacman/default.nix
+++ b/pkgs/tools/package-management/pacman/default.nix
@@ -48,9 +48,12 @@ stdenv.mkDerivation rec {
     hash = "sha256-fY4+jFEhrsCWXfcfWb7fRgUsbPFPljZcRBHsPeCkwaU=";
   };
 
+  strictDeps = true;
+
   nativeBuildInputs = [
     asciidoc
     installShellFiles
+    libarchive
     makeWrapper
     meson
     ninja
diff --git a/pkgs/tools/package-management/pacup/default.nix b/pkgs/tools/package-management/pacup/default.nix
index 70c1fba6c698..7afd4eb815d7 100644
--- a/pkgs/tools/package-management/pacup/default.nix
+++ b/pkgs/tools/package-management/pacup/default.nix
@@ -41,5 +41,6 @@ python3.pkgs.buildPythonApplication rec {
     changelog = "https://github.com/pacstall/pacup/releases/tag/${version}";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ zahrun ];
+    mainProgram = "pacup";
   };
 }
diff --git a/pkgs/tools/package-management/pdm/default.nix b/pkgs/tools/package-management/pdm/default.nix
index aabdf1724411..7395bffd8458 100644
--- a/pkgs/tools/package-management/pdm/default.nix
+++ b/pkgs/tools/package-management/pdm/default.nix
@@ -32,25 +32,16 @@ in
 with python.pkgs;
 buildPythonApplication rec {
   pname = "pdm";
-  version = "2.10.1";
-  format = "pyproject";
-  disabled = pythonOlder "3.7";
+  version = "2.12.2";
+  pyproject = true;
+
+  disabled = pythonOlder "3.8";
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-0WZTHGWfxJBZM1RlRN0uFs9kjCum2JjIISatakIReoE=";
+    hash = "sha256-s8pKsQetZbV/4TEuQ2Dh97PXxe2BqEG27Uizd3hi7Vc=";
   };
 
-  patches = [
-    # https://github.com/NixOS/nixpkgs/issues/265883
-    # https://github.com/pdm-project/pdm/pull/2379
-    (fetchpatch {
-      name = "fix-template-permission.patch";
-      url = "https://github.com/pdm-project/pdm/commit/f0efdcefe589bc58c28ccf6ce2d23cad9a81dccc.patch";
-      hash = "sha256-NnHDSz2N63JzSzh2t9a5f/QQWM6Hyd5Cn5JY2zem6Ac=";
-    })
-  ];
-
   nativeBuildInputs = [
     pdm-backend
   ];
@@ -59,6 +50,7 @@ buildPythonApplication rec {
     blinker
     certifi
     cachecontrol
+    dep-logic
     findpython
     installer
     packaging
@@ -79,6 +71,9 @@ buildPythonApplication rec {
   ]
   ++ lib.optionals (pythonOlder "3.10") [
     importlib-metadata
+  ]
+  ++ lib.optionals (pythonAtLeast "3.10") [
+    truststore
   ];
 
   nativeCheckInputs = [
diff --git a/pkgs/tools/package-management/pkg/default.nix b/pkgs/tools/package-management/pkg/default.nix
index 9ca25dd31c38..b100b9984915 100644
--- a/pkgs/tools/package-management/pkg/default.nix
+++ b/pkgs/tools/package-management/pkg/default.nix
@@ -32,5 +32,6 @@ stdenv.mkDerivation (finalAttrs: {
     maintainers = with maintainers; [ qyliss ];
     platforms = with platforms; darwin ++ freebsd ++ linux ++ netbsd ++ openbsd;
     license = licenses.bsd2;
+    mainProgram = "pkg";
   };
 })
diff --git a/pkgs/tools/package-management/poetry/default.nix b/pkgs/tools/package-management/poetry/default.nix
index f4a10a8ff2ef..75cede5df7d3 100644
--- a/pkgs/tools/package-management/poetry/default.nix
+++ b/pkgs/tools/package-management/poetry/default.nix
@@ -1,8 +1,8 @@
-{ python3, fetchFromGitHub }:
+{ lib, python3, fetchFromGitHub }:
 
 let
-  python = python3.override {
-    packageOverrides = self: super: rec {
+  newPackageOverrides =
+    self: super: {
       poetry = self.callPackage ./unwrapped.nix { };
 
       # The versions of Poetry and poetry-core need to match exactly,
@@ -12,16 +12,19 @@ let
       # We keep the override around even when the versions match, as
       # it's likely to become relevant again after the next Poetry update.
       poetry-core = super.poetry-core.overridePythonAttrs (old: rec {
-        version = poetry.version;
+        version = "1.8.1";
         src = fetchFromGitHub {
           owner = "python-poetry";
           repo = "poetry-core";
           rev = version;
-          hash = "sha256-OfY2zc+5CgOrgbiPVnvMdT4h1S7Aek8S7iThl6azmsk=";
+          hash = "sha256-RnCJ67jaL2knwv+Uo7p0zOejHAT73f40weaJnfqOYoM=";
         };
       });
     } // (plugins self);
-  };
+  python = python3.override (old: {
+    packageOverrides = lib.composeManyExtensions
+      ((if old ? packageOverrides then [ old.packageOverrides ] else [ ]) ++ [ newPackageOverrides ]);
+  });
 
   plugins = ps: with ps; {
     poetry-audit-plugin = callPackage ./plugins/poetry-audit-plugin.nix { };
diff --git a/pkgs/tools/package-management/poetry/plugins/poetry-plugin-export.nix b/pkgs/tools/package-management/poetry/plugins/poetry-plugin-export.nix
index d040c32c4834..b4ede0bdedaa 100644
--- a/pkgs/tools/package-management/poetry/plugins/poetry-plugin-export.nix
+++ b/pkgs/tools/package-management/poetry/plugins/poetry-plugin-export.nix
@@ -6,14 +6,14 @@
 
 buildPythonPackage rec {
   pname = "poetry-plugin-export";
-  version = "1.5.0";
+  version = "1.6.0";
   format = "pyproject";
 
   src = fetchFromGitHub {
     owner = "python-poetry";
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-bX7Mqpe7SYQQVrPNVOl8Bwmeiq7owIiUhw0sp5+Gwck=";
+    hash = "sha256-6U96O0mCQpviBr4I67ZfHytsooXG4oCNTx8YqrrIzYo=";
   };
 
   postPatch = ''
@@ -33,6 +33,6 @@ buildPythonPackage rec {
     description = "Poetry plugin to export the dependencies to various formats";
     license = licenses.mit;
     homepage = "https://github.com/python-poetry/poetry-plugin-export";
-    maintainers = with maintainers; [ hexa ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix b/pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix
index e737173a857e..77b6e44c9273 100644
--- a/pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix
+++ b/pkgs/tools/package-management/poetry/plugins/poetry-plugin-up.nix
@@ -9,14 +9,14 @@
 
 buildPythonPackage rec {
   pname = "poetry-plugin-up";
-  version = "0.7.0";
+  version = "0.7.1";
   format = "pyproject";
 
   src = fetchFromGitHub {
     owner = "MousaZeidBaker";
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-RjyRnCrHLKBJm8WMzQd0WcfpO8Ve+ydvUTN4EnVunlI=";
+    hash = "sha256-ProwMnkg8LaPvb4aYyO1PR30iMSNE9oyKgCIX4O5j+E=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/tools/package-management/poetry/unwrapped.nix b/pkgs/tools/package-management/poetry/unwrapped.nix
index 751db3ceec99..f13a7715464b 100644
--- a/pkgs/tools/package-management/poetry/unwrapped.nix
+++ b/pkgs/tools/package-management/poetry/unwrapped.nix
@@ -3,7 +3,6 @@
 , buildPythonPackage
 , pythonOlder
 , fetchFromGitHub
-, fetchpatch
 , installShellFiles
 , pythonRelaxDepsHook
 , build
@@ -11,8 +10,8 @@
 , cleo
 , crashtest
 , dulwich
+, fastjsonschema
 , installer
-, jsonschema
 , keyring
 , packaging
 , pexpect
@@ -38,11 +37,12 @@
 , pytest-mock
 , pytest-xdist
 , pythonAtLeast
+, darwin
 }:
 
 buildPythonPackage rec {
   pname = "poetry";
-  version = "1.6.1";
+  version = "1.7.1";
   format = "pyproject";
 
   disabled = pythonOlder "3.8";
@@ -51,26 +51,19 @@ buildPythonPackage rec {
     owner = "python-poetry";
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-/OvYT4Vix1t5Yx/Tx0z3E9L9qJ4OdI4maQqUVl8H524=";
+    hash = "sha256-PM3FIZYso7p0Oe0RpiPuxHrQrgnMlkT5SVeaJPK/J94=";
   };
 
-  patches = [
-    # Backport patch to fix pypa/build 1.0 incompatibility
-    # FIXME: remove in next release
-    (fetchpatch {
-      url = "https://github.com/python-poetry/poetry/commit/a16863d1a448ff91a7cc4e48042d3a8669b78b34.patch";
-      hash = "sha256-dWa5W1jFS7h5cTgoFy89o1Rbtmyddvme4sus+lld058=";
-    })
-  ];
-
   nativeBuildInputs = [
     installShellFiles
     pythonRelaxDepsHook
   ];
 
   pythonRelaxDeps = [
-    # only pinned to avoid dependency on Rust
-    "jsonschema"
+    # platformdirs 4.x is backwards compatible; https://github.com/python-poetry/poetry/commit/eb80d10846f7336b0b2a66ce2964e72dffee9a1c
+    "platformdirs"
+    # xattr 1.0 is backwards compatible modulo dropping Python 2 support: https://github.com/xattr/xattr/compare/v0.10.0...v1.0.0
+    "xattr"
   ];
 
   propagatedBuildInputs = [
@@ -79,8 +72,8 @@ buildPythonPackage rec {
     cleo
     crashtest
     dulwich
+    fastjsonschema
     installer
-    jsonschema
     keyring
     packaging
     pexpect
@@ -118,6 +111,8 @@ buildPythonPackage rec {
     httpretty
     pytest-mock
     pytest-xdist
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.ps
   ];
 
   preCheck = (''
@@ -132,6 +127,8 @@ buildPythonPackage rec {
   '';
 
   disabledTests = [
+    "test_env_system_packages_are_relative_to_lib"
+    "test_install_warning_corrupt_root"
     "test_installer_with_pypi_repository"
     # touches network
     "git"
@@ -148,6 +145,7 @@ buildPythonPackage rec {
     # fs permission errors
     "test_builder_should_execute_build_scripts"
     # poetry.installation.chef.ChefBuildError: Backend 'poetry.core.masonry.api' is not available.
+    "test_isolated_env_install_success"
     "test_prepare_sdist"
     "test_prepare_directory"
     "test_prepare_directory_with_extensions"
@@ -173,5 +171,6 @@ buildPythonPackage rec {
     description = "Python dependency management and packaging made easy";
     license = licenses.mit;
     maintainers = with maintainers; [ jakewaksbaum dotlambda ];
+    mainProgram = "poetry";
   };
 }
diff --git a/pkgs/tools/package-management/poetry2conda/default.nix b/pkgs/tools/package-management/poetry2conda/default.nix
index 86e66def4868..7aa821d678ac 100644
--- a/pkgs/tools/package-management/poetry2conda/default.nix
+++ b/pkgs/tools/package-management/poetry2conda/default.nix
@@ -43,5 +43,6 @@ with python3.pkgs; buildPythonApplication rec {
     homepage = "https://github.com/dojeda/poetry2conda";
     license = licenses.mit;
     maintainers = with maintainers; [ cpcloud ];
+    mainProgram = "poetry2conda";
   };
 }
diff --git a/pkgs/tools/package-management/protontricks/default.nix b/pkgs/tools/package-management/protontricks/default.nix
index b8689fdf9966..462a2546ff5d 100644
--- a/pkgs/tools/package-management/protontricks/default.nix
+++ b/pkgs/tools/package-management/protontricks/default.nix
@@ -4,7 +4,9 @@
 , setuptools-scm
 , setuptools
 , vdf
-, bash
+, pillow
+, substituteAll
+, writeShellScript
 , steam-run
 , winetricks
 , yad
@@ -14,36 +16,41 @@
 
 buildPythonApplication rec {
   pname = "protontricks";
-  version = "1.10.1";
+  version = "1.11.0";
 
   src = fetchFromGitHub {
     owner = "Matoking";
     repo = pname;
     rev = version;
-    sha256 = "sha256-gKrdUwX5TzeHHXuwhUyI4REPE6TNiZ6lhonyMCHcBCA=";
+    sha256 = "sha256-5FpcIaQodvNjdqUfD9hvXlrdhszr98j0zm3MCCpZFoc=";
   };
 
   patches = [
     # Use steam-run to run Proton binaries
-    ./steam-run.patch
+    (substituteAll {
+      src = ./steam-run.patch;
+      steamRun = lib.getExe steam-run;
+      bash = writeShellScript "steam-run-bash" ''
+        exec ${lib.getExe steam-run} bash "$@"
+      '';
+    })
   ];
 
-  SETUPTOOLS_SCM_PRETEND_VERSION = version;
-
   nativeBuildInputs = [ setuptools-scm ];
 
   propagatedBuildInputs = [
     setuptools # implicit dependency, used to find data/icon_placeholder.png
     vdf
+    pillow
   ];
 
   makeWrapperArgs = [
     "--prefix PATH : ${lib.makeBinPath [
-      bash
-      steam-run
       winetricks
       yad
     ]}"
+    # Steam Runtime does not work outside of steam-run, so don't use it
+    "--set STEAM_RUNTIME 0"
   ];
 
   nativeCheckInputs = [ pytestCheckHook ];
diff --git a/pkgs/tools/package-management/protontricks/steam-run.patch b/pkgs/tools/package-management/protontricks/steam-run.patch
index bcc1fc989836..3c865746377a 100644
--- a/pkgs/tools/package-management/protontricks/steam-run.patch
+++ b/pkgs/tools/package-management/protontricks/steam-run.patch
@@ -1,470 +1,65 @@
-diff --git a/src/protontricks/cli/main.py b/src/protontricks/cli/main.py
-index c77d287..236c2a9 100755
---- a/src/protontricks/cli/main.py
-+++ b/src/protontricks/cli/main.py
-@@ -17,8 +17,7 @@ from ..flatpak import (FLATPAK_BWRAP_COMPATIBLE_VERSION,
-                        get_running_flatpak_version)
- from ..gui import (prompt_filesystem_access, select_steam_app_with_gui,
-                    select_steam_installation)
--from ..steam import (find_legacy_steam_runtime_path, find_proton_app,
--                     find_steam_installations, get_steam_apps,
-+from ..steam import (find_proton_app, find_steam_installations, get_steam_apps,
-                      get_steam_lib_paths)
- from ..util import run_command
- from ..winetricks import get_winetricks_path
-@@ -67,8 +66,7 @@ def main(args=None, steam_path=None, steam_root=None):
-             "WINE: path to a custom 'wine' executable\n"
-             "WINESERVER: path to a custom 'wineserver' executable\n"
-             "STEAM_RUNTIME: 1 = enable Steam Runtime, 0 = disable Steam "
--            "Runtime, valid path = custom Steam Runtime path, "
--            "empty = enable automatically (default)\n"
-+            "Runtime, empty = enable automatically (default)\n"
-             "PROTONTRICKS_GUI: GUI provider to use, accepts either 'yad' "
-             "or 'zenity'"
-         ),
-@@ -204,17 +202,9 @@ def main(args=None, steam_path=None, steam_root=None):
-         if not steam_path:
-             exit_("No Steam installation was selected.")
- 
--    # 2. Find the pre-installed legacy Steam Runtime if enabled
--    legacy_steam_runtime_path = None
--    use_steam_runtime = True
--
-+    # 2. Use Steam Runtime if enabled
-     if os.environ.get("STEAM_RUNTIME", "") != "0" and not args.no_runtime:
--        legacy_steam_runtime_path = find_legacy_steam_runtime_path(
--            steam_root=steam_root
--        )
--
--        if not legacy_steam_runtime_path:
--            exit_("Steam Runtime was enabled but couldn't be found!")
-+        use_steam_runtime = True
-     else:
-         use_steam_runtime = False
-         logger.info("Steam Runtime disabled.")
-@@ -281,7 +271,6 @@ def main(args=None, steam_path=None, steam_root=None):
-             proton_app=proton_app,
-             steam_app=steam_app,
-             use_steam_runtime=use_steam_runtime,
--            legacy_steam_runtime_path=legacy_steam_runtime_path,
-             command=[str(winetricks_path), "--gui"],
-             use_bwrap=use_bwrap,
-             start_wineserver=start_background_wineserver
-@@ -361,7 +350,6 @@ def main(args=None, steam_path=None, steam_root=None):
-             proton_app=proton_app,
-             steam_app=steam_app,
-             use_steam_runtime=use_steam_runtime,
--            legacy_steam_runtime_path=legacy_steam_runtime_path,
-             use_bwrap=use_bwrap,
-             start_wineserver=start_background_wineserver,
-             command=[str(winetricks_path)] + args.winetricks_command
-@@ -373,7 +361,6 @@ def main(args=None, steam_path=None, steam_root=None):
-             steam_app=steam_app,
-             command=args.command,
-             use_steam_runtime=use_steam_runtime,
--            legacy_steam_runtime_path=legacy_steam_runtime_path,
-             use_bwrap=use_bwrap,
-             start_wineserver=start_background_wineserver,
-             # Pass the command directly into the shell *without*
 diff --git a/src/protontricks/data/scripts/bwrap_launcher.sh b/src/protontricks/data/scripts/bwrap_launcher.sh
-index b5552e1..b11bc99 100644
+index 922c59d..54742a4 100644
 --- a/src/protontricks/data/scripts/bwrap_launcher.sh
 +++ b/src/protontricks/data/scripts/bwrap_launcher.sh
 @@ -1,4 +1,4 @@
 -#!/bin/bash
-+#!/usr/bin/env bash
++#!@bash@
  # Helper script
  set -o errexit
  
-@@ -80,6 +80,8 @@ done
- log_info "Following directories will be mounted inside container: ${mount_dirs[*]}"
- log_info "Using temporary directory: $PROTONTRICKS_TEMP_PATH"
- 
--exec "$STEAM_RUNTIME_PATH"/run --share-pid --launcher \
-+exec steam-run "$STEAM_RUNTIME_PATH"/pressure-vessel/bin/pressure-vessel-wrap \
-+--variable-dir="${PRESSURE_VESSEL_VARIABLE_DIR:-$STEAM_RUNTIME_PATH/var}" \
-+--share-pid --launcher \
- "${mount_params[@]}" -- \
- --bus-name="com.github.Matoking.protontricks.App${STEAM_APPID}_${PROTONTRICKS_SESSION_ID}"
 diff --git a/src/protontricks/data/scripts/wine_launch.sh b/src/protontricks/data/scripts/wine_launch.sh
-index 1f8a432..2d82f2b 100644
+index 1b0a0ce..127f13e 100644
 --- a/src/protontricks/data/scripts/wine_launch.sh
 +++ b/src/protontricks/data/scripts/wine_launch.sh
 @@ -1,4 +1,4 @@
 -#!/bin/bash
-+#!/usr/bin/env -S steam-run bash
++#!@bash@
  # Helper script created by Protontricks to run Wine binaries using Steam Runtime
  set -o errexit
  
-@@ -158,8 +158,8 @@ if [[ -n "$PROTONTRICKS_INSIDE_STEAM_RUNTIME"
-         export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PROTON_LD_LIBRARY_PATH"
-         log_info "Appending to LD_LIBRARY_PATH: $PROTON_LD_LIBRARY_PATH"
-     elif [[ "$PROTONTRICKS_STEAM_RUNTIME" = "legacy" ]]; then
--        export LD_LIBRARY_PATH="$PROTON_LD_LIBRARY_PATH"
--        log_info "LD_LIBRARY_PATH set to $LD_LIBRARY_PATH"
-+        export LD_LIBRARY_PATH="$PROTON_LD_LIBRARY_PATH":"$LD_LIBRARY_PATH"
-+        log_info "Inserting to head of LD_LIBRARY_PATH: $PROTON_LD_LIBRARY_PATH"
-     fi
-     exec "$PROTON_DIST_PATH"/bin/@@name@@ "$@" || :
- elif [[ "$PROTONTRICKS_STEAM_RUNTIME" = "bwrap" ]]; then
 diff --git a/src/protontricks/data/scripts/wineserver_keepalive.sh b/src/protontricks/data/scripts/wineserver_keepalive.sh
-index 8168dae..559de33 100644
+index 8168dae..cb3e7d9 100644
 --- a/src/protontricks/data/scripts/wineserver_keepalive.sh
 +++ b/src/protontricks/data/scripts/wineserver_keepalive.sh
 @@ -1,4 +1,4 @@
 -#!/bin/bash
-+#!/usr/bin/env bash
++#!@bash@
  # A simple keepalive script that will ensure a wineserver process is kept alive
  # for the duration of the Protontricks session.
  # This is accomplished by launching a simple Windows batch script that will
-diff --git a/src/protontricks/steam.py b/src/protontricks/steam.py
-index c39b51d..79de098 100644
---- a/src/protontricks/steam.py
-+++ b/src/protontricks/steam.py
-@@ -14,9 +14,8 @@ from .util import lower_dict
- 
- __all__ = (
-     "COMMON_STEAM_DIRS", "SteamApp", "find_steam_installations",
--    "find_steam_path", "find_legacy_steam_runtime_path",
--    "iter_appinfo_sections", "get_appinfo_sections", "get_tool_appid",
--    "find_steam_compat_tool_app", "find_appid_proton_prefix",
-+    "find_steam_path", "iter_appinfo_sections", "get_appinfo_sections",
-+    "get_tool_appid", "find_steam_compat_tool_app", "find_appid_proton_prefix",
-     "find_proton_app", "get_steam_lib_paths", "get_compat_tool_dirs",
-     "get_custom_compat_tool_installations_in_dir",
-     "get_custom_compat_tool_installations", "find_current_steamid3",
-@@ -393,37 +392,6 @@ def find_steam_path():
-         return None, None
- 
- 
--def find_legacy_steam_runtime_path(steam_root):
--    """
--    Find the legacy Steam Runtime either using the STEAM_RUNTIME env or
--    steam_root
--    """
--    env_steam_runtime = os.environ.get("STEAM_RUNTIME", "")
--
--    if env_steam_runtime == "0":
--        # User has disabled Steam Runtime
--        logger.info("STEAM_RUNTIME is 0. Disabling Steam Runtime.")
--        return None
--    elif env_steam_runtime and Path(env_steam_runtime).is_dir():
--        # User has a custom Steam Runtime
--        logger.info(
--            "Using custom Steam Runtime at %s", env_steam_runtime)
--        return Path(env_steam_runtime)
--    elif env_steam_runtime in ["1", ""]:
--        # User has enabled Steam Runtime or doesn't have STEAM_RUNTIME set;
--        # default to enabled Steam Runtime in either case
--        steam_runtime_path = steam_root / "ubuntu12_32" / "steam-runtime"
--
--        logger.info(
--            "Using default Steam Runtime at %s", str(steam_runtime_path))
--        return steam_runtime_path
--
--    logger.error(
--        "Path in STEAM_RUNTIME doesn't point to a valid Steam Runtime!")
--
--    return None
--
--
- APPINFO_STRUCT_HEADER = "<4sL"
- APPINFO_V27_STRUCT_SECTION = "<LLLLQ20sL"
- APPINFO_V28_STRUCT_SECTION = "<LLLLQ20sL20s"
 diff --git a/src/protontricks/util.py b/src/protontricks/util.py
-index 7e95af5..7dc9a29 100644
+index 9262cd0..00b2b2f 100644
 --- a/src/protontricks/util.py
 +++ b/src/protontricks/util.py
-@@ -8,14 +8,14 @@ import shutil
- import tempfile
- import re
- from pathlib import Path
--from subprocess import PIPE, check_output, run, Popen, DEVNULL
-+from subprocess import PIPE, run, Popen, DEVNULL
- 
- import pkg_resources
- 
- __all__ = (
-     "SUPPORTED_STEAM_RUNTIMES", "lower_dict",
--    "get_legacy_runtime_library_paths", "get_host_library_paths",
--    "RUNTIME_ROOT_GLOB_PATTERNS", "get_runtime_library_paths",
-+    "get_host_library_paths", "RUNTIME_ROOT_GLOB_PATTERNS",
-+    "get_runtime_library_paths",
-     "WINE_SCRIPT_TEMPLATE", "create_wine_bin_dir", "run_command"
- )
- 
-@@ -43,24 +43,6 @@ def lower_dict(d):
-     return {k.lower(): _lower_value(v) for k, v in d.items()}
- 
- 
--def get_legacy_runtime_library_paths(legacy_steam_runtime_path, proton_app):
--    """
--    Get LD_LIBRARY_PATH value to use when running a command using Steam Runtime
--    """
--    steam_runtime_paths = check_output([
--        str(legacy_steam_runtime_path / "run.sh"),
--        "--print-steam-runtime-library-paths"
--    ])
--    steam_runtime_paths = str(steam_runtime_paths, "utf-8")
--    # Add Proton installation directory first into LD_LIBRARY_PATH
--    # so that libwine.so.1 is picked up correctly (see issue #3)
--    return "".join([
--        str(proton_app.proton_dist_path / "lib"), os.pathsep,
--        str(proton_app.proton_dist_path / "lib64"), os.pathsep,
--        steam_runtime_paths
--    ])
--
--
- def get_host_library_paths():
-     """
-     Get host library paths to use when creating the LD_LIBRARY_PATH environment
-@@ -72,7 +54,7 @@ def get_host_library_paths():
+@@ -99,7 +99,7 @@ def get_host_library_paths():
      # Since that command is unavailable with newer Steam Runtime releases,
      # do it ourselves here.
      result = run(
 -        ["/sbin/ldconfig", "-XNv"],
-+        ["steam-run", "ldconfig", "-XNv"],
++        ["@steamRun@", "/sbin/ldconfig", "-XNv"],
          check=True, stdout=PIPE, stderr=PIPE
      )
      lines = result.stdout.decode("utf-8").split("\n")
-@@ -90,7 +72,7 @@ RUNTIME_ROOT_GLOB_PATTERNS = (
- )
- 
- 
--def get_runtime_library_paths(proton_app, use_bwrap=True):
-+def get_runtime_library_paths(proton_app, proton_app_only=True):
-     """
-     Get LD_LIBRARY_PATH value to use when running a command using Steam Runtime
-     """
-@@ -111,7 +93,7 @@ def get_runtime_library_paths(proton_app, use_bwrap=True):
-             f"Could not find Steam Runtime runtime root for {runtime_app.name}"
-         )
- 
--    if use_bwrap:
-+    if proton_app_only:
-         return "".join([
-             str(proton_app.proton_dist_path / "lib"), os.pathsep,
-             str(proton_app.proton_dist_path / "lib64"), os.pathsep
-@@ -313,7 +295,7 @@ def run_command(
-             wine_environ["STEAM_RUNTIME_PATH"] = \
-                 str(proton_app.required_tool_app.install_path)
-             wine_environ["PROTON_LD_LIBRARY_PATH"] = \
--                get_runtime_library_paths(proton_app, use_bwrap=use_bwrap)
-+                get_runtime_library_paths(proton_app, proton_app_only=use_bwrap)
- 
-             runtime_name = proton_app.required_tool_app.name
-             logger.info(
-@@ -337,13 +319,9 @@ def run_command(
-                     "Current Steam Runtime not recognized by Protontricks."
-                 )
-         else:
--            # Legacy Steam Runtime requires a different LD_LIBRARY_PATH
--            # that is produced by a script.
-             wine_environ["PROTONTRICKS_STEAM_RUNTIME"] = "legacy"
-             wine_environ["PROTON_LD_LIBRARY_PATH"] = \
--                get_legacy_runtime_library_paths(
--                    legacy_steam_runtime_path, proton_app
--                )
-+                get_runtime_library_paths(proton_app, proton_app_only=True)
- 
-             # bwrap is not available, so ensure it is not launched even if the
-             # user configured it so
-@@ -353,7 +331,6 @@ def run_command(
-     # configuring the environment and Wine before launching the underlying
-     # Wine binaries.
-     wine_bin_dir = create_wine_bin_dir(proton_app)
--    wine_environ["LEGACY_STEAM_RUNTIME_PATH"] = str(legacy_steam_runtime_path)
-     wine_environ["PATH"] = os.pathsep.join(
-         [str(wine_bin_dir), wine_environ["PATH"]]
-     )
-diff --git a/tests/cli/test_main.py b/tests/cli/test_main.py
-index 0a35f8d..9b96629 100644
---- a/tests/cli/test_main.py
-+++ b/tests/cli/test_main.py
-@@ -121,15 +121,10 @@ class TestCLIRun:
-         assert str(command.args[0]).endswith(".local/bin/winetricks")
-         assert command.args[1] == "winecfg"
-         assert command.env["PATH"].startswith(str(wine_bin_dir))
--        assert (
--            "fake_steam_runtime/lib64" in command.env["PROTON_LD_LIBRARY_PATH"]
--        )
-         assert command.env["WINE"] == str(wine_bin_dir / "wine")
-         assert command.env["WINELOADER"] == str(wine_bin_dir / "wine")
-         assert command.env["WINESERVER"] == str(wine_bin_dir / "wineserver")
- 
--        assert command.env["LEGACY_STEAM_RUNTIME_PATH"] == \
--            str(steam_runtime_dir / "steam-runtime")
-         assert command.env["PROTONTRICKS_STEAM_RUNTIME"] == "legacy"
-         assert "STEAM_RUNTIME_PATH" not in command.env
- 
-@@ -180,16 +175,14 @@ class TestCLIRun:
-         assert command.env["PATH"].startswith(str(wine_bin_dir))
- 
-         # Compared to the traditional Steam Runtime, PROTON_LD_LIBRARY_PATH
--        # will be different
-+        # will be the same (it would be different without steam-run.patch)
-         proton_install_path = Path(proton_app.install_path)
-         assert command.env["PROTON_LD_LIBRARY_PATH"] == "".join([
-             str(proton_install_path / "dist" / "lib"), os.pathsep,
-             str(proton_install_path / "dist" / "lib64"), os.pathsep
-         ])
- 
--        # Environment variables for both legacy and new Steam Runtime exist
--        assert command.env["LEGACY_STEAM_RUNTIME_PATH"] == \
--            str(steam_runtime_dir / "steam-runtime")
-+        # Environment variable for new Steam Runtime exists
-         assert command.env["STEAM_RUNTIME_PATH"] == \
-             str(steam_runtime_soldier.install_path)
-         assert command.env["PROTONTRICKS_STEAM_RUNTIME"] == "bwrap"
-@@ -254,9 +247,7 @@ class TestCLIRun:
-             str(runtime_root / "lib" / "x86_64-linux-gnu")
-         ]))
- 
--        # Environment variables for both legacy and new Steam Runtime exist
--        assert command.env["LEGACY_STEAM_RUNTIME_PATH"] == \
--            str(steam_runtime_dir / "steam-runtime")
-+        # Environment variable for new Steam Runtime exists
-         assert command.env["STEAM_RUNTIME_PATH"] == \
-             str(steam_runtime_soldier.install_path)
-         assert command.env["PROTONTRICKS_STEAM_RUNTIME"] == "legacy"
-@@ -407,7 +398,6 @@ class TestCLIRun:
- 
-         # Also ensure log messages are included in the error message
-         assert b"Found Steam directory at" in message
--        assert b"Using default Steam Runtime" in message
- 
-     def test_run_gui_provider_not_found(self, cli, home_dir, steam_app_factory):
-         """
-@@ -421,20 +411,6 @@ class TestCLIRun:
- 
-         assert "YAD or Zenity is not installed" in result
- 
--    def test_run_steam_runtime_not_found(
--            self, cli, steam_dir, steam_app_factory):
--        """
--        Try performing a command with Steam Runtime enabled but no
--        available Steam Runtime installation
--        """
--        steam_app_factory(name="Fake game 1", appid=10)
--        result = cli(
--            ["10", "winecfg"], env={"STEAM_RUNTIME": "invalid/path"},
--            expect_returncode=1
--        )
--
--        assert "Steam Runtime was enabled but couldn't be found" in result
--
-     def test_run_proton_not_found(self, cli, steam_dir, steam_app_factory):
-         steam_app_factory(name="Fake game 1", appid=10)
-         result = cli(["10", "winecfg"], expect_returncode=1)
 diff --git a/tests/conftest.py b/tests/conftest.py
-index 106e0d9..8236f3a 100644
+index a516437..88bf804 100644
 --- a/tests/conftest.py
 +++ b/tests/conftest.py
-@@ -169,7 +169,7 @@ def steam_runtime_dir(steam_dir):
+@@ -170,7 +170,7 @@ def steam_runtime_dir(steam_dir):
      """
      (steam_dir.parent / "root" / "ubuntu12_32" / "steam-runtime").mkdir(parents=True)
      (steam_dir.parent / "root" / "ubuntu12_32" / "steam-runtime" / "run.sh").write_text(
 -        "#!/bin/bash\n"
-+        "#!/usr/bin/env -S steam-run bash\n"
++        "#!/bin/sh\n"
          """if [ "$1" = "--print-steam-runtime-library-paths" ]; then\n"""
          "    echo 'fake_steam_runtime/lib:fake_steam_runtime/lib64'\n"
          "fi"
-@@ -735,7 +735,7 @@ def xdg_user_dir_bin(home_dir):
+@@ -764,7 +764,7 @@ def xdg_user_dir_bin(home_dir):
      # Only mock PICTURES and DOWNLOAD; mocking everything isn't necessary
      # for the tests.
      (home_dir / ".local" / "bin" / "xdg-user-dir").write_text(
 -        '#!/bin/bash\n'
-+        '#!/usr/bin/env -S steam-run bash\n'
++        '#!/bin/sh\n'
          'if [[ "$1" == "PICTURES" ]]; then\n'
          '    echo "$HOME/Pictures"\n'
          'elif [[ "$1" == "DOWNLOAD" ]]; then\n'
-diff --git a/tests/test_flatpak.py b/tests/test_flatpak.py
-index cb2b9bb..440b704 100644
---- a/tests/test_flatpak.py
-+++ b/tests/test_flatpak.py
-@@ -159,36 +159,6 @@ class TestGetInaccessiblePaths:
- 
-         assert len(inaccessible_paths) == 0
- 
--    @pytest.mark.usefixtures("xdg_user_dir_bin")
--    def test_flatpak_xdg_user_dir(self, monkeypatch, tmp_path, home_dir):
--        """
--        Test that XDG filesystem permissions such as 'xdg-pictures' and
--        'xdg-download' are detected correctly
--        """
--        flatpak_info_path = tmp_path / "flatpak-info"
--
--        flatpak_info_path.write_text(
--            "[Application]\n"
--            "name=fake.flatpak.Protontricks\n"
--            "\n"
--            "[Instance]\n"
--            "flatpak-version=1.12.1\n"
--            "\n"
--            "[Context]\n"
--            "filesystems=xdg-pictures;"
--        )
--        monkeypatch.setattr(
--            "protontricks.flatpak.FLATPAK_INFO_PATH", str(flatpak_info_path)
--        )
--
--        inaccessible_paths = get_inaccessible_paths([
--            str(home_dir / "Pictures"),
--            str(home_dir / "Download")
--        ])
--
--        assert len(inaccessible_paths) == 1
--        assert str(inaccessible_paths[0]) == str(home_dir / "Download")
--
-     def test_flatpak_unknown_permission(self, monkeypatch, tmp_path, caplog):
-         """
-         Test that unknown filesystem permissions are ignored
-diff --git a/tests/test_util.py b/tests/test_util.py
-index ec5f4f3..0b0a66c 100644
---- a/tests/test_util.py
-+++ b/tests/test_util.py
-@@ -98,44 +98,6 @@ class TestRunCommand:
-         assert command.env["WINELOADER"] == "/fake/wine"
-         assert command.env["WINESERVER"] == "/fake/wineserver"
- 
--    def test_unknown_steam_runtime_detected(
--            self, home_dir, proton_factory, runtime_app_factory,
--            steam_app_factory, caplog):
--        """
--        Test that Protontricks will log a warning if it encounters a Steam
--        Runtime it does not recognize
--        """
--        steam_runtime_medic = runtime_app_factory(
--            name="Steam Linux Runtime - Medic",
--            appid=14242420,
--            runtime_dir_name="medic"
--        )
--        proton_app = proton_factory(
--            name="Proton 5.20", appid=100, compat_tool_name="proton_520",
--            is_default_proton=True, required_tool_app=steam_runtime_medic
--        )
--        steam_app = steam_app_factory(name="Fake game", appid=10)
--
--        run_command(
--            winetricks_path=Path("/usr/bin/winetricks"),
--            proton_app=proton_app,
--            steam_app=steam_app,
--            command=["echo", "nothing"],
--            shell=True,
--            use_steam_runtime=True
--        )
--
--        # Warning will be logged since Protontricks does not recognize
--        # Steam Runtime Medic and can't ensure it's being configured correctly
--        warning = next(
--            record for record in caplog.records
--            if record.levelname == "WARNING"
--            and "not recognized" in record.getMessage()
--        )
--        assert warning.getMessage() == \
--            "Current Steam Runtime not recognized by Protontricks."
--
--
- class TestLowerDict:
-     def test_lower_nested_dict(self):
-         """
diff --git a/pkgs/tools/package-management/repro-get/default.nix b/pkgs/tools/package-management/repro-get/default.nix
index bb619874d7b0..95d5902be006 100644
--- a/pkgs/tools/package-management/repro-get/default.nix
+++ b/pkgs/tools/package-management/repro-get/default.nix
@@ -69,5 +69,6 @@ buildGoModule rec {
     homepage = "https://github.com/reproducible-containers/repro-get";
     license = licenses.asl20;
     maintainers = with maintainers; [ matthewcroughan ];
+    mainProgram = "repro-get";
   };
 }
diff --git a/pkgs/tools/package-management/reuse/default.nix b/pkgs/tools/package-management/reuse/default.nix
deleted file mode 100644
index 8ba5be3e7795..000000000000
--- a/pkgs/tools/package-management/reuse/default.nix
+++ /dev/null
@@ -1,40 +0,0 @@
-{ lib, python3Packages, fetchFromGitHub }:
-
-python3Packages.buildPythonApplication rec {
-  pname = "reuse";
-  version = "2.1.0";
-  format = "pyproject";
-
-  src = fetchFromGitHub {
-    owner = "fsfe";
-    repo = "reuse-tool";
-    rev = "refs/tags/v${version}";
-    hash = "sha256-MEQiuBxe/ctHlAnmLhQY4QH62uAcHb7CGfZz+iZCRSk=";
-  };
-
-  nativeBuildInputs = with python3Packages; [
-    poetry-core
-  ];
-
-  propagatedBuildInputs = with python3Packages; [
-    binaryornot
-    boolean-py
-    debian
-    jinja2
-    license-expression
-  ];
-
-  nativeCheckInputs = with python3Packages; [ pytestCheckHook ];
-
-  disabledTestPaths = [
-    # pytest wants to execute the actual source files for some reason, which fails with ImportPathMismatchError()
-    "src/reuse"
-  ];
-
-  meta = with lib; {
-    description = "A tool for compliance with the REUSE Initiative recommendations";
-    homepage = "https://github.com/fsfe/reuse-tool";
-    license = with licenses; [ asl20 cc-by-sa-40 cc0 gpl3Plus ];
-    maintainers = with maintainers; [ FlorianFranzen Luflosi ];
-  };
-}
diff --git a/pkgs/tools/package-management/rpm/default.nix b/pkgs/tools/package-management/rpm/default.nix
index 9418244212ac..541787942a0e 100644
--- a/pkgs/tools/package-management/rpm/default.nix
+++ b/pkgs/tools/package-management/rpm/default.nix
@@ -1,7 +1,28 @@
-{ stdenv, lib
-, pkg-config, autoreconfHook, pandoc
-, fetchurl, cpio, zlib, bzip2, file, elfutils, libbfd, libgcrypt, libarchive, nspr, nss, popt, db, xz, python, lua, llvmPackages
-, sqlite, zstd, libcap
+{ stdenv
+, lib
+, pkg-config
+, autoreconfHook
+, pandoc
+, fetchurl
+, cpio
+, zlib
+, bzip2
+, file
+, elfutils
+, libbfd
+, libgcrypt
+, libarchive
+, nspr
+, nss
+, popt
+, db
+, xz
+, python
+, lua
+, llvmPackages
+, sqlite
+, zstd
+, libcap
 }:
 
 stdenv.mkDerivation rec {
@@ -18,8 +39,8 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ autoreconfHook pkg-config pandoc ];
   buildInputs = [ cpio zlib zstd bzip2 file libarchive libgcrypt nspr nss db xz python lua sqlite ]
-                ++ lib.optional stdenv.cc.isClang llvmPackages.openmp
-                ++ lib.optional stdenv.isLinux libcap;
+    ++ lib.optional stdenv.cc.isClang llvmPackages.openmp
+    ++ lib.optional stdenv.isLinux libcap;
 
   # rpm/rpmlib.h includes popt.h, and then the pkg-config file mentions these as linkage requirements
   propagatedBuildInputs = [ popt nss db bzip2 libarchive libbfd ]
@@ -72,5 +93,8 @@ stdenv.mkDerivation rec {
     description = "The RPM Package Manager";
     maintainers = with maintainers; [ copumpkin ];
     platforms = platforms.linux;
+    # Support for darwin was removed in https://github.com/NixOS/nixpkgs/pull/196350.
+    # This can be re-enables for apple_sdk.version >= 13.0.
+    badPlatforms = platforms.darwin;
   };
 }
diff --git a/pkgs/tools/package-management/smlpkg/default.nix b/pkgs/tools/package-management/smlpkg/default.nix
index 4bf75c126149..be7592c1c6d8 100644
--- a/pkgs/tools/package-management/smlpkg/default.nix
+++ b/pkgs/tools/package-management/smlpkg/default.nix
@@ -39,5 +39,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     platforms = mlton.meta.platforms;
     maintainers = with maintainers; [ athas ];
+    mainProgram = "smlpkg";
   };
 }
diff --git a/pkgs/tools/package-management/yarn-lock-converter/default.nix b/pkgs/tools/package-management/yarn-lock-converter/default.nix
index 2f3ebff74108..70f5b143ebe8 100644
--- a/pkgs/tools/package-management/yarn-lock-converter/default.nix
+++ b/pkgs/tools/package-management/yarn-lock-converter/default.nix
@@ -45,5 +45,6 @@ buildNpmPackage rec {
     homepage = "https://github.com/VHT/yarn-lock-converter";
     license = licenses.mit;
     maintainers = with maintainers; [ gador ];
+    mainProgram = "yarn-lock-converter";
   };
 }