From 8d85ff76859abc58ef4111fa892ac6a605367675 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Tue, 9 Dec 2025 13:58:14 +0000 Subject: [PATCH 01/61] libucl: 0.9.2 -> 0.9.3 --- pkgs/by-name/li/libucl/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/li/libucl/package.nix b/pkgs/by-name/li/libucl/package.nix index 620b933898b8..775e45fa5f33 100644 --- a/pkgs/by-name/li/libucl/package.nix +++ b/pkgs/by-name/li/libucl/package.nix @@ -27,13 +27,13 @@ let in stdenv.mkDerivation rec { pname = "libucl"; - version = "0.9.2"; + version = "0.9.3"; src = fetchFromGitHub { owner = "vstakhov"; repo = "libucl"; rev = version; - sha256 = "sha256-esNEVBa660rl3Oo2SLaLrFThFkjbqtZ1r0tjMq3h6cM="; + sha256 = "sha256-dub829xZ10sJ5qwegYUiGoyAVLiwg44GKSzz+BMLJis="; }; nativeBuildInputs = [ From a8d11dbf6a34306f19ce3b68393c1eaef7991d96 Mon Sep 17 00:00:00 2001 From: chillcicada <2210227279@qq.com> Date: Thu, 11 Dec 2025 00:27:37 +0800 Subject: [PATCH 02/61] reqable: 2.33.12 -> 3.0.30; fix settings schema; adopted --- pkgs/by-name/re/reqable/package.nix | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/re/reqable/package.nix b/pkgs/by-name/re/reqable/package.nix index 4c201ef4673b..80d88007cb64 100644 --- a/pkgs/by-name/re/reqable/package.nix +++ b/pkgs/by-name/re/reqable/package.nix @@ -28,11 +28,11 @@ stdenv.mkDerivation (finalAttrs: { pname = "reqable"; - version = "2.33.12"; + version = "3.0.30"; src = fetchurl { url = "https://github.com/reqable/reqable-app/releases/download/${finalAttrs.version}/reqable-app-linux-x86_64.deb"; - hash = "sha256-LCHeJUzTRjl/lh3PWygZV0Rd3AxJEGlTkVrI/5l+Go4="; + hash = "sha256-tqeTcM0+RClOgWY72NJAFJAe62zbqAtdsIe//nZ3Kjs="; }; nativeBuildInputs = [ @@ -75,7 +75,8 @@ stdenv.mkDerivation (finalAttrs: { preFixup = '' mkdir $out/bin makeWrapper $out/share/reqable/reqable $out/bin/reqable \ - --prefix LD_LIBRARY_PATH : $out/share/reqable/lib + --prefix LD_LIBRARY_PATH : $out/share/reqable/lib \ + --set GIO_MODULE_DIR "${glib.out}/lib/gio/modules" ''; passthru.updateScript = nix-update-script { }; @@ -83,10 +84,12 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "Generation API debugging and testing one-stop solution"; homepage = "https://reqable.com"; + downloadPage = "https://github.com/reqable/reqable-app/releases"; + changelog = "https://github.com/reqable/reqable-app/releases/tag/${finalAttrs.version}"; mainProgram = "reqable"; license = lib.licenses.unfree; sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; - maintainers = [ ]; + maintainers = with lib.maintainers; [ chillcicada ]; platforms = [ "x86_64-linux" ]; }; }) From 2ff52d7421c9df89e4d8f8b8c5f647c524a0e277 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 20 Dec 2025 03:25:46 +0000 Subject: [PATCH 03/61] rnr: 0.5.0 -> 0.5.1 --- pkgs/by-name/rn/rnr/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/rn/rnr/package.nix b/pkgs/by-name/rn/rnr/package.nix index 9da124082bfa..c8cea76924de 100644 --- a/pkgs/by-name/rn/rnr/package.nix +++ b/pkgs/by-name/rn/rnr/package.nix @@ -6,16 +6,16 @@ rustPlatform.buildRustPackage rec { pname = "rnr"; - version = "0.5.0"; + version = "0.5.1"; src = fetchFromGitHub { owner = "ismaelgv"; repo = "rnr"; rev = "v${version}"; - sha256 = "sha256-uuM8zh0wFSsySedXmdm8WGGR4HmUc5TCZ6socdztrZI="; + sha256 = "sha256-vuYFh7k7dNCOnB5jqP8MIBIWFOVxRmv0+qvCXkJchtA="; }; - cargoHash = "sha256-lXo3BECHpiNMRMgd4XZy+b8QHbE0TZ5/P4cz+SgwqsY="; + cargoHash = "sha256-2YvpO8K5Y8Ul2k0sJXWMgrHnGY8e1sEcIZNWIEpKfqs="; meta = { description = "Command-line tool to batch rename files and directories"; From 8c44ebf01e601be505d1c62413a61c81e0de3681 Mon Sep 17 00:00:00 2001 From: Kirill Radzikhovskyy Date: Sat, 20 Dec 2025 21:28:14 +1100 Subject: [PATCH 04/61] python3Packages.pysptk: remove hyphon81 from maintainers --- pkgs/development/python-modules/pysptk/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/pysptk/default.nix b/pkgs/development/python-modules/pysptk/default.nix index 977997473aab..ed981002f75a 100644 --- a/pkgs/development/python-modules/pysptk/default.nix +++ b/pkgs/development/python-modules/pysptk/default.nix @@ -44,6 +44,6 @@ buildPythonPackage rec { description = "Wrapper for Speech Signal Processing Toolkit (SPTK)"; homepage = "https://pysptk.readthedocs.io/"; license = lib.licenses.mit; - maintainers = with lib.maintainers; [ hyphon81 ]; + maintainers = [ ]; }; } From 88ef826c56b8e0c864c35d107d4fb12e292bccbd Mon Sep 17 00:00:00 2001 From: Kirill Radzikhovskyy Date: Sat, 20 Dec 2025 21:28:15 +1100 Subject: [PATCH 05/61] python3Packages.fastrlock: remove hyphon81 from maintainers --- pkgs/development/python-modules/fastrlock/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/fastrlock/default.nix b/pkgs/development/python-modules/fastrlock/default.nix index f6a46cbf2918..c65ca6f27686 100644 --- a/pkgs/development/python-modules/fastrlock/default.nix +++ b/pkgs/development/python-modules/fastrlock/default.nix @@ -34,6 +34,6 @@ buildPythonPackage rec { description = "RLock implementation for CPython"; homepage = "https://github.com/scoder/fastrlock"; license = lib.licenses.mit; - maintainers = with lib.maintainers; [ hyphon81 ]; + maintainers = [ ]; }; } From 0ae67bd786d45e3d5ea69202e6a14e9d1318a130 Mon Sep 17 00:00:00 2001 From: Kirill Radzikhovskyy Date: Sat, 20 Dec 2025 21:28:15 +1100 Subject: [PATCH 06/61] python3Packages.filelock: remove hyphon81 from maintainers --- pkgs/development/python-modules/filelock/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/filelock/default.nix b/pkgs/development/python-modules/filelock/default.nix index 926bc2ad5cfd..347ef9ca5304 100644 --- a/pkgs/development/python-modules/filelock/default.nix +++ b/pkgs/development/python-modules/filelock/default.nix @@ -44,6 +44,6 @@ buildPythonPackage rec { description = "Platform independent file lock for Python"; homepage = "https://github.com/benediktschmitt/py-filelock"; license = lib.licenses.unlicense; - maintainers = with lib.maintainers; [ hyphon81 ]; + maintainers = [ ]; }; } From 955ec58b4324eb4bca7084e92ef51e3b338890f7 Mon Sep 17 00:00:00 2001 From: Kirill Radzikhovskyy Date: Sat, 20 Dec 2025 21:28:15 +1100 Subject: [PATCH 07/61] python3Packages.cupy: remove hyphon81 from maintainers --- pkgs/development/python-modules/cupy/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/cupy/default.nix b/pkgs/development/python-modules/cupy/default.nix index ea7b4743f04c..0eb635c06a15 100644 --- a/pkgs/development/python-modules/cupy/default.nix +++ b/pkgs/development/python-modules/cupy/default.nix @@ -131,6 +131,6 @@ buildPythonPackage rec { "aarch64-linux" "x86_64-linux" ]; - maintainers = with lib.maintainers; [ hyphon81 ]; + maintainers = [ ]; }; } From 19009e8061af5bb06ff9a15af736363af851433e Mon Sep 17 00:00:00 2001 From: Kirill Radzikhovskyy Date: Sat, 20 Dec 2025 21:28:16 +1100 Subject: [PATCH 08/61] maintainers: remove hyphon81 --- maintainers/maintainer-list.nix | 6 ------ 1 file changed, 6 deletions(-) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index d5bb1f419f0c..0e963b6e0602 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -10838,12 +10838,6 @@ githubId = 2332070; name = "Serge Baltic"; }; - hyphon81 = { - email = "zero812n@gmail.com"; - github = "hyphon81"; - githubId = 12491746; - name = "Masato Yonekawa"; - }; hyshka = { name = "Bryan Hyshka"; email = "bryan@hyshka.com"; From 7d24905cd37a24ad9e811e068c0ca0e9ea23edbb Mon Sep 17 00:00:00 2001 From: Vikingnope Date: Sat, 20 Dec 2025 12:45:32 +0100 Subject: [PATCH 09/61] wivrn: 25.11.1 -> 25.12 --- pkgs/by-name/wi/wivrn/package.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/wi/wivrn/package.nix b/pkgs/by-name/wi/wivrn/package.nix index 67d860ad43f5..495e1c82c4ec 100644 --- a/pkgs/by-name/wi/wivrn/package.nix +++ b/pkgs/by-name/wi/wivrn/package.nix @@ -53,13 +53,13 @@ }: stdenv.mkDerivation (finalAttrs: { pname = "wivrn"; - version = "25.11.1"; + version = "25.12"; src = fetchFromGitHub { owner = "wivrn"; repo = "wivrn"; rev = "v${finalAttrs.version}"; - hash = "sha256-pEKMeRdI9UhdZ+NksRBcF7yPC7Ys2haE+B4PPGQ4beE="; + hash = "sha256-gadfW3/PXi9SEztaHbi4U29Vj7ik/ia8BVDTy8P5aJE="; }; monado = applyPatches { @@ -67,8 +67,8 @@ stdenv.mkDerivation (finalAttrs: { domain = "gitlab.freedesktop.org"; owner = "monado"; repo = "monado"; - rev = "06e62fc7d9c5cbcbc43405bb86dfde3bf01ce043"; - hash = "sha256-0ALB9eLY4NAUqNOYZMwpvYnLxVpHsQDJc1er8Txdezs="; + rev = "20e0dacbdd2de863923790326beec76e848b056a"; + hash = "sha256-wiXdMgp3bKW17KqLnSn6HHhz7xbQtjp4c3aU7qp+2BE="; }; postPatch = '' From c050024c6426f17205e01fff43975b6f2e95b791 Mon Sep 17 00:00:00 2001 From: linsui <36977733+linsui@users.noreply.github.com> Date: Sat, 20 Dec 2025 21:00:40 +0800 Subject: [PATCH 10/61] jabref: update deps.json --- pkgs/by-name/ja/jabref/deps.json | 234 +++++++++++++++---------------- 1 file changed, 117 insertions(+), 117 deletions(-) diff --git a/pkgs/by-name/ja/jabref/deps.json b/pkgs/by-name/ja/jabref/deps.json index 60d15e9c54e4..3cbe63ff7857 100644 --- a/pkgs/by-name/ja/jabref/deps.json +++ b/pkgs/by-name/ja/jabref/deps.json @@ -709,13 +709,13 @@ "jar": "sha256-bNkZkTI917L7KMqT16wSr1qGovUyeeKzWCezAxP9C58=", "pom": "sha256-rECp8tDB7mMfw7CO+OLwvRS6IgEcp2/xvPZftWnq3zU=" }, - "org/gradle/kotlin#gradle-kotlin-dsl-plugins/6.2.0": { - "jar": "sha256-i/+sU1wrfiY/wwPwhdbgg9LZpE0nXWCmJbalFpmEDUs=", - "module": "sha256-BC5gnbaQwxZ7aeWaIjNMWrASYYMeOMwILjch0KxdYcI=", - "pom": "sha256-w/TTKxfHro5uyElSHN78u8uHwdBW4ISlrnzziO1rkqs=" + "org/gradle/kotlin#gradle-kotlin-dsl-plugins/6.4.1": { + "jar": "sha256-JolZk48cG8O1VeIihdIEVdoPOrCAaEuSfBvK5VTZFNM=", + "module": "sha256-QfjCNSMXc2dWDubRXMC9a8GqRP6x2BjXihzt2+IMC40=", + "pom": "sha256-G9F/hR9bve0OCz16YZzBdxKrmEXqpFu8ypBxX86jEF8=" }, - "org/gradle/kotlin/kotlin-dsl#org.gradle.kotlin.kotlin-dsl.gradle.plugin/6.2.0": { - "pom": "sha256-tIUcmutueaoXqVKIMVxU+is1F8TNu8LaC38bcQwdLXE=" + "org/gradle/kotlin/kotlin-dsl#org.gradle.kotlin.kotlin-dsl.gradle.plugin/6.4.1": { + "pom": "sha256-9FhdUWKX7VtEyA0nq82/XKA0aCx1B4E+8UAHLhDYts4=" }, "org/gradle/toolchains#foojay-resolver/1.0.0": { "jar": "sha256-eLhqR9/fdpfJvRXaeJg/2A2nJH1uAvwQa98H4DiLYKg=", @@ -819,146 +819,146 @@ "jar": "sha256-rOKhDcji1f00kl7KwD5JiLLA+FFlDJS4zvSbob0RFHg=", "pom": "sha256-llrrK+3/NpgZvd4b96CzuJuCR91pyIuGN112Fju4w5c=" }, - "org/jetbrains/kotlin#abi-tools-api/2.2.0": { - "jar": "sha256-hxeDiGZkLjvdR+yeAmC70wdujH6GvgXirahoMesq+Qo=", - "pom": "sha256-UwmmvuGytgrDtfXTXMS2zDiKFzOA17jeqgIJ6wgUnpA=" + "org/jetbrains/kotlin#abi-tools-api/2.2.20": { + "jar": "sha256-8chm6sXcCI8/0IEQCENAm/TxYSu7mY+6ofaFMlyuDVU=", + "pom": "sha256-HOL7NczYP8vJCuXFmN/bsilS0IVHgElEpbIfLEbKwL0=" }, - "org/jetbrains/kotlin#fus-statistics-gradle-plugin/2.2.0": { - "module": "sha256-5d0u34ivdW30d1ra13xS0AkDUav1EZLPGdP+YsZnyrg=", - "pom": "sha256-Qejc6FcbX7TuAzURlYL+IoBQqP8ZPiRg1SmMX5Dj1nU=" + "org/jetbrains/kotlin#fus-statistics-gradle-plugin/2.2.20": { + "module": "sha256-n+aVWzf+KQtlFiXPnGgea6IKjxLEZYzOUCblk1BaMSk=", + "pom": "sha256-P6gmRiy9hG0YAgLyLFGTQYy5zan2lcmUEjWpsbXBQdk=" }, - "org/jetbrains/kotlin#fus-statistics-gradle-plugin/2.2.0/gradle813": { - "jar": "sha256-0M+f8jrTjCEO7QzCWlExWjhOYf3BWlP+uGwAvuaRqug=" + "org/jetbrains/kotlin#fus-statistics-gradle-plugin/2.2.20/gradle813": { + "jar": "sha256-OmlZW2x1+/ktMgFodFxpj/cRS4YHhBBQ1ISYgjAG6HE=" }, - "org/jetbrains/kotlin#kotlin-assignment-compiler-plugin-embeddable/2.2.0": { - "jar": "sha256-caw8dQsO5FH6zdSYInQLKIi5f8rzMWruOxfTpMTvUro=", - "pom": "sha256-Ge0cc5y8KCJVINrxd/QcDFq3ROAE1GjPMZRZI5t8MD8=" + "org/jetbrains/kotlin#kotlin-assignment-compiler-plugin-embeddable/2.2.20": { + "jar": "sha256-07TapcbMI1Zfj7k2NI84xCGgRhFjdF02rt9E096UJQo=", + "pom": "sha256-L/XBHfd+t6JZdmzdqed47WW6SFxYxhO7ppAoauzi3H0=" }, - "org/jetbrains/kotlin#kotlin-assignment/2.2.0": { - "module": "sha256-SBPTUS68DvnmX+RkM9IZ5dSSKw2TPc2FKySPpT+FNtA=", - "pom": "sha256-At2wWVzbi4VkYars5gKXiASNycM52OYtZcotqU4CaZA=" + "org/jetbrains/kotlin#kotlin-assignment/2.2.20": { + "module": "sha256-xbfmG95gHQM75qCyXhkxfc9u434wVC/XRsRr/3gBj1o=", + "pom": "sha256-fh3mglHYFXQXuKIXn2YlW8m5zzFTPdkDukFVZlwwXGs=" }, - "org/jetbrains/kotlin#kotlin-assignment/2.2.0/gradle813": { - "jar": "sha256-d3zNZXeiOZfkssjiezjCQ6oCzQrsmYB8nLOdWnsJ4sQ=" + "org/jetbrains/kotlin#kotlin-assignment/2.2.20/gradle813": { + "jar": "sha256-MYCcvl5312WyQRFT6huuR2cQQGoXfjmhC/ZKYSOgRfI=" }, "org/jetbrains/kotlin#kotlin-bom/2.0.21": { "pom": "sha256-1Ufg3iVCLZY+IsepRPO13pQ8akmClbUtv/49KJXNm+g=" }, - "org/jetbrains/kotlin#kotlin-build-statistics/2.2.0": { - "jar": "sha256-klfy37x4iCf2AnUPrijX6UWTLq2QQVP3f09sTE2Y5RE=", - "pom": "sha256-8Uct+ZZDqe4VJrFEka0vaNz8Zunr9WywFuSFzaj69sI=" + "org/jetbrains/kotlin#kotlin-build-statistics/2.2.20": { + "jar": "sha256-+2VKT1vFY2h1kXMSnfSRB60J3FtBcrAXda+z+nJXndU=", + "pom": "sha256-tdU2T1fSH/FBgiBei2lf1oZNnYqleApu3EIJWEBHwRU=" }, - "org/jetbrains/kotlin#kotlin-build-tools-api/2.2.0": { - "jar": "sha256-HezZmyKUN3QfNqAIxnip2PrjBxbodyFRMI9W9owQ844=", - "pom": "sha256-I6QFgttMPijHq6X8fpZHvI1e/d+dAFWp5CyaCJbVzjM=" + "org/jetbrains/kotlin#kotlin-build-tools-api/2.2.20": { + "jar": "sha256-/ZlHs6F2Iahvq9lTr4fzS9K7f4sm2uksHte+dHL0TDs=", + "pom": "sha256-AtR9SHfsMktJbZMTMkXNTTSLZSMDzyfvpj44ry+zzyo=" }, - "org/jetbrains/kotlin#kotlin-build-tools-impl/2.2.0": { - "jar": "sha256-SofzwCcvFyhdYOmGQ+whn1Ppta1aI/O8TFQ6hkT4bxc=", - "pom": "sha256-6DgEIFq2l7pyL0YiprG1GS70ejDL35ApdwFJQ3hQTv8=" + "org/jetbrains/kotlin#kotlin-build-tools-impl/2.2.20": { + "jar": "sha256-ZHiafwBWWSfy8/LRCfIwV009kwjtXW6Gv8qEPaZIfPc=", + "pom": "sha256-4vQ157rwHeL/kNCoc3r4+b+X/BUuWVuGp2C6ZOjmnfY=" }, - "org/jetbrains/kotlin#kotlin-compiler-embeddable/2.2.0": { - "jar": "sha256-svdD6luhL2ng815djUYGnXTI4oYQh1SKfg4Up4S8TPE=", - "pom": "sha256-FqFd0ZfPJBNJT3iMuWFE2aFGJnw9b38cFbejweBSNGo=" + "org/jetbrains/kotlin#kotlin-compiler-embeddable/2.2.20": { + "jar": "sha256-HGw/gQv+akGry8NLOi72OfHj9K7tOpU6Swl07qT0GIk=", + "pom": "sha256-Bf8CX3+wky+xH6HhzK71KPdgJ9lWaA+INdQ4VCdi4go=" }, - "org/jetbrains/kotlin#kotlin-compiler-runner/2.2.0": { - "jar": "sha256-kHBq6Gcd77oBQI3RxUG6MJEskHDN8d3aGMUero1nkwQ=", - "pom": "sha256-iQfZfcaLv0CgrmZ5RZAvDtwWYdvPdDuuDf2nw7mp1Mg=" + "org/jetbrains/kotlin#kotlin-compiler-runner/2.2.20": { + "jar": "sha256-+vloNPogBNeL2ORCD1go3j1CckJ9ZHR5gCTqbpz4XN0=", + "pom": "sha256-kbsVJI9OqUS2Mw8xA/HrVF0TvditSuxDe3R6WG57F6k=" }, - "org/jetbrains/kotlin#kotlin-daemon-client/2.2.0": { - "jar": "sha256-ISk9oBbkuhKhKKwm/ZIKdOi4f1dM+bxDxgo9LnZFp64=", - "pom": "sha256-HESKBvDKmGiVi+CHesnof8TgG8uTaHp8rBLTxNCd7uY=" + "org/jetbrains/kotlin#kotlin-daemon-client/2.2.20": { + "jar": "sha256-cO983NwwEHe5s7ohqp6cVadq+z/73+9KtWKmd9GN+kw=", + "pom": "sha256-ihNtDxPrmDpr40/x4WPJznmFXkuiF09Fy0KqpnVT91Q=" }, - "org/jetbrains/kotlin#kotlin-daemon-embeddable/2.2.0": { - "jar": "sha256-omzI4thhkZfMTRFb6ndm6aqODx54duoETuG58wVlRgE=", - "pom": "sha256-vSrk4skWBWVKilUn2nV/KyJ2WA0fXq6+q9M0OvjVxGc=" + "org/jetbrains/kotlin#kotlin-daemon-embeddable/2.2.20": { + "jar": "sha256-fFyM0vi+rdMoMjm7nKIZoMr6GvAmgrQHsYHhF5cY8vc=", + "pom": "sha256-9Yhmv7yYZ8bWR1ec/3DUKHeZctvd2N5MJXh5y0N0FIk=" }, - "org/jetbrains/kotlin#kotlin-gradle-plugin-annotations/2.2.0": { - "jar": "sha256-nRsH2uVVnD/JwtzhW9hcNtwedt/zd/ExJIm9ZmDBZUQ=", - "pom": "sha256-uvxt1O1fRcLhvCgXfCxkDie/t8WQEZ6GW7nkCZOLrEA=" + "org/jetbrains/kotlin#kotlin-gradle-plugin-annotations/2.2.20": { + "jar": "sha256-T8MqG+ZFynQE4hskRSCI+T6OmT6v/Sbza9Ndv3XGB1I=", + "pom": "sha256-sbbgEXktfKkv7K+/+sSlCPdvA5yfeuijI9GJKIgl9P4=" }, - "org/jetbrains/kotlin#kotlin-gradle-plugin-api/2.2.0": { - "jar": "sha256-u6au4h0YX3LfiW80jw6nsRdcEc1mNzeZid+JnLSMl+E=", - "module": "sha256-AmOgtdQFEGmmFjJYOK5CGmxNAG3JsVWnpCkmYIiAC6c=", - "pom": "sha256-iG8sRJ+dvmQc0kPxk3FNegQlNrMCrEHHLVYOWmZmDIg=" + "org/jetbrains/kotlin#kotlin-gradle-plugin-api/2.2.20": { + "jar": "sha256-dgfuXHoMpT+lku58VA7oCJYqe62P7p7Xj+Z0hBRj2V0=", + "module": "sha256-T8vx/H5Uzr/pC5peD7RpYv7Vwi03I52iNfXi37xtUog=", + "pom": "sha256-C5E9oNIYhCAmOpBLtApkD9s1pTWnLwWC/llkHjoMSi4=" }, - "org/jetbrains/kotlin#kotlin-gradle-plugin-api/2.2.0/gradle813": { - "jar": "sha256-u6au4h0YX3LfiW80jw6nsRdcEc1mNzeZid+JnLSMl+E=" + "org/jetbrains/kotlin#kotlin-gradle-plugin-api/2.2.20/gradle813": { + "jar": "sha256-dgfuXHoMpT+lku58VA7oCJYqe62P7p7Xj+Z0hBRj2V0=" }, - "org/jetbrains/kotlin#kotlin-gradle-plugin-idea-proto/2.2.0": { - "jar": "sha256-QY4hdjJ20qlGFr6ZCCanRdWdTF2WY48LviERDSxWSTs=", - "pom": "sha256-w5AgQre9S2t3oY8+4f6ol9N7vroloD0Uqe7//hWCXn0=" + "org/jetbrains/kotlin#kotlin-gradle-plugin-idea-proto/2.2.20": { + "jar": "sha256-dtFu5ZzeHmpwVWtdQEhu+fEcFkOodJPBnE3zMWU4N9k=", + "pom": "sha256-xRuhScfyk1nSWk7RIS4otpNOGkdW9VLAAHvxFE0onB0=" }, - "org/jetbrains/kotlin#kotlin-gradle-plugin-idea/2.2.0": { + "org/jetbrains/kotlin#kotlin-gradle-plugin-idea/2.2.20": { "jar": "sha256-7JacXwsJn4I4RiMiOPm9ZPPTdB5i6pBQrS5DL6150KA=", - "module": "sha256-r+m2AUJwBIVJuyAySjGdYkoFoLnmtBfmm2kHldfPDUs=", - "pom": "sha256-/ewxpJDZDsNuf5qj12xVDgqVq9Otg3lTvUn6E9pwFQ0=" + "module": "sha256-/IW7KUlsw/X5DHjHonejkw7xFg8IQ/iu1ke3TGejtJQ=", + "pom": "sha256-NkQjJURfF7rCH1OGu0k4+D53K4NOWGBT1BRbGnXZ4oU=" }, - "org/jetbrains/kotlin#kotlin-gradle-plugin-model/2.2.0": { - "jar": "sha256-Z6FKxCSqGWo0ax3Jn0QqbVc0WCrXt+epzN8oqc0rIJs=", - "module": "sha256-LC4w2DDqdpq6iX9PlvGeHoLY1qI/UzaJugn0GTMASYY=", - "pom": "sha256-bBzMOzcGY8KHIUn12briW/fpLqcVFepzxSlwlzbKMYk=" + "org/jetbrains/kotlin#kotlin-gradle-plugin-model/2.2.20": { + "jar": "sha256-U6MhUoJjIGAYUgSaC291OMqLtX/QnYeszRGLxo1D+OQ=", + "module": "sha256-EZdKVPSOCCXpdxML9u9qyZp/216yr53iZa9iTHY2g+U=", + "pom": "sha256-3uDjB7pub1GQPH5DPehSZ10eMOfyLPJGWxglVSZR7fs=" }, - "org/jetbrains/kotlin#kotlin-gradle-plugin/2.2.0": { - "module": "sha256-Y3w/yuVyOnQnAmwO2z3GeW3T/nmQ3CKG1PdJbt9dKYU=", - "pom": "sha256-E2FqOVx9n8Xc7iclKn9ocX2MaZTNEldL0dsxelGG1yE=" + "org/jetbrains/kotlin#kotlin-gradle-plugin/2.2.20": { + "module": "sha256-3CS/pH4EQigykOIfBpoFYUHR8IjWy57Kouqs4bR7a4w=", + "pom": "sha256-ucP9Lr1UhNYMX+DbeqEIeDA+7d/JP5Qvc1wHupmBh8w=" }, - "org/jetbrains/kotlin#kotlin-gradle-plugin/2.2.0/gradle813": { - "jar": "sha256-g1xNwYoHMl9XkwUMfy52XSNcWWdJVo5HtZe0Sdhnlo0=" + "org/jetbrains/kotlin#kotlin-gradle-plugin/2.2.20/gradle813": { + "jar": "sha256-XTJbXCxdS8i/RBRdJOtNS+sGDRPRHr5IiYk27VzRVk4=" }, - "org/jetbrains/kotlin#kotlin-gradle-plugins-bom/2.2.0": { - "module": "sha256-ur08SXopcd/GjlAlT/lwZak6Ixg+jto8OY+E9gzsErI=", - "pom": "sha256-2cRaL1cw6E6bhPpCxkoYdNy6ZmjyEsT+KXvqJdwAeHg=" + "org/jetbrains/kotlin#kotlin-gradle-plugins-bom/2.2.20": { + "module": "sha256-P7tFda43xKd2rrhtj/k8aqEbDPLadXScUyDiWFCwIp4=", + "pom": "sha256-PG1GnpFfuzCWrEy4wvRsedAnw8WQ5lihBoihVx61eNg=" }, - "org/jetbrains/kotlin#kotlin-klib-commonizer-api/2.2.0": { - "jar": "sha256-8FcCw6bq725+hCNTvmT1jTMHGX4Vp/F5gE08VQcZ7mk=", - "pom": "sha256-6R0DUNf9G+4pyP9OP9bxcZBS7P6V98wXZtnVwnD3iQk=" + "org/jetbrains/kotlin#kotlin-klib-commonizer-api/2.2.20": { + "jar": "sha256-OYK+RbEpMOIYGbWJ2zcHyOhM4le/Ks5/xi/I3zaPWz4=", + "pom": "sha256-CzAJtJQmv6F3qtlLSBCbjKVMck6i5sUGgmo6lc9ZEOE=" }, "org/jetbrains/kotlin#kotlin-metadata-jvm/2.2.20": { "jar": "sha256-hSTqyQ9+jg8TZog/LGyCDJO/ph3z12hXyNPoA89nMV0=", "pom": "sha256-e2qAtqLSZ2oEIvaWg4EyMVQlUfYbMgxochz7nh9ZCdA=" }, - "org/jetbrains/kotlin#kotlin-native-utils/2.2.0": { - "jar": "sha256-pOlvczba6EnznPK2NKU20CoqvfARS3M5Wty4yIGFDp4=", - "pom": "sha256-DafPXrsb0m4u/IkRhLzqM8tPKxwpNYEnr1MGHNataZY=" + "org/jetbrains/kotlin#kotlin-native-utils/2.2.20": { + "jar": "sha256-UBd3SirqQf+HEhNxFs1NgAP+mroSAMEG5lcw/rW7dEI=", + "pom": "sha256-U+++4FpxIhiQYPXuXspodjnOr+KfXlmW3phiopxnJyU=" }, "org/jetbrains/kotlin#kotlin-reflect/1.6.10": { "jar": "sha256-MnesECrheq0QpVq+x1/1aWyNEJeQOWQ0tJbnUIeFQgM=", "pom": "sha256-V5BVJCdKAK4CiqzMJyg/a8WSWpNKBGwcxdBsjuTW1ak=" }, - "org/jetbrains/kotlin#kotlin-reflect/2.2.0": { - "jar": "sha256-Iw2RwuQQ48/KOk3HPSVUVfYv9SqsCRozOXpuML3pG/c=", - "pom": "sha256-3u2DHvy2Y+TPPVEh5a55byAeN7gT0sfWB7Xx+Khv5S4=" + "org/jetbrains/kotlin#kotlin-reflect/2.2.20": { + "jar": "sha256-ggkIOkp8TkdtmEKweDCPqWqW8Hpr2Z8F81hu4TKJqyY=", + "pom": "sha256-TidHQGbbg/uixZB0KJunEr6MhRV83guQUCmkRcJ19bo=" }, - "org/jetbrains/kotlin#kotlin-sam-with-receiver-compiler-plugin-embeddable/2.2.0": { - "jar": "sha256-nLzhQvhBilqrEZuD7Css9EMrWEgXAh2agVONB+o1RjE=", - "pom": "sha256-C0K3d+h9Gx9pJ1VCnsAivFYv2Mbm1T9HgbFajVzSNqo=" + "org/jetbrains/kotlin#kotlin-sam-with-receiver-compiler-plugin-embeddable/2.2.20": { + "jar": "sha256-WRNzsEtDtom0HgvIYqlslEx+DDHSMIH0aooe48a6Edc=", + "pom": "sha256-iSompWD3bch9NVEw9Akk2ZtL1gB212R0Ff6YkYjSLA4=" }, - "org/jetbrains/kotlin#kotlin-sam-with-receiver/2.2.0": { - "module": "sha256-3uEJzwqU5jg9Kg7ur6nJJod92jgW1mhHQAqKFRdONzU=", - "pom": "sha256-iqdjHKBnUr+DOPHNP4Uwf5oovoZu9xsyOUMM4XWukVo=" + "org/jetbrains/kotlin#kotlin-sam-with-receiver/2.2.20": { + "module": "sha256-c7Eee8xPZZeWcN8Vx1aADHOiHaH9EJL56sWfON+cVjE=", + "pom": "sha256-LhNnvGXeGLQPpn2H9+JGXj4dYUviuLCdOQZRZ8JwK+M=" }, - "org/jetbrains/kotlin#kotlin-sam-with-receiver/2.2.0/gradle813": { - "jar": "sha256-enrIy8I3Z8g9uGk9v10g6RN7Qz2zBFbbAvK2CkmoSyc=" + "org/jetbrains/kotlin#kotlin-sam-with-receiver/2.2.20/gradle813": { + "jar": "sha256-YZ6b4NCK9+W0TRIkJQ0jXiLvimiKzISPO4kC+mZAQws=" }, - "org/jetbrains/kotlin#kotlin-script-runtime/2.2.0": { - "jar": "sha256-Ttl/0eDJux0JSO1eY8yRRWMTpZUYKVuSssFRSu9VYVA=", - "pom": "sha256-5QdIv0Z09lRgPnsbuDBjTsmevZwzDeukytzuwHZ8u1Y=" + "org/jetbrains/kotlin#kotlin-script-runtime/2.2.20": { + "jar": "sha256-XIvV3Xrh6i7rJ3j9vqoZpWIYSXX2yrigu2d55BkHMa4=", + "pom": "sha256-IpOhQenagKfpjYXtKkkuldsMAWW86rC3Klzp4tkrCAc=" }, - "org/jetbrains/kotlin#kotlin-scripting-common/2.2.0": { - "jar": "sha256-fJrISZ+pGyAep4NlN8Yl3VKoJUnlfms/F1zAx56atgQ=", - "pom": "sha256-1M1vjH2tiOZ9iVzT23qNTH3I6N3Y6WeOH1619gHZsO0=" + "org/jetbrains/kotlin#kotlin-scripting-common/2.2.20": { + "jar": "sha256-+5n/fwzZUtpo1UjT89ZErlB4sLlvybrwZewUZqKTuAU=", + "pom": "sha256-iTjGIFKXW7uW3OotqaeNS2sk2vLwnTWMGnqEHxaMtzo=" }, - "org/jetbrains/kotlin#kotlin-scripting-compiler-embeddable/2.2.0": { - "jar": "sha256-ksfW7HxfBdisAcN+dHrGd9iS6ZusDeXlFmg7jzZAdys=", - "pom": "sha256-VjapUSxI/NqPgm+ypKwXPCnW6zV0ZHE9VNJaTUbsbBM=" + "org/jetbrains/kotlin#kotlin-scripting-compiler-embeddable/2.2.20": { + "jar": "sha256-2GJhDAAzQuUIjKIcRAQix9ijcA4ZnWA/ehAnjESIR2E=", + "pom": "sha256-PW9vFZH6P3r14jFlxowu4BclFYZFQ09eMBdF5kfHVhE=" }, - "org/jetbrains/kotlin#kotlin-scripting-compiler-impl-embeddable/2.2.0": { - "jar": "sha256-HSbL3a7rb/1FgIU5bs6gsID8Io/gBtz4MD2ldxHzN0U=", - "pom": "sha256-oeMpM4wq8LRweB0ECGnpsZdS+KTesi9D9qiR68dPH4I=" + "org/jetbrains/kotlin#kotlin-scripting-compiler-impl-embeddable/2.2.20": { + "jar": "sha256-e3kSNZL//r81xhag/xBDMscc3mN6ZX4JrbXfbD+cA84=", + "pom": "sha256-+l+wJ+4qSbPb/zh3VBtC+3CuzMN7oC4dOthipcZyVLc=" }, - "org/jetbrains/kotlin#kotlin-scripting-jvm/2.2.0": { - "jar": "sha256-YKjHQtYfRPIxH73IqGt2fRcboJ2XvnLWukUNN/fj/b8=", - "pom": "sha256-dii0nV53BennadESYAZtmmlXPW2Av4Iw0FRvWo54yJ4=" + "org/jetbrains/kotlin#kotlin-scripting-jvm/2.2.20": { + "jar": "sha256-qR+5BJY0oyum09LpGgy5mD4KpOccDC4bKDg4qOBhYx8=", + "pom": "sha256-0df8RWSBne6v6OvdcfbyGBf/xVjr0U9HpW6NyTaW3Rk=" }, "org/jetbrains/kotlin#kotlin-stdlib-jdk7/1.8.21": { "jar": "sha256-M9FI2w4R3r0NkGd9KCQrztkH+cd3MAAP1ZeGcIkDnYY=", @@ -976,26 +976,26 @@ "jar": "sha256-FcjArLMRSDwGjRaXUBllR0tw39gKx5WA7KOgPPUeSh0=", "pom": "sha256-MQ1tXGVBPjEQuUAr2AdfyuP0vlGdH9kHMTahj+cnvFc=" }, - "org/jetbrains/kotlin#kotlin-stdlib/2.2.0": { - "jar": "sha256-ZdEthaO4ZcFg25FHhRcSpksQ2t1osi7qIqlb+KhnDco=", - "module": "sha256-pbmP3NnbAX1ULhlyJdzuGNZYpW3h2yzEHhMZbWsXaaQ=", - "pom": "sha256-jDyCEAfBNBFVhzm589U4LrgVUds4lc/7iVYeVsD03BY=" + "org/jetbrains/kotlin#kotlin-stdlib/2.2.20": { + "jar": "sha256-iDbM/9NYX63amQEkSyDUKQHS881YEFjYQ04v+rzzo+c=", + "module": "sha256-yRj1IU0CGnLjdn8nVul9EDpSbgTxQj2jZj79+1hH25U=", + "pom": "sha256-SosIbmQxvPYjY39Ssv8ZLhrbkTg4dC5cDupwqN7kKcQ=" }, - "org/jetbrains/kotlin#kotlin-tooling-core/2.2.0": { + "org/jetbrains/kotlin#kotlin-tooling-core/2.2.20": { "jar": "sha256-dAFOxPPveM59p+Pmlk8sUmoxIdXFj++MopeeXzRFgvQ=", - "pom": "sha256-Fiq+zmN9Egvzs1mfJIETV3zey68Q1bInq3cFLmYykpM=" + "pom": "sha256-jvep2QYs59w/xlVxXdAoqZRLeElhPgEYR8XWs7mSgXE=" }, - "org/jetbrains/kotlin#kotlin-util-io/2.2.0": { - "jar": "sha256-h//zwBlwqqkBGr3lZbtSoXmqbckDjFh4koHtK2jVji0=", - "pom": "sha256-NcfaTe0E3/GCIeDzgPo/NhIOvq2hOYOmEQtGWWaKbr0=" + "org/jetbrains/kotlin#kotlin-util-io/2.2.20": { + "jar": "sha256-1DGva+puLcmInE/iawc84VfxEchgj+laGL/gi4F8/3Q=", + "pom": "sha256-xqXQGEjNBAz8j3uuYjLXktcFwpOi2nJmrmJszbNdagM=" }, - "org/jetbrains/kotlin#kotlin-util-klib-metadata/2.2.0": { - "jar": "sha256-nOOw3gU8uf8HoPcXyhQvKQp05NGdkzLbImq+D+thyB4=", - "pom": "sha256-XVJ2wbYor7xCBZ80CoTe/Uv7XroYJm3zdDYH5XftX4c=" + "org/jetbrains/kotlin#kotlin-util-klib-metadata/2.2.20": { + "jar": "sha256-vuSQHKU6WiHA22RZAdKwcK/2gkAkF91XiODjWTZFcTs=", + "pom": "sha256-vtAGUSIGX65328DEb/xBRqaFy7GLijApq9XaO/qhECc=" }, - "org/jetbrains/kotlin#kotlin-util-klib/2.2.0": { - "jar": "sha256-FPB+vZrfvk6F+06/MSJSULL8P1Qo7OQ31O1j7D+prE0=", - "pom": "sha256-NU7YchvXXwfcCyQbiFg+7oLCTZIdN+lrctmNpi1ISEo=" + "org/jetbrains/kotlin#kotlin-util-klib/2.2.20": { + "jar": "sha256-7XyAlrK75HetF8MXjeuoyDr1MourNr/iEJEL1bQZI0w=", + "pom": "sha256-2mwiR3qvQt2hbYWa2unj7Yq8khzLp/9RYTTMi9NZqpI=" }, "org/jetbrains/kotlinx#kotlinx-coroutines-bom/1.8.0": { "pom": "sha256-Ejnp2+E5fNWXE0KVayURvDrOe2QYQuQ3KgiNz6i5rVU=" From 0766dc951dd33b7a979c4eb71b508bd86a55cbe0 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 20 Dec 2025 14:14:47 +0000 Subject: [PATCH 11/61] matcha-rss-digest: 0.8.0 -> 0.9.0 --- pkgs/by-name/ma/matcha-rss-digest/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ma/matcha-rss-digest/package.nix b/pkgs/by-name/ma/matcha-rss-digest/package.nix index b9fdfbdbc1fd..442bc24bef82 100644 --- a/pkgs/by-name/ma/matcha-rss-digest/package.nix +++ b/pkgs/by-name/ma/matcha-rss-digest/package.nix @@ -6,13 +6,13 @@ buildGoModule rec { pname = "matcha-rss-digest"; - version = "0.8.0"; + version = "0.9.0"; src = fetchFromGitHub { owner = "piqoni"; repo = "matcha"; rev = "v${version}"; - hash = "sha256-AhXr9T2pvCuTTSU8vHhHELyNiU5EC4KR0fpOGrY02Zo="; + hash = "sha256-ezwZmJVJjbrrWJAsZ3+CUZ7K4WpA1HLKL9V+kTZTfj8="; }; vendorHash = "sha256-CURFy92K4aNF9xC8ik6RDadRAvlw8p3Xc+gWE2un6cc="; From c1b327506d5f00586424934bc8eba5d441f4f37c Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 20 Dec 2025 15:21:21 +0000 Subject: [PATCH 12/61] ddns-go: 6.14.0 -> 6.14.1 --- pkgs/by-name/dd/ddns-go/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/dd/ddns-go/package.nix b/pkgs/by-name/dd/ddns-go/package.nix index 8ebbd62fbbdc..503ddceaa275 100644 --- a/pkgs/by-name/dd/ddns-go/package.nix +++ b/pkgs/by-name/dd/ddns-go/package.nix @@ -6,16 +6,16 @@ buildGoModule rec { pname = "ddns-go"; - version = "6.14.0"; + version = "6.14.1"; src = fetchFromGitHub { owner = "jeessy2"; repo = "ddns-go"; rev = "v${version}"; - hash = "sha256-jx9Mvb40lDWxZp47fbHs0M+f8VQCBnzHb0bQiLRby1M="; + hash = "sha256-c+V+EgJvElL/Ga0z6420E50c59cmjn/IlkfyeATLDFs="; }; - vendorHash = "sha256-CtbbyI7sL1Ej4WDWkEZoRFngiwWpzSwvAKAWQwiMD1E="; + vendorHash = "sha256-vpdT1apjuMvM6MmQfx1XBQtQznK7oxUjIdkgOXjUF6g="; ldflags = [ "-X main.version=${version}" From 7605fdf9ca289790190ca326de61b5194f5840e0 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 21 Dec 2025 01:04:41 +0000 Subject: [PATCH 13/61] python3Packages.dm-haiku: 0.0.15 -> 0.0.16 --- pkgs/development/python-modules/dm-haiku/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/dm-haiku/default.nix b/pkgs/development/python-modules/dm-haiku/default.nix index 51745dfdc89a..831516ec78cc 100644 --- a/pkgs/development/python-modules/dm-haiku/default.nix +++ b/pkgs/development/python-modules/dm-haiku/default.nix @@ -36,14 +36,14 @@ let dm-haiku = buildPythonPackage rec { pname = "dm-haiku"; - version = "0.0.15"; + version = "0.0.16"; pyproject = true; src = fetchFromGitHub { owner = "deepmind"; repo = "dm-haiku"; tag = "v${version}"; - hash = "sha256-phJ0f+effHQzuAVtPBR0bY3C0p//LBY7k1ci4mXBGfU="; + hash = "sha256-XugzzHapnqXD8w17k6HaNeqWcxRe49r7OIb8v5LI2NM="; }; patches = [ From 24758f9f348e9bced8fd521c311008c4c43e9107 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 21 Dec 2025 03:08:08 +0000 Subject: [PATCH 14/61] edl: 3.52.1-unstable-2025-09-10 -> 3.52.1-unstable-2025-12-17 --- pkgs/by-name/ed/edl/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ed/edl/package.nix b/pkgs/by-name/ed/edl/package.nix index 125d72eed9d2..0f3dbe007739 100644 --- a/pkgs/by-name/ed/edl/package.nix +++ b/pkgs/by-name/ed/edl/package.nix @@ -8,15 +8,15 @@ python3Packages.buildPythonPackage { pname = "edl"; - version = "3.52.1-unstable-2025-09-10"; + version = "3.52.1-unstable-2025-12-17"; format = "setuptools"; src = fetchFromGitHub { owner = "bkerler"; repo = "edl"; - rev = "334028cd887a2960867750c403dbcad9cbe8c46b"; + rev = "dffc6833ad51fb7e561c7c2bd26057edd18d9f7a"; fetchSubmodules = true; - hash = "sha256-OYrncVbCJkeONeztfj7cB3QW1Q0tlF1b/LeuMqKiblk="; + hash = "sha256-wdcA+pw7kUA7kSWIv6Wi+vmFFWGuC5LLds1oeEeGpOE="; }; propagatedBuildInputs = with python3Packages; [ From 688323f11cd357609200543dbab85aeb37be43ec Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 21 Dec 2025 18:44:00 +0000 Subject: [PATCH 15/61] pspg: 5.8.13 -> 5.8.14 --- pkgs/by-name/ps/pspg/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ps/pspg/package.nix b/pkgs/by-name/ps/pspg/package.nix index f4919a65f757..0c54e1bb80f0 100644 --- a/pkgs/by-name/ps/pspg/package.nix +++ b/pkgs/by-name/ps/pspg/package.nix @@ -12,13 +12,13 @@ stdenv.mkDerivation rec { pname = "pspg"; - version = "5.8.13"; + version = "5.8.14"; src = fetchFromGitHub { owner = "okbob"; repo = "pspg"; rev = version; - sha256 = "sha256-swsVxhvfLfK8QQfsL68f/bL3OThOZiqM/ceD7kjOghU="; + sha256 = "sha256-DZsMZZO5NMutlzLT+wwtPNdnzAnka32ZMqgMvEuw9ag="; }; nativeBuildInputs = [ From 1eab653d861bbf992aa7cda2f31f4510a4135742 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 21 Dec 2025 19:20:44 +0000 Subject: [PATCH 16/61] onefetch: 2.25.0 -> 2.26.1 --- pkgs/by-name/on/onefetch/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/on/onefetch/package.nix b/pkgs/by-name/on/onefetch/package.nix index 4a9bb6ffd4ff..e4fc8fc57f1a 100644 --- a/pkgs/by-name/on/onefetch/package.nix +++ b/pkgs/by-name/on/onefetch/package.nix @@ -16,16 +16,16 @@ let in rustPlatform.buildRustPackage rec { pname = "onefetch"; - version = "2.25.0"; + version = "2.26.1"; src = fetchFromGitHub { owner = "o2sh"; repo = "onefetch"; rev = version; - hash = "sha256-ZaaSuHWkhJx0q1CBAiRhwoLeeyyoAj6/vP3AJwybjAo="; + hash = "sha256-JT7iQRKOK/2Zh/IDMv1FM1szITeBaaMy+WuXHjpPkfY="; }; - cargoHash = "sha256-56Net4nNRndePhdsQPbmqiPHpOUGMmnQt6BuplQpvSU="; + cargoHash = "sha256-VBbiOA/+SPcIvmhNQ71gUBOIWEWV1A86rljBfdAfhZM="; cargoPatches = [ # enable pkg-config feature of zstd From ae86f891ce3b145903b0b1e8493cd58a6bd7b089 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 21 Dec 2025 22:36:19 +0000 Subject: [PATCH 17/61] diylc: 5.6.0 -> 5.7.0 --- pkgs/by-name/di/diylc/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/di/diylc/package.nix b/pkgs/by-name/di/diylc/package.nix index 09d87a00cc9a..46960527adc4 100644 --- a/pkgs/by-name/di/diylc/package.nix +++ b/pkgs/by-name/di/diylc/package.nix @@ -11,11 +11,11 @@ stdenv.mkDerivation (finalAttrs: { pname = "diylc"; - version = "5.6.0"; + version = "5.7.0"; src = fetchurl { url = "https://github.com/bancika/diy-layout-creator/releases/download/v${finalAttrs.version}/diylc-${finalAttrs.version}-universal.zip"; - hash = "sha256-y47md9kaiqpmx+ZNTm5PCHiNMMR9zjsvjc2xpVD6FAk="; + hash = "sha256-0402HeOQrLJSor4bERyAkIO65kUYMLq2wo1ZgKLcMn4="; }; nativeBuildInputs = [ From dff6dc026027595ce7daff2e635828466977cab0 Mon Sep 17 00:00:00 2001 From: Luz Date: Mon, 22 Dec 2025 00:19:11 +0100 Subject: [PATCH 18/61] hexdino: 0.1.3 -> 0.1.4 --- pkgs/by-name/he/hexdino/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/he/hexdino/package.nix b/pkgs/by-name/he/hexdino/package.nix index 5b87f563b56e..63e3feebf03f 100644 --- a/pkgs/by-name/he/hexdino/package.nix +++ b/pkgs/by-name/he/hexdino/package.nix @@ -6,16 +6,16 @@ rustPlatform.buildRustPackage rec { pname = "hexdino"; - version = "0.1.3"; + version = "0.1.4"; src = fetchFromGitHub { owner = "Luz"; repo = "hexdino"; rev = version; - hash = "sha256-glbyftCJiP0/5trW7DOcVCU2q4ZH3zFK96eyGuYR8eY="; + hash = "sha256-M1lUm8rJj9c+9MgU7AJvk/ZVuTC1QYPsHRQxCQTc3WI="; }; - cargoHash = "sha256-NfVtNoTDGx3MGOe+bUOCgjSs8ZTfxMSCTp09sXOfUPs="; + cargoHash = "sha256-IZhQ80iDO6l1FLAbq2l7QLpjoenkri3wBdQ6Mnz+BOI="; meta = with lib; { description = "Hex editor with vim like keybindings written in Rust"; From 65dfd866769af40bf31b0ce673c08743bd5eaf92 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 22 Dec 2025 06:17:36 +0000 Subject: [PATCH 19/61] dependabot-cli: 1.79.0 -> 1.80.0 --- pkgs/by-name/de/dependabot-cli/package.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgs/by-name/de/dependabot-cli/package.nix b/pkgs/by-name/de/dependabot-cli/package.nix index 682aa82999d8..6991ffd251f2 100644 --- a/pkgs/by-name/de/dependabot-cli/package.nix +++ b/pkgs/by-name/de/dependabot-cli/package.nix @@ -12,20 +12,20 @@ }: let pname = "dependabot-cli"; - version = "1.79.0"; + version = "1.80.0"; # `tag` is what `dependabot` uses to find the relevant docker images. tag = "nixpkgs-dependabot-cli-${version}"; # Get these hashes from # nix run nixpkgs#nix-prefetch-docker -- --image-name ghcr.io/github/dependabot-update-job-proxy/dependabot-update-job-proxy --image-tag latest --final-image-name dependabot-update-job-proxy --final-image-tag ${tag} - updateJobProxy.imageDigest = "sha256:e3361d9ba33ffcb1c72b2ac9feba766f0e941b0bf2b692029948f60262708ffa"; - updateJobProxy.hash = "sha256-1TPyyD2a4IN9UoAEZJCHFiOhsP/vIowuy0WfgSmRHpI="; + updateJobProxy.imageDigest = "sha256:3a7868b09318bef45224e475c3a018deba34f65f451f3ddd5b852b440c65fb83"; + updateJobProxy.hash = "sha256-PVFo/PT7l3iR5FTt+jDrGVupc6zPoDpiw9Pxqp3yprU="; # Get these hashes from # nix run nixpkgs#nix-prefetch-docker -- --image-name ghcr.io/dependabot/dependabot-updater-github-actions --image-tag latest --final-image-name dependabot-updater-github-actions --final-image-tag ${tag} - updaterGitHubActions.imageDigest = "sha256:01cad8bab547d5041cf11cb2f0287f091695d5971d3f7fb93b97817727093a2c"; - updaterGitHubActions.hash = "sha256-whFMv7MeyKeFmCDaoG6CxxENcHDC4HNmuNuA3AQTJJI="; + updaterGitHubActions.imageDigest = "sha256:a791d0ef463a059dc371ef62c6d1ac341a7e1197ed871a0a6451371a8710cd0e"; + updaterGitHubActions.hash = "sha256-uNqif7HesnXeiGOrc4sC2fgSAHNFJwVwrA3iIv8fVYc="; in buildGoModule { inherit pname version; @@ -34,7 +34,7 @@ buildGoModule { owner = "dependabot"; repo = "cli"; rev = "v${version}"; - hash = "sha256-JHuqgurzEO5XA7OHP32X9DcFpZbjbn/h5fZJXCUmOdE="; + hash = "sha256-5SD4VIa11r2P9YbURby6Sgi58lv03UB9X5UDOZxjVLQ="; }; vendorHash = "sha256-dD48OKpuGAJAro7qV4tqpf/uENV2X1VQ2kUvAuJLXc0="; From 1ccc2facd61a812cc77044380a64dc21e4a02fe3 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Mon, 22 Dec 2025 06:37:33 +0000 Subject: [PATCH 20/61] cargo-leptos: 0.3.1 -> 0.3.2 --- pkgs/by-name/ca/cargo-leptos/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ca/cargo-leptos/package.nix b/pkgs/by-name/ca/cargo-leptos/package.nix index fc39e5873694..04d00cb690ae 100644 --- a/pkgs/by-name/ca/cargo-leptos/package.nix +++ b/pkgs/by-name/ca/cargo-leptos/package.nix @@ -8,16 +8,16 @@ }: rustPlatform.buildRustPackage rec { pname = "cargo-leptos"; - version = "0.3.1"; + version = "0.3.2"; src = fetchFromGitHub { owner = "leptos-rs"; repo = "cargo-leptos"; rev = "v${version}"; - hash = "sha256-vQZpw0hnBQRXmt4KsThcVwLtRwSpbjaGfojCIgfOn7E="; + hash = "sha256-aH7b9Dbz4vbh9X4RuhFdmu2U1sgGgbLUZxmwhVxW248="; }; - cargoHash = "sha256-WlzkTZHWDkE2rhH+fi8+aa/mkjBEVwQK8cTxd2JUuZ8="; + cargoHash = "sha256-P+mavyLehmujVKBRLmK80T/o7Lu8rl8E0LzV23c6fJA="; nativeBuildInputs = [ pkg-config ]; From 934dcb000a48c21dc91e7e86e8777311ee152e99 Mon Sep 17 00:00:00 2001 From: r-vdp Date: Mon, 22 Dec 2025 20:23:04 +0200 Subject: [PATCH 21/61] nixos/prometheus-exporters: convert the VM tests to use runTest This dramatically speeds up the eval time of the whole test --- nixos/tests/all-tests.nix | 5 +- nixos/tests/prometheus-exporters.nix | 3510 +++++++++++++------------- 2 files changed, 1819 insertions(+), 1696 deletions(-) diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 628e8fd95cdd..9a2092799a8b 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -1291,7 +1291,10 @@ in privatebin = runTest ./privatebin.nix; privoxy = runTest ./privoxy.nix; prometheus = import ./prometheus { inherit runTest; }; - prometheus-exporters = handleTest ./prometheus-exporters.nix { }; + prometheus-exporters = import ./prometheus-exporters.nix { + inherit runTest; + inherit (pkgs) lib; + }; prosody = runTest ./xmpp/prosody.nix; prosody-mysql = handleTest ./xmpp/prosody-mysql.nix { }; prowlarr = runTest ./prowlarr.nix; diff --git a/nixos/tests/prometheus-exporters.nix b/nixos/tests/prometheus-exporters.nix index 8f23817e508d..7d917e3bbc32 100644 --- a/nixos/tests/prometheus-exporters.nix +++ b/nixos/tests/prometheus-exporters.nix @@ -1,23 +1,9 @@ { - system ? builtins.currentSystem, - config ? { }, - pkgs ? import ../.. { inherit system config; }, + runTest, + lib, }: let - inherit (import ../lib/testing-python.nix { inherit system pkgs; }) makeTest; - inherit (pkgs.lib) - concatStringsSep - maintainers - mapAttrs - mkMerge - removeSuffix - replaceStrings - singleton - splitString - makeBinPath - ; - /* * The attrset `exporterTests` contains one attribute * for each exporter test. Each of these attributes @@ -69,319 +55,346 @@ let */ exporterTests = { - apcupsd = { - exporterConfig = { - enable = true; - }; - metricProvider = { - services.apcupsd.enable = true; - }; - exporterTest = '' - wait_for_unit("apcupsd.service") - wait_for_open_port(3551) - wait_for_unit("prometheus-apcupsd-exporter.service") - wait_for_open_port(9162) - succeed("curl -sSf http://localhost:9162/metrics | grep 'apcupsd_info'") - ''; - }; - - artifactory = { - exporterConfig = { - enable = true; - artiUsername = "artifactory-username"; - artiPassword = "artifactory-password"; - }; - exporterTest = '' - wait_for_unit("prometheus-artifactory-exporter.service") - wait_for_open_port(9531) - succeed( - "curl -sSf http://localhost:9531/metrics | grep 'artifactory_up'" - ) - ''; - }; - - bind = { - exporterConfig = { - enable = true; - }; - metricProvider = { - services.bind.enable = true; - services.bind.extraConfig = '' - statistics-channels { - inet 127.0.0.1 port 8053 allow { localhost; }; - }; + apcupsd = + { ... }: + { + exporterConfig = { + enable = true; + }; + metricProvider = { + services.apcupsd.enable = true; + }; + exporterTest = '' + wait_for_unit("apcupsd.service") + wait_for_open_port(3551) + wait_for_unit("prometheus-apcupsd-exporter.service") + wait_for_open_port(9162) + succeed("curl -sSf http://localhost:9162/metrics | grep 'apcupsd_info'") ''; }; - exporterTest = '' - wait_for_unit("prometheus-bind-exporter.service") - wait_for_open_port(9119) - succeed( - "curl -sSf http://localhost:9119/metrics | grep 'bind_query_recursions_total 0'" - ) - ''; - }; - bird = { - exporterConfig = { - enable = true; - }; - metricProvider = { - services.bird.enable = true; - services.bird.config = '' - router id 127.0.0.1; - - protocol kernel MyObviousTestString { - ipv4 { - import all; - export none; - }; - } - - protocol device { - } + artifactory = + { ... }: + { + exporterConfig = { + enable = true; + artiUsername = "artifactory-username"; + artiPassword = "artifactory-password"; + }; + exporterTest = '' + wait_for_unit("prometheus-artifactory-exporter.service") + wait_for_open_port(9531) + succeed( + "curl -sSf http://localhost:9531/metrics | grep 'artifactory_up'" + ) ''; }; - exporterTest = '' - wait_for_unit("prometheus-bird-exporter.service") - wait_for_open_port(9324) - wait_until_succeeds( - "curl -sSf http://localhost:9324/metrics | grep 'MyObviousTestString'" - ) - ''; - }; - bitcoin = { - exporterConfig = { - enable = true; - rpcUser = "bitcoinrpc"; - rpcPasswordFile = pkgs.writeText "password" "hunter2"; - }; - metricProvider = { - services.bitcoind.default.enable = true; - services.bitcoind.default.rpc.users.bitcoinrpc.passwordHMAC = - "e8fe33f797e698ac258c16c8d7aadfbe$872bdb8f4d787367c26bcfd75e6c23c4f19d44a69f5d1ad329e5adf3f82710f7"; - }; - exporterTest = '' - wait_for_unit("prometheus-bitcoin-exporter.service") - wait_for_unit("bitcoind-default.service") - wait_for_open_port(9332) - succeed("curl -sSf http://localhost:9332/metrics | grep '^bitcoin_blocks '") - ''; - }; - - blackbox = { - exporterConfig = { - enable = true; - configFile = pkgs.writeText "config.yml" ( - builtins.toJSON { - modules.icmp_v6 = { - prober = "icmp"; - icmp.preferred_ip_protocol = "ip6"; + bind = + { ... }: + { + exporterConfig = { + enable = true; + }; + metricProvider = { + services.bind.enable = true; + services.bind.extraConfig = '' + statistics-channels { + inet 127.0.0.1 port 8053 allow { localhost; }; }; - } - ); - }; - exporterTest = '' - wait_for_unit("prometheus-blackbox-exporter.service") - wait_for_open_port(9115) - succeed( - "curl -sSf 'http://localhost:9115/probe?target=localhost&module=icmp_v6' | grep 'probe_success 1'" - ) - ''; - }; - - borgmatic = { - exporterConfig = { - enable = true; - user = "root"; - }; - metricProvider = { - services.borgmatic.enable = true; - services.borgmatic.settings.source_directories = [ "/home" ]; - services.borgmatic.settings.repositories = [ - { - label = "local"; - path = "/var/backup"; - } - ]; - services.borgmatic.settings.keep_daily = 10; - }; - exporterTest = '' - succeed("borgmatic rcreate -e none") - succeed("borgmatic") - wait_for_unit("prometheus-borgmatic-exporter.service") - wait_for_open_port(9996) - succeed("curl -sSf localhost:9996/metrics | grep 'borg_total_backups{repository=\"/var/backup\"} 1'") - ''; - }; - - collectd = { - exporterConfig = { - enable = true; - extraFlags = [ "--web.collectd-push-path /collectd" ]; - }; - exporterTest = - let - postData = replaceStrings [ "\n" ] [ "" ] '' - [{ - "values":[23], - "dstypes":["gauge"], - "type":"gauge", - "interval":1000, - "host":"testhost", - "plugin":"testplugin", - "time":DATE - }] ''; - in - '' - wait_for_unit("prometheus-collectd-exporter.service") - wait_for_open_port(9103) + }; + exporterTest = '' + wait_for_unit("prometheus-bind-exporter.service") + wait_for_open_port(9119) succeed( - 'echo \'${postData}\'> /tmp/data.json' - ) - succeed('sed -i -e "s DATE $(date +%s) " /tmp/data.json') - succeed( - "curl -sSfH 'Content-Type: application/json' -X POST --data @/tmp/data.json localhost:9103/collectd" - ) - succeed( - "curl -sSf localhost:9103/metrics | grep 'collectd_testplugin_gauge{instance=\"testhost\"} 23'" + "curl -sSf http://localhost:9119/metrics | grep 'bind_query_recursions_total 0'" ) ''; - }; - - deluge = { - exporterConfig = { - enable = true; - port = 1234; - listenAddress = "127.0.0.1"; - - delugeUser = "user"; - delugePort = 2345; - delugePasswordFile = pkgs.writeText "password" "weak_password"; }; - metricProvider = { - services.deluge.enable = true; - services.deluge.declarative = true; - services.deluge.config.daemon_port = 2345; - services.deluge.authFile = pkgs.writeText "authFile" '' - localclient:abcdef:10 - user:weak_password:10 + + bird = + { ... }: + { + exporterConfig = { + enable = true; + }; + metricProvider = { + services.bird.enable = true; + services.bird.config = '' + router id 127.0.0.1; + + protocol kernel MyObviousTestString { + ipv4 { + import all; + export none; + }; + } + + protocol device { + } + ''; + }; + exporterTest = '' + wait_for_unit("prometheus-bird-exporter.service") + wait_for_open_port(9324) + wait_until_succeeds( + "curl -sSf http://localhost:9324/metrics | grep 'MyObviousTestString'" + ) ''; }; - exporterTest = '' - wait_for_unit("deluged.service") - wait_for_open_port(2345) - wait_for_unit("prometheus-deluge-exporter.service") - wait_for_open_port(1234) - succeed("curl -sSf http://localhost:1234 | grep 'deluge_torrents'") - ''; - }; - dnsmasq = { - exporterConfig = { - enable = true; - leasesPath = "/var/lib/dnsmasq/dnsmasq.leases"; + bitcoin = + { pkgs, ... }: + { + exporterConfig = { + enable = true; + rpcUser = "bitcoinrpc"; + rpcPasswordFile = pkgs.writeText "password" "hunter2"; + }; + metricProvider = { + services.bitcoind.default.enable = true; + services.bitcoind.default.rpc.users.bitcoinrpc.passwordHMAC = + "e8fe33f797e698ac258c16c8d7aadfbe$872bdb8f4d787367c26bcfd75e6c23c4f19d44a69f5d1ad329e5adf3f82710f7"; + }; + exporterTest = '' + wait_for_unit("prometheus-bitcoin-exporter.service") + wait_for_unit("bitcoind-default.service") + wait_for_open_port(9332) + succeed("curl -sSf http://localhost:9332/metrics | grep '^bitcoin_blocks '") + ''; }; - metricProvider = { - services.dnsmasq.enable = true; - }; - exporterTest = '' - wait_for_unit("dnsmasq.service") - wait_for_open_port(53) - wait_for_file("/var/lib/dnsmasq/dnsmasq.leases") - wait_for_unit("prometheus-dnsmasq-exporter.service") - wait_for_open_port(9153) - succeed("curl -sSf http://localhost:9153/metrics | grep 'dnsmasq_leases 0'") - ''; - }; - dnssec = { - exporterConfig = { - enable = true; - configuration = { - records = [ + blackbox = + { pkgs, ... }: + { + exporterConfig = { + enable = true; + configFile = pkgs.writeText "config.yml" ( + builtins.toJSON { + modules.icmp_v6 = { + prober = "icmp"; + icmp.preferred_ip_protocol = "ip6"; + }; + } + ); + }; + exporterTest = '' + wait_for_unit("prometheus-blackbox-exporter.service") + wait_for_open_port(9115) + succeed( + "curl -sSf 'http://localhost:9115/probe?target=localhost&module=icmp_v6' | grep 'probe_success 1'" + ) + ''; + }; + + borgmatic = + { ... }: + { + exporterConfig = { + enable = true; + user = "root"; + }; + metricProvider = { + services.borgmatic.enable = true; + services.borgmatic.settings.source_directories = [ "/home" ]; + services.borgmatic.settings.repositories = [ { - zone = "example.com"; - record = "@"; - type = "SOA"; + label = "local"; + path = "/var/backup"; } ]; + services.borgmatic.settings.keep_daily = 10; }; - resolvers = [ "127.0.0.1:53" ]; + exporterTest = '' + succeed("borgmatic rcreate -e none") + succeed("borgmatic") + wait_for_unit("prometheus-borgmatic-exporter.service") + wait_for_open_port(9996) + succeed("curl -sSf localhost:9996/metrics | grep 'borg_total_backups{repository=\"/var/backup\"} 1'") + ''; }; - metricProvider = { - services.knot = { + + collectd = + { lib, ... }: + { + exporterConfig = { enable = true; - settingsFile = pkgs.writeText "knot.conf" '' - server: - listen: 127.0.0.1@53 - template: - - id: default - storage: ${ - pkgs.buildEnv { - name = "zones"; - paths = [ - (pkgs.writeTextDir "example.com.zone" '' - @ SOA ns1.example.com. noc.example.com. 2024032401 86400 7200 3600000 172800 - @ NS ns1 - ns1 A 192.168.0.1 - '') - ]; - } - } - zonefile-load: difference - zonefile-sync: -1 - zone: - - domain: example.com - file: example.com.zone - dnssec-signing: on + extraFlags = [ "--web.collectd-push-path /collectd" ]; + }; + exporterTest = + let + postData = lib.replaceStrings [ "\n" ] [ "" ] '' + [{ + "values":[23], + "dstypes":["gauge"], + "type":"gauge", + "interval":1000, + "host":"testhost", + "plugin":"testplugin", + "time":DATE + }] + ''; + in + '' + wait_for_unit("prometheus-collectd-exporter.service") + wait_for_open_port(9103) + succeed( + 'echo \'${postData}\'> /tmp/data.json' + ) + succeed('sed -i -e "s DATE $(date +%s) " /tmp/data.json') + succeed( + "curl -sSfH 'Content-Type: application/json' -X POST --data @/tmp/data.json localhost:9103/collectd" + ) + succeed( + "curl -sSf localhost:9103/metrics | grep 'collectd_testplugin_gauge{instance=\"testhost\"} 23'" + ) + ''; + }; + + deluge = + { pkgs, ... }: + { + exporterConfig = { + enable = true; + port = 1234; + listenAddress = "127.0.0.1"; + + delugeUser = "user"; + delugePort = 2345; + delugePasswordFile = pkgs.writeText "password" "weak_password"; + }; + metricProvider = { + services.deluge.enable = true; + services.deluge.declarative = true; + services.deluge.config.daemon_port = 2345; + services.deluge.authFile = pkgs.writeText "authFile" '' + localclient:abcdef:10 + user:weak_password:10 ''; }; + exporterTest = '' + wait_for_unit("deluged.service") + wait_for_open_port(2345) + wait_for_unit("prometheus-deluge-exporter.service") + wait_for_open_port(1234) + succeed("curl -sSf http://localhost:1234 | grep 'deluge_torrents'") + ''; + }; + + dnsmasq = + { ... }: + { + exporterConfig = { + enable = true; + leasesPath = "/var/lib/dnsmasq/dnsmasq.leases"; + }; + metricProvider = { + services.dnsmasq.enable = true; + }; + exporterTest = '' + wait_for_unit("dnsmasq.service") + wait_for_open_port(53) + wait_for_file("/var/lib/dnsmasq/dnsmasq.leases") + wait_for_unit("prometheus-dnsmasq-exporter.service") + wait_for_open_port(9153) + succeed("curl -sSf http://localhost:9153/metrics | grep 'dnsmasq_leases 0'") + ''; + }; + + dnssec = + { pkgs, ... }: + { + exporterConfig = { + enable = true; + configuration = { + records = [ + { + zone = "example.com"; + record = "@"; + type = "SOA"; + } + ]; + }; + resolvers = [ "127.0.0.1:53" ]; + }; + metricProvider = { + services.knot = { + enable = true; + settingsFile = pkgs.writeText "knot.conf" '' + server: + listen: 127.0.0.1@53 + template: + - id: default + storage: ${ + pkgs.buildEnv { + name = "zones"; + paths = [ + (pkgs.writeTextDir "example.com.zone" '' + @ SOA ns1.example.com. noc.example.com. 2024032401 86400 7200 3600000 172800 + @ NS ns1 + ns1 A 192.168.0.1 + '') + ]; + } + } + zonefile-load: difference + zonefile-sync: -1 + zone: + - domain: example.com + file: example.com.zone + dnssec-signing: on + ''; + }; + }; + exporterTest = '' + wait_for_unit("knot.service") + wait_for_open_port(53) + wait_for_unit("prometheus-dnssec-exporter.service") + wait_for_open_port(9204) + succeed("curl -sSf http://localhost:9204/metrics | grep 'example.com'") + ''; }; - exporterTest = '' - wait_for_unit("knot.service") - wait_for_open_port(53) - wait_for_unit("prometheus-dnssec-exporter.service") - wait_for_open_port(9204) - succeed("curl -sSf http://localhost:9204/metrics | grep 'example.com'") - ''; - }; # Access to WHOIS server is required to properly test this exporter, so # just perform basic sanity check that the exporter is running and returns # a failure. - domain = { - exporterConfig = { - enable = true; + domain = + { ... }: + { + exporterConfig = { + enable = true; + }; + exporterTest = '' + wait_for_unit("prometheus-domain-exporter.service") + wait_for_open_port(9222) + succeed("curl -sSf 'http://localhost:9222/probe?target=nixos.org'") + ''; }; - exporterTest = '' - wait_for_unit("prometheus-domain-exporter.service") - wait_for_open_port(9222) - succeed("curl -sSf 'http://localhost:9222/probe?target=nixos.org'") - ''; - }; - dovecot = { - exporterConfig = { - enable = true; - scopes = [ "global" ]; - socketPath = "/var/run/dovecot2/old-stats"; - user = "root"; # <- don't use user root in production + dovecot = + { ... }: + { + exporterConfig = { + enable = true; + scopes = [ "global" ]; + socketPath = "/var/run/dovecot2/old-stats"; + user = "root"; # <- don't use user root in production + }; + metricProvider = { + services.dovecot2.enable = true; + }; + exporterTest = '' + wait_for_unit("prometheus-dovecot-exporter.service") + wait_for_open_port(9166) + succeed( + "curl -sSf http://localhost:9166/metrics | grep 'dovecot_up{scope=\"global\"} 1'" + ) + ''; }; - metricProvider = { - services.dovecot2.enable = true; - }; - exporterTest = '' - wait_for_unit("prometheus-dovecot-exporter.service") - wait_for_open_port(9166) - succeed( - "curl -sSf http://localhost:9166/metrics | grep 'dovecot_up{scope=\"global\"} 1'" - ) - ''; - }; exportarr-sonarr = + { pkgs, ... }: let apikey = "eccff6a992bc2e4b88e46d064b26bb4e"; in @@ -407,952 +420,1011 @@ let ''; }; - ebpf = { - exporterConfig = { - enable = true; - names = [ "timers" ]; - }; - exporterTest = '' - wait_for_unit("prometheus-ebpf-exporter.service") - wait_for_open_port(9435) - succeed( - "curl -sSf http://localhost:9435/metrics | grep 'ebpf_exporter_enabled_configs{name=\"timers\"} 1'" - ) - ''; - }; - - fastly = { - exporterConfig = { - enable = true; - environmentFile = pkgs.writeText "fastly-exporter-env" "FASTLY_API_TOKEN=abc123"; - }; - - exporterTest = '' - wait_for_unit("prometheus-fastly-exporter.service") - wait_for_open_port(9118) - ''; - }; - - fritzbox = { - # TODO add proper test case - exporterConfig = { - enable = true; - }; - exporterTest = '' - wait_for_unit("prometheus-fritzbox-exporter.service") - wait_for_open_port(9133) - succeed( - "curl -sSf http://localhost:9133/metrics | grep 'fritzbox_exporter_collect_errors 0'" - ) - ''; - }; - - graphite = { - exporterConfig = { - enable = true; - port = 9108; - graphitePort = 9109; - mappingSettings.mappings = [ - { - match = "test.*.*"; - name = "testing"; - labels = { - protocol = "$1"; - author = "$2"; - }; - } - ]; - }; - exporterTest = '' - wait_for_unit("prometheus-graphite-exporter.service") - wait_for_open_port(9108) - wait_for_open_port(9109) - succeed("echo test.tcp.foo-bar 1234 $(date +%s) | nc -w1 localhost 9109") - succeed("curl -sSf http://localhost:9108/metrics | grep 'testing{author=\"foo-bar\",protocol=\"tcp\"} 1234'") - ''; - }; - - idrac = { - exporterConfig = { - enable = true; - port = 9348; - configuration = { - hosts = { - default = { - username = "username"; - password = "password"; - }; - }; - }; - }; - exporterTest = '' - wait_for_unit("prometheus-idrac-exporter.service") - wait_for_open_port(9348) - wait_until_succeeds("curl localhost:9348") - ''; - }; - - influxdb = { - exporterConfig = { - enable = true; - sampleExpiry = "3s"; - }; - exporterTest = '' - wait_for_unit("prometheus-influxdb-exporter.service") - wait_for_open_port(9122) - succeed( - "curl -XPOST http://localhost:9122/write --data-binary 'influxdb_exporter,distro=nixos,added_in=21.09 value=1'" - ) - succeed( - "curl -sSf http://localhost:9122/metrics | grep 'nixos'" - ) - execute("sleep 5") - fail( - "curl -sSf http://localhost:9122/metrics | grep 'nixos'" - ) - ''; - }; - - ipmi = { - exporterConfig = { - enable = true; - }; - exporterTest = '' - wait_for_unit("prometheus-ipmi-exporter.service") - wait_for_open_port(9290) - succeed( - "curl -sSf http://localhost:9290/metrics | grep 'ipmi_scrape_duration_seconds'" - ) - ''; - }; - - jitsi = { - exporterConfig = { - enable = true; - }; - metricProvider = { - systemd.services.prometheus-jitsi-exporter.after = [ "jitsi-videobridge2.service" ]; - services.jitsi-videobridge = { + ebpf = + { ... }: + { + exporterConfig = { enable = true; - colibriRestApi = true; + names = [ "timers" ]; }; + exporterTest = '' + wait_for_unit("prometheus-ebpf-exporter.service") + wait_for_open_port(9435) + succeed( + "curl -sSf http://localhost:9435/metrics | grep 'ebpf_exporter_enabled_configs{name=\"timers\"} 1'" + ) + ''; }; - exporterTest = '' - wait_for_unit("jitsi-videobridge2.service") - wait_for_open_port(8080) - wait_for_unit("prometheus-jitsi-exporter.service") - wait_for_open_port(9700) - wait_until_succeeds( - 'journalctl -eu prometheus-jitsi-exporter.service -o cat | grep "key=participants"' - ) - succeed("curl -sSf 'localhost:9700/metrics' | grep 'jitsi_participants 0'") - ''; - }; - json = { - exporterConfig = { - enable = true; - configFile = pkgs.writeText "json-exporter-conf.json" ( - builtins.toJSON { - modules = { + fastly = + { pkgs, ... }: + { + exporterConfig = { + enable = true; + environmentFile = pkgs.writeText "fastly-exporter-env" "FASTLY_API_TOKEN=abc123"; + }; + + exporterTest = '' + wait_for_unit("prometheus-fastly-exporter.service") + wait_for_open_port(9118) + ''; + }; + + fritzbox = + { ... }: + { + # TODO add proper test case + exporterConfig = { + enable = true; + }; + exporterTest = '' + wait_for_unit("prometheus-fritzbox-exporter.service") + wait_for_open_port(9133) + succeed( + "curl -sSf http://localhost:9133/metrics | grep 'fritzbox_exporter_collect_errors 0'" + ) + ''; + }; + + graphite = + { ... }: + { + exporterConfig = { + enable = true; + port = 9108; + graphitePort = 9109; + mappingSettings.mappings = [ + { + match = "test.*.*"; + name = "testing"; + labels = { + protocol = "$1"; + author = "$2"; + }; + } + ]; + }; + exporterTest = '' + wait_for_unit("prometheus-graphite-exporter.service") + wait_for_open_port(9108) + wait_for_open_port(9109) + succeed("echo test.tcp.foo-bar 1234 $(date +%s) | nc -w1 localhost 9109") + succeed("curl -sSf http://localhost:9108/metrics | grep 'testing{author=\"foo-bar\",protocol=\"tcp\"} 1234'") + ''; + }; + + idrac = + { ... }: + { + exporterConfig = { + enable = true; + port = 9348; + configuration = { + hosts = { default = { - metrics = [ - { - name = "json_test_metric"; - path = "{ .test }"; - } - ]; + username = "username"; + password = "password"; }; }; - } - ); - }; - metricProvider = { - systemd.services.prometheus-json-exporter.after = [ "nginx.service" ]; - services.nginx = { - enable = true; - virtualHosts.localhost.locations."/".extraConfig = '' - return 200 "{\"test\":1}"; - ''; - }; - }; - exporterTest = '' - wait_for_unit("nginx.service") - wait_for_open_port(80) - wait_for_unit("prometheus-json-exporter.service") - wait_for_open_port(7979) - succeed( - "curl -sSf 'localhost:7979/probe?target=http://localhost' | grep 'json_test_metric 1'" - ) - ''; - }; - - kafka = { - exporterConfig = { - enable = true; - environmentFile = pkgs.writeTextFile { - name = "/tmp/prometheus-kafka-exporter.env"; - text = '' - KAFKA_BROKERS="localhost:9092" - ''; - }; - }; - metricProvider = { - services.apache-kafka = { - enable = true; - - clusterId = "pHG8aWuXSfWAibHFDCnsCQ"; - - formatLogDirs = true; - - settings = { - "node.id" = 1; - "process.roles" = [ - "broker" - "controller" - ]; - "listeners" = [ - "PLAINTEXT://:9092" - "CONTROLLER://:9093" - ]; - "listener.security.protocol.map" = [ - "PLAINTEXT:PLAINTEXT" - "CONTROLLER:PLAINTEXT" - ]; - "controller.quorum.voters" = [ - "1@localhost:9093" - ]; - "controller.listener.names" = [ "CONTROLLER" ]; - "log.dirs" = [ "/var/lib/apache-kafka" ]; }; }; - - systemd.services.apache-kafka.serviceConfig.StateDirectory = "apache-kafka"; - }; - exporterTest = '' - wait_for_unit("apache-kafka") - wait_for_open_port(9092) - wait_for_open_port(9093) - wait_for_unit("prometheus-kafka-exporter.service") - wait_for_open_port(8080) - wait_until_succeeds( - "journalctl -o cat -u prometheus-kafka-exporter.service | grep '\"version\":\"${pkgs.kminion.version}\"'" - ) - succeed( - "curl -sSf http://localhost:8080/metrics | grep 'kminion_exporter_up'" - ) - ''; - }; - - knot = { - exporterConfig = { - enable = true; - }; - metricProvider = { - services.knot = { - enable = true; - extraArgs = [ "-v" ]; - settingsFile = pkgs.writeText "knot.conf" '' - server: - listen: 127.0.0.1@53 - - template: - - id: default - global-module: mod-stats - dnssec-signing: off - zonefile-sync: -1 - zonefile-load: difference - storage: ${ - pkgs.buildEnv { - name = "foo"; - paths = [ - (pkgs.writeTextDir "test.zone" '' - @ SOA ns.example.com. noc.example.com. 2019031301 86400 7200 3600000 172800 - @ NS ns1 - @ NS ns2 - ns1 A 192.168.0.1 - '') - ]; - } - } - - mod-stats: - - id: custom - edns-presence: on - query-type: on - - zone: - - domain: test - file: test.zone - module: mod-stats/custom - ''; - }; - }; - exporterTest = '' - wait_for_unit("knot.service") - wait_for_unit("prometheus-knot-exporter.service") - wait_for_open_port(9433) - succeed("curl -sSf 'localhost:9433' | grep '2\.019031301'") - ''; - }; - - keylight = { - # A hardware device is required to properly test this exporter, so just - # perform a couple of basic sanity checks that the exporter is running - # and requires a target, but cannot reach a specified target. - exporterConfig = { - enable = true; - }; - exporterTest = '' - wait_for_unit("prometheus-keylight-exporter.service") - wait_for_open_port(9288) - succeed( - "curl -sS --write-out '%{http_code}' -o /dev/null http://localhost:9288/metrics | grep '400'" - ) - succeed( - "curl -sS --write-out '%{http_code}' -o /dev/null http://localhost:9288/metrics?target=nosuchdevice | grep '500'" - ) - ''; - }; - - lnd = { - exporterConfig = { - enable = true; - lndTlsPath = "/var/lib/lnd/tls.cert"; - lndMacaroonDir = "/var/lib/lnd"; - extraFlags = [ "--lnd.network=regtest" ]; - }; - metricProvider = { - systemd.services.prometheus-lnd-exporter.serviceConfig.RestartSec = 15; - systemd.services.prometheus-lnd-exporter.after = [ "lnd.service" ]; - services.bitcoind.regtest = { - enable = true; - extraConfig = '' - rpcauth=bitcoinrpc:e8fe33f797e698ac258c16c8d7aadfbe$872bdb8f4d787367c26bcfd75e6c23c4f19d44a69f5d1ad329e5adf3f82710f7 - zmqpubrawblock=tcp://127.0.0.1:28332 - zmqpubrawtx=tcp://127.0.0.1:28333 - # https://github.com/lightningnetwork/lnd/issues/9163 - deprecatedrpc=warnings - ''; - extraCmdlineOptions = [ "-regtest" ]; - }; - systemd.services.lnd = { - serviceConfig.ExecStart = '' - ${pkgs.lnd}/bin/lnd \ - --datadir=/var/lib/lnd \ - --tlscertpath=/var/lib/lnd/tls.cert \ - --tlskeypath=/var/lib/lnd/tls.key \ - --logdir=/var/log/lnd \ - --bitcoin.active \ - --bitcoin.regtest \ - --bitcoin.node=bitcoind \ - --bitcoind.rpcuser=bitcoinrpc \ - --bitcoind.rpcpass=hunter2 \ - --bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 \ - --bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 \ - --readonlymacaroonpath=/var/lib/lnd/readonly.macaroon - ''; - serviceConfig.StateDirectory = "lnd"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - }; - # initialize wallet, creates macaroon needed by exporter - systemd.services.lnd.postStart = '' - ${pkgs.curl}/bin/curl \ - --retry 20 \ - --retry-delay 1 \ - --retry-connrefused \ - --cacert /var/lib/lnd/tls.cert \ - -X GET \ - https://localhost:8080/v1/genseed | ${pkgs.jq}/bin/jq -c '.cipher_seed_mnemonic' > /tmp/seed - ${pkgs.curl}/bin/curl \ - --retry 20 \ - --retry-delay 1 \ - --retry-connrefused \ - --cacert /var/lib/lnd/tls.cert \ - -X POST \ - -d "{\"wallet_password\": \"asdfasdfasdf\", \"cipher_seed_mnemonic\": $(cat /tmp/seed | tr -d '\n')}" \ - https://localhost:8080/v1/initwallet + exporterTest = '' + wait_for_unit("prometheus-idrac-exporter.service") + wait_for_open_port(9348) + wait_until_succeeds("curl localhost:9348") ''; }; - exporterTest = '' - wait_for_unit("lnd.service") - wait_for_open_port(10009) - wait_for_unit("prometheus-lnd-exporter.service") - wait_for_open_port(9092) - succeed("curl -sSf localhost:9092/metrics | grep '^lnd_peer_count'") - ''; - }; - mail = { - exporterConfig = { - enable = true; - configuration = { - monitoringInterval = "2s"; - mailCheckTimeout = "10s"; - servers = [ - { - name = "testserver"; - server = "localhost"; - port = 25; - from = "mail-exporter@localhost"; - to = "mail-exporter@localhost"; - detectionDir = "/var/spool/mail/mail-exporter/new"; - } - ]; - }; - }; - metricProvider = { - services.postfix.enable = true; - systemd.services.prometheus-mail-exporter = { - after = [ "postfix.service" ]; - requires = [ "postfix.service" ]; - serviceConfig = { - ExecStartPre = [ - "${pkgs.writeShellScript "create-maildir" '' - mkdir -p -m 0700 mail-exporter/new - ''}" - ]; - ProtectHome = true; - ReadOnlyPaths = "/"; - ReadWritePaths = "/var/spool/mail"; - WorkingDirectory = "/var/spool/mail"; - }; - }; - users.users.mailexporter = { - isSystemUser = true; - group = "mailexporter"; - }; - users.groups.mailexporter = { }; - }; - exporterTest = '' - wait_for_unit("postfix.service") - wait_for_unit("prometheus-mail-exporter.service") - wait_for_open_port(9225) - wait_until_succeeds( - "curl -sSf http://localhost:9225/metrics | grep 'mail_deliver_success{configname=\"testserver\"} 1'" - ) - ''; - }; - - mikrotik = { - exporterConfig = { - enable = true; - extraFlags = [ "-timeout=1s" ]; - configuration = { - devices = [ - { - name = "router"; - address = "192.168.42.48"; - user = "prometheus"; - password = "shh"; - } - ]; - features = { - bgp = true; - dhcp = true; - dhcpl = true; - dhcpv6 = true; - health = true; - routes = true; - poe = true; - pools = true; - optics = true; - w60g = true; - wlansta = true; - wlanif = true; - monitor = true; - ipsec = true; - }; - }; - }; - exporterTest = '' - wait_for_unit("prometheus-mikrotik-exporter.service") - wait_for_open_port(9436) - succeed( - "curl -sSf http://localhost:9436/metrics | grep 'mikrotik_scrape_collector_success{device=\"router\"} 0'" - ) - ''; - }; - - modemmanager = { - exporterConfig = { - enable = true; - refreshRate = "10s"; - }; - metricProvider = { - # ModemManager is installed when NetworkManager is enabled. Ensure it is - # started and is wanted by NM and the exporter to start everything up - # in the right order. - networking.networkmanager.enable = true; - systemd.services.ModemManager = { + influxdb = + { ... }: + { + exporterConfig = { enable = true; - wantedBy = [ - "NetworkManager.service" - "prometheus-modemmanager-exporter.service" - ]; + sampleExpiry = "3s"; }; - }; - exporterTest = '' - wait_for_unit("ModemManager.service") - wait_for_unit("prometheus-modemmanager-exporter.service") - wait_for_open_port(9539) - succeed( - "curl -sSf http://localhost:9539/metrics | grep 'modemmanager_info'" - ) - ''; - }; - - mqtt = { - exporterConfig = { - enable = true; - environmentFile = pkgs.writeText "mqtt-exporter-envfile" '' - MQTT_PASSWORD=testpassword + exporterTest = '' + wait_for_unit("prometheus-influxdb-exporter.service") + wait_for_open_port(9122) + succeed( + "curl -XPOST http://localhost:9122/write --data-binary 'influxdb_exporter,distro=nixos,added_in=21.09 value=1'" + ) + succeed( + "curl -sSf http://localhost:9122/metrics | grep 'nixos'" + ) + execute("sleep 5") + fail( + "curl -sSf http://localhost:9122/metrics | grep 'nixos'" + ) ''; }; - metricProvider = { - services.mosquitto = { - enable = true; - listeners = [ - { - users.exporter = { - acl = [ "read #" ]; - passwordFile = pkgs.writeText "mosquitto-password" "testpassword"; - }; - } - ]; - }; - systemd.services.prometheus-mqtt-exporter = { - wants = [ "mosquitto.service" ]; - after = [ "mosquitto.service" ]; - }; - }; - exporterTest = '' - wait_for_unit("mosquitto.service") - wait_for_unit("prometheus-mqtt-exporter.service") - wait_for_open_port(9000) - succeed( - "curl -sSf http://localhost:9000/metrics | grep '^python_info'" - ) - ''; - }; - mysqld = { - exporterConfig = { - enable = true; - runAsLocalSuperUser = true; - configFile = pkgs.writeText "test-prometheus-exporter-mysqld-config.my-cnf" '' - [client] - user = exporter - password = snakeoilpassword + ipmi = + { ... }: + { + exporterConfig = { + enable = true; + }; + exporterTest = '' + wait_for_unit("prometheus-ipmi-exporter.service") + wait_for_open_port(9290) + succeed( + "curl -sSf http://localhost:9290/metrics | grep 'ipmi_scrape_duration_seconds'" + ) ''; }; - metricProvider = { - services.mysql = { - enable = true; - package = pkgs.mariadb; - initialScript = pkgs.writeText "mysql-init-script.sql" '' - CREATE USER 'exporter'@'localhost' - IDENTIFIED BY 'snakeoilpassword' - WITH MAX_USER_CONNECTIONS 3; - GRANT PROCESS, REPLICATION CLIENT, SLAVE MONITOR, SELECT ON *.* TO 'exporter'@'localhost'; - ''; - }; - }; - exporterTest = '' - wait_for_unit("prometheus-mysqld-exporter.service") - wait_for_open_port(9104) - wait_for_unit("mysql.service") - succeed("curl -sSf http://localhost:9104/metrics | grep 'mysql_up 1'") - systemctl("stop mysql.service") - succeed("curl -sSf http://localhost:9104/metrics | grep 'mysql_up 0'") - systemctl("start mysql.service") - wait_for_unit("mysql.service") - succeed("curl -sSf http://localhost:9104/metrics | grep 'mysql_up 1'") - ''; - }; - nextcloud = { - exporterConfig = { - enable = true; - passwordFile = "/var/nextcloud-pwfile"; - url = "http://localhost"; - }; - metricProvider = { - systemd.services.nc-pwfile = - let - passfile = (pkgs.writeText "pwfile" "snakeoilpw"); - in - { - requiredBy = [ "prometheus-nextcloud-exporter.service" ]; - before = [ "prometheus-nextcloud-exporter.service" ]; - serviceConfig.ExecStart = '' - ${pkgs.coreutils}/bin/install -o nextcloud-exporter -m 0400 ${passfile} /var/nextcloud-pwfile - ''; - }; - services.nginx = { + jitsi = + { ... }: + { + exporterConfig = { enable = true; - virtualHosts."localhost" = { - basicAuth.nextcloud-exporter = "snakeoilpw"; - locations."/" = { - root = "${pkgs.prometheus-nextcloud-exporter.src}/serverinfo/testdata"; - tryFiles = "/negative-space.json =404"; - }; + }; + metricProvider = { + systemd.services.prometheus-jitsi-exporter.after = [ "jitsi-videobridge2.service" ]; + services.jitsi-videobridge = { + enable = true; + colibriRestApi = true; }; }; + exporterTest = '' + wait_for_unit("jitsi-videobridge2.service") + wait_for_open_port(8080) + wait_for_unit("prometheus-jitsi-exporter.service") + wait_for_open_port(9700) + wait_until_succeeds( + 'journalctl -eu prometheus-jitsi-exporter.service -o cat | grep "key=participants"' + ) + succeed("curl -sSf 'localhost:9700/metrics' | grep 'jitsi_participants 0'") + ''; }; - exporterTest = '' - wait_for_unit("nginx.service") - wait_for_unit("prometheus-nextcloud-exporter.service") - wait_for_open_port(9205) - succeed("curl -sSf http://localhost:9205/metrics | grep 'nextcloud_up 1'") - ''; - }; - nginx = { - exporterConfig = { - enable = true; - constLabels = [ "foo=bar" ]; - }; - metricProvider = { - services.nginx = { + json = + { pkgs, ... }: + { + exporterConfig = { enable = true; - statusPage = true; - virtualHosts."test".extraConfig = "return 204;"; - }; - }; - exporterTest = '' - wait_for_unit("nginx.service") - wait_for_unit("prometheus-nginx-exporter.service") - wait_for_open_port(9113) - succeed("curl -sSf http://localhost:9113/metrics | grep 'nginx_up{foo=\"bar\"} 1'") - ''; - }; - - nginxlog = { - exporterConfig = { - enable = true; - group = "nginx"; - settings = { - namespaces = [ - { - name = "filelogger"; - source = { - files = [ "/var/log/nginx/filelogger.access.log" ]; - }; - } - { - name = "syslogger"; - source = { - syslog = { - listen_address = "udp://127.0.0.1:10000"; - format = "rfc3164"; - tags = [ "nginx" ]; + configFile = pkgs.writeText "json-exporter-conf.json" ( + builtins.toJSON { + modules = { + default = { + metrics = [ + { + name = "json_test_metric"; + path = "{ .test }"; + } + ]; }; }; } - ]; + ); }; - }; - metricProvider = { - services.nginx = { - enable = true; - httpConfig = '' - server { - listen 80; - server_name filelogger.local; - access_log /var/log/nginx/filelogger.access.log; - } - server { - listen 81; - server_name syslogger.local; - access_log syslog:server=127.0.0.1:10000,tag=nginx,severity=info; - } - ''; + metricProvider = { + systemd.services.prometheus-json-exporter.after = [ "nginx.service" ]; + services.nginx = { + enable = true; + virtualHosts.localhost.locations."/".extraConfig = '' + return 200 "{\"test\":1}"; + ''; + }; }; - }; - exporterTest = '' - wait_for_unit("nginx.service") - wait_for_unit("prometheus-nginxlog-exporter.service") - wait_for_open_port(9117) - wait_for_open_port(80) - wait_for_open_port(81) - succeed("curl http://localhost") - execute("sleep 1") - succeed( - "curl -sSf http://localhost:9117/metrics | grep 'filelogger_http_response_count_total' | grep 1" - ) - succeed("curl http://localhost:81") - execute("sleep 1") - succeed( - "curl -sSf http://localhost:9117/metrics | grep 'syslogger_http_response_count_total' | grep 1" - ) - ''; - }; - - node = { - exporterConfig = { - enable = true; - }; - exporterTest = '' - wait_for_unit("prometheus-node-exporter.service") - wait_for_open_port(9100) - succeed( - "curl -sSf http://localhost:9100/metrics | grep 'node_exporter_build_info{.\\+} 1'" - ) - ''; - }; - - node-cert = { - nodeName = "node_cert"; - exporterConfig = { - enable = true; - paths = [ "/run/certs" ]; - }; - exporterTest = '' - wait_for_unit("prometheus-node-cert-exporter.service") - wait_for_open_port(9141) - wait_until_succeeds( - "curl -sSf http://localhost:9141/metrics | grep 'ssl_certificate_expiry_seconds{.\\+path=\"/run/certs/node-cert\\.cert\".\\+}'" - ) - ''; - - metricProvider = { - system.activationScripts.cert.text = '' - mkdir -p /run/certs - cd /run/certs - - cat >ca.template < /tmp/seed + ${pkgs.curl}/bin/curl \ + --retry 20 \ + --retry-delay 1 \ + --retry-connrefused \ + --cacert /var/lib/lnd/tls.cert \ + -X POST \ + -d "{\"wallet_password\": \"asdfasdfasdf\", \"cipher_seed_mnemonic\": $(cat /tmp/seed | tr -d '\n')}" \ + https://localhost:8080/v1/initwallet + ''; + }; + exporterTest = '' + wait_for_unit("lnd.service") + wait_for_open_port(10009) + wait_for_unit("prometheus-lnd-exporter.service") + wait_for_open_port(9092) + succeed("curl -sSf localhost:9092/metrics | grep '^lnd_peer_count'") + ''; + }; + + mail = + { pkgs, ... }: + { + exporterConfig = { + enable = true; + configuration = { + monitoringInterval = "2s"; + mailCheckTimeout = "10s"; + servers = [ + { + name = "testserver"; + server = "localhost"; + port = 25; + from = "mail-exporter@localhost"; + to = "mail-exporter@localhost"; + detectionDir = "/var/spool/mail/mail-exporter/new"; + } + ]; + }; + }; + metricProvider = { + services.postfix.enable = true; + systemd.services.prometheus-mail-exporter = { + after = [ "postfix.service" ]; + requires = [ "postfix.service" ]; + serviceConfig = { + ExecStartPre = [ + "${pkgs.writeShellScript "create-maildir" '' + mkdir -p -m 0700 mail-exporter/new + ''}" ]; + ProtectHome = true; + ReadOnlyPaths = "/"; + ReadWritePaths = "/var/spool/mail"; + WorkingDirectory = "/var/spool/mail"; + }; + }; + users.users.mailexporter = { + isSystemUser = true; + group = "mailexporter"; + }; + users.groups.mailexporter = { }; + }; + exporterTest = '' + wait_for_unit("postfix.service") + wait_for_unit("prometheus-mail-exporter.service") + wait_for_open_port(9225) + wait_until_succeeds( + "curl -sSf http://localhost:9225/metrics | grep 'mail_deliver_success{configname=\"testserver\"} 1'" + ) + ''; + }; + + mikrotik = + { ... }: + { + exporterConfig = { + enable = true; + extraFlags = [ "-timeout=1s" ]; + configuration = { + devices = [ + { + name = "router"; + address = "192.168.42.48"; + user = "prometheus"; + password = "shh"; + } + ]; + features = { + bgp = true; + dhcp = true; + dhcpl = true; + dhcpv6 = true; + health = true; + routes = true; + poe = true; + pools = true; + optics = true; + w60g = true; + wlansta = true; + wlanif = true; + monitor = true; + ipsec = true; }; }; }; + exporterTest = '' + wait_for_unit("prometheus-mikrotik-exporter.service") + wait_for_open_port(9436) + succeed( + "curl -sSf http://localhost:9436/metrics | grep 'mikrotik_scrape_collector_success{device=\"router\"} 0'" + ) + ''; }; - exporterTest = '' - wait_for_unit("postgresql.target") - wait_for_unit("pgbouncer.service") - wait_for_unit("prometheus-pgbouncer-exporter.service") - wait_for_open_port(9127) - succeed("curl -sSf http://localhost:9127/metrics | grep 'pgbouncer_up 1'") - succeed( - "curl -sSf http://localhost:9127/metrics | grep 'pgbouncer_config_max_client_connections 99'" - ) - ''; - }; - php-fpm = { - nodeName = "php_fpm"; - exporterConfig = { - enable = true; - environmentFile = pkgs.writeTextFile { - name = "/tmp/prometheus-php-fpm-exporter.env"; - text = '' - PHP_FPM_SCRAPE_URI="tcp://127.0.0.1:9000/status" + modemmanager = + { ... }: + { + exporterConfig = { + enable = true; + refreshRate = "10s"; + }; + metricProvider = { + # ModemManager is installed when NetworkManager is enabled. Ensure it is + # started and is wanted by NM and the exporter to start everything up + # in the right order. + networking.networkmanager.enable = true; + systemd.services.ModemManager = { + enable = true; + wantedBy = [ + "NetworkManager.service" + "prometheus-modemmanager-exporter.service" + ]; + }; + }; + exporterTest = '' + wait_for_unit("ModemManager.service") + wait_for_unit("prometheus-modemmanager-exporter.service") + wait_for_open_port(9539) + succeed( + "curl -sSf http://localhost:9539/metrics | grep 'modemmanager_info'" + ) + ''; + }; + + mqtt = + { pkgs, ... }: + { + exporterConfig = { + enable = true; + environmentFile = pkgs.writeText "mqtt-exporter-envfile" '' + MQTT_PASSWORD=testpassword + ''; + }; + metricProvider = { + services.mosquitto = { + enable = true; + listeners = [ + { + users.exporter = { + acl = [ "read #" ]; + passwordFile = pkgs.writeText "mosquitto-password" "testpassword"; + }; + } + ]; + }; + systemd.services.prometheus-mqtt-exporter = { + wants = [ "mosquitto.service" ]; + after = [ "mosquitto.service" ]; + }; + }; + exporterTest = '' + wait_for_unit("mosquitto.service") + wait_for_unit("prometheus-mqtt-exporter.service") + wait_for_open_port(9000) + succeed( + "curl -sSf http://localhost:9000/metrics | grep '^python_info'" + ) + ''; + }; + + mysqld = + { pkgs, ... }: + { + exporterConfig = { + enable = true; + runAsLocalSuperUser = true; + configFile = pkgs.writeText "test-prometheus-exporter-mysqld-config.my-cnf" '' + [client] + user = exporter + password = snakeoilpassword + ''; + }; + metricProvider = { + services.mysql = { + enable = true; + package = pkgs.mariadb; + initialScript = pkgs.writeText "mysql-init-script.sql" '' + CREATE USER 'exporter'@'localhost' + IDENTIFIED BY 'snakeoilpassword' + WITH MAX_USER_CONNECTIONS 3; + GRANT PROCESS, REPLICATION CLIENT, SLAVE MONITOR, SELECT ON *.* TO 'exporter'@'localhost'; + ''; + }; + }; + exporterTest = '' + wait_for_unit("prometheus-mysqld-exporter.service") + wait_for_open_port(9104) + wait_for_unit("mysql.service") + succeed("curl -sSf http://localhost:9104/metrics | grep 'mysql_up 1'") + systemctl("stop mysql.service") + succeed("curl -sSf http://localhost:9104/metrics | grep 'mysql_up 0'") + systemctl("start mysql.service") + wait_for_unit("mysql.service") + succeed("curl -sSf http://localhost:9104/metrics | grep 'mysql_up 1'") + ''; + }; + + nextcloud = + { pkgs, ... }: + { + exporterConfig = { + enable = true; + passwordFile = "/var/nextcloud-pwfile"; + url = "http://localhost"; + }; + metricProvider = { + systemd.services.nc-pwfile = + let + passfile = (pkgs.writeText "pwfile" "snakeoilpw"); + in + { + requiredBy = [ "prometheus-nextcloud-exporter.service" ]; + before = [ "prometheus-nextcloud-exporter.service" ]; + serviceConfig.ExecStart = '' + ${pkgs.coreutils}/bin/install -o nextcloud-exporter -m 0400 ${passfile} /var/nextcloud-pwfile + ''; + }; + services.nginx = { + enable = true; + virtualHosts."localhost" = { + basicAuth.nextcloud-exporter = "snakeoilpw"; + locations."/" = { + root = "${pkgs.prometheus-nextcloud-exporter.src}/serverinfo/testdata"; + tryFiles = "/negative-space.json =404"; + }; + }; + }; + }; + exporterTest = '' + wait_for_unit("nginx.service") + wait_for_unit("prometheus-nextcloud-exporter.service") + wait_for_open_port(9205) + succeed("curl -sSf http://localhost:9205/metrics | grep 'nextcloud_up 1'") + ''; + }; + + nginx = + { ... }: + { + exporterConfig = { + enable = true; + constLabels = [ "foo=bar" ]; + }; + metricProvider = { + services.nginx = { + enable = true; + statusPage = true; + virtualHosts."test".extraConfig = "return 204;"; + }; + }; + exporterTest = '' + wait_for_unit("nginx.service") + wait_for_unit("prometheus-nginx-exporter.service") + wait_for_open_port(9113) + succeed("curl -sSf http://localhost:9113/metrics | grep 'nginx_up{foo=\"bar\"} 1'") + ''; + }; + + nginxlog = + { ... }: + { + exporterConfig = { + enable = true; + group = "nginx"; + settings = { + namespaces = [ + { + name = "filelogger"; + source = { + files = [ "/var/log/nginx/filelogger.access.log" ]; + }; + } + { + name = "syslogger"; + source = { + syslog = { + listen_address = "udp://127.0.0.1:10000"; + format = "rfc3164"; + tags = [ "nginx" ]; + }; + }; + } + ]; + }; + }; + metricProvider = { + services.nginx = { + enable = true; + httpConfig = '' + server { + listen 80; + server_name filelogger.local; + access_log /var/log/nginx/filelogger.access.log; + } + server { + listen 81; + server_name syslogger.local; + access_log syslog:server=127.0.0.1:10000,tag=nginx,severity=info; + } + ''; + }; + }; + exporterTest = '' + wait_for_unit("nginx.service") + wait_for_unit("prometheus-nginxlog-exporter.service") + wait_for_open_port(9117) + wait_for_open_port(80) + wait_for_open_port(81) + succeed("curl http://localhost") + execute("sleep 1") + succeed( + "curl -sSf http://localhost:9117/metrics | grep 'filelogger_http_response_count_total' | grep 1" + ) + succeed("curl http://localhost:81") + execute("sleep 1") + succeed( + "curl -sSf http://localhost:9117/metrics | grep 'syslogger_http_response_count_total' | grep 1" + ) + ''; + }; + + node = + { ... }: + { + exporterConfig = { + enable = true; + }; + exporterTest = '' + wait_for_unit("prometheus-node-exporter.service") + wait_for_open_port(9100) + succeed( + "curl -sSf http://localhost:9100/metrics | grep 'node_exporter_build_info{.\\+} 1'" + ) + ''; + }; + + node-cert = + { pkgs, ... }: + { + nodeName = "node_cert"; + exporterConfig = { + enable = true; + paths = [ "/run/certs" ]; + }; + exporterTest = '' + wait_for_unit("prometheus-node-cert-exporter.service") + wait_for_open_port(9141) + wait_until_succeeds( + "curl -sSf http://localhost:9141/metrics | grep 'ssl_certificate_expiry_seconds{.\\+path=\"/run/certs/node-cert\\.cert\".\\+}'" + ) + ''; + + metricProvider = { + system.activationScripts.cert.text = '' + mkdir -p /run/certs + cd /run/certs + + cat >ca.template <[^ /]*) (?P.*)" ]; } ]; - dns = { }; - ping = { - interval = "2s"; - timeout = "3s"; - history-size = 42; - payload-size = 56; - }; - log = { - level = "warn"; - }; }; + exporterTest = '' + wait_for_unit("prometheus-process-exporter.service") + wait_for_open_port(9256) + wait_until_succeeds( + "curl -sSf localhost:9256/metrics | grep -q '{}'".format( + 'namedprocess_namegroup_cpu_seconds_total{groupname="process-exporter ' + ) + ) + ''; }; - exporterTest = '' - wait_for_unit("prometheus-ping-exporter.service") - wait_for_open_port(9427) - succeed("curl -sSf http://localhost:9427/metrics | grep 'ping_up{.*} 1'") - ''; - }; - - postfix = { - exporterConfig = { - enable = true; - }; - metricProvider = { - services.postfix.enable = true; - }; - exporterTest = '' - wait_for_unit("prometheus-postfix-exporter.service") - wait_for_file("/var/lib/postfix/queue/public/showq") - wait_for_open_port(9154) - wait_until_succeeds( - "curl -sSf http://localhost:9154/metrics | grep 'postfix_up{path=\"unix:///var/lib/postfix/queue/public/showq\"} 1'" - ) - succeed( - "curl -sSf http://localhost:9154/metrics | grep 'postfix_smtpd_connects_total 0'" - ) - succeed("curl -sSf http://localhost:9154/metrics | grep 'postfix_up{.*} 1'") - ''; - }; - - postgres = { - exporterConfig = { - enable = true; - runAsLocalSuperUser = true; - }; - metricProvider = { - services.postgresql.enable = true; - }; - exporterTest = '' - wait_for_unit("prometheus-postgres-exporter.service") - wait_for_open_port(9187) - wait_for_unit("postgresql.target") - succeed( - "curl -sSf http://localhost:9187/metrics | grep 'pg_exporter_last_scrape_error 0'" - ) - succeed("curl -sSf http://localhost:9187/metrics | grep 'pg_up 1'") - systemctl("stop postgresql") - succeed( - "curl -sSf http://localhost:9187/metrics | grep -v 'pg_exporter_last_scrape_error 0'" - ) - succeed("curl -sSf http://localhost:9187/metrics | grep 'pg_up 0'") - systemctl("start postgresql") - wait_for_unit("postgresql.target") - succeed( - "curl -sSf http://localhost:9187/metrics | grep 'pg_exporter_last_scrape_error 0'" - ) - succeed("curl -sSf http://localhost:9187/metrics | grep 'pg_up 1'") - ''; - }; - - process = { - exporterConfig = { - enable = true; - settings.process_names = [ - # Remove nix store path from process name - { - name = "{{.Matches.Wrapped}} {{ .Matches.Args }}"; - cmdline = [ "^/nix/store[^ ]*/(?P[^ /]*) (?P.*)" ]; - } - ]; - }; - exporterTest = '' - wait_for_unit("prometheus-process-exporter.service") - wait_for_open_port(9256) - wait_until_succeeds( - "curl -sSf localhost:9256/metrics | grep -q '{}'".format( - 'namedprocess_namegroup_cpu_seconds_total{groupname="process-exporter ' - ) - ) - ''; - }; - pve = + { pkgs, ... }: let pveExporterEnvFile = pkgs.writeTextFile { name = "pve.env"; @@ -1375,36 +1447,41 @@ let ''; }; - py-air-control = { - nodeName = "py_air_control"; - exporterConfig = { - enable = true; - deviceHostname = "127.0.0.1"; + py-air-control = + { ... }: + { + nodeName = "py_air_control"; + exporterConfig = { + enable = true; + deviceHostname = "127.0.0.1"; + }; + exporterTest = '' + wait_for_unit("prometheus-py-air-control-exporter.service") + wait_for_open_port(9896) + succeed( + "curl -sSf http://localhost:9896/metrics | grep 'py_air_control_sampling_error_total'" + ) + ''; }; - exporterTest = '' - wait_for_unit("prometheus-py-air-control-exporter.service") - wait_for_open_port(9896) - succeed( - "curl -sSf http://localhost:9896/metrics | grep 'py_air_control_sampling_error_total'" - ) - ''; - }; - redis = { - exporterConfig = { - enable = true; + redis = + { ... }: + { + exporterConfig = { + enable = true; + }; + metricProvider.services.redis.servers."".enable = true; + exporterTest = '' + wait_for_unit("redis.service") + wait_for_unit("prometheus-redis-exporter.service") + wait_for_open_port(6379) + wait_for_open_port(9121) + wait_until_succeeds("curl -sSf localhost:9121/metrics | grep 'redis_up 1'") + ''; }; - metricProvider.services.redis.servers."".enable = true; - exporterTest = '' - wait_for_unit("redis.service") - wait_for_unit("prometheus-redis-exporter.service") - wait_for_open_port(6379) - wait_for_open_port(9121) - wait_until_succeeds("curl -sSf localhost:9121/metrics | grep 'redis_up 1'") - ''; - }; restic = + { pkgs, ... }: let repository = "rest:http://127.0.0.1:8000"; passwordFile = pkgs.writeText "restic-test-password" "test-password"; @@ -1437,501 +1514,540 @@ let ''; }; - rspamd = { - exporterConfig = { - enable = true; - }; - metricProvider = { - services.rspamd.enable = true; - }; - exporterTest = '' - wait_for_unit("rspamd.service") - wait_for_unit("prometheus-rspamd-exporter.service") - wait_for_open_port(11334) - wait_for_open_port(7980) - wait_until_succeeds( - "curl -sSf 'localhost:7980/probe?target=http://localhost:11334/stat' | grep 'rspamd_scanned{host=\"rspamd\"} 0'" - ) - ''; - }; - - rtl_433 = { - exporterConfig = { - enable = true; - }; - metricProvider = { - # Mock rtl_433 binary to return a dummy metric stream. - nixpkgs.overlays = [ - (self: super: { - rtl_433 = self.runCommand "rtl_433" { } '' - mkdir -p "$out/bin" - cat < "$out/bin/rtl_433" - #!/bin/sh - while true; do - printf '{"time" : "2020-04-26 13:37:42", "model" : "zopieux", "id" : 55, "channel" : 3, "temperature_C" : 18.000}\n' - sleep 4 - done - EOF - chmod +x "$out/bin/rtl_433" - ''; - }) - ]; - }; - exporterTest = '' - wait_for_unit("prometheus-rtl_433-exporter.service") - wait_for_open_port(9550) - wait_until_succeeds( - "curl -sSf localhost:9550/metrics | grep '{}'".format( - 'rtl_433_temperature_celsius{channel="3",id="55",location="",model="zopieux"} 18' - ) - ) - ''; - }; - - sabnzbd = { - exporterConfig = { - enable = true; - servers = [ - { - baseUrl = "http://localhost:8080"; - apiKeyFile = "/var/sabnzbd-apikey"; - } - ]; - }; - - metricProvider = { - services.sabnzbd.enable = true; - - # extract the generated api key before starting - systemd.services.sabnzbd-apikey = { - requires = [ "sabnzbd.service" ]; - after = [ "sabnzbd.service" ]; - requiredBy = [ "prometheus-sabnzbd-exporter.service" ]; - before = [ "prometheus-sabnzbd-exporter.service" ]; - script = '' - grep -Po '^api_key = \K.+' /var/lib/sabnzbd/sabnzbd.ini > /var/sabnzbd-apikey - ''; - }; - }; - - exporterTest = '' - wait_for_unit("sabnzbd.service") - wait_for_unit("prometheus-sabnzbd-exporter.service") - wait_for_open_port(8080) - wait_for_open_port(9387) - wait_until_succeeds( - "curl -sSf 'localhost:9387/metrics' | grep 'sabnzbd_queue_size{sabnzbd_instance=\"http://localhost:8080\"} 0.0'" - ) - ''; - }; - - scaphandre = { - exporterConfig = { - enable = true; - }; - metricProvider = { - boot.kernelModules = [ "intel_rapl_common" ]; - }; - exporterTest = '' - wait_for_unit("prometheus-scaphandre-exporter.service") - wait_for_open_port(8080) - wait_until_succeeds( - "curl -sSf 'localhost:8080/metrics'" - ) - ''; - }; - - shelly = { - exporterConfig = { - enable = true; - metrics-file = "${pkgs.writeText "test.json" ''{}''}"; - }; - exporterTest = '' - wait_for_unit("prometheus-shelly-exporter.service") - wait_for_open_port(9784) - wait_until_succeeds( - "curl -sSf 'localhost:9784/metrics'" - ) - ''; - }; - - script = { - exporterConfig = { - enable = true; - settings.scripts = [ - { - name = "success"; - command = [ "sleep" ]; - args = [ "1" ]; - } - ]; - }; - exporterTest = '' - wait_for_unit("prometheus-script-exporter.service") - wait_for_open_port(9172) - wait_until_succeeds( - "curl -sSf 'localhost:9172/probe?script=success' | grep -q '{}'".format( - 'script_success{script="success"} 1' - ) - ) - ''; - }; - - smartctl = { - exporterConfig = { - enable = true; - devices = [ - "/dev/vda" - ]; - }; - exporterTest = '' - wait_until_succeeds( - 'journalctl -eu prometheus-smartctl-exporter.service -o cat | grep "Unable to detect device type"' - ) - ''; - }; - - smokeping = { - exporterConfig = { - enable = true; - hosts = [ "127.0.0.1" ]; - }; - exporterTest = '' - wait_for_unit("prometheus-smokeping-exporter.service") - wait_for_open_port(9374) - wait_until_succeeds( - "curl -sSf localhost:9374/metrics | grep '{}' | grep -v ' 0$'".format( - 'smokeping_requests_total{host="127.0.0.1",ip="127.0.0.1",source="",tos="0"} ' - ) - ) - wait_until_succeeds( - "curl -sSf localhost:9374/metrics | grep '{}'".format( - 'smokeping_response_ttl{host="127.0.0.1",ip="127.0.0.1",source="",tos="0"}' - ) - ) - ''; - }; - - storagebox = { - exporterConfig = { - enable = true; - tokenFile = "/tmp/faketoken"; - }; - exporterTest = '' - succeed( - 'echo faketoken > /tmp/faketoken' - ) - wait_for_unit("prometheus-storagebox-exporter.service") - wait_for_open_port(9509) - succeed("curl -sSf localhost:9509/metrics | grep 'process_open_fds'") - ''; - }; - - snmp = { - exporterConfig = { - enable = true; - configuration = { - auths.public_v2 = { - community = "public"; - version = 2; - }; - }; - }; - exporterTest = '' - wait_for_unit("prometheus-snmp-exporter.service") - wait_for_open_port(9116) - succeed("curl -sSf localhost:9116/metrics | grep 'snmp_request_errors_total 0'") - ''; - }; - - sql = { - exporterConfig = { - configuration.jobs.points = { - interval = "1m"; - connections = [ - "postgres://prometheus-sql-exporter@/data?host=/run/postgresql&sslmode=disable" - ]; - queries = { - points = { - labels = [ "name" ]; - help = "Amount of points accumulated per person"; - values = [ "amount" ]; - query = "SELECT SUM(amount) as amount, name FROM points GROUP BY name"; - }; - }; - }; - enable = true; - user = "prometheus-sql-exporter"; - }; - metricProvider = { - services.postgresql = { + rspamd = + { ... }: + { + exporterConfig = { enable = true; - initialScript = builtins.toFile "init.sql" '' - CREATE DATABASE data; - \c data; - CREATE TABLE points (amount INT, name TEXT); - INSERT INTO points(amount, name) VALUES (1, 'jack'); - INSERT INTO points(amount, name) VALUES (2, 'jill'); - INSERT INTO points(amount, name) VALUES (3, 'jack'); - - CREATE USER "prometheus-sql-exporter"; - GRANT ALL PRIVILEGES ON DATABASE data TO "prometheus-sql-exporter"; - GRANT SELECT ON points TO "prometheus-sql-exporter"; - ''; }; - systemd.services.prometheus-sql-exporter.after = [ "postgresql.target" ]; - }; - exporterTest = '' - wait_for_unit("prometheus-sql-exporter.service") - wait_for_open_port(9237) - succeed("curl http://localhost:9237/metrics | grep -c 'sql_points{' | grep 2") - ''; - }; - - statsd = { - exporterConfig = { - enable = true; - }; - exporterTest = '' - wait_for_unit("prometheus-statsd-exporter.service") - wait_for_open_port(9102) - succeed("curl http://localhost:9102/metrics | grep 'statsd_exporter_build_info{'") - wait_until_succeeds( - "echo 'test.udp:1|c' > /dev/udp/localhost/9125 && \ - curl http://localhost:9102/metrics | grep 'test_udp 1'", - timeout=10 - ) - wait_until_succeeds( - "echo 'test.tcp:1|c' > /dev/tcp/localhost/9125 && \ - curl http://localhost:9102/metrics | grep 'test_tcp 1'", - timeout=10 - ) - ''; - }; - - surfboard = { - exporterConfig = { - enable = true; - modemAddress = "localhost"; - }; - metricProvider = { - systemd.services.prometheus-surfboard-exporter.after = [ "nginx.service" ]; - services.nginx = { - enable = true; - virtualHosts.localhost.locations."/cgi-bin/status".extraConfig = '' - return 204; - ''; + metricProvider = { + services.rspamd.enable = true; }; - }; - exporterTest = '' - wait_for_unit("nginx.service") - wait_for_open_port(80) - wait_for_unit("prometheus-surfboard-exporter.service") - wait_for_open_port(9239) - succeed("curl -sSf localhost:9239/metrics | grep 'surfboard_up 1'") - ''; - }; - - systemd = { - exporterConfig = { - enable = true; - - extraFlags = [ - "--systemd.collector.enable-restart-count" - ]; - }; - metricProvider = { }; - exporterTest = '' - wait_for_unit("prometheus-systemd-exporter.service") - wait_for_open_port(9558) - wait_until_succeeds( - "curl -sSf localhost:9558/metrics | grep '{}'".format( - 'systemd_unit_state{name="basic.target",state="active",type="target"} 1' - ) - ) - succeed( - "curl -sSf localhost:9558/metrics | grep '{}'".format( - 'systemd_service_restart_total{name="prometheus-systemd-exporter.service"} 0' - ) - ) - ''; - }; - - tailscale = { - exporterConfig = { - package = pkgs.prometheus-tailscale-exporter.overrideAttrs { - patches = [ - # This patch prevents the exporter from exiting immediately upon - # startup when no credentials are provided, which is useful for - # testing the NixOS module. - (pkgs.writeText "allow-running-without-credentials" '' - diff --git a/cmd/tailscale-exporter/root.go b/cmd/tailscale-exporter/root.go - index 2ff11cb..2fb576f 100644 - --- a/cmd/tailscale-exporter/root.go - +++ b/cmd/tailscale-exporter/root.go - @@ -137,14 +137,6 @@ func runExporter(cmd *cobra.Command, args []string) error { - ''\t// Create HTTP client that automatically handles token refresh - ''\thttpClient := oauthConfig.Client(context.Background()) - - -''\t// Test OAuth token generation - -''\ttoken, err := oauthConfig.Token(context.Background()) - -''\tif err != nil { - -''\t''\treturn fmt.Errorf("failed to obtain OAuth token: %w", err) - -''\t} - -''\tlogger.Info("OAuth token obtained", "token_type", token.TokenType) - -''\tlogger.Info("Successfully obtained OAuth token", "expires", token.Expiry) - - - ''\t// Default labels for all metrics - ''\tdefaultLabels := prometheus.Labels{"tailnet": tailnet} - ''\treg := prometheus.WrapRegistererWith( - '') - ]; - }; - enable = true; - environmentFile = pkgs.writeText "tailscale-exporter-env" '' - TAILSCALE_OAUTH_CLIENT_ID=12345678 - TAILSCALE_OAUTH_CLIENT_SECRET=12345678 - TAILSCALE_TAILNET=example.com + exporterTest = '' + wait_for_unit("rspamd.service") + wait_for_unit("prometheus-rspamd-exporter.service") + wait_for_open_port(11334) + wait_for_open_port(7980) + wait_until_succeeds( + "curl -sSf 'localhost:7980/probe?target=http://localhost:11334/stat' | grep 'rspamd_scanned{host=\"rspamd\"} 0'" + ) ''; }; - exporterTest = '' - wait_for_unit("prometheus-tailscale-exporter.service") - wait_for_open_port(9250) - succeed("curl -sSf localhost:9250/metrics | grep 'tailscale_up{tailnet=\"example.com\"} 1'") - ''; - }; - - unpoller = { - nodeName = "unpoller"; - exporterConfig.enable = true; - exporterConfig.controllers = [ { } ]; - exporterTest = '' - wait_until_succeeds( - 'journalctl -eu prometheus-unpoller-exporter.service -o cat | grep "Connection Error"' - ) - ''; - }; - - unbound = { - exporterConfig = { - enable = true; - unbound.host = "unix:///run/unbound/unbound.ctl"; - }; - metricProvider = { - services.unbound = { + rtl_433 = + { ... }: + { + pkgsReadOnly = false; + exporterConfig = { enable = true; - localControlSocketPath = "/run/unbound/unbound.ctl"; }; - systemd.services.prometheus-unbound-exporter.serviceConfig = { - SupplementaryGroups = [ "unbound" ]; + metricProvider = { + # Mock rtl_433 binary to return a dummy metric stream. + nixpkgs.overlays = [ + (self: super: { + rtl_433 = self.runCommand "rtl_433" { } '' + mkdir -p "$out/bin" + cat < "$out/bin/rtl_433" + #!/bin/sh + while true; do + printf '{"time" : "2020-04-26 13:37:42", "model" : "zopieux", "id" : 55, "channel" : 3, "temperature_C" : 18.000}\n' + sleep 4 + done + EOF + chmod +x "$out/bin/rtl_433" + ''; + }) + ]; }; - }; - exporterTest = '' - wait_for_unit("unbound.service") - wait_for_unit("prometheus-unbound-exporter.service") - wait_for_open_port(9167) - wait_until_succeeds("curl -sSf localhost:9167/metrics | grep 'unbound_up 1'") - ''; - }; - - v2ray = { - exporterConfig = { - enable = true; + exporterTest = '' + wait_for_unit("prometheus-rtl_433-exporter.service") + wait_for_open_port(9550) + wait_until_succeeds( + "curl -sSf localhost:9550/metrics | grep '{}'".format( + 'rtl_433_temperature_celsius{channel="3",id="55",location="",model="zopieux"} 18' + ) + ) + ''; }; - metricProvider = { - systemd.services.prometheus-nginx-exporter.after = [ "v2ray.service" ]; - services.v2ray = { + sabnzbd = + { ... }: + { + exporterConfig = { enable = true; - config = { - stats = { }; - api = { - tag = "api"; - services = [ "StatsService" ]; + servers = [ + { + baseUrl = "http://localhost:8080"; + apiKeyFile = "/var/sabnzbd-apikey"; + } + ]; + }; + + metricProvider = { + services.sabnzbd.enable = true; + + # extract the generated api key before starting + systemd.services.sabnzbd-apikey = { + requires = [ "sabnzbd.service" ]; + after = [ "sabnzbd.service" ]; + requiredBy = [ "prometheus-sabnzbd-exporter.service" ]; + before = [ "prometheus-sabnzbd-exporter.service" ]; + script = '' + grep -Po '^api_key = \K.+' /var/lib/sabnzbd/sabnzbd.ini > /var/sabnzbd-apikey + ''; + }; + }; + + exporterTest = '' + wait_for_unit("sabnzbd.service") + wait_for_unit("prometheus-sabnzbd-exporter.service") + wait_for_open_port(8080) + wait_for_open_port(9387) + wait_until_succeeds( + "curl -sSf 'localhost:9387/metrics' | grep 'sabnzbd_queue_size{sabnzbd_instance=\"http://localhost:8080\"} 0.0'" + ) + ''; + }; + + scaphandre = + { ... }: + { + exporterConfig = { + enable = true; + }; + metricProvider = { + boot.kernelModules = [ "intel_rapl_common" ]; + }; + exporterTest = '' + wait_for_unit("prometheus-scaphandre-exporter.service") + wait_for_open_port(8080) + wait_until_succeeds( + "curl -sSf 'localhost:8080/metrics'" + ) + ''; + }; + + shelly = + { pkgs, ... }: + { + exporterConfig = { + enable = true; + metrics-file = "${pkgs.writeText "test.json" ''{}''}"; + }; + exporterTest = '' + wait_for_unit("prometheus-shelly-exporter.service") + wait_for_open_port(9784) + wait_until_succeeds( + "curl -sSf 'localhost:9784/metrics'" + ) + ''; + }; + + script = + { ... }: + { + exporterConfig = { + enable = true; + settings.scripts = [ + { + name = "success"; + command = [ "sleep" ]; + args = [ "1" ]; + } + ]; + }; + exporterTest = '' + wait_for_unit("prometheus-script-exporter.service") + wait_for_open_port(9172) + wait_until_succeeds( + "curl -sSf 'localhost:9172/probe?script=success' | grep -q '{}'".format( + 'script_success{script="success"} 1' + ) + ) + ''; + }; + + smartctl = + { ... }: + { + exporterConfig = { + enable = true; + devices = [ + "/dev/vda" + ]; + }; + exporterTest = '' + wait_until_succeeds( + 'journalctl -eu prometheus-smartctl-exporter.service -o cat | grep "Unable to detect device type"' + ) + ''; + }; + + smokeping = + { ... }: + { + exporterConfig = { + enable = true; + hosts = [ "127.0.0.1" ]; + }; + exporterTest = '' + wait_for_unit("prometheus-smokeping-exporter.service") + wait_for_open_port(9374) + wait_until_succeeds( + "curl -sSf localhost:9374/metrics | grep '{}' | grep -v ' 0$'".format( + 'smokeping_requests_total{host="127.0.0.1",ip="127.0.0.1",source="",tos="0"} ' + ) + ) + wait_until_succeeds( + "curl -sSf localhost:9374/metrics | grep '{}'".format( + 'smokeping_response_ttl{host="127.0.0.1",ip="127.0.0.1",source="",tos="0"}' + ) + ) + ''; + }; + + storagebox = + { ... }: + { + exporterConfig = { + enable = true; + tokenFile = "/tmp/faketoken"; + }; + exporterTest = '' + succeed( + 'echo faketoken > /tmp/faketoken' + ) + wait_for_unit("prometheus-storagebox-exporter.service") + wait_for_open_port(9509) + succeed("curl -sSf localhost:9509/metrics | grep 'process_open_fds'") + ''; + }; + + snmp = + { ... }: + { + exporterConfig = { + enable = true; + configuration = { + auths.public_v2 = { + community = "public"; + version = 2; }; - inbounds = [ - { - port = 1080; - listen = "127.0.0.1"; - protocol = "http"; - } - { - listen = "127.0.0.1"; - port = 54321; - protocol = "dokodemo-door"; + }; + }; + exporterTest = '' + wait_for_unit("prometheus-snmp-exporter.service") + wait_for_open_port(9116) + succeed("curl -sSf localhost:9116/metrics | grep 'snmp_request_errors_total 0'") + ''; + }; + + sql = + { ... }: + { + exporterConfig = { + configuration.jobs.points = { + interval = "1m"; + connections = [ + "postgres://prometheus-sql-exporter@/data?host=/run/postgresql&sslmode=disable" + ]; + queries = { + points = { + labels = [ "name" ]; + help = "Amount of points accumulated per person"; + values = [ "amount" ]; + query = "SELECT SUM(amount) as amount, name FROM points GROUP BY name"; + }; + }; + }; + enable = true; + user = "prometheus-sql-exporter"; + }; + metricProvider = { + services.postgresql = { + enable = true; + initialScript = builtins.toFile "init.sql" '' + CREATE DATABASE data; + \c data; + CREATE TABLE points (amount INT, name TEXT); + INSERT INTO points(amount, name) VALUES (1, 'jack'); + INSERT INTO points(amount, name) VALUES (2, 'jill'); + INSERT INTO points(amount, name) VALUES (3, 'jack'); + + CREATE USER "prometheus-sql-exporter"; + GRANT ALL PRIVILEGES ON DATABASE data TO "prometheus-sql-exporter"; + GRANT SELECT ON points TO "prometheus-sql-exporter"; + ''; + }; + systemd.services.prometheus-sql-exporter.after = [ "postgresql.target" ]; + }; + exporterTest = '' + wait_for_unit("prometheus-sql-exporter.service") + wait_for_open_port(9237) + succeed("curl http://localhost:9237/metrics | grep -c 'sql_points{' | grep 2") + ''; + }; + + statsd = + { ... }: + { + exporterConfig = { + enable = true; + }; + exporterTest = '' + wait_for_unit("prometheus-statsd-exporter.service") + wait_for_open_port(9102) + succeed("curl http://localhost:9102/metrics | grep 'statsd_exporter_build_info{'") + wait_until_succeeds( + "echo 'test.udp:1|c' > /dev/udp/localhost/9125 && \ + curl http://localhost:9102/metrics | grep 'test_udp 1'", + timeout=10 + ) + wait_until_succeeds( + "echo 'test.tcp:1|c' > /dev/tcp/localhost/9125 && \ + curl http://localhost:9102/metrics | grep 'test_tcp 1'", + timeout=10 + ) + ''; + }; + + surfboard = + { ... }: + { + exporterConfig = { + enable = true; + modemAddress = "localhost"; + }; + metricProvider = { + systemd.services.prometheus-surfboard-exporter.after = [ "nginx.service" ]; + services.nginx = { + enable = true; + virtualHosts.localhost.locations."/cgi-bin/status".extraConfig = '' + return 204; + ''; + }; + }; + exporterTest = '' + wait_for_unit("nginx.service") + wait_for_open_port(80) + wait_for_unit("prometheus-surfboard-exporter.service") + wait_for_open_port(9239) + succeed("curl -sSf localhost:9239/metrics | grep 'surfboard_up 1'") + ''; + }; + + systemd = + { ... }: + { + exporterConfig = { + enable = true; + + extraFlags = [ + "--systemd.collector.enable-restart-count" + ]; + }; + metricProvider = { }; + exporterTest = '' + wait_for_unit("prometheus-systemd-exporter.service") + wait_for_open_port(9558) + wait_until_succeeds( + "curl -sSf localhost:9558/metrics | grep '{}'".format( + 'systemd_unit_state{name="basic.target",state="active",type="target"} 1' + ) + ) + succeed( + "curl -sSf localhost:9558/metrics | grep '{}'".format( + 'systemd_service_restart_total{name="prometheus-systemd-exporter.service"} 0' + ) + ) + ''; + }; + + tailscale = + { pkgs, ... }: + { + exporterConfig = { + package = pkgs.prometheus-tailscale-exporter.overrideAttrs { + patches = [ + # This patch prevents the exporter from exiting immediately upon + # startup when no credentials are provided, which is useful for + # testing the NixOS module. + (pkgs.writeText "allow-running-without-credentials" '' + diff --git a/cmd/tailscale-exporter/root.go b/cmd/tailscale-exporter/root.go + index 2ff11cb..2fb576f 100644 + --- a/cmd/tailscale-exporter/root.go + +++ b/cmd/tailscale-exporter/root.go + @@ -137,14 +137,6 @@ func runExporter(cmd *cobra.Command, args []string) error { + ''\t// Create HTTP client that automatically handles token refresh + ''\thttpClient := oauthConfig.Client(context.Background()) + + -''\t// Test OAuth token generation + -''\ttoken, err := oauthConfig.Token(context.Background()) + -''\tif err != nil { + -''\t''\treturn fmt.Errorf("failed to obtain OAuth token: %w", err) + -''\t} + -''\tlogger.Info("OAuth token obtained", "token_type", token.TokenType) + -''\tlogger.Info("Successfully obtained OAuth token", "expires", token.Expiry) + - + ''\t// Default labels for all metrics + ''\tdefaultLabels := prometheus.Labels{"tailnet": tailnet} + ''\treg := prometheus.WrapRegistererWith( + '') + ]; + }; + enable = true; + environmentFile = pkgs.writeText "tailscale-exporter-env" '' + TAILSCALE_OAUTH_CLIENT_ID=12345678 + TAILSCALE_OAUTH_CLIENT_SECRET=12345678 + TAILSCALE_TAILNET=example.com + ''; + }; + + exporterTest = '' + wait_for_unit("prometheus-tailscale-exporter.service") + wait_for_open_port(9250) + succeed("curl -sSf localhost:9250/metrics | grep 'tailscale_up{tailnet=\"example.com\"} 1'") + ''; + }; + + unpoller = + { ... }: + { + nodeName = "unpoller"; + exporterConfig.enable = true; + exporterConfig.controllers = [ { } ]; + exporterTest = '' + wait_until_succeeds( + 'journalctl -eu prometheus-unpoller-exporter.service -o cat | grep "Connection Error"' + ) + ''; + }; + + unbound = + { ... }: + { + exporterConfig = { + enable = true; + unbound.host = "unix:///run/unbound/unbound.ctl"; + }; + metricProvider = { + services.unbound = { + enable = true; + localControlSocketPath = "/run/unbound/unbound.ctl"; + }; + systemd.services.prometheus-unbound-exporter.serviceConfig = { + SupplementaryGroups = [ "unbound" ]; + }; + }; + exporterTest = '' + wait_for_unit("unbound.service") + wait_for_unit("prometheus-unbound-exporter.service") + wait_for_open_port(9167) + wait_until_succeeds("curl -sSf localhost:9167/metrics | grep 'unbound_up 1'") + ''; + }; + + v2ray = + { ... }: + { + exporterConfig = { + enable = true; + }; + + metricProvider = { + systemd.services.prometheus-nginx-exporter.after = [ "v2ray.service" ]; + services.v2ray = { + enable = true; + config = { + stats = { }; + api = { + tag = "api"; + services = [ "StatsService" ]; + }; + inbounds = [ + { + port = 1080; + listen = "127.0.0.1"; + protocol = "http"; + } + { + listen = "127.0.0.1"; + port = 54321; + protocol = "dokodemo-door"; + settings = { + address = "127.0.0.1"; + }; + tag = "api"; + } + ]; + outbounds = [ + { + protocol = "freedom"; + } + { + protocol = "freedom"; + settings = { }; + tag = "api"; + } + ]; + routing = { + strategy = "rules"; settings = { - address = "127.0.0.1"; + rules = [ + { + inboundTag = [ "api" ]; + outboundTag = "api"; + type = "field"; + } + ]; }; - tag = "api"; - } - ]; - outbounds = [ - { - protocol = "freedom"; - } - { - protocol = "freedom"; - settings = { }; - tag = "api"; - } - ]; - routing = { - strategy = "rules"; - settings = { - rules = [ - { - inboundTag = [ "api" ]; - outboundTag = "api"; - type = "field"; - } - ]; }; }; }; }; + exporterTest = '' + wait_for_unit("prometheus-v2ray-exporter.service") + wait_for_open_port(9299) + succeed("curl -sSf localhost:9299/scrape | grep 'v2ray_up 1'") + ''; }; - exporterTest = '' - wait_for_unit("prometheus-v2ray-exporter.service") - wait_for_open_port(9299) - succeed("curl -sSf localhost:9299/scrape | grep 'v2ray_up 1'") - ''; - }; - varnish = { - exporterConfig = { - enable = true; - instance = "/run/varnish/varnish"; - group = "varnish"; - }; - metricProvider = { - systemd.services.prometheus-varnish-exporter.after = [ - "varnish.service" - ]; - services.varnish = { + varnish = + { ... }: + { + exporterConfig = { enable = true; - stateDir = "/run/varnish/varnish"; - config = '' - vcl 4.0; - backend default { - .host = "127.0.0.1"; - .port = "80"; - } - ''; + instance = "/run/varnish/varnish"; + group = "varnish"; }; + metricProvider = { + systemd.services.prometheus-varnish-exporter.after = [ + "varnish.service" + ]; + services.varnish = { + enable = true; + config = '' + vcl 4.0; + backend default { + .host = "127.0.0.1"; + .port = "80"; + } + ''; + }; + }; + exporterTest = '' + wait_for_unit("prometheus-varnish-exporter.service") + wait_for_open_port(6081) + wait_for_open_port(9131) + succeed("curl -sSf http://localhost:9131/metrics | grep 'varnish_up 1'") + ''; }; - exporterTest = '' - wait_for_unit("prometheus-varnish-exporter.service") - wait_for_open_port(6081) - wait_for_open_port(9131) - succeed("curl -sSf http://localhost:9131/metrics | grep 'varnish_up 1'") - ''; - }; wireguard = + { pkgs, lib, ... }: let snakeoil = import ./wireguard/snakeoil-keys.nix; - publicKeyWithoutNewlines = replaceStrings [ "\n" ] [ "" ] snakeoil.peer1.publicKey; + publicKeyWithoutNewlines = lib.replaceStrings [ "\n" ] [ "" ] snakeoil.peer1.publicKey; in { exporterConfig.enable = true; @@ -1945,7 +2061,7 @@ let inherit (snakeoil.peer0) privateKey; - peers = singleton { + peers = lib.singleton { allowedIPs = [ "10.23.42.2/32" "fc00::2/128" @@ -1965,34 +2081,38 @@ let ''; }; - zfs = { - exporterConfig = { - enable = true; + zfs = + { ... }: + { + exporterConfig = { + enable = true; + }; + metricProvider = { + boot.supportedFilesystems = [ "zfs" ]; + networking.hostId = "7327ded7"; + }; + exporterTest = '' + wait_for_unit("prometheus-zfs-exporter.service") + wait_for_unit("zfs.target") + wait_for_open_port(9134) + wait_until_succeeds("curl -f localhost:9134/metrics | grep 'zfs_scrape_collector_success{.*} 1'") + ''; }; - metricProvider = { - boot.supportedFilesystems = [ "zfs" ]; - networking.hostId = "7327ded7"; - }; - exporterTest = '' - wait_for_unit("prometheus-zfs-exporter.service") - wait_for_unit("zfs.target") - wait_for_open_port(9134) - wait_until_succeeds("curl -f localhost:9134/metrics | grep 'zfs_scrape_collector_success{.*} 1'") - ''; - }; }; in -mapAttrs ( - exporter: testConfig: - (makeTest ( +lib.mapAttrs ( + exporter: testConfigFun: + (runTest ( + { pkgs, lib, ... }: let + testConfig = testConfigFun { inherit pkgs lib; }; nodeName = testConfig.nodeName or exporter; - in { name = "prometheus-${exporter}-exporter"; + node.pkgsReadOnly = testConfig.pkgsReadOnly or true; - nodes.${nodeName} = mkMerge [ + nodes.${nodeName} = lib.mkMerge [ { services.prometheus.exporters.${exporter} = testConfig.exporterConfig; } @@ -2001,7 +2121,7 @@ mapAttrs ( testScript = '' ${nodeName}.start() - ${concatStringsSep "\n" ( + ${lib.concatStringsSep "\n" ( map ( line: if @@ -2015,7 +2135,7 @@ mapAttrs ( line else "${nodeName}.${line}" - ) (splitString "\n" (removeSuffix "\n" testConfig.exporterTest)) + ) (lib.splitString "\n" (lib.removeSuffix "\n" testConfig.exporterTest)) )} ${nodeName}.shutdown() ''; From ec6a9ab21444b89712a9c0875b1459be398ddc6b Mon Sep 17 00:00:00 2001 From: r-vdp Date: Mon, 22 Dec 2025 20:24:11 +0200 Subject: [PATCH 22/61] nixos/prometheus-exporters-deluge: replace activation script by LoadCredential --- .../monitoring/prometheus/exporters.nix | 10 ---------- .../prometheus/exporters/deluge.nix | 19 +++++++++++++------ 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/nixos/modules/services/monitoring/prometheus/exporters.nix b/nixos/modules/services/monitoring/prometheus/exporters.nix index c387bf06c8f6..6898c8107be6 100644 --- a/nixos/modules/services/monitoring/prometheus/exporters.nix +++ b/nixos/modules/services/monitoring/prometheus/exporters.nix @@ -571,16 +571,6 @@ in services.prometheus.exporters.postfix.group = mkDefault config.services.postfix.setgidGroup; }) ] - ++ [ - (mkIf config.services.prometheus.exporters.deluge.enable { - system.activationScripts = { - deluge-exported.text = '' - mkdir -p /etc/deluge-exporter - echo "DELUGE_PASSWORD=$(cat ${config.services.prometheus.exporters.deluge.delugePasswordFile})" > /etc/deluge-exporter/password - ''; - }; - }) - ] ++ (mapAttrsToList ( name: conf: mkExporterConf { diff --git a/nixos/modules/services/monitoring/prometheus/exporters/deluge.nix b/nixos/modules/services/monitoring/prometheus/exporters/deluge.nix index 5297bcd089f5..939d2bcf3b7b 100644 --- a/nixos/modules/services/monitoring/prometheus/exporters/deluge.nix +++ b/nixos/modules/services/monitoring/prometheus/exporters/deluge.nix @@ -68,10 +68,20 @@ in }; }; serviceOpts = { + script = '' + passwordfile="$CREDENTIALS_DIRECTORY/password-file" + if [ -e "$passwordfile" ]; then + export DELUGE_PASSWORD="$(cat "$passwordfile")" + fi + + exec ${pkgs.prometheus-deluge-exporter}/bin/deluge-exporter + ''; + serviceConfig = { - ExecStart = '' - ${pkgs.prometheus-deluge-exporter}/bin/deluge-exporter - ''; + LoadCredential = lib.mkIf (config.services.prometheus.exporters.deluge.delugePasswordFile != null) [ + "password-file:${config.services.prometheus.exporters.deluge.delugePasswordFile}" + ]; + Environment = [ "LISTEN_PORT=${toString cfg.port}" "LISTEN_ADDRESS=${toString cfg.listenAddress}" @@ -86,9 +96,6 @@ in ++ lib.optionals cfg.exportPerTorrentMetrics [ "PER_TORRENT_METRICS=1" ]; - EnvironmentFile = lib.optionalString ( - cfg.delugePasswordFile != null - ) "/etc/deluge-exporter/password"; }; }; } From 297da4a3ff93b73b6a686e6814799e37a5aa071c Mon Sep 17 00:00:00 2001 From: Vikingnope Date: Mon, 22 Dec 2025 23:16:10 +0100 Subject: [PATCH 23/61] vscode: add hicolor icon --- pkgs/applications/editors/vscode/generic.nix | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/editors/vscode/generic.nix b/pkgs/applications/editors/vscode/generic.nix index 3d2c931a4591..1c22a86b7dac 100644 --- a/pkgs/applications/editors/vscode/generic.nix +++ b/pkgs/applications/editors/vscode/generic.nix @@ -57,6 +57,7 @@ ripgrep, hasVsceSign ? false, patchVSCodePath ? true, + imagemagick, }: stdenv.mkDerivation ( @@ -249,6 +250,7 @@ stdenv.mkDerivation ( nativeBuildInputs = [ unzip + imagemagick ] ++ lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook @@ -289,7 +291,13 @@ stdenv.mkDerivation ( # These are named vscode.png, vscode-insiders.png, etc to match the name in upstream *.deb packages. + '' mkdir -p "$out/share/pixmaps" - cp "$out/lib/${libraryName}/resources/app/resources/linux/code.png" "$out/share/pixmaps/${iconName}.png" + icon_file="$out/lib/${libraryName}/resources/app/resources/linux/code.png" + cp "$icon_file" "$out/share/pixmaps/${iconName}.png" + + # Dynamically determine size of icon and place in appropriate directory + size=$(identify -format "%wx%h" "$icon_file") + mkdir -p "$out/share/icons/hicolor/$size/apps" + cp "$icon_file" "$out/share/icons/hicolor/$size/apps/${iconName}.png" '' ) # Override the previously determined VSCODE_PATH with the one we know to be correct From 5bd4d79918a4bb2945810b7577b5fb0e36595621 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Tue, 23 Dec 2025 20:48:00 +0000 Subject: [PATCH 24/61] tana: 1.0.51 -> 1.498.21 --- pkgs/by-name/ta/tana/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ta/tana/package.nix b/pkgs/by-name/ta/tana/package.nix index e83ec371dd6f..71a6a3651898 100644 --- a/pkgs/by-name/ta/tana/package.nix +++ b/pkgs/by-name/ta/tana/package.nix @@ -62,7 +62,7 @@ let stdenv.cc.cc stdenv.cc.libc ]; - version = "1.0.51"; + version = "1.498.21"; in stdenv.mkDerivation { pname = "tana"; @@ -70,7 +70,7 @@ stdenv.mkDerivation { src = fetchurl { url = "https://github.com/tanainc/tana-desktop-releases/releases/download/v${version}/tana_${version}_amd64.deb"; - hash = "sha256-ApRfy+aD4lp53HtShDTQGKuAsQnKdwFMDd19Np9/b9g="; + hash = "sha256-6rX6UxOdSk29SYLwyVX6zkLuIxeKVfQfap1Q2zGpN7g="; }; nativeBuildInputs = [ From 912eac21db924bd34e142bd6c86aa2964f8addd4 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Tue, 23 Dec 2025 23:41:06 +0000 Subject: [PATCH 25/61] talosctl: 1.11.6 -> 1.12.0 --- pkgs/by-name/ta/talosctl/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ta/talosctl/package.nix b/pkgs/by-name/ta/talosctl/package.nix index 66166e727b2b..1f37100c9fbe 100644 --- a/pkgs/by-name/ta/talosctl/package.nix +++ b/pkgs/by-name/ta/talosctl/package.nix @@ -9,16 +9,16 @@ buildGoModule rec { pname = "talosctl"; - version = "1.11.6"; + version = "1.12.0"; src = fetchFromGitHub { owner = "siderolabs"; repo = "talos"; tag = "v${version}"; - hash = "sha256-RPmveQ52PqpD/OG/7SsJbKlZjggRU8uBqJyNmOszWtg="; + hash = "sha256-u8/T01PWBGH3bJCNoC+FIzp8aH05ci4Kr3eHHWPDRkI="; }; - vendorHash = "sha256-tGlGlTMIsBLQGvIYU/zEE0devM0j31ER8L8hacXvTz4="; + vendorHash = "sha256-LLtbdKq028EEs8lMt3uiwMo2KMJ6nJKf6xFyLJlg+oM="; ldflags = [ "-s" From a192fc21ebd76b0eec5b2fa9d5fc69c68ffd14b6 Mon Sep 17 00:00:00 2001 From: rvveber Date: Wed, 24 Dec 2025 19:57:38 +0100 Subject: [PATCH 26/61] untrunc-anthwlock: fix build to use `ffmpeg_6` and improve to use `pkg-config` --- pkgs/by-name/un/untrunc-anthwlock/package.nix | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/un/untrunc-anthwlock/package.nix b/pkgs/by-name/un/untrunc-anthwlock/package.nix index bd9dd27c9868..f18f9df61fe6 100644 --- a/pkgs/by-name/un/untrunc-anthwlock/package.nix +++ b/pkgs/by-name/un/untrunc-anthwlock/package.nix @@ -2,8 +2,9 @@ lib, stdenv, fetchFromGitHub, - ffmpeg, + ffmpeg_6, libui, + pkg-config, unstableGitUpdater, wrapGAppsHook3, }: @@ -19,13 +20,27 @@ stdenv.mkDerivation { hash = "sha256-4GIPj8so7POEwxKZzFBoJTu76XKbGHYmXC/ILeo0dVE="; }; - nativeBuildInputs = [ wrapGAppsHook3 ]; + nativeBuildInputs = [ + pkg-config + wrapGAppsHook3 + ]; buildInputs = [ - ffmpeg + # Uses ffmpeg internals; keep ffmpeg_6 until upstream supports newer API. + # Upstream fix: https://github.com/anthwlock/untrunc/pull/249 + ffmpeg_6 libui ]; + strictDeps = true; + + postPatch = '' + substituteInPlace Makefile \ + --replace "-isystem/usr/include/ffmpeg" "\$(shell pkg-config --cflags libavformat libavcodec libavutil libui)" \ + --replace "-lavformat -lavcodec -lavutil" "\$(shell pkg-config --libs libavformat libavcodec libavutil)" \ + --replace "-lui -lpthread" "\$(shell pkg-config --libs libui) -lpthread" + ''; + buildPhase = '' runHook preBuild make IS_RELEASE=1 untrunc @@ -50,6 +65,7 @@ stdenv.mkDerivation { description = "Restore a truncated mp4/mov (improved version of ponchio/untrunc)"; homepage = "https://github.com/anthwlock/untrunc"; license = lib.licenses.gpl2Only; + mainProgram = "untrunc"; platforms = lib.platforms.all; maintainers = [ lib.maintainers.romildo ]; }; From 507520666470b499cfe13a7541534a530ef4b561 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Thu, 25 Dec 2025 13:29:52 +0000 Subject: [PATCH 27/61] super-productivity: 16.6.1 -> 16.7.3 --- pkgs/by-name/su/super-productivity/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/su/super-productivity/package.nix b/pkgs/by-name/su/super-productivity/package.nix index c0415c7fa169..36849cc31709 100644 --- a/pkgs/by-name/su/super-productivity/package.nix +++ b/pkgs/by-name/su/super-productivity/package.nix @@ -16,13 +16,13 @@ let in buildNpmPackage rec { pname = "super-productivity"; - version = "16.6.1"; + version = "16.7.3"; src = fetchFromGitHub { owner = "johannesjo"; repo = "super-productivity"; tag = "v${version}"; - hash = "sha256-8FTgwyZOc/klAis+h5GG0lb1Rk/tvZpMeLuqWhAL4gI="; + hash = "sha256-nr1umVoOQ9uzswgU16hpcTpaM6W8C3CZMG/O44WFtnw="; postFetch = '' find $out -name package-lock.json -exec ${lib.getExe npm-lockfile-fix} -r {} \; @@ -65,7 +65,7 @@ buildNpmPackage rec { dontInstall = true; outputHashMode = "recursive"; - hash = "sha256-BM1l3V1vDIbm0GGc5pc66Nsx3fqhqZLE9xI+LuI5KWA="; + hash = "sha256-t22mdvx1rJFzXKFscnweggFCqTKheTAzElA4ksUQQ5k="; } ); From bc9ac45c44ea538bcd201e9fd8ebe58e768f60e0 Mon Sep 17 00:00:00 2001 From: Markus Kowalewski Date: Thu, 25 Dec 2025 16:59:47 +0100 Subject: [PATCH 28/61] nfs-ganesha: 9.2 -> 9.4 --- pkgs/by-name/nf/nfs-ganesha/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/nf/nfs-ganesha/package.nix b/pkgs/by-name/nf/nfs-ganesha/package.nix index d2ffb3ee693d..490842c5ecac 100644 --- a/pkgs/by-name/nf/nfs-ganesha/package.nix +++ b/pkgs/by-name/nf/nfs-ganesha/package.nix @@ -25,7 +25,7 @@ stdenv.mkDerivation rec { pname = "nfs-ganesha"; - version = "9.2"; + version = "9.4"; outputs = [ "out" @@ -37,7 +37,7 @@ stdenv.mkDerivation rec { owner = "nfs-ganesha"; repo = "nfs-ganesha"; tag = "V${version}"; - hash = "sha256-2EAkr+zu7Jc2j/8BrJ/+Skv/D3rTSbh4A5JTRhWafEk="; + hash = "sha256-Adax64aaioYfPg7SMtylS2wpYV52l8KgXBA8eJefGkY="; }; patches = lib.optional useDbus ./allow-bypassing-dbus-pkg-config-test.patch; From 26f89190d6decffc32071acf2dc333a84c47f0b9 Mon Sep 17 00:00:00 2001 From: ZHAO Jin-Xiang Date: Mon, 22 Dec 2025 01:35:49 +0800 Subject: [PATCH 29/61] kilocode-cli: init at 0.18.0 --- pkgs/by-name/ki/kilocode-cli/package.nix | 93 ++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 pkgs/by-name/ki/kilocode-cli/package.nix diff --git a/pkgs/by-name/ki/kilocode-cli/package.nix b/pkgs/by-name/ki/kilocode-cli/package.nix new file mode 100644 index 000000000000..2d600ce64577 --- /dev/null +++ b/pkgs/by-name/ki/kilocode-cli/package.nix @@ -0,0 +1,93 @@ +{ + lib, + stdenvNoCC, + fetchFromGitHub, + fetchPnpmDeps, + nodejs, + writableTmpDirAsHomeHook, + pnpmConfigHook, + pnpm, + unzip, + patchelf, + ripgrep, + versionCheckHook, + nix-update-script, +}: +stdenvNoCC.mkDerivation (finalAttrs: { + pname = "kilocode-cli"; + version = "0.18.0"; + + src = fetchFromGitHub { + owner = "Kilo-Org"; + repo = "kilocode"; + tag = "cli-v${finalAttrs.version}"; + hash = "sha256-zEhv/tcKMR9D+aTVxaw3LBjbEBpuy4o0cpV/vowOFSY="; + }; + + pnpmDeps = fetchPnpmDeps { + inherit (finalAttrs) pname version src; + fetcherVersion = 2; + hash = "sha256-fTCuTAEYNyqitBvOafQyi3BDqI/O7u7yEhSPH7FVDUg="; + }; + + buildInputs = [ + nodejs + ]; + + nativeBuildInputs = [ + writableTmpDirAsHomeHook + pnpmConfigHook + pnpm + nodejs + unzip + patchelf + ]; + + strictDeps = true; + + env.npm_config_manage_package_manager_versions = "false"; + + buildPhase = '' + runHook preBuild + + node --run cli:bundle + touch ./cli/dist/.env + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin/ $out/lib/node_modules/@kilocode/ + mv ./cli/dist $out/lib/node_modules/@kilocode/cli + ln -s $out/lib/node_modules/@kilocode/cli/index.js $out/bin/kilocode + chmod +x $out/bin/kilocode + + pushd $out/lib/node_modules/@kilocode/cli + rm node_modules/@vscode/ripgrep/bin/rg + ln -s ${ripgrep}/bin/rg node_modules/@vscode/ripgrep/bin/rg + popd + + runHook postInstall + ''; + + nativeInstallCheckInputs = [ versionCheckHook ]; + doInstallCheck = true; + versionCheckProgramArg = "--version"; + + passthru = { + updateScript = nix-update-script { extraArgs = [ "--version-regex=^cli-v(.+)$" ]; }; + }; + + meta = { + description = "Terminal User Interface for Kilo Code"; + homepage = "https://kilocode.ai/cli"; + downloadPage = "https://www.npmjs.com/package/@kilocode/cli"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ + xiaoxiangmoe + ]; + mainProgram = "kilocode"; + }; +}) From 2e1b3afd512a9b51ae37fe1ce894eb3df2c0bffe Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 26 Dec 2025 21:36:41 +0000 Subject: [PATCH 30/61] python3Packages.simsimd: 6.5.10 -> 6.5.12 --- pkgs/development/python-modules/simsimd/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/simsimd/default.nix b/pkgs/development/python-modules/simsimd/default.nix index 42f6944e0a4f..80a72332edfb 100644 --- a/pkgs/development/python-modules/simsimd/default.nix +++ b/pkgs/development/python-modules/simsimd/default.nix @@ -11,14 +11,14 @@ buildPythonPackage rec { pname = "simsimd"; - version = "6.5.10"; + version = "6.5.12"; pyproject = true; src = fetchFromGitHub { owner = "ashvardanian"; repo = "SimSIMD"; tag = "v${version}"; - hash = "sha256-tiKU8vxcTYA/9J0uUb9Q4NGCDNeBkF/g4PL69rZezCs="; + hash = "sha256-4mgWm4FcTGf9DNc39GOjK9jnyev7hIeODjpnuIz6f1k="; }; build-system = [ From 6126fe7daa3e4715225001cc669c313ea888ef19 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 27 Dec 2025 00:20:43 +0000 Subject: [PATCH 31/61] vacuum-go: 0.21.2 -> 0.21.7 --- pkgs/by-name/va/vacuum-go/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/va/vacuum-go/package.nix b/pkgs/by-name/va/vacuum-go/package.nix index 123a31716b9a..471ce807f6d0 100644 --- a/pkgs/by-name/va/vacuum-go/package.nix +++ b/pkgs/by-name/va/vacuum-go/package.nix @@ -7,17 +7,17 @@ buildGoModule (finalAttrs: { pname = "vacuum-go"; - version = "0.21.2"; + version = "0.21.7"; src = fetchFromGitHub { owner = "daveshanley"; repo = "vacuum"; # using refs/tags because simple version gives: 'the given path has multiple possibilities' error tag = "v${finalAttrs.version}"; - hash = "sha256-8hrKAfDeV5PUagjwKSEAYazuL/PZMXu7kqdsttGuUy0="; + hash = "sha256-eTwoK/AysxoTId6IM76b/euyYEE/9cwXcbDcm4wLjM0="; }; - vendorHash = "sha256-dc1c21JUld9PqOKh4QzEppU/sp7FCPV14P0EYmPYR1k="; + vendorHash = "sha256-aTQEt1vBdzwOE99CHmCkodvGReR30Jq7iWkMtwK3620="; env.CGO_ENABLED = 0; ldflags = [ From 1114aacfa7093c065ae32cbc3edec8c71cb153d5 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 27 Dec 2025 03:13:18 +0000 Subject: [PATCH 32/61] xivlauncher: 1.3.0 -> 1.3.1 --- pkgs/by-name/xi/xivlauncher/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/xi/xivlauncher/package.nix b/pkgs/by-name/xi/xivlauncher/package.nix index d8fe8dc10d29..4219e059aab8 100644 --- a/pkgs/by-name/xi/xivlauncher/package.nix +++ b/pkgs/by-name/xi/xivlauncher/package.nix @@ -17,7 +17,7 @@ }: let - rev = "1.3.0"; + rev = "1.3.1"; in buildDotnetModule rec { pname = "XIVLauncher"; @@ -27,7 +27,7 @@ buildDotnetModule rec { owner = "goatcorp"; repo = "XIVLauncher.Core"; inherit rev; - hash = "sha256-tPziHwHK4B+LJ8xNWEBmpFStkczZF3G5jhjxYYG59m0="; + hash = "sha256-a5lxQFNJjC4LVlokLeEEiPAXPTK9KkgboqjlEc+Viw0="; fetchSubmodules = true; }; From a77e2c167239726fb7c7944c245e720b058d760c Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Sat, 1 Mar 2025 20:37:09 +0100 Subject: [PATCH 33/61] nixos/tandoor-recipes: fix database leak when serving media To avoid serving the (default) SQLite database, set MEDIA_ROOT to a sub directory of the data path. See https://github.com/NixOS/nixpkgs/issues/338339 for details Co-authored-by: bas Signed-off-by: Sefa Eyeoglu --- nixos/doc/manual/redirects.json | 12 +++ .../manual/release-notes/rl-2605.section.md | 2 + .../modules/services/misc/tandoor-recipes.md | 19 ++++ .../modules/services/misc/tandoor-recipes.nix | 22 ++++- nixos/tests/all-tests.nix | 1 + nixos/tests/tandoor-recipes-media.nix | 91 +++++++++++++++++++ pkgs/by-name/ta/tandoor-recipes/package.nix | 2 +- 7 files changed, 143 insertions(+), 6 deletions(-) create mode 100644 nixos/modules/services/misc/tandoor-recipes.md create mode 100644 nixos/tests/tandoor-recipes-media.nix diff --git a/nixos/doc/manual/redirects.json b/nixos/doc/manual/redirects.json index e96bdf6d245f..5dd832354fef 100644 --- a/nixos/doc/manual/redirects.json +++ b/nixos/doc/manual/redirects.json @@ -62,6 +62,12 @@ "module-boot-plymouth-tpm2-totp-quick-start-enable": [ "index.html#module-boot-plymouth-tpm2-totp-quick-start-enable" ], + "module-services-tandoor-recipes-migrating-media-option-1": [ + "index.html#module-services-tandoor-recipes-migrating-media-option-1" + ], + "module-services-tandoor-recipes-migrating-media-option-2": [ + "index.html#module-services-tandoor-recipes-migrating-media-option-2" + ], "sec-override-nixos-test": [ "index.html#sec-override-nixos-test" ], @@ -1122,6 +1128,12 @@ "module-services-samba-configuring-file-share": [ "index.html#module-services-samba-configuring-file-share" ], + "module-services-tandoor-recipes": [ + "index.html#module-services-tandoor-recipes" + ], + "module-services-tandoor-recipes-migrating-media": [ + "index.html#module-services-tandoor-recipes-migrating-media" + ], "module-services-litestream": [ "index.html#module-services-litestream" ], diff --git a/nixos/doc/manual/release-notes/rl-2605.section.md b/nixos/doc/manual/release-notes/rl-2605.section.md index f30935952c8a..146e4a69f02d 100644 --- a/nixos/doc/manual/release-notes/rl-2605.section.md +++ b/nixos/doc/manual/release-notes/rl-2605.section.md @@ -40,6 +40,8 @@ - `services.crabfit` was removed because its upstream packages are unmaintained and insecure. +- `services.tandoor-recipes` now uses a sub-directory for media files by default starting with `26.05`. Existing setups should move media files out of the data directory and adjust `services.tandoor-recipes.extraConfig.MEDIA_ROOT` accordingly. See [Migrating media files for pre 26.05 installations](#module-services-tandoor-recipes-migrating-media). + - `services.kubernetes.addons.dns.coredns` has been renamed to `services.kubernetes.addons.dns.corednsImage` and now expects a package instead of attrs. Now, by default, nixpkgs.coredns in conjunction with dockerTools.buildImage is used, instead of pulling the upstream container image from Docker Hub. If you want the old behavior, you can set: diff --git a/nixos/modules/services/misc/tandoor-recipes.md b/nixos/modules/services/misc/tandoor-recipes.md new file mode 100644 index 000000000000..762ab56c5c6d --- /dev/null +++ b/nixos/modules/services/misc/tandoor-recipes.md @@ -0,0 +1,19 @@ +# Tandoor Recipes {#module-services-tandoor-recipes} + +## Dealing with `MEDIA_ROOT` for installations prior 26.05 {#module-services-tandoor-recipes-migrating-media} + +See https://github.com/NixOS/nixpkgs/issues/338339 for some background. + +### Option 1: Migrate media to new `MEDIA_ROOT` {#module-services-tandoor-recipes-migrating-media-option-1} + +1. Stop the currently running service: `systemctl stop tandoor-recipes.service` +2. Create a media folder. NixOS `26.05` creates the media path at `/var/lib/tandoor-recipes/media` by default, but you may choose any other path as well. `mkdir -p /var/lib/tandoor-recipes/media` +3. Move existing media to the new path: `mv /var/lib/tandoor-recipes/{files,recipes} /var/lib/tandoor-recipes/media` +4. Set `services.tandoor-recipes.extraConfig.MEDIA_ROOT = "/var/lib/tandoor-recipes/media";` in your NixOS configuration (not needed if `system.stateVersion >= 26.05`). +5. Rebuild and switch! + +These changes can be reverted by moving the files back into the state directory. + +### Option 2: Keep existing directory (may be insecure) {#module-services-tandoor-recipes-migrating-media-option-2} + +To keep the existing directory, set `services.tandoor-recipes.extraConfig.MEDIA_ROOT = "/var/lib/tandoor-recipes";`. diff --git a/nixos/modules/services/misc/tandoor-recipes.nix b/nixos/modules/services/misc/tandoor-recipes.nix index 549b3ad5fa3d..8f8267e294bc 100644 --- a/nixos/modules/services/misc/tandoor-recipes.nix +++ b/nixos/modules/services/misc/tandoor-recipes.nix @@ -7,13 +7,15 @@ let cfg = config.services.tandoor-recipes; pkg = cfg.package; + stateDir = "/var/lib/tandoor-recipes"; + useNewMediaRoot = lib.versionAtLeast config.system.stateVersion "26.05"; # SECRET_KEY through an env file env = { GUNICORN_CMD_ARGS = "--bind=${cfg.address}:${toString cfg.port}"; DEBUG = "0"; DEBUG_TOOLBAR = "0"; - MEDIA_ROOT = "/var/lib/tandoor-recipes"; + MEDIA_ROOT = "${stateDir}${lib.optionalString useNewMediaRoot "/media"}"; } // lib.optionalAttrs (config.time.timeZone != null) { TZ = config.time.timeZone; @@ -26,12 +28,15 @@ let # UID is a read-only shell variable eval "$(${config.systemd.package}/bin/systemctl show -pUID,GID,MainPID tandoor-recipes.service | tr '[:upper:]' '[:lower:]')" exec ${pkgs.util-linux}/bin/nsenter \ - -t $mainpid -m -S $uid -G $gid --wdns=${env.MEDIA_ROOT} \ + -t $mainpid -m -S $uid -G $gid --wdns=${stateDir} \ ${pkg}/bin/tandoor-recipes "$@" ''; in { - meta.maintainers = with lib.maintainers; [ jvanbruegge ]; + meta = { + maintainers = with lib.maintainers; [ jvanbruegge ]; + doc = ./tandoor-recipes.md; + }; options.services.tandoor-recipes = { enable = lib.mkOption { @@ -101,6 +106,10 @@ in }; config = lib.mkIf cfg.enable { + warnings = lib.mkIf (!useNewMediaRoot && !(cfg.extraConfig ? MEDIA_ROOT)) [ + "`services.tandoor-recipes.extraConfig.MEDIA_ROOT` is unset. This is considered insecure for `system.stateVersion` < 26.05. See https://nixos.org/manual/nixos/unstable/#module-services-tandoor-recipes-migrating-media for migration instructions." + ]; + users.users = lib.mkIf (cfg.user == "tandoor_recipes") { tandoor_recipes = { inherit (cfg) group; @@ -126,8 +135,11 @@ in User = cfg.user; Group = cfg.group; - StateDirectory = "tandoor-recipes"; - WorkingDirectory = env.MEDIA_ROOT; + StateDirectory = [ + "tandoor-recipes" + ] + ++ lib.optional (env.MEDIA_ROOT == "/var/lib/tandoor-recipes/media") "tandoor-recipes/media"; + WorkingDirectory = stateDir; RuntimeDirectory = "tandoor-recipes"; BindReadOnlyPaths = [ diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 0cc6942f10db..5a327d32c4e3 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -1552,6 +1552,7 @@ in szurubooru = handleTest ./szurubooru.nix { }; taler = handleTest ./taler { }; tandoor-recipes = runTest ./tandoor-recipes.nix; + tandoor-recipes-media = runTest ./tandoor-recipes-media.nix; tandoor-recipes-script-name = runTest ./tandoor-recipes-script-name.nix; tang = runTest ./tang.nix; taskchampion-sync-server = runTest ./taskchampion-sync-server.nix; diff --git a/nixos/tests/tandoor-recipes-media.nix b/nixos/tests/tandoor-recipes-media.nix new file mode 100644 index 000000000000..9384c9765efa --- /dev/null +++ b/nixos/tests/tandoor-recipes-media.nix @@ -0,0 +1,91 @@ +{ ... }: +{ + name = "tandoor-recipes-media"; + + nodes.machine = { + services.tandoor-recipes = { + enable = true; + # This setting is not recommended, but it's an easy way serve the media + # folder in this test. + extraConfig = { + GUNICORN_MEDIA = true; + }; + }; + + specialisation.oldVersion.configuration = { + system.stateVersion = "25.11"; + services.tandoor-recipes = { + enable = true; + extraConfig = { + GUNICORN_MEDIA = true; + # Explicitly set insecure value (skips warning) + MEDIA_ROOT = "/var/lib/tandoor-recipes"; + }; + }; + }; + + specialisation.oldVersionOverrideMedia.configuration = { + system.stateVersion = "25.11"; + services.tandoor-recipes = { + enable = true; + extraConfig = { + GUNICORN_MEDIA = true; + MEDIA_ROOT = "/var/lib/tandoor-recipes/media"; + }; + }; + }; + }; + + testScript = + { nodes, ... }: + let + specBase = "${nodes.machine.system.build.toplevel}/specialisation"; + oldVersion = "${specBase}/oldVersion"; + oldVersionOverrideMedia = "${specBase}/oldVersionOverrideMedia"; + in + # python + '' + def wait_for_tandoor(): + machine.wait_for_unit("tandoor-recipes.service") + machine.wait_for_open_port(8080) + + + def stop_and_rm(): + machine.systemctl("stop tandoor-recipes") + machine.succeed("rm -r /var/lib/tandoor-recipes") + + + db_path = "http://localhost:8080/media/db.sqlite3" + + + # The media folder shouldn't contain the database. Subsequently it + # should **not** get served, resulting in a 404. Previously the + # database was located in the media folder. Therefore serving the media + # folder would expose the database. See #338339. + wait_for_tandoor() + machine.succeed(f"curl --head {db_path} | grep \"HTTP/1.1 404 Not Found\"") + + + # Switch to NixOS 24.11 to check if the setup still functions the same + # as before. + stop_and_rm() + machine.succeed("${oldVersion}/bin/switch-to-configuration test") + + # With the old setup the media folder should contain the database. + # Subsequently it should get served, resulting in a 200. + wait_for_tandoor() + machine.succeed(f"curl --head {db_path} | grep \"HTTP/1.1 200 OK\"") + + + # Switch to NixOS 24.11 with the MEDIA_ROOT already set to + # /var/lib/tandoor-recipes/media. + stop_and_rm() + machine.succeed("${oldVersionOverrideMedia}/bin/switch-to-configuration test") + + # With MEDIA_ROOT being set to /var/lib/tandoor-recipes/media the media + # folder shouldn't contain the database. Subsequently it should **not** + # get served, resulting in a 404. + wait_for_tandoor() + machine.succeed(f"curl --head {db_path} | grep \"HTTP/1.1 404 Not Found\"") + ''; +} diff --git a/pkgs/by-name/ta/tandoor-recipes/package.nix b/pkgs/by-name/ta/tandoor-recipes/package.nix index c3a27f4816df..c04940c22f52 100644 --- a/pkgs/by-name/ta/tandoor-recipes/package.nix +++ b/pkgs/by-name/ta/tandoor-recipes/package.nix @@ -166,7 +166,7 @@ python.pkgs.buildPythonPackage { updateScript = ./update.sh; tests = { - inherit (nixosTests) tandoor-recipes tandoor-recipes-script-name; + inherit (nixosTests) tandoor-recipes tandoor-recipes-script-name tandoor-recipes-media; }; }; From 3eb5f4dbbda5579d787ee9961c4e14a9f120f7db Mon Sep 17 00:00:00 2001 From: Hannes Date: Sat, 27 Dec 2025 19:17:17 +0100 Subject: [PATCH 34/61] openscad-unstable: add bin for cli usage on darwin --- pkgs/by-name/op/openscad-unstable/package.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/op/openscad-unstable/package.nix b/pkgs/by-name/op/openscad-unstable/package.nix index aaa656e9f1d4..b4e57ca17e3f 100644 --- a/pkgs/by-name/op/openscad-unstable/package.nix +++ b/pkgs/by-name/op/openscad-unstable/package.nix @@ -156,7 +156,8 @@ clangStdenv.mkDerivation rec { postInstall = lib.optionalString stdenv.hostPlatform.isDarwin '' mkdir $out/Applications mv $out/bin/*.app $out/Applications - rmdir $out/bin + rm $out/bin/* || true + ln -s $out/Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD $out/bin/openscad-unstable ''; nativeCheckInputs = [ From f32213d5b23cef7b49f0ce3f6e017931943b99cb Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 27 Dec 2025 18:35:24 +0000 Subject: [PATCH 35/61] hugo: 0.152.2 -> 0.153.3 --- pkgs/by-name/hu/hugo/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/hu/hugo/package.nix b/pkgs/by-name/hu/hugo/package.nix index a9bbe0138ef8..79717445184d 100644 --- a/pkgs/by-name/hu/hugo/package.nix +++ b/pkgs/by-name/hu/hugo/package.nix @@ -11,16 +11,16 @@ buildGoModule (finalAttrs: { pname = "hugo"; - version = "0.152.2"; + version = "0.153.3"; src = fetchFromGitHub { owner = "gohugoio"; repo = "hugo"; tag = "v${finalAttrs.version}"; - hash = "sha256-nSWeCRhbaEgr54VDstBKnouUeWR1JjLXEqtYUcEMdyQ="; + hash = "sha256-EJYBIElh1akj8/cYzd/5hUNJtmFK/BxgWTg5jo2/xS4="; }; - vendorHash = "sha256-3cIz3SWV/3vYhCgFEGAa+mOaUCzsJurkI2rPtVANE38="; + vendorHash = "sha256-cTrqnZdRCLthZCpXqbfIS1quySyB2lWxbxP/4k2nASQ="; checkFlags = let From ec05d1e9cf224cf4804b00cd868344b7c86f1795 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 27 Dec 2025 22:08:58 +0000 Subject: [PATCH 36/61] homebank: 5.9.6 -> 5.9.7 --- pkgs/by-name/ho/homebank/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ho/homebank/package.nix b/pkgs/by-name/ho/homebank/package.nix index 8943f9d801d1..74c6dcb55ea6 100644 --- a/pkgs/by-name/ho/homebank/package.nix +++ b/pkgs/by-name/ho/homebank/package.nix @@ -13,10 +13,10 @@ stdenv.mkDerivation rec { pname = "homebank"; - version = "5.9.6"; + version = "5.9.7"; src = fetchurl { url = "https://www.gethomebank.org/public/sources/homebank-${version}.tar.gz"; - hash = "sha256-8DIL/gTysY/e1DcuuJ5qY6vXUBY4uUWNoSzUaCQ+t3o="; + hash = "sha256-K4/fUSQpow7XpFfPWvR2dWwM/dyfznYA2rlcfwO+JuQ="; }; nativeBuildInputs = [ From 521ce0473b42e4e793c8d0176c4d16058e773ce6 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 27 Dec 2025 23:01:09 +0000 Subject: [PATCH 37/61] python3Packages.robotframework: 7.3.2 -> 7.4.1 --- pkgs/development/python-modules/robotframework/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/robotframework/default.nix b/pkgs/development/python-modules/robotframework/default.nix index 7f30ea89797a..35b648938bad 100644 --- a/pkgs/development/python-modules/robotframework/default.nix +++ b/pkgs/development/python-modules/robotframework/default.nix @@ -10,7 +10,7 @@ buildPythonPackage rec { pname = "robotframework"; - version = "7.3.2"; + version = "7.4.1"; pyproject = true; disabled = pythonOlder "3.8"; @@ -19,7 +19,7 @@ buildPythonPackage rec { owner = "robotframework"; repo = "robotframework"; tag = "v${version}"; - hash = "sha256-JxZI0i9Aj/TX4BkIi+jeBdTy0ckv5Fdy5tHRI9vQ8Ss="; + hash = "sha256-AnYIdRRwYUsgaOZw+vcpDB69DOg13kU1jA3ObRDLyWk="; }; build-system = [ setuptools ]; From 796ce171425b1fee1e059ad8c06f682ec7fb0140 Mon Sep 17 00:00:00 2001 From: Angel J <78835633+Iamanaws@users.noreply.github.com> Date: Sat, 27 Dec 2025 15:04:28 -0800 Subject: [PATCH 38/61] maintainers: update iamanaws Signed-off-by: Angel J <78835633+Iamanaws@users.noreply.github.com> --- maintainers/maintainer-list.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 81e67a5fd9a0..dff8cc6c6ce3 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -10905,10 +10905,11 @@ keys = [ { fingerprint = "DF90 9D58 BEE4 E73A 1B8C 5AF3 35D3 9F9A 9A1B C8DA"; } ]; }; iamanaws = { - email = "nixpkgs.yjzaw@slmail.me"; - github = "Iamanaws"; + email = "iamanaws@httpd.dev"; + github = "iamanaws"; githubId = 78835633; name = "Angel J"; + keys = [ { fingerprint = "CF10 DCBB 9318 BE1D 6040 4222 272C 61AB 190D ED28"; } ]; }; iammrinal0 = { email = "nixpkgs@mrinalpurohit.in"; From 258b86d8361b45be4e104a4f2fb7c4cf808af597 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 27 Dec 2025 23:38:23 +0000 Subject: [PATCH 39/61] cargo-expand: 1.0.118 -> 1.0.119 --- pkgs/by-name/ca/cargo-expand/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ca/cargo-expand/package.nix b/pkgs/by-name/ca/cargo-expand/package.nix index 5aca7c581568..897376b8ecc2 100644 --- a/pkgs/by-name/ca/cargo-expand/package.nix +++ b/pkgs/by-name/ca/cargo-expand/package.nix @@ -8,16 +8,16 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "cargo-expand"; - version = "1.0.118"; + version = "1.0.119"; src = fetchFromGitHub { owner = "dtolnay"; repo = "cargo-expand"; tag = finalAttrs.version; - hash = "sha256-+n4eiwcToXtWMPmvE41kOcZHzgugjekxQkodDagDjhI="; + hash = "sha256-N48BUPnVnMJSiM3EzpSiDNLGZNWFW05toHRhokNO5gI="; }; - cargoHash = "sha256-Di7Nnp8qYqpTkKmmUYoKxSkntepG80vVF2AkaN5yW+U="; + cargoHash = "sha256-a8swmPQ+JuE/tqRYbV+kekZV8TloxszYq9k8VOGRBrM="; nativeInstallCheckInputs = [ versionCheckHook ]; versionCheckProgramArg = "--version"; From 7e875c606d399b11d0008ff1f9424fe52ffa91cf Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 28 Dec 2025 00:29:15 +0000 Subject: [PATCH 40/61] fcft: 3.3.2 -> 3.3.3 --- pkgs/by-name/fc/fcft/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/fc/fcft/package.nix b/pkgs/by-name/fc/fcft/package.nix index 4f23760a704c..40c7f3bbb8d1 100644 --- a/pkgs/by-name/fc/fcft/package.nix +++ b/pkgs/by-name/fc/fcft/package.nix @@ -33,14 +33,14 @@ in stdenv.mkDerivation rec { pname = "fcft"; - version = "3.3.2"; + version = "3.3.3"; src = fetchFromGitea { domain = "codeberg.org"; owner = "dnkl"; repo = "fcft"; rev = version; - hash = "sha256-a+lELkEjMtqeBYGj6yl+OoQ+I6neyJt6a1T83B2KWOk="; + hash = "sha256-MkGlph9WpqH4daov5ZZPO2ua2mUbrsuo8Xk6GoKhoxg="; }; depsBuildBuild = [ pkg-config ]; From 17b79238c283d30651237068a0faf4337cc35e2d Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 28 Dec 2025 00:59:47 +0000 Subject: [PATCH 41/61] python3Packages.bthome-ble: 3.17.0 -> 3.19.0 --- pkgs/development/python-modules/bthome-ble/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/bthome-ble/default.nix b/pkgs/development/python-modules/bthome-ble/default.nix index 13e587c04bf7..4462812d9d28 100644 --- a/pkgs/development/python-modules/bthome-ble/default.nix +++ b/pkgs/development/python-modules/bthome-ble/default.nix @@ -14,14 +14,14 @@ buildPythonPackage rec { pname = "bthome-ble"; - version = "3.17.0"; + version = "3.19.0"; pyproject = true; src = fetchFromGitHub { owner = "Bluetooth-Devices"; repo = "bthome-ble"; tag = "v${version}"; - hash = "sha256-So4EGO46FOrUZ+RNFimanUDBP5tgZBjXc5eb9KAvYjQ="; + hash = "sha256-x82SiZT1NEKlHiAcwcbj/IVcXszXbbOF4ngXVg6bDZ4="; }; build-system = [ poetry-core ]; From 952e220555a1e7b9966590e9492207a0a0296eee Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 28 Dec 2025 01:21:07 +0000 Subject: [PATCH 42/61] home-assistant-custom-lovelace-modules.advanced-camera-card: 7.25.4 -> 7.26.0 --- .../custom-lovelace-modules/advanced-camera-card/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/servers/home-assistant/custom-lovelace-modules/advanced-camera-card/package.nix b/pkgs/servers/home-assistant/custom-lovelace-modules/advanced-camera-card/package.nix index e4b56561ebbb..7158f8298362 100644 --- a/pkgs/servers/home-assistant/custom-lovelace-modules/advanced-camera-card/package.nix +++ b/pkgs/servers/home-assistant/custom-lovelace-modules/advanced-camera-card/package.nix @@ -6,11 +6,11 @@ stdenv.mkDerivation rec { pname = "advanced-camera-card"; - version = "7.25.4"; + version = "7.26.0"; src = fetchzip { url = "https://github.com/dermotduffy/advanced-camera-card/releases/download/v${version}/advanced-camera-card.zip"; - hash = "sha256-IpuZfHUrIxyDTcQcKv6+xApiXO3eNgwgJ5rZvpCMs3s="; + hash = "sha256-2f+peUfhvreJPZfZt9dOvf0pItWCgzcNfH0iRLsRwGE="; }; # TODO: build from source once yarn berry support lands in nixpkgs From 9bbb59bbefe975ce5454ae9cd58c8f5f967a7490 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 28 Dec 2025 01:29:14 +0000 Subject: [PATCH 43/61] prometheus-borgmatic-exporter: 0.3.0 -> 0.4.0 --- pkgs/by-name/pr/prometheus-borgmatic-exporter/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/pr/prometheus-borgmatic-exporter/package.nix b/pkgs/by-name/pr/prometheus-borgmatic-exporter/package.nix index 06207ca651b2..0bcbcfb4916c 100644 --- a/pkgs/by-name/pr/prometheus-borgmatic-exporter/package.nix +++ b/pkgs/by-name/pr/prometheus-borgmatic-exporter/package.nix @@ -7,14 +7,14 @@ python3Packages.buildPythonApplication rec { pname = "prometheus-borgmatic-exporter"; - version = "0.3.0"; + version = "0.4.0"; pyproject = true; src = fetchFromGitHub { owner = "maxim-mityutko"; repo = "borgmatic-exporter"; tag = "v${version}"; - hash = "sha256-QbpHSpcXJdmi6oiPTFT6XwNLtaXSAGavHeEoz3IV73I="; + hash = "sha256-fhsGpQolZxX5VAAEV3hiLF7bo4pbVt9GWyertf2oeO0="; }; pythonRelaxDeps = [ "prometheus-client" ]; From 15b19b141594b092e35b2eb2af0fb62cfb6d00ec Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 28 Dec 2025 03:21:36 +0000 Subject: [PATCH 44/61] github-backup: 0.58.0 -> 0.60.0 --- pkgs/by-name/gi/github-backup/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/gi/github-backup/package.nix b/pkgs/by-name/gi/github-backup/package.nix index e06a70ba329a..6190c2d57b4c 100644 --- a/pkgs/by-name/gi/github-backup/package.nix +++ b/pkgs/by-name/gi/github-backup/package.nix @@ -10,14 +10,14 @@ python3Packages.buildPythonApplication rec { pname = "github-backup"; - version = "0.58.0"; + version = "0.60.0"; pyproject = true; src = fetchFromGitHub { owner = "josegonzalez"; repo = "python-github-backup"; tag = version; - hash = "sha256-i1o8GX3xxWft04sLspq9Oy2a46ldJeFqs5OgEjTti4E="; + hash = "sha256-dK6qkso5GOV/eZRGcwOCKn8faMuTr7czTvISLioKgVs="; }; build-system = with python3Packages; [ From b257d65f9633d7d11ff5fab3c6c0c90fb13095ff Mon Sep 17 00:00:00 2001 From: Sam Estep Date: Sat, 27 Dec 2025 22:46:01 -0500 Subject: [PATCH 45/61] wasm-language-tools: 0.7.1 -> 0.8.0 --- pkgs/by-name/wa/wasm-language-tools/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/wa/wasm-language-tools/package.nix b/pkgs/by-name/wa/wasm-language-tools/package.nix index 9953fc81e0d0..3bdf66a2d8ba 100644 --- a/pkgs/by-name/wa/wasm-language-tools/package.nix +++ b/pkgs/by-name/wa/wasm-language-tools/package.nix @@ -8,16 +8,16 @@ rustPlatform.buildRustPackage rec { pname = "wasm-language-tools"; - version = "0.7.1"; + version = "0.8.0"; src = fetchFromGitHub { owner = "g-plane"; repo = "wasm-language-tools"; tag = "v${version}"; - hash = "sha256-ySY1AIgr5HwSrfebfDkKZvl/1LQpU64nCF6TEi//JuM="; + hash = "sha256-4PnagT1pufsEy1ROvhYYtkuSsU+irGpYV9iffwIQPmk="; }; - cargoHash = "sha256-veBxrnTRSI6kRy0bREBWCLEkbkPUWM7jGwlcFhG6FjU="; + cargoHash = "sha256-h+HEOzS93XFuDm5luODAzzGtxxaxTTdxTWIKm41Sw6s="; nativeInstallCheckInputs = [ versionCheckHook ]; versionCheckProgram = "${placeholder "out"}/bin/wat_server"; From 0dbd0d085403fec8a943d75f80aa57d69c11ac83 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Sat, 27 Dec 2025 00:33:57 -0800 Subject: [PATCH 46/61] ncps: 0.4.0 -> 0.5.0 --- pkgs/by-name/nc/ncps/package.nix | 84 ++++++++++++++++++++++++++++++-- 1 file changed, 81 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/nc/ncps/package.nix b/pkgs/by-name/nc/ncps/package.nix index 01138fed0746..e97fd113eab7 100644 --- a/pkgs/by-name/nc/ncps/package.nix +++ b/pkgs/by-name/nc/ncps/package.nix @@ -1,35 +1,113 @@ { buildGoModule, + curl, dbmate, fetchFromGitHub, lib, + minio, + minio-client, + python3, }: let finalAttrs = { pname = "ncps"; - version = "0.4.0"; + version = "0.5.0"; src = fetchFromGitHub { owner = "kalbasit"; repo = "ncps"; tag = "v${finalAttrs.version}"; - hash = "sha256-A2HLbob9MHHCUNIC1OBwyFeE6KuEIdXW75hPSZMgicI="; + hash = "sha256-3ncDDJ0vqmM6Aer/qnEgGZ/eglFmY0oAnMsLJseMQg8="; }; ldflags = [ "-X github.com/kalbasit/ncps/cmd.Version=v${finalAttrs.version}" ]; - vendorHash = "sha256-Plc1L23qOYj1evVIG+O3OxVAKVeEIA+Z6sP4Z/T1SxU="; + vendorHash = "sha256-3YPKlz7+x7nYCqKmOroaiUyZGKIQMGFxcNyPnrA9Tio="; doCheck = true; checkFlags = [ "-race" ]; nativeBuildInputs = [ + curl # used for checking MinIO health check dbmate # used for testing + minio # S3-compatible storage for integration tests + minio-client # mc CLI for MinIO setup + python3 # used for generating the ports ]; + # Start MinIO before running tests to enable S3 integration tests + preCheck = '' + echo "🚀 Starting MinIO for S3 integration tests..." + + # Create temporary directories for MinIO data and config + export MINIO_DATA_DIR=$(mktemp -d) + export HOME=$(mktemp -d) + + # Configure MinIO credentials (must be set before starting MinIO) + export MINIO_ROOT_USER=admin + export MINIO_ROOT_PASSWORD=password + export MINIO_REGION=us-east-1 + + # Generate random free ports using python + # We bind to port 0, get the assigned port, and close the socket immediately. + # In a Nix sandbox, the race condition risk (port being stolen between check and use) is negligible. + export MINIO_PORT=$(python3 -c 'import socket; s=socket.socket(); s.bind(("", 0)); print(s.getsockname()[1]); s.close()') + export CONSOLE_PORT=$(python3 -c 'import socket; s=socket.socket(); s.bind(("", 0)); print(s.getsockname()[1]); s.close()') + + # Export S3 test environment variables + export NCPS_TEST_S3_BUCKET="test-bucket" + export NCPS_TEST_S3_ENDPOINT="http://127.0.0.1:$MINIO_PORT" + export NCPS_TEST_S3_REGION="us-east-1" + export NCPS_TEST_S3_ACCESS_KEY_ID="test-access-key" + export NCPS_TEST_S3_SECRET_ACCESS_KEY="test-secret-key" + + # Start MinIO server in background + minio server "$MINIO_DATA_DIR" \ + --address "127.0.0.1:$MINIO_PORT" \ + --console-address "127.0.0.1:$CONSOLE_PORT" & + export MINIO_PID=$! + + # Wait for MinIO to be ready + echo "⏳ Waiting for MinIO to be ready..." + for i in {1..30}; do + if curl -sf "$NCPS_TEST_S3_ENDPOINT/minio/health/live"; then + echo "✅ MinIO is ready" + break + fi + if [ $i -eq 30 ]; then + echo "❌ MinIO failed to start" + kill $MINIO_PID 2>/dev/null || true + exit 1 + fi + sleep 1 + done + + # Setup admin alias + mc alias set local "$NCPS_TEST_S3_ENDPOINT" "$MINIO_ROOT_USER" "$MINIO_ROOT_PASSWORD" + + # Create test bucket + mc mb "local/$NCPS_TEST_S3_BUCKET" || true + + # Create service account for tests + mc admin user svcacct add \ + --access-key "$NCPS_TEST_S3_ACCESS_KEY_ID" \ + --secret-key "$NCPS_TEST_S3_SECRET_ACCESS_KEY" \ + local admin || true + + echo "✅ MinIO configured for S3 integration tests" + ''; + + # Stop MinIO after tests complete + postCheck = '' + echo "🛑 Stopping MinIO..." + kill $MINIO_PID 2>/dev/null || true + rm -rf "$MINIO_DATA_DIR" + echo "✅ MinIO stopped and cleaned up" + ''; + postInstall = '' mkdir -p $out/share/ncps cp -r db $out/share/ncps/db From 4ea7a7dc507483f76dd8af1bc73f06c74e4c1206 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Sat, 27 Dec 2025 21:01:56 -0800 Subject: [PATCH 47/61] ncps: workaround older Go version in the master branch ncps is built with Go 1.25.5 that is available in release-25.11 but master is currently still using 1.25.4 (update waiting in the staging/staging-next branches.) This is a workaround for this issue and will automatically becomes no-op once Go is updated. --- pkgs/by-name/nc/ncps/package.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkgs/by-name/nc/ncps/package.nix b/pkgs/by-name/nc/ncps/package.nix index e97fd113eab7..fc0a5886c30c 100644 --- a/pkgs/by-name/nc/ncps/package.nix +++ b/pkgs/by-name/nc/ncps/package.nix @@ -3,6 +3,7 @@ curl, dbmate, fetchFromGitHub, + go, lib, minio, minio-client, @@ -25,6 +26,14 @@ let "-X github.com/kalbasit/ncps/cmd.Version=v${finalAttrs.version}" ]; + # XXX: ncps is built with Go 1.25.5 that is available in release-25.11 but + # master is currently still using 1.25.4 (update waiting in the + # staging/staging-next branches.) This is a workaround for this issue and + # will automatically becomes no-op once Go is updated. + preBuild = lib.optionalString (go.version == "1.25.4") '' + sed -e 's:go 1.25.5:go 1.25.4:g' -i go.mod + ''; + vendorHash = "sha256-3YPKlz7+x7nYCqKmOroaiUyZGKIQMGFxcNyPnrA9Tio="; doCheck = true; From ba3bbbf75200f0abd278c8f5c2317d4ca2f5c0f5 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 28 Dec 2025 06:39:56 +0000 Subject: [PATCH 48/61] catppuccin-kvantum: 0-unstable-2025-11-15 -> 0-unstable-2025-12-27 --- pkgs/by-name/ca/catppuccin-kvantum/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ca/catppuccin-kvantum/package.nix b/pkgs/by-name/ca/catppuccin-kvantum/package.nix index 4d4c53c99833..926aaa46dbeb 100644 --- a/pkgs/by-name/ca/catppuccin-kvantum/package.nix +++ b/pkgs/by-name/ca/catppuccin-kvantum/package.nix @@ -33,13 +33,13 @@ lib.checkListOfEnum "${pname}: theme accent" stdenvNoCC.mkDerivation { inherit pname; - version = "0-unstable-2025-11-15"; + version = "0-unstable-2025-12-27"; src = fetchFromGitHub { owner = "catppuccin"; repo = "Kvantum"; - rev = "1156e5437435282b47ac6856acd9d0feef1ed929"; - hash = "sha256-V5Upqkil9Q2MeEPtEAemirbJxnEyYcM3Z8jiyz//ccw="; + rev = "71105d224fef95dd023691303477ce3eea487457"; + hash = "sha256-gcvCVZjVbj5fRZWaM+mZTwH/g158MH36JmMuMgCBuqQ="; }; installPhase = '' From ee530f39a0e8e6ed54740abd7036c0ede3ba7182 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 28 Dec 2025 07:22:10 +0000 Subject: [PATCH 49/61] python3Packages.sphinx-reredirects: 1.0.0 -> 1.1.0 --- .../development/python-modules/sphinx-reredirects/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/sphinx-reredirects/default.nix b/pkgs/development/python-modules/sphinx-reredirects/default.nix index d98feefa695f..ec4fa084f65a 100644 --- a/pkgs/development/python-modules/sphinx-reredirects/default.nix +++ b/pkgs/development/python-modules/sphinx-reredirects/default.nix @@ -8,13 +8,13 @@ buildPythonPackage rec { pname = "sphinx-reredirects"; - version = "1.0.0"; + version = "1.1.0"; pyproject = true; src = fetchPypi { pname = "sphinx_reredirects"; inherit version; - hash = "sha256-fJutqfEzBIn89Mcpei1toqScpId9P0LROIrh3hAZv1w="; + hash = "sha256-+5sZUzWrFLQ/gnMofQx+62N7psVsZlgcEbRyAvZxiyk="; }; build-system = [ From d7dbc9bd052033f6793459e8b1a5d7db73a37e66 Mon Sep 17 00:00:00 2001 From: Gus <58223632+thegu5@users.noreply.github.com> Date: Sun, 28 Dec 2025 02:31:00 -0500 Subject: [PATCH 50/61] maintainers: add matrix for thegu5 --- maintainers/maintainer-list.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 56b7956b019a..eed35747dbfe 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -26123,6 +26123,7 @@ }; thegu5 = { name = "Gus"; + matrix = "@gus:gu5.org"; github = "thegu5"; githubId = 58223632; }; From 8127178bd21bdfa95fa22a3601c82695c477cc4a Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Sun, 28 Dec 2025 10:25:58 +0200 Subject: [PATCH 51/61] python3.pkgs.pyglossary: 5.1.1 -> 5.2.1 Diff: https://github.com/ilius/pyglossary/compare/5.1.1...5.2.1 --- .../python-modules/pyglossary/default.nix | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/pkgs/development/python-modules/pyglossary/default.nix b/pkgs/development/python-modules/pyglossary/default.nix index 6617af80e51d..933196e8bf24 100644 --- a/pkgs/development/python-modules/pyglossary/default.nix +++ b/pkgs/development/python-modules/pyglossary/default.nix @@ -28,25 +28,16 @@ buildPythonPackage rec { pname = "pyglossary"; - version = "5.1.1"; + version = "5.2.1"; pyproject = true; src = fetchFromGitHub { owner = "ilius"; repo = "pyglossary"; tag = version; - hash = "sha256-OrySbbStVSz+WF8D+ODK++lKfYJOm9KCfOxDP3snuKY="; + hash = "sha256-kxCJ5Sv/v7LOIgNrhpv2Q3ooWx/eciWOVV5YhjOWf70="; }; - patches = [ - # Fixes a few install issues, can be removed in the next release. See: - # https://github.com/ilius/pyglossary/pull/684 - (fetchpatch { - url = "https://github.com/ilius/pyglossary/commit/f86c91ed987579cd8a1c7f7f278452901ce725ac.patch"; - hash = "sha256-ewYeNwD3/aSsNbMazgW/3tBpYAPBZdnVu9LCh7tQZjg="; - }) - ]; - build-system = [ setuptools ] From 2f56d23d2a0526e1442213b92148804a07053936 Mon Sep 17 00:00:00 2001 From: Shogo Takata Date: Fri, 21 Nov 2025 18:38:18 -0800 Subject: [PATCH 52/61] circt: 1.131.0 -> 1.138.0 This commit does a few things. - Updates circt to the latest version - Updates the llvm and circt build options to match the official release - Adds enable_slang_frontend feature flag that is enabled by default - Updates the check targets - Adds versionCheckHook --- pkgs/by-name/ci/circt/circt-llvm.nix | 27 ++++++++++------ pkgs/by-name/ci/circt/package.nix | 48 ++++++++++++++++++++++------ 2 files changed, 56 insertions(+), 19 deletions(-) diff --git a/pkgs/by-name/ci/circt/circt-llvm.nix b/pkgs/by-name/ci/circt/circt-llvm.nix index 6c9ec00564dd..110d88f2af58 100644 --- a/pkgs/by-name/ci/circt/circt-llvm.nix +++ b/pkgs/by-name/ci/circt/circt-llvm.nix @@ -6,6 +6,7 @@ circt, llvm, python3, + zstd, }: stdenv.mkDerivation { pname = circt.pname + "-llvm"; @@ -19,21 +20,27 @@ stdenv.mkDerivation { python3 ]; + buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ + # This is needed for darwin builds + zstd + ]; + preConfigure = '' cd llvm/llvm ''; cmakeFlags = [ - "-DBUILD_SHARED_LIBS=ON" - "-DLLVM_ENABLE_BINDINGS=OFF" - "-DLLVM_ENABLE_OCAMLDOC=OFF" - "-DLLVM_BUILD_EXAMPLES=OFF" - "-DLLVM_OPTIMIZED_TABLEGEN=ON" - "-DLLVM_ENABLE_PROJECTS=mlir" - "-DLLVM_TARGETS_TO_BUILD=Native" - - # This option is needed to install llvm-config - "-DLLVM_INSTALL_UTILS=ON" + # Based on utils/build-llvm.sh + (lib.cmakeBool "BUILD_SHARED_LIBS" true) + (lib.cmakeBool "LLVM_BUILD_EXAMPLES" false) + (lib.cmakeBool "LLVM_ENABLE_ASSERTIONS" true) + (lib.cmakeBool "LLVM_ENABLE_BINDINGS" false) + (lib.cmakeBool "LLVM_ENABLE_OCAMLDOC" false) + (lib.cmakeFeature "LLVM_ENABLE_PROJECTS" "mlir") + (lib.cmakeBool "LLVM_INSTALL_UTILS" true) + (lib.cmakeBool "LLVM_INSTALL_GTEST" true) + (lib.cmakeBool "LLVM_OPTIMIZED_TABLEGEN" true) + (lib.cmakeFeature "LLVM_TARGETS_TO_BUILD" "host") ]; outputs = [ diff --git a/pkgs/by-name/ci/circt/package.nix b/pkgs/by-name/ci/circt/package.nix index e58724c1231f..07bb945880d5 100644 --- a/pkgs/by-name/ci/circt/package.nix +++ b/pkgs/by-name/ci/circt/package.nix @@ -9,8 +9,16 @@ ninja, lit, z3, + sv-lang, + fmt, + boost, + mimalloc, gitUpdater, callPackage, + versionCheckHook, + + # sv-lang (slang) build is broken on darwin + enableSlangFrontend ? stdenv.hostPlatform.isLinux, }: let @@ -19,12 +27,12 @@ let in stdenv.mkDerivation rec { pname = "circt"; - version = "1.131.0"; + version = "1.138.0"; src = fetchFromGitHub { owner = "llvm"; repo = "circt"; rev = "firtool-${version}"; - hash = "sha256-im+w6vYsLdJ/i88mG/anFjPYgE1HfvJIemLEse0pzco="; + hash = "sha256-yx6sk6FO7MHNuRFBMhOXTSjtDQ0B6XyhGHb4uHSXx/8="; fetchSubmodules = true; }; @@ -36,16 +44,28 @@ stdenv.mkDerivation rec { git pythonEnv z3 + versionCheckHook + ]; + buildInputs = [ + circt-llvm + ] + ++ lib.optionals enableSlangFrontend [ + boost + fmt + mimalloc + sv-lang ]; - buildInputs = [ circt-llvm ]; cmakeFlags = [ - "-DBUILD_SHARED_LIBS=ON" - "-DMLIR_DIR=${circt-llvm.dev}/lib/cmake/mlir" - + # Based on .github/workflows/buildAndTest.yml:211 + (lib.cmakeBool "BUILD_SHARED_LIBS" (!stdenv.hostPlatform.isStatic)) + (lib.cmakeBool "LLVM_ENABLE_ASSERTIONS" false) + (lib.cmakeFeature "MLIR_DIR" "${circt-llvm.dev}/lib/cmake/mlir") + (lib.cmakeFeature "LLVM_DIR" "${circt-llvm.dev}/lib/cmake/llvm") # LLVM_EXTERNAL_LIT is executed by python3, the wrapped bash script will not work - "-DLLVM_EXTERNAL_LIT=${lit}/bin/.lit-wrapped" - "-DCIRCT_LLHD_SIM_ENABLED=OFF" + (lib.cmakeFeature "LLVM_EXTERNAL_LIT" "${lit}/bin/.lit-wrapped") + (lib.cmakeBool "CIRCT_SLANG_FRONTEND_ENABLED" enableSlangFrontend) + (lib.cmakeBool "CIRCT_SLANG_BUILD_FROM_SOURCE" false) ]; # cannot use lib.optionalString as it creates an empty string, disabling all tests @@ -76,6 +96,7 @@ stdenv.mkDerivation rec { "CIRCT :: circt-reduce/.*\\.mlir" "CIRCT :: circt-test/basic.mlir" "CIRCT :: firld/.*\\.mlir" + "CIRCT :: Tools/domaintool/clock-spec-json.mlir" ] ++ [ # Temporarily disable for bump: https://github.com/llvm/circt/issues/8000 @@ -88,6 +109,11 @@ stdenv.mkDerivation rec { postPatch = '' patchShebangs tools/circt-test + + substituteInPlace \ + lib/Tools/circt-verilog-lsp-server/VerilogServerImpl/CMakeLists.txt \ + lib/Conversion/ImportVerilog/CMakeLists.txt \ + --replace-fail "slang_slang" "slang::slang" ''; preConfigure = '' @@ -103,7 +129,11 @@ stdenv.mkDerivation rec { ''; doCheck = true; - checkTarget = "check-circt check-circt-integration"; + checkTarget = "check-circt check-circt-unit"; + + doInstallCheck = true; + versionCheckProgram = "${placeholder "out"}/bin/firtool"; + versionCheckProgramArg = "--version"; outputs = [ "out" From 6769aa7af8bfe778566d88fee6b90288d73bdfb3 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Sun, 28 Dec 2025 10:27:59 +0200 Subject: [PATCH 53/61] pyglossary: remove versionCheckProgramArg Per https://github.com/NixOS/nixpkgs/commit/58fec82686298f1313ea598effd310507855b84f --- pkgs/development/python-modules/pyglossary/default.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pkgs/development/python-modules/pyglossary/default.nix b/pkgs/development/python-modules/pyglossary/default.nix index 933196e8bf24..876507482fc7 100644 --- a/pkgs/development/python-modules/pyglossary/default.nix +++ b/pkgs/development/python-modules/pyglossary/default.nix @@ -69,11 +69,6 @@ buildPythonPackage rec { nativeCheckInputs = [ versionCheckHook ]; - env = { - # The default --help creates permission errors that may be confusing when - # observed in the build log. - versionCheckProgramArg = "--version"; - }; pythonImportsCheck = [ "pyglossary" From 6af7da938ccb8158c3ab9e7989e0fc71d49309e8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 28 Dec 2025 10:47:03 +0100 Subject: [PATCH 54/61] python313Packages.iamdata: 0.1.202512271 -> 0.1.202512281 Diff: https://github.com/cloud-copilot/iam-data-python/compare/v0.1.202512271...v0.1.202512281 Changelog: https://github.com/cloud-copilot/iam-data-python/releases/tag/v0.1.202512281 --- pkgs/development/python-modules/iamdata/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/iamdata/default.nix b/pkgs/development/python-modules/iamdata/default.nix index 82a4c2c7ef5f..570c096e224c 100644 --- a/pkgs/development/python-modules/iamdata/default.nix +++ b/pkgs/development/python-modules/iamdata/default.nix @@ -8,14 +8,14 @@ buildPythonPackage rec { pname = "iamdata"; - version = "0.1.202512271"; + version = "0.1.202512281"; pyproject = true; src = fetchFromGitHub { owner = "cloud-copilot"; repo = "iam-data-python"; tag = "v${version}"; - hash = "sha256-kOSs5HyJcTip0Tc9VHiRrJQcQ+hEJYSdAqEi5aSfmRA="; + hash = "sha256-gv3E+bIZiWqSBB5zXjSz5RicZY9aGY+EVtMbcUNpDNU="; }; __darwinAllowLocalNetworking = true; From 667be52a77bcd97560699a049241d7e90d664427 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 28 Dec 2025 10:48:54 +0100 Subject: [PATCH 55/61] python313Packages.tencentcloud-sdk-python: 3.1.19 -> 3.1.20 Diff: https://github.com/TencentCloud/tencentcloud-sdk-python/compare/3.1.19...3.1.20 Changelog: https://github.com/TencentCloud/tencentcloud-sdk-python/blob/3.1.20/CHANGELOG.md --- .../python-modules/tencentcloud-sdk-python/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/tencentcloud-sdk-python/default.nix b/pkgs/development/python-modules/tencentcloud-sdk-python/default.nix index f99d237b7616..91faac1e6c6d 100644 --- a/pkgs/development/python-modules/tencentcloud-sdk-python/default.nix +++ b/pkgs/development/python-modules/tencentcloud-sdk-python/default.nix @@ -9,14 +9,14 @@ buildPythonPackage rec { pname = "tencentcloud-sdk-python"; - version = "3.1.19"; + version = "3.1.20"; pyproject = true; src = fetchFromGitHub { owner = "TencentCloud"; repo = "tencentcloud-sdk-python"; tag = version; - hash = "sha256-l7XgDcHo1PfsjdpTg71wur1Cy8m9Fuqqv86GeHxmnQ4="; + hash = "sha256-ihuxIw3FUmZDyvIMkjhAgMIkZP+PFji33b21l9LaaI0="; }; build-system = [ setuptools ]; From 5b7e7b3e9fe806ff1fbf912067ee359bd72d9585 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 28 Dec 2025 10:49:26 +0100 Subject: [PATCH 56/61] python313Packages.publicsuffixlist: 1.0.2.20251222 -> 1.0.2.20251223 Changelog: https://github.com/ko-zu/psl/blob/v1.0.2.20251223-gha/CHANGES.md --- pkgs/development/python-modules/publicsuffixlist/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/publicsuffixlist/default.nix b/pkgs/development/python-modules/publicsuffixlist/default.nix index 11be7e4b3c11..3ca1f494841e 100644 --- a/pkgs/development/python-modules/publicsuffixlist/default.nix +++ b/pkgs/development/python-modules/publicsuffixlist/default.nix @@ -11,12 +11,12 @@ buildPythonPackage rec { pname = "publicsuffixlist"; - version = "1.0.2.20251222"; + version = "1.0.2.20251223"; pyproject = true; src = fetchPypi { inherit pname version; - hash = "sha256-AH9okvxG0VBeh6tM1BStIKyWhd1OjfiNmVlX8s8sykU="; + hash = "sha256-ENje3AleagrKul/SGRvjUG04nBuucap675+HW2oXigo="; }; postPatch = '' From 7c7494a217c0d6409bd7a0f430fec17ae736181f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 28 Dec 2025 10:51:17 +0100 Subject: [PATCH 57/61] python313Packages.plugwise: 1.11.0 -> 1.11.2 Diff: https://github.com/plugwise/python-plugwise/compare/v1.11.0...v1.11.2 Changelog: https://github.com/plugwise/python-plugwise/releases/tag/v1.11.2 --- pkgs/development/python-modules/plugwise/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/plugwise/default.nix b/pkgs/development/python-modules/plugwise/default.nix index ddb48afc17b1..383c89717d9e 100644 --- a/pkgs/development/python-modules/plugwise/default.nix +++ b/pkgs/development/python-modules/plugwise/default.nix @@ -18,7 +18,7 @@ buildPythonPackage rec { pname = "plugwise"; - version = "1.11.0"; + version = "1.11.2"; pyproject = true; disabled = pythonOlder "3.12"; @@ -27,7 +27,7 @@ buildPythonPackage rec { owner = "plugwise"; repo = "python-plugwise"; tag = "v${version}"; - hash = "sha256-fgUIyI9akQbVhcff413gIPzviGNZlQJztFTnW5+n9wU="; + hash = "sha256-4d9AK2sT0KVKU0oDfskOiSq7g2BuZksPL0wVJN0LbzY="; }; postPatch = '' From 7a3857697c5a809274c4d8d02eecd2e66cae3260 Mon Sep 17 00:00:00 2001 From: Henrique Oliveira Date: Sun, 28 Dec 2025 11:14:57 +0100 Subject: [PATCH 58/61] rcu: 4.0.31 -> 4.0.32 --- pkgs/by-name/rc/rcu/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/rc/rcu/package.nix b/pkgs/by-name/rc/rcu/package.nix index 4ec0d3ddc11d..6f58990b4e10 100644 --- a/pkgs/by-name/rc/rcu/package.nix +++ b/pkgs/by-name/rc/rcu/package.nix @@ -24,7 +24,7 @@ let in python3Packages.buildPythonApplication rec { pname = "rcu"; - version = "4.0.31"; + version = "4.0.32"; format = "other"; @@ -32,7 +32,7 @@ python3Packages.buildPythonApplication rec { let src-tarball = requireFile { name = "rcu-${version}-source.tar.gz"; - hash = "sha256-gOf6CaLqoGqJuTcyARdLnKiovPDFRtsABJgEEF7fx+A="; + hash = "sha256-0sJyCRDV76HUy78RBO27AgkXGroL217GNwHp8HMSKx8="; url = "https://www.davisr.me/projects/rcu/"; }; in From b3d94a77f636c8867c7c9809ec8057921025aac1 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sun, 28 Dec 2025 10:39:38 +0000 Subject: [PATCH 59/61] starlark: 0-unstable-2025-11-09 -> 0-unstable-2025-12-22 --- pkgs/by-name/st/starlark/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/st/starlark/package.nix b/pkgs/by-name/st/starlark/package.nix index fdf506934a3e..7186bd2b4f85 100644 --- a/pkgs/by-name/st/starlark/package.nix +++ b/pkgs/by-name/st/starlark/package.nix @@ -6,13 +6,13 @@ }: buildGoModule { pname = "starlark"; - version = "0-unstable-2025-11-09"; + version = "0-unstable-2025-12-22"; src = fetchFromGitHub { owner = "google"; repo = "starlark-go"; - rev = "be02852a5e1f2f07f08e887a191e725154c029b8"; - hash = "sha256-Njq60qM+2AigXZB3AAWV5mpN2uxDXJSsjJTPlMvYw5k="; + rev = "15019ee33dea8b618e081116e29a613c9aa050ea"; + hash = "sha256-BIWOmJwtTxjXTc48Mamm6uqPTNd7DMeURfQ2rYX4Ecs="; }; vendorHash = "sha256-8drlCBy+KROyqXzm/c+HBe/bMVOyvwRoLHxOApJhMfo="; From 22f80bc3f4c6047d7b19b950b5dbc568ebcd8683 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 26 Dec 2025 10:41:34 +0100 Subject: [PATCH 60/61] pywhisker: init at 0.1.0-unstable-2025-09-16 Tool for Shadow Credentials attacks https://github.com/ShutdownRepo/pywhisker --- pkgs/by-name/py/pywhisker/package.nix | 44 +++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 pkgs/by-name/py/pywhisker/package.nix diff --git a/pkgs/by-name/py/pywhisker/package.nix b/pkgs/by-name/py/pywhisker/package.nix new file mode 100644 index 000000000000..afcee1978bfb --- /dev/null +++ b/pkgs/by-name/py/pywhisker/package.nix @@ -0,0 +1,44 @@ +{ + lib, + fetchFromGitHub, + python3, +}: + +python3.pkgs.buildPythonApplication { + pname = "pywhisker"; + version = "0.1.0-unstable-2025-09-16"; + pyproject = true; + + src = fetchFromGitHub { + owner = "ShutdownRepo"; + repo = "pywhisker"; + rev = "dc35dba57bb4ad594f052d6598a855d192a37a3f"; + hash = "sha256-dXr/Vb7h+ZiO5VeOEx3tfXUq8sldrRofK5ENJDZcAb0="; + }; + + build-system = with python3.pkgs; [ setuptools ]; + + dependencies = with python3.pkgs; [ + cryptography + dsinternals + impacket + ldap3 + ldapdomaindump + pyasn1 + rich + six + ]; + + pythonImportsCheck = [ "pywhisker" ]; + + # Project has no tests + doCheck = false; + + meta = { + description = "Tool for Shadow Credentials attacks"; + homepage = "https://github.com/ShutdownRepo/pywhisker"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ fab ]; + mainProgram = "pywhisker"; + }; +} From 5b518cb9fe6de6893e74fd9db2b6b13b7f19a3cc Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 27 Dec 2025 22:36:15 +0100 Subject: [PATCH 61/61] agneyastra: init at 0-unstable-2025-11-06 Firebase Misconfiguration Detection Toolkit https://github.com/JA3G3R/agneyastra --- pkgs/by-name/ag/agneyastra/package.nix | 34 ++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 pkgs/by-name/ag/agneyastra/package.nix diff --git a/pkgs/by-name/ag/agneyastra/package.nix b/pkgs/by-name/ag/agneyastra/package.nix new file mode 100644 index 000000000000..02214d465efb --- /dev/null +++ b/pkgs/by-name/ag/agneyastra/package.nix @@ -0,0 +1,34 @@ +{ + lib, + buildGoModule, + fetchFromGitHub, +}: + +buildGoModule { + pname = "agneyastra"; + version = "0-unstable-2025-11-06"; + + src = fetchFromGitHub { + owner = "JA3G3R"; + repo = "agneyastra"; + # https://github.com/JA3G3R/agneyastra/issues/1 + rev = "16a90ecc7189e12261a24b88e6d6ac24b7f3b216"; + hash = "sha256-I3BzHS7D8ZVRLzx8TlUmebw96wTVwSkAAKsDqJ2Ekj8="; + }; + + vendorHash = "sha256-urAw78X6mY2O+rLdQvA6eubFk7XmzEzPQPKc/QudVTQ="; + + ldflags = [ + "-s" + "-w" + ]; + + meta = { + description = "Firebase Misconfiguration Detection Toolkit"; + homepage = "https://github.com/JA3G3R/agneyastra"; + # https://github.com/JA3G3R/agneyastra/issues/2 + license = lib.licenses.unfree; + maintainers = with lib.maintainers; [ fab ]; + mainProgram = "agneyastra"; + }; +}