mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-10-02 21:10:08 +00:00
Merge master into staging-nixos
This commit is contained in:
@@ -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 \
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
{
|
||||
"open": []
|
||||
"open": [],
|
||||
"items": []
|
||||
}
|
||||
|
||||
@@ -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}");
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
74
pkgs/by-name/ag/agentsploit/package.nix
Normal file
74
pkgs/by-name/ag/agentsploit/package.nix
Normal file
@@ -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";
|
||||
};
|
||||
})
|
||||
@@ -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'};
|
||||
}
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
194
pkgs/by-name/ar/archisteamfarm/deps.json
generated
194
pkgs/by-name/ar/archisteamfarm/deps.json
generated
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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 = [ "." ];
|
||||
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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" ];
|
||||
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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=";
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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" ];
|
||||
|
||||
|
||||
@@ -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
|
||||
'';
|
||||
|
||||
|
||||
55
pkgs/by-name/ku/kubexhunt/package.nix
Normal file
55
pkgs/by-name/ku/kubexhunt/package.nix
Normal file
@@ -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";
|
||||
};
|
||||
})
|
||||
@@ -17,7 +17,7 @@ buildNpmPackage (finalAttrs: {
|
||||
src
|
||||
sourceRoot
|
||||
;
|
||||
hash = "sha256-X+RzRM1rRZZ2k1kjtk0JVXBIbEIuX5mk/zRzwjGKr1s=";
|
||||
hash = "sha256-PArNKjdLqKJSEEKe94mguzKiNSwpYk56inenU3GL1mI=";
|
||||
};
|
||||
npmBuildScript = "build";
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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'<a href="{e.target.href()}">{e.target.toc_html}</a>'
|
||||
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'<li class="{cls}">'
|
||||
f'<details{open_attr}><summary>{link}</summary>{children}</details>'
|
||||
@@ -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"<em>{title_html}</em>"
|
||||
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:
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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 <details open>
|
||||
html = _build(tmp_path, sidebar_depth=3, sidebar_open=frozenset({"chap-fpa"}))
|
||||
assert '<details open><summary><a href="#chap-fpa"' in html
|
||||
assert '<details><summary><a href="#part-builders"' in html
|
||||
# the 'open' array expands a config group and an --infile heading.
|
||||
html = _render_with_config(
|
||||
tmp_path,
|
||||
{
|
||||
"items": [
|
||||
{"label": "Guides", "id": "guides", "children": [
|
||||
{"label": "Intro", "file": "intro.md"},
|
||||
]},
|
||||
],
|
||||
"open": ["guides", "manual-chap"],
|
||||
},
|
||||
{"intro.md": "# Introduction {#intro}\n\nBody.\n"},
|
||||
manual_chapter="# Manual chapter {#manual-chap}\n\n## Sub {#manual-sub}\n\nText.\n",
|
||||
)
|
||||
# the group opens by its own id. its link points at the child.
|
||||
assert '<details open><summary><a href="#intro">Guides</a>' in html
|
||||
assert '<details open><summary><a href="#manual-chap"' in html
|
||||
|
||||
|
||||
def test_config_group_without_id_is_not_openable(tmp_path: Path) -> 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 '<details><summary><a href="#intro">Guides</a>' in html
|
||||
assert "<details open>" 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</h2>" not in html
|
||||
assert 'id="guides"' not in html
|
||||
# the child renders as a page.
|
||||
assert '<h2 id="install" class="title" >Install' in html
|
||||
assert "Install body." in html
|
||||
# the sidebar nests the child under the group.
|
||||
assert '<details><summary><a href="#install">Guides</a></summary>' in html
|
||||
assert '<a href="#install">Install</a>' 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 '<h2 id="intro" class="title" >Introduction' in html
|
||||
assert '<a href="#intro">Introduction</a>' 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 '<h2 id="leaf1" class="title" >File Title' in html
|
||||
assert '<a href="#leaf1">Sidebar Label</a>' 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 '<h2 id="leaf-c" class="title"' in html
|
||||
assert 'id="ga"' not in html and 'id="gb"' not in html
|
||||
# the sidebar nests the groups.
|
||||
# every group links to its first descendant page, #leaf-c.
|
||||
assert '<details><summary><a href="#leaf-c">A</a></summary>' in html
|
||||
assert '<details><summary><a href="#leaf-c">B</a></summary>' in html
|
||||
assert '<a href="#leaf-c">C</a></li>' in html
|
||||
assert html.index('>A</a>') < html.index('>B</a>') < html.index('>C</a>')
|
||||
|
||||
|
||||
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 '<a class="xref" href="#intro"' in html
|
||||
assert ">Introduction</a>" 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__)
|
||||
|
||||
@@ -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=";
|
||||
|
||||
57
pkgs/by-name/op/openhack/package.nix
Normal file
57
pkgs/by-name/op/openhack/package.nix
Normal file
@@ -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";
|
||||
};
|
||||
})
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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=";
|
||||
|
||||
3
pkgs/by-name/pa/padne/package.nix
Normal file
3
pkgs/by-name/pa/padne/package.nix
Normal file
@@ -0,0 +1,3 @@
|
||||
{ python3Packages }:
|
||||
|
||||
python3Packages.toPythonApplication python3Packages.padne
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
'';
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
31
pkgs/by-name/tu/tutanota-desktop/update.sh
Executable file
31
pkgs/by-name/tu/tutanota-desktop/update.sh
Executable file
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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) \
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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 ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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";
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -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" ];
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
'';
|
||||
|
||||
|
||||
@@ -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
|
||||
'';
|
||||
|
||||
@@ -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" ];
|
||||
|
||||
|
||||
156
pkgs/development/python-modules/padne/default.nix
Normal file
156
pkgs/development/python-modules/padne/default.nix
Normal file
@@ -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 ];
|
||||
};
|
||||
})
|
||||
@@ -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
|
||||
'';
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
'';
|
||||
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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 = ''
|
||||
|
||||
@@ -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 ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -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 ];
|
||||
};
|
||||
})
|
||||
@@ -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 { };
|
||||
|
||||
Reference in New Issue
Block a user