diff --git a/doc/doc-support/package.nix b/doc/doc-support/package.nix
index 728bbe334501..7a0993cfcea5 100644
--- a/doc/doc-support/package.nix
+++ b/doc/doc-support/package.nix
@@ -118,7 +118,7 @@ stdenvNoCC.mkDerivation (
--script ./anchor.min.js \
--script ./anchor-use.js \
--sidebar-depth 3 \
- --nav ./nav.json \
+ --experimental-config ./nav.json \
--header ${./header.html}\
--no-navheader \
manual.md \
diff --git a/doc/nav.json b/doc/nav.json
index 15d4926421cf..8c564c94294d 100644
--- a/doc/nav.json
+++ b/doc/nav.json
@@ -1,3 +1,4 @@
{
- "open": []
+ "open": [],
+ "items": []
}
diff --git a/pkgs/applications/editors/vscode/extensions/anthropic.claude-code/default.nix b/pkgs/applications/editors/vscode/extensions/anthropic.claude-code/default.nix
index 09c6b73d12b0..4f8e22c9add4 100644
--- a/pkgs/applications/editors/vscode/extensions/anthropic.claude-code/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/anthropic.claude-code/default.nix
@@ -21,22 +21,22 @@ vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
sources = {
"x86_64-linux" = {
arch = "linux-x64";
- hash = "sha256-s1V+SxZ4O5EHcxE9ZxacnydNjfnK1Dv0y3YIPfsy3cs=";
+ hash = "sha256-3V4N8zHj7nB987ImVtBS84LGxdQgkDp14kTPps72fHo=";
};
"aarch64-linux" = {
arch = "linux-arm64";
- hash = "sha256-G9bJ6xNCiC72gR0k89sTh96alnHguSE5cqqOVu/3kCg=";
+ hash = "sha256-6p09GcEfmSQs4nRuaFxQ1tKK25ENo2KOPkRQTPndNcw=";
};
"aarch64-darwin" = {
arch = "darwin-arm64";
- hash = "sha256-ZDel1FfsiRbdw9pxn1H5nkOIlVdt1GLr68W2mBtl1mg=";
+ hash = "sha256-qbYE3f0fkxvfGyFAR8UPIFodOEYA0aJK6JK/r8PbI/k=";
};
};
in
{
name = "claude-code";
publisher = "anthropic";
- version = "2.1.222";
+ version = "2.1.223";
}
// sources.${stdenvNoCC.hostPlatform.system}
or (throw "Unsupported system ${stdenvNoCC.hostPlatform.system}");
diff --git a/pkgs/applications/networking/browsers/firefox/packages/firefox-beta.nix b/pkgs/applications/networking/browsers/firefox/packages/firefox-beta.nix
index 83fb6538eb5b..545d8bf9b2bd 100644
--- a/pkgs/applications/networking/browsers/firefox/packages/firefox-beta.nix
+++ b/pkgs/applications/networking/browsers/firefox/packages/firefox-beta.nix
@@ -10,11 +10,11 @@
buildMozillaMach rec {
pname = "firefox-beta";
binaryName = "firefox-beta";
- version = "153.0b13";
+ version = "154.0b7";
applicationName = "Firefox Beta";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
- sha512 = "fecfb1837d1907d54ed52bc40113804b6637352c2cbe6eb906f950d7749cbece32446b42c392102fa9e16591949619237dc2dbeb13bec18697ddd42e9ce8d4dd";
+ sha512 = "2a7da6938054f01a443da8d7cbaa38c99d76d90661f404754096041d9e8d5a27b118dcebd27687867706ba2540e5d453b8908e35f75a712220e812436d239dee";
};
meta = {
diff --git a/pkgs/by-name/ag/agentsploit/package.nix b/pkgs/by-name/ag/agentsploit/package.nix
new file mode 100644
index 000000000000..c4bdc75cd5ea
--- /dev/null
+++ b/pkgs/by-name/ag/agentsploit/package.nix
@@ -0,0 +1,74 @@
+{
+ lib,
+ fetchFromGitHub,
+ nix-update-script,
+ python3Packages,
+ versionCheckHook,
+}:
+
+python3Packages.buildPythonApplication (finalAttrs: {
+ pname = "agentsploit";
+ version = "1.6.3";
+ pyproject = true;
+
+ __structuredAttrs = true;
+
+ src = fetchFromGitHub {
+ owner = "agentsploit";
+ repo = "agentsploit";
+ tag = "v${finalAttrs.version}";
+ hash = "sha256-g9h+hM6ujm0uvkWZMoOkZ/wUGA77Yu6lEn1ZNHh6aTg=";
+ };
+
+ build-system = with python3Packages; [ hatchling ];
+
+ dependencies = with python3Packages; [
+ anthropic
+ anyio
+ fastapi
+ httpx
+ ics
+ jinja2
+ mcp
+ openai
+ pydantic
+ pyyaml
+ reportlab
+ rich
+ structlog
+ typer
+ uvicorn
+ ];
+
+ nativeCheckInputs = with python3Packages; [
+ jsonschema
+ pytestCheckHook
+ pytest-asyncio
+ pytest-cov-stub
+ types-pyyaml
+ ];
+
+ nativeInstallCheckInputs = [ versionCheckHook ];
+
+ disabledTestPaths = [
+ # Tests need network access
+ "tests/integration/"
+ ];
+
+ doInstallCheck = true;
+
+ versionCheckProgramArg = [ "version" ];
+
+ pythonImportsCheck = [ "agentsploit" ];
+
+ passthru.updateScript = nix-update-script { };
+
+ meta = {
+ description = "Offensive security framework for AI agents and MCP servers";
+ homepage = "https://github.com/agentsploit/agentsploit";
+ changelog = "https://github.com/agentsploit/agentsploit/blob/${finalAttrs.src.rev}/CHANGELOG.md";
+ license = lib.licenses.asl20;
+ maintainers = with lib.maintainers; [ fab ];
+ mainProgram = "agentsploit";
+ };
+})
diff --git a/pkgs/by-name/am/amp-cli/package.nix b/pkgs/by-name/am/amp-cli/package.nix
index 66e642a0dceb..6bd55c0cf2f4 100644
--- a/pkgs/by-name/am/amp-cli/package.nix
+++ b/pkgs/by-name/am/amp-cli/package.nix
@@ -26,7 +26,7 @@ let
in
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "amp-cli";
- version = "0.0.1785170481-ga5b614";
+ version = "0.0.1785975399-gb63fe6";
src = finalAttrs.passthru.sources.${stdenvNoCC.hostPlatform.system};
@@ -77,9 +77,9 @@ stdenvNoCC.mkDerivation (finalAttrs: {
url = "https://static.ampcode.com/cli/${finalAttrs.version}/amp-${platform}.gz";
hash =
{
- x86_64-linux = "sha256-/XzK8g9ES5vYC2Y/z/kuFnfpL42oZGn3GQ/Qw1vfUR4=";
- aarch64-linux = "sha256-hpqGi0TxkDgo6ygstE/Bsg75OPskj3RmiiR7895go+g=";
- aarch64-darwin = "sha256-A4POFqAD5e6WOhfAT6ibYmr+eEDFqkb8pDJSgu2GXZs=";
+ x86_64-linux = "sha256-bVkrQPLvRJdoxrA0laDKG9DnJvp3Q7hyCj9wxRPcJas=";
+ aarch64-linux = "sha256-z0m9FLX99Y3gBwOlWVBjCqume1Uz+OEMg7W5KRm+NLw=";
+ aarch64-darwin = "sha256-EoCJ3MT7zkSq5yfmdVy40J6LhjwHcFbtdmkkycmdF6E=";
}
.${system'};
}
diff --git a/pkgs/by-name/an/android-translation-layer/package.nix b/pkgs/by-name/an/android-translation-layer/package.nix
index 3f35e2d9e911..818f927ceb60 100644
--- a/pkgs/by-name/an/android-translation-layer/package.nix
+++ b/pkgs/by-name/an/android-translation-layer/package.nix
@@ -28,13 +28,13 @@
stdenv.mkDerivation {
pname = "android-translation-layer";
- version = "0-unstable-2026-01-19";
+ version = "0-unstable-2026-07-30";
src = fetchFromGitLab {
owner = "android_translation_layer";
repo = "android_translation_layer";
- rev = "bfcfb696d83c9769e1d99d3cb0d7a5908fe3c767";
- hash = "sha256-BTVduEJhKEOFhqoG0lgqlcg2x4k9RWABURj2nQECaek=";
+ rev = "cf2c759fa93330f45df6107dcf8984cf49b29c64";
+ hash = "sha256-+TTntAnE/5j/FhGcdXRui3/p/sfkc83CKNdBf9Yage0=";
};
patches = [
diff --git a/pkgs/by-name/ar/archisteamfarm/deps.json b/pkgs/by-name/ar/archisteamfarm/deps.json
index 472ce7eaee05..63ef43da7690 100644
--- a/pkgs/by-name/ar/archisteamfarm/deps.json
+++ b/pkgs/by-name/ar/archisteamfarm/deps.json
@@ -1,8 +1,8 @@
[
{
"pname": "AngleSharp",
- "version": "1.4.0",
- "hash": "sha256-xHpoMkhYSj7ejeMmI2e7ygef84QGZhttPjYOnLjITd0="
+ "version": "1.5.2",
+ "hash": "sha256-81rDtnwvR0SDXNNUnPirWIa782gwkgRlz1Fbzm2ywwc="
},
{
"pname": "CryptSharpStandard",
@@ -276,13 +276,13 @@
},
{
"pname": "JetBrains.Annotations.Sources",
- "version": "2025.2.4",
- "hash": "sha256-QrgVgGkrtQs4eSl2pkG4ozSJHEAVNfPb23BMZauhjcg="
+ "version": "2026.2.0",
+ "hash": "sha256-AqShNJbFCrtUbrqti44j6cUglBApw+VdXWFgsTrO3TU="
},
{
"pname": "Markdig.Signed",
- "version": "1.2.0",
- "hash": "sha256-dC75KeDfJOretrOkaH1Ai/uEYWvxjBosn4NMEhD+LCo="
+ "version": "1.3.2",
+ "hash": "sha256-jfZYxd91vssC/R89L92sEnswH7DTIpKb2fyckjAy1mE="
},
{
"pname": "Microsoft.ApplicationInsights",
@@ -291,8 +291,13 @@
},
{
"pname": "Microsoft.AspNetCore.OpenApi",
- "version": "10.0.8",
- "hash": "sha256-v2E7nwc4Nac8Ns5cQ2KmzLash9AEMbfQbMo2bFy7oZM="
+ "version": "10.0.10",
+ "hash": "sha256-Mbr8+mzZKu3iq5R4TbNY8r39bZI34SWWd7DfUHg2ETk="
+ },
+ {
+ "pname": "Microsoft.Bcl.Cryptography",
+ "version": "10.0.2",
+ "hash": "sha256-+OYtcWsd1qZcEXadYeA4t6+pyADg1APQCxpKUtP002M="
},
{
"pname": "Microsoft.CodeAnalysis.ResxSourceGenerator",
@@ -301,13 +306,13 @@
},
{
"pname": "Microsoft.CodeCoverage",
- "version": "18.3.0",
- "hash": "sha256-fqKglbYvEb/77+rmUvLyLZSwROM1P9OW03Ub307WYZ8="
+ "version": "18.4.0",
+ "hash": "sha256-px8qchiuY5rkujAZ1wGEjuuhZdZmsRSp+FCiTmRUA1A="
},
{
"pname": "Microsoft.DiaSymReader",
- "version": "2.2.3",
- "hash": "sha256-Wf2Hy/9o3xSKB9ZRXj3oUgr2CcUwu+BFn2BP2cX7KJQ="
+ "version": "2.2.9",
+ "hash": "sha256-ouOuoXyE0nz+ikwyz3C8C/CYkWa/sLlOXhkw65D+qCQ="
},
{
"pname": "Microsoft.Extensions.Configuration",
@@ -324,6 +329,11 @@
"version": "10.0.0",
"hash": "sha256-YSiWoA3VQR22k6+bSEAUqeG7UDzZlJfHWDTubUO5V8U="
},
+ {
+ "pname": "Microsoft.Extensions.Configuration.EnvironmentVariables",
+ "version": "10.0.0",
+ "hash": "sha256-UayfeqrAmNyfOkuhcBKfj8UpjQqV/ZMqWrDyxCSG1MA="
+ },
{
"pname": "Microsoft.Extensions.DependencyInjection",
"version": "10.0.0",
@@ -341,8 +351,8 @@
},
{
"pname": "Microsoft.Extensions.DependencyModel",
- "version": "8.0.2",
- "hash": "sha256-PyuO/MyCR9JtYqpA1l/nXGh+WLKCq34QuAXN9qNza9Q="
+ "version": "10.0.8",
+ "hash": "sha256-YX986Og+47sJnNonmoZCqa54HCaZhJ8fJl45qeRaaUQ="
},
{
"pname": "Microsoft.Extensions.Diagnostics.Abstractions",
@@ -396,28 +406,28 @@
},
{
"pname": "Microsoft.IdentityModel.Abstractions",
- "version": "8.18.0",
- "hash": "sha256-mkguJA4aXIVVQvSJ9Duq9mivbGXAIkLQp3a8PKy223A="
+ "version": "8.19.2",
+ "hash": "sha256-vNGK6u6V+S0MIaYTg+sSkRF4XUjM1K+cKuR1a9aRCLs="
},
{
"pname": "Microsoft.IdentityModel.JsonWebTokens",
- "version": "8.18.0",
- "hash": "sha256-MdqY9CGRs+fTLb3HYYcSfuzqDFo4Dpho4McFWWferjA="
+ "version": "8.19.2",
+ "hash": "sha256-j9ai0NrgytDsfQiIijp1Ib4jRGX9lgREQBoE6XW9SOc="
},
{
"pname": "Microsoft.IdentityModel.Logging",
- "version": "8.18.0",
- "hash": "sha256-09WyYskyL8gjjVDzoZBQAGXgsPmyagWftALSBCdt4gg="
+ "version": "8.19.2",
+ "hash": "sha256-ja8PAYUNwlfIrkL6EOuZ7SgZfRJwIORGG/ETDD1BtRE="
},
{
"pname": "Microsoft.IdentityModel.Tokens",
- "version": "8.18.0",
- "hash": "sha256-sFhonZW9G6H4ooQ6N/78fkZvADZ2Hf5WAS3FKd/ue1E="
+ "version": "8.19.2",
+ "hash": "sha256-POi3SzcK3+iB3104wXYh3ooVD1GbltwTUf+KMj//UYU="
},
{
"pname": "Microsoft.NET.Test.Sdk",
- "version": "18.3.0",
- "hash": "sha256-o2bILLF5i+XUoi8xZYgolU3CxLTdql5R/tEVWVnKFPU="
+ "version": "18.4.0",
+ "hash": "sha256-ak/emX4C4KQVzc0bSNK4bChS+dvb3FvxZbJNrmf/2+w="
},
{
"pname": "Microsoft.OpenApi",
@@ -426,73 +436,73 @@
},
{
"pname": "Microsoft.Testing.Extensions.CodeCoverage",
- "version": "18.5.2",
- "hash": "sha256-PkIEXfbyEwlxOIG4h420/TpWbbzAy7eV8RUy7iXHVtk="
+ "version": "18.9.0",
+ "hash": "sha256-tNtPxYAoOlYmfPcdx5towgbmGRMxBDocUiAlAfXIgqA="
},
{
"pname": "Microsoft.Testing.Extensions.Telemetry",
- "version": "2.2.3",
- "hash": "sha256-e70IRoXt5Aiwhxwd6nay0SBQD3ESXcAGh0lCucNtCAE="
+ "version": "2.3.2",
+ "hash": "sha256-3TancCfYy7OW9IU6q+zQv/ETlbBbcjxADrWVRQITytc="
},
{
"pname": "Microsoft.Testing.Extensions.TrxReport",
- "version": "2.2.3",
- "hash": "sha256-guXkeZ4AcbP9uu87/9IpSuZZdt03mFxShU/z2avv3oY="
+ "version": "2.3.2",
+ "hash": "sha256-YMuc6dHVBpP8vk/qBQcO0MXeelpcrr9Wgnpvwi2xEv0="
},
{
"pname": "Microsoft.Testing.Extensions.TrxReport.Abstractions",
- "version": "2.2.3",
- "hash": "sha256-eLb2Sm0lzQkgkdFdcZ76aIGShIf4lRPmpcMauUWN5QE="
+ "version": "2.3.2",
+ "hash": "sha256-MohDLqtLk1K93p1TnvYlaBNetpGoTZSep3xVQho3zb0="
},
{
"pname": "Microsoft.Testing.Extensions.VSTestBridge",
- "version": "2.2.3",
- "hash": "sha256-bSNPv1gAWEU7DVtqYS1qjbBN3lu9TTh6+/nDQCcIIHk="
+ "version": "2.3.2",
+ "hash": "sha256-9W4FmGvIfuwHQr3AFrCZ/uLhtJws5erQccw7ydT5yBU="
},
{
"pname": "Microsoft.Testing.Platform",
- "version": "2.1.0",
- "hash": "sha256-CbR0j0Dh65cMccO7L6ppx4b5iiXjqxjjfC9A85HeLuM="
+ "version": "2.3.0",
+ "hash": "sha256-9ZpWaMU5RmHXTJ3d/aM0WQ3u1IN0w2La4yrOqt7PB14="
},
{
"pname": "Microsoft.Testing.Platform",
- "version": "2.2.3",
- "hash": "sha256-Mz///qqkbdQsgpIjjAiHf/ptvjeQIsO6S99+tg+F8Fw="
+ "version": "2.3.2",
+ "hash": "sha256-kGOyHXenLNMpWyVTDWDh6/hP3qFtnHI5qIaet1udKWM="
},
{
"pname": "Microsoft.Testing.Platform.MSBuild",
- "version": "2.2.3",
- "hash": "sha256-mwt+i2y8UV30JrssGCx9kgjcZ+upWhAxEBs5fCXA/6k="
+ "version": "2.3.2",
+ "hash": "sha256-u0jsv5BU7gSBZlHoy94WlqM0QCJCFbEW1g19RxKn17Q="
},
{
"pname": "Microsoft.TestPlatform.ObjectModel",
- "version": "18.3.0",
- "hash": "sha256-3Y3OxAQsXl6sunQlSjfq31aLWykHQTj2o/TOVI/uy88="
+ "version": "18.4.0",
+ "hash": "sha256-ERL2goDaM0vUElW25DM/5lI2WplE5E6g9mhTegY0bC8="
},
{
"pname": "Microsoft.TestPlatform.TestHost",
- "version": "18.3.0",
- "hash": "sha256-OkR+XvipAHPQbHywTwN8lVcMpyRs2MUJKCxJ5OfKAFk="
+ "version": "18.4.0",
+ "hash": "sha256-S4T/6xHvov8jDcbcuZAOoutMAEudUb3dMP7MyxVa8Fo="
},
{
"pname": "MSTest",
- "version": "4.2.3",
- "hash": "sha256-G6agMAoiK8oMPTpq25i7zsUXXCDxGMP/UBU72Wky9t0="
+ "version": "4.3.2",
+ "hash": "sha256-wuyrsPndMA7FwEhwL+7mevm5WYF1nytvObPlAHIo5fU="
},
{
"pname": "MSTest.Analyzers",
- "version": "4.2.3",
- "hash": "sha256-XlSqWrZVG1nC/qDjNuSs51pM90nQ9QlQtwDKJQVsMPg="
+ "version": "4.3.2",
+ "hash": "sha256-mzMMs8H6u2pRnOb6UjA1pwSOKsULx2v18Stvp/cvxj0="
},
{
"pname": "MSTest.TestAdapter",
- "version": "4.2.3",
- "hash": "sha256-ckBpU7gg4LY2ZBPljRWz2yCj33vRf93Qm/JY7uGfeOs="
+ "version": "4.3.2",
+ "hash": "sha256-qiXoMftAKNEtN2LFwMd2e8EkBn03RfIk15CljjOuU0A="
},
{
"pname": "MSTest.TestFramework",
- "version": "4.2.3",
- "hash": "sha256-og5IO5g/fXm1y9hSNkqZ+libfD9o0dRm/8I9CF0J2So="
+ "version": "4.3.2",
+ "hash": "sha256-BQUOSbJd2LE5C4C5yx7MTozHaWxpo5R6mPC6EdzVHVk="
},
{
"pname": "Newtonsoft.Json",
@@ -521,58 +531,58 @@
},
{
"pname": "NLog",
- "version": "6.1.3",
- "hash": "sha256-s0sxfQ1tiWRSFVh/m/eIzEe4+ZgT02e9GZiwDAi7xp4="
+ "version": "6.1.4",
+ "hash": "sha256-76h0KhYh0B6NDrkV5MHhv8SqUSvhTF6CFKsao5nRBbQ="
},
{
"pname": "NLog.Extensions.Logging",
- "version": "6.1.3",
- "hash": "sha256-7Ryjk3FZqz6Cn8bCSK5OUf7VCQL9LA/bMCgwr5tpIys="
+ "version": "6.1.4",
+ "hash": "sha256-ChUPGAWJls61E3/w+3q9/jlxDaqGVxCbB6b6mHAPsI8="
},
{
"pname": "NLog.Web.AspNetCore",
- "version": "6.1.3",
- "hash": "sha256-FXxcK5kXO6qy/jw0lnphzhs9QF3u/i5A4GD13jqclUA="
+ "version": "6.1.4",
+ "hash": "sha256-PWrgqvrszRzOvk4tX0n70pa6wDea6eD+C/+2+QKFgoI="
},
{
"pname": "OpenTelemetry",
- "version": "1.15.3",
- "hash": "sha256-zOrEPW8noHfUINJtIWQYMTls2JLRUYm7aoyffjrMBLU="
+ "version": "1.17.0",
+ "hash": "sha256-z68MFp4PEANJeJ3O0nTfJcWosZ4eZl7Y5T93wVYKdKA="
},
{
"pname": "OpenTelemetry.Api",
- "version": "1.15.3",
- "hash": "sha256-vriWJD2xvBt6ir9u5o/aVPBqBJJA7S6IJhkjKDkeLfc="
+ "version": "1.17.0",
+ "hash": "sha256-r/Op/9OQhmL3H+XnkumD8BSdb6WwazolraVXCWDvfdA="
},
{
"pname": "OpenTelemetry.Api.ProviderBuilderExtensions",
- "version": "1.15.3",
- "hash": "sha256-Z4x0eA1dkCOJS5xYZ6ogMOk6H+ivvXuVj1mORyWMOSo="
+ "version": "1.17.0",
+ "hash": "sha256-dAzEFnvUGs0BjQ0Dpxl6ird18yk9ur3djAFVZXJktGM="
},
{
"pname": "OpenTelemetry.Exporter.Prometheus.AspNetCore",
- "version": "1.15.3-beta.1",
- "hash": "sha256-qgaIwTB9To17OifsThq1AsXg1Ms8sqnooAvf+gNJR8Y="
+ "version": "1.17.0-beta.1",
+ "hash": "sha256-5HpmgbBzLf1YX5FkdQHXKsq5rXgctNoSrUqc2iaNolc="
},
{
"pname": "OpenTelemetry.Extensions.Hosting",
- "version": "1.15.3",
- "hash": "sha256-5Z5/80xNttniodCF71s9cGXvDCkIc8Qdvpr969K5G0c="
+ "version": "1.17.0",
+ "hash": "sha256-wesl30ehEO8aIf4kDRRE2iHkMKnv6Ox/4LyQdmtLBnc="
},
{
"pname": "OpenTelemetry.Instrumentation.AspNetCore",
- "version": "1.15.2",
- "hash": "sha256-rfStn++qynwoTOa5H5IFwbAPn7sOgW/vebcfKvOusio="
+ "version": "1.17.0",
+ "hash": "sha256-ydRp8bo5vnHkNzUUHl631WAwbl2d78jQRWXLVvL/QEs="
},
{
"pname": "OpenTelemetry.Instrumentation.Http",
- "version": "1.15.1",
- "hash": "sha256-VG3zmUmFcN+mk7BkIcss1RjkcrVWrQMn8AUDTM4wpus="
+ "version": "1.17.0",
+ "hash": "sha256-QFGOiVZ91oDhu3e/C7vUWxq0v5fcaoaWkwbyWbzIhbo="
},
{
"pname": "OpenTelemetry.Instrumentation.Runtime",
- "version": "1.15.1",
- "hash": "sha256-wE0909zdzuGUB/KD/yEfLV9F5EvZGMmwjL2tpO4bOh4="
+ "version": "1.17.0",
+ "hash": "sha256-YCVl3X4hEqWeJ4buBA6wdQDwDXeR2Ae/fHyuySKqCX0="
},
{
"pname": "protobuf-net",
@@ -586,8 +596,8 @@
},
{
"pname": "Scalar.AspNetCore",
- "version": "2.14.14",
- "hash": "sha256-/9lh1yFvp8/ROxdQcJEhEtFwrpOCdRNwFfz8B53epVk="
+ "version": "2.16.15",
+ "hash": "sha256-XRzl2wnxnR84jshpKbQbosfU+D3wMAZx7Qs8PwmxXe4="
},
{
"pname": "SteamKit2",
@@ -596,33 +606,33 @@
},
{
"pname": "System.Composition",
- "version": "10.0.8",
- "hash": "sha256-sp1IzwdxzVZwEF3mOCkobc5SYUGm/u3FDZUPkekoxZs="
+ "version": "10.0.10",
+ "hash": "sha256-u3CKzFRnQ10eMC67s610GQj5/CaEGxxpDtQB028NbzA="
},
{
"pname": "System.Composition.AttributedModel",
- "version": "10.0.8",
- "hash": "sha256-6iUFdykgMj6yOG10qR3TOz6mrQnfDGsr4Q8WP65hBFU="
+ "version": "10.0.10",
+ "hash": "sha256-aGKpD94yaSuK0vmdV8tSPZ4BtHaFZ90H2XxbePvmaMs="
},
{
"pname": "System.Composition.Convention",
- "version": "10.0.8",
- "hash": "sha256-MIQePJ3OkWpA07U+xH1PwiV88WtSGBaTxUrA1j4hD6Y="
+ "version": "10.0.10",
+ "hash": "sha256-o+ptLKlKBZAYri+QVDCeP4ljfXDCQ176fUaI0FeHL2o="
},
{
"pname": "System.Composition.Hosting",
- "version": "10.0.8",
- "hash": "sha256-SOAD0Yz8A/XJ8tEi7Q8DL9H7FzTcgg8HAbnZYKiyZNk="
+ "version": "10.0.10",
+ "hash": "sha256-VMZs+YqwwIJsCpUiC+kdbDjG7l+qnjk7Nq4Tnbtg058="
},
{
"pname": "System.Composition.Runtime",
- "version": "10.0.8",
- "hash": "sha256-hRkoJ8S1oD4FKjnaDYwfzX2Pys6QvGiiX6YxrdGgAyA="
+ "version": "10.0.10",
+ "hash": "sha256-HTIvnvhcTdMdEv7Y20vK+VuQy9reqOfMQRKWjzeEr+I="
},
{
"pname": "System.Composition.TypedParts",
- "version": "10.0.8",
- "hash": "sha256-NYo2dvMJ9WU0BKIGDkuIpFQHkbZE1sGJAtY8fINFpqo="
+ "version": "10.0.10",
+ "hash": "sha256-Qx3V/LSM5jHwnHVl77w3G7jK3EhnFWgmWxCAJ1Fyres="
},
{
"pname": "System.IO.Hashing",
@@ -631,13 +641,13 @@
},
{
"pname": "System.Security.Cryptography.ProtectedData",
- "version": "10.0.8",
- "hash": "sha256-GYRQSkRnDWytMIQcoNrAVbJda5nzfbtg1HJuwRZVxH0="
+ "version": "10.0.10",
+ "hash": "sha256-sKm55fvpXHZIH5Jw+zTz06BwMb8Nog5+1LgxPyU5lbk="
},
{
"pname": "Tmds.DBus.Protocol",
- "version": "0.93.0",
- "hash": "sha256-Oi2SDkrhTG3v9KXlRsmXQWsRJbQYVqg9bgiao1pUD0k="
+ "version": "0.94.2",
+ "hash": "sha256-ZUxaReVMikjf3VqjUSSTovcjDTWJO8jHNKrvj1dgHJI="
},
{
"pname": "ZstdSharp.Port",
diff --git a/pkgs/by-name/ar/archisteamfarm/package.nix b/pkgs/by-name/ar/archisteamfarm/package.nix
index 81e766c324da..8507d8ecc66a 100644
--- a/pkgs/by-name/ar/archisteamfarm/package.nix
+++ b/pkgs/by-name/ar/archisteamfarm/package.nix
@@ -21,13 +21,13 @@ in
buildDotnetModule rec {
pname = "archisteamfarm";
# nixpkgs-update: no auto update
- version = "6.3.6.1";
+ version = "6.3.8.4";
src = fetchFromGitHub {
owner = "JustArchiNET";
repo = "ArchiSteamFarm";
tag = version;
- hash = "sha256-C0n3e/t1Bq02vlrF/KyT7vlhtNDIbAsg9zAk9aKZ5/g=";
+ hash = "sha256-LCynvt8TzvfttqHMq0yAjrP5V8IK/dnpJogeh+6NWoY=";
};
dotnet-runtime = dotnetCorePackages.aspnetcore_10_0;
diff --git a/pkgs/by-name/ar/archisteamfarm/web-ui/default.nix b/pkgs/by-name/ar/archisteamfarm/web-ui/default.nix
index d585db827a95..925c143a1bd1 100644
--- a/pkgs/by-name/ar/archisteamfarm/web-ui/default.nix
+++ b/pkgs/by-name/ar/archisteamfarm/web-ui/default.nix
@@ -7,7 +7,7 @@
buildNpmPackage rec {
pname = "asf-ui";
- version = "a4d5a9a4fbd09ad2ed00ec09db8344175f120898";
+ version = "5e028bc91dd3c0238b602714d96713a205600248";
src = fetchFromGitHub {
owner = "JustArchiNET";
@@ -15,10 +15,10 @@ buildNpmPackage rec {
# updated by the update script
# this is always the commit that should be used with asf-ui from the latest asf version
rev = version;
- hash = "sha256-PP9VT1F8EX5AgNr3OGsirDkUSVAzKHbBpJi6XBlEWeg=";
+ hash = "sha256-HdUdSrwTXALoT7qmcAYwaeaw1POus8++TBeoqIuEMDM=";
};
- npmDepsHash = "sha256-bqwDKSaQt6ptfZC7B332Ig/BAZvJRQ/NaxPgA5VQ884=";
+ npmDepsHash = "sha256-Vhs5apBz951fcvIx8J+/oShit7rD4/RB919d40cjavs=";
installPhase = ''
runHook preInstall
diff --git a/pkgs/by-name/ar/art-standalone/package.nix b/pkgs/by-name/ar/art-standalone/package.nix
index cb7c5904a462..e7f3c1987147 100644
--- a/pkgs/by-name/ar/art-standalone/package.nix
+++ b/pkgs/by-name/ar/art-standalone/package.nix
@@ -22,13 +22,13 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "art-standalone";
- version = "0-unstable-2025-10-09";
+ version = "0-unstable-2026-08-03";
src = fetchFromGitLab {
owner = "android_translation_layer";
repo = "art_standalone";
- rev = "e78bf68917bcaaf58fef3960cd88793b3b7f39cc";
- hash = "sha256-0r6Ap41AMSHhZpMJ5QoWiGGcHPj35et4kiA20xs9uLs=";
+ rev = "66a5d9079b159e9c5819bfeef4a6fff6a5f32719";
+ hash = "sha256-4dRKghsPP8XLCcCe6bQDzJVlggBdFWe3l2/ge35HIXA=";
};
patches = [
diff --git a/pkgs/by-name/aw/awakened-poe-trade/package.nix b/pkgs/by-name/aw/awakened-poe-trade/package.nix
index 2ca5552d233c..8aa69f20e523 100644
--- a/pkgs/by-name/aw/awakened-poe-trade/package.nix
+++ b/pkgs/by-name/aw/awakened-poe-trade/package.nix
@@ -13,11 +13,11 @@
stdenv.mkDerivation (finalAttrs: {
pname = "awakened-poe-trade";
- version = "3.29.102";
+ version = "3.29.103";
src = fetchurl {
url = "https://github.com/SnosMe/awakened-poe-trade/releases/download/v${finalAttrs.version}/Awakened-PoE-Trade-${finalAttrs.version}.AppImage";
- hash = "sha256-mjtdM8tEi+Gvf3B4gopEEqlNfp89+J4w1Jy+dyWtig8=";
+ hash = "sha256-Nxq9b58nmpvXs3xKWYi0IpI9QyYbrLPWJplA1l6hKzE=";
};
passthru = {
diff --git a/pkgs/by-name/bi/bionic-translation/package.nix b/pkgs/by-name/bi/bionic-translation/package.nix
index 28d6aafc38b9..ba0d36b0317c 100644
--- a/pkgs/by-name/bi/bionic-translation/package.nix
+++ b/pkgs/by-name/bi/bionic-translation/package.nix
@@ -14,13 +14,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "bionic-translation";
- version = "0-unstable-2025-11-25";
+ version = "0-unstable-2026-08-03";
src = fetchFromGitLab {
owner = "android_translation_layer";
repo = "bionic_translation";
- rev = "5c31d4366fbb0af70690e72e5a861e7b44ffb1ef";
- hash = "sha256-dlHjx6+yymvIjDEs2TZexZUIUz32iKD0r+H4AJ89xig=";
+ rev = "484b1b05795784a5a57dbd4ffad21a3e680a33b2";
+ hash = "sha256-43VJPhN8/J/pJr8mdV9/n+hrVZLzh7aQhAJ8cT53BHc=";
};
nativeBuildInputs = [
diff --git a/pkgs/by-name/ch/checkmate/package.nix b/pkgs/by-name/ch/checkmate/package.nix
index ffbb8041e259..5c5c23b600f9 100644
--- a/pkgs/by-name/ch/checkmate/package.nix
+++ b/pkgs/by-name/ch/checkmate/package.nix
@@ -6,16 +6,16 @@
buildGoModule (finalAttrs: {
pname = "checkmate";
- version = "0.9.3";
+ version = "1.3.3";
src = fetchFromGitHub {
owner = "adedayo";
repo = "checkmate";
rev = "v${finalAttrs.version}";
- hash = "sha256-XzzN4oIG6E4NsMGl4HzFlgAGhkRieRn+jyA0bT8fcrg=";
+ hash = "sha256-FxBDeFdLORh76oHqrB+NXhz2nVH4bHJEF7ioSx+fngM=";
};
- vendorHash = "sha256-D87b/LhHnu8xE0wRdB/wLIuf5NlqrVnKt2WAF29bdZo=";
+ vendorHash = "sha256-RM1jgnnCdGb06Uu7xoujjVjhYZSjGozesg+DFOjib1I=";
subPackages = [ "." ];
diff --git a/pkgs/by-name/cl/claude-code/manifest.json b/pkgs/by-name/cl/claude-code/manifest.json
index 9ac4d313bc0e..4f608ea8240a 100644
--- a/pkgs/by-name/cl/claude-code/manifest.json
+++ b/pkgs/by-name/cl/claude-code/manifest.json
@@ -1,47 +1,47 @@
{
- "version": "2.1.222",
- "commit": "fbf49312c28437bf9c2546b9ace3bd7b34eb6ff6",
- "buildDate": "2026-08-04T01:46:04Z",
+ "version": "2.1.223",
+ "commit": "4535f69721056abf01650c73ee8a91c69ba00838",
+ "buildDate": "2026-08-05T21:55:19Z",
"platforms": {
"darwin-arm64": {
"binary": "claude",
- "checksum": "c66a6cc6fa2e8145bb1a6e77831f2caf4b83690ff04650500dfa6e2c05ca997c",
- "size": 271289792
+ "checksum": "fcbe0b8d47570c501302dd1ad31cc26ac2810f022c45fa253936a6961dee32bf",
+ "size": 272553824
},
"darwin-x64": {
"binary": "claude",
- "checksum": "36bfc6482a25730dbb1cee72589e522c66c45a4dc9ebfdd8a76a8113b01b6188",
- "size": 280847136
+ "checksum": "350e657428a6d34f7cf71f6738c5ebb6a1952ccb12fc1747f64297e065b1846f",
+ "size": 282118560
},
"linux-arm64": {
"binary": "claude",
- "checksum": "a04be0a8d7fe0259571ab7411d51d85658d71a4a26ce62b60c908290372e6016",
- "size": 286178232
+ "checksum": "60e83d8db0e894d0e54413e5e7daa256d180db660f51e139a51b614fc30cf3ac",
+ "size": 287423416
},
"linux-x64": {
"binary": "claude",
- "checksum": "10caae8f22b915c26bfff0e013a4d45608c4f1ae287583626569156f447730e5",
- "size": 289467400
+ "checksum": "98226474f802e3094d6a86c5ade8883c16206d0fcb5c400b7401c800063e99d7",
+ "size": 290728968
},
"linux-arm64-musl": {
"binary": "claude",
- "checksum": "a3c3e3202ae8842a5e9d2b4ce1dcea9fa00d4e0ae27b5b3e8d778332ba3bb23c",
- "size": 279491944
+ "checksum": "f41692eab23ebcd836d342fbc494d8783b1f19efb13d04fbf8461d2806ccb586",
+ "size": 280737128
},
"linux-x64-musl": {
"binary": "claude",
- "checksum": "e0b0fb4005e1ac0ebcee136254c638722f1c49e171a23d0843c605d72aac9029",
- "size": 284074576
+ "checksum": "8a4e561e8af19746d2defcf1a5661f5c0384c9c26dadd87d45e11b67802ad147",
+ "size": 285336144
},
"win32-x64": {
"binary": "claude.exe",
- "checksum": "032cb799d2abfaa6ca440f6458304b9a2a250521063d21ebcea7f3c77c443db7",
- "size": 279014048
+ "checksum": "a708ba811c4cc46907df358e22f2aa6da3dbc28192747e4d3c4a0869752fe722",
+ "size": 280233632
},
"win32-arm64": {
"binary": "claude.exe",
- "checksum": "f760aa2782019e55b1e44fda9eddec85ca8499429da87efddd47ab18d4a716a2",
- "size": 273687200
+ "checksum": "8efb44f04fda50fac3c7602276903e44ff82d48f1a29a41f1a5d98891a01864b",
+ "size": 274906784
}
},
"sdkCompat": {
diff --git a/pkgs/by-name/cn/cnspec/package.nix b/pkgs/by-name/cn/cnspec/package.nix
index db986bf6e2fe..0509061ea3ea 100644
--- a/pkgs/by-name/cn/cnspec/package.nix
+++ b/pkgs/by-name/cn/cnspec/package.nix
@@ -6,18 +6,18 @@
buildGoModule (finalAttrs: {
pname = "cnspec";
- version = "13.30.1";
+ version = "13.32.1";
src = fetchFromGitHub {
owner = "mondoohq";
repo = "cnspec";
tag = "v${finalAttrs.version}";
- hash = "sha256-u617olxSFcDd/6qK26SteiGOzEN+1shqntUzgw6bFq8=";
+ hash = "sha256-f4Cx525MsVrpXDTxDJeG0ddsaFb2aqGWhZCm20pD8lU=";
};
proxyVendor = true;
- vendorHash = "sha256-VwaV6OHl9LPLD2BbIESRjG572W5uGH4514P3ue2f894=";
+ vendorHash = "sha256-cxFhSCIiNOrnicgqR1OC7vuEDQbQeEuCamb08elA++Y=";
subPackages = [ "apps/cnspec" ];
diff --git a/pkgs/by-name/co/contact/package.nix b/pkgs/by-name/co/contact/package.nix
index e6ad0ba8ade2..74c4766f0c27 100644
--- a/pkgs/by-name/co/contact/package.nix
+++ b/pkgs/by-name/co/contact/package.nix
@@ -6,14 +6,14 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "contact";
- version = "1.5.8";
+ version = "1.6.7";
pyproject = true;
src = fetchFromGitHub {
owner = "pdxlocations";
repo = "contact";
tag = finalAttrs.version;
- hash = "sha256-YNDw/lAPuJIyK6abRnl5WOyv8+t/PTtmBvFWu7NTVwY=";
+ hash = "sha256-i+mWkHdDJAGiX0F4vTygU9oGqUeczSaziiOwRqAXa30=";
};
dependencies = [ python3Packages.meshtastic ];
diff --git a/pkgs/by-name/fe/fence/package.nix b/pkgs/by-name/fe/fence/package.nix
index 2533d40ccd76..864230099377 100644
--- a/pkgs/by-name/fe/fence/package.nix
+++ b/pkgs/by-name/fe/fence/package.nix
@@ -14,13 +14,13 @@
buildGoModule (finalAttrs: {
pname = "fence";
- version = "0.1.64";
+ version = "0.1.66";
src = fetchFromGitHub {
owner = "fencesandbox";
repo = "fence";
tag = "v${finalAttrs.version}";
- hash = "sha256-pBeTUcLs3fLGTkbmmUcikPDtGUQ4s3Q8XbKQYsPJTKw=";
+ hash = "sha256-I3nrM2W21n6YdYnE8OhjqBF0969EaWY0k9U6BJDGFHw=";
};
vendorHash = "sha256-WjhfAw8wgxvTbTkYwURm9vN2oSvQWiMP2RhwZDCQ0DU=";
diff --git a/pkgs/by-name/fn/fna3d/package.nix b/pkgs/by-name/fn/fna3d/package.nix
index 46e29a1ab36e..baad06f06271 100644
--- a/pkgs/by-name/fn/fna3d/package.nix
+++ b/pkgs/by-name/fn/fna3d/package.nix
@@ -11,14 +11,14 @@
stdenv.mkDerivation (finalAttrs: {
pname = "fna3d";
- version = "26.06";
+ version = "26.08";
src = fetchFromGitHub {
owner = "FNA-XNA";
repo = "FNA3D";
tag = finalAttrs.version;
fetchSubmodules = true;
- hash = "sha256-p85nZzpegjXQTUv64Pxhn6BxBTUN5bOs73cgqLu79GI=";
+ hash = "sha256-KD2HSBvB7oiy4/AAYSi+bOEYYYyP3XqtYvjZOBIYzig=";
};
cmakeFlags = [
diff --git a/pkgs/by-name/je/jenkins/package.nix b/pkgs/by-name/je/jenkins/package.nix
index 63a64f804151..37b4825bdf0f 100644
--- a/pkgs/by-name/je/jenkins/package.nix
+++ b/pkgs/by-name/je/jenkins/package.nix
@@ -18,14 +18,14 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "jenkins";
- version = "2.568.1";
+ version = "2.568.2";
strictDeps = true;
__structuredAttrs = true;
src = fetchurl {
url = "https://get.jenkins.io/war-stable/${finalAttrs.version}/jenkins.war";
- hash = "sha256-WPJPOWX773cIYp++FY1RvxOP/Vd8rbyGtGNn6K0L64M=";
+ hash = "sha256-m7srMp5Scwun3s0aehCVmH9iUOx2H7IRV9uyy80e9ZA=";
};
nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/by-name/kc/kcl/package.nix b/pkgs/by-name/kc/kcl/package.nix
index 4ed203ba3761..aa0ffd23d942 100644
--- a/pkgs/by-name/kc/kcl/package.nix
+++ b/pkgs/by-name/kc/kcl/package.nix
@@ -11,16 +11,16 @@
buildGoModule (finalAttrs: {
pname = "kcl";
- version = "0.12.7";
+ version = "0.12.8";
src = fetchFromGitHub {
owner = "kcl-lang";
repo = "cli";
rev = "v${finalAttrs.version}";
- hash = "sha256-HPydO/gBJkMsqR3Eb3ymKprm5x7tr9//IKT052hiDNA=";
+ hash = "sha256-hw5Ul0+0OT9hI8Nmg5tozwfPnXcF2q+K6aAFPxcMkgY=";
};
- vendorHash = "sha256-46qLRdB0epfZPuvNVYaLIAiTkI9kbAS6OM9OYC8cmmE=";
+ vendorHash = "sha256-WpUGScCd/laihQjC0oGKMYpOLMgfk/t7u3mrsCvf+Rk=";
subPackages = [ "cmd/kcl" ];
diff --git a/pkgs/by-name/ko/kolla/package.nix b/pkgs/by-name/ko/kolla/package.nix
index 5322f07a6ebe..15c2de812bea 100644
--- a/pkgs/by-name/ko/kolla/package.nix
+++ b/pkgs/by-name/ko/kolla/package.nix
@@ -57,10 +57,9 @@ python3Packages.buildPythonApplication (finalAttrs: {
bashate
];
- # Tests output a few exceptions but still succeed
checkPhase = ''
runHook preCheck
- stestr run -e <(echo "test_load_ok")
+ stestr run
runHook postCheck
'';
diff --git a/pkgs/by-name/ku/kubexhunt/package.nix b/pkgs/by-name/ku/kubexhunt/package.nix
new file mode 100644
index 000000000000..700b99f407c2
--- /dev/null
+++ b/pkgs/by-name/ku/kubexhunt/package.nix
@@ -0,0 +1,55 @@
+{
+ lib,
+ fetchFromGitHub,
+ nix-update-script,
+ python3Packages,
+ versionCheckHook,
+}:
+
+python3Packages.buildPythonApplication (finalAttrs: {
+ pname = "kubexhunt";
+ version = "2.1";
+ pyproject = true;
+
+ __structuredAttrs = true;
+
+ src = fetchFromGitHub {
+ owner = "mr-xhunt";
+ repo = "kubeXhunt";
+ tag = "v${finalAttrs.version}";
+ hash = "sha256-MknzQhNLtuiW89TBYYU00xGgYZEbIKqMNk9I1SvzDzs=";
+ };
+
+ build-system = with python3Packages; [ setuptools ];
+
+ dependencies = with python3Packages; [
+ azure-identity
+ boto3
+ google-cloud-iam
+ neo4j
+ jinja2
+ ];
+
+ nativeCheckInputs = with python3Packages; [
+ pytest-cov-stub
+ pytestCheckHook
+ safety
+ ];
+
+ nativeInstallCheckInputs = [ versionCheckHook ];
+
+ pythonImportsCheck = [ "kubexhunt" ];
+
+ doInstallCheck = true;
+
+ passthru.updateScript = nix-update-script { };
+
+ meta = {
+ description = "Kubernetes security assessment toolkit";
+ homepage = "https://github.com/mr-xhunt/kubeXhunt";
+ changelog = "https://github.com/mr-xhunt/kubeXhunt/releases/tag/v${finalAttrs.version}";
+ license = lib.licenses.mit;
+ maintainers = with lib.maintainers; [ fab ];
+ mainProgram = "kubexhunt";
+ };
+})
diff --git a/pkgs/by-name/la/lasuite-meet/frontend.nix b/pkgs/by-name/la/lasuite-meet/frontend.nix
index e1ad1dbb0717..56871f8a9134 100644
--- a/pkgs/by-name/la/lasuite-meet/frontend.nix
+++ b/pkgs/by-name/la/lasuite-meet/frontend.nix
@@ -17,7 +17,7 @@ buildNpmPackage (finalAttrs: {
src
sourceRoot
;
- hash = "sha256-X+RzRM1rRZZ2k1kjtk0JVXBIbEIuX5mk/zRzwjGKr1s=";
+ hash = "sha256-PArNKjdLqKJSEEKe94mguzKiNSwpYk56inenU3GL1mI=";
};
npmBuildScript = "build";
diff --git a/pkgs/by-name/la/lasuite-meet/mail.nix b/pkgs/by-name/la/lasuite-meet/mail.nix
index eedcd1d4764d..d1e8e4634d60 100644
--- a/pkgs/by-name/la/lasuite-meet/mail.nix
+++ b/pkgs/by-name/la/lasuite-meet/mail.nix
@@ -22,7 +22,7 @@ buildNpmPackage (finalAttrs: {
pname = "${finalAttrs.pname}-npm-deps";
inherit version src;
inherit (finalAttrs) sourceRoot;
- hash = "sha256-nZURiOcSgXZwXBkB43GPerXUF2RSTiEPnjsVLSyXKxw=";
+ hash = "sha256-rqtLjMp0nCfo1wDAeB5WxVtmL/TR3Ky3qaMaBohnH1M=";
};
npmBuildScript = "build";
diff --git a/pkgs/by-name/la/lasuite-meet/package.nix b/pkgs/by-name/la/lasuite-meet/package.nix
index 898ee7514fe1..ac5a69718431 100644
--- a/pkgs/by-name/la/lasuite-meet/package.nix
+++ b/pkgs/by-name/la/lasuite-meet/package.nix
@@ -6,13 +6,13 @@
python3,
}:
let
- version = "1.25.0";
+ version = "1.25.2";
src = fetchFromGitHub {
owner = "suitenumerique";
repo = "meet";
tag = "v${version}";
- hash = "sha256-0+X7kqydIkISYh+zy8/dqOkhkNmkpCuRgyq32OKtbcY=";
+ hash = "sha256-gtChKd6sr2nHEmi0Z/nbuCCNsOD8iVIAFjqonZFgQ/Y=";
};
meta = {
diff --git a/pkgs/by-name/ma/mame/package.nix b/pkgs/by-name/ma/mame/package.nix
index 17d7731dc776..0a9ee77cbe0c 100644
--- a/pkgs/by-name/ma/mame/package.nix
+++ b/pkgs/by-name/ma/mame/package.nix
@@ -24,7 +24,7 @@
portmidi,
pugixml,
python3,
- libsForQt5,
+ qt6,
rapidjson,
sqlite,
utf8proc,
@@ -36,14 +36,14 @@
stdenv.mkDerivation (finalAttrs: {
pname = "mame";
- version = "0.287";
+ version = "0.289";
srcVersion = builtins.replaceStrings [ "." ] [ "" ] finalAttrs.version;
src = fetchFromGitHub {
owner = "mamedev";
repo = "mame";
rev = "mame${finalAttrs.srcVersion}";
- hash = "sha256-d1Y3KrJwL8iDjQDqG6FRN82WzVAqTcY1YJaayUQO8sk=";
+ hash = "sha256-tbveDIOPZjEoTmo5rV2fR9An1I6X4P8Ec7HYHWL6H6U=";
};
outputs = [
@@ -88,7 +88,7 @@ stdenv.mkDerivation (finalAttrs: {
sdl3
sdl3-ttf
sqlite
- libsForQt5.qtbase
+ qt6.qtbase
]
++ lib.optionals stdenv.hostPlatform.isLinux [
alsa-lib
@@ -108,7 +108,7 @@ stdenv.mkDerivation (finalAttrs: {
pkg-config
python3
which
- libsForQt5.wrapQtAppsHook
+ qt6.wrapQtAppsHook
];
patches = [
diff --git a/pkgs/by-name/ni/nixos-render-docs/src/nixos_render_docs/manual.py b/pkgs/by-name/ni/nixos-render-docs/src/nixos_render_docs/manual.py
index 3f61608d60fa..551465ad4881 100644
--- a/pkgs/by-name/ni/nixos-render-docs/src/nixos_render_docs/manual.py
+++ b/pkgs/by-name/ni/nixos-render-docs/src/nixos_render_docs/manual.py
@@ -3,9 +3,9 @@ import hashlib
import html
import json
import re
-import xml.sax.saxutils as xml
from abc import abstractmethod
from collections.abc import Mapping, Sequence
+from dataclasses import dataclass
from pathlib import Path
from typing import Any, Callable, ClassVar, Generic, NamedTuple, cast, get_args
@@ -44,6 +44,7 @@ class BaseConverter(Converter[md.TR], Generic[md.TR]):
self._current_type = ['book']
try:
tokens = self._parse(infile.read_text())
+ self._prepend_config(infile, tokens)
self._postprocess(infile, outfile, tokens)
converted = self._renderer.render(tokens)
outfile.write_text(converted)
@@ -53,6 +54,9 @@ class BaseConverter(Converter[md.TR], Generic[md.TR]):
def _postprocess(self, infile: Path, outfile: Path, tokens: Sequence[Token]) -> None:
pass
+ def _prepend_config(self, infile: Path, tokens: list[Token]) -> None:
+ pass
+
def _handle_headings(self, tokens: list[Token], *, src: str, on_heading: Callable[[Token,str],None]) -> None:
# Headings in a globally numbered order
# h1 to h6
@@ -232,6 +236,7 @@ class RendererMixin(Renderer):
'included_preface': lambda *args: self._included_thing("preface", *args),
'included_parts': lambda *args: self._included_thing("part", *args),
'included_appendix': lambda *args: self._included_thing("appendix", *args),
+ 'included_content': lambda *args: self._included_thing("content", *args),
'included_options': self.included_options,
}
@@ -264,7 +269,6 @@ class HTMLParameters(NamedTuple):
# structural depth of the navigation sidebar tree
sidebar_depth: int
media_dir: Path
- sidebar_open: frozenset[str] = frozenset()
header: Path | None = None
no_navheader: bool = False
@@ -273,15 +277,18 @@ class ManualHTMLRenderer(RendererMixin, HTMLRenderer):
_in_dir: Path
_html_params: HTMLParameters
_redirects: Redirects | None
+ _sidebar_open: frozenset[str]
def __init__(self, toplevel_tag: str, revision: str, html_params: HTMLParameters,
manpage_urls: Mapping[str, str], xref_targets: dict[str, XrefTarget],
- redirects: Redirects | None, in_dir: Path, base_path: Path):
+ redirects: Redirects | None, in_dir: Path, base_path: Path,
+ sidebar_open: frozenset[str]):
super().__init__(toplevel_tag, revision, manpage_urls, xref_targets)
self._in_dir = in_dir
self._base_path = base_path.absolute()
self._html_params = html_params
self._redirects = redirects
+ self._sidebar_open = sidebar_open
def _pull_image(self, src: str) -> str:
src_path = Path(src)
@@ -542,7 +549,10 @@ document.addEventListener("DOMContentLoaded", createObserver);
link = f'{e.target.toc_html}'
cls = html.escape(e.kind, True)
if children:
- open_attr = " open" if e.target.id in self._html_params.sidebar_open else ""
+ # a group without an 'id' in the config gets open_id "".
+ # the empty key then fails the truth test, so the group stays closed.
+ key = e.target.id if e.open_id is None else e.open_id
+ open_attr = " open" if key and key in self._sidebar_open else ""
items.append(
f'
'
f'{link}
{children} '
@@ -607,6 +617,25 @@ document.addEventListener("DOMContentLoaded", createObserver);
def _to_base26(n: int) -> str:
return (_to_base26(n // 26) if n > 26 else "") + chr(ord("A") + n % 26)
+@dataclass
+class ConfigLeaf:
+ file: str
+ label: str | None = None
+
+@dataclass
+class ConfigGroup:
+ label: str
+ children: list["ConfigNode"]
+ id: str | None = None
+
+ConfigNode = ConfigLeaf | ConfigGroup
+
+@dataclass
+class ConfigManifest:
+ items: list[ConfigNode]
+ open: frozenset[str]
+
+
class HTMLConverter(BaseConverter[ManualHTMLRenderer]):
INCLUDE_ARGS_NS = "html"
INCLUDE_FRAGMENT_ALLOWED_ARGS = { 'into-file' }
@@ -618,24 +647,127 @@ class HTMLConverter(BaseConverter[ManualHTMLRenderer]):
_xref_targets: dict[str, XrefTarget]
_redirection_targets: set[str]
_appendix_count: int = 0
+ _config_path: Path | None
+ _config: ConfigManifest | None
def _next_appendix_id(self) -> str:
self._appendix_count += 1
return _to_base26(self._appendix_count - 1)
- def __init__(self, revision: str, html_params: HTMLParameters, manpage_urls: Mapping[str, str], redirects: Redirects | None = None):
+ def __init__(
+ self,
+ revision: str,
+ html_params: HTMLParameters,
+ manpage_urls: Mapping[str, str],
+ redirects: Redirects | None = None,
+ config_path: Path | None = None
+ ):
super().__init__()
self._revision, self._html_params, self._manpage_urls, self._redirects = revision, html_params, manpage_urls, redirects
+ self._config_path = config_path
+ self._config = None
self._xref_targets = {}
self._redirection_targets = set()
# renderer not set on purpose since it has a dependency on the output path!
def convert(self, infile: Path, outfile: Path) -> None:
+ try:
+ self._config = self._load_config()
+ except Exception as e:
+ raise RuntimeError(f"failed to load config '{self._config_path}'") from e
+ sidebar_open = self._config.open if self._config is not None else frozenset()
self._renderer = ManualHTMLRenderer(
'book', self._revision, self._html_params, self._manpage_urls, self._xref_targets,
- self._redirects, infile.parent, outfile.parent)
+ self._redirects, infile.parent, outfile.parent, sidebar_open)
super().convert(infile, outfile)
+ def _load_config(self) -> ConfigManifest | None:
+ if self._config_path is None:
+ return None
+ src = self._config_path.read_text()
+ config = json.loads(src)
+ if not isinstance(config, dict) or not isinstance(config.get('items'), list):
+ raise SrcError(
+ src=src,
+ description=f"config {self._config_path}: expected a top-level object with an 'items' array")
+ open_ids = config.get('open', [])
+ if not isinstance(open_ids, list) or not all(isinstance(i, str) for i in open_ids):
+ raise SrcError(
+ src=src,
+ description=f"config {self._config_path}: 'open' must be an array of strings")
+ items = self._parse_config_nodes(config['items'], "config items", src)
+ return ConfigManifest(items=items, open=frozenset(open_ids))
+
+ def _parse_config_nodes(self, items: Any, where: str, src: str) -> list[ConfigNode]:
+ return [self._parse_config_node(item, f"{where}[{idx}]", src)
+ for idx, item in enumerate(items)]
+
+ def _parse_config_node(self, item: Any, where: str, src: str) -> ConfigNode:
+ if not isinstance(item, dict):
+ raise SrcError(src=src, description=f"{where}: expected an object, got {type(item).__name__}")
+ label = item.get('label')
+ if label is not None and (not isinstance(label, str) or not label):
+ raise SrcError(src=src, description=f"{where}: 'label' must be a non-empty string")
+ has_file, has_children = 'file' in item, 'children' in item
+ if has_file == has_children:
+ raise SrcError(
+ src=src,
+ description=f"{where}: must have exactly one of 'file' or 'children'")
+ if has_file:
+ if not isinstance(item['file'], str):
+ raise SrcError(src=src, description=f"{where}: 'file' must be a string")
+ return ConfigLeaf(file=item['file'], label=label)
+ children = item['children']
+ if not isinstance(children, list) or not children:
+ raise SrcError(src=src, description=f"{where}: 'children' must be a non-empty array")
+ if not isinstance(label, str) or not label:
+ raise SrcError(src=src, description=f"{where}: a group requires a non-empty 'label'")
+ gid = item.get('id')
+ if gid is not None and (not isinstance(gid, str) or not gid):
+ raise SrcError(src=src, description=f"{where}: 'id' must be a non-empty string")
+ return ConfigGroup(label=label, children=self._parse_config_nodes(children, where, src), id=gid)
+
+ def _prepend_config(self, infile: Path, tokens: list[Token]) -> None:
+ if self._config is None:
+ return
+ assert self._config_path is not None
+ include = self._build_config_include(self._config.items, self._config_path.resolve())
+ # tokens 0 to 5 hold the title h1 triple and the subtitle h2 triple.
+ # _render_book renders tokens[6:] as the body.
+ # a change to the preamble must change this index too.
+ tokens[6:6] = [include]
+
+ def _build_config_include(self, nodes: list[ConfigNode], config_file: Path) -> Token:
+ included = [self._build_config_item(node, config_file) for node in nodes]
+ token = Token('included_content', '', 0, map=[0, 1])
+ token.meta['included'] = included
+ token.meta['include-args'] = {}
+ return token
+
+ def _build_config_item(self, node: ConfigNode, config_file: Path) -> tuple[list[Token], Path]:
+ if isinstance(node, ConfigLeaf):
+ path = (config_file.parent / node.file).resolve()
+ leaf_src = path.read_text()
+ self._base_paths.append(path)
+ self._current_type.append('content')
+ try:
+ fragment = self._parse(leaf_src)
+ finally:
+ self._current_type.pop()
+ self._base_paths.pop()
+ if node.label is not None:
+ fragment[1].meta['toc-label'] = node.label
+ return fragment, path
+
+ # TocEntry._collect_entries reads nav-label and nav-id.
+ # it builds the sidebar group from them.
+ group = self._build_config_include(node.children, config_file)
+ group.meta['nav-label'] = node.label
+ if node.id is not None:
+ group.meta['nav-id'] = node.id
+
+ return [group], config_file
+
def _parse(self, src: str, *, auto_id_prefix: None | str = None) -> list[Token]:
tokens = super()._parse(src,auto_id_prefix=auto_id_prefix)
for token in tokens:
@@ -747,10 +879,12 @@ class HTMLConverter(BaseConverter[ManualHTMLRenderer]):
title_html = self._renderer.renderInline(inlines.children[0:1])
else:
toc_html, title = title_html, title_html
+ if (toc_label := inlines.meta.get('toc-label')) is not None:
+ toc_html = html.escape(cast(str, toc_label))
title_html = (
f"{title_html}"
if typ == 'chapter'
- else title_html if typ in [ 'book', 'part' ]
+ else title_html if typ in [ 'book', 'part', 'content' ]
else f'the section called “{title_html}”'
)
return XrefTarget(id, title_html, toc_html, re.sub('<.*?>', '', title), path, drop_fragment)
@@ -820,9 +954,14 @@ def _build_cli_html(p: argparse.ArgumentParser) -> None:
p.add_argument('--media-dir', default="media", type=Path)
p.add_argument('--redirects', type=Path)
p.add_argument('--sidebar-depth', default=2, type=int)
- # nav metadata (JSON): {"open": ["anchor-id", ...]} selects which sidebar
- # entries render expanded; omitted or absent means everything is collapsed.
- p.add_argument('--nav', type=Path)
+ p.add_argument('--experimental-config', type=Path, help="""
+JSON file of the following form
+{ items: [ { file, label? } | { label, children: [...], id? } ], open: [ id, ... ] }
+
+Files added through this flag prepend '--infile'
+
+This flag will replace --infile and `{=include=}` directives in the future
+""")
# Deprecated flags,
p.add_argument('--toc-depth', nargs='?', action=_DeprecatedDepthFlag, default=None)
p.add_argument('--chunk-toc-depth', nargs='?', action=_DeprecatedDepthFlag, default=None)
@@ -835,10 +974,6 @@ def _build_cli_html(p: argparse.ArgumentParser) -> None:
p.add_argument('outfile', type=Path)
def _run_cli_html(args: argparse.Namespace) -> None:
- sidebar_open: frozenset[str] = frozenset()
- if args.nav:
- with open(args.nav) as nav_file:
- sidebar_open = frozenset(json.load(nav_file).get("open", []))
with open(args.manpage_urls) as manpage_urls, open(Path(__file__).parent / "redirects.js") as redirects_script:
redirects = None
if args.redirects:
@@ -848,8 +983,8 @@ def _run_cli_html(args: argparse.Namespace) -> None:
md = HTMLConverter(
args.revision,
HTMLParameters(args.generator, args.stylesheet, args.script,
- args.sidebar_depth, args.media_dir, sidebar_open, args.header, args.no_navheader),
- json.load(manpage_urls), redirects)
+ args.sidebar_depth, args.media_dir, args.header, args.no_navheader),
+ json.load(manpage_urls), redirects, args.experimental_config)
md.convert(args.infile, args.outfile)
def build_cli(p: argparse.ArgumentParser) -> None:
diff --git a/pkgs/by-name/ni/nixos-render-docs/src/nixos_render_docs/manual_structure.py b/pkgs/by-name/ni/nixos-render-docs/src/nixos_render_docs/manual_structure.py
index 859ff5197d17..204b5aa9b933 100644
--- a/pkgs/by-name/ni/nixos-render-docs/src/nixos_render_docs/manual_structure.py
+++ b/pkgs/by-name/ni/nixos-render-docs/src/nixos_render_docs/manual_structure.py
@@ -13,8 +13,10 @@ from .utils import Freezeable
# FragmentType is used to restrict structural include blocks.
FragmentType = Literal['preface', 'part', 'chapter', 'section', 'appendix']
-# in the TOC all fragments are allowed, plus the all-encompassing book.
-TocEntryType = Literal['book', 'preface', 'part', 'chapter', 'section', 'appendix', 'example', 'figure']
+# the TOC allows every fragment type. it also allows the enclosing book.
+# it allows 'example' and 'figure'.
+# --experimental-config adds a generic 'content' kind.
+TocEntryType = Literal['book', 'preface', 'part', 'chapter', 'section', 'appendix', 'example', 'figure', 'content']
def is_include(token: Token) -> bool:
return token.type == "fence" and token.info.startswith("{=include=} ")
@@ -145,6 +147,7 @@ class TocEntry(Freezeable):
next: TocEntry | None = None
children: list[TocEntry] = dc.field(default_factory=list)
starts_new_chunk: bool = False
+ open_id: str | None = None
@property
def root(self) -> TocEntry:
@@ -193,9 +196,21 @@ class TocEntry(Freezeable):
fragment_type_str = token.type[9:].removesuffix('s')
assert fragment_type_str in get_args(TocEntryType)
fragment_type = cast(TocEntryType, fragment_type_str)
- for fragment, _path in included:
- subentries = cls._collect_entries(xrefs, fragment, fragment_type)
- entries[-1][1].children.append(subentries)
+ if (nav_label := token.meta.get('nav-label')) is not None:
+ children = [cls._collect_entries(xrefs, fragment, fragment_type)
+ for fragment, _path in included]
+ first = children[0].target
+ group = TocEntry(
+ fragment_type,
+ dc.replace(first, title_html=nav_label, toc_html=nav_label, title=nav_label),
+ children=children,
+ open_id=token.meta.get('nav-id', ''))
+ entries.append(('h1', group))
+ token.meta['TocEntry'] = group
+ else:
+ for fragment, _path in included:
+ subentries = cls._collect_entries(xrefs, fragment, fragment_type)
+ entries[-1][1].children.append(subentries)
elif token.type == 'heading_open' and (id := cast(str, token.attrs.get('id', ''))):
while len(entries) > 1 and entries[-1][0] >= token.tag:
entries[-2][1].children.append(entries.pop()[1])
diff --git a/pkgs/by-name/ni/nixos-render-docs/src/tests/test_html_header.py b/pkgs/by-name/ni/nixos-render-docs/src/tests/test_html_header.py
index 7111959bea55..b0af6d8c4b99 100644
--- a/pkgs/by-name/ni/nixos-render-docs/src/tests/test_html_header.py
+++ b/pkgs/by-name/ni/nixos-render-docs/src/tests/test_html_header.py
@@ -9,7 +9,7 @@ def render(tmp_path: Path, header: Path | None) -> str:
infile = tmp_path / "index.md"
infile.write_text(SAMPLE_BOOK)
outfile = tmp_path / "index.html"
- params = HTMLParameters("", [], [], 2, sidebar_open = [], media_dir=tmp_path, header = header)
+ params = HTMLParameters("", [], [], 2, media_dir=tmp_path, header = header)
HTMLConverter("1.0.0", params, {}).convert(infile, outfile)
return outfile.read_text()
diff --git a/pkgs/by-name/ni/nixos-render-docs/src/tests/test_manual.py b/pkgs/by-name/ni/nixos-render-docs/src/tests/test_manual.py
index 45bce4cb6e78..5da16ab7659b 100644
--- a/pkgs/by-name/ni/nixos-render-docs/src/tests/test_manual.py
+++ b/pkgs/by-name/ni/nixos-render-docs/src/tests/test_manual.py
@@ -1,7 +1,9 @@
+import json
import xml.parsers.expat as expat
from html.entities import name2codepoint
from pathlib import Path
+import pytest
from nixos_render_docs.manual import HTMLConverter, HTMLParameters
@@ -49,7 +51,7 @@ def _build(tmp_path: Path, sidebar_depth: int = 2, sidebar_open: frozenset[str]
out.mkdir(exist_ok=True)
conv = HTMLConverter(
"1.0.0",
- HTMLParameters("test-gen", [], [], sidebar_depth, Path("media"), sidebar_open),
+ HTMLParameters("test-gen", [], [], sidebar_depth, Path("media")),
{},
)
conv.convert(tmp_path / "index.md", out / "index.html")
@@ -88,10 +90,42 @@ def test_sidebar_is_collapsible_tree(tmp_path: Path) -> None:
def test_nav_metadata_opens_selected_entries(tmp_path: Path) -> None:
- # ids listed in the nav "open" set render as
- html = _build(tmp_path, sidebar_depth=3, sidebar_open=frozenset({"chap-fpa"}))
- assert 'Guides' in html
+ assert ' None:
+ # the config lists 'intro' in 'open'.
+ # the group has no id, so its key is empty. the group stays closed.
+ html = _render_with_config(
+ tmp_path,
+ {
+ "items": [
+ {"label": "Guides", "children": [
+ {"file": "intro.md"},
+ ]},
+ ],
+ "open": ["intro"],
+ },
+ {"intro.md": "# Introduction {#intro}\n\nBody.\n"},
+ )
+ assert 'Guides' in html
+ assert "" not in html
def test_sidebar_depth_caps_the_tree(tmp_path: Path) -> None:
@@ -169,3 +203,179 @@ def test_output_is_well_formed_xhtml(tmp_path: Path) -> None:
assert {p.name for p in pages} == {"index.html", "chapter.html"}
for page in pages:
_parse_xhtml(page.read_text())
+
+
+_DEFAULT_INDEX = (
+ "# Test manual {#book-test}\n\n"
+ "## Version 1\n\n"
+ "```{=include=} chapters\nmanual-chapter.md\n```\n"
+)
+_DEFAULT_MANUAL_CHAPTER = "# Manual chapter {#manual-chap}\n\nManual body.\n"
+
+
+def _render_with_config(
+ tmp_path: Path,
+ config: object,
+ files: dict[str, str],
+ *,
+ index: str = _DEFAULT_INDEX,
+ manual_chapter: str = _DEFAULT_MANUAL_CHAPTER,
+ sidebar_depth: int = 6,
+) -> str:
+ (tmp_path / "config.json").write_text(json.dumps(config))
+ (tmp_path / "manual-chapter.md").write_text(manual_chapter)
+ for name, content in files.items():
+ path = tmp_path / name
+ path.parent.mkdir(parents=True, exist_ok=True)
+ path.write_text(content)
+
+ (tmp_path / "index.md").write_text(index)
+ out = tmp_path / "out"
+ out.mkdir(exist_ok=True)
+
+ conv = HTMLConverter(
+ "1.0.0",
+ HTMLParameters("test-gen", [], [], sidebar_depth, Path("media")),
+ {},
+ config_path=tmp_path / "config.json",
+ )
+ conv.convert(tmp_path / "index.md", out / "index.html")
+ return (out / "index.html").read_text()
+
+
+def test_config_content_renders_before_manual(tmp_path: Path) -> None:
+ html = _render_with_config(
+ tmp_path,
+ {"items": [{"label": "Intro", "file": "intro.md"}]},
+ {"intro.md": "# Introduction {#intro}\n\nConfig intro body.\n"},
+ )
+ assert "Config intro body." in html
+ assert "Manual body." in html
+ assert html.index("Config intro body.") < html.index("Manual body.")
+
+
+def test_config_grouping_node_is_sidebar_only(tmp_path: Path) -> None:
+ html = _render_with_config(
+ tmp_path,
+ {
+ "items": [
+ {
+ "label": "Guides", "children": [
+ {"label": "Install", "file": "install.md"},
+ ]
+ }
+ ]
+ },
+ {"install.md": "# Install {#install}\n\nInstall body.\n"},
+ )
+ # the group adds no heading and no anchor to the body.
+ assert "Guides" not in html
+ assert 'id="guides"' not in html
+ # the child renders as a page.
+ assert 'Install' in html
+ assert "Install body." in html
+ # the sidebar nests the child under the group.
+ assert 'Guides
' in html
+ assert 'Install' in html
+
+
+def test_config_leaf_derives_id_and_label_from_file(tmp_path: Path) -> None:
+ # the sidebar link reuses the heading id. the label reuses the heading title.
+ html = _render_with_config(
+ tmp_path,
+ {"items": [{"file": "intro.md"}]},
+ {"intro.md": "# Introduction {#intro}\n\nBody.\n"},
+ )
+ assert 'Introduction' in html
+ assert 'Introduction' in html
+
+
+def test_config_leaf_label_differs_from_file_title(tmp_path: Path) -> None:
+ html = _render_with_config(
+ tmp_path,
+ {
+ "items": [
+ {"label": "Sidebar Label", "file": "leaf1.md"}
+ ]
+ },
+ {"leaf1.md": "# File Title {#leaf1}\n\nBody.\n"},
+ )
+ assert 'File Title' in html
+ assert 'Sidebar Label' in html
+
+
+def test_config_tree_nests_arbitrarily_deep(tmp_path: Path) -> None:
+ html = _render_with_config(
+ tmp_path,
+ {
+ "items": [
+ {"label": "A", "children": [
+ {"label": "B", "children": [
+ {"label": "C", "file": "c.md"},
+ ]},
+ ]}
+ ]
+ },
+ {"c.md": "# C File {#leaf-c}\n\nDeep body.\n"},
+ )
+ # only the leaf renders a heading. the groups A and B add no anchor.
+ assert 'A
' in html
+ assert 'B
' in html
+ assert 'C
' in html
+ assert html.index('>A') < html.index('>B') < html.index('>C')
+
+
+def test_config_id_is_cross_referenceable(tmp_path: Path) -> None:
+ html = _render_with_config(
+ tmp_path,
+ {
+ "items": [{"label": "Intro", "file": "intro.md"}]
+ },
+ {"intro.md": "# Introduction {#intro}\n\nBody.\n"},
+ manual_chapter="# Manual chapter {#manual-chap}\n\nSee [](#intro).\n",
+ )
+ assert 'Introduction" in html
+
+
+def test_config_duplicate_id_fails(tmp_path: Path) -> None:
+ with pytest.raises(RuntimeError) as excinfo:
+ _render_with_config(
+ tmp_path,
+ {
+ "items": [{"label": "Dup", "file": "dup.md"}]
+ },
+ {"dup.md": "# Dup file {#dup}\n\nBody.\n"},
+ manual_chapter="# Manual {#dup}\n\nBody.\n",
+ )
+ assert "duplicate id" in str(excinfo.value.__cause__)
+
+
+def test_config_malformed_node_fails(tmp_path: Path) -> None:
+ with pytest.raises(RuntimeError) as excinfo:
+ _render_with_config(
+ tmp_path,
+ {"items": [{"label": "Bad", "file": "x.md", "children": []}]},
+ {},
+ )
+ assert "exactly one of" in str(excinfo.value.__cause__)
+
+ with pytest.raises(RuntimeError) as excinfo:
+ _render_with_config(
+ tmp_path,
+ {"items": [{"file": 123}]},
+ {},
+ )
+ assert "'file' must be a string" in str(excinfo.value.__cause__)
+
+ with pytest.raises(RuntimeError) as excinfo:
+ _render_with_config(
+ tmp_path,
+ {"items": [{"children": [{"file": "x.md"}]}]},
+ {"x.md": "# X {#x}\n\nB.\n"},
+ )
+ assert "a group requires a non-empty 'label'" in str(excinfo.value.__cause__)
diff --git a/pkgs/by-name/ol/ollama/package.nix b/pkgs/by-name/ol/ollama/package.nix
index f262cba0f285..fc81ab4fd70d 100644
--- a/pkgs/by-name/ol/ollama/package.nix
+++ b/pkgs/by-name/ol/ollama/package.nix
@@ -111,12 +111,12 @@ let
# vendored in-tree. Pre-stage the pin (tracks upstream's
# `LLAMA_CPP_VERSION` file) so the FetchContent step uses our copy
# instead of trying to clone over the network in the sandbox.
- llamaCppVersion = "b10091";
+ llamaCppVersion = "b10242";
llamaCppSrc = fetchFromGitHub {
owner = "ggml-org";
repo = "llama.cpp";
tag = llamaCppVersion;
- hash = "sha256-ZHQ9hBnE9GayZRt0jgO4svzaAUfhRUg6cFu5dSe8J1w=";
+ hash = "sha256-mBqO6h9eiSAXqiHy1H3aK2ACbz1aYagmjAN7IpXNTcw=";
};
wrapperOptions = [
@@ -152,13 +152,13 @@ let
in
goBuild (finalAttrs: {
pname = "ollama";
- version = "0.32.5";
+ version = "0.32.6";
src = fetchFromGitHub {
owner = "ollama";
repo = "ollama";
tag = "v${finalAttrs.version}";
- hash = "sha256-SqxFMKTGu5e6FdB5abuYez8Aejf7JY7C6e6GuOMYd4w=";
+ hash = "sha256-B1Svfufa7puiZy+pDHeOTpX3+PWOuNjpMnpE/K3rl3Q=";
};
vendorHash = "sha256-HMwoaFBMbpoy8f0I+O+i7kIa9BslLu3FcVWeaIOkpvs=";
diff --git a/pkgs/by-name/op/openhack/package.nix b/pkgs/by-name/op/openhack/package.nix
new file mode 100644
index 000000000000..e36e3a9d9458
--- /dev/null
+++ b/pkgs/by-name/op/openhack/package.nix
@@ -0,0 +1,57 @@
+{
+ lib,
+ fetchFromGitHub,
+ nix-update-script,
+ python3Packages,
+ versionCheckHook,
+}:
+
+python3Packages.buildPythonApplication (finalAttrs: {
+ pname = "openhack";
+ version = "0.2.1";
+ pyproject = true;
+
+ __structuredAttrs = true;
+
+ src = fetchFromGitHub {
+ owner = "openhackai";
+ repo = "openhack";
+ tag = "v${finalAttrs.version}";
+ hash = "sha256-GY95oijrD/yTZI8DpbRVkCXRhMIw5Zsukt22tnglCVc=";
+ };
+
+ build-system = with python3Packages; [ hatchling ];
+
+ dependencies = with python3Packages; [
+ aiohttp
+ httpx
+ openai
+ playwright
+ prompt-toolkit
+ pydantic
+ pydantic-settings
+ pygments
+ rich
+ tree-sitter
+ tree-sitter-javascript
+ tree-sitter-python
+ tree-sitter-typescript
+ ];
+
+ nativeInstallCheckInputs = [ versionCheckHook ];
+
+ doInstallCheck = true;
+
+ pythonImportsCheck = [ "openhack" ];
+
+ passthru.updateScript = nix-update-script { };
+
+ meta = {
+ description = "Open Source Agentic Security Scanner";
+ homepage = "https://github.com/openhackai/openhack";
+ changelog = "https://github.com/openhackai/openhack/releases/tag/${finalAttrs.src.tag}";
+ license = lib.licenses.mit;
+ maintainers = with lib.maintainers; [ fab ];
+ mainProgram = "openhack";
+ };
+})
diff --git a/pkgs/by-name/or/orchis-theme/package.nix b/pkgs/by-name/or/orchis-theme/package.nix
index 9e216ff3410b..b4f323cac5b7 100644
--- a/pkgs/by-name/or/orchis-theme/package.nix
+++ b/pkgs/by-name/or/orchis-theme/package.nix
@@ -37,13 +37,13 @@ lib.checkListOfEnum "${pname}: theme tweaks" validTweaks tweaks
stdenvNoCC.mkDerivation
rec {
inherit pname;
- version = "2025-04-25";
+ version = "2026-07-07";
src = fetchFromGitHub {
repo = "Orchis-theme";
owner = "vinceliuice";
rev = version;
- hash = "sha256-+2/CsgJ+rdDpCp+r5B/zys3PtFgtnu+ohTEUOtJNd1Y=";
+ hash = "sha256-oX6+tPe0nGsl+OzFZCpbKvE00Z/xvP+NoHY7QZ9YAo0=";
};
nativeBuildInputs = [
diff --git a/pkgs/by-name/os/ostui/package.nix b/pkgs/by-name/os/ostui/package.nix
index f9f07b3863bb..d8714f50f249 100644
--- a/pkgs/by-name/os/ostui/package.nix
+++ b/pkgs/by-name/os/ostui/package.nix
@@ -8,13 +8,13 @@
}:
buildGoModule (finalAttrs: {
pname = "ostui";
- version = "1.3.5";
+ version = "1.3.6";
src = fetchFromSourcehut {
owner = "~ser";
repo = "ostui";
rev = "v${finalAttrs.version}";
- hash = "sha256-9d5oaaRKIiU9SP13rnObBQO0DOqliF5SMiKxSas/Yqs=";
+ hash = "sha256-vHKY6uA3CRxZi3kBDNviLbVxSrXeZG6x8UhMS0GBxSg=";
};
vendorHash = "sha256-cCyOG6nqlw2DPbA1dCuki5cpDy9LmZV/3YGyB3nCreI=";
diff --git a/pkgs/by-name/pa/padne/package.nix b/pkgs/by-name/pa/padne/package.nix
new file mode 100644
index 000000000000..2038c582ccfc
--- /dev/null
+++ b/pkgs/by-name/pa/padne/package.nix
@@ -0,0 +1,3 @@
+{ python3Packages }:
+
+python3Packages.toPythonApplication python3Packages.padne
diff --git a/pkgs/by-name/pa/pana/package.nix b/pkgs/by-name/pa/pana/package.nix
index 6b279726dcbf..24d448898a57 100644
--- a/pkgs/by-name/pa/pana/package.nix
+++ b/pkgs/by-name/pa/pana/package.nix
@@ -9,13 +9,13 @@
}:
buildDartApplication rec {
pname = "pana";
- version = "0.23.14";
+ version = "0.23.16";
src = fetchFromGitHub {
owner = "dart-lang";
repo = "pana";
tag = version;
- hash = "sha256-yBheou/u8TjL+MDhxd6AhWPJARLEcQF+ojmDqkv8zi4=";
+ hash = "sha256-cA707l5SGGh+tzD2TOx2eYEh3zfQawstFCTocgcnXJk=";
};
dartEntryPoints = {
diff --git a/pkgs/by-name/pa/pana/pubspec.lock.json b/pkgs/by-name/pa/pana/pubspec.lock.json
index 56f6f5b351b8..d7354b95b70b 100644
--- a/pkgs/by-name/pa/pana/pubspec.lock.json
+++ b/pkgs/by-name/pa/pana/pubspec.lock.json
@@ -54,41 +54,41 @@
"dependency": "direct dev",
"description": {
"name": "build",
- "sha256": "45d14a0fb23e018d8287c32fc98d726ce466b231928ed9b9200f29bd3ccd39ae",
+ "sha256": "b94f5da9ed3d081fd4ecc426c260998b5f4f4eb2f6d89b7e5472edef0b2b2a1b",
"url": "https://pub.dev"
},
"source": "hosted",
- "version": "4.0.7"
+ "version": "4.0.10"
},
"build_config": {
"dependency": "direct dev",
"description": {
"name": "build_config",
- "sha256": "f2c223156a26eea323e6244b85141d76413a80aeee9fe0b380773789fabaf8ae",
+ "sha256": "94eaf6708fe64408c632ef2689ca3777b112f9421306ccf4f8c84d7c5c9f83f8",
"url": "https://pub.dev"
},
"source": "hosted",
- "version": "1.3.1"
+ "version": "1.3.2"
},
"build_daemon": {
"dependency": "transitive",
"description": {
"name": "build_daemon",
- "sha256": "fd754058c342243718d5171a95f352cfc9fcf0cba8cfa26df67cb13a5836db78",
+ "sha256": "79e05eaf15a48d7230b053a4363b8eaac0cc234bbd0134c3229455481f55cbc6",
"url": "https://pub.dev"
},
"source": "hosted",
- "version": "4.1.2"
+ "version": "4.1.5"
},
"build_runner": {
"dependency": "direct dev",
"description": {
"name": "build_runner",
- "sha256": "5367e521935b102bdf1e735d2aab461e36b2edca6517662d088dd04cc39f8d16",
+ "sha256": "90363d438bd9f84a4d5bbb83352251f57d2d9d771bc95a44e6a33fe25fa52774",
"url": "https://pub.dev"
},
"source": "hosted",
- "version": "2.15.1"
+ "version": "2.16.0"
},
"build_verify": {
"dependency": "direct dev",
@@ -124,11 +124,11 @@
"dependency": "transitive",
"description": {
"name": "built_value",
- "sha256": "34e4067d30ce212937df995f03b69992eea683539ceeac7f679a1f1eba055b56",
+ "sha256": "31b24be6615ec7fcf70b3aa5a7469fe35826485e639a16dd7eb83ba30e4cc6a8",
"url": "https://pub.dev"
},
"source": "hosted",
- "version": "8.12.6"
+ "version": "8.12.7"
},
"checked_yaml": {
"dependency": "transitive",
@@ -154,11 +154,11 @@
"dependency": "direct main",
"description": {
"name": "cli_util",
- "sha256": "5909d2c6b66817222779e1eedc19e0e28b76d1df7bd9856a4792ccb9881df358",
+ "sha256": "71e43f1976c3eae2d9468a5b4d6600bf8cae61508b87f27fa1799228935d48ab",
"url": "https://pub.dev"
},
"source": "hosted",
- "version": "0.5.1"
+ "version": "0.5.2"
},
"collection": {
"dependency": "direct main",
@@ -224,11 +224,11 @@
"dependency": "transitive",
"description": {
"name": "dart_style",
- "sha256": "b60b8cb28aa514346eb8f6b005c60484ea65190f213b1986f6e391e0292d18f4",
+ "sha256": "3f88fc9c96c568d631356507355a2d1e983ee000c9ac008bdcb39b5bf53ce777",
"url": "https://pub.dev"
},
"source": "hosted",
- "version": "3.1.11"
+ "version": "3.1.12"
},
"ffi": {
"dependency": "transitive",
@@ -354,11 +354,11 @@
"dependency": "direct dev",
"description": {
"name": "json_serializable",
- "sha256": "ffcd10cde35a93b2abbbcc26bd9971f4ca93763e8abe78d855e3c4177797e501",
+ "sha256": "e45aefa0324f08c683caafbb94b72837aa6193c61822799c916e45f4a263113d",
"url": "https://pub.dev"
},
"source": "hosted",
- "version": "6.14.0"
+ "version": "6.14.1"
},
"lints": {
"dependency": "direct main",
@@ -434,11 +434,11 @@
"dependency": "transitive",
"description": {
"name": "package_config",
- "sha256": "f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc",
+ "sha256": "ffcf4cf3d6c0b74ac43708d9f56625506e8a68aa935abe9d267a7330f320eb5d",
"url": "https://pub.dev"
},
"source": "hosted",
- "version": "2.2.0"
+ "version": "3.0.0"
},
"path": {
"dependency": "direct main",
@@ -544,21 +544,21 @@
"dependency": "direct dev",
"description": {
"name": "source_gen",
- "sha256": "ec37cc0e6694374cbef59ed79685572c870a54ede6fa30a3e420feb3adffea02",
+ "sha256": "a603f1fb984a7391ae5978d1b92bfaaa08b350dca5c825256f925818f7943bf5",
"url": "https://pub.dev"
},
"source": "hosted",
- "version": "4.2.3"
+ "version": "4.2.4"
},
"source_helper": {
"dependency": "transitive",
"description": {
"name": "source_helper",
- "sha256": "4227d54ceefd0bb8ca4c8fcb96e1719dc53f1ee1b6e2ca9d7a6069da160e4eae",
+ "sha256": "5e6f216fdf6376c9f3852381ae037499797a3385377d388b011dac98d303c67c",
"url": "https://pub.dev"
},
"source": "hosted",
- "version": "1.3.12"
+ "version": "1.3.13"
},
"source_map_stack_trace": {
"dependency": "transitive",
diff --git a/pkgs/by-name/qi/qidi-studio/package.nix b/pkgs/by-name/qi/qidi-studio/package.nix
index 742ec7d2fa8a..72dc254448be 100644
--- a/pkgs/by-name/qi/qidi-studio/package.nix
+++ b/pkgs/by-name/qi/qidi-studio/package.nix
@@ -7,11 +7,11 @@
}:
let
pname = "qidi-studio";
- version = "2.07.02.10";
+ version = "2.07.02.60";
src = fetchurl {
url = "https://github.com/QIDITECH/QIDIStudio/releases/download/v${version}/QIDIStudio_v0${version}_Ubuntu24.AppImage";
- hash = "sha256-Ei5PV/XRWtCMlXF07AJu9UWplSr+8GdwAFvXwDE3TpM=";
+ hash = "sha256-1H0rLI3V8W1I+KIbolQg/Wat9WsACMy1RIdyU0s8seg=";
};
appimageContents = appimageTools.extract {
diff --git a/pkgs/by-name/re/renovate/package.nix b/pkgs/by-name/re/renovate/package.nix
index 9f41bfb92f9c..8678860268b9 100644
--- a/pkgs/by-name/re/renovate/package.nix
+++ b/pkgs/by-name/re/renovate/package.nix
@@ -4,7 +4,7 @@
fetchFromGitHub,
makeWrapper,
nodejs_24,
- pnpm_10,
+ pnpm_11,
fetchPnpmDeps,
pnpmConfigHook,
python3,
@@ -15,18 +15,23 @@
yq-go,
cctools,
}:
+
let
nodejs = nodejs_24;
+ pnpm = pnpm_11;
in
stdenv.mkDerivation (finalAttrs: {
pname = "renovate";
- version = "43.214.1";
+ version = "44.13.1";
+
+ __structuredAttrs = true;
+ strictDeps = true;
src = fetchFromGitHub {
owner = "renovatebot";
repo = "renovate";
tag = finalAttrs.version;
- hash = "sha256-S5ixP4Dp/YDv23kE5lvmp/Px6GrF9B6/wwSiKUwVWhA=";
+ hash = "sha256-2N+dQnuQwQNt7SZlIYq0CT2dRMiOF947MJZZ8BhZpcI=";
};
postPatch = ''
@@ -38,7 +43,7 @@ stdenv.mkDerivation (finalAttrs: {
makeWrapper
nodejs
pnpmConfigHook
- pnpm_10
+ pnpm
python3
yq-go
]
@@ -49,9 +54,9 @@ stdenv.mkDerivation (finalAttrs: {
pnpmDeps = fetchPnpmDeps {
inherit (finalAttrs) pname version src;
- pnpm = pnpm_10;
- fetcherVersion = 3;
- hash = "sha256-A8aL5ZF0tFKi0uCXxOQMzxByAIVyt76wnLvolFVYKuI=";
+ inherit pnpm;
+ fetcherVersion = 4;
+ hash = "sha256-xm4H+PIpVcisw8wKz77+v6iCcwEpkpLZ6awtwXPNBc8=";
};
env.COREPACK_ENABLE_STRICT = 0;
@@ -61,25 +66,17 @@ stdenv.mkDerivation (finalAttrs: {
# relax nodejs version
yq '.engines.node = "${nodejs.version}"' -i package.json
+ ''
+ # pnpm install gets run with --ignore-scripts so we need to manually build native dependencies (e.g. re2)
+ # Keep https://github.com/renovatebot/renovate/blob/main/pnpm-workspace.yaml#L9 in mind when updating,
+ # new native dependencies could bloat up binary size.
+ + ''
+ pnpm rebuild
+ rm -rf node_modules/.pnpm/re2*/node_modules/re2/build/Release/{obj.target,.deps} \
+ node_modules/.pnpm/re2*/node_modules/re2/vendor
pnpm build
- find -name 'node_modules' -type d -exec rm -rf {} \; || true
- pnpm install --offline --prod --ignore-scripts
- ''
- # The optional dependencies re2 and better-sqlite3 are not built by pnpm and need to be built manually.
- # If re2 is not built, you will get an annoying warning when you run renovate.
- # better-sqlite3 is required.
- + ''
- pushd node_modules/.pnpm/re2*/node_modules/re2
-
- mkdir -p $HOME/.node-gyp/${nodejs.version}
- echo 9 > $HOME/.node-gyp/${nodejs.version}/installVersion
- ln -sfv ${nodejs}/include $HOME/.node-gyp/${nodejs.version}
- export npm_config_nodedir=${nodejs}
- npm run rebuild
- rm -rf build/Release/{obj.target,.deps} vendor
-
- popd
+ pnpm prune --prod --ignore-scripts
runHook postBuild
'';
diff --git a/pkgs/by-name/tu/tuicr/package.nix b/pkgs/by-name/tu/tuicr/package.nix
index 4901d33ee75b..2693e407b276 100644
--- a/pkgs/by-name/tu/tuicr/package.nix
+++ b/pkgs/by-name/tu/tuicr/package.nix
@@ -9,7 +9,7 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "tuicr";
- version = "0.20.0";
+ version = "0.21.0";
__structuredAttrs = true;
@@ -17,10 +17,10 @@ rustPlatform.buildRustPackage (finalAttrs: {
owner = "agavra";
repo = "tuicr";
tag = "v${finalAttrs.version}";
- hash = "sha256-ByeWD4mC1DiH6L971mC7Qv6zUVmaf2lneewK2ZWXxg8=";
+ hash = "sha256-9QEDfDwb9Elm4R40/0pBz0EgTOoJJWWNraz2D0H6bAo=";
};
- cargoHash = "sha256-MVDq+78HIwjqQiO7R/ZAXd16Bye0fktxbiRIzEOH7vQ=";
+ cargoHash = "sha256-efBYiq0FA9kpMwzHM2GiUC2rWyWC9QcgfCCVIu5bbPk=";
strictDeps = true;
diff --git a/pkgs/by-name/tu/tutanota-desktop/package.nix b/pkgs/by-name/tu/tutanota-desktop/package.nix
index e3266e3d1778..3a3f9ba13e8d 100644
--- a/pkgs/by-name/tu/tutanota-desktop/package.nix
+++ b/pkgs/by-name/tu/tutanota-desktop/package.nix
@@ -1,45 +1,28 @@
{
lib,
+ stdenvNoCC,
appimageTools,
fetchurl,
makeWrapper,
- gitUpdater,
+ undmg,
}:
-appimageTools.wrapType2 rec {
+let
pname = "tutanota-desktop";
version = "355.260720.0";
- src = fetchurl {
+ linuxSrc = fetchurl {
url = "https://github.com/tutao/tutanota/releases/download/tutanota-desktop-release-${version}/tutanota-desktop-linux.AppImage";
hash = "sha256-sdKth9sy5yQ9cs4xQg4/zsgdvitxByKl8NCJgo3lL4o=";
};
- extraPkgs = pkgs: [ pkgs.libsecret ];
-
- nativeBuildInputs = [ makeWrapper ];
-
- extraInstallCommands =
- let
- appimageContents = appimageTools.extract { inherit pname version src; };
- in
- ''
- install -Dm 444 ${appimageContents}/tutanota-desktop.desktop -t $out/share/applications
- cp -r ${appimageContents}/usr/share/icons/. $out/share/icons
-
- substituteInPlace $out/share/applications/tutanota-desktop.desktop \
- --replace 'Exec=AppRun' 'Exec=${pname}'
-
- wrapProgram $out/bin/tutanota-desktop \
- --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}"
- '';
-
- passthru.updateScript = gitUpdater {
- url = "https://github.com/tutao/tutanota";
- rev-prefix = "tutanota-desktop-release-";
- allowedVersions = ".+\\.[0-9]{6}\\..+";
+ darwinSrc = fetchurl {
+ url = "https://github.com/tutao/tutanota/releases/download/tutanota-desktop-release-${version}/tutanota-desktop-mac.dmg";
+ hash = "sha256-oVipeWX6kuy0JqlB92hjcVl3Szwve7Lz5gd/mC7ieVg=";
};
+ passthru.updateScript = ./update.sh;
+
meta = {
description = "Tuta official desktop client";
homepage = "https://tuta.com/";
@@ -48,6 +31,66 @@ appimageTools.wrapType2 rec {
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
maintainers = with lib.maintainers; [ s0ssh ];
mainProgram = "tutanota-desktop";
- platforms = [ "x86_64-linux" ];
+ platforms = lib.platforms.darwin ++ [ "x86_64-linux" ];
};
-}
+
+ linux = appimageTools.wrapType2 {
+ inherit
+ pname
+ version
+ passthru
+ meta
+ ;
+ src = linuxSrc;
+
+ extraPkgs = pkgs: [ pkgs.libsecret ];
+
+ nativeBuildInputs = [ makeWrapper ];
+
+ extraInstallCommands =
+ let
+ appimageContents = appimageTools.extract {
+ inherit pname version;
+ src = linuxSrc;
+ };
+ in
+ ''
+ install -Dm 444 ${appimageContents}/tutanota-desktop.desktop -t $out/share/applications
+ cp -r ${appimageContents}/usr/share/icons/. $out/share/icons
+
+ substituteInPlace $out/share/applications/tutanota-desktop.desktop \
+ --replace 'Exec=AppRun' 'Exec=${pname}'
+
+ wrapProgram $out/bin/tutanota-desktop \
+ --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}"
+ '';
+ };
+
+ darwin = stdenvNoCC.mkDerivation {
+ inherit
+ pname
+ version
+ passthru
+ meta
+ ;
+ src = darwinSrc;
+
+ sourceRoot = ".";
+
+ nativeBuildInputs = [
+ undmg
+ makeWrapper
+ ];
+
+ installPhase = ''
+ runHook preInstall
+
+ mkdir -p "$out/Applications"
+ cp -R "Tuta Mail.app" "$out/Applications/"
+ makeWrapper "$out/Applications/Tuta Mail.app/Contents/MacOS/Tuta Mail" "$out/bin/tutanota-desktop"
+
+ runHook postInstall
+ '';
+ };
+in
+if stdenvNoCC.hostPlatform.isDarwin then darwin else linux
diff --git a/pkgs/by-name/tu/tutanota-desktop/update.sh b/pkgs/by-name/tu/tutanota-desktop/update.sh
new file mode 100755
index 000000000000..b7ddd8c932e2
--- /dev/null
+++ b/pkgs/by-name/tu/tutanota-desktop/update.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p bash curl jq common-updater-scripts nixVersions.latest
+
+set -euo pipefail
+
+repo="tutao/tutanota"
+tagPrefix="tutanota-desktop-release-"
+
+latestTag=$(curl ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} -sSf \
+ "https://api.github.com/repos/$repo/releases?per_page=100" \
+ | jq -r --arg p "$tagPrefix" \
+ '[.[] | select(.prerelease == false) | select(.tag_name | startswith($p))] | .[0].tag_name')
+version="${latestTag#"$tagPrefix"}"
+
+currentVersion=$(nix-instantiate --eval -E "with import ./. { }; tutanota-desktop.version" | tr -d '"')
+
+echo "tutanota-desktop: current=$currentVersion latest=$version"
+if [[ "$version" == "$currentVersion" ]]; then
+ echo "tutanota-desktop: already up to date"
+ exit 0
+fi
+
+base="https://github.com/$repo/releases/download/$tagPrefix$version"
+
+linuxHash=$(nix --extra-experimental-features nix-command hash convert --hash-algo sha256 --to sri \
+ "$(nix-prefetch-url "$base/tutanota-desktop-linux.AppImage")")
+update-source-version tutanota-desktop "$version" "$linuxHash" --system=x86_64-linux --ignore-same-version
+
+darwinHash=$(nix --extra-experimental-features nix-command hash convert --hash-algo sha256 --to sri \
+ "$(nix-prefetch-url "$base/tutanota-desktop-mac.dmg")")
+update-source-version tutanota-desktop "$version" "$darwinHash" --system=aarch64-darwin --ignore-same-version
diff --git a/pkgs/by-name/uu/uutils-findutils/package.nix b/pkgs/by-name/uu/uutils-findutils/package.nix
index 7c00a3ed9748..6511f9d8b131 100644
--- a/pkgs/by-name/uu/uutils-findutils/package.nix
+++ b/pkgs/by-name/uu/uutils-findutils/package.nix
@@ -8,16 +8,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "uutils-findutils";
- version = "0.9.0";
+ version = "0.10.0";
src = fetchFromGitHub {
owner = "uutils";
repo = "findutils";
tag = finalAttrs.version;
- hash = "sha256-ILMInyjOMYlgPxrOjvLoBfkcaZ4aj6GeA/jiGPpNjiI=";
+ hash = "sha256-0M3sOHVsIKG3rPthikommvKvHB1Q1RohogjS9LT5yU0=";
};
- cargoHash = "sha256-/rQTcyRXtluPKPuuZKn/qD/3U0PQLIqyq777/ww3q/0=";
+ cargoHash = "sha256-6M3kLNtvZ1nsCAkVJExQBWV72Bf9Kq5iei7SVpYsYio=";
postInstall = ''
rm $out/bin/testing-commandline
diff --git a/pkgs/by-name/ve/vermouth/package.nix b/pkgs/by-name/ve/vermouth/package.nix
index a59bc02c8c26..e16679466705 100644
--- a/pkgs/by-name/ve/vermouth/package.nix
+++ b/pkgs/by-name/ve/vermouth/package.nix
@@ -2,7 +2,6 @@
lib,
stdenv,
fetchFromGitHub,
- fetchpatch,
cmake,
nix-update-script,
kdePackages,
@@ -14,7 +13,7 @@
stdenv.mkDerivation (finalAttrs: {
pname = "vermouth";
- version = "1.9.7";
+ version = "2.0.1";
__structuredAttrs = true;
strictDeps = true;
@@ -23,18 +22,9 @@ stdenv.mkDerivation (finalAttrs: {
owner = "dekomote";
repo = "vermouth";
tag = "v${finalAttrs.version}";
- hash = "sha256-hcsvTvvuzuqTGgOdWt3sxyoJqjZjlUPlnlYJUgNpV4g=";
+ hash = "sha256-5Bej9GJgOUqg3WI4kHkyWXjjTv+MmimZbCK4vxpBdeU=";
};
- patches = [
- # backport fix for desktop file generation
- # FIXME: remove in next update
- (fetchpatch {
- url = "https://github.com/dekomote/vermouth/commit/436a201091505c142a88848135fe04e1ec996a1a.diff";
- hash = "sha256-fIgcewbJOpi+qHPgOJRCr+67RbziPPGP4sC1dclydgQ=";
- })
- ];
-
nativeBuildInputs = [
cmake
qt6.qtbase
diff --git a/pkgs/by-name/vi/vikunja/package.nix b/pkgs/by-name/vi/vikunja/package.nix
index 6f13470d5cdb..684b72a32d15 100644
--- a/pkgs/by-name/vi/vikunja/package.nix
+++ b/pkgs/by-name/vi/vikunja/package.nix
@@ -14,12 +14,12 @@
}:
let
- version = "2.4.0";
+ version = "2.5.0";
src = fetchFromGitHub {
owner = "go-vikunja";
repo = "vikunja";
rev = "v${version}";
- hash = "sha256-0yAFrq+qzLZLXPblWY2lkoJ2idzENR3YqdFNiDqep6U=";
+ hash = "sha256-qI4mkgcN9yYRmh5V+KzIHupX7uWsszV4Xb31OYvukxQ=";
};
frontend = stdenv.mkDerivation (finalAttrs: {
@@ -37,7 +37,7 @@ let
;
pnpm = pnpm_10;
fetcherVersion = 3;
- hash = "sha256-MnkwuEaBEY81LXInDao2Fi+FvKFyvsVS/QeXdS4FhPQ=";
+ hash = "sha256-xZBgE4GM59Ihl5a3qgcmkjR4Q3wYlcsiDapiNEzBQOg=";
};
nativeBuildInputs = [
@@ -102,7 +102,7 @@ buildGoModule {
mage
];
- vendorHash = "sha256-4JOwr6QCWglxXbRkcko2nsAxEhVbHDO1S2vI91NFM/8=";
+ vendorHash = "sha256-bn+bcGzeB0/KkhPNkbjK/EgKQG3iqVlJxtt6betGUNE=";
inherit frontend;
diff --git a/pkgs/by-name/vt/vte/package.nix b/pkgs/by-name/vt/vte/package.nix
index 3cec20862b25..b31a5c683e22 100644
--- a/pkgs/by-name/vt/vte/package.nix
+++ b/pkgs/by-name/vt/vte/package.nix
@@ -39,7 +39,7 @@
stdenv.mkDerivation (finalAttrs: {
pname = "vte";
- version = "0.84.0";
+ version = "0.84.1";
outputs = [
"out"
@@ -49,7 +49,7 @@ stdenv.mkDerivation (finalAttrs: {
src = fetchurl {
url = "mirror://gnome/sources/vte/${lib.versions.majorMinor finalAttrs.version}/vte-${finalAttrs.version}.tar.xz";
- hash = "sha256-BBTjFYODaut4eNol9nxRX36IeZF+zDfJLia4Po2Pw+M=";
+ hash = "sha256-rKHKqEeK6827HWeJf7NRHrdgHeuuaBDhahW2+iXzGsg=";
};
patches = [
diff --git a/pkgs/by-name/we/wezterm/package.nix b/pkgs/by-name/we/wezterm/package.nix
index de796c26355f..9b5b5224bb4d 100644
--- a/pkgs/by-name/we/wezterm/package.nix
+++ b/pkgs/by-name/we/wezterm/package.nix
@@ -29,14 +29,14 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "wezterm";
- version = "0-unstable-2026-07-16";
+ version = "0-unstable-2026-08-05";
src = fetchFromGitHub {
owner = "wezterm";
repo = "wezterm";
- rev = "76b606ec597a3c0263fa60321548637451c0a547";
+ rev = "4b1c3c151eb530e569f867e1461693c56fe89695";
fetchSubmodules = true;
- hash = "sha256-FLU1R78C1xLPsJ1udBk9bW0BbVry4lGiC0kvPfMI66c=";
+ hash = "sha256-cZ5RDeHP9cBa1Qu6E96lRjKW4aC/wMJBZNpUZ2kAWuU=";
};
postPatch = ''
@@ -59,7 +59,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
# https://github.com/wezterm/wezterm/blob/main/nix/flake.nix#L134
auditable = false;
- cargoHash = "sha256-jY7lTOfbT74tAZ7he1xudCN7BUxZBzY+8+e1d2g2v4I=";
+ cargoHash = "sha256-4jm0uMj0/6fcLHSvd7y12h1QjQ/VavkmNc5L/ebQez0=";
nativeBuildInputs = [
installShellFiles
diff --git a/pkgs/by-name/wo/woodpecker-plugin-git/package.nix b/pkgs/by-name/wo/woodpecker-plugin-git/package.nix
index ec2afe92615a..fa0598bbf17a 100644
--- a/pkgs/by-name/wo/woodpecker-plugin-git/package.nix
+++ b/pkgs/by-name/wo/woodpecker-plugin-git/package.nix
@@ -8,16 +8,16 @@
buildGoModule (finalAttrs: {
pname = "woodpecker-plugin-git";
- version = "2.9.2";
+ version = "2.9.3";
src = fetchFromGitHub {
owner = "woodpecker-ci";
repo = "plugin-git";
tag = finalAttrs.version;
- hash = "sha256-vfHYEZpOAdf88Wqf6/PtbVsymKmQhBr0y2UOGmTGdjY=";
+ hash = "sha256-sXKR7DEcCVB6y2aHVB/57iacaijC4vLqV7/Mddrev48=";
};
- vendorHash = "sha256-zCcYAWO0hn6iLxTxOsjn2bS0+sHuzpq3K24N9jd+qPY=";
+ vendorHash = "sha256-I3G3Skq7gltFEkL1gJDWTRlbKKnebW9zvoGGGKoQJuI=";
env.CGO_ENABLED = "0";
diff --git a/pkgs/by-name/ze/zennotes-desktop/package.nix b/pkgs/by-name/ze/zennotes-desktop/package.nix
index f587e96bd582..fd46071b07b4 100644
--- a/pkgs/by-name/ze/zennotes-desktop/package.nix
+++ b/pkgs/by-name/ze/zennotes-desktop/package.nix
@@ -13,14 +13,14 @@
buildNpmPackage (finalAttrs: {
pname = "zennotes-desktop";
- version = "2.22.1";
- npmDepsHash = "sha256-JBZ1gWGyasfoSXkZp2cd0HPuqQ9XKh4sWOesAfGHp6I=";
+ version = "2.23.0";
+ npmDepsHash = "sha256-qvfYrSzzIIuLQoWpDvXC4dt+OexEJNrz3nqjnycxo6I=";
src = fetchFromGitHub {
owner = "ZenNotes";
repo = "zennotes";
tag = "v${finalAttrs.version}";
- hash = "sha256-nSHl5O7xUbt/g18LV41Bgrcn6FwZXVHmZdaQXVVoDio=";
+ hash = "sha256-aGr1K6kSvpDELky0S/tH9cq6pbVivN4jTXrmbKE95vc=";
};
npmWorkspace = "apps/desktop";
diff --git a/pkgs/by-name/zm/zmx/package.nix b/pkgs/by-name/zm/zmx/package.nix
index 7648925b1527..e88f85917288 100644
--- a/pkgs/by-name/zm/zmx/package.nix
+++ b/pkgs/by-name/zm/zmx/package.nix
@@ -24,7 +24,7 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "zmx";
- version = "0.6.0";
+ version = "0.7.0";
__structuredAttrs = true;
strictDeps = true;
@@ -32,13 +32,13 @@ stdenv.mkDerivation (finalAttrs: {
owner = "neurosnap";
repo = "zmx";
tag = "v${finalAttrs.version}";
- hash = "sha256-OkXtVf/LdBrZL6FH9TGx+mIhUXt2eSugLxZyMd+HL6k=";
+ hash = "sha256-cWTeFRycSZFEbjCYIzKplNhV9SDM1kDl8CeQPOR3uyk=";
};
zigDeps = zig.fetchDeps {
inherit (finalAttrs) src pname version;
fetchAll = true;
- hash = "sha256-TwKoeaE4g5G7t7smKoqHkCCh998nSqKx5k6sO2vDlGs=";
+ hash = "sha256-w2jTusfDpW5Vk0lVhi2VNEGtir2n0NKQePsKSE2jpmc=";
};
postConfigure = ''
@@ -58,6 +58,10 @@ stdenv.mkDerivation (finalAttrs: {
doCheck = true;
+ preCheck = ''
+ export ZMX_DIR="$TMPDIR/zmx-test"
+ '';
+
postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
installShellCompletion --cmd ${finalAttrs.meta.mainProgram} \
--bash <($out/bin/zmx completions bash) \
diff --git a/pkgs/development/python-modules/afsapi/default.nix b/pkgs/development/python-modules/afsapi/default.nix
index aba9b655633a..826b3608a16d 100644
--- a/pkgs/development/python-modules/afsapi/default.nix
+++ b/pkgs/development/python-modules/afsapi/default.nix
@@ -12,14 +12,14 @@
buildPythonPackage (finalAttrs: {
pname = "afsapi";
- version = "1.0.1";
+ version = "1.0.2";
pyproject = true;
src = fetchFromGitHub {
owner = "wlcrs";
repo = "python-afsapi";
tag = finalAttrs.version;
- hash = "sha256-OMz8zJrU1qymvhD9mnf248687wpqfgUnXna7Cbr83No=";
+ hash = "sha256-ZfP8LboBDrxXULtocOTZJ0Ku/zgear4NW5ckcHUKXc4=";
};
build-system = [
diff --git a/pkgs/development/python-modules/boto3-stubs/default.nix b/pkgs/development/python-modules/boto3-stubs/default.nix
index 9b212fa9c108..8df9e0f9eb37 100644
--- a/pkgs/development/python-modules/boto3-stubs/default.nix
+++ b/pkgs/development/python-modules/boto3-stubs/default.nix
@@ -358,13 +358,13 @@
buildPythonPackage (finalAttrs: {
pname = "boto3-stubs";
- version = "1.43.62";
+ version = "1.43.64";
pyproject = true;
src = fetchPypi {
pname = "boto3_stubs";
inherit (finalAttrs) version;
- hash = "sha256-pUG/DSBCStQnlAuJOP/zS+oo/A05mQa989GTNxAWRVo=";
+ hash = "sha256-coJym7MD6kvZ5WhSBJ8Sr1Y768p3wD/A6geIZCfMUDU=";
};
build-system = [ setuptools ];
diff --git a/pkgs/development/python-modules/claude-agent-sdk/default.nix b/pkgs/development/python-modules/claude-agent-sdk/default.nix
index b9aed7f1f68f..8bbc247598db 100644
--- a/pkgs/development/python-modules/claude-agent-sdk/default.nix
+++ b/pkgs/development/python-modules/claude-agent-sdk/default.nix
@@ -14,14 +14,14 @@
buildPythonPackage (finalAttrs: {
pname = "claude-agent-sdk";
- version = "0.2.110";
+ version = "0.2.130";
pyproject = true;
src = fetchFromGitHub {
owner = "anthropics";
repo = "claude-agent-sdk-python";
tag = "v${finalAttrs.version}";
- hash = "sha256-tz26ueGAMFM7sD95FoAzhKHvNo7NV9fYZoKfJy/t8Lw=";
+ hash = "sha256-7hFgXoQ1OlKMrHWc2nhfqPuj1pDRw5OfIOgeGlc4CFw=";
};
build-system = [ hatchling ];
@@ -48,6 +48,11 @@ buildPythonPackage (finalAttrs: {
"test_query_with_async_iterable"
];
+ disabledTestPaths = [
+ # Tests require claude code with is non-free
+ "tests/test_close_cancellation.py"
+ ];
+
meta = {
description = "Python SDK for Claude Agent";
homepage = "https://github.com/anthropics/claude-agent-sdk-python";
diff --git a/pkgs/development/python-modules/debuglater/default.nix b/pkgs/development/python-modules/debuglater/default.nix
index 31cc01f860ef..df29b0dc683f 100644
--- a/pkgs/development/python-modules/debuglater/default.nix
+++ b/pkgs/development/python-modules/debuglater/default.nix
@@ -7,21 +7,24 @@
numpy,
pandas,
pytestCheckHook,
+ setuptools,
}:
-buildPythonPackage rec {
+buildPythonPackage (finalAttrs: {
pname = "debuglater";
version = "1.4.4";
- format = "setuptools";
+ pyproject = true;
src = fetchFromGitHub {
owner = "ploomber";
repo = "debuglater";
- tag = version;
+ tag = finalAttrs.version;
hash = "sha256-o9IAk3EN8ghEft7Y7Xx+sEjWMNgoyiZ0eiBqnCyXkm8=";
};
- propagatedBuildInputs = [ colorama ];
+ build-system = [ setuptools ];
+
+ dependencies = [ colorama ];
optional-dependencies = {
all = [ dill ];
@@ -32,15 +35,20 @@ buildPythonPackage rec {
pandas
pytestCheckHook
]
- ++ optional-dependencies.all;
+ ++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies);
pythonImportsCheck = [ "debuglater" ];
+ disabledTests = [
+ # Assertion error
+ "test_data_structures"
+ ];
+
meta = {
description = "Module for post-mortem debugging of Python programs";
homepage = "https://github.com/ploomber/debuglater";
- changelog = "https://github.com/ploomber/debuglater/blob/${version}/CHANGELOG.md";
+ changelog = "https://github.com/ploomber/debuglater/blob/${finalAttrs.src.tag}/CHANGELOG.md";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ fab ];
};
-}
+})
diff --git a/pkgs/development/python-modules/emerge/default.nix b/pkgs/development/python-modules/emerge/default.nix
index 810182d8afbb..c95d29caaee0 100644
--- a/pkgs/development/python-modules/emerge/default.nix
+++ b/pkgs/development/python-modules/emerge/default.nix
@@ -5,6 +5,7 @@
buildPythonPackage,
fetchFromGitHub,
writableTmpDirAsHomeHook,
+ nix-update-script,
cudaPackages,
@@ -37,6 +38,7 @@
callPackage,
cudaSupport ? config.cudaSupport,
+ withMkl ? stdenv.hostPlatform.isx86_64 && config.allowUnfree,
}:
let
@@ -61,7 +63,7 @@ in
buildPythonPackage (finalAttrs: {
pname = "emerge";
- version = "2.8.1";
+ version = "2.8.2";
pyproject = true;
__structuredAttrs = true;
@@ -69,7 +71,7 @@ buildPythonPackage (finalAttrs: {
owner = "FennisRobert";
repo = "EMerge";
tag = "v${finalAttrs.version}";
- hash = "sha256-TArhxtPAGEmPI4L+/pgy+RhV9atAZ5Ig0TkUDoV+eXQ=";
+ hash = "sha256-wxJeSiHfYTY7mRll8cxJSpdciun+uw5V7FLTUKuHu28=";
};
postPatch = ''
@@ -103,7 +105,7 @@ buildPythonPackage (finalAttrs: {
];
buildInputs =
- lib.optionals stdenv.hostPlatform.isx86_64 [
+ lib.optionals withMkl [
mkl
]
++ lib.optionals cudaSupport [
@@ -145,11 +147,16 @@ buildPythonPackage (finalAttrs: {
;
tests = callPackage ./tests { };
+
+ updateScript = nix-update-script {
+ extraArgs = [ "--version-regex=^v(2\\.[0-9].*)$" ];
+ };
};
meta = {
description = "Electromagnetic field computation program";
homepage = "https://github.com/FennisRobert/EMerge";
+ mainProgram = "emerge";
license = lib.licenses.gpl2Plus;
maintainers = with lib.maintainers; [ eljamm ];
teams = with lib.teams; [ ngi ];
diff --git a/pkgs/development/python-modules/emsutil/default.nix b/pkgs/development/python-modules/emsutil/default.nix
index c33ac5646c7b..b7d315d28144 100644
--- a/pkgs/development/python-modules/emsutil/default.nix
+++ b/pkgs/development/python-modules/emsutil/default.nix
@@ -2,6 +2,7 @@
lib,
buildPythonPackage,
fetchFromGitHub,
+ nix-update-script,
# build-system
hatchling,
@@ -51,6 +52,11 @@ buildPythonPackage (finalAttrs: {
"emsutil"
];
+ # TODO: remove after new release (>0.8.3)
+ passthru.updateScript = nix-update-script {
+ extraArgs = [ "--version=branch" ];
+ };
+
meta = {
description = "Utilities for the EMerge software suite";
homepage = "https://github.com/FennisRobert/emsutil";
diff --git a/pkgs/development/python-modules/gehomesdk/default.nix b/pkgs/development/python-modules/gehomesdk/default.nix
index 93211b5ad7ea..6dcb3dcd6c82 100644
--- a/pkgs/development/python-modules/gehomesdk/default.nix
+++ b/pkgs/development/python-modules/gehomesdk/default.nix
@@ -15,12 +15,12 @@
buildPythonPackage (finalAttrs: {
pname = "gehomesdk";
- version = "2026.7.2";
+ version = "2026.8.0";
pyproject = true;
src = fetchPypi {
inherit (finalAttrs) pname version;
- hash = "sha256-dSx+fmQU8UJTVaBaNWyJh302CDb7LcyELSnL0B0sbjk=";
+ hash = "sha256-4WGkodI608LmlHpzYfPIrexZBNAsImmj2B55+WJgq2E=";
};
build-system = [ setuptools ];
diff --git a/pkgs/development/python-modules/google-cloud-access-context-manager/default.nix b/pkgs/development/python-modules/google-cloud-access-context-manager/default.nix
index 37baef3a4a08..f28fe712ab79 100644
--- a/pkgs/development/python-modules/google-cloud-access-context-manager/default.nix
+++ b/pkgs/development/python-modules/google-cloud-access-context-manager/default.nix
@@ -9,13 +9,13 @@
buildPythonPackage (finalAttrs: {
pname = "google-cloud-access-context-manager";
- version = "0.6.0";
+ version = "0.6.1";
pyproject = true;
src = fetchPypi {
pname = "google_cloud_access_context_manager";
inherit (finalAttrs) version;
- hash = "sha256-dgJn+6H4voY24qjXwwICfzECYP/4BRxGuLCbl9VGjuA=";
+ hash = "sha256-TZmOSoHEJPUfbFxqrLJ9eAYRbTC1VscIrAqJw3/lGtg=";
};
build-system = [ setuptools ];
diff --git a/pkgs/development/python-modules/hakuin/default.nix b/pkgs/development/python-modules/hakuin/default.nix
index ffe2bd5358d8..1f760768a110 100644
--- a/pkgs/development/python-modules/hakuin/default.nix
+++ b/pkgs/development/python-modules/hakuin/default.nix
@@ -6,23 +6,28 @@
hatchling,
jinja2,
nltk,
+ pyprojectVersionPatchHook,
sqlglot,
}:
-buildPythonPackage rec {
+buildPythonPackage (finalAttrs: {
pname = "hakuin";
version = "0.2.2";
pyproject = true;
+ __structuredAttrs = true;
+
src = fetchFromGitHub {
owner = "pruzko";
repo = "hakuin";
- tag = version;
+ tag = finalAttrs.version;
hash = "sha256-97nh+woUsCXcoO2i5KprCwJiE24V3mg91qcNgy7bpgg=";
};
build-system = [ hatchling ];
+ nativeBuildInputs = [ pyprojectVersionPatchHook ];
+
dependencies = [
aiohttp
jinja2
@@ -40,5 +45,6 @@ buildPythonPackage rec {
homepage = "https://github.com/pruzko/hakuin";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ fab ];
+ mainProgram = "hk";
};
-}
+})
diff --git a/pkgs/development/python-modules/keystoneauth1/default.nix b/pkgs/development/python-modules/keystoneauth1/default.nix
index 9f81f82eada2..0e78d02fe9dc 100644
--- a/pkgs/development/python-modules/keystoneauth1/default.nix
+++ b/pkgs/development/python-modules/keystoneauth1/default.nix
@@ -69,11 +69,8 @@ buildPythonPackage rec {
]
++ lib.concatAttrValues optional-dependencies;
- # test_keystoneauth_betamax_fixture is incompatible with urllib3 2.0.0
- # https://bugs.launchpad.net/keystoneauth/+bug/2020112
checkPhase = ''
- stestr run \
- -E "keystoneauth1.tests.unit.test_betamax_fixture.TestBetamaxFixture.test_keystoneauth_betamax_fixture"
+ stestr run
'';
pythonImportsCheck = [ "keystoneauth1" ];
diff --git a/pkgs/development/python-modules/mypy-boto3/default.nix b/pkgs/development/python-modules/mypy-boto3/default.nix
index 59fca361568d..80a80136f5d7 100644
--- a/pkgs/development/python-modules/mypy-boto3/default.nix
+++ b/pkgs/development/python-modules/mypy-boto3/default.nix
@@ -335,8 +335,8 @@ in
"sha256-3JYcWKFk0dKJg/qn+EBvxeAO5xh5PXCU3dTEWDr1oXI=";
mypy-boto3-connect =
- buildMypyBoto3Package "connect" "1.43.58"
- "sha256-lDeveEiymjAvHh3JoGLQR1dP8h6n/4+UMIt6LVIYmPc=";
+ buildMypyBoto3Package "connect" "1.43.64"
+ "sha256-zWW/IqPu2ado8nc+ggaY+7/jko3HBfjcDPRUoM5p7z0=";
mypy-boto3-connect-contact-lens =
buildMypyBoto3Package "connect-contact-lens" "1.43.0"
@@ -399,8 +399,8 @@ in
"sha256-4VGCEZbno4w3H5+bc+2/f4ZkgefUDgWOOBkuGTVqvWk=";
mypy-boto3-directconnect =
- buildMypyBoto3Package "directconnect" "1.43.35"
- "sha256-EaazNjN3MOBQLjSaLi01grlO9evVVu0ST5ZOf1dAk9M=";
+ buildMypyBoto3Package "directconnect" "1.43.63"
+ "sha256-ncNugcKv/gD//CzbxTeDJK5wuXeaVhIET0xr9aA2NIA=";
mypy-boto3-discovery =
buildMypyBoto3Package "discovery" "1.43.0"
@@ -431,8 +431,8 @@ in
"sha256-LE8moRJrwRp3T4UGkj+vdRyq9Qw7t/UxcQm1Dw3/Dfs=";
mypy-boto3-dynamodb =
- buildMypyBoto3Package "dynamodb" "1.43.0"
- "sha256-8M6jjgWPHQc2HstV2PQGZdgktCz0hkckx/zMi/OUb80=";
+ buildMypyBoto3Package "dynamodb" "1.43.64"
+ "sha256-hZfd19X5LPAOeqCHWZPlzwmYjwF+70G5TUfAjnZ1tdA=";
mypy-boto3-dynamodbstreams =
buildMypyBoto3Package "dynamodbstreams" "1.43.0"
@@ -443,8 +443,8 @@ in
"sha256-dXNkOcMonYrBh4yzeubd+v3mW42s9XpmpfvgbtgoJgY=";
mypy-boto3-ec2 =
- buildMypyBoto3Package "ec2" "1.43.59"
- "sha256-cAk90nXgbA1YkS9DQr+oM/zJH1+1p5V5g/nlG+Fo3i0=";
+ buildMypyBoto3Package "ec2" "1.43.64"
+ "sha256-4gEYjeyfYdWjolPQvClPEZlUxIfUTZcU3nsq8kLDHOU=";
mypy-boto3-ec2-instance-connect =
buildMypyBoto3Package "ec2-instance-connect" "1.43.0"
@@ -602,8 +602,8 @@ in
"sha256-oPQuxAKSUTpHGyq1J80W57cISh+d+4IGN8ClJdhkfnw=";
mypy-boto3-iam =
- buildMypyBoto3Package "iam" "1.43.60"
- "sha256-Sh82poyz+WLAAPIFYgQ0bRwZYWoSJ5l8VweyY55zTYM=";
+ buildMypyBoto3Package "iam" "1.43.64"
+ "sha256-EUU75nZ9iJzC7j7SFCNjPBYXN6MUac7hZw9ekzkt3zk=";
mypy-boto3-identitystore =
buildMypyBoto3Package "identitystore" "1.43.0"
@@ -622,8 +622,8 @@ in
"sha256-9P8m5QYikdsimepaivrYcb/tP1iThyPZWFMkyo24+bo=";
mypy-boto3-inspector2 =
- buildMypyBoto3Package "inspector2" "1.43.53"
- "sha256-eY0CZnh9rwCj3gnNUsN9x65urg8641Yd6QsowbxJipk=";
+ buildMypyBoto3Package "inspector2" "1.43.64"
+ "sha256-7xAA1OyNETjna5Yehnnzd8u3OJF8P3lMsBFE0/0tx/4=";
mypy-boto3-internetmonitor =
buildMypyBoto3Package "internetmonitor" "1.43.0"
@@ -858,8 +858,8 @@ in
"sha256-ZlvcxMsMtkPwzyBpxGWffcD2g73aNIU6WG7jYn66ZjU=";
mypy-boto3-mediaconvert =
- buildMypyBoto3Package "mediaconvert" "1.43.39"
- "sha256-3s5d1ZZ+XoVjYP3uZ2zuaAjH76fbj0j0a5v2H3Ji8vA=";
+ buildMypyBoto3Package "mediaconvert" "1.43.63"
+ "sha256-qvQo6w4QfSTVfmJhu7tZFGV6///8pJwEijs3oLT/nTg=";
mypy-boto3-medialive =
buildMypyBoto3Package "medialive" "1.43.27"
@@ -946,8 +946,8 @@ in
"sha256-rkVxsY4MQ+eB3uQhD3kI7bBpCHiDVcQDNUXA5zUyeok=";
mypy-boto3-network-firewall =
- buildMypyBoto3Package "network-firewall" "1.43.62"
- "sha256-byxKwV6TDM/mo/my8h9aVDzbYMywCVSU/RfyNv9sW6Q=";
+ buildMypyBoto3Package "network-firewall" "1.43.63"
+ "sha256-tb67mpqB0urStehtFhyqMiZGCzjokt7GoLSMINH8U00=";
mypy-boto3-networkmanager =
buildMypyBoto3Package "networkmanager" "1.43.0"
@@ -982,8 +982,8 @@ in
"sha256-JEuEjo0htTuDCZx2nNJK2Zq59oSUqkMf4BrNamerfVk=";
mypy-boto3-organizations =
- buildMypyBoto3Package "organizations" "1.43.52"
- "sha256-Z3hs0TLev/W3O9GI7k9oo3gSR9lRkn/dlo46ILyMDWo=";
+ buildMypyBoto3Package "organizations" "1.43.64"
+ "sha256-kyUieR7tYYUGbEOi6ftCEDD07+QfcyJ2cOWqrk2FVAs=";
mypy-boto3-osis =
buildMypyBoto3Package "osis" "1.43.0"
@@ -1310,8 +1310,8 @@ in
"sha256-V1og1LY/ORrXbfFVs4vF8LYe30/kvG71F3rWwXmNSJ4=";
mypy-boto3-sso-admin =
- buildMypyBoto3Package "sso-admin" "1.43.38"
- "sha256-XItUg7rif3WcSEFp5+7vLqibBz9j43OpmA+whTlu/iM=";
+ buildMypyBoto3Package "sso-admin" "1.43.64"
+ "sha256-wesA1gX4AOwwJs5LKmr6O+MZV8mJFpGh/Gh1wluUvgk=";
mypy-boto3-sso-oidc =
buildMypyBoto3Package "sso-oidc" "1.43.0"
@@ -1394,8 +1394,8 @@ in
"sha256-zwxwpve6uEpXNyMQzaFPIEqDI/JoP5ks2wmO5gqLf7c=";
mypy-boto3-wafv2 =
- buildMypyBoto3Package "wafv2" "1.43.59"
- "sha256-QxQd/4lPo4kDjmeTrXrF+Eon+EYKG5kRZ1bAIsu2K6s=";
+ buildMypyBoto3Package "wafv2" "1.43.63"
+ "sha256-8hUgFNVUOcsjOyECvMlw0S0uG6A8XTv2EBWi06Cj2QY=";
mypy-boto3-wellarchitected =
buildMypyBoto3Package "wellarchitected" "1.43.0"
@@ -1422,8 +1422,8 @@ in
"sha256-2glzIKBlui8YPvzI74bT4ADqEZ0lH9CuZqHtwz64Z3k=";
mypy-boto3-workspaces =
- buildMypyBoto3Package "workspaces" "1.43.30"
- "sha256-1OsfLVGw+V5J8nV343HEp8JOHpk81UawKRmAoE/eBNc=";
+ buildMypyBoto3Package "workspaces" "1.43.64"
+ "sha256-zfdA0TU8uzHfqWOt1o16Y6ANoN9PPtth8J9/DARMc+A=";
mypy-boto3-workspaces-web =
buildMypyBoto3Package "workspaces-web" "1.43.0"
diff --git a/pkgs/development/python-modules/oslo-db/default.nix b/pkgs/development/python-modules/oslo-db/default.nix
index 3f6f9053f759..279b5f511dd6 100644
--- a/pkgs/development/python-modules/oslo-db/default.nix
+++ b/pkgs/development/python-modules/oslo-db/default.nix
@@ -59,7 +59,7 @@ buildPythonPackage rec {
checkPhase = ''
runHook preCheck
- stestr run -e <(echo "oslo_db.tests.sqlalchemy.test_utils.TestModelQuery.test_project_filter_allow_none")
+ stestr run
runHook postCheck
'';
diff --git a/pkgs/development/python-modules/oslo-i18n/default.nix b/pkgs/development/python-modules/oslo-i18n/default.nix
index c93201cd9e3a..4f65f6174cdc 100644
--- a/pkgs/development/python-modules/oslo-i18n/default.nix
+++ b/pkgs/development/python-modules/oslo-i18n/default.nix
@@ -40,10 +40,7 @@ buildPythonPackage rec {
checkPhase = ''
runHook preCheck
- stestr run -e <(echo "
- # list is not deduped
- oslo_i18n.tests.test_gettextutils.GettextTest.test_get_available_languages
- ")
+ stestr run
runHook postCheck
'';
diff --git a/pkgs/development/python-modules/osprofiler/default.nix b/pkgs/development/python-modules/osprofiler/default.nix
index f4eb83ef4c3c..8e480eabcc73 100644
--- a/pkgs/development/python-modules/osprofiler/default.nix
+++ b/pkgs/development/python-modules/osprofiler/default.nix
@@ -1,26 +1,34 @@
{
lib,
buildPythonPackage,
+ ddt,
+ docutils,
+ elasticsearch,
fetchPypi,
netaddr,
+ opentelemetry-exporter-otlp,
+ opentelemetry-sdk,
oslo-concurrency,
oslo-config,
oslo-serialization,
oslo-utils,
prettytable,
+ pymongo,
+ redis,
requests,
setuptools,
+ stestrCheckHook,
webob,
}:
buildPythonPackage rec {
pname = "osprofiler";
- version = "4.3.0";
+ version = "4.4.0";
pyproject = true;
src = fetchPypi {
inherit pname version;
- hash = "sha256-d6jaKyO7X5BIBUvVzMRdCshFdMqKiO8SC4+sbohk4kw=";
+ hash = "sha256-bgjffu9q/A0tAngT1A5DyyKPDrPrNEHWFJXCgA6/oyA=";
};
build-system = [ setuptools ];
@@ -36,11 +44,16 @@ buildPythonPackage rec {
webob
];
- # NOTE(vinetos): OSProfiler depends on jeager-client which use opentracing
- # Opentracing and jeager-client are archived since 2022.
- # As this package is made only to support old OpenStack clients and bindings,
- # We do not really care
- doCheck = false;
+ nativeCheckInputs = [
+ ddt
+ docutils
+ elasticsearch
+ opentelemetry-exporter-otlp
+ opentelemetry-sdk
+ pymongo
+ redis
+ stestrCheckHook
+ ];
pythonImportsCheck = [ "osprofiler" ];
diff --git a/pkgs/development/python-modules/padne/default.nix b/pkgs/development/python-modules/padne/default.nix
new file mode 100644
index 000000000000..f2751a1e36ad
--- /dev/null
+++ b/pkgs/development/python-modules/padne/default.nix
@@ -0,0 +1,156 @@
+{
+ lib,
+ stdenv,
+ buildPythonPackage,
+ fetchFromGitHub,
+
+ kicad,
+
+ # build-time
+ cmake,
+ ninja,
+ pkg-config,
+ python,
+
+ # run-time
+ boost,
+ gmp,
+ mpfr,
+
+ # build-system
+ nanobind,
+ scikit-build-core,
+ setuptools,
+ setuptools-scm,
+ wheel,
+
+ # dependencies
+ lxml,
+ numpy,
+ pygerber,
+ pyopengl,
+ pyside6,
+ scipy,
+ sexpdata,
+ shapely,
+
+ # tests
+ pytestCheckHook,
+ typeguard,
+}:
+
+buildPythonPackage (finalAttrs: {
+ pname = "padne";
+ version = "0.3";
+ pyproject = true;
+ dontUseCmakeConfigure = true; # handled by python
+ __structuredAttrs = true;
+
+ src = fetchFromGitHub {
+ owner = "atx";
+ repo = "padne";
+ tag = "v${finalAttrs.version}";
+ hash = "sha256-eFrBjmLZQnfMG7nl9gHPb0Qr8MCAdhjzRIp5n1IzguM=";
+ fetchSubmodules = true;
+ };
+
+ postPatch = ''
+ # `padne` tries to import `pcbnew` directly from `KiCad`, falling back to
+ # `kigadgets` if that fails.
+ # However, `kigadgets` only supports KiCad v5-v9, whereas Nixpkgs is on
+ # v10, so drop it as a dependency to avoid a broken fallback.
+ sed -i '/kigadgets/d' pyproject.toml
+ '';
+
+ nativeBuildInputs = [
+ cmake
+ ninja
+ pkg-config
+ ];
+
+ buildInputs = [
+ boost
+ gmp
+ mpfr
+ nanobind
+ ];
+
+ cmakeFlags = [
+ (lib.cmakeFeature "nanobind_DIR" "${nanobind}/${python.sitePackages}/nanobind/cmake")
+ ];
+
+ build-system = [
+ nanobind
+ scikit-build-core
+ setuptools
+ setuptools-scm
+ wheel
+ ];
+
+ dependencies = [
+ kicad
+ lxml
+ numpy
+ finalAttrs.passthru.pygerber
+ pyopengl
+ pyside6
+ scipy
+ sexpdata
+ shapely
+ ];
+
+ pythonImportsCheck = [
+ "padne"
+ ];
+
+ nativeCheckInputs = [
+ pytestCheckHook
+ typeguard
+ ];
+
+ preCheck = ''
+ # remove src module, so tests use the installed module, instead
+ mv padne _padne
+ '';
+
+ disabledTests = lib.optionals stdenv.hostPlatform.isAarch64 [
+ # AssertionError: Center distance 4.8999999999999995 not ~5.0
+ "test_basic_rectangle_distance_map"
+ ];
+
+ passthru = {
+ # Padne needs a more recent version of `pygerber` than the one in Nixpkgs,
+ # which is currently the 2.4.3 stable release.
+ pygerber = pygerber.overrideAttrs {
+ version = "2.4.3-unstable-2026-03-20";
+ src = fetchFromGitHub {
+ owner = "Argmaster";
+ repo = "pygerber";
+ rev = "5446d44d424897e1b1a68c48c160ed9b4e828f44";
+ hash = "sha256-AhLIBh1dAmmOLBw6XaJIeYhUAh1BSv/ALVc4qOfD7g4=";
+ };
+ # TODO:
+ # 46 failed, 592 passed, 1 xfailed, 61 warnings, 96 errors in 16.52s
+ dontUsePytestCheck = true;
+ };
+ };
+
+ meta = {
+ description = "KiCad-focused Power Delivery Network Simulator";
+ longDescription = ''
+ Padne is a KiCad-native power delivery network analysis tool.
+
+ It uses the finite element method in order to simulate the voltage drop
+ induced by DC currents on printed circuit boards.
+
+ This allows easy identification of resistive bottlenecks, design of high
+ current distribution networks or implementing complex heating elements.
+ '';
+ homepage = "https://github.com/atx/padne";
+ changelog = "https://github.com/atx/padne/releases/tag/${finalAttrs.src.tag}";
+ mainProgram = "padne";
+ license = with lib.licenses; [ gpl3Plus ];
+ maintainers = with lib.maintainers; [ eljamm ];
+ teams = with lib.teams; [ ngi ];
+ };
+})
diff --git a/pkgs/development/python-modules/python-cinderclient/default.nix b/pkgs/development/python-modules/python-cinderclient/default.nix
index 7f7ea4edc134..6b3c99c167a8 100644
--- a/pkgs/development/python-modules/python-cinderclient/default.nix
+++ b/pkgs/development/python-modules/python-cinderclient/default.nix
@@ -62,19 +62,7 @@ buildPythonPackage rec {
checkPhase = ''
runHook preCheck
- # File "/build/python-cinderclient-9.6.0/cinderclient/client.py", line 196, in request
- # if raise_exc and resp.status_code >= 400:
- # ^^^^^^^^^^^^^^^^^^^^^^^
- #
- # TypeError: '>=' not supported between instances of 'Mock' and 'int'
- stestr run -e <(echo "
- cinderclient.tests.unit.test_client.ClientTest.test_keystone_request_raises_auth_failure_exception
- cinderclient.tests.unit.test_client.ClientTest.test_sessionclient_request_method
- cinderclient.tests.unit.test_client.ClientTest.test_sessionclient_request_method_raises_badrequest
- cinderclient.tests.unit.test_client.ClientTest.test_sessionclient_request_method_raises_overlimit
- cinderclient.tests.unit.test_shell.ShellTest.test_password_prompted
- cinderclient.tests.unit.test_shell.TestLoadVersionedActions.test_load_versioned_actions_with_help
- ")
+ stestr run
runHook postCheck
'';
diff --git a/pkgs/development/python-modules/python-glanceclient/default.nix b/pkgs/development/python-modules/python-glanceclient/default.nix
index a6035fd9b3ee..1090b0dabd55 100644
--- a/pkgs/development/python-modules/python-glanceclient/default.nix
+++ b/pkgs/development/python-modules/python-glanceclient/default.nix
@@ -26,23 +26,10 @@ let
disabledTests = [
# Skip tests which require networking.
- "test_http_chunked_response"
- "test_v1_download_has_no_stray_output_to_stdout"
- "test_v2_requests_valid_cert_verification"
- "test_download_has_no_stray_output_to_stdout"
- "test_v1_requests_cert_verification_no_compression"
- "test_v1_requests_cert_verification"
- "test_v2_download_has_no_stray_output_to_stdout"
- "test_v2_requests_bad_ca"
- "test_v2_requests_bad_cert"
- "test_v2_requests_cert_verification_no_compression"
- "test_v2_requests_cert_verification"
- "test_v2_requests_valid_cert_no_key"
- "test_v2_requests_valid_cert_verification_no_compression"
- "test_log_request_id_once"
- # asserts exact amount of mock calls
- "test_cache_schemas_gets_when_forced"
- "test_cache_schemas_gets_when_not_exists"
+ "glanceclient.tests.unit.test_http.TestClient.test_http_chunked_response"
+ "glanceclient.tests.unit.test_http.TestClient.test_log_request_id_once"
+ "glanceclient.tests.unit.test_http.TestClient.test_log_request_id_once"
+ ''glanceclient\.tests\.unit\.test_ssl\.TestHTTPSVerifyCert\..*''
];
in
buildPythonPackage {
diff --git a/pkgs/development/python-modules/python-ironicclient/default.nix b/pkgs/development/python-modules/python-ironicclient/default.nix
index f9f7219795b5..cf6e4579b01f 100644
--- a/pkgs/development/python-modules/python-ironicclient/default.nix
+++ b/pkgs/development/python-modules/python-ironicclient/default.nix
@@ -69,16 +69,7 @@ buildPythonPackage rec {
checkPhase = ''
runHook preCheck
- stestr run -e <(echo "
- ironicclient.tests.unit.osc.v1.test_baremetal_chassis.TestChassisCreate.test_chassis_create_no_options
- ironicclient.tests.unit.osc.v1.test_baremetal_chassis.TestChassisCreate.test_chassis_create_with_description
- ironicclient.tests.unit.osc.v1.test_baremetal_chassis.TestChassisCreate.test_chassis_create_with_extra
- ironicclient.tests.unit.osc.v1.test_baremetal_chassis.TestChassisCreate.test_chassis_create_with_uuid
- ironicclient.tests.unit.osc.v1.test_baremetal_conductor.TestBaremetalConductorShow.test_conductor_show
- ironicclient.tests.unit.osc.v1.test_baremetal_node.TestBaremetalCreate
- ironicclient.tests.unit.osc.v1.test_baremetal_node.TestBaremetalShow.test_baremetal_show
- ironicclient.tests.unit.osc.v1.test_baremetal_node.TestNodeHistoryEventGet.test_baremetal_node_history_list
- ")
+ stestr run
runHook postCheck
'';
diff --git a/pkgs/development/python-modules/python-jenkins/default.nix b/pkgs/development/python-modules/python-jenkins/default.nix
index 85ee49cea231..6c0edc0c21d9 100644
--- a/pkgs/development/python-modules/python-jenkins/default.nix
+++ b/pkgs/development/python-modules/python-jenkins/default.nix
@@ -55,10 +55,7 @@ buildPythonPackage rec {
multiprocess
];
checkPhase = ''
- # Skip tests that fail due to setuptools>=66.0.0 rejecting PEP 440
- # non-conforming versions. See
- # https://github.com/pypa/setuptools/issues/2497 for details.
- stestr run -E "tests.test_plugins.(PluginsTestScenarios.test_plugin_version_comparison|PluginsTestScenarios.test_plugin_version_object_comparison|PluginsTest.test_plugin_equal|PluginsTest.test_plugin_not_equal)"
+ stestr run
'';
meta = {
diff --git a/pkgs/development/python-modules/python-mistralclient/default.nix b/pkgs/development/python-modules/python-mistralclient/default.nix
index 51ea1a97ce52..4ec57797a9bf 100644
--- a/pkgs/development/python-modules/python-mistralclient/default.nix
+++ b/pkgs/development/python-modules/python-mistralclient/default.nix
@@ -3,6 +3,7 @@
buildPythonPackage,
cliff,
fetchFromGitHub,
+ fetchpatch,
keystoneauth1,
openstackdocstheme,
openstacksdk,
@@ -36,6 +37,14 @@ buildPythonPackage rec {
hash = "sha256-FNfee7d8gTcsTdv7lxqDbniUiKQvUXHRSkAlNOCn/k4=";
};
+ patches = [
+ # Fix unit test failure caused by osprofiler 4.4.0
+ (fetchpatch {
+ url = "https://github.com/openstack/python-mistralclient/commit/4cee2bb25a4d15e7dd1802f3e7e75520177446db.patch";
+ hash = "sha256-H8JSvPFcHZJsnIWpV0WPvkqyvmg8SBbpsUzqcZeFBwA=";
+ })
+ ];
+
env.PBR_VERSION = version;
nativeBuildInputs = [
@@ -83,7 +92,7 @@ buildPythonPackage rec {
meta = {
description = "OpenStack Mistral Command-line Client";
- homepage = "https://opendev.org/openstack/python-mistralclient/";
+ homepage = "https://github.com/openstack/python-mistralclient";
license = lib.licenses.asl20;
mainProgram = "mistral";
teams = [ lib.teams.openstack ];
diff --git a/pkgs/development/python-modules/rioxarray/default.nix b/pkgs/development/python-modules/rioxarray/default.nix
index 9d6b609b8cba..15b5db9d5900 100644
--- a/pkgs/development/python-modules/rioxarray/default.nix
+++ b/pkgs/development/python-modules/rioxarray/default.nix
@@ -22,14 +22,14 @@
buildPythonPackage (finalAttrs: {
pname = "rioxarray";
- version = "0.22.0";
+ version = "0.23.0";
pyproject = true;
src = fetchFromGitHub {
owner = "corteva";
repo = "rioxarray";
tag = finalAttrs.version;
- hash = "sha256-+0TJeEjAKIqi6cbLZiv14dPKW8Xza+4tn/Erzn88ZS0=";
+ hash = "sha256-3zRfoCHINLZt88tIu9wSOyZGzQEryxMSWhfEBcviKSQ=";
};
build-system = [ setuptools ];
diff --git a/pkgs/development/python-modules/streamlit-folium/default.nix b/pkgs/development/python-modules/streamlit-folium/default.nix
index b1e2f97e26e1..2faff3e74b20 100644
--- a/pkgs/development/python-modules/streamlit-folium/default.nix
+++ b/pkgs/development/python-modules/streamlit-folium/default.nix
@@ -15,14 +15,14 @@
buildPythonPackage (finalAttrs: {
pname = "streamlit-folium";
- version = "0.27.3";
+ version = "0.27.4";
pyproject = true;
src = fetchFromGitHub {
owner = "randyzwitch";
repo = "streamlit-folium";
tag = "v${finalAttrs.version}";
- hash = "sha256-nxUK8o9OqdD0/tktSncTgxk3q4nAhmmR8A7isZsxsFI=";
+ hash = "sha256-DpkAwbSi8nQ2E9ItxCq89ubPGn5u8/caYj0GaGuTnR4=";
};
postPatch = ''
diff --git a/pkgs/development/python-modules/tiered-debug/default.nix b/pkgs/development/python-modules/tiered-debug/default.nix
index 8a43026f5fcd..75937691c058 100644
--- a/pkgs/development/python-modules/tiered-debug/default.nix
+++ b/pkgs/development/python-modules/tiered-debug/default.nix
@@ -7,16 +7,16 @@
pytest-cov-stub,
}:
-buildPythonPackage rec {
+buildPythonPackage (finalAttrs: {
pname = "tiered-debug";
- version = "1.4.0";
+ version = "1.5.1";
pyproject = true;
src = fetchFromGitHub {
owner = "untergeek";
repo = "tiered-debug";
- tag = "v${version}";
- hash = "sha256-lGt2cnT5Pjb87msgnDawn2gg2VtWXwniHM1wTjHU/x4=";
+ tag = "v${finalAttrs.version}";
+ hash = "sha256-PIqRReT+m5nlq9koD88XJMeUvUsRwrXCqZDTylZGgPg=";
};
build-system = [ hatchling ];
@@ -37,8 +37,8 @@ buildPythonPackage rec {
meta = {
description = "Python logging helper module that allows for multiple tiers of debug logging";
homepage = "https://github.com/untergeek/tiered-debug";
- changelog = "https://github.com/untergeek/tiered-debug/releases/tag/${src.tag}";
+ changelog = "https://github.com/untergeek/tiered-debug/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ fab ];
};
-}
+})
diff --git a/pkgs/development/python-modules/tree-sitter-typescript/default.nix b/pkgs/development/python-modules/tree-sitter-typescript/default.nix
new file mode 100644
index 000000000000..45ecab1ef036
--- /dev/null
+++ b/pkgs/development/python-modules/tree-sitter-typescript/default.nix
@@ -0,0 +1,41 @@
+{
+ lib,
+ buildPythonPackage,
+ fetchFromGitHub,
+ setuptools,
+ tree-sitter,
+}:
+
+buildPythonPackage (finalAttrs: {
+ pname = "tree-sitter-typescript";
+ version = "0.23.2";
+ pyproject = true;
+
+ src = fetchFromGitHub {
+ owner = "tree-sitter";
+ repo = "tree-sitter-typescript";
+ tag = "v${finalAttrs.version}";
+ hash = "sha256-CU55+YoFJb6zWbJnbd38B7iEGkhukSVpBN7sli6GkGY=";
+ };
+
+ build-system = [ setuptools ];
+
+ optional-dependencies = {
+ core = [
+ tree-sitter
+ ];
+ };
+
+ # There are no tests
+ doCheck = false;
+
+ pythonImportsCheck = [ "tree_sitter_typescript" ];
+
+ meta = {
+ description = "TypeScript grammar for tree-sitter";
+ homepage = "https://github.com/tree-sitter/tree-sitter-typescript";
+ changelog = "https://github.com/tree-sitter/tree-sitter-typescript/releases/tag/v${finalAttrs.src.tag}";
+ license = lib.licenses.mit;
+ maintainers = with lib.maintainers; [ fab ];
+ };
+})
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 017ac7b28d25..1c55f3f9197a 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -12793,6 +12793,8 @@ self: super: with self; {
paddlex = callPackage ../development/python-modules/paddlex { };
+ padne = callPackage ../development/python-modules/padne { };
+
pagelabels = callPackage ../development/python-modules/pagelabels { };
paginate = callPackage ../development/python-modules/paginate { };
@@ -20760,6 +20762,8 @@ self: super: with self; {
tree-sitter-sql = callPackage ../development/python-modules/tree-sitter-sql { };
+ tree-sitter-typescript = callPackage ../development/python-modules/tree-sitter-typescript { };
+
tree-sitter-yaml = callPackage ../development/python-modules/tree-sitter-yaml { };
tree-sitter-zeek = callPackage ../development/python-modules/tree-sitter-zeek { };