From 8cb1220be87524e65379114da79a0dc3b025e6e8 Mon Sep 17 00:00:00 2001 From: OPNA2608 Date: Mon, 12 Jan 2026 12:12:36 +0100 Subject: [PATCH 01/80] famistudio: Add GSettings schemas on Linux Native file dialogue needs them. --- pkgs/by-name/fa/famistudio/package.nix | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/fa/famistudio/package.nix b/pkgs/by-name/fa/famistudio/package.nix index 7c690004cc4d..437fe12b4ff7 100644 --- a/pkgs/by-name/fa/famistudio/package.nix +++ b/pkgs/by-name/fa/famistudio/package.nix @@ -14,6 +14,7 @@ openal, portaudio, rtmidi, + wrapGAppsHook3, _experimental-update-script-combinators, gitUpdater, }: @@ -133,11 +134,17 @@ buildDotnetModule (finalAttrs: { nugetDeps = ./deps.json; dotnet-sdk = dotnetCorePackages.sdk_8_0; + nativeBuildInputs = lib.optionals stdenvNoCC.hostPlatform.isLinux [ + wrapGAppsHook3 + ]; + runtimeDeps = lib.optionals stdenvNoCC.hostPlatform.isLinux [ gtk3 libglvnd ]; + dontWrapGApps = true; + executables = [ "FamiStudio" ]; postInstall = '' @@ -147,11 +154,19 @@ buildDotnetModule (finalAttrs: { done ''; - postFixup = '' + postFixup = + # Need GSettings schemas + lib.optionalString stdenvNoCC.hostPlatform.isLinux '' + makeWrapperArgs+=( + "''${gappsWrapperArgs[@]}" + ) + '' # FFMpeg looked up from PATH - wrapProgram $out/bin/FamiStudio \ - --prefix PATH : ${lib.makeBinPath [ ffmpeg ]} - ''; + + '' + wrapProgram $out/bin/FamiStudio \ + --prefix PATH : ${lib.makeBinPath [ ffmpeg ]} \ + ''${makeWrapperArgs[@]} + ''; passthru.updateScript = _experimental-update-script-combinators.sequence [ (gitUpdater { }).command From ec9976d429bf539c0cbecc29990fc6594adb836f Mon Sep 17 00:00:00 2001 From: Ivan Mincik Date: Tue, 13 Jan 2026 12:44:00 +0100 Subject: [PATCH 02/80] qgis: fix loading of spatialite extension Add fix applied in upstream QGIS in https://github.com/qgis/QGIS/pull/64500 --- pkgs/applications/gis/qgis/spatialite-path.patch | 14 ++++++++++++++ pkgs/applications/gis/qgis/unwrapped-ltr.nix | 3 +++ pkgs/applications/gis/qgis/unwrapped.nix | 3 +++ 3 files changed, 20 insertions(+) create mode 100644 pkgs/applications/gis/qgis/spatialite-path.patch diff --git a/pkgs/applications/gis/qgis/spatialite-path.patch b/pkgs/applications/gis/qgis/spatialite-path.patch new file mode 100644 index 000000000000..cdfd0b8cef83 --- /dev/null +++ b/pkgs/applications/gis/qgis/spatialite-path.patch @@ -0,0 +1,14 @@ +diff --git a/python/utils.py b/python/utils.py +index 1234567890..abcdef1234 100644 +--- a/python/utils.py ++++ b/python/utils.py +@@ -938,6 +938,7 @@ def spatialite_connect(*args, **kwargs): + con = sqlite3.dbapi2.connect(*args, **kwargs) + con.enable_load_extension(True) + cur = con.cursor() + libs = [ ++ ("@spatialiteLib@", "sqlite3_modspatialite_init"), + # SpatiaLite >= 4.2 and Sqlite >= 3.7.17, should work on all platforms + ("mod_spatialite", "sqlite3_modspatialite_init"), + # SpatiaLite >= 4.2 and Sqlite < 3.7.17 (Travis) + ("mod_spatialite.so", "sqlite3_modspatialite_init"), diff --git a/pkgs/applications/gis/qgis/unwrapped-ltr.nix b/pkgs/applications/gis/qgis/unwrapped-ltr.nix index 55d106ec4730..c0154e2e1bf7 100644 --- a/pkgs/applications/gis/qgis/unwrapped-ltr.nix +++ b/pkgs/applications/gis/qgis/unwrapped-ltr.nix @@ -146,6 +146,9 @@ mkDerivation rec { pyQt5PackageDir = "${py.pkgs.pyqt5}/${py.pkgs.python.sitePackages}"; qsciPackageDir = "${py.pkgs.qscintilla-qt5}/${py.pkgs.python.sitePackages}"; }) + (replaceVars ./spatialite-path.patch { + spatialiteLib = "${libspatialite}/lib/mod_spatialite.so"; + }) ]; # Add path to Qt platform plugins diff --git a/pkgs/applications/gis/qgis/unwrapped.nix b/pkgs/applications/gis/qgis/unwrapped.nix index 85ae38bb6f1c..33b9068361b4 100644 --- a/pkgs/applications/gis/qgis/unwrapped.nix +++ b/pkgs/applications/gis/qgis/unwrapped.nix @@ -150,6 +150,9 @@ mkDerivation rec { pyQt5PackageDir = "${py.pkgs.pyqt5}/${py.pkgs.python.sitePackages}"; qsciPackageDir = "${py.pkgs.qscintilla-qt5}/${py.pkgs.python.sitePackages}"; }) + (replaceVars ./spatialite-path.patch { + spatialiteLib = "${libspatialite}/lib/mod_spatialite.so"; + }) ]; # Add path to Qt platform plugins From 1168d1f48d1fc99ed5672af58c88a12641c4cd4d Mon Sep 17 00:00:00 2001 From: Thomas Gerbet Date: Tue, 13 Jan 2026 23:15:13 +0100 Subject: [PATCH 03/80] proxychains-ng: apply patch for CVE-2025-34451 Fixes #479074 --- pkgs/by-name/pr/proxychains-ng/package.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/by-name/pr/proxychains-ng/package.nix b/pkgs/by-name/pr/proxychains-ng/package.nix index 51bec90d5f7d..c1fe82b2e7f1 100644 --- a/pkgs/by-name/pr/proxychains-ng/package.nix +++ b/pkgs/by-name/pr/proxychains-ng/package.nix @@ -27,6 +27,11 @@ stdenv.mkDerivation rec { url = "https://github.com/rofl0r/proxychains-ng/commit/fffd2532ad34bdf7bf430b128e4c68d1164833c6.patch"; hash = "sha256-l3qSFUDMUfVDW1Iw+R2aW/wRz4CxvpR4eOwx9KzuAAo="; }) + (fetchpatch { + name = "CVE-2025-34451.patch"; + url = "https://github.com/httpsgithu/proxychains-ng/commit/cc005b7132811c9149e77b5e33cff359fc95512e.patch"; + hash = "sha256-taCNTm3qvBmLSSO0DEBu15tDZ35PDzHGtbZW7nLrRDw="; + }) ]; configureFlags = lib.optionals stdenv.hostPlatform.isDarwin [ From 6d42e546970b742358ab88e5f0dcd6632e64b134 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Wed, 14 Jan 2026 16:48:55 +0530 Subject: [PATCH 04/80] asciinema_3: 3.0.1 -> 3.1.0 Signed-off-by: phanirithvij --- pkgs/by-name/as/asciinema_3/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/as/asciinema_3/package.nix b/pkgs/by-name/as/asciinema_3/package.nix index 4a3c65905ea4..86527d5761c4 100644 --- a/pkgs/by-name/as/asciinema_3/package.nix +++ b/pkgs/by-name/as/asciinema_3/package.nix @@ -9,16 +9,16 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "asciinema"; - version = "3.0.1"; + version = "3.1.0"; src = fetchFromGitHub { owner = "asciinema"; repo = "asciinema"; tag = "v${finalAttrs.version}"; - hash = "sha256-jWRq/LeDdCETiOMkWr9EIWztb14IYGCSo05QPw5HZZk="; + hash = "sha256-luIGJ4OvQSnNzyuTrjXliuMeIzPZwRnyKYdAo8mnvGg="; }; - cargoHash = "sha256-bGhShwH4BxE3O4/B8KSK1o7IXNDBmGuVt4kx5s8W/go="; + cargoHash = "sha256-5hPk9rtpjK5dk1fgYXQ5KdHNvbuOTWYGpCQVLxlEvq4="; env.ASCIINEMA_GEN_DIR = "gendir"; From 13726c5d312eef8b62f6234f5b0c330046468ec7 Mon Sep 17 00:00:00 2001 From: Lyndon Sanche Date: Sat, 10 Jan 2026 17:15:16 -0700 Subject: [PATCH 05/80] nixos/regreet: Disable client side decorations by default Client side decorations started appearing for me by default. Add the `-d` flag to `cageArgs` so that these decorations do not appear. --- nixos/modules/programs/regreet.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/nixos/modules/programs/regreet.nix b/nixos/modules/programs/regreet.nix index b48ba26c3270..151ad3a623ca 100644 --- a/nixos/modules/programs/regreet.nix +++ b/nixos/modules/programs/regreet.nix @@ -40,9 +40,12 @@ in cageArgs = lib.mkOption { type = lib.types.listOf lib.types.str; - default = [ "-s" ]; + default = [ + "-s" + "-d" + ]; example = lib.literalExpression '' - [ "-s" "-m" "last" ] + [ "-s" "-d" "-m" "last" ] ''; description = '' Additional arguments to be passed to From 2b0fa042d236bdbeb6c36ac3fea7631597458c57 Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Thu, 15 Jan 2026 14:12:43 +0900 Subject: [PATCH 06/80] gemini-cli-bin: fix build on x86_64-darwin --- pkgs/by-name/ge/gemini-cli-bin/package.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/by-name/ge/gemini-cli-bin/package.nix b/pkgs/by-name/ge/gemini-cli-bin/package.nix index 8634e95963b0..f3e8edabf114 100644 --- a/pkgs/by-name/ge/gemini-cli-bin/package.nix +++ b/pkgs/by-name/ge/gemini-cli-bin/package.nix @@ -3,6 +3,7 @@ stdenvNoCC, fetchurl, nodejs, + sysctl, writableTmpDirAsHomeHook, nix-update-script, }: @@ -42,6 +43,9 @@ stdenvNoCC.mkDerivation (finalAttrs: { doInstallCheck = true; nativeInstallCheckInputs = [ writableTmpDirAsHomeHook + ] + ++ lib.optionals (with stdenvNoCC.hostPlatform; isDarwin && isx86_64) [ + sysctl ]; # versionCheckHook cannot be used because the reported version might be incorrect (e.g., 0.6.1 returns 0.6.0). installCheckPhase = '' From 46a1505ef11f3537bd63cad2d63a3b3180596d76 Mon Sep 17 00:00:00 2001 From: Karun Sandhu Date: Thu, 15 Jan 2026 11:25:11 +0100 Subject: [PATCH 07/80] send: add update script --- pkgs/by-name/se/send/package.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/se/send/package.nix b/pkgs/by-name/se/send/package.nix index 3778bdcff011..6ff4435c786e 100644 --- a/pkgs/by-name/se/send/package.nix +++ b/pkgs/by-name/se/send/package.nix @@ -4,6 +4,7 @@ fetchFromGitHub, makeBinaryWrapper, nodejs_20, + nix-update-script, nixosTests, }: buildNpmPackage rec { @@ -42,8 +43,11 @@ buildNpmPackage rec { --set "NODE_ENV" "production" ''; - passthru.tests = { - inherit (nixosTests) send; + passthru = { + updateScript = nix-update-script { }; + tests = { + inherit (nixosTests) send; + }; }; meta = { From f37f53628c2e8fd88ffc3d55f52a3b62b8bf02aa Mon Sep 17 00:00:00 2001 From: provokateurin Date: Thu, 15 Jan 2026 13:42:45 +0100 Subject: [PATCH 08/80] nextcloud31: 31.0.12 -> 31.0.13 --- pkgs/servers/nextcloud/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/servers/nextcloud/default.nix b/pkgs/servers/nextcloud/default.nix index 6873dff38f88..b92d824fad91 100644 --- a/pkgs/servers/nextcloud/default.nix +++ b/pkgs/servers/nextcloud/default.nix @@ -59,8 +59,8 @@ let in { nextcloud31 = generic { - version = "31.0.12"; - hash = "sha256-spCJ0KvDkY9z8r4tdWhbjXALj9i+9BYpfyVDQyXwnDY="; + version = "31.0.13"; + hash = "sha256-kt8INpRn6Bwj1/2Zevt1bq5Ezkfv8MhcXU0nIS6+KD4="; packages = nextcloud31Packages; }; From 1fd6e5931c4cf0ca722c91be5d12a57f703b6aeb Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Thu, 15 Jan 2026 15:22:16 +0000 Subject: [PATCH 09/80] jetbrains.rust-rover: 2025.3.1 -> 2025.3.2 --- .../editors/jetbrains/ides/rust-rover.nix | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pkgs/applications/editors/jetbrains/ides/rust-rover.nix b/pkgs/applications/editors/jetbrains/ides/rust-rover.nix index 8eb13fb39ef3..4fa831fd84ec 100644 --- a/pkgs/applications/editors/jetbrains/ides/rust-rover.nix +++ b/pkgs/applications/editors/jetbrains/ides/rust-rover.nix @@ -18,20 +18,20 @@ let # update-script-start: urls urls = { x86_64-linux = { - url = "https://download.jetbrains.com/rustrover/RustRover-2025.3.1.tar.gz"; - hash = "sha256-Whs04QocWe7jBpQja6qCM8d4dYB2k4G+AbTMsJYY7Ik="; + url = "https://download.jetbrains.com/rustrover/RustRover-2025.3.2.tar.gz"; + hash = "sha256-c6Pou6a27cwCcvcpKnhQOt2Emf+iSHyOIQIyXTEB3hE="; }; aarch64-linux = { - url = "https://download.jetbrains.com/rustrover/RustRover-2025.3.1-aarch64.tar.gz"; - hash = "sha256-+w+BydKipgRxhISVSyYaZCvp7W9R3pj83GztsysKTJ4="; + url = "https://download.jetbrains.com/rustrover/RustRover-2025.3.2-aarch64.tar.gz"; + hash = "sha256-YUBymEX/fv71/cFrBUi0jvgTHn0eFh02tFT/HIE3+5k="; }; x86_64-darwin = { - url = "https://download.jetbrains.com/rustrover/RustRover-2025.3.1.dmg"; - hash = "sha256-OJmHVFKlGC25OxMsANvIQ5T/tjdDC5fyOQvoq7BBJTc="; + url = "https://download.jetbrains.com/rustrover/RustRover-2025.3.2.dmg"; + hash = "sha256-UlcMaFh7o/X8RkfjUr1fsDrHvN/rFhH7X1rvwaMTSzY="; }; aarch64-darwin = { - url = "https://download.jetbrains.com/rustrover/RustRover-2025.3.1-aarch64.dmg"; - hash = "sha256-EDoS7Rw3trOM/11jfn3HuNzHj1xXa6OLj4Ysa6NkfVI="; + url = "https://download.jetbrains.com/rustrover/RustRover-2025.3.2-aarch64.dmg"; + hash = "sha256-fOX2HBJA8CbLVMLGxMMCmw0CFbKtEiW+WgkiIgwIqLE="; }; }; # update-script-end: urls @@ -45,8 +45,8 @@ in product = "RustRover"; # update-script-start: version - version = "2025.3.1"; - buildNumber = "253.29346.139"; + version = "2025.3.2"; + buildNumber = "253.29346.361"; # update-script-end: version src = fetchurl (urls.${system} or (throw "Unsupported system: ${system}")); From 296efbf9effc402c5c1f33bb9b27cdc2e9c24e50 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Thu, 15 Jan 2026 15:31:26 +0000 Subject: [PATCH 10/80] jetbrains.goland: 2025.3.1 -> 2025.3.1.1 --- .../editors/jetbrains/ides/goland.nix | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pkgs/applications/editors/jetbrains/ides/goland.nix b/pkgs/applications/editors/jetbrains/ides/goland.nix index ed4ed7320743..3e2898d836f3 100644 --- a/pkgs/applications/editors/jetbrains/ides/goland.nix +++ b/pkgs/applications/editors/jetbrains/ides/goland.nix @@ -12,20 +12,20 @@ let # update-script-start: urls urls = { x86_64-linux = { - url = "https://download.jetbrains.com/go/goland-2025.3.1.tar.gz"; - hash = "sha256-FhhHHmKbil4YZ2TdHPQBor2arTui/3j92Jb1Gncn+Uo="; + url = "https://download.jetbrains.com/go/goland-2025.3.1.1.tar.gz"; + hash = "sha256-+4A+rTMwiXjKuBI2dUf90F9KUFaGlB2xgO+BX09WnWw="; }; aarch64-linux = { - url = "https://download.jetbrains.com/go/goland-2025.3.1-aarch64.tar.gz"; - hash = "sha256-5lsXviK9nwHogCCwVTkeqIBe1G/ZWDUzD3z7Hyx6y0Y="; + url = "https://download.jetbrains.com/go/goland-2025.3.1.1-aarch64.tar.gz"; + hash = "sha256-zGPly+ELyQYGrq5eoOqeujDptL7aIOY0KK5FVaSFZ8k="; }; x86_64-darwin = { - url = "https://download.jetbrains.com/go/goland-2025.3.1.dmg"; - hash = "sha256-QBsP0ar6550uZpj1JEutHSRHMrgfDZI8fZ7sZ7uoulk="; + url = "https://download.jetbrains.com/go/goland-2025.3.1.1.dmg"; + hash = "sha256-xZeuUIyqPUoOPWzuwuCS0nkasvuwLSc43tcSSGZrHS0="; }; aarch64-darwin = { - url = "https://download.jetbrains.com/go/goland-2025.3.1-aarch64.dmg"; - hash = "sha256-yVmu/WfRsERQkySjCWW3PB4p/XCOAHF8/g6Op1ibsFA="; + url = "https://download.jetbrains.com/go/goland-2025.3.1.1-aarch64.dmg"; + hash = "sha256-vV8TxLG/KEUuAcN1lsCKT6v4tg6UmbUU7U5OCJ8rhXQ="; }; }; # update-script-end: urls @@ -39,8 +39,8 @@ in product = "Goland"; # update-script-start: version - version = "2025.3.1"; - buildNumber = "253.29346.255"; + version = "2025.3.1.1"; + buildNumber = "253.29346.379"; # update-script-end: version src = fetchurl (urls.${system} or (throw "Unsupported system: ${system}")); From dbb8948ed0db624d367e66ed05a71de9c7e47f26 Mon Sep 17 00:00:00 2001 From: nicknb Date: Thu, 15 Jan 2026 22:23:59 +0100 Subject: [PATCH 11/80] gurk-rs: add nicknb to list of maintainers --- pkgs/by-name/gu/gurk-rs/package.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/by-name/gu/gurk-rs/package.nix b/pkgs/by-name/gu/gurk-rs/package.nix index 847c9cdf5beb..21664644570d 100644 --- a/pkgs/by-name/gu/gurk-rs/package.nix +++ b/pkgs/by-name/gu/gurk-rs/package.nix @@ -61,6 +61,7 @@ rustPlatform.buildRustPackage (finalAttrs: { maintainers = with lib.maintainers; [ devhell mattkang + nicknb ]; }; }) From 2627a352689548679fa1bd189e575569e60f468b Mon Sep 17 00:00:00 2001 From: nicknb Date: Thu, 15 Jan 2026 22:10:29 +0100 Subject: [PATCH 12/80] gurk-rs: 0.8.0 -> 0.8.1 --- pkgs/by-name/gu/gurk-rs/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/gu/gurk-rs/package.nix b/pkgs/by-name/gu/gurk-rs/package.nix index 21664644570d..4a9318e21a8b 100644 --- a/pkgs/by-name/gu/gurk-rs/package.nix +++ b/pkgs/by-name/gu/gurk-rs/package.nix @@ -14,20 +14,20 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "gurk-rs"; - version = "0.8.0"; + version = "0.8.1"; src = fetchFromGitHub { owner = "boxdot"; repo = "gurk-rs"; tag = "v${finalAttrs.version}"; - hash = "sha256-m7oZM2uCGENrADh+qrNODvYWxgbh1ahthkWjFnAVXjw="; + hash = "sha256-HBqKcKPsNJQhLGGQ4X+xGPWwSABiaqubn11yyqiL0xU="; }; postPatch = '' rm .cargo/config.toml ''; - cargoHash = "sha256-15z4jKKGfSH1LXX1cXpwRjWI/ITaj3dzlscE7Vrh9Xw="; + cargoHash = "sha256-oasGeNlY3c0iSxgLqPCo081g7d0fA3I+LyDJdRSiNaE="; nativeBuildInputs = [ protobuf From 41a5cd35a8c9c5e47db4443b2df8ffc8a31e2d11 Mon Sep 17 00:00:00 2001 From: Sean Buckley Date: Thu, 15 Jan 2026 20:21:47 -0500 Subject: [PATCH 13/80] brave: 1.85.120 -> 1.86.139 https://community.brave.app/t/release-channel-1-86-139/648178 --- pkgs/by-name/br/brave/package.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/by-name/br/brave/package.nix b/pkgs/by-name/br/brave/package.nix index 5aedcd29f969..0ab7dfe4ec84 100644 --- a/pkgs/by-name/br/brave/package.nix +++ b/pkgs/by-name/br/brave/package.nix @@ -3,24 +3,24 @@ let pname = "brave"; - version = "1.85.120"; + version = "1.86.139"; allArchives = { aarch64-linux = { url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_arm64.deb"; - hash = "sha256-Q645SeKK2oBfzVOVwKi+VgjkcKA3hyBCK1uYkey29Zk="; + hash = "sha256-+KJzQZuCf2zpouF+hZ2hAmJ57yWt2qAemdYt6X4x+P0="; }; x86_64-linux = { url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_amd64.deb"; - hash = "sha256-5Sa1dfX3uMUkTi/AKLRuf/lmdPXuyVHPD7eN7EUAiRo="; + hash = "sha256-l0KtiMU+L7k6i5sjiPC24CABUdn9ax1uKqkqWe/flPM="; }; aarch64-darwin = { url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-v${version}-darwin-arm64.zip"; - hash = "sha256-XNafmhhPIo1McFVHERpefQFDCLQZJFreoReySyUYAkY="; + hash = "sha256-Iv5UjfYzR+nmiW/LY22iOUvjGIbTRkjWC3fDigCmbFo="; }; x86_64-darwin = { url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-v${version}-darwin-x64.zip"; - hash = "sha256-BqNhfkNMsnbydr+fnHiXhQih2UjpzbjeD+VNrvA3CNU="; + hash = "sha256-X9McQDYPQ93zzTjR5Lq3+OFxjWGAR/JGa/u39GZL1Vs="; }; }; From ae81ddfa5f29109876b5ea45dfff476af715dfc3 Mon Sep 17 00:00:00 2001 From: SkohTV Date: Thu, 15 Jan 2026 22:38:43 -0500 Subject: [PATCH 14/80] e17gtk: drop --- pkgs/by-name/e1/e17gtk/package.nix | 31 ------------------------------ pkgs/top-level/aliases.nix | 1 + 2 files changed, 1 insertion(+), 31 deletions(-) delete mode 100644 pkgs/by-name/e1/e17gtk/package.nix diff --git a/pkgs/by-name/e1/e17gtk/package.nix b/pkgs/by-name/e1/e17gtk/package.nix deleted file mode 100644 index b18de3936215..000000000000 --- a/pkgs/by-name/e1/e17gtk/package.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ - lib, - stdenv, - fetchFromGitHub, -}: - -stdenv.mkDerivation rec { - pname = "e17gtk"; - version = "3.22.2"; - - src = fetchFromGitHub { - owner = "tsujan"; - repo = "E17gtk"; - rev = "V${version}"; - sha256 = "1qwj1hmdlk8sdqhkrh60p2xg4av1rl0lmipdg5j0i40318pmiml1"; - }; - - installPhase = '' - mkdir -p $out/share/{doc,themes}/E17gtk - cp -va index.theme gtk-2.0 gtk-3.0 metacity-1 $out/share/themes/E17gtk/ - cp -va README.md WORKAROUNDS screenshot.jpg $out/share/doc/E17gtk/ - ''; - - meta = { - description = "Enlightenment-like GTK theme with sharp corners"; - homepage = "https://github.com/tsujan/E17gtk"; - license = lib.licenses.gpl3; - platforms = lib.platforms.unix; - maintainers = [ lib.maintainers.romildo ]; - }; -} diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index dd9ba3ff6253..bd8196e1e623 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -565,6 +565,7 @@ mapAliases { dumb = throw "'dumb' has been archived by upstream. Upstream recommends libopenmpt as a replacement."; # Added 2025-09-14 dump1090 = throw "'dump1090' has been renamed to/replaced by 'dump1090-fa'"; # Converted to throw 2025-10-27 dune_1 = throw "'dune_1' has been removed"; # Added 2025-11-13 + e17gtk = throw "'e17gtk' has been removed because it was archived upstream."; # Added 2026-01-15 eask = throw "'eask' has been renamed to/replaced by 'eask-cli'"; # Converted to throw 2025-10-27 easyloggingpp = throw "easyloggingpp has been removed, as it is deprecated upstream and does not build with CMake 4"; # Added 2025-09-17 EBTKS = throw "'EBTKS' has been renamed to/replaced by 'ebtks'"; # Converted to throw 2025-10-27 From a3b53dba518f4a52e687bb55ee8eace73aa3da41 Mon Sep 17 00:00:00 2001 From: fzdslr-nw Date: Thu, 15 Jan 2026 14:21:08 +0000 Subject: [PATCH 15/80] node-red: fix cross compilation --- pkgs/by-name/no/node-red/package.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/no/node-red/package.nix b/pkgs/by-name/no/node-red/package.nix index a7a531d27b1a..ca1dc0fc0b24 100644 --- a/pkgs/by-name/no/node-red/package.nix +++ b/pkgs/by-name/no/node-red/package.nix @@ -19,6 +19,8 @@ buildNpmPackage rec { npmDepsHash = "sha256-8nwIEu/p5kVYoG3+jXBss352MciCnk/aGV9nbDGHDdA="; + nativeBuildInputs = [ jq ]; + postPatch = let packageDir = "packages/node_modules/node-red"; @@ -26,7 +28,7 @@ buildNpmPackage rec { '' ln -s ${./package-lock.json} package-lock.json - ${lib.getExe jq} '. += {"bin": {"node-red": "${packageDir}/red.js", "node-red-pi": "${packageDir}/bin/node-red-pi"}}' package.json > package.json.tmp + jq '. += {"bin": {"node-red": "${packageDir}/red.js", "node-red-pi": "${packageDir}/bin/node-red-pi"}}' package.json > package.json.tmp mv package.json.tmp package.json ''; From 53a2c335b6e1c65d73a44a98304632f751c19043 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 16 Jan 2026 05:43:10 +0000 Subject: [PATCH 16/80] dnsmonster: 1.0.2 -> 1.1.0 --- pkgs/by-name/dn/dnsmonster/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/dn/dnsmonster/package.nix b/pkgs/by-name/dn/dnsmonster/package.nix index 0b6795440893..318f65b1f591 100644 --- a/pkgs/by-name/dn/dnsmonster/package.nix +++ b/pkgs/by-name/dn/dnsmonster/package.nix @@ -8,16 +8,16 @@ buildGoModule rec { pname = "dnsmonster"; - version = "1.0.2"; + version = "1.1.0"; src = fetchFromGitHub { owner = "mosajjal"; repo = "dnsmonster"; tag = "v${version}"; - hash = "sha256-sg+88WbjlfcPgWQ9RnmLr6/VWwXEjsctfWt4TGx1oNc="; + hash = "sha256-+GFkGUR3XKDgrxVAZ3MuPxGyI0oGROdhHKMBwMSvoBI="; }; - vendorHash = "sha256-PIiSpxfZmhxWkHUnoDYKppI7/gzGm0RKh7u9HK4zrEU="; + vendorHash = "sha256-7rIBbaYr1dgC0ArcuwZelHKG5TLIQDV9JSBoYOcz+C0="; buildInputs = [ libpcap ]; From 0d4bf341cc8b8649a2d279ff7822a4d25a66f61a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 16 Jan 2026 08:01:43 +0100 Subject: [PATCH 17/80] dnsmonster: migrate to finalAttrs --- pkgs/by-name/dn/dnsmonster/package.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/by-name/dn/dnsmonster/package.nix b/pkgs/by-name/dn/dnsmonster/package.nix index 318f65b1f591..64c59922f958 100644 --- a/pkgs/by-name/dn/dnsmonster/package.nix +++ b/pkgs/by-name/dn/dnsmonster/package.nix @@ -6,14 +6,14 @@ libpcap, }: -buildGoModule rec { +buildGoModule (finalAttrs: { pname = "dnsmonster"; version = "1.1.0"; src = fetchFromGitHub { owner = "mosajjal"; repo = "dnsmonster"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-+GFkGUR3XKDgrxVAZ3MuPxGyI0oGROdhHKMBwMSvoBI="; }; @@ -24,16 +24,16 @@ buildGoModule rec { ldflags = [ "-s" "-w" - "-X=github.com/mosajjal/dnsmonster/util.releaseVersion=${version}" + "-X=github.com/mosajjal/dnsmonster/util.releaseVersion=${finalAttrs.version}" ]; meta = { description = "Passive DNS Capture and Monitoring Toolkit"; homepage = "https://github.com/mosajjal/dnsmonster"; - changelog = "https://github.com/mosajjal/dnsmonster/releases/tag/${src.tag}"; + changelog = "https://github.com/mosajjal/dnsmonster/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.gpl2Only; maintainers = with lib.maintainers; [ fab ]; broken = stdenv.hostPlatform.isDarwin; mainProgram = "dnsmonster"; }; -} +}) From 2df118267ae786e3306cd0e30e09d7325d1e68d3 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 16 Jan 2026 10:29:18 +0000 Subject: [PATCH 18/80] pyroscope: 1.13.4 -> 1.17.1 --- pkgs/by-name/py/pyroscope/package.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/py/pyroscope/package.nix b/pkgs/by-name/py/pyroscope/package.nix index 98dcb16a7d04..53a0c852041d 100644 --- a/pkgs/by-name/py/pyroscope/package.nix +++ b/pkgs/by-name/py/pyroscope/package.nix @@ -10,16 +10,16 @@ buildGoModule (finalAttrs: { pname = "pyroscope"; - version = "1.13.4"; + version = "1.17.1"; src = fetchFromGitHub { owner = "grafana"; repo = "pyroscope"; - rev = "v1.13.4"; - hash = "sha256-nyb91BO4zzJl3AG/ojBO+q7WiicZYmOtztW6FTlQHMM="; + rev = "v1.17.1"; + hash = "sha256-fwElc9UoFdsFuzDCEKlqIPQPDOnBJX3vO4tspr5URDo="; }; - vendorHash = "sha256-GZMoXsoE3pL0T3tkWY7i1f9sGy5uVDqeurCvBteqV9A="; + vendorHash = "sha256-KqaOfyS5CJZOv+bwGSs483SztuRyQ+qYp1E9POw07T8="; proxyVendor = true; subPackages = [ From 2c1ae5e61c18c63760a66be08840b464068c50f3 Mon Sep 17 00:00:00 2001 From: sergioahp Date: Fri, 16 Jan 2026 04:53:09 -0600 Subject: [PATCH 19/80] python3Packages.pytensor: add setuptools runtime dependency PyTensor imports setuptools at runtime during JIT/C compilation: - pytensor/link/c/cmodule.py imports setuptools._distutils.sysconfig - pytensor/link/c/exceptions.py imports setuptools.errors Upstream declares setuptools>=59.0.0 in dependencies: https://github.com/pymc-devs/pytensor/blob/a314476f233f2c771a1f9d75ddf4959dbb2d5646/pyproject.toml#L50 Without this, python3.withPackages environments fail at runtime with: ModuleNotFoundError: No module named 'setuptools' Fixes runtime import errors when using pytensor or packages that depend on it (e.g., pymc). --- pkgs/development/python-modules/pytensor/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/development/python-modules/pytensor/default.nix b/pkgs/development/python-modules/pytensor/default.nix index 2180cb70247f..c989e510ec86 100644 --- a/pkgs/development/python-modules/pytensor/default.nix +++ b/pkgs/development/python-modules/pytensor/default.nix @@ -61,6 +61,7 @@ buildPythonPackage rec { numba numpy scipy + setuptools ]; nativeCheckInputs = [ From 1e20f58c6dc111e8224f1d806bc285e492ded51e Mon Sep 17 00:00:00 2001 From: nicknb Date: Fri, 16 Jan 2026 12:50:02 +0100 Subject: [PATCH 20/80] zizmor: 1.20.0 -> 1.21.0 --- pkgs/by-name/zi/zizmor/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/zi/zizmor/package.nix b/pkgs/by-name/zi/zizmor/package.nix index 9718e3a9771f..2c81e143894c 100644 --- a/pkgs/by-name/zi/zizmor/package.nix +++ b/pkgs/by-name/zi/zizmor/package.nix @@ -11,16 +11,16 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "zizmor"; - version = "1.20.0"; + version = "1.21.0"; src = fetchFromGitHub { owner = "zizmorcore"; repo = "zizmor"; tag = "v${finalAttrs.version}"; - hash = "sha256-hLLse28YL0WU5mU2fYycALdS4X+pEBtumJjNEdIXRf0="; + hash = "sha256-cIwQSQcG8h4YtBPfl+meSpTkyNEwLsg3eG2SZs4PMDA="; }; - cargoHash = "sha256-7MnsBSoh1So5+LBEt/0efr9Q/BbIvP8QzsB+JCobsck="; + cargoHash = "sha256-dKgURNjvxqN7xlvdQtsylxNwYenNUgqrsecGyTtGpNI="; buildInputs = [ rust-jemalloc-sys From f6ac5cd2bc60b843853d712a12c0aa79fd2967d5 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Fri, 16 Jan 2026 13:09:38 +0000 Subject: [PATCH 21/80] python3Packages.betterproto: cleanup, fix on python>=3.14 --- .../python-modules/betterproto/default.nix | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/pkgs/development/python-modules/betterproto/default.nix b/pkgs/development/python-modules/betterproto/default.nix index 53df463ec585..20b08f490367 100644 --- a/pkgs/development/python-modules/betterproto/default.nix +++ b/pkgs/development/python-modules/betterproto/default.nix @@ -1,25 +1,35 @@ { + lib, buildPythonPackage, fetchFromGitHub, - lib, + pythonAtLeast, + + # build-system poetry-core, + + # dependencies grpclib, python-dateutil, + typing-extensions, + + # optional-dependencies black, jinja2, isort, - python, + + # tests + addBinToPathHook, cachelib, + grpcio-tools, pydantic, - pytestCheckHook, pytest-asyncio, pytest-mock, - typing-extensions, + pytestCheckHook, tomlkit, - grpcio-tools, + python, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "betterproto"; version = "2.0.0b7"; pyproject = true; @@ -27,7 +37,7 @@ buildPythonPackage rec { src = fetchFromGitHub { owner = "danielgtaylor"; repo = "python-betterproto"; - tag = "v.${version}"; + tag = "v.${finalAttrs.version}"; hash = "sha256-T7QSPH8MFa1hxJOhXc3ZMM62/FxHWjCJJ59IpeM41rI="; }; @@ -51,6 +61,7 @@ buildPythonPackage rec { ]; nativeCheckInputs = [ + addBinToPathHook cachelib grpcio-tools pydantic @@ -59,7 +70,7 @@ buildPythonPackage rec { pytestCheckHook tomlkit ] - ++ lib.concatAttrValues optional-dependencies; + ++ lib.concatAttrValues finalAttrs.passthru.optional-dependencies; pythonImportsCheck = [ "betterproto" ]; @@ -67,7 +78,6 @@ buildPythonPackage rec { # the protoc-gen-python_betterproto script from the package to be on PATH. preCheck = '' (($(ulimit -n) < 1024)) && ulimit -n 1024 - export PATH=$PATH:$out/bin patchShebangs src/betterproto/plugin/main.py ${python.interpreter} -m tests.generate ''; @@ -81,6 +91,13 @@ buildPythonPackage rec { "test_binary_compatibility" ]; + disabledTestPaths = lib.optionals (pythonAtLeast "3.14") [ + # TypeError: issubclass() arg 1 must be a class + "tests/test_inputs.py::test_message_can_instantiated[namespace_builtin_types]" + "tests/test_inputs.py::test_message_equality[namespace_builtin_types]" + "tests/test_inputs.py::test_message_json[namespace_builtin_types]" + ]; + meta = { description = "Code generator & library for Protobuf 3 and async gRPC"; mainProgram = "protoc-gen-python_betterproto"; @@ -90,8 +107,8 @@ buildPythonPackage rec { features and generating readable, understandable, idiomatic Python code. ''; homepage = "https://github.com/danielgtaylor/python-betterproto"; - changelog = "https://github.com/danielgtaylor/python-betterproto/blob/v.${version}/CHANGELOG.md"; + changelog = "https://github.com/danielgtaylor/python-betterproto/blob/${finalAttrs.src.tag}/CHANGELOG.md"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ nikstur ]; }; -} +}) From c0dd7f5eb42b4e949ac4319a4baf53a42acfa4d6 Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Fri, 16 Jan 2026 14:38:59 +0100 Subject: [PATCH 22/80] pgformatter: modernize --- pkgs/by-name/pg/pgformatter/package.nix | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/pkgs/by-name/pg/pgformatter/package.nix b/pkgs/by-name/pg/pgformatter/package.nix index e4267107536f..a59669b78acb 100644 --- a/pkgs/by-name/pg/pgformatter/package.nix +++ b/pkgs/by-name/pg/pgformatter/package.nix @@ -11,7 +11,7 @@ perlPackages.buildPerlPackage rec { src = fetchFromGitHub { owner = "darold"; repo = "pgFormatter"; - rev = "v${version}"; + tag = "v${version}"; hash = "sha256-G4Bbg8tNlwV8VCVKCamhlQ/pGf8hWCkABm6f8i5doos="; }; @@ -23,12 +23,17 @@ perlPackages.buildPerlPackage rec { installTargets = [ "pure_install" ]; # Makefile.PL only accepts DESTDIR and INSTALLDIRS, but we need to set more to make this work for NixOS. - patchPhase = '' + postPatch = '' substituteInPlace pg_format \ - --replace "#!/usr/bin/env perl" "#!/usr/bin/perl" + --replace-fail "#!/usr/bin/env perl" "#!/usr/bin/perl" + substituteInPlace Makefile.PL \ - --replace "'DESTDIR' => \$DESTDIR," "'DESTDIR' => '$out/'," \ - --replace "'INSTALLDIRS' => \$INSTALLDIRS," "'INSTALLDIRS' => \$INSTALLDIRS, 'INSTALLVENDORLIB' => 'bin/lib', 'INSTALLVENDORBIN' => 'bin', 'INSTALLVENDORSCRIPT' => 'bin', 'INSTALLVENDORMAN1DIR' => 'share/man/man1', 'INSTALLVENDORMAN3DIR' => 'share/man/man3'," + --replace-fail \ + "'DESTDIR' => \$DESTDIR," \ + "'DESTDIR' => '$out/'," \ + --replace-fail \ + "'INSTALLDIRS' => \$INSTALLDIRS," \ + "'INSTALLDIRS' => \$INSTALLDIRS, 'INSTALLVENDORLIB' => 'bin/lib', 'INSTALLVENDORBIN' => 'bin', 'INSTALLVENDORSCRIPT' => 'bin', 'INSTALLVENDORMAN1DIR' => 'share/man/man1', 'INSTALLVENDORMAN3DIR' => 'share/man/man3'," ''; doCheck = false; @@ -36,7 +41,7 @@ perlPackages.buildPerlPackage rec { meta = { description = "PostgreSQL SQL syntax beautifier that can work as a console program or as a CGI"; homepage = "https://github.com/darold/pgFormatter"; - changelog = "https://github.com/darold/pgFormatter/releases/tag/v${version}"; + changelog = "https://github.com/darold/pgFormatter/releases/tag/${src.tag}"; maintainers = with lib.maintainers; [ thunze mfairley From 387262af32509db5382619ba1b27e481c54ea795 Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Fri, 16 Jan 2026 15:05:54 +0100 Subject: [PATCH 23/80] pgformatter: enable tests --- pkgs/by-name/pg/pgformatter/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/pg/pgformatter/package.nix b/pkgs/by-name/pg/pgformatter/package.nix index a59669b78acb..06688871fb5a 100644 --- a/pkgs/by-name/pg/pgformatter/package.nix +++ b/pkgs/by-name/pg/pgformatter/package.nix @@ -34,9 +34,9 @@ perlPackages.buildPerlPackage rec { --replace-fail \ "'INSTALLDIRS' => \$INSTALLDIRS," \ "'INSTALLDIRS' => \$INSTALLDIRS, 'INSTALLVENDORLIB' => 'bin/lib', 'INSTALLVENDORBIN' => 'bin', 'INSTALLVENDORSCRIPT' => 'bin', 'INSTALLVENDORMAN1DIR' => 'share/man/man1', 'INSTALLVENDORMAN3DIR' => 'share/man/man3'," - ''; - doCheck = false; + patchShebangs . + ''; meta = { description = "PostgreSQL SQL syntax beautifier that can work as a console program or as a CGI"; From 2be52a01e49f8664802c3b96b42bf6c2fe4a56f3 Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Fri, 16 Jan 2026 15:18:59 +0100 Subject: [PATCH 24/80] pgformatter: add version check --- pkgs/by-name/pg/pgformatter/package.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/by-name/pg/pgformatter/package.nix b/pkgs/by-name/pg/pgformatter/package.nix index 06688871fb5a..dec1d0fb38c4 100644 --- a/pkgs/by-name/pg/pgformatter/package.nix +++ b/pkgs/by-name/pg/pgformatter/package.nix @@ -2,6 +2,7 @@ lib, perlPackages, fetchFromGitHub, + versionCheckHook, }: perlPackages.buildPerlPackage rec { @@ -38,6 +39,10 @@ perlPackages.buildPerlPackage rec { patchShebangs . ''; + nativeInstallCheckInputs = [ versionCheckHook ]; + versionCheckProgramArg = "--version"; + doInstallCheck = true; + meta = { description = "PostgreSQL SQL syntax beautifier that can work as a console program or as a CGI"; homepage = "https://github.com/darold/pgFormatter"; From b68b8f24df01f52064c61048e954cd8137aabc64 Mon Sep 17 00:00:00 2001 From: provokateurin Date: Thu, 15 Jan 2026 13:43:07 +0100 Subject: [PATCH 25/80] nextcloud32: 32.0.3 -> 32.0.5 --- pkgs/servers/nextcloud/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/servers/nextcloud/default.nix b/pkgs/servers/nextcloud/default.nix index b92d824fad91..be82ae1d9227 100644 --- a/pkgs/servers/nextcloud/default.nix +++ b/pkgs/servers/nextcloud/default.nix @@ -65,8 +65,8 @@ in }; nextcloud32 = generic { - version = "32.0.3"; - hash = "sha256-m3GslskQtKNQ2Ya9OpLqBvAqFh+lhjNLVth9isr8YtQ="; + version = "32.0.5"; + hash = "sha256-jdC8j44tJi7a0RGX1KB695m1H+hy7i2SWf+hm0PlQ60="; packages = nextcloud32Packages; }; From 42cad9dac6ecdfd1f940f2656e7c9934f6ecff33 Mon Sep 17 00:00:00 2001 From: provokateurin Date: Thu, 15 Jan 2026 13:44:13 +0100 Subject: [PATCH 26/80] nextcloudPackages: update --- pkgs/servers/nextcloud/packages/31.json | 78 +++++++++++------------ pkgs/servers/nextcloud/packages/32.json | 84 ++++++++++++++----------- 2 files changed, 86 insertions(+), 76 deletions(-) diff --git a/pkgs/servers/nextcloud/packages/31.json b/pkgs/servers/nextcloud/packages/31.json index 971ed39eb0d3..c7d903f06dff 100644 --- a/pkgs/servers/nextcloud/packages/31.json +++ b/pkgs/servers/nextcloud/packages/31.json @@ -20,9 +20,9 @@ ] }, "calendar": { - "hash": "sha256-BkbbhQ3hsVhFa1gE7OYSu5CH0JjmNJGFe6NEZ5fit10=", - "url": "https://github.com/nextcloud-releases/calendar/releases/download/v5.5.11/calendar-v5.5.11.tar.gz", - "version": "5.5.11", + "hash": "sha256-Z8bqjnjYewOukbRJpLBHKC0rht4HTNobuQJlIEecG0s=", + "url": "https://github.com/nextcloud-releases/calendar/releases/download/v5.5.13/calendar-v5.5.13.tar.gz", + "version": "5.5.13", "description": "A Calendar app for Nextcloud. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* πŸš€ **Integration with other Nextcloud apps!** Like Contacts, Talk, Tasks, Deck and Circles\n* 🌐 **WebCal Support!** Want to see your favorite team's matchdays in your calendar? No problem!\n* πŸ™‹ **Attendees!** Invite people to your events\n* ⌚ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* πŸ” **Search!** Find your events at ease\n* β˜‘οΈ **Tasks!** See tasks or Deck cards with a due date directly in the calendar\n* πŸ”ˆ **Talk rooms!** Create an associated Talk room when booking a meeting with just one click\n* πŸ“† **Appointment booking** Send people a link so they can book an appointment with you [using this app](https://apps.nextcloud.com/apps/appointments)\n* πŸ“Ž **Attachments!** Add, upload and view event attachments\n* πŸ™ˆ **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.", "homepage": "https://github.com/nextcloud/calendar/", "licenses": [ @@ -30,9 +30,9 @@ ] }, "collectives": { - "hash": "sha256-a71w9Ya8bZdo4/H225vw2FjSBSMM57hLbcMfBN2aSs0=", - "url": "https://github.com/nextcloud/collectives/releases/download/v3.4.0/collectives-3.4.0.tar.gz", - "version": "3.4.0", + "hash": "sha256-DFyyXpUxqC9wI0SUTTkBtur6JfzFlACPrMjIoeQ0wlU=", + "url": "https://github.com/nextcloud/collectives/releases/download/v3.5.0/collectives-3.5.0.tar.gz", + "version": "3.5.0", "description": "Collectives is a Nextcloud App for activist and community projects to organize together.\nCome and gather in collectives to build shared knowledge.\n\n* πŸ‘₯ **Collective and non-hierarchical workflow by heart**: Collectives are\n tied to a [Nextcloud Team](https://github.com/nextcloud/circles) and\n owned by the collective.\n* πŸ“ **Collaborative page editing** like known from Etherpad thanks to the\n [Text app](https://github.com/nextcloud/text).\n* πŸ”€ **Well-known [Markdown](https://en.wikipedia.org/wiki/Markdown) syntax**\n for page formatting.\n\n## Installation\n\nIn your Nextcloud instance, simply navigate to **Β»AppsΒ«**, find the\n**Β»TeamsΒ«** and **Β»CollectivesΒ«** apps and enable them.", "homepage": "https://github.com/nextcloud/collectives", "licenses": [ @@ -40,9 +40,9 @@ ] }, "contacts": { - "hash": "sha256-543zSjxmqSnBPypr8Wdp4SH8zamXDCMl20B5nYxvgIM=", - "url": "https://github.com/nextcloud-releases/contacts/releases/download/v7.3.9/contacts-v7.3.9.tar.gz", - "version": "7.3.9", + "hash": "sha256-Y0K1+bdyjC2tdnhYCzJp5QhEVVIW3ooZEwfGXfVI8dU=", + "url": "https://github.com/nextcloud-releases/contacts/releases/download/v7.3.11/contacts-v7.3.11.tar.gz", + "version": "7.3.11", "description": "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* πŸš€ **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* πŸŽ‰ **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* πŸ‘₯ **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* πŸ™ˆ **We’re not reinventing the wheel!** Based on the great and open SabreDAV library.", "homepage": "https://github.com/nextcloud/contacts#readme", "licenses": [ @@ -60,9 +60,9 @@ ] }, "cospend": { - "hash": "sha256-KD2l6qakEgPrnogJcLNZfO+/OUYnVI7Jn8NtWOweWHc=", - "url": "https://github.com/julien-nc/cospend-nc/releases/download/v3.1.6/cospend-3.1.6.tar.gz", - "version": "3.1.6", + "hash": "sha256-mclcZDNmvpYX/2q7azyiTLSCiTYvk7ILeqtb/8+0ADQ=", + "url": "https://github.com/julien-nc/cospend-nc/releases/download/v3.2.0/cospend-3.2.0.tar.gz", + "version": "3.2.0", "description": "# Nextcloud Cospend πŸ’°\n\nNextcloud Cospend is a group/shared budget manager. It was inspired by the great [IHateMoney](https://github.com/spiral-project/ihatemoney/).\n\nYou can use it when you share a house, when you go on vacation with friends, whenever you share expenses with a group of people.\n\nIt lets you create projects with members and bills. Each member has a balance computed from the project bills. Balances are not an absolute amount of money at members disposal but rather a relative information showing if a member has spent more for the group than the group has spent for her/him, independently of exactly who spent money for whom. This way you can see who owes the group and who the group owes. Ultimately you can ask for a settlement plan telling you which payments to make to reset members balances.\n\nProject members are independent from Nextcloud users. Projects can be shared with other Nextcloud users or via public links.\n\n[MoneyBuster](https://gitlab.com/eneiluj/moneybuster) Android client is [available in F-Droid](https://f-droid.org/packages/net.eneiluj.moneybuster/) and on the [Play store](https://play.google.com/store/apps/details?id=net.eneiluj.moneybuster).\n\n[PayForMe](https://github.com/mayflower/PayForMe) iOS client is currently under developpement!\n\nThe private and public APIs are documented using [the Nextcloud OpenAPI extractor](https://github.com/nextcloud/openapi-extractor/). This documentation can be accessed directly in Nextcloud. All you need is to install Cospend (>= v1.6.0) and use the [the OCS API Viewer app](https://apps.nextcloud.com/apps/ocs_api_viewer) to browse the OpenAPI documentation.\n\n## Features\n\n* ✎ Create/edit/delete projects, members, bills, bill categories, currencies\n* βš– Check member balances\n* πŸ—  Display project statistics\n* β™» Display settlement plan\n* Move bills from one project to another\n* Move bills to trash before actually deleting them\n* Archive old projects before deleting them\n* πŸŽ‡ Automatically create reimbursement bills from settlement plan\n* πŸ—“ Create recurring bills (day/week/month/year)\n* πŸ“Š Optionally provide custom amount for each member in new bills\n* πŸ”— Link personal files to bills (picture of physical receipt for example)\n* πŸ‘© Public links for people outside Nextcloud (can be password protected)\n* πŸ‘« Share projects with Nextcloud users/groups/circles\n* πŸ–« Import/export projects as csv (compatible with csv files from IHateMoney and SplitWise)\n* πŸ”— Generate link/QRCode to easily add projects in MoneyBuster\n* πŸ—² Implement Nextcloud notifications and activity stream\n\nThis app usually support the 2 or 3 last major versions of Nextcloud.\n\nThis app is under development.\n\n🌍 Help us to translate this app on [Nextcloud-Cospend/MoneyBuster Crowdin project](https://crowdin.com/project/moneybuster).\n\nβš’ Check out other ways to help in the [contribution guidelines](https://github.com/julien-nc/cospend-nc/blob/master/CONTRIBUTING.md).\n\n## Documentation\n\n* [User documentation](https://github.com/julien-nc/cospend-nc/blob/master/docs/user.md)\n* [Admin documentation](https://github.com/julien-nc/cospend-nc/blob/master/docs/admin.md)\n* [Developer documentation](https://github.com/julien-nc/cospend-nc/blob/master/docs/dev.md)\n* [CHANGELOG](https://github.com/julien-nc/cospend-nc/blob/master/CHANGELOG.md#change-log)\n* [AUTHORS](https://github.com/julien-nc/cospend-nc/blob/master/AUTHORS.md#authors)\n\n## Known issues\n\n* It does not make you rich\n\nAny feedback will be appreciated.\n\n\n\n## Donation\n\nI develop this app during my free time.\n\n* [Donate with Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66PALMY8SF5JE) (you don't need a paypal account)\n* [Donate with Liberapay : ![Donate using Liberapay](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.com/eneiluj/donate)", "homepage": "https://github.com/julien-nc/cospend-nc", "licenses": [ @@ -150,19 +150,19 @@ ] }, "groupfolders": { - "hash": "sha256-fdhSyNhZQPj7nRaUI9PogMuPOadGndLh+CAIaKXlDa0=", - "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v19.1.12/groupfolders-v19.1.12.tar.gz", - "version": "19.1.12", - "description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.", + "hash": "sha256-LgoYv/7q0EnATUY3NCQ0nICaURCL6iKQWK0xIPo3c3Q=", + "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v19.1.13/groupfolders-v19.1.13.tar.gz", + "version": "19.1.13", + "description": "Admin configured folders shared with everyone in a team.\n\nFolders can be configured from *Team folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more teams, control their write/sharing permissions and assign a quota for the folder.", "homepage": "https://github.com/nextcloud/groupfolders", "licenses": [ "agpl" ] }, "impersonate": { - "hash": "sha256-VBOUSB3airzhPcOurPAm10w7AB21+6WLiCfXmOLowZM=", - "url": "https://github.com/nextcloud-releases/impersonate/releases/download/v2.0.0/impersonate-v2.0.0.tar.gz", - "version": "2.0.0", + "hash": "sha256-AU3QsjhCbniVDxmy01JOgqJcShW4lA+Lvh92y8/qWw4=", + "url": "https://github.com/nextcloud-releases/impersonate/releases/download/v2.0.1/impersonate-v2.0.1.tar.gz", + "version": "2.0.1", "description": "By installing the impersonate app of your Nextcloud you enable administrators to impersonate other users on the Nextcloud server. This is especially useful for debugging issues reported by users.\n\nTo impersonate a user an administrator has to simply follow the following four steps:\n\n1. Login as administrator to Nextcloud.\n2. Open users administration interface.\n3. Select the impersonate button on the affected user.\n4. Confirm the impersonation.\n\nThe administrator is then logged-in as the user, to switch back to the regular user account they simply have to press the logout button.\n\n**Note:**\n\n- This app is not compatible with instances that have encryption enabled.\n- While impersonate actions are logged note that actions performed impersonated will be logged as the impersonated user.\n- Impersonating a user is only possible after their first login.\n- You can limit which users/groups can use impersonation in Administration settings > Additional settings.", "homepage": "https://github.com/nextcloud/impersonate", "licenses": [ @@ -180,9 +180,9 @@ ] }, "integration_openai": { - "hash": "sha256-+pQ3c9H8Trj2CP10f6QeCJxVdTyD5qVsN1WS6PlQYPE=", - "url": "https://github.com/nextcloud-releases/integration_openai/releases/download/v3.9.1/integration_openai-v3.9.1.tar.gz", - "version": "3.9.1", + "hash": "sha256-OimO9pyuv2O+NCvImAoarr8/aQr313duHmItr82PQLQ=", + "url": "https://github.com/nextcloud-releases/integration_openai/releases/download/v3.10.0/integration_openai-v3.10.0.tar.gz", + "version": "3.10.0", "description": "⚠️ The smart pickers have been removed from this app\nas they are now included in the [Assistant app](https://apps.nextcloud.com/apps/assistant).\n\nThis app implements:\n\n* Text generation providers: Free prompt, Summarize, Headline, Context Write, Chat, and Reformulate (using any available large language model)\n* A Translation provider (using any available language model)\n* A SpeechToText provider (using Whisper)\n* An image generation provider\n\n⚠️ Context Write, Summarize, Headline and Reformulate have mainly been tested with OpenAI.\nThey might work when connecting to other services, without any guarantee.\n\nInstead of connecting to the OpenAI API for these, you can also connect to a self-hosted [LocalAI](https://localai.io) instance or [Ollama](https://ollama.com/) instance\nor to any service that implements an API similar to the OpenAI one, for example:\n[IONOS AI Model Hub](https://docs.ionos.com/cloud/ai/ai-model-hub), [Plusserver](https://www.plusserver.com/en/ai-platform/) or [MistralAI](https://mistral.ai).\n\n⚠️ This app is mainly tested with OpenAI. We do not guarantee it works perfectly\nwith other services that implement OpenAI-compatible APIs with slight differences.\n\n## Improve AI task pickup speed\n\nTo avoid task processing execution delay, setup at 4 background job workers in the main server (where Nextcloud is installed). The setup process is documented here: https://docs.nextcloud.com/server/latest/admin_manual/ai/overview.html#improve-ai-task-pickup-speed\n\n## Ethical AI Rating\n### Rating for Text generation using ChatGPT via the OpenAI API: πŸ”΄\n\nNegative:\n* The software for training and inference of this model is proprietary, limiting running it locally or training by yourself\n* The trained model is not freely available, so the model can not be run on-premises\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model's performance and CO2 usage.\n\n\n### Rating for Translation using ChatGPT via the OpenAI API: πŸ”΄\n\nNegative:\n* The software for training and inference of this model is proprietary, limiting running it locally or training by yourself\n* The trained model is not freely available, so the model can not be run on-premises\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model's performance and CO2 usage.\n\n### Rating for Image generation using DALLΒ·E via the OpenAI API: πŸ”΄\n\nNegative:\n* The software for training and inferencing of this model is proprietary, limiting running it locally or training by yourself\n* The trained model is not freely available, so the model can not be ran on-premises\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model’s performance and CO2 usage.\n\n\n### Rating for Speech-To-Text using Whisper via the OpenAI API: 🟑\n\nPositive:\n* The software for training and inferencing of this model is open source\n* The trained model is freely available, and thus can run on-premise\n\nNegative:\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model’s performance and CO2 usage.\n\n### Rating for Text-To-Speech via the OpenAI API: πŸ”΄\n\nNegative:\n* The software for training and inferencing of this model is proprietary, limiting running it locally or training by yourself\n* The trained model is not freely available, so the model can not be ran on-premises\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model’s performance and CO2 usage.\n\n### Rating for Text generation via LocalAI: 🟒\n\nPositive:\n* The software for training and inferencing of this model is open source\n* The trained model is freely available, and thus can be ran on-premises\n* The training data is freely available, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n\n### Rating for Image generation using Stable Diffusion via LocalAI : 🟑\n\nPositive:\n* The software for training and inferencing of this model is open source\n* The trained model is freely available, and thus can be ran on-premises\n\nNegative:\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model’s performance and CO2 usage.\n\n\n### Rating for Speech-To-Text using Whisper via LocalAI: 🟑\n\nPositive:\n* The software for training and inferencing of this model is open source\n* The trained model is freely available, and thus can be ran on-premises\n\nNegative:\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model’s performance and CO2 usage.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", "homepage": "https://github.com/nextcloud/integration_openai", "licenses": [ @@ -190,9 +190,9 @@ ] }, "integration_paperless": { - "hash": "sha256-70goWT+uhdYCLIc68+kYEeWoO0rZMYbVgBcjQ88fKgw=", - "url": "https://github.com/nextcloud-releases/integration_paperless/releases/download/v1.0.7/integration_paperless-v1.0.7.tar.gz", - "version": "1.0.7", + "hash": "sha256-srDdT0TgZ21HUXdesISGy8g/1MfBNUMaAnOmxm0qWbQ=", + "url": "https://github.com/nextcloud-releases/integration_paperless/releases/download/v1.0.8/integration_paperless-v1.0.8.tar.gz", + "version": "1.0.8", "description": "Integration with the [Paperless](https://docs.paperless-ngx.com) Document Management System.\nIt adds a file action menu item that can be used to upload a file from your Nextcloud Files to Paperless.", "homepage": "", "licenses": [ @@ -200,9 +200,9 @@ ] }, "mail": { - "hash": "sha256-09cHSwrHODzvp+aOZN+WlKgG2nrdCGgjmSWpvmdlvGw=", - "url": "https://github.com/nextcloud-releases/mail/releases/download/v5.6.5/mail-v5.6.5.tar.gz", - "version": "5.6.5", + "hash": "sha256-wMHupvXkKWsqtze+urDC5TFRkdU7TsKTag0JIm8l59U=", + "url": "https://github.com/nextcloud-releases/mail/releases/download/v5.6.7/mail-v5.6.7.tar.gz", + "version": "5.6.7", "description": "**πŸ’Œ A mail app for Nextcloud**\n\n- **πŸš€ Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **πŸ“₯ Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **πŸ”’ Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **πŸ™ˆ We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **πŸ“¬ Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟒/🟑/🟠/πŸ”΄\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", "homepage": "https://github.com/nextcloud/mail#readme", "licenses": [ @@ -260,8 +260,8 @@ ] }, "oidc_login": { - "hash": "sha256-RLYquOE83xquzv+s38bahOixQ+y4UI6OxP9HfO26faI=", - "url": "https://github.com/pulsejet/nextcloud-oidc-login/releases/download/v3.2.2/oidc_login.tar.gz", + "hash": "sha256-iuJUhVU3PYFUddczyoJI1jnx7cWrgyN1X7dsQakyrl8=", + "url": "https://github.com/pulsejet/nextcloud-oidc-login/releases/download/v3.2.3/oidc_login.tar.gz", "version": "3.2.2", "description": "# OpenID Connect Login\n\nProvides user creation and login via one single OpenID Connect provider. Even though this is a fork of [nextcloud-social-login](https://github.com/zorn-v/nextcloud-social-login), it fundamentally differs in two ways - aims for simplistic, single provider login (and hence is very minimalistic), and it supports having LDAP as the primary user backend. This way, you can use OpenID Connect to login to Nextcloud while maintaining an LDAP backend with attributes with the LDAP plugin.\n\n### Features\n\n- Automatic [Identity provider endpoints discovery](https://openid.net/specs/openid-connect-discovery-1_0.html)\n- User creation at first login\n- User profile update at login (name, email, avatar, groups etc.)\n- Group creation\n- Automatic redirection from the nextcloud login page to the Identity Provider login page\n- WebDAV endpoints `Bearer` and `Basic` authentication", "homepage": "https://github.com/pulsejet/nextcloud-single-openid-connect", @@ -370,9 +370,9 @@ ] }, "spreed": { - "hash": "sha256-O4nEUZ4EeaYLqLDJ3AFsAH8T2aV8hsR5yxxje3R+sZs=", - "url": "https://github.com/nextcloud-releases/spreed/releases/download/v21.1.7/spreed-v21.1.7.tar.gz", - "version": "21.1.7", + "hash": "sha256-MrzQQB+GCVhLIWpLgxb6fMx+ZfAJJNFX1ssraZrImeg=", + "url": "https://github.com/nextcloud-releases/spreed/releases/download/v21.1.8/spreed-v21.1.8.tar.gz", + "version": "21.1.8", "description": "Chat, video & audio-conferencing using WebRTC\n\n* πŸ’¬ **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* πŸ‘₯ **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* πŸ’» **Screen sharing!** Share your screen with the participants of your call.\n* πŸš€ **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* πŸŒ‰ **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa.", "homepage": "https://github.com/nextcloud/spreed", "licenses": [ @@ -460,9 +460,9 @@ ] }, "user_oidc": { - "hash": "sha256-DDijFnQIxKLmGjQF2AdFfqQuoWu6qAr61yKN9Of89ko=", - "url": "https://github.com/nextcloud-releases/user_oidc/releases/download/v8.2.2/user_oidc-v8.2.2.tar.gz", - "version": "8.2.2", + "hash": "sha256-b88rQ4jtTSyrkT+lnorxtmU0qdZvDjNXL5DqHGhUbac=", + "url": "https://github.com/nextcloud-releases/user_oidc/releases/download/v8.3.0/user_oidc-v8.3.0.tar.gz", + "version": "8.3.0", "description": "Allows flexible configuration of an OIDC server as Nextcloud login user backend.", "homepage": "https://github.com/nextcloud/user_oidc", "licenses": [ @@ -480,9 +480,9 @@ ] }, "whiteboard": { - "hash": "sha256-JNOne206X+/2uQV6Tj9W3q5x2BYCl1DUnAAfXK81Msc=", - "url": "https://github.com/nextcloud-releases/whiteboard/releases/download/v1.5.0/whiteboard-v1.5.0.tar.gz", - "version": "1.5.0", + "hash": "sha256-uohvZiSkSmUdp7/EbEtkD/DJ6KCxV5bagmJ68lXoq+w=", + "url": "https://github.com/nextcloud-releases/whiteboard/releases/download/v1.5.2/whiteboard-v1.5.2.tar.gz", + "version": "1.5.2", "description": "The official whiteboard app for Nextcloud. It allows users to create and share whiteboards with other users and collaborate in real-time.\n\n**Whiteboard requires a separate collaboration server to work.** Please see the [documentation](https://github.com/nextcloud/whiteboard?tab=readme-ov-file#backend) on how to install it.\n\n- 🎨 Drawing shapes, writing text, connecting elements\n- πŸ“ Real-time collaboration\n- πŸ–ΌοΈ Add images with drag and drop\n- πŸ“Š Easily add mermaid diagrams\n- ✨ Use the Smart Picker to embed other elements from Nextcloud\n- πŸ“¦ Image export\n- πŸ’ͺ Strong foundation: We use Excalidraw as our base library", "homepage": "https://github.com/nextcloud/whiteboard", "licenses": [ diff --git a/pkgs/servers/nextcloud/packages/32.json b/pkgs/servers/nextcloud/packages/32.json index 2cf62100e99f..b71c173e6fda 100644 --- a/pkgs/servers/nextcloud/packages/32.json +++ b/pkgs/servers/nextcloud/packages/32.json @@ -10,9 +10,9 @@ ] }, "calendar": { - "hash": "sha256-Kxs/PRKFt30CMyU0NeOxHy6sAm8vRBJ4xXLuupRrpgE=", - "url": "https://github.com/nextcloud-releases/calendar/releases/download/v6.1.3/calendar-v6.1.3.tar.gz", - "version": "6.1.3", + "hash": "sha256-bQczqQmVranqyBtd45i1OerpGiuZ7EofsD9gMYZU5FY=", + "url": "https://github.com/nextcloud-releases/calendar/releases/download/v6.1.5/calendar-v6.1.5.tar.gz", + "version": "6.1.5", "description": "A Calendar app for Nextcloud. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* πŸš€ **Integration with other Nextcloud apps!** Like Contacts, Talk, Tasks, Deck and Circles\n* 🌐 **WebCal Support!** Want to see your favorite team's matchdays in your calendar? No problem!\n* πŸ™‹ **Attendees!** Invite people to your events\n* ⌚ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* πŸ” **Search!** Find your events at ease\n* β˜‘οΈ **Tasks!** See tasks or Deck cards with a due date directly in the calendar\n* πŸ”ˆ **Talk rooms!** Create an associated Talk room when booking a meeting with just one click\n* πŸ“† **Appointment booking** Send people a link so they can book an appointment with you [using this app](https://apps.nextcloud.com/apps/appointments)\n* πŸ“Ž **Attachments!** Add, upload and view event attachments\n* πŸ™ˆ **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.", "homepage": "https://github.com/nextcloud/calendar/", "licenses": [ @@ -20,9 +20,9 @@ ] }, "collectives": { - "hash": "sha256-a71w9Ya8bZdo4/H225vw2FjSBSMM57hLbcMfBN2aSs0=", - "url": "https://github.com/nextcloud/collectives/releases/download/v3.4.0/collectives-3.4.0.tar.gz", - "version": "3.4.0", + "hash": "sha256-DFyyXpUxqC9wI0SUTTkBtur6JfzFlACPrMjIoeQ0wlU=", + "url": "https://github.com/nextcloud/collectives/releases/download/v3.5.0/collectives-3.5.0.tar.gz", + "version": "3.5.0", "description": "Collectives is a Nextcloud App for activist and community projects to organize together.\nCome and gather in collectives to build shared knowledge.\n\n* πŸ‘₯ **Collective and non-hierarchical workflow by heart**: Collectives are\n tied to a [Nextcloud Team](https://github.com/nextcloud/circles) and\n owned by the collective.\n* πŸ“ **Collaborative page editing** like known from Etherpad thanks to the\n [Text app](https://github.com/nextcloud/text).\n* πŸ”€ **Well-known [Markdown](https://en.wikipedia.org/wiki/Markdown) syntax**\n for page formatting.\n\n## Installation\n\nIn your Nextcloud instance, simply navigate to **Β»AppsΒ«**, find the\n**Β»TeamsΒ«** and **Β»CollectivesΒ«** apps and enable them.", "homepage": "https://github.com/nextcloud/collectives", "licenses": [ @@ -30,9 +30,9 @@ ] }, "contacts": { - "hash": "sha256-i70tENa8uQxnYD2LsURET2LOrENtgUskLuiY9mO+fGA=", - "url": "https://github.com/nextcloud-releases/contacts/releases/download/v8.1.2/contacts-v8.1.2.tar.gz", - "version": "8.1.2", + "hash": "sha256-+vE/nvRU6ApMeNKEtxyxwzmJ7/YReAjXztINJRweeKg=", + "url": "https://github.com/nextcloud-releases/contacts/releases/download/v8.2.1/contacts-v8.2.1.tar.gz", + "version": "8.2.1", "description": "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* πŸš€ **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* πŸŽ‰ **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* πŸ‘₯ **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* πŸ™ˆ **We’re not reinventing the wheel!** Based on the great and open SabreDAV library.", "homepage": "https://github.com/nextcloud/contacts#readme", "licenses": [ @@ -50,9 +50,9 @@ ] }, "cospend": { - "hash": "sha256-KD2l6qakEgPrnogJcLNZfO+/OUYnVI7Jn8NtWOweWHc=", - "url": "https://github.com/julien-nc/cospend-nc/releases/download/v3.1.6/cospend-3.1.6.tar.gz", - "version": "3.1.6", + "hash": "sha256-mclcZDNmvpYX/2q7azyiTLSCiTYvk7ILeqtb/8+0ADQ=", + "url": "https://github.com/julien-nc/cospend-nc/releases/download/v3.2.0/cospend-3.2.0.tar.gz", + "version": "3.2.0", "description": "# Nextcloud Cospend πŸ’°\n\nNextcloud Cospend is a group/shared budget manager. It was inspired by the great [IHateMoney](https://github.com/spiral-project/ihatemoney/).\n\nYou can use it when you share a house, when you go on vacation with friends, whenever you share expenses with a group of people.\n\nIt lets you create projects with members and bills. Each member has a balance computed from the project bills. Balances are not an absolute amount of money at members disposal but rather a relative information showing if a member has spent more for the group than the group has spent for her/him, independently of exactly who spent money for whom. This way you can see who owes the group and who the group owes. Ultimately you can ask for a settlement plan telling you which payments to make to reset members balances.\n\nProject members are independent from Nextcloud users. Projects can be shared with other Nextcloud users or via public links.\n\n[MoneyBuster](https://gitlab.com/eneiluj/moneybuster) Android client is [available in F-Droid](https://f-droid.org/packages/net.eneiluj.moneybuster/) and on the [Play store](https://play.google.com/store/apps/details?id=net.eneiluj.moneybuster).\n\n[PayForMe](https://github.com/mayflower/PayForMe) iOS client is currently under developpement!\n\nThe private and public APIs are documented using [the Nextcloud OpenAPI extractor](https://github.com/nextcloud/openapi-extractor/). This documentation can be accessed directly in Nextcloud. All you need is to install Cospend (>= v1.6.0) and use the [the OCS API Viewer app](https://apps.nextcloud.com/apps/ocs_api_viewer) to browse the OpenAPI documentation.\n\n## Features\n\n* ✎ Create/edit/delete projects, members, bills, bill categories, currencies\n* βš– Check member balances\n* πŸ—  Display project statistics\n* β™» Display settlement plan\n* Move bills from one project to another\n* Move bills to trash before actually deleting them\n* Archive old projects before deleting them\n* πŸŽ‡ Automatically create reimbursement bills from settlement plan\n* πŸ—“ Create recurring bills (day/week/month/year)\n* πŸ“Š Optionally provide custom amount for each member in new bills\n* πŸ”— Link personal files to bills (picture of physical receipt for example)\n* πŸ‘© Public links for people outside Nextcloud (can be password protected)\n* πŸ‘« Share projects with Nextcloud users/groups/circles\n* πŸ–« Import/export projects as csv (compatible with csv files from IHateMoney and SplitWise)\n* πŸ”— Generate link/QRCode to easily add projects in MoneyBuster\n* πŸ—² Implement Nextcloud notifications and activity stream\n\nThis app usually support the 2 or 3 last major versions of Nextcloud.\n\nThis app is under development.\n\n🌍 Help us to translate this app on [Nextcloud-Cospend/MoneyBuster Crowdin project](https://crowdin.com/project/moneybuster).\n\nβš’ Check out other ways to help in the [contribution guidelines](https://github.com/julien-nc/cospend-nc/blob/master/CONTRIBUTING.md).\n\n## Documentation\n\n* [User documentation](https://github.com/julien-nc/cospend-nc/blob/master/docs/user.md)\n* [Admin documentation](https://github.com/julien-nc/cospend-nc/blob/master/docs/admin.md)\n* [Developer documentation](https://github.com/julien-nc/cospend-nc/blob/master/docs/dev.md)\n* [CHANGELOG](https://github.com/julien-nc/cospend-nc/blob/master/CHANGELOG.md#change-log)\n* [AUTHORS](https://github.com/julien-nc/cospend-nc/blob/master/AUTHORS.md#authors)\n\n## Known issues\n\n* It does not make you rich\n\nAny feedback will be appreciated.\n\n\n\n## Donation\n\nI develop this app during my free time.\n\n* [Donate with Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66PALMY8SF5JE) (you don't need a paypal account)\n* [Donate with Liberapay : ![Donate using Liberapay](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.com/eneiluj/donate)", "homepage": "https://github.com/julien-nc/cospend-nc", "licenses": [ @@ -130,19 +130,19 @@ ] }, "groupfolders": { - "hash": "sha256-tY/8Rn7EVgcRGDILcENqWGaQ+z6916iOQNcNOtRBgtQ=", - "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v20.1.6/groupfolders-v20.1.6.tar.gz", - "version": "20.1.6", - "description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.", + "hash": "sha256-oA4w2BqFwU6kQ6guSz6roi31v+5u66t7nVGiAiSUplE=", + "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v20.1.7/groupfolders-v20.1.7.tar.gz", + "version": "20.1.7", + "description": "Admin configured folders shared with everyone in a team.\n\nFolders can be configured from *Team folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more teams, control their write/sharing permissions and assign a quota for the folder.", "homepage": "https://github.com/nextcloud/groupfolders", "licenses": [ "agpl" ] }, "impersonate": { - "hash": "sha256-mduIsKRwog658wnBHLVdBWg0d9IqXKdqHSffMuwL/Xo=", - "url": "https://github.com/nextcloud-releases/impersonate/releases/download/v3.0.0/impersonate-v3.0.0.tar.gz", - "version": "3.0.0", + "hash": "sha256-mOlaUYaGRoYITwjIpwhUnKLh9HOVef77dCpFP4bC5RQ=", + "url": "https://github.com/nextcloud-releases/impersonate/releases/download/v3.0.1/impersonate-v3.0.1.tar.gz", + "version": "3.0.1", "description": "By installing the impersonate app of your Nextcloud you enable administrators to impersonate other users on the Nextcloud server. This is especially useful for debugging issues reported by users.\n\nTo impersonate a user an administrator has to simply follow the following four steps:\n\n1. Login as administrator to Nextcloud.\n2. Open users administration interface.\n3. Select the impersonate button on the affected user.\n4. Confirm the impersonation.\n\nThe administrator is then logged-in as the user, to switch back to the regular user account they simply have to press the logout button.\n\n**Note:**\n\n- This app is not compatible with instances that have encryption enabled.\n- While impersonate actions are logged note that actions performed impersonated will be logged as the impersonated user.\n- Impersonating a user is only possible after their first login.\n- You can limit which users/groups can use impersonation in Administration settings > Additional settings.", "homepage": "https://github.com/nextcloud/impersonate", "licenses": [ @@ -160,9 +160,9 @@ ] }, "integration_openai": { - "hash": "sha256-+pQ3c9H8Trj2CP10f6QeCJxVdTyD5qVsN1WS6PlQYPE=", - "url": "https://github.com/nextcloud-releases/integration_openai/releases/download/v3.9.1/integration_openai-v3.9.1.tar.gz", - "version": "3.9.1", + "hash": "sha256-OimO9pyuv2O+NCvImAoarr8/aQr313duHmItr82PQLQ=", + "url": "https://github.com/nextcloud-releases/integration_openai/releases/download/v3.10.0/integration_openai-v3.10.0.tar.gz", + "version": "3.10.0", "description": "⚠️ The smart pickers have been removed from this app\nas they are now included in the [Assistant app](https://apps.nextcloud.com/apps/assistant).\n\nThis app implements:\n\n* Text generation providers: Free prompt, Summarize, Headline, Context Write, Chat, and Reformulate (using any available large language model)\n* A Translation provider (using any available language model)\n* A SpeechToText provider (using Whisper)\n* An image generation provider\n\n⚠️ Context Write, Summarize, Headline and Reformulate have mainly been tested with OpenAI.\nThey might work when connecting to other services, without any guarantee.\n\nInstead of connecting to the OpenAI API for these, you can also connect to a self-hosted [LocalAI](https://localai.io) instance or [Ollama](https://ollama.com/) instance\nor to any service that implements an API similar to the OpenAI one, for example:\n[IONOS AI Model Hub](https://docs.ionos.com/cloud/ai/ai-model-hub), [Plusserver](https://www.plusserver.com/en/ai-platform/) or [MistralAI](https://mistral.ai).\n\n⚠️ This app is mainly tested with OpenAI. We do not guarantee it works perfectly\nwith other services that implement OpenAI-compatible APIs with slight differences.\n\n## Improve AI task pickup speed\n\nTo avoid task processing execution delay, setup at 4 background job workers in the main server (where Nextcloud is installed). The setup process is documented here: https://docs.nextcloud.com/server/latest/admin_manual/ai/overview.html#improve-ai-task-pickup-speed\n\n## Ethical AI Rating\n### Rating for Text generation using ChatGPT via the OpenAI API: πŸ”΄\n\nNegative:\n* The software for training and inference of this model is proprietary, limiting running it locally or training by yourself\n* The trained model is not freely available, so the model can not be run on-premises\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model's performance and CO2 usage.\n\n\n### Rating for Translation using ChatGPT via the OpenAI API: πŸ”΄\n\nNegative:\n* The software for training and inference of this model is proprietary, limiting running it locally or training by yourself\n* The trained model is not freely available, so the model can not be run on-premises\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model's performance and CO2 usage.\n\n### Rating for Image generation using DALLΒ·E via the OpenAI API: πŸ”΄\n\nNegative:\n* The software for training and inferencing of this model is proprietary, limiting running it locally or training by yourself\n* The trained model is not freely available, so the model can not be ran on-premises\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model’s performance and CO2 usage.\n\n\n### Rating for Speech-To-Text using Whisper via the OpenAI API: 🟑\n\nPositive:\n* The software for training and inferencing of this model is open source\n* The trained model is freely available, and thus can run on-premise\n\nNegative:\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model’s performance and CO2 usage.\n\n### Rating for Text-To-Speech via the OpenAI API: πŸ”΄\n\nNegative:\n* The software for training and inferencing of this model is proprietary, limiting running it locally or training by yourself\n* The trained model is not freely available, so the model can not be ran on-premises\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model’s performance and CO2 usage.\n\n### Rating for Text generation via LocalAI: 🟒\n\nPositive:\n* The software for training and inferencing of this model is open source\n* The trained model is freely available, and thus can be ran on-premises\n* The training data is freely available, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n\n### Rating for Image generation using Stable Diffusion via LocalAI : 🟑\n\nPositive:\n* The software for training and inferencing of this model is open source\n* The trained model is freely available, and thus can be ran on-premises\n\nNegative:\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model’s performance and CO2 usage.\n\n\n### Rating for Speech-To-Text using Whisper via LocalAI: 🟑\n\nPositive:\n* The software for training and inferencing of this model is open source\n* The trained model is freely available, and thus can be ran on-premises\n\nNegative:\n* The training data is not freely available, limiting the ability of external parties to check and correct for bias or optimise the model’s performance and CO2 usage.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", "homepage": "https://github.com/nextcloud/integration_openai", "licenses": [ @@ -170,9 +170,9 @@ ] }, "integration_paperless": { - "hash": "sha256-70goWT+uhdYCLIc68+kYEeWoO0rZMYbVgBcjQ88fKgw=", - "url": "https://github.com/nextcloud-releases/integration_paperless/releases/download/v1.0.7/integration_paperless-v1.0.7.tar.gz", - "version": "1.0.7", + "hash": "sha256-srDdT0TgZ21HUXdesISGy8g/1MfBNUMaAnOmxm0qWbQ=", + "url": "https://github.com/nextcloud-releases/integration_paperless/releases/download/v1.0.8/integration_paperless-v1.0.8.tar.gz", + "version": "1.0.8", "description": "Integration with the [Paperless](https://docs.paperless-ngx.com) Document Management System.\nIt adds a file action menu item that can be used to upload a file from your Nextcloud Files to Paperless.", "homepage": "", "licenses": [ @@ -180,9 +180,9 @@ ] }, "mail": { - "hash": "sha256-09cHSwrHODzvp+aOZN+WlKgG2nrdCGgjmSWpvmdlvGw=", - "url": "https://github.com/nextcloud-releases/mail/releases/download/v5.6.5/mail-v5.6.5.tar.gz", - "version": "5.6.5", + "hash": "sha256-wMHupvXkKWsqtze+urDC5TFRkdU7TsKTag0JIm8l59U=", + "url": "https://github.com/nextcloud-releases/mail/releases/download/v5.6.7/mail-v5.6.7.tar.gz", + "version": "5.6.7", "description": "**πŸ’Œ A mail app for Nextcloud**\n\n- **πŸš€ Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **πŸ“₯ Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **πŸ”’ Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **πŸ™ˆ We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **πŸ“¬ Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟒/🟑/🟠/πŸ”΄\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", "homepage": "https://github.com/nextcloud/mail#readme", "licenses": [ @@ -229,6 +229,16 @@ "agpl" ] }, + "oidc_login": { + "hash": "sha256-iuJUhVU3PYFUddczyoJI1jnx7cWrgyN1X7dsQakyrl8=", + "url": "https://github.com/pulsejet/nextcloud-oidc-login/releases/download/v3.2.3/oidc_login.tar.gz", + "version": "3.2.2", + "description": "# OpenID Connect Login\n\nProvides user creation and login via one single OpenID Connect provider. Even though this is a fork of [nextcloud-social-login](https://github.com/zorn-v/nextcloud-social-login), it fundamentally differs in two ways - aims for simplistic, single provider login (and hence is very minimalistic), and it supports having LDAP as the primary user backend. This way, you can use OpenID Connect to login to Nextcloud while maintaining an LDAP backend with attributes with the LDAP plugin.\n\n### Features\n\n- Automatic [Identity provider endpoints discovery](https://openid.net/specs/openid-connect-discovery-1_0.html)\n- User creation at first login\n- User profile update at login (name, email, avatar, groups etc.)\n- Group creation\n- Automatic redirection from the nextcloud login page to the Identity Provider login page\n- WebDAV endpoints `Bearer` and `Basic` authentication", + "homepage": "https://github.com/pulsejet/nextcloud-single-openid-connect", + "licenses": [ + "agpl" + ] + }, "onlyoffice": { "hash": "sha256-lAe1J2QKsEWS4l4QOiISDi9iyVCEyO8tS94aNMjUUR4=", "url": "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v9.12.0/onlyoffice.tar.gz", @@ -330,9 +340,9 @@ ] }, "spreed": { - "hash": "sha256-R5LH7wiBwURBfJAJfO/cg1IpH/HhFQ0XEcJNmJPQhTA=", - "url": "https://github.com/nextcloud-releases/spreed/releases/download/v22.0.7/spreed-v22.0.7.tar.gz", - "version": "22.0.7", + "hash": "sha256-FR2T4cFhRa9Yef6sIkQEZ7XiVQhpQeW6hqYXtnid/mM=", + "url": "https://github.com/nextcloud-releases/spreed/releases/download/v22.0.8/spreed-v22.0.8.tar.gz", + "version": "22.0.8", "description": "Chat, video & audio-conferencing using WebRTC\n\n* πŸ’¬ **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* πŸ‘₯ **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* πŸ’» **Screen sharing!** Share your screen with the participants of your call.\n* πŸš€ **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* πŸŒ‰ **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa.", "homepage": "https://github.com/nextcloud/spreed", "licenses": [ @@ -410,9 +420,9 @@ ] }, "user_oidc": { - "hash": "sha256-DDijFnQIxKLmGjQF2AdFfqQuoWu6qAr61yKN9Of89ko=", - "url": "https://github.com/nextcloud-releases/user_oidc/releases/download/v8.2.2/user_oidc-v8.2.2.tar.gz", - "version": "8.2.2", + "hash": "sha256-b88rQ4jtTSyrkT+lnorxtmU0qdZvDjNXL5DqHGhUbac=", + "url": "https://github.com/nextcloud-releases/user_oidc/releases/download/v8.3.0/user_oidc-v8.3.0.tar.gz", + "version": "8.3.0", "description": "Allows flexible configuration of an OIDC server as Nextcloud login user backend.", "homepage": "https://github.com/nextcloud/user_oidc", "licenses": [ @@ -430,9 +440,9 @@ ] }, "whiteboard": { - "hash": "sha256-JNOne206X+/2uQV6Tj9W3q5x2BYCl1DUnAAfXK81Msc=", - "url": "https://github.com/nextcloud-releases/whiteboard/releases/download/v1.5.0/whiteboard-v1.5.0.tar.gz", - "version": "1.5.0", + "hash": "sha256-uohvZiSkSmUdp7/EbEtkD/DJ6KCxV5bagmJ68lXoq+w=", + "url": "https://github.com/nextcloud-releases/whiteboard/releases/download/v1.5.2/whiteboard-v1.5.2.tar.gz", + "version": "1.5.2", "description": "The official whiteboard app for Nextcloud. It allows users to create and share whiteboards with other users and collaborate in real-time.\n\n**Whiteboard requires a separate collaboration server to work.** Please see the [documentation](https://github.com/nextcloud/whiteboard?tab=readme-ov-file#backend) on how to install it.\n\n- 🎨 Drawing shapes, writing text, connecting elements\n- πŸ“ Real-time collaboration\n- πŸ–ΌοΈ Add images with drag and drop\n- πŸ“Š Easily add mermaid diagrams\n- ✨ Use the Smart Picker to embed other elements from Nextcloud\n- πŸ“¦ Image export\n- πŸ’ͺ Strong foundation: We use Excalidraw as our base library", "homepage": "https://github.com/nextcloud/whiteboard", "licenses": [ From 0c6eccf354df0772c9cbf264a86749d652ea63b7 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 16 Jan 2026 15:02:40 +0000 Subject: [PATCH 27/80] tomat: 2.6.0 -> 2.8.0 --- pkgs/by-name/to/tomat/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/to/tomat/package.nix b/pkgs/by-name/to/tomat/package.nix index 5aaf5eb5e467..9e9223c52a36 100644 --- a/pkgs/by-name/to/tomat/package.nix +++ b/pkgs/by-name/to/tomat/package.nix @@ -9,16 +9,16 @@ rustPlatform.buildRustPackage rec { pname = "tomat"; - version = "2.6.0"; + version = "2.8.0"; src = fetchFromGitHub { owner = "jolars"; repo = "tomat"; tag = "v${version}"; - hash = "sha256-EihzQT+JUO9PlXgYg3R1VbBxRfOnw4b94oRV/mKZ60U="; + hash = "sha256-Jj/ObyFRvsdwxEvTQCIbkFkR3Zrs7SsU11rOZxclA7E="; }; - cargoHash = "sha256-xCdQAhK3/0meat2YvsWJHPz0IDYEvwcHi8pd0mckELQ="; + cargoHash = "sha256-zmQ7Dk6a0F7XpD3BcOFU87to48j6J5+xNI2XGRx1u/E="; nativeBuildInputs = [ pkg-config From f434981acd68132a707e439d3f3cf4462654e4de Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 16 Jan 2026 16:39:31 +0000 Subject: [PATCH 28/80] siyuan: 3.5.2 -> 3.5.3 --- pkgs/by-name/si/siyuan/package.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/si/siyuan/package.nix b/pkgs/by-name/si/siyuan/package.nix index ddb8b5c044f7..08c971917437 100644 --- a/pkgs/by-name/si/siyuan/package.nix +++ b/pkgs/by-name/si/siyuan/package.nix @@ -36,20 +36,20 @@ let in stdenv.mkDerivation (finalAttrs: { pname = "siyuan"; - version = "3.5.2"; + version = "3.5.3"; src = fetchFromGitHub { owner = "siyuan-note"; repo = "siyuan"; rev = "v${finalAttrs.version}"; - hash = "sha256-Rimb2OfohjTfaqVCZcoGDxpEfXvyp2CLqwqOjqAJjJg="; + hash = "sha256-YAd7XVJLs66CAhb5ro8o5GrT5AhVpp/RHOpl1XkBBHU="; }; kernel = buildGoModule { name = "${finalAttrs.pname}-${finalAttrs.version}-kernel"; inherit (finalAttrs) src; sourceRoot = "${finalAttrs.src.name}/kernel"; - vendorHash = "sha256-PNFIWH6IL/Zj/eK/5M8ACICOeQi4WEBIh1aY4eyfkn4="; + vendorHash = "sha256-2O8gk6Y6odlMldUfanPf5MIiczfd5lH/yMX0IbIEVvc="; patches = [ (replaceVars ./set-pandoc-path.patch { @@ -100,7 +100,7 @@ stdenv.mkDerivation (finalAttrs: { ; pnpm = pnpm_9; fetcherVersion = 1; - hash = "sha256-JTfCU5kWR2tvVNFT+PAzqKe8tUk4+uwwVgo85VOntck="; + hash = "sha256-/h8tHSJGsqjFXp/qpxOqoHmsEiuRXvIWBLRalTdXVi4="; }; sourceRoot = "${finalAttrs.src.name}/app"; From 08f11569aab8565bb2fdfaa1cfffb27e484b32c8 Mon Sep 17 00:00:00 2001 From: Eric Rodrigues Pires Date: Fri, 16 Jan 2026 08:03:57 -0300 Subject: [PATCH 29/80] sandhole: move cmake to nativeBuildInputs --- pkgs/by-name/sa/sandhole/package.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/sa/sandhole/package.nix b/pkgs/by-name/sa/sandhole/package.nix index 7fbd99bc9ea3..0fec93e3eb17 100644 --- a/pkgs/by-name/sa/sandhole/package.nix +++ b/pkgs/by-name/sa/sandhole/package.nix @@ -24,8 +24,11 @@ rustPlatform.buildRustPackage (finalAttrs: { echo "fn main() {}" > tests/integration/main.rs ''; - buildInputs = [ cmake ]; - nativeBuildInputs = [ perl ]; + nativeBuildInputs = [ + cmake + perl + ]; + strictDeps = true; useNextest = true; checkFlags = [ From ce7878159a68a502666c4c1b296679a70f0dbd88 Mon Sep 17 00:00:00 2001 From: Bart Brouns Date: Fri, 16 Jan 2026 19:09:25 +0100 Subject: [PATCH 30/80] surge-XT: fix lv2 build --- pkgs/by-name/su/surge-XT/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/su/surge-XT/package.nix b/pkgs/by-name/su/surge-XT/package.nix index d3696a4ef133..82ec458255eb 100644 --- a/pkgs/by-name/su/surge-XT/package.nix +++ b/pkgs/by-name/su/surge-XT/package.nix @@ -72,7 +72,7 @@ stdenv.mkDerivation (finalAttrs: { cmakeFlags = [ (lib.cmakeBool "SURGE_SKIP_STANDALONE" (!buildStandalone)) (lib.cmakeBool "SURGE_SKIP_VST3" (!buildVST3)) - (lib.cmakeBool "SURGE_SKIP_LV2" buildLV2) + (lib.cmakeBool "SURGE_BUILD_LV2" buildLV2) (lib.cmakeBool "SURGE_BUILD_CLAP" buildCLAP) ]; @@ -95,7 +95,7 @@ stdenv.mkDerivation (finalAttrs: { }; meta = { - description = "LV2 & VST3 synthesizer plug-in (previously released as Vember Audio Surge)"; + description = "LV2, VST3 & CLAP synthesizer plug-in (previously released as Vember Audio Surge)"; homepage = "https://surge-synthesizer.github.io"; license = lib.licenses.gpl3; platforms = [ "x86_64-linux" ]; From 0bea9b1f6174350a1ae8ce8f837f2ab441c936bb Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 16 Jan 2026 21:34:38 +0000 Subject: [PATCH 31/80] tideways-daemon: 1.11.4 -> 1.12.0 --- pkgs/by-name/ti/tideways-daemon/package.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/ti/tideways-daemon/package.nix b/pkgs/by-name/ti/tideways-daemon/package.nix index ba8884422630..fc98bd88056c 100644 --- a/pkgs/by-name/ti/tideways-daemon/package.nix +++ b/pkgs/by-name/ti/tideways-daemon/package.nix @@ -10,7 +10,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { pname = "tideways-daemon"; - version = "1.11.4"; + version = "1.12.0"; src = finalAttrs.passthru.sources.${stdenvNoCC.hostPlatform.system} @@ -28,15 +28,15 @@ stdenvNoCC.mkDerivation (finalAttrs: { sources = { "x86_64-linux" = fetchurl { url = "https://tideways.s3.amazonaws.com/daemon/${finalAttrs.version}/tideways-daemon_linux_amd64-${finalAttrs.version}.tar.gz"; - hash = "sha256-wHiVNkoiaPF4HhE6dnBQXlGMOTqi6Mq0L7HCIFfybRk="; + hash = "sha256-aPG7+OEe8abub7vEfe4VOLBBvuAGS1EQ016TyTsuaWc="; }; "aarch64-linux" = fetchurl { url = "https://tideways.s3.amazonaws.com/daemon/${finalAttrs.version}/tideways-daemon_linux_aarch64-${finalAttrs.version}.tar.gz"; - hash = "sha256-5ga73KByQ2g/L23t+TOLrd3tQa4O5ehN/C26I/mbVuM="; + hash = "sha256-zsk2ShAg6v6/K1GG07rw3fpcDz8jcFnEREcZz6Y9FZA="; }; "aarch64-darwin" = fetchurl { url = "https://tideways.s3.amazonaws.com/daemon/${finalAttrs.version}/tideways-daemon_macos_arm64-${finalAttrs.version}.tar.gz"; - hash = "sha256-5fSEqaTDR0u6vnQuIv8cRuIMlfFDfw2vh9uFzAf7nTs="; + hash = "sha256-OwKoOKiyeUNnw0iO+o9B33N2rlsw2FhqupAXu1VBgOA="; }; }; updateScript = "${ From 0c22f09e6d2182ed2d753d675b00ef3cdbf563cc Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 16 Jan 2026 22:41:09 +0000 Subject: [PATCH 32/80] octavePackages.fuzzy-logic-toolkit: 0.6.1 -> 0.6.2 --- .../octave-modules/fuzzy-logic-toolkit/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/octave-modules/fuzzy-logic-toolkit/default.nix b/pkgs/development/octave-modules/fuzzy-logic-toolkit/default.nix index e4b0bce93ea1..86dd634b17ce 100644 --- a/pkgs/development/octave-modules/fuzzy-logic-toolkit/default.nix +++ b/pkgs/development/octave-modules/fuzzy-logic-toolkit/default.nix @@ -6,13 +6,13 @@ buildOctavePackage rec { pname = "fuzzy-logic-toolkit"; - version = "0.6.1"; + version = "0.6.2"; src = fetchFromGitHub { owner = "lmarkowsky"; repo = "fuzzy-logic-toolkit"; tag = version; - sha256 = "sha256-lnYzX4rq3j7rrbD8m0EnrWpbMJD6tqtMVCYu4mlLFCM="; + sha256 = "sha256-cNzUjhJgx6SVfy8QrKUr02HvNsAh5ItQN3+hapA5eq0="; }; meta = { From 3b83e6257fbcb420d32b762abfb12b7a928bf282 Mon Sep 17 00:00:00 2001 From: Vincent Demeester Date: Fri, 16 Jan 2026 23:50:00 +0100 Subject: [PATCH 33/80] gosmee: migrate to finalAttrs pattern and add best practices - Use finalAttrs pattern instead of rec for better self-referencing - Change rev to tag for more semantic git fetching - Add versionCheckHook to verify binary functionality post-install - Add nix-update-script for automated version updates - Add changelog URL and mainProgram to meta - Improve consistency with modern nixpkgs patterns (following lazyworktree) Signed-off-by: Vincent Demeester --- pkgs/by-name/go/gosmee/package.nix | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/go/gosmee/package.nix b/pkgs/by-name/go/gosmee/package.nix index 6a557f1e5a9b..58873a37dd07 100644 --- a/pkgs/by-name/go/gosmee/package.nix +++ b/pkgs/by-name/go/gosmee/package.nix @@ -4,24 +4,27 @@ buildGoModule, fetchFromGitHub, installShellFiles, + versionCheckHook, + nix-update-script, }: -buildGoModule rec { +buildGoModule (finalAttrs: { pname = "gosmee"; version = "0.28.3"; src = fetchFromGitHub { owner = "chmouel"; repo = "gosmee"; - rev = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-97Z/q0cOX4zPGYaeAKqxm3sb7WfJ1fpUcMhuqHsPG1c="; }; + vendorHash = null; nativeBuildInputs = [ installShellFiles ]; postPatch = '' - printf ${version} > gosmee/templates/version + printf ${finalAttrs.version} > gosmee/templates/version ''; postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) '' @@ -31,13 +34,20 @@ buildGoModule rec { --zsh <($out/bin/gosmee completion zsh) ''; + doInstallCheck = true; + nativeInstallCheckInputs = [ versionCheckHook ]; + + passthru.updateScript = nix-update-script { }; + meta = { description = "Command line server and client for webhooks deliveries (and https://smee.io)"; homepage = "https://github.com/chmouel/gosmee"; + changelog = "https://github.com/chmouel/gosmee/releases/tag/v${finalAttrs.version}"; license = lib.licenses.asl20; maintainers = with lib.maintainers; [ vdemeester chmouel ]; + mainProgram = "gosmee"; }; -} +}) From de11f2d34d7f5a15abb1efc174a7bb75436d835b Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 16 Jan 2026 23:22:49 +0000 Subject: [PATCH 34/80] azurehound: 2.8.2 -> 2.8.3 --- pkgs/by-name/az/azurehound/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/az/azurehound/package.nix b/pkgs/by-name/az/azurehound/package.nix index 2db052e46212..21059d125c07 100644 --- a/pkgs/by-name/az/azurehound/package.nix +++ b/pkgs/by-name/az/azurehound/package.nix @@ -8,13 +8,13 @@ buildGoModule rec { pname = "azurehound"; - version = "2.8.2"; + version = "2.8.3"; src = fetchFromGitHub { owner = "SpecterOps"; repo = "AzureHound"; tag = "v${version}"; - hash = "sha256-eXcHBwWjZhpKwUK+sSXEDFiiBlBD+b6E50cV3QX38fw="; + hash = "sha256-ecLpNIYczim4dLbNwkOtwieJrjoSOXv4KHvSMuMjOw0="; }; vendorHash = "sha256-+iNFWKFNON4HX2mf4O29zAdElEkIGIx55Wi9MRtg1dg="; From 2fe626e5718eb2b1bbe3c789bf91e5a0d46e52f7 Mon Sep 17 00:00:00 2001 From: qzylinra <225773816+qzylinra@users.noreply.github.com> Date: Sat, 17 Jan 2026 07:35:14 +0800 Subject: [PATCH 35/80] venera: use flutter338 --- pkgs/by-name/ve/venera/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ve/venera/package.nix b/pkgs/by-name/ve/venera/package.nix index 159116d5b888..af12c0dea5eb 100644 --- a/pkgs/by-name/ve/venera/package.nix +++ b/pkgs/by-name/ve/venera/package.nix @@ -1,6 +1,6 @@ { lib, - flutter335, + flutter338, fetchFromGitHub, webkitgtk_4_1, copyDesktopItems, @@ -22,7 +22,7 @@ let hash = "sha256-hqpWkYXWM/kZU2kVAP2ak2TDZt3m4j4809rGhX68dek="; }; in -flutter335.buildFlutterApplication { +flutter338.buildFlutterApplication { pname = "venera"; inherit version src; From 235528febf8cd208a7d28e937e2dde943567d3cc Mon Sep 17 00:00:00 2001 From: qzylinra <225773816+qzylinra@users.noreply.github.com> Date: Sat, 17 Jan 2026 07:36:49 +0800 Subject: [PATCH 36/80] server-box: use flutter338 --- pkgs/by-name/se/server-box/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/se/server-box/package.nix b/pkgs/by-name/se/server-box/package.nix index 91769fe79f90..77a93cc5449d 100644 --- a/pkgs/by-name/se/server-box/package.nix +++ b/pkgs/by-name/se/server-box/package.nix @@ -1,6 +1,6 @@ { lib, - flutter335, + flutter338, fetchFromGitHub, autoPatchelfHook, copyDesktopItems, @@ -22,7 +22,7 @@ let hash = "sha256-fmL03BNVi1aKhb0jV7MnEtRKTOEaLBGl6uMJtLr6cFk="; }; in -flutter335.buildFlutterApplication { +flutter338.buildFlutterApplication { pname = "server-box"; inherit version src; From 7a588efbe6611fbb131b129ef2884bcd32e58ce0 Mon Sep 17 00:00:00 2001 From: qzylinra <225773816+qzylinra@users.noreply.github.com> Date: Sat, 17 Jan 2026 07:37:55 +0800 Subject: [PATCH 37/80] oneanime: use flutter338 --- pkgs/by-name/on/oneanime/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/on/oneanime/package.nix b/pkgs/by-name/on/oneanime/package.nix index e037c991c751..f1d47bb9765a 100644 --- a/pkgs/by-name/on/oneanime/package.nix +++ b/pkgs/by-name/on/oneanime/package.nix @@ -2,7 +2,7 @@ lib, stdenv, buildGoModule, - flutter335, + flutter338, fetchFromGitHub, autoPatchelfHook, desktop-file-utils, @@ -65,7 +65,7 @@ let hash = "sha256-4EieR+Wys7vK+0/pWF5MkA71EeChThVGJ8J5x/8k8nA="; }; in -flutter335.buildFlutterApplication { +flutter338.buildFlutterApplication { pname = "oneanime"; inherit version src; From 4c80f0caf744f1eafe0f49cd04aa51b6ff310ac1 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 00:05:04 +0000 Subject: [PATCH 38/80] openapi-python-client: 0.28.0 -> 0.28.1 --- pkgs/by-name/op/openapi-python-client/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/op/openapi-python-client/package.nix b/pkgs/by-name/op/openapi-python-client/package.nix index 23b3f36f454d..92f52ad202be 100644 --- a/pkgs/by-name/op/openapi-python-client/package.nix +++ b/pkgs/by-name/op/openapi-python-client/package.nix @@ -11,7 +11,7 @@ python3Packages.buildPythonApplication rec { pname = "openapi-python-client"; - version = "0.28.0"; + version = "0.28.1"; pyproject = true; src = fetchFromGitHub { @@ -19,7 +19,7 @@ python3Packages.buildPythonApplication rec { owner = "openapi-generators"; repo = "openapi-python-client"; tag = "v${version}"; - hash = "sha256-CxFadu6HaGw78GNAQegjC0ZVtpqaZtUOKLVWoMKkPl8="; + hash = "sha256-ZzZLrxeJtT4rgxlcANKcrw7nRlTF8vRV/lItyH7x95o="; }; nativeBuildInputs = [ From ec8ab341fec8c08bf5947a92edb45ed0cb5023f5 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 00:30:09 +0000 Subject: [PATCH 39/80] coulr: 2.1.0 -> 2.2.0 --- pkgs/by-name/co/coulr/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/co/coulr/package.nix b/pkgs/by-name/co/coulr/package.nix index ba9cdc61901e..8ea74c98e985 100644 --- a/pkgs/by-name/co/coulr/package.nix +++ b/pkgs/by-name/co/coulr/package.nix @@ -17,7 +17,7 @@ python3.pkgs.buildPythonApplication rec { pname = "coulr"; - version = "2.1.0"; + version = "2.2.0"; pyproject = false; dontWrapGApps = true; @@ -26,7 +26,7 @@ python3.pkgs.buildPythonApplication rec { owner = "Huluti"; repo = "Coulr"; tag = version; - hash = "sha256-1xnL5AWl/rLQu3i9m6uxbS4QT+690hmEW8kYTwkg7Gw="; + hash = "sha256-ATKD2PmNz8QRIqGHEuNNe8ZGjcvAU8qpqQtXWR2JBSA="; }; nativeBuildInputs = [ From 64f953fb368ebc84d159f4fa595a8b2000f9a4c6 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 00:40:35 +0000 Subject: [PATCH 40/80] python3Packages.identify: 2.6.15 -> 2.6.16 --- pkgs/development/python-modules/identify/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/identify/default.nix b/pkgs/development/python-modules/identify/default.nix index d9a15df3e807..aec0e7e66474 100644 --- a/pkgs/development/python-modules/identify/default.nix +++ b/pkgs/development/python-modules/identify/default.nix @@ -10,14 +10,14 @@ buildPythonPackage rec { pname = "identify"; - version = "2.6.15"; + version = "2.6.16"; pyproject = true; src = fetchFromGitHub { owner = "pre-commit"; repo = "identify"; tag = "v${version}"; - hash = "sha256-YA9DwtAFjFYkycCJjBDXgIE4FKTt3En7fvw5xe37GZU="; + hash = "sha256-+iLIU2NfKogFAdbAXXER3G7cDyvcey9pR+0HifQZoh8="; }; build-system = [ setuptools ]; From e3994cd873ee4bf8f952aeef1d02425768312540 Mon Sep 17 00:00:00 2001 From: Sigmanificient Date: Sat, 17 Jan 2026 01:48:05 +0100 Subject: [PATCH 41/80] python313Packages.drf-pydantic: run tests --- pkgs/development/python-modules/drf-pydantic/default.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/drf-pydantic/default.nix b/pkgs/development/python-modules/drf-pydantic/default.nix index 826a1b2ebe3b..63543d888cf2 100644 --- a/pkgs/development/python-modules/drf-pydantic/default.nix +++ b/pkgs/development/python-modules/drf-pydantic/default.nix @@ -7,6 +7,7 @@ hatchling, djangorestframework, pytestCheckHook, + pytest-cov-stub, }: buildPythonPackage rec { @@ -31,8 +32,10 @@ buildPythonPackage rec { djangorestframework ]; - nativeChecksInputs = [ + nativeCheckInputs = [ pytestCheckHook + pytest-cov-stub + pydantic.optional-dependencies.email ]; meta = { From b72d0fcd2708982f349584fce4e5038fbc925c40 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 02:30:26 +0000 Subject: [PATCH 42/80] octavePackages.statistics: 1.7.0 -> 1.8.0 --- pkgs/development/octave-modules/statistics/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/octave-modules/statistics/default.nix b/pkgs/development/octave-modules/statistics/default.nix index 3beea0ca2213..290df7cb3873 100644 --- a/pkgs/development/octave-modules/statistics/default.nix +++ b/pkgs/development/octave-modules/statistics/default.nix @@ -7,13 +7,13 @@ buildOctavePackage rec { pname = "statistics"; - version = "1.7.0"; + version = "1.8.0"; src = fetchFromGitHub { owner = "gnu-octave"; repo = "statistics"; tag = "release-${version}"; - hash = "sha256-k1YJtFrm71Th42IceX7roWaFCxU3284Abl8JAKLG9So="; + hash = "sha256-4nwkrnYaFdBkLLbIUJX0U4tytHrSIKltWu7Srx43K5g="; }; requiredOctavePackages = [ From 36dc821e499eba75529c461bce6d0903b689ce75 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 02:48:07 +0000 Subject: [PATCH 43/80] versatiles: 3.1.1 -> 3.2.0 --- pkgs/by-name/ve/versatiles/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ve/versatiles/package.nix b/pkgs/by-name/ve/versatiles/package.nix index f29bf47c7b2e..b0cf4d223e20 100644 --- a/pkgs/by-name/ve/versatiles/package.nix +++ b/pkgs/by-name/ve/versatiles/package.nix @@ -7,16 +7,16 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "versatiles"; - version = "3.1.1"; + version = "3.2.0"; src = fetchFromGitHub { owner = "versatiles-org"; repo = "versatiles-rs"; tag = "v${finalAttrs.version}"; - hash = "sha256-DnCaq8qGuw5FzfWjGKNpD4IFnL927vOnYmHD9zHB1fA="; + hash = "sha256-cBqIwVlno8ZOUxMzJmTesqZVS34H9BJ9hpQnqKNPXFQ="; }; - cargoHash = "sha256-nbbDVS6Oea29EzANwSkZ24swanibgsjqCKx5UolhgE0="; + cargoHash = "sha256-Vdo89hb3ZWhnyEGTr6yOinQWLvZ81AJGwU1D9kS1afo="; __darwinAllowLocalNetworking = true; From f699d45e70c5690cd68d17d6d28e48e2bf71a6b3 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 03:02:17 +0000 Subject: [PATCH 44/80] python3Packages.limnoria: 2025.11.2 -> 2026.1.16 --- pkgs/development/python-modules/limnoria/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/limnoria/default.nix b/pkgs/development/python-modules/limnoria/default.nix index 53a35daf5a77..7e32a2dc794a 100644 --- a/pkgs/development/python-modules/limnoria/default.nix +++ b/pkgs/development/python-modules/limnoria/default.nix @@ -17,12 +17,12 @@ buildPythonPackage rec { pname = "limnoria"; - version = "2025.11.2"; + version = "2026.1.16"; pyproject = true; src = fetchPypi { inherit pname version; - hash = "sha256-cvlp1cfsdN8lv8hFvaHV6vtWEJ0CJUBmN1yCgxrhMi8="; + hash = "sha256-ZkEXZMjJsEgSwX2a8TwaQ/vtvskSOFwNBZg/Ru5q/bc="; }; build-system = [ setuptools ]; From adeb81eca0fefbe808a4a008099d67ad9c8a28a8 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 03:17:40 +0000 Subject: [PATCH 45/80] updatecli: 0.112.0 -> 0.113.0 --- pkgs/by-name/up/updatecli/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/up/updatecli/package.nix b/pkgs/by-name/up/updatecli/package.nix index c45238caa361..061f248f1b33 100644 --- a/pkgs/by-name/up/updatecli/package.nix +++ b/pkgs/by-name/up/updatecli/package.nix @@ -12,16 +12,16 @@ buildGoModule rec { pname = "updatecli"; - version = "0.112.0"; + version = "0.113.0"; src = fetchFromGitHub { owner = "updatecli"; repo = "updatecli"; rev = "v${version}"; - hash = "sha256-goJH+B6gPNHSQmeUvXUVq5HBwMAKaGZiTlwiZK7rkbg="; + hash = "sha256-sol0adhlIoB+/lTGbIk8R2Rv8rw1GlzBcuXISzLYceE="; }; - vendorHash = "sha256-8NrT1jzLd1/8IFm8lOlqwQcSiaYQMRato7Z0kZFuN1s="; + vendorHash = "sha256-CbtpjJDlqNYOZ/xkIJ3Ct0LLoK3NWOH2Ke3OIsbZMa4="; # tests require network access doCheck = false; From 1f3ca75fea9ed5f74cc37f8380308f4a4880aae5 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 03:44:06 +0000 Subject: [PATCH 46/80] fabric-ai: 1.4.375 -> 1.4.380 --- pkgs/by-name/fa/fabric-ai/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/fa/fabric-ai/package.nix b/pkgs/by-name/fa/fabric-ai/package.nix index a05702ce1a97..0cdaab7f7201 100644 --- a/pkgs/by-name/fa/fabric-ai/package.nix +++ b/pkgs/by-name/fa/fabric-ai/package.nix @@ -8,13 +8,13 @@ buildGoModule rec { pname = "fabric-ai"; - version = "1.4.375"; + version = "1.4.380"; src = fetchFromGitHub { owner = "danielmiessler"; repo = "fabric"; tag = "v${version}"; - hash = "sha256-Y8lTYzCQ4ZTTuwijdyY8XKk/4yQn67GzMQFyn34NVZo="; + hash = "sha256-d4WjshFCZtO7414It53yBEmKB+ERhA/Q9KUb8bX7tCk="; }; vendorHash = "sha256-147i0ZnNtph5DhaxK330kyUkDA4MBcpzrtIJGBEJHHQ="; From 72a725cac0c454b1931e4a1f3f260b4ff91a327a Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 04:11:58 +0000 Subject: [PATCH 47/80] mpvScripts.manga-reader: 0-unstable-2025-07-15 -> 0-unstable-2026-01-16 --- pkgs/by-name/mp/mpv/scripts/manga-reader.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/mp/mpv/scripts/manga-reader.nix b/pkgs/by-name/mp/mpv/scripts/manga-reader.nix index 20331bd190c7..b3d262e78d62 100644 --- a/pkgs/by-name/mp/mpv/scripts/manga-reader.nix +++ b/pkgs/by-name/mp/mpv/scripts/manga-reader.nix @@ -8,12 +8,12 @@ buildLua { pname = "manga-reader"; - version = "0-unstable-2025-07-15"; + version = "0-unstable-2026-01-16"; src = fetchFromGitHub { owner = "Dudemanguy"; repo = "mpv-manga-reader"; - rev = "bb4ec1208feb440ce430f0963373ab2db5b7d743"; - hash = "sha256-Zz2rPnnQHz2BqCM3jEJD/FuFLKtiNGWvAZpiH7jyLmo="; + rev = "a93e03bc837d501760dd38155c8e945d66a3a3ed"; + hash = "sha256-UG1MRtwljoKi6kct8mDZSHxz9mzQ1qHnqohX7e5nj40="; }; passthru.updateScript = unstableGitUpdater { }; From ca4c74b023e57699794e59fb81cbfd78c7a5c10c Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 04:13:57 +0000 Subject: [PATCH 48/80] python3Packages.oelint-parser: 8.7.0 -> 8.7.2 --- pkgs/development/python-modules/oelint-parser/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/oelint-parser/default.nix b/pkgs/development/python-modules/oelint-parser/default.nix index 89bd3579c398..f06a2beaa821 100644 --- a/pkgs/development/python-modules/oelint-parser/default.nix +++ b/pkgs/development/python-modules/oelint-parser/default.nix @@ -14,14 +14,14 @@ buildPythonPackage rec { pname = "oelint-parser"; - version = "8.7.0"; + version = "8.7.2"; pyproject = true; src = fetchFromGitHub { owner = "priv-kweihmann"; repo = "oelint-parser"; tag = version; - hash = "sha256-igDt5pUiAhAmsDlY/S/SMhPllKJ0aIry95rrHC2Iel4="; + hash = "sha256-F17THZo8fXoFP4b2DJnDjbZfT5xUX9+MMSxBa9sIy5c="; }; pythonRelaxDeps = [ "regex" ]; From 6e3c08bab100ba09207e13446a8c9fbeabf15ca2 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 05:33:43 +0000 Subject: [PATCH 49/80] modrinth-app-unwrapped: 0.10.25 -> 0.10.26 --- pkgs/by-name/mo/modrinth-app-unwrapped/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/mo/modrinth-app-unwrapped/package.nix b/pkgs/by-name/mo/modrinth-app-unwrapped/package.nix index 949e7a8ec225..54fa8f47821a 100644 --- a/pkgs/by-name/mo/modrinth-app-unwrapped/package.nix +++ b/pkgs/by-name/mo/modrinth-app-unwrapped/package.nix @@ -31,13 +31,13 @@ in rustPlatform.buildRustPackage (finalAttrs: { pname = "modrinth-app-unwrapped"; - version = "0.10.25"; + version = "0.10.26"; src = fetchFromGitHub { owner = "modrinth"; repo = "code"; tag = "v${finalAttrs.version}"; - hash = "sha256-e+Oienb0jhz7XT9NZB5IAELi+YU3i60JIWBDG8LCEZw="; + hash = "sha256-1C0BCbDJ6/nYzWEL5UA9GQW4vSo4ZfP6BuA3i4JoiuY="; }; patches = [ @@ -77,7 +77,7 @@ rustPlatform.buildRustPackage (finalAttrs: { inherit (finalAttrs) pname version src; pnpm = pnpm_9; fetcherVersion = 1; - hash = "sha256-4MRVk5k/HkCMA/OeRMZwwkCyqmSWkujqLe/8sPfYcwc="; + hash = "sha256-m5/7fD4OBJcY7stZhwDLw4asmXqUThUjTaRb3oVul78="; }; nativeBuildInputs = [ From d85ba99846b09d225b93a9b256eac3a355e3b20a Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 05:55:33 +0000 Subject: [PATCH 50/80] luau-lsp: 1.60.0 -> 1.60.1 --- pkgs/by-name/lu/luau-lsp/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/lu/luau-lsp/package.nix b/pkgs/by-name/lu/luau-lsp/package.nix index 73047a04e1a5..a604a4d3ac20 100644 --- a/pkgs/by-name/lu/luau-lsp/package.nix +++ b/pkgs/by-name/lu/luau-lsp/package.nix @@ -9,13 +9,13 @@ stdenv.mkDerivation (finalAttrs: { pname = "luau-lsp"; - version = "1.60.0"; + version = "1.60.1"; src = fetchFromGitHub { owner = "JohnnyMorganz"; repo = "luau-lsp"; tag = finalAttrs.version; - hash = "sha256-36Nl9robV0RVhEwV3Cu75IDyexnWwf5ZBHOaEx2/kPM="; + hash = "sha256-UoitFmn+1bHhQ2oqt1z50iU0Hx7pS4nact+3C8V8WzE="; fetchSubmodules = true; }; From b9524faeddf9fb366ba8db5806dc9f368e528b18 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 06:14:56 +0000 Subject: [PATCH 51/80] libretro.snes9x: 0-unstable-2025-11-08 -> 0-unstable-2026-01-10 --- pkgs/applications/emulators/libretro/cores/snes9x.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/emulators/libretro/cores/snes9x.nix b/pkgs/applications/emulators/libretro/cores/snes9x.nix index b66dce4a7cc7..822ea79c759a 100644 --- a/pkgs/applications/emulators/libretro/cores/snes9x.nix +++ b/pkgs/applications/emulators/libretro/cores/snes9x.nix @@ -5,13 +5,13 @@ }: mkLibretroCore { core = "snes9x"; - version = "0-unstable-2025-11-08"; + version = "0-unstable-2026-01-10"; src = fetchFromGitHub { owner = "snes9xgit"; repo = "snes9x"; - rev = "83ebd9d9d94521dde231beac0ad5ca253bd767f1"; - hash = "sha256-ZH6UnwtvtaTQLyFG4FyK+I1rjDibuA4lL2EuR8zGL0E="; + rev = "4b51d103b909e0c1ac566b6865b9f6229a7b59e4"; + hash = "sha256-ic8yR3mvql7QMGSp3QN+31MKkDvY0Tfsxx51dhUVs2c="; }; makefile = "Makefile"; From 7f3d1e0c3f74ef7c9af1f2b2fc19e6c1afaa3700 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sat, 17 Jan 2026 13:01:37 +0530 Subject: [PATCH 52/80] poetry: fix build by relaxing dep Signed-off-by: phanirithvij --- pkgs/by-name/po/poetry/unwrapped.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/by-name/po/poetry/unwrapped.nix b/pkgs/by-name/po/poetry/unwrapped.nix index 6cb9a0cda505..3c8591cc2c2e 100644 --- a/pkgs/by-name/po/poetry/unwrapped.nix +++ b/pkgs/by-name/po/poetry/unwrapped.nix @@ -57,6 +57,7 @@ buildPythonPackage rec { pythonRelaxDeps = [ "dulwich" "keyring" + "pbs-installer" ]; dependencies = [ From 9332ab91ac063a43a80f2e855de465f7daecf76d Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 07:36:42 +0000 Subject: [PATCH 53/80] python3Packages.hyper-connections: 0.4.0 -> 0.4.5 --- pkgs/development/python-modules/hyper-connections/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/hyper-connections/default.nix b/pkgs/development/python-modules/hyper-connections/default.nix index d355145b81e7..67312b1b0deb 100644 --- a/pkgs/development/python-modules/hyper-connections/default.nix +++ b/pkgs/development/python-modules/hyper-connections/default.nix @@ -10,14 +10,14 @@ buildPythonPackage (finalAttrs: { pname = "hyper-connections"; - version = "0.4.0"; + version = "0.4.5"; pyproject = true; src = fetchFromGitHub { owner = "lucidrains"; repo = "hyper-connections"; tag = finalAttrs.version; - hash = "sha256-nMNAuHOLOgrWNrMFko5ARBOyp9TyUhJfldPihV012K4="; + hash = "sha256-CAhLDBZvmdHwVTbKVgWnS0qs5TE4a05iorbR7Ejh2uM="; }; build-system = [ hatchling ]; From 166e300380ff883ba9096efdcdd527cc7f2396e1 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 17 Jan 2026 07:59:47 +0000 Subject: [PATCH 54/80] terraform-providers.sysdiglabs_sysdig: 3.3.1 -> 3.4.0 --- .../networking/cluster/terraform-providers/providers.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/networking/cluster/terraform-providers/providers.json b/pkgs/applications/networking/cluster/terraform-providers/providers.json index c67d67a252e6..d00222509938 100644 --- a/pkgs/applications/networking/cluster/terraform-providers/providers.json +++ b/pkgs/applications/networking/cluster/terraform-providers/providers.json @@ -1274,11 +1274,11 @@ "vendorHash": "sha256-IR6KjFW5GbsOIm3EEFyx3ctwhbifZlcNaZeGhbeK/Wo=" }, "sysdiglabs_sysdig": { - "hash": "sha256-04LRhKCh1AmhhKaDT8+Un9hziJ5l7qrCCKAyBEacEOI=", + "hash": "sha256-BovhCb+01LJUE62geNJmDwpzV0ucQLpVWjXwfxsClyI=", "homepage": "https://registry.terraform.io/providers/sysdiglabs/sysdig", "owner": "sysdiglabs", "repo": "terraform-provider-sysdig", - "rev": "v3.3.1", + "rev": "v3.4.0", "spdx": "MPL-2.0", "vendorHash": "sha256-rWiafaFE1RolO9JUN1WoW4EWJjR7kpfeVEOTLf21j50=" }, From 9be04b7d75cae4b5106f1487381be88d8e8ae96c Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Sat, 17 Jan 2026 00:13:55 -0800 Subject: [PATCH 55/80] ncps: 0.6.2 -> 0.6.3 --- pkgs/by-name/nc/ncps/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/nc/ncps/package.nix b/pkgs/by-name/nc/ncps/package.nix index 04ad036ce7ce..cd8cb50b547a 100644 --- a/pkgs/by-name/nc/ncps/package.nix +++ b/pkgs/by-name/nc/ncps/package.nix @@ -33,13 +33,13 @@ let finalAttrs = { pname = "ncps"; - version = "0.6.2"; + version = "0.6.3"; src = fetchFromGitHub { owner = "kalbasit"; repo = "ncps"; tag = "v${finalAttrs.version}"; - hash = "sha256-KJzfvp4Q/h9dT9zt602QTfpxCtwUEW4FCvPIjX9E7aE="; + hash = "sha256-7fLtVloiTNOmPoVpESpiSUl7i+5SMLXRHbGPk9SilBc="; }; ldflags = [ From 9532ba3962bc46d0c76bcba3dc44b39baf04b28f Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Sat, 27 Dec 2025 21:16:56 -0800 Subject: [PATCH 56/80] nixos/ncps: Fix deprecated flags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ncps package has updated its flags and deprecated some in favor of others. Here's the full list: - `--cache-data-path` β†’ `--cache-storage-local` - `--upstream-cache` β†’ `--cache-upstream-url` - `--upstream-public-key` β†’ `--cache-upstream-public-key` --- nixos/modules/services/networking/ncps.nix | 102 ++++++++++++--------- nixos/tests/all-tests.nix | 4 +- nixos/tests/ncps.nix | 14 +-- 3 files changed, 70 insertions(+), 50 deletions(-) diff --git a/nixos/modules/services/networking/ncps.nix b/nixos/modules/services/networking/ncps.nix index 83161c051b5d..ecffa8625d55 100644 --- a/nixos/modules/services/networking/ncps.nix +++ b/nixos/modules/services/networking/ncps.nix @@ -35,7 +35,7 @@ let serveFlags = lib.concatStringsSep " " ( [ "--cache-hostname='${cfg.cache.hostName}'" - "--cache-data-path='${cfg.cache.dataPath}'" + "--cache-storage-local='${cfg.cache.storage.local}'" "--cache-database-url='${cfg.cache.databaseURL}'" "--cache-temp-path='${cfg.cache.tempPath}'" "--server-addr='${cfg.server.addr}'" @@ -49,8 +49,8 @@ let ]) ++ (lib.optional (cfg.cache.secretKeyPath != null) "--cache-secret-key-path='%d/secretKey'") ++ (lib.optional (!cfg.cache.signNarinfo) "--cache-sign-narinfo='false'") - ++ (lib.forEach cfg.upstream.caches (url: "--upstream-cache='${url}'")) - ++ (lib.forEach cfg.upstream.publicKeys (pk: "--upstream-public-key='${pk}'")) + ++ (lib.forEach cfg.cache.upstream.publicKeys (pk: "--cache-upstream-public-key='${pk}'")) + ++ (lib.forEach cfg.cache.upstream.urls (url: "--cache-upstream-url='${url}'")) ++ (lib.optional (cfg.netrcFile != null) "--netrc-file='${cfg.netrcFile}'") ); @@ -60,6 +60,23 @@ let dbDir = dirOf dbPath; in { + imports = [ + (lib.mkRenamedOptionModule + [ "services" "ncps" "cache" "dataPath" ] + [ "services" "ncps" "cache" "storage" "local" ] + ) + + (lib.mkRenamedOptionModule + [ "services" "ncps" "upstream" "caches" ] + [ "services" "ncps" "cache" "upstream" "urls" ] + ) + + (lib.mkRenamedOptionModule + [ "services" "ncps" "upstream" "publicKeys" ] + [ "services" "ncps" "cache" "upstream" "publicKeys" ] + ) + ]; + options = { services.ncps = { enable = lib.mkEnableOption "ncps: Nix binary cache proxy service implemented in Go"; @@ -113,17 +130,9 @@ in ''; }; - dataPath = lib.mkOption { - type = lib.types.str; - default = "/var/lib/ncps"; - description = '' - The local directory for storing configuration and cached store paths - ''; - }; - databaseURL = lib.mkOption { type = lib.types.str; - default = "sqlite:${cfg.cache.dataPath}/db/db.sqlite"; + default = "sqlite:${cfg.cache.storage.local}/db/db.sqlite"; defaultText = "sqlite:/var/lib/ncps/db/db.sqlite"; description = '' The URL of the database (currently only SQLite is supported) @@ -174,6 +183,16 @@ in ''; }; + storage = { + local = lib.mkOption { + type = lib.types.str; + default = "/var/lib/ncps"; + description = '' + The local directory for storing configuration and cached store paths + ''; + }; + }; + tempPath = lib.mkOption { type = lib.types.str; default = "/tmp"; @@ -190,6 +209,28 @@ in Whether to sign narInfo files or passthru as-is from upstream ''; }; + + upstream = { + publicKeys = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + example = [ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" ]; + description = '' + A list of public keys of upstream caches in the format + `host[-[0-9]*]:public-key`. This flag is used to verify the + signatures of store paths downloaded from upstream caches. + ''; + }; + + urls = lib.mkOption { + type = lib.types.listOf lib.types.str; + example = [ "https://cache.nixos.org" ]; + description = '' + A list of URLs of upstream binary caches. + ''; + }; + }; + }; server = { @@ -202,27 +243,6 @@ in }; }; - upstream = { - caches = lib.mkOption { - type = lib.types.listOf lib.types.str; - example = [ "https://cache.nixos.org" ]; - description = '' - A list of URLs of upstream binary caches. - ''; - }; - - publicKeys = lib.mkOption { - type = lib.types.listOf lib.types.str; - default = [ ]; - example = [ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" ]; - description = '' - A list of public keys of upstream caches in the format - `host[-[0-9]*]:public-key`. This flag is used to verify the - signatures of store paths downloaded from upstream caches. - ''; - }; - }; - netrcFile = lib.mkOption { type = lib.types.nullOr lib.types.str; default = null; @@ -256,10 +276,10 @@ in UMask = "0066"; }; script = - (lib.optionalString (cfg.cache.dataPath != "/var/lib/ncps") '' - if ! test -d ${cfg.cache.dataPath}; then - mkdir -p ${cfg.cache.dataPath} - chown ncps:ncps ${cfg.cache.dataPath} + (lib.optionalString (cfg.cache.storage.local != "/var/lib/ncps") '' + if ! test -d ${cfg.cache.storage.local}; then + mkdir -p ${cfg.cache.storage.local} + chown ncps:ncps ${cfg.cache.storage.local} fi '') + (lib.optionalString isSqlite '' @@ -304,10 +324,10 @@ in }) # ensure permissions on required directories - (lib.mkIf (cfg.cache.dataPath != "/var/lib/ncps") { - ReadWritePaths = [ cfg.cache.dataPath ]; + (lib.mkIf (cfg.cache.storage.local != "/var/lib/ncps") { + ReadWritePaths = [ cfg.cache.storage.local ]; }) - (lib.mkIf (cfg.cache.dataPath == "/var/lib/ncps") { + (lib.mkIf (cfg.cache.storage.local == "/var/lib/ncps") { StateDirectory = "ncps"; StateDirectoryMode = "0700"; }) @@ -357,7 +377,7 @@ in ]; unitConfig.RequiresMountsFor = lib.concatStringsSep " " ( - [ "${cfg.cache.dataPath}" ] ++ lib.optional isSqlite dbDir + [ "${cfg.cache.storage.local}" ] ++ lib.optional isSqlite dbDir ); }; }; diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 3f93c0827657..c577a2d7a000 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -1029,9 +1029,9 @@ in nbd = runTest ./nbd.nix; ncdns = runTest ./ncdns.nix; ncps = runTest ./ncps.nix; - ncps-custom-cache-datapath = runTest { + ncps-custom-storage-local = runTest { imports = [ ./ncps.nix ]; - defaults.services.ncps.cache.dataPath = "/path/to/ncps"; + defaults.services.ncps.cache.storage.local = "/path/to/ncps"; }; ndppd = runTest ./ndppd.nix; nebula-lighthouse-service = runTest ./nebula-lighthouse-service.nix; diff --git a/nixos/tests/ncps.nix b/nixos/tests/ncps.nix index 76f23ccfe802..e46f7eb3d24b 100644 --- a/nixos/tests/ncps.nix +++ b/nixos/tests/ncps.nix @@ -30,13 +30,13 @@ secretKeyPath = toString ( pkgs.writeText "ncps-cache-key" "ncps:dcrGsrku0KvltFhrR5lVIMqyloAdo0y8vYZOeIFUSLJS2IToL7dPHSSCk/fi+PJf8EorpBn8PU7MNhfvZoI8mA==" ); - }; - upstream = { - caches = [ "http://harmonia:5000" ]; - publicKeys = [ - "cache.example.com-1:eIGQXcGQpc00x6/XFcyacLEUmC07u4RAEHt5Y8vdglo=" - ]; + upstream = { + urls = [ "http://harmonia:5000" ]; + publicKeys = [ + "cache.example.com-1:eIGQXcGQpc00x6/XFcyacLEUmC07u4RAEHt5Y8vdglo=" + ]; + }; }; }; @@ -65,7 +65,7 @@ narinfoNameChars = lib.strings.stringToCharacters narinfoName; narinfoPath = lib.concatStringsSep "/" [ - nodes.ncps.services.ncps.cache.dataPath + nodes.ncps.services.ncps.cache.storage.local "store/narinfo" (lib.lists.elemAt narinfoNameChars 0) ((lib.lists.elemAt narinfoNameChars 0) + (lib.lists.elemAt narinfoNameChars 1)) From 74faa5384d90bcb007c9d58148f98f18c249e289 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Tue, 30 Dec 2025 00:02:35 -0800 Subject: [PATCH 57/80] nixos/ncps: Add cache upstream timeout flags --- nixos/modules/services/networking/ncps.nix | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/nixos/modules/services/networking/ncps.nix b/nixos/modules/services/networking/ncps.nix index ecffa8625d55..75ec0d6a1582 100644 --- a/nixos/modules/services/networking/ncps.nix +++ b/nixos/modules/services/networking/ncps.nix @@ -49,6 +49,12 @@ let ]) ++ (lib.optional (cfg.cache.secretKeyPath != null) "--cache-secret-key-path='%d/secretKey'") ++ (lib.optional (!cfg.cache.signNarinfo) "--cache-sign-narinfo='false'") + ++ (lib.optional ( + cfg.cache.upstream.dialerTimeout != null + ) "--cache-upstream-dialer-timeout='${cfg.cache.upstream.dialerTimeout}'") + ++ (lib.optional ( + cfg.cache.upstream.responseHeaderTimeout != null + ) "--cache-upstream-response-header-timeout='${cfg.cache.upstream.responseHeaderTimeout}'") ++ (lib.forEach cfg.cache.upstream.publicKeys (pk: "--cache-upstream-public-key='${pk}'")) ++ (lib.forEach cfg.cache.upstream.urls (url: "--cache-upstream-url='${url}'")) ++ (lib.optional (cfg.netrcFile != null) "--netrc-file='${cfg.netrcFile}'") @@ -211,6 +217,22 @@ in }; upstream = { + dialerTimeout = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; + description = '' + Timeout for establishing TCP connections to upstream caches (e.g., 3s, 5s, 10s). + ''; + }; + + responseHeaderTimeout = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; + description = '' + Timeout for waiting for upstream server's response headers (e.g., 3s, 5s, 10s). + ''; + }; + publicKeys = lib.mkOption { type = lib.types.listOf lib.types.str; default = [ ]; From 1f8b510d783cb372c25c194293cdd4afe76cf60d Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Tue, 30 Dec 2025 01:05:26 -0800 Subject: [PATCH 58/80] nixos/ncps: Add support for configuration s3 --- nixos/modules/services/networking/ncps.nix | 116 +++++++++++++++++++-- 1 file changed, 106 insertions(+), 10 deletions(-) diff --git a/nixos/modules/services/networking/ncps.nix b/nixos/modules/services/networking/ncps.nix index 75ec0d6a1582..a22c815c094e 100644 --- a/nixos/modules/services/networking/ncps.nix +++ b/nixos/modules/services/networking/ncps.nix @@ -17,6 +17,15 @@ let "panic" ]; + ncpsWrapper = pkgs.writeShellScript "ncps-wrapper" '' + ${lib.optionalString (cfg.cache.storage.s3 != null) '' + export CACHE_STORAGE_S3_ACCESS_KEY_ID="$(cat "$CREDENTIALS_DIRECTORY/s3AccessKeyId")" + export CACHE_STORAGE_S3_SECRET_ACCESS_KEY="$(cat "$CREDENTIALS_DIRECTORY/s3SecretAccessKey")" + ''} + + exec ${lib.getExe cfg.package} "$@" + ''; + globalFlags = lib.concatStringsSep " " ( [ "--log-level='${cfg.logLevel}'" ] ++ (lib.optionals cfg.openTelemetry.enable ( @@ -35,11 +44,23 @@ let serveFlags = lib.concatStringsSep " " ( [ "--cache-hostname='${cfg.cache.hostName}'" - "--cache-storage-local='${cfg.cache.storage.local}'" "--cache-database-url='${cfg.cache.databaseURL}'" "--cache-temp-path='${cfg.cache.tempPath}'" "--server-addr='${cfg.server.addr}'" ] + ++ (lib.optional ( + cfg.cache.storage.s3 == null + ) "--cache-storage-local='${cfg.cache.storage.local}'") + ++ (lib.optionals (cfg.cache.storage.s3 != null) ( + [ + "--cache-storage-s3-bucket='${cfg.cache.storage.s3.bucket}'" + "--cache-storage-s3-endpoint='${cfg.cache.storage.s3.endpoint}'" + ] + ++ (lib.optional cfg.cache.storage.s3.forcePathStyle "--cache-storage-s3-force-path-style") + ++ (lib.optional ( + cfg.cache.storage.s3.region != null + ) "--cache-storage-s3-region='${cfg.cache.storage.s3.region}'") + )) ++ (lib.optional cfg.cache.allowDeleteVerb "--cache-allow-delete-verb") ++ (lib.optional cfg.cache.allowPutVerb "--cache-allow-put-verb") ++ (lib.optional (cfg.cache.maxSize != null) "--cache-max-size='${cfg.cache.maxSize}'") @@ -194,7 +215,66 @@ in type = lib.types.str; default = "/var/lib/ncps"; description = '' - The local directory for storing configuration and cached store paths + The local directory for storing configuration and cached store + paths. This is ignored if services.ncps.cache.storage.s3 is not + null. + ''; + }; + + s3 = lib.mkOption { + type = lib.types.nullOr ( + lib.types.submodule { + options = { + bucket = lib.mkOption { + type = lib.types.str; + description = '' + The name of the S3 bucket. + ''; + }; + + endpoint = lib.mkOption { + type = lib.types.str; + description = '' + S3-compatible endpoint URL with scheme. + ''; + example = "https://s3.amazonaws.com"; + }; + + forcePathStyle = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Force path-style S3 addressing (bucket/key vs key.bucket). + ''; + }; + + region = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; + description = '' + The S3 region. + ''; + }; + + accessKeyIdPath = lib.mkOption { + type = lib.types.str; + description = '' + The path to a file containing only the access-key-id. + ''; + }; + + secretAccessKeyPath = lib.mkOption { + type = lib.types.str; + description = '' + The path to a file containing only the secret-access-key. + ''; + }; + }; + } + ); + default = null; + description = '' + Use S3 for storage instead of local storage. ''; }; }; @@ -228,8 +308,9 @@ in responseHeaderTimeout = lib.mkOption { type = lib.types.nullOr lib.types.str; default = null; + example = "5s"; description = '' - Timeout for waiting for upstream server's response headers (e.g., 3s, 5s, 10s). + Timeout for waiting for upstream server's response headers. ''; }; @@ -298,7 +379,7 @@ in UMask = "0066"; }; script = - (lib.optionalString (cfg.cache.storage.local != "/var/lib/ncps") '' + (lib.optionalString (cfg.cache.storage.s3 == null && cfg.cache.storage.local != "/var/lib/ncps") '' if ! test -d ${cfg.cache.storage.local}; then mkdir -p ${cfg.cache.storage.local} chown ncps:ncps ${cfg.cache.storage.local} @@ -333,26 +414,40 @@ in serviceConfig = lib.mkMerge [ { - ExecStart = "${lib.getExe cfg.package} ${globalFlags} serve ${serveFlags}"; + ExecStart = "${ncpsWrapper} ${globalFlags} serve ${serveFlags}"; User = "ncps"; Group = "ncps"; Restart = "on-failure"; RuntimeDirectory = "ncps"; } - # credentials + # credentials for cache.secretKeyPath (lib.mkIf (cfg.cache.secretKeyPath != null) { - LoadCredential = "secretKey:${cfg.cache.secretKeyPath}"; + LoadCredential = lib.singleton "secretKey:${cfg.cache.secretKeyPath}"; + }) + + # credentials for cache.storage.s3 accessKeyIdPath and secretAccessKeyPath + (lib.mkIf (cfg.cache.storage.s3 != null) { + LoadCredential = [ + "s3AccessKeyId:${cfg.cache.storage.s3.accessKeyIdPath}" + "s3SecretAccessKey:${cfg.cache.storage.s3.secretAccessKeyPath}" + ]; }) # ensure permissions on required directories - (lib.mkIf (cfg.cache.storage.local != "/var/lib/ncps") { + (lib.mkIf (cfg.cache.storage.s3 == null && cfg.cache.storage.local != "/var/lib/ncps") { ReadWritePaths = [ cfg.cache.storage.local ]; }) - (lib.mkIf (cfg.cache.storage.local == "/var/lib/ncps") { + (lib.mkIf (cfg.cache.storage.s3 == null && cfg.cache.storage.local == "/var/lib/ncps") { StateDirectory = "ncps"; StateDirectoryMode = "0700"; }) + (lib.mkIf (cfg.cache.storage.s3 != null && isSqlite && lib.strings.hasPrefix "/var/lib/ncps" dbDir) + { + StateDirectory = "ncps"; + StateDirectoryMode = "0700"; + } + ) (lib.mkIf (isSqlite && !lib.strings.hasPrefix "/var/lib/ncps" dbDir) { ReadWritePaths = [ dbDir ]; }) @@ -399,7 +494,8 @@ in ]; unitConfig.RequiresMountsFor = lib.concatStringsSep " " ( - [ "${cfg.cache.storage.local}" ] ++ lib.optional isSqlite dbDir + (lib.optional (cfg.cache.storage.s3 == null) "${cfg.cache.storage.local}") + ++ (lib.optional isSqlite dbDir) ); }; }; From 4e089a6eab0371db7e6b8eef1f8ad603e2b537e6 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Tue, 30 Dec 2025 01:06:53 -0800 Subject: [PATCH 59/80] nixos/tests/ncps: Add kalbasit as a maintainer --- nixos/tests/ncps.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/tests/ncps.nix b/nixos/tests/ncps.nix index e46f7eb3d24b..6f9ade50aa24 100644 --- a/nixos/tests/ncps.nix +++ b/nixos/tests/ncps.nix @@ -6,6 +6,9 @@ { name = "ncps"; + meta = with lib.maintainers; { + maintainers = [ kalbasit ]; + }; nodes = { harmonia = { From 4e08de39acf92096264eaef4878771b1f1983b43 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Tue, 30 Dec 2025 14:08:31 -0800 Subject: [PATCH 60/80] nixos/tests/ncps: Add a test for S3 support via minio --- nixos/tests/all-tests.nix | 1 + nixos/tests/ncps-storage-s3.nix | 137 ++++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 nixos/tests/ncps-storage-s3.nix diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index c577a2d7a000..51aa5ac033c5 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -1033,6 +1033,7 @@ in imports = [ ./ncps.nix ]; defaults.services.ncps.cache.storage.local = "/path/to/ncps"; }; + ncps-storage-s3 = runTest ./ncps-storage-s3.nix; ndppd = runTest ./ndppd.nix; nebula-lighthouse-service = runTest ./nebula-lighthouse-service.nix; nebula.connectivity = runTest ./nebula/connectivity.nix; diff --git a/nixos/tests/ncps-storage-s3.nix b/nixos/tests/ncps-storage-s3.nix new file mode 100644 index 000000000000..890158dd8c4a --- /dev/null +++ b/nixos/tests/ncps-storage-s3.nix @@ -0,0 +1,137 @@ +{ + lib, + pkgs, + ... +}: +let + bucket = "ncps"; + region = "us-west-1"; + accessKey = "test-access-key"; + secretKey = "test-secret-key"; + + initMinio = pkgs.writeShellScriptBin "init-minio.sh" '' + set -euo pipefail + + mc alias set local "http://127.0.0.1:9000" minioadmin minioadmin + mc mb local/${bucket} + mc admin user svcacct add --access-key ${accessKey} --secret-key ${secretKey} local minioadmin + ''; +in +{ + name = "ncps-storage-s3"; + meta = with lib.maintainers; { + maintainers = [ kalbasit ]; + }; + + nodes = { + harmonia = { + services.harmonia = { + enable = true; + signKeyPaths = [ + (pkgs.writeText "cache-key" "cache.example.com-1:9FhO0w+7HjZrhvmzT1VlAZw4OSAlFGTgC24Seg3tmPl4gZBdwZClzTTHr9cVzJpwsRSYLTu7hEAQe3ljy92CWg==") + ]; + settings.priority = 35; + }; + + networking.firewall.allowedTCPPorts = [ 5000 ]; + system.extraDependencies = [ pkgs.emptyFile ]; + }; + + minio = { + services.minio = { + inherit region; + + enable = true; + }; + + networking.firewall.allowedTCPPorts = [ 9000 ]; + environment.systemPackages = [ + pkgs.minio-client + initMinio + ]; + }; + + ncps = { + services.ncps = { + enable = true; + + cache = { + hostName = "ncps"; + + secretKeyPath = builtins.toString ( + pkgs.writeText "ncps-cache-key" "ncps:dcrGsrku0KvltFhrR5lVIMqyloAdo0y8vYZOeIFUSLJS2IToL7dPHSSCk/fi+PJf8EorpBn8PU7MNhfvZoI8mA==" + ); + + storage.s3 = { + inherit bucket region; + + endpoint = "http://minio:9000"; + + accessKeyIdPath = builtins.toFile "minio-access-key" accessKey; + secretAccessKeyPath = builtins.toFile "minio-secret-key" secretKey; + }; + + upstream = { + urls = [ "http://harmonia:5000" ]; + publicKeys = [ + "cache.example.com-1:eIGQXcGQpc00x6/XFcyacLEUmC07u4RAEHt5Y8vdglo=" + ]; + }; + }; + }; + + networking.firewall.allowedTCPPorts = [ 8501 ]; + }; + + client = { + nix.settings = { + substituters = lib.mkForce [ "http://ncps:8501" ]; + trusted-public-keys = lib.mkForce [ + "ncps:UtiE6C+3Tx0kgpP34vjyX/BKK6QZ/D1OzDYX72aCPJg=" + ]; + }; + }; + }; + + testScript = + { nodes, ... }: + let + narinfoName = + (lib.strings.removePrefix "/nix/store/" ( + lib.strings.removeSuffix "-empty-file" pkgs.emptyFile.outPath + )) + + ".narinfo"; + + narinfoNameChars = lib.strings.stringToCharacters narinfoName; + + narinfoPath = lib.concatStringsSep "/" [ + (builtins.head nodes.minio.services.minio.dataDir) + bucket + "store/narinfo" + (lib.lists.elemAt narinfoNameChars 0) + ((lib.lists.elemAt narinfoNameChars 0) + (lib.lists.elemAt narinfoNameChars 1)) + narinfoName + "xl.meta" + ]; + in + '' + minio.start() + + minio.wait_for_unit("minio.service") + + minio.wait_until_succeeds("init-minio.sh") + + start_all() + + harmonia.wait_for_unit("harmonia.service") + + ncps.wait_for_unit("ncps.service") + + client.wait_until_succeeds("curl -f http://ncps:8501/ | grep '\"hostname\":\"${toString nodes.ncps.services.ncps.cache.hostName}\"' >&2") + + client.succeed("cat /etc/nix/nix.conf >&2") + client.succeed("nix-store --realise ${pkgs.emptyFile}") + + minio.succeed("cat ${narinfoPath} >&2") + ''; +} From 3b1e6d3a07b3a984e78cb29266e3325bf3b53aeb Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Tue, 30 Dec 2025 14:12:22 -0800 Subject: [PATCH 61/80] nixos/tests/ncps: Add aciceri as a maintainer --- nixos/tests/ncps-storage-s3.nix | 5 ++++- nixos/tests/ncps.nix | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/nixos/tests/ncps-storage-s3.nix b/nixos/tests/ncps-storage-s3.nix index 890158dd8c4a..57e23c4e1c9a 100644 --- a/nixos/tests/ncps-storage-s3.nix +++ b/nixos/tests/ncps-storage-s3.nix @@ -20,7 +20,10 @@ in { name = "ncps-storage-s3"; meta = with lib.maintainers; { - maintainers = [ kalbasit ]; + maintainers = [ + aciceri + kalbasit + ]; }; nodes = { diff --git a/nixos/tests/ncps.nix b/nixos/tests/ncps.nix index 6f9ade50aa24..0daef543fbff 100644 --- a/nixos/tests/ncps.nix +++ b/nixos/tests/ncps.nix @@ -7,7 +7,10 @@ { name = "ncps"; meta = with lib.maintainers; { - maintainers = [ kalbasit ]; + maintainers = [ + aciceri + kalbasit + ]; }; nodes = { From 10d5182447877709d354316a5eefde8eaaa188a4 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Fri, 2 Jan 2026 00:45:50 -0800 Subject: [PATCH 62/80] nixos/tests/ncps: rename client01 to client --- nixos/tests/ncps.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nixos/tests/ncps.nix b/nixos/tests/ncps.nix index 0daef543fbff..8de7bb053be1 100644 --- a/nixos/tests/ncps.nix +++ b/nixos/tests/ncps.nix @@ -49,7 +49,7 @@ networking.firewall.allowedTCPPorts = [ 8501 ]; }; - client01 = { + client = { nix.settings = { substituters = lib.mkForce [ "http://ncps:8501" ]; trusted-public-keys = lib.mkForce [ @@ -85,10 +85,10 @@ ncps.wait_for_unit("ncps.service") - client01.wait_until_succeeds("curl -f http://ncps:8501/ | grep '\"hostname\":\"${toString nodes.ncps.services.ncps.cache.hostName}\"' >&2") + client.wait_until_succeeds("curl -f http://ncps:8501/ | grep '\"hostname\":\"${toString nodes.ncps.services.ncps.cache.hostName}\"' >&2") - client01.succeed("cat /etc/nix/nix.conf >&2") - client01.succeed("nix-store --realise ${pkgs.emptyFile}") + client.succeed("cat /etc/nix/nix.conf >&2") + client.succeed("nix-store --realise ${pkgs.emptyFile}") ncps.succeed("cat ${narinfoPath} >&2") ''; From de1b9a1308c8716ac13de04c4769a1f3916af177 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Wed, 7 Jan 2026 16:55:29 -0800 Subject: [PATCH 63/80] nixos/ncps: types.str -> types.path Change all types.str that are supposed to hold an absolute path to types.str. --- nixos/modules/services/networking/ncps.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nixos/modules/services/networking/ncps.nix b/nixos/modules/services/networking/ncps.nix index a22c815c094e..7282dcffb938 100644 --- a/nixos/modules/services/networking/ncps.nix +++ b/nixos/modules/services/networking/ncps.nix @@ -202,7 +202,7 @@ in }; secretKeyPath = lib.mkOption { - type = lib.types.nullOr lib.types.str; + type = lib.types.nullOr lib.types.path; default = null; description = '' The path to load the secretKey for signing narinfos. Leave this @@ -212,7 +212,7 @@ in storage = { local = lib.mkOption { - type = lib.types.str; + type = lib.types.path; default = "/var/lib/ncps"; description = '' The local directory for storing configuration and cached store @@ -257,14 +257,14 @@ in }; accessKeyIdPath = lib.mkOption { - type = lib.types.str; + type = lib.types.path; description = '' The path to a file containing only the access-key-id. ''; }; secretAccessKeyPath = lib.mkOption { - type = lib.types.str; + type = lib.types.path; description = '' The path to a file containing only the secret-access-key. ''; @@ -280,7 +280,7 @@ in }; tempPath = lib.mkOption { - type = lib.types.str; + type = lib.types.path; default = "/tmp"; description = '' The path to the temporary directory that is used by the cache to download NAR files @@ -347,7 +347,7 @@ in }; netrcFile = lib.mkOption { - type = lib.types.nullOr lib.types.str; + type = lib.types.nullOr lib.types.path; default = null; example = "/etc/nix/netrc"; description = '' From 80d0b43ba8e028020948fa4d25ecd820c9e16406 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Wed, 7 Jan 2026 16:58:22 -0800 Subject: [PATCH 64/80] nixos/ncps: Fix the location of SQLite migrations The location of the migration files has changed in ncps v0.6.0. --- nixos/modules/services/networking/ncps.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/modules/services/networking/ncps.nix b/nixos/modules/services/networking/ncps.nix index 7282dcffb938..bd26b09cbfb5 100644 --- a/nixos/modules/services/networking/ncps.nix +++ b/nixos/modules/services/networking/ncps.nix @@ -409,7 +409,7 @@ in wantedBy = [ "multi-user.target" ]; preStart = '' - ${lib.getExe cfg.dbmatePackage} --migrations-dir=${cfg.package}/share/ncps/db/migrations --url=${cfg.cache.databaseURL} up + ${lib.getExe cfg.dbmatePackage} --migrations-dir=${cfg.package}/share/ncps/db/migrations/sqlite --url=${cfg.cache.databaseURL} up ''; serviceConfig = lib.mkMerge [ From dbf35e94e5ab1301c70c2fbbefb51a11fcdf968f Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Wed, 7 Jan 2026 17:07:45 -0800 Subject: [PATCH 65/80] nixos/ncps: Use systemd.tmpfiles.settings.ncps for declarative directories --- nixos/modules/services/networking/ncps.nix | 45 ++++++++-------------- 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/nixos/modules/services/networking/ncps.nix b/nixos/modules/services/networking/ncps.nix index bd26b09cbfb5..88cb1c29f757 100644 --- a/nixos/modules/services/networking/ncps.nix +++ b/nixos/modules/services/networking/ncps.nix @@ -372,34 +372,23 @@ in }; users.groups.ncps = { }; - systemd.services.ncps-create-directories = { - description = "Created required directories by ncps"; - serviceConfig = { - Type = "oneshot"; - UMask = "0066"; - }; - script = - (lib.optionalString (cfg.cache.storage.s3 == null && cfg.cache.storage.local != "/var/lib/ncps") '' - if ! test -d ${cfg.cache.storage.local}; then - mkdir -p ${cfg.cache.storage.local} - chown ncps:ncps ${cfg.cache.storage.local} - fi - '') - + (lib.optionalString isSqlite '' - if ! test -d ${dbDir}; then - mkdir -p ${dbDir} - chown ncps:ncps ${dbDir} - fi - '') - + (lib.optionalString (cfg.cache.tempPath != "/tmp") '' - if ! test -d ${cfg.cache.tempPath}; then - mkdir -p ${cfg.cache.tempPath} - chown ncps:ncps ${cfg.cache.tempPath} - fi - ''); - wantedBy = [ "ncps.service" ]; - before = [ "ncps.service" ]; - }; + systemd.tmpfiles.settings.ncps = + let + perms = { + group = "ncps"; + mode = "0700"; + user = "ncps"; + }; + in + lib.mkMerge [ + (lib.mkIf (cfg.cache.storage.s3 == null && cfg.cache.storage.local != "/var/lib/ncps") { + "${cfg.cache.storage.local}".d = perms; + }) + + (lib.mkIf (isSqlite) { "${dbDir}".d = perms; }) + + (lib.mkIf (cfg.cache.tempPath != "/tmp") { "${cfg.cache.tempPath}".d = perms; }) + ]; systemd.services.ncps = { description = "ncps binary cache proxy service"; From 977f5baed383f47f7b832db5827c73f9e05b6a76 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Wed, 7 Jan 2026 17:15:10 -0800 Subject: [PATCH 66/80] nixos/tests/ncps: Add a test for custom SQLite path --- nixos/tests/all-tests.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 51aa5ac033c5..a17ceeb311e5 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -1029,6 +1029,10 @@ in nbd = runTest ./nbd.nix; ncdns = runTest ./ncdns.nix; ncps = runTest ./ncps.nix; + ncps-custom-sqlite-directory = runTest { + imports = [ ./ncps.nix ]; + defaults.services.ncps.cache.databaseURL = "sqlite:/path/to/ncps/db.sqlite"; + }; ncps-custom-storage-local = runTest { imports = [ ./ncps.nix ]; defaults.services.ncps.cache.storage.local = "/path/to/ncps"; From 164022841f4f50387986f45ae58fb98e36e3ecb2 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Wed, 7 Jan 2026 17:23:31 -0800 Subject: [PATCH 67/80] nixos/ncps: Expose the analytics options of ncps --- nixos/modules/services/networking/ncps.nix | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/nixos/modules/services/networking/ncps.nix b/nixos/modules/services/networking/ncps.nix index 88cb1c29f757..a05c542db11a 100644 --- a/nixos/modules/services/networking/ncps.nix +++ b/nixos/modules/services/networking/ncps.nix @@ -36,9 +36,8 @@ let cfg.openTelemetry.grpcURL != null ) "--otel-grpc-url='${cfg.openTelemetry.grpcURL}'") )) - ++ (lib.optionals cfg.prometheus.enable [ - "--prometheus-enabled" - ]) + ++ (lib.optional cfg.prometheus.enable "--prometheus-enabled") + ++ (lib.optional (!cfg.analytics.reporting.enable) "--analytics-reporting-enabled=false") ); serveFlags = lib.concatStringsSep " " ( @@ -108,6 +107,14 @@ in services.ncps = { enable = lib.mkEnableOption "ncps: Nix binary cache proxy service implemented in Go"; + analytics.reporting.enable = lib.mkOption { + type = lib.types.bool; + default = true; + description = '' + Enable reporting anonymous usage statistics (DB type, Lock type, Total Size) to the project maintainers. + ''; + }; + package = lib.mkPackageOption pkgs "ncps" { }; dbmatePackage = lib.mkPackageOption pkgs "dbmate" { }; From b6b1f72435962f533b0ae2693467e7def07b18a4 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Wed, 7 Jan 2026 17:26:21 -0800 Subject: [PATCH 68/80] nixos/tests/ncps: Disable analytics on ncps tests --- nixos/tests/ncps-storage-s3.nix | 2 ++ nixos/tests/ncps.nix | 2 ++ 2 files changed, 4 insertions(+) diff --git a/nixos/tests/ncps-storage-s3.nix b/nixos/tests/ncps-storage-s3.nix index 57e23c4e1c9a..c75557114a1b 100644 --- a/nixos/tests/ncps-storage-s3.nix +++ b/nixos/tests/ncps-storage-s3.nix @@ -58,6 +58,8 @@ in services.ncps = { enable = true; + analytics.reporting.enable = false; + cache = { hostName = "ncps"; diff --git a/nixos/tests/ncps.nix b/nixos/tests/ncps.nix index 8de7bb053be1..c2528e55b136 100644 --- a/nixos/tests/ncps.nix +++ b/nixos/tests/ncps.nix @@ -31,6 +31,8 @@ services.ncps = { enable = true; + analytics.reporting.enable = false; + cache = { hostName = "ncps"; secretKeyPath = toString ( From fc8e297430062ad72108c58f9cb626c6f6233cfb Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Wed, 7 Jan 2026 17:51:24 -0800 Subject: [PATCH 69/80] nixos/ncps: Add all options for Redis --- nixos/modules/services/networking/ncps.nix | 101 +++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/nixos/modules/services/networking/ncps.nix b/nixos/modules/services/networking/ncps.nix index a05c542db11a..05c76ce1e9ab 100644 --- a/nixos/modules/services/networking/ncps.nix +++ b/nixos/modules/services/networking/ncps.nix @@ -23,6 +23,10 @@ let export CACHE_STORAGE_S3_SECRET_ACCESS_KEY="$(cat "$CREDENTIALS_DIRECTORY/s3SecretAccessKey")" ''} + ${lib.optionalString (cfg.cache.redis != null && cfg.cache.redis.passwordFile != null) '' + export CACHE_REDIS_PASSWORD="$(cat "$CREDENTIALS_DIRECTORY/redisPassword")" + ''} + exec ${lib.getExe cfg.package} "$@" ''; @@ -47,6 +51,20 @@ let "--cache-temp-path='${cfg.cache.tempPath}'" "--server-addr='${cfg.server.addr}'" ] + ++ (lib.optionals (cfg.cache.redis != null) ( + [ + "--cache-redis-addrs='${builtins.concatStringsSep "," cfg.cache.redis.addresses}'" + "--cache-redis-db='${builtins.toString cfg.cache.redis.database}'" + "--cache-redis-pool-size='${builtins.toString cfg.cache.redis.poolSize}'" + ] + ++ (lib.optional ( + cfg.cache.redis.username != null + ) "--cache-redis-username='${cfg.cache.redis.username}'") + ++ (lib.optional ( + cfg.cache.redis.password != null + ) "--cache-redis-password='${cfg.cache.redis.password}'") + ++ (lib.optional cfg.cache.redis.useTLS "--cache-redis-use-tls") + )) ++ (lib.optional ( cfg.cache.storage.s3 == null ) "--cache-storage-local='${cfg.cache.storage.local}'") @@ -208,6 +226,79 @@ in ''; }; + redis = lib.mkOption { + type = lib.types.nullOr ( + lib.types.submodule { + options = { + addresses = lib.mkOption { + type = lib.types.listOf lib.types.str; + example = '' + ["redis0:6379" "redis1:6379"] + ''; + description = '' + A list of host:port for the Redis servers that are part of a cluster. + To use a single Redis instance, just set this to its single address. + ''; + }; + + database = lib.mkOption { + type = lib.types.int; + default = 0; + description = '' + Redis database number (0-15) + ''; + }; + + username = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; + description = '' + Redis username for authentication (for Redis ACL). + ''; + }; + + password = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; + description = '' + Redis password for authentication (for Redis ACL). + ''; + }; + + passwordFile = lib.mkOption { + type = lib.types.nullOr lib.types.path; + default = null; + description = '' + File containing the redis password for authentication (for Redis ACL). + ''; + }; + + poolSize = lib.mkOption { + type = lib.types.int; + default = 10; + description = '' + Redis connection pool size. + ''; + }; + + useTLS = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Use TLS for Redis connection. + ''; + }; + }; + } + ); + + default = null; + + description = '' + Configure Redis. + ''; + }; + secretKeyPath = lib.mkOption { type = lib.types.nullOr lib.types.path; default = null; @@ -371,6 +462,11 @@ in assertion = cfg.cache.lru.schedule == null || cfg.cache.maxSize != null; message = "You must specify config.ncps.cache.lru.schedule when config.ncps.cache.maxSize is set"; } + { + assertion = + cfg.cache.redis == null || cfg.cache.redis.password == null || cfg.cache.redis.passwordFile == null; + message = "You cannot specify both config.ncps.cache.redis.password and config.ncps.cache.redis.passwordFile"; + } ]; users.users.ncps = { @@ -430,6 +526,11 @@ in ]; }) + # credentials for Redis + (lib.mkIf (cfg.cache.redis != null && cfg.cache.redis.passwordFile != null) { + LoadCredential = lib.singleton "redisPassword:${cfg.cache.redis.passwordFile}"; + }) + # ensure permissions on required directories (lib.mkIf (cfg.cache.storage.s3 == null && cfg.cache.storage.local != "/var/lib/ncps") { ReadWritePaths = [ cfg.cache.storage.local ]; From 99c4bb7c9334f89dbd8f798bfc6e17c02622f403 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Wed, 7 Jan 2026 22:05:28 -0800 Subject: [PATCH 70/80] nixos/ncps: Use dbmate-wrapper from ncps --- nixos/modules/services/networking/ncps.nix | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/nixos/modules/services/networking/ncps.nix b/nixos/modules/services/networking/ncps.nix index 05c76ce1e9ab..a3ef2c0c8be3 100644 --- a/nixos/modules/services/networking/ncps.nix +++ b/nixos/modules/services/networking/ncps.nix @@ -119,6 +119,12 @@ in [ "services" "ncps" "upstream" "publicKeys" ] [ "services" "ncps" "cache" "upstream" "publicKeys" ] ) + + (lib.mkRemovedOptionModule [ + "services" + "ncps" + "dbmatePackage" + ] "dbmate is now wrapped within ncps package, you need to override ncps to change dbmate package") ]; options = { @@ -135,8 +141,6 @@ in package = lib.mkPackageOption pkgs "ncps" { }; - dbmatePackage = lib.mkPackageOption pkgs "dbmate" { }; - openTelemetry = { enable = lib.mkEnableOption "Enable OpenTelemetry logs, metrics, and tracing"; @@ -501,7 +505,7 @@ in wantedBy = [ "multi-user.target" ]; preStart = '' - ${lib.getExe cfg.dbmatePackage} --migrations-dir=${cfg.package}/share/ncps/db/migrations/sqlite --url=${cfg.cache.databaseURL} up + ${cfg.package}/bin/dbmate-ncps --url="${cfg.cache.databaseURL}" up ''; serviceConfig = lib.mkMerge [ From 137d1e1830d8955ad04c4fdeb4288bf288d55933 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Thu, 8 Jan 2026 19:11:24 -0800 Subject: [PATCH 71/80] nixos/tests/ncps: Implement an HA test --- nixos/tests/all-tests.nix | 2 +- nixos/tests/ncps-ha.nix | 210 ++++++++++++++++++++++++++++++++ nixos/tests/ncps-storage-s3.nix | 142 --------------------- 3 files changed, 211 insertions(+), 143 deletions(-) create mode 100644 nixos/tests/ncps-ha.nix delete mode 100644 nixos/tests/ncps-storage-s3.nix diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index a17ceeb311e5..3c0547d4578c 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -1037,7 +1037,7 @@ in imports = [ ./ncps.nix ]; defaults.services.ncps.cache.storage.local = "/path/to/ncps"; }; - ncps-storage-s3 = runTest ./ncps-storage-s3.nix; + ncps-ha = runTest ./ncps-ha.nix; ndppd = runTest ./ndppd.nix; nebula-lighthouse-service = runTest ./nebula-lighthouse-service.nix; nebula.connectivity = runTest ./nebula/connectivity.nix; diff --git a/nixos/tests/ncps-ha.nix b/nixos/tests/ncps-ha.nix new file mode 100644 index 000000000000..c39962c0536c --- /dev/null +++ b/nixos/tests/ncps-ha.nix @@ -0,0 +1,210 @@ +{ + lib, + pkgs, + ... +}: +let + # s3 creds + bucket = "ncps"; + region = "us-west-1"; + accessKey = builtins.toFile "minio-access-key" "easy-key"; + secretKey = builtins.toFile "minio-secret-key" "easy-secret"; + + # pg creds + postgresPassword = "easypwd"; + + # redis creds + redisPassword = "easypwd"; + + initMinio = pkgs.writeShellScriptBin "init-minio.sh" '' + set -euo pipefail + + mc alias set local "http://127.0.0.1:9000" minioadmin minioadmin + mc mb local/${bucket} + mc admin user svcacct add --access-key "$(cat ${accessKey})" --secret-key "$(cat ${secretKey})" local minioadmin + ''; + + ncpsAttrs = hostname: { + services.ncps = { + enable = true; + + analytics.reporting.enable = false; + + cache = { + hostName = hostname; + + databaseURL = "postgres://ncps:${lib.escapeURL postgresPassword}@postgres:5432/ncps?sslmode=disable"; + + secretKeyPath = builtins.toString ( + pkgs.writeText "ncps-cache-key" "ncps:dcrGsrku0KvltFhrR5lVIMqyloAdo0y8vYZOeIFUSLJS2IToL7dPHSSCk/fi+PJf8EorpBn8PU7MNhfvZoI8mA==" + ); + + redis = { + addresses = [ "redis:6379" ]; + passwordFile = builtins.toFile "redis-password" redisPassword; + }; + + storage.s3 = { + inherit bucket region; + + endpoint = "http://minio:9000"; + + accessKeyIdPath = accessKey; + secretAccessKeyPath = secretKey; + }; + + upstream = { + urls = [ "http://harmonia:5000" ]; + publicKeys = [ + "cache.example.com-1:eIGQXcGQpc00x6/XFcyacLEUmC07u4RAEHt5Y8vdglo=" + ]; + }; + }; + }; + + networking.firewall.allowedTCPPorts = [ 8501 ]; + }; +in +{ + name = "ncps-storage-s3"; + meta = with lib.maintainers; { + maintainers = [ + aciceri + kalbasit + ]; + }; + + nodes = { + client0 = { + nix.settings = { + substituters = lib.mkForce [ "http://ncps0:8501" ]; + trusted-public-keys = lib.mkForce [ + "ncps:UtiE6C+3Tx0kgpP34vjyX/BKK6QZ/D1OzDYX72aCPJg=" + ]; + }; + }; + + client1 = { + nix.settings = { + substituters = lib.mkForce [ "http://ncps1:8501" ]; + trusted-public-keys = lib.mkForce [ + "ncps:UtiE6C+3Tx0kgpP34vjyX/BKK6QZ/D1OzDYX72aCPJg=" + ]; + }; + }; + + harmonia = { + services.harmonia = { + enable = true; + signKeyPaths = [ + (pkgs.writeText "cache-key" "cache.example.com-1:9FhO0w+7HjZrhvmzT1VlAZw4OSAlFGTgC24Seg3tmPl4gZBdwZClzTTHr9cVzJpwsRSYLTu7hEAQe3ljy92CWg==") + ]; + settings.priority = 35; + }; + + networking.firewall.allowedTCPPorts = [ 5000 ]; + system.extraDependencies = [ pkgs.emptyFile ]; + }; + + minio = { + services.minio = { + inherit region; + + enable = true; + }; + + networking.firewall.allowedTCPPorts = [ 9000 ]; + environment.systemPackages = [ + pkgs.minio-client + initMinio + ]; + }; + + ncps0 = ncpsAttrs "ncps0"; + ncps1 = ncpsAttrs "ncps1"; + + postgres = { + services.postgresql = { + enable = true; + enableTCPIP = true; + authentication = '' + host all all all scram-sha-256 + ''; + initialScript = pkgs.writeText "init-postgres.sql" '' + CREATE DATABASE "ncps" WITH ENCODING = 'UTF8'; + CREATE ROLE "ncps" WITH LOGIN PASSWORD '${ + builtins.replaceStrings [ "'" ] [ "''" ] postgresPassword + }'; + ALTER DATABASE "ncps" OWNER TO "ncps"; + ''; + }; + + networking.firewall.allowedTCPPorts = [ 5432 ]; + }; + + redis = { + services.redis.servers.ncps = { + enable = true; + openFirewall = true; + port = 6379; + requirePass = redisPassword; + bind = null; + }; + }; + }; + + testScript = + { nodes, ... }: + let + narinfoName = + (lib.strings.removePrefix "/nix/store/" ( + lib.strings.removeSuffix "-empty-file" pkgs.emptyFile.outPath + )) + + ".narinfo"; + + narinfoNameChars = lib.strings.stringToCharacters narinfoName; + + narinfoPath = lib.concatStringsSep "/" [ + (builtins.head nodes.minio.services.minio.dataDir) + bucket + "store/narinfo" + (lib.lists.elemAt narinfoNameChars 0) + ((lib.lists.elemAt narinfoNameChars 0) + (lib.lists.elemAt narinfoNameChars 1)) + narinfoName + "xl.meta" + ]; + in + '' + harmonia.start() + minio.start() + postgres.start() + redis.start() + + minio.wait_for_unit("minio.service") + + minio.wait_until_succeeds("init-minio.sh") + + postgres.wait_for_unit("postgresql.service") + redis.wait_for_unit("redis-ncps.service") + + redis.wait_until_succeeds("redis-cli -h redis -p 6379 -a '${redisPassword}' ping") + + start_all() + + harmonia.wait_for_unit("harmonia.service") + + ncps0.wait_for_unit("ncps.service") + ncps1.wait_for_unit("ncps.service") + + client0.wait_until_succeeds("curl -f http://ncps0:8501/ | grep '\"hostname\":\"${toString nodes.ncps0.services.ncps.cache.hostName}\"' >&2") + client1.wait_until_succeeds("curl -f http://ncps1:8501/ | grep '\"hostname\":\"${toString nodes.ncps1.services.ncps.cache.hostName}\"' >&2") + + client0.succeed("cat /etc/nix/nix.conf >&2") + client0.succeed("nix-store --realise ${pkgs.emptyFile}") + + client1.succeed("cat /etc/nix/nix.conf >&2") + client1.succeed("nix-store --realise ${pkgs.emptyFile}") + + minio.succeed("cat ${narinfoPath} >&2") + ''; +} diff --git a/nixos/tests/ncps-storage-s3.nix b/nixos/tests/ncps-storage-s3.nix deleted file mode 100644 index c75557114a1b..000000000000 --- a/nixos/tests/ncps-storage-s3.nix +++ /dev/null @@ -1,142 +0,0 @@ -{ - lib, - pkgs, - ... -}: -let - bucket = "ncps"; - region = "us-west-1"; - accessKey = "test-access-key"; - secretKey = "test-secret-key"; - - initMinio = pkgs.writeShellScriptBin "init-minio.sh" '' - set -euo pipefail - - mc alias set local "http://127.0.0.1:9000" minioadmin minioadmin - mc mb local/${bucket} - mc admin user svcacct add --access-key ${accessKey} --secret-key ${secretKey} local minioadmin - ''; -in -{ - name = "ncps-storage-s3"; - meta = with lib.maintainers; { - maintainers = [ - aciceri - kalbasit - ]; - }; - - nodes = { - harmonia = { - services.harmonia = { - enable = true; - signKeyPaths = [ - (pkgs.writeText "cache-key" "cache.example.com-1:9FhO0w+7HjZrhvmzT1VlAZw4OSAlFGTgC24Seg3tmPl4gZBdwZClzTTHr9cVzJpwsRSYLTu7hEAQe3ljy92CWg==") - ]; - settings.priority = 35; - }; - - networking.firewall.allowedTCPPorts = [ 5000 ]; - system.extraDependencies = [ pkgs.emptyFile ]; - }; - - minio = { - services.minio = { - inherit region; - - enable = true; - }; - - networking.firewall.allowedTCPPorts = [ 9000 ]; - environment.systemPackages = [ - pkgs.minio-client - initMinio - ]; - }; - - ncps = { - services.ncps = { - enable = true; - - analytics.reporting.enable = false; - - cache = { - hostName = "ncps"; - - secretKeyPath = builtins.toString ( - pkgs.writeText "ncps-cache-key" "ncps:dcrGsrku0KvltFhrR5lVIMqyloAdo0y8vYZOeIFUSLJS2IToL7dPHSSCk/fi+PJf8EorpBn8PU7MNhfvZoI8mA==" - ); - - storage.s3 = { - inherit bucket region; - - endpoint = "http://minio:9000"; - - accessKeyIdPath = builtins.toFile "minio-access-key" accessKey; - secretAccessKeyPath = builtins.toFile "minio-secret-key" secretKey; - }; - - upstream = { - urls = [ "http://harmonia:5000" ]; - publicKeys = [ - "cache.example.com-1:eIGQXcGQpc00x6/XFcyacLEUmC07u4RAEHt5Y8vdglo=" - ]; - }; - }; - }; - - networking.firewall.allowedTCPPorts = [ 8501 ]; - }; - - client = { - nix.settings = { - substituters = lib.mkForce [ "http://ncps:8501" ]; - trusted-public-keys = lib.mkForce [ - "ncps:UtiE6C+3Tx0kgpP34vjyX/BKK6QZ/D1OzDYX72aCPJg=" - ]; - }; - }; - }; - - testScript = - { nodes, ... }: - let - narinfoName = - (lib.strings.removePrefix "/nix/store/" ( - lib.strings.removeSuffix "-empty-file" pkgs.emptyFile.outPath - )) - + ".narinfo"; - - narinfoNameChars = lib.strings.stringToCharacters narinfoName; - - narinfoPath = lib.concatStringsSep "/" [ - (builtins.head nodes.minio.services.minio.dataDir) - bucket - "store/narinfo" - (lib.lists.elemAt narinfoNameChars 0) - ((lib.lists.elemAt narinfoNameChars 0) + (lib.lists.elemAt narinfoNameChars 1)) - narinfoName - "xl.meta" - ]; - in - '' - minio.start() - - minio.wait_for_unit("minio.service") - - minio.wait_until_succeeds("init-minio.sh") - - start_all() - - harmonia.wait_for_unit("harmonia.service") - - ncps.wait_for_unit("ncps.service") - - client.wait_until_succeeds("curl -f http://ncps:8501/ | grep '\"hostname\":\"${toString nodes.ncps.services.ncps.cache.hostName}\"' >&2") - - client.succeed("cat /etc/nix/nix.conf >&2") - client.succeed("nix-store --realise ${pkgs.emptyFile}") - - minio.succeed("cat ${narinfoPath} >&2") - ''; -} From c3deadcb06e7d344e09dffc5921991765f22ba69 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Thu, 8 Jan 2026 19:43:54 -0800 Subject: [PATCH 72/80] nixos/ncps: Add a databaseURLFile for secure configuration --- nixos/modules/services/networking/ncps.nix | 41 ++++++++++++++++++---- nixos/tests/ncps-ha.nix | 8 ++++- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/nixos/modules/services/networking/ncps.nix b/nixos/modules/services/networking/ncps.nix index a3ef2c0c8be3..45733a964170 100644 --- a/nixos/modules/services/networking/ncps.nix +++ b/nixos/modules/services/networking/ncps.nix @@ -27,6 +27,10 @@ let export CACHE_REDIS_PASSWORD="$(cat "$CREDENTIALS_DIRECTORY/redisPassword")" ''} + ${lib.optionalString (cfg.cache.databaseURLFile != null) '' + export CACHE_DATABASE_URL="$(cat "$CREDENTIALS_DIRECTORY/databaseURL")" + ''} + exec ${lib.getExe cfg.package} "$@" ''; @@ -47,10 +51,10 @@ let serveFlags = lib.concatStringsSep " " ( [ "--cache-hostname='${cfg.cache.hostName}'" - "--cache-database-url='${cfg.cache.databaseURL}'" "--cache-temp-path='${cfg.cache.tempPath}'" "--server-addr='${cfg.server.addr}'" ] + ++ (lib.optional (cfg.cache.databaseURL != null) "--cache-database-url='${cfg.cache.databaseURL}'") ++ (lib.optionals (cfg.cache.redis != null) ( [ "--cache-redis-addrs='${builtins.concatStringsSep "," cfg.cache.redis.addresses}'" @@ -98,10 +102,10 @@ let ++ (lib.optional (cfg.netrcFile != null) "--netrc-file='${cfg.netrcFile}'") ); - isSqlite = lib.strings.hasPrefix "sqlite:" cfg.cache.databaseURL; + isSqlite = cfg.cache.databaseURL != null && lib.strings.hasPrefix "sqlite:" cfg.cache.databaseURL; - dbPath = lib.removePrefix "sqlite:" cfg.cache.databaseURL; - dbDir = dirOf dbPath; + dbPath = if isSqlite then lib.removePrefix "sqlite:" cfg.cache.databaseURL else null; + dbDir = if isSqlite then dirOf dbPath else null; in { imports = [ @@ -187,7 +191,7 @@ in }; databaseURL = lib.mkOption { - type = lib.types.str; + type = lib.types.nullOr lib.types.str; default = "sqlite:${cfg.cache.storage.local}/db/db.sqlite"; defaultText = "sqlite:/var/lib/ncps/db/db.sqlite"; description = '' @@ -195,6 +199,14 @@ in ''; }; + databaseURLFile = lib.mkOption { + type = lib.types.nullOr lib.types.path; + default = null; + description = '' + File containing the URL of the database. + ''; + }; + lru = { schedule = lib.mkOption { type = lib.types.nullOr lib.types.str; @@ -462,6 +474,10 @@ in config = lib.mkIf cfg.enable { assertions = [ + { + assertion = lib.xor (cfg.cache.databaseURL != null) (cfg.cache.databaseURLFile != null); + message = "You must specify exactly one of config.ncps.cache.databaseURL or config.ncps.cache.databaseURLFile"; + } { assertion = cfg.cache.lru.schedule == null || cfg.cache.maxSize != null; message = "You must specify config.ncps.cache.lru.schedule when config.ncps.cache.maxSize is set"; @@ -492,7 +508,7 @@ in "${cfg.cache.storage.local}".d = perms; }) - (lib.mkIf (isSqlite) { "${dbDir}".d = perms; }) + (lib.mkIf isSqlite { "${dbDir}".d = perms; }) (lib.mkIf (cfg.cache.tempPath != "/tmp") { "${cfg.cache.tempPath}".d = perms; }) ]; @@ -505,7 +521,14 @@ in wantedBy = [ "multi-user.target" ]; preStart = '' - ${cfg.package}/bin/dbmate-ncps --url="${cfg.cache.databaseURL}" up + ${lib.optionalString (cfg.cache.databaseURLFile != null) '' + export DATABASE_URL="$(cat "$CREDENTIALS_DIRECTORY/databaseURL")" + ''} + ${lib.optionalString (cfg.cache.databaseURL != null) '' + export DATABASE_URL="${cfg.cache.databaseURL}" + ''} + echo ${cfg.package}/bin/dbmate-ncps up + ${cfg.package}/bin/dbmate-ncps up ''; serviceConfig = lib.mkMerge [ @@ -535,6 +558,10 @@ in LoadCredential = lib.singleton "redisPassword:${cfg.cache.redis.passwordFile}"; }) + (lib.mkIf (cfg.cache.databaseURLFile != null) { + LoadCredential = lib.singleton "databaseURL:${cfg.cache.databaseURLFile}"; + }) + # ensure permissions on required directories (lib.mkIf (cfg.cache.storage.s3 == null && cfg.cache.storage.local != "/var/lib/ncps") { ReadWritePaths = [ cfg.cache.storage.local ]; diff --git a/nixos/tests/ncps-ha.nix b/nixos/tests/ncps-ha.nix index c39962c0536c..e4e8759b9f7c 100644 --- a/nixos/tests/ncps-ha.nix +++ b/nixos/tests/ncps-ha.nix @@ -120,7 +120,13 @@ in ]; }; - ncps0 = ncpsAttrs "ncps0"; + ncps0 = lib.mkMerge [ + (ncpsAttrs "ncps0") + { + services.ncps.cache.databaseURL = lib.mkForce null; + services.ncps.cache.databaseURLFile = builtins.toFile "db-url" "postgres://ncps:${lib.escapeURL postgresPassword}@postgres:5432/ncps?sslmode=disable"; + } + ]; ncps1 = ncpsAttrs "ncps1"; postgres = { From 5ab49ddaa444f4e7bae1700542393e033ddbf9f0 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Sat, 17 Jan 2026 00:36:01 -0800 Subject: [PATCH 73/80] nixos/ncps: Add a new option for --cache-lock-backend --- nixos/modules/services/networking/ncps.nix | 20 ++++++++++++++++++++ nixos/tests/ncps-ha.nix | 2 ++ 2 files changed, 22 insertions(+) diff --git a/nixos/modules/services/networking/ncps.nix b/nixos/modules/services/networking/ncps.nix index 45733a964170..16737d63626d 100644 --- a/nixos/modules/services/networking/ncps.nix +++ b/nixos/modules/services/networking/ncps.nix @@ -51,6 +51,7 @@ let serveFlags = lib.concatStringsSep " " ( [ "--cache-hostname='${cfg.cache.hostName}'" + "--cache-lock-backend='${cfg.cache.lock.backend}'" "--cache-temp-path='${cfg.cache.tempPath}'" "--server-addr='${cfg.server.addr}'" ] @@ -232,6 +233,17 @@ in }; }; + lock.backend = lib.mkOption { + type = lib.types.enum [ + "local" + "redis" + ]; + default = "local"; + description = '' + Lock backend to use: 'local' (single instance), 'redis' (distributed). + ''; + }; + maxSize = lib.mkOption { type = lib.types.nullOr lib.types.str; default = null; @@ -487,6 +499,14 @@ in cfg.cache.redis == null || cfg.cache.redis.password == null || cfg.cache.redis.passwordFile == null; message = "You cannot specify both config.ncps.cache.redis.password and config.ncps.cache.redis.passwordFile"; } + { + assertion = cfg.cache.lock.backend == "redis" -> cfg.cache.redis != null; + message = "You must specify config.ncps.cache.redis when config.ncps.cache.lock.backend is set to 'redis'"; + } + { + assertion = cfg.cache.redis != null -> cfg.cache.lock.backend == "redis"; + message = "You must set config.ncps.cache.lock.backend to 'redis' when config.ncps.cache.redis is set"; + } ]; users.users.ncps = { diff --git a/nixos/tests/ncps-ha.nix b/nixos/tests/ncps-ha.nix index e4e8759b9f7c..4bf5c6832ab8 100644 --- a/nixos/tests/ncps-ha.nix +++ b/nixos/tests/ncps-ha.nix @@ -35,6 +35,8 @@ let databaseURL = "postgres://ncps:${lib.escapeURL postgresPassword}@postgres:5432/ncps?sslmode=disable"; + lock.backend = "redis"; + secretKeyPath = builtins.toString ( pkgs.writeText "ncps-cache-key" "ncps:dcrGsrku0KvltFhrR5lVIMqyloAdo0y8vYZOeIFUSLJS2IToL7dPHSSCk/fi+PJf8EorpBn8PU7MNhfvZoI8mA==" ); From 5fe01e3dd800a8d507476ad2218d7842b87ceb5d Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Tue, 13 Jan 2026 23:22:27 +0000 Subject: [PATCH 74/80] pocket-tts: init at 1.0.1 --- pkgs/by-name/po/pocket-tts/package.nix | 1 + .../python-modules/pocket-tts/default.nix | 78 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 3 files changed, 81 insertions(+) create mode 100644 pkgs/by-name/po/pocket-tts/package.nix create mode 100644 pkgs/development/python-modules/pocket-tts/default.nix diff --git a/pkgs/by-name/po/pocket-tts/package.nix b/pkgs/by-name/po/pocket-tts/package.nix new file mode 100644 index 000000000000..4c0c7c28d0de --- /dev/null +++ b/pkgs/by-name/po/pocket-tts/package.nix @@ -0,0 +1 @@ +{ python3Packages }: with python3Packages; toPythonApplication pocket-tts diff --git a/pkgs/development/python-modules/pocket-tts/default.nix b/pkgs/development/python-modules/pocket-tts/default.nix new file mode 100644 index 000000000000..2ef871f5428c --- /dev/null +++ b/pkgs/development/python-modules/pocket-tts/default.nix @@ -0,0 +1,78 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + + # build-system + hatchling, + + # dependencies + beartype, + einops, + fastapi, + huggingface-hub, + numpy, + pydantic, + python-multipart, + requests, + safetensors, + scipy, + sentencepiece, + torch, + typer, + typing-extensions, + uvicorn, +}: + +buildPythonPackage (finalAttrs: { + pname = "pocket-tts"; + version = "1.0.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "kyutai-labs"; + repo = "pocket-tts"; + tag = "v${finalAttrs.version}"; + hash = "sha256-VFLpUsHnQYSr5RgNKJOX1TD30o1A8rG4cs2VeZWriaU="; + }; + + build-system = [ + hatchling + ]; + + pythonRelaxDeps = [ + "beartype" + "python-multipart" + ]; + dependencies = [ + beartype + einops + fastapi + huggingface-hub + numpy + pydantic + python-multipart + requests + safetensors + scipy + sentencepiece + torch + typer + typing-extensions + uvicorn + ]; + + pythonImportsCheck = [ "pocket_tts" ]; + + # All tests are failing as the model cannot be downloaded from the sandbox + doCheck = false; + + meta = { + description = "Lightweight text-to-speech (TTS) application designed to run efficiently on CPUs"; + homepage = "https://github.com/kyutai-labs/pocket-tts"; + changelog = "https://github.com/kyutai-labs/pocket-tts/releases/tag/${finalAttrs.src.tag}"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ GaetanLepage ]; + mainProgram = "pocket-tts"; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index a2bbbc404c6b..9c71ab91d6ef 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -12378,6 +12378,8 @@ self: super: with self; { pocket = callPackage ../development/python-modules/pocket { }; + pocket-tts = callPackage ../development/python-modules/pocket-tts { }; + pocketsphinx = callPackage ../development/python-modules/pocketsphinx { inherit (pkgs) pocketsphinx; }; From 8122f97fdef034c1657d4ac406edbe2a3a735203 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 17 Jan 2026 10:48:40 +0100 Subject: [PATCH 75/80] python313Packages.oelint-parser: modernize --- .../python-modules/oelint-parser/default.nix | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/pkgs/development/python-modules/oelint-parser/default.nix b/pkgs/development/python-modules/oelint-parser/default.nix index f06a2beaa821..2b8eb7ced9dc 100644 --- a/pkgs/development/python-modules/oelint-parser/default.nix +++ b/pkgs/development/python-modules/oelint-parser/default.nix @@ -1,6 +1,5 @@ { lib, - nix-update-script, fetchFromGitHub, buildPythonPackage, setuptools, @@ -12,7 +11,7 @@ pytestCheckHook, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "oelint-parser"; version = "8.7.2"; pyproject = true; @@ -20,7 +19,7 @@ buildPythonPackage rec { src = fetchFromGitHub { owner = "priv-kweihmann"; repo = "oelint-parser"; - tag = version; + tag = finalAttrs.version; hash = "sha256-F17THZo8fXoFP4b2DJnDjbZfT5xUX9+MMSxBa9sIy5c="; }; @@ -42,13 +41,11 @@ buildPythonPackage rec { pythonImportsCheck = [ "oelint_parser" ]; - passthru.updateScript = nix-update-script { }; - meta = { description = "Alternative parser for bitbake recipes"; homepage = "https://github.com/priv-kweihmann/oelint-parser"; - changelog = "https://github.com/priv-kweihmann/oelint-parser/releases/tag/${src.tag}"; + changelog = "https://github.com/priv-kweihmann/oelint-parser/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.bsd2; maintainers = with lib.maintainers; [ otavio ]; }; -} +}) From 8e6b424e58ff63d9f5f036db897462b403218469 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 17 Jan 2026 10:56:01 +0100 Subject: [PATCH 76/80] python3Packages.limnoria: modernize --- .../python-modules/limnoria/default.nix | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/pkgs/development/python-modules/limnoria/default.nix b/pkgs/development/python-modules/limnoria/default.nix index 7e32a2dc794a..1c47b1b3b5c8 100644 --- a/pkgs/development/python-modules/limnoria/default.nix +++ b/pkgs/development/python-modules/limnoria/default.nix @@ -11,20 +11,24 @@ pytestCheckHook, python-dateutil, python-gnupg, - pythonOlder, pytz, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "limnoria"; version = "2026.1.16"; pyproject = true; src = fetchPypi { - inherit pname version; + inherit (finalAttrs) pname version; hash = "sha256-ZkEXZMjJsEgSwX2a8TwaQ/vtvskSOFwNBZg/Ru5q/bc="; }; + postPatch = '' + substituteInPlace setup.py \ + --replace-fail "version=version" 'version="${finalAttrs.version}"' + ''; + build-system = [ setuptools ]; dependencies = [ @@ -35,16 +39,10 @@ buildPythonPackage rec { pysocks python-dateutil python-gnupg - ] - ++ lib.optionals (pythonOlder "3.9") [ pytz ]; + ]; nativeCheckInputs = [ pytestCheckHook ]; - postPatch = '' - substituteInPlace setup.py \ - --replace-fail "version=version" 'version="${version}"' - ''; - checkPhase = '' runHook preCheck export PATH="$PATH:$out/bin"; @@ -60,7 +58,8 @@ buildPythonPackage rec { meta = { description = "Modified version of Supybot, an IRC bot"; homepage = "https://github.com/ProgVal/Limnoria"; + changelog = "https://github.com/progval/Limnoria/releases/tag/master-${finalAttrs.version}"; license = lib.licenses.bsd3; maintainers = [ ]; }; -} +}) From 75dc763daf250a6b234f936b5fcc5ae9a605ffd7 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Sat, 17 Jan 2026 09:55:33 +0000 Subject: [PATCH 77/80] bacon: 3.21.0 -> 3.22.0 Diff: https://github.com/Canop/bacon/compare/v3.21.0...v3.22.0 Changelog: https://github.com/Canop/bacon/blob/v3.22.0/CHANGELOG.md --- pkgs/by-name/ba/bacon/package.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/ba/bacon/package.nix b/pkgs/by-name/ba/bacon/package.nix index 2ddc6b447ba9..a23065eecdc3 100644 --- a/pkgs/by-name/ba/bacon/package.nix +++ b/pkgs/by-name/ba/bacon/package.nix @@ -27,16 +27,16 @@ in rustPlatform.buildRustPackage (finalAttrs: { pname = "bacon"; - version = "3.21.0"; + version = "3.22.0"; src = fetchFromGitHub { owner = "Canop"; repo = "bacon"; tag = "v${finalAttrs.version}"; - hash = "sha256-mgSFnSnghJvaOrgg1AICNRUGNSrNijL9caDyN8kj8Dw="; + hash = "sha256-eHMpzFKweKGI0REPudyy4veFTXDZc+AX626ylSN2yvU="; }; - cargoHash = "sha256-aSLaPirkszoGnAyt9U0LsKXL2IuR6nSInb/KQBVQ69k="; + cargoHash = "sha256-nUO9xVQ51dNWB5fxDZBLlzOWNE5HDAh6xYa5OdBPr4M="; buildFeatures = lib.optionals withSound [ "sound" @@ -76,7 +76,7 @@ rustPlatform.buildRustPackage (finalAttrs: { description = "Background rust code checker"; mainProgram = "bacon"; homepage = "https://github.com/Canop/bacon"; - changelog = "https://github.com/Canop/bacon/blob/v${finalAttrs.version}/CHANGELOG.md"; + changelog = "https://github.com/Canop/bacon/blob/${finalAttrs.src.tag}/CHANGELOG.md"; license = lib.licenses.agpl3Only; maintainers = with lib.maintainers; [ FlorianFranzen From 2d98ba301b50a7571304fc3461b1f18868fec09f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 17 Jan 2026 11:00:14 +0100 Subject: [PATCH 78/80] python313Packages.identify: migrate to finalAttrs --- pkgs/development/python-modules/identify/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/python-modules/identify/default.nix b/pkgs/development/python-modules/identify/default.nix index aec0e7e66474..183a6a1bcc18 100644 --- a/pkgs/development/python-modules/identify/default.nix +++ b/pkgs/development/python-modules/identify/default.nix @@ -8,7 +8,7 @@ ukkonen, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "identify"; version = "2.6.16"; pyproject = true; @@ -16,7 +16,7 @@ buildPythonPackage rec { src = fetchFromGitHub { owner = "pre-commit"; repo = "identify"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-+iLIU2NfKogFAdbAXXER3G7cDyvcey9pR+0HifQZoh8="; }; @@ -37,4 +37,4 @@ buildPythonPackage rec { maintainers = with lib.maintainers; [ fab ]; mainProgram = "identify-cli"; }; -} +}) From 7bfd9b4e88094baf0fd13d63f3e6cdb7996ae992 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 17 Jan 2026 11:07:24 +0100 Subject: [PATCH 79/80] azurehound: migrate to finalAttrs --- pkgs/by-name/az/azurehound/package.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/by-name/az/azurehound/package.nix b/pkgs/by-name/az/azurehound/package.nix index 21059d125c07..4130b103d0f4 100644 --- a/pkgs/by-name/az/azurehound/package.nix +++ b/pkgs/by-name/az/azurehound/package.nix @@ -6,14 +6,14 @@ versionCheckHook, }: -buildGoModule rec { +buildGoModule (finalAttrs: { pname = "azurehound"; version = "2.8.3"; src = fetchFromGitHub { owner = "SpecterOps"; repo = "AzureHound"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-ecLpNIYczim4dLbNwkOtwieJrjoSOXv4KHvSMuMjOw0="; }; @@ -24,7 +24,7 @@ buildGoModule rec { ldflags = [ "-s" "-w" - "-X=github.com/bloodhoundad/azurehound/v2/constants.Version=${version}" + "-X=github.com/bloodhoundad/azurehound/v2/constants.Version=${finalAttrs.version}" ]; doInstallCheck = true; @@ -32,10 +32,10 @@ buildGoModule rec { meta = { description = "Azure Data Exporter for BloodHound"; homepage = "https://github.com/SpecterOps/AzureHound"; - changelog = "https://github.com/SpecterOps/AzureHound/releases/tag/v${version}"; + changelog = "https://github.com/SpecterOps/AzureHound/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.gpl3Only; maintainers = with lib.maintainers; [ fab ]; mainProgram = "azurehound"; broken = stdenv.hostPlatform.isDarwin; }; -} +}) From 77884b9c1b8850ac081a9ca9759c5c84064c3a35 Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Sat, 17 Jan 2026 08:59:01 +0000 Subject: [PATCH 80/80] python3Packages.raylib-python-cffi.tests: fix the eval MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Without the chnage the eval fails: $ nix-instantiate -A python3Packages.raylib-python-cffi.tests error: … from call site at pkgs/development/python-modules/raylib-python-cffi/default.nix:52:20: 51| 52| passthru.tests = import ./passthru-tests.nix { | ^ 53| inherit writers; error: function 'anonymous lambda' called without required argument 'src' at pkgs/development/python-modules/raylib-python-cffi/passthru-tests.nix:1:1: 1| { | ^ 2| src, --- .../python-modules/raylib-python-cffi/passthru-tests.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/raylib-python-cffi/passthru-tests.nix b/pkgs/development/python-modules/raylib-python-cffi/passthru-tests.nix index 589f01641271..20934ec45ad4 100644 --- a/pkgs/development/python-modules/raylib-python-cffi/passthru-tests.nix +++ b/pkgs/development/python-modules/raylib-python-cffi/passthru-tests.nix @@ -1,9 +1,9 @@ { - src, raylib-python-cffi, writers, }: let + src = raylib-python-cffi.src; writeTest = name: path: writers.writePython3Bin name {