mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-09-18 05:39:58 +00:00
Merge master into staging-next
This commit is contained in:
@@ -1,151 +1,27 @@
|
||||
# Generates the documentation for library functions via nixdoc.
|
||||
# To build this derivation, run `nix-build -A nixpkgs-manual.lib-docs`
|
||||
{
|
||||
lib,
|
||||
stdenvNoCC,
|
||||
nixdoc,
|
||||
nix,
|
||||
nixpkgs ? { },
|
||||
libsets ? [
|
||||
{
|
||||
name = "asserts";
|
||||
description = "assertion functions";
|
||||
}
|
||||
{
|
||||
name = "attrsets";
|
||||
description = "attribute set functions";
|
||||
}
|
||||
{
|
||||
name = "strings";
|
||||
description = "string manipulation functions";
|
||||
}
|
||||
{
|
||||
name = "versions";
|
||||
description = "version string functions";
|
||||
}
|
||||
{
|
||||
name = "trivial";
|
||||
description = "miscellaneous functions";
|
||||
}
|
||||
{
|
||||
name = "fixedPoints";
|
||||
baseName = "fixed-points";
|
||||
description = "explicit recursion functions";
|
||||
}
|
||||
{
|
||||
name = "lists";
|
||||
description = "list manipulation functions";
|
||||
}
|
||||
{
|
||||
name = "debug";
|
||||
description = "debugging functions";
|
||||
}
|
||||
{
|
||||
name = "options";
|
||||
description = "NixOS / nixpkgs option handling";
|
||||
}
|
||||
{
|
||||
name = "path";
|
||||
description = "path functions";
|
||||
}
|
||||
{
|
||||
name = "fetchers";
|
||||
description = "functions which can be reused across fetchers";
|
||||
}
|
||||
{
|
||||
name = "filesystem";
|
||||
description = "filesystem functions";
|
||||
}
|
||||
{
|
||||
name = "fileset";
|
||||
description = "file set functions";
|
||||
}
|
||||
{
|
||||
name = "sources";
|
||||
description = "source filtering functions";
|
||||
}
|
||||
{
|
||||
name = "cli";
|
||||
description = "command-line serialization functions";
|
||||
}
|
||||
{
|
||||
name = "generators";
|
||||
description = "functions that create file formats from nix data structures";
|
||||
}
|
||||
{
|
||||
name = "gvariant";
|
||||
description = "GVariant formatted string serialization functions";
|
||||
}
|
||||
{
|
||||
name = "customisation";
|
||||
description = "Functions to customise (derivation-related) functions, derivations, or attribute sets";
|
||||
}
|
||||
{
|
||||
name = "meta";
|
||||
description = "functions for derivation metadata";
|
||||
}
|
||||
{
|
||||
name = "derivations";
|
||||
description = "miscellaneous derivation-specific functions";
|
||||
}
|
||||
],
|
||||
}:
|
||||
|
||||
stdenvNoCC.mkDerivation {
|
||||
name = "nixpkgs-lib-docs";
|
||||
|
||||
src = ../../lib;
|
||||
|
||||
nativeBuildInputs = [
|
||||
nixdoc
|
||||
nix
|
||||
];
|
||||
nativeBuildInputs = [ nixdoc ];
|
||||
|
||||
buildPhase = ''
|
||||
mkdir -p src
|
||||
cp -r ${../../lib} src/lib
|
||||
|
||||
mkdir -p $out
|
||||
nixdoc --manifest ${../function-catalog.json} --root src --output $out/lib-functions.json
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
cd ..
|
||||
|
||||
export NIX_STATE_DIR=$(mktemp -d)
|
||||
nix-instantiate --eval --strict --json ${./lib-function-locations.nix} \
|
||||
--arg nixpkgsPath "./." \
|
||||
--argstr revision ${nixpkgs.rev or "master"} \
|
||||
--argstr libsetsJSON ${lib.escapeShellArg (builtins.toJSON libsets)} \
|
||||
--store $(mktemp -d) \
|
||||
> locations.json
|
||||
|
||||
function docgen {
|
||||
name=$1
|
||||
baseName=$2
|
||||
description=$3
|
||||
# TODO: wrap lib.$name in <literal>, make nixdoc not escape it
|
||||
if [[ -e "lib/$baseName.nix" ]]; then
|
||||
nixdoc -c "$name" -d "lib.$name: $description" -l locations.json -f "lib/$baseName.nix" > "$out/$name.md"
|
||||
else
|
||||
nixdoc -c "$name" -d "lib.$name: $description" -l locations.json -f "lib/$baseName/default.nix" > "$out/$name.md"
|
||||
fi
|
||||
echo "$out/$name.md" >> "$out/index.md"
|
||||
}
|
||||
|
||||
mkdir -p "$out"
|
||||
|
||||
cat > "$out/index.md" << 'EOF'
|
||||
```{=include=} sections auto-id-prefix=auto-generated
|
||||
EOF
|
||||
|
||||
${lib.concatMapStrings (
|
||||
{
|
||||
name,
|
||||
baseName ? name,
|
||||
description,
|
||||
}:
|
||||
''
|
||||
docgen ${name} ${baseName} ${lib.escapeShellArg description}
|
||||
''
|
||||
) libsets}
|
||||
|
||||
echo '```' >> "$out/index.md"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
{
|
||||
nixpkgsPath,
|
||||
revision,
|
||||
libsetsJSON,
|
||||
}:
|
||||
let
|
||||
lib = import (nixpkgsPath + "/lib");
|
||||
libsets = builtins.fromJSON libsetsJSON;
|
||||
|
||||
libDefPos =
|
||||
prefix: set:
|
||||
builtins.concatMap (
|
||||
name:
|
||||
[
|
||||
{
|
||||
name = builtins.concatStringsSep "." (prefix ++ [ name ]);
|
||||
location = builtins.unsafeGetAttrPos name set;
|
||||
}
|
||||
]
|
||||
++ lib.optionals (builtins.length prefix == 0 && builtins.isAttrs set.${name}) (
|
||||
libDefPos (prefix ++ [ name ]) set.${name}
|
||||
)
|
||||
) (builtins.attrNames set);
|
||||
|
||||
libset =
|
||||
toplib:
|
||||
map (subsetname: {
|
||||
subsetname = subsetname;
|
||||
functions = libDefPos [ ] toplib.${subsetname};
|
||||
}) (map (x: x.name) libsets);
|
||||
|
||||
flattenedLibSubset =
|
||||
{ subsetname, functions }:
|
||||
map (fn: {
|
||||
name = "lib.${subsetname}.${fn.name}";
|
||||
value = fn.location;
|
||||
}) functions;
|
||||
|
||||
locatedlibsets = libs: map flattenedLibSubset (libset libs);
|
||||
removeFilenamePrefix =
|
||||
prefix: filename:
|
||||
let
|
||||
prefixLen = (builtins.stringLength prefix) + 1; # +1 to remove the leading /
|
||||
filenameLen = builtins.stringLength filename;
|
||||
substr = builtins.substring prefixLen filenameLen filename;
|
||||
in
|
||||
substr;
|
||||
|
||||
removeNixpkgs = removeFilenamePrefix (toString nixpkgsPath);
|
||||
|
||||
liblocations = builtins.filter (elem: elem.value != null) (lib.lists.flatten (locatedlibsets lib));
|
||||
|
||||
fnLocationRelative =
|
||||
{ name, value }:
|
||||
{
|
||||
inherit name;
|
||||
value = value // {
|
||||
file = removeNixpkgs value.file;
|
||||
};
|
||||
};
|
||||
|
||||
relativeLocs = (map fnLocationRelative liblocations);
|
||||
sanitizeId = builtins.replaceStrings [ "'" ] [ "-prime" ];
|
||||
|
||||
urlPrefix = "https://github.com/NixOS/nixpkgs/blob/${revision}";
|
||||
jsonLocs = builtins.listToAttrs (
|
||||
map (
|
||||
{ name, value }:
|
||||
{
|
||||
name = sanitizeId name;
|
||||
value =
|
||||
let
|
||||
text = "${value.file}:${toString value.line}";
|
||||
target = "${urlPrefix}/${value.file}#L${toString value.line}";
|
||||
in
|
||||
"[${text}](${target}) in `<nixpkgs>`";
|
||||
}
|
||||
) relativeLocs
|
||||
);
|
||||
|
||||
in
|
||||
jsonLocs
|
||||
@@ -91,7 +91,7 @@ stdenvNoCC.mkDerivation (
|
||||
substituteInPlace ./languages-frameworks/python.section.md \
|
||||
--subst-var-by python-interpreter-table "$(<"${pythonInterpreterTable}")"
|
||||
|
||||
cat ./functions/library.md.in ${lib-docs}/index.md > ./functions/library.md
|
||||
cp ${lib-docs}/lib-functions.json ./lib-functions.json
|
||||
|
||||
substitute ./manual.md.in ./manual.md \
|
||||
--replace-fail '@MANUAL_VERSION@' '${lib.version}'
|
||||
@@ -147,7 +147,7 @@ stdenvNoCC.mkDerivation (
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
lib-docs = callPackage ./lib-function-docs.nix { inherit nixpkgs; };
|
||||
lib-docs = callPackage ./lib-function-docs.nix { };
|
||||
|
||||
epub = callPackage ./epub.nix { };
|
||||
|
||||
|
||||
124
doc/function-catalog.json
Normal file
124
doc/function-catalog.json
Normal file
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"version": 1,
|
||||
"groups": [
|
||||
{ "id": "asserts", "description": "assertion functions" },
|
||||
{ "id": "attrsets", "description": "attribute set functions" },
|
||||
{ "id": "strings", "description": "string manipulation functions" },
|
||||
{ "id": "versions", "description": "version string functions" },
|
||||
{ "id": "trivial", "description": "miscellaneous functions" },
|
||||
{ "id": "fixedPoints", "description": "explicit recursion functions" },
|
||||
{ "id": "lists", "description": "list manipulation functions" },
|
||||
{ "id": "debug", "description": "debugging functions" },
|
||||
{ "id": "options", "description": "NixOS / nixpkgs option handling" },
|
||||
{ "id": "path", "description": "path functions" },
|
||||
{
|
||||
"id": "fetchers",
|
||||
"description": "functions which can be reused across fetchers"
|
||||
},
|
||||
{ "id": "filesystem", "description": "filesystem functions" },
|
||||
{ "id": "fileset" },
|
||||
{ "id": "sources", "description": "source filtering functions" },
|
||||
{ "id": "cli", "description": "command-line serialization functions" },
|
||||
{
|
||||
"id": "generators",
|
||||
"description": "functions that create file formats from nix data structures"
|
||||
},
|
||||
{
|
||||
"id": "gvariant",
|
||||
"description": "GVariant formatted string serialization functions"
|
||||
},
|
||||
{
|
||||
"id": "customisation",
|
||||
"description": "Functions to customise (derivation-related) functions, derivations, or attribute sets"
|
||||
},
|
||||
{ "id": "meta", "description": "functions for derivation metadata" },
|
||||
{
|
||||
"id": "derivations",
|
||||
"description": "miscellaneous derivation-specific functions"
|
||||
}
|
||||
],
|
||||
"sources": [
|
||||
{ "path": "lib.trivial", "file": "lib/trivial.nix", "groups": ["trivial"] },
|
||||
{
|
||||
"path": "lib.fixedPoints",
|
||||
"file": "lib/fixed-points.nix",
|
||||
"groups": ["fixedPoints"]
|
||||
},
|
||||
{
|
||||
"path": "lib.attrsets",
|
||||
"file": "lib/attrsets.nix",
|
||||
"groups": ["attrsets"]
|
||||
},
|
||||
{ "path": "lib.lists", "file": "lib/lists.nix", "groups": ["lists"] },
|
||||
{ "path": "lib.strings", "file": "lib/strings.nix", "groups": ["strings"] },
|
||||
{
|
||||
"path": "lib.customisation",
|
||||
"file": "lib/customisation.nix",
|
||||
"groups": ["customisation"]
|
||||
},
|
||||
{
|
||||
"path": "lib.derivations",
|
||||
"file": "lib/derivations.nix",
|
||||
"groups": ["derivations"]
|
||||
},
|
||||
{ "path": "lib.meta", "file": "lib/meta.nix", "groups": ["meta"] },
|
||||
{
|
||||
"path": "lib.versions",
|
||||
"file": "lib/versions.nix",
|
||||
"groups": ["versions"]
|
||||
},
|
||||
{ "path": "lib.cli", "file": "lib/cli.nix", "groups": ["cli"] },
|
||||
{
|
||||
"path": "lib.gvariant",
|
||||
"file": "lib/gvariant.nix",
|
||||
"groups": ["gvariant"]
|
||||
},
|
||||
{
|
||||
"path": "lib.generators",
|
||||
"file": "lib/generators.nix",
|
||||
"groups": ["generators"]
|
||||
},
|
||||
{ "path": "lib.asserts", "file": "lib/asserts.nix", "groups": ["asserts"] },
|
||||
{ "path": "lib.debug", "file": "lib/debug.nix", "groups": ["debug"] },
|
||||
{
|
||||
"path": "lib.fetchers",
|
||||
"file": "lib/fetchers.nix",
|
||||
"groups": ["fetchers"]
|
||||
},
|
||||
{ "path": "lib.path", "file": "lib/path/default.nix", "groups": ["path"] },
|
||||
{
|
||||
"path": "lib.filesystem",
|
||||
"file": "lib/filesystem.nix",
|
||||
"groups": ["filesystem"]
|
||||
},
|
||||
{
|
||||
"path": "lib.fileset",
|
||||
"file": "lib/fileset/default.nix",
|
||||
"groups": ["fileset"]
|
||||
},
|
||||
{
|
||||
"path": "lib.sources",
|
||||
"file": "lib/sources.nix",
|
||||
"groups": ["sources"],
|
||||
"mode": "deep",
|
||||
"include": [
|
||||
"pathIsGitRepo",
|
||||
"commitIdFromGitRepo",
|
||||
"cleanSource",
|
||||
"cleanSourceWith",
|
||||
"cleanSourceFilter",
|
||||
"pathHasContext",
|
||||
"canCleanSource",
|
||||
"urlToName",
|
||||
"shortRev",
|
||||
"revOrTag",
|
||||
"repoRevToName",
|
||||
"sourceByRegex",
|
||||
"sourceFilesBySuffices",
|
||||
"sourceByGlobs",
|
||||
"trace"
|
||||
]
|
||||
},
|
||||
{ "path": "lib.options", "file": "lib/options.nix", "groups": ["options"] }
|
||||
]
|
||||
}
|
||||
@@ -1,5 +1,3 @@
|
||||
# Nixpkgs Library Functions {#sec-functions-library}
|
||||
|
||||
Nixpkgs provides a standard library at `pkgs.lib`, or through `import <nixpkgs/lib>`.
|
||||
|
||||
<!-- nixdoc-generated documentation must be appended here during build! -->
|
||||
@@ -628,9 +628,12 @@
|
||||
"file": "functions.md"
|
||||
},
|
||||
{
|
||||
"id-prefix": "auto-generated",
|
||||
"file": "functions/library.md"
|
||||
},
|
||||
{
|
||||
"collection": "lib-functions.json",
|
||||
"type": "nixdoc"
|
||||
},
|
||||
{
|
||||
"file": "functions/generators.section.md"
|
||||
},
|
||||
|
||||
@@ -78,11 +78,6 @@ in
|
||||
config.hardware.printers.ensurePrinters. Specifying a symblic
|
||||
name here that does not match any of those printers is
|
||||
considered a hard error.
|
||||
|
||||
::: {.warning}
|
||||
Print jobs to this class will quietly fail if there are no
|
||||
printers in this class. CUPS reports them as pending
|
||||
:::
|
||||
'';
|
||||
};
|
||||
classes = mkOption {
|
||||
@@ -267,7 +262,14 @@ in
|
||||
'';
|
||||
}
|
||||
)
|
||||
];
|
||||
]
|
||||
++ map (class: {
|
||||
assertion = cfg.ensureClasses.${class}.printers != [ ] || cfg.ensureClasses.${class}.classes != [ ];
|
||||
message = ''
|
||||
At least one of the lists `config.hardware.printers.ensureClasses.${class}.printers`
|
||||
and `config.hardware.printers.ensureClasses.${class}.classes` has to be non-empty.
|
||||
'';
|
||||
}) (builtins.attrNames cfg.ensureClasses);
|
||||
|
||||
systemd.services.cups = {
|
||||
postStart =
|
||||
@@ -333,17 +335,6 @@ in
|
||||
d = cfg.ensureDefaultPrinter;
|
||||
})}
|
||||
|
||||
#### CLASS DEFINITIONS ####
|
||||
lpadmin -p _tmp -v file:/dev/null
|
||||
${lib.concatMapStringsSep "\n" (
|
||||
className:
|
||||
lpadmin {
|
||||
p = "_tmp";
|
||||
c = className;
|
||||
}
|
||||
) classNames}
|
||||
lpadmin -x _tmp
|
||||
|
||||
#### ADDING PRINTERS TO CLASSES ####
|
||||
${lib.concatMapStringsSep "\n" (
|
||||
className:
|
||||
|
||||
@@ -573,6 +573,7 @@ in
|
||||
documize = runTest ./documize.nix;
|
||||
docuseal-psql = runTest ./docuseal-postgres.nix;
|
||||
docuseal-sqlite = runTest ./docuseal-sqlite.nix;
|
||||
docuum = runTestOn [ "x86_64-linux" "aarch64-linux" ] ./docuum.nix;
|
||||
doh-proxy-rust = runTest ./doh-proxy-rust.nix;
|
||||
dokuwiki = runTest ./dokuwiki.nix;
|
||||
dolibarr = runTest ./dolibarr.nix;
|
||||
|
||||
58
nixos/tests/docuum.nix
Normal file
58
nixos/tests/docuum.nix
Normal file
@@ -0,0 +1,58 @@
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
name = "docuum";
|
||||
meta.maintainers = [ lib.maintainers.h7x4 ];
|
||||
|
||||
containers.machine = {
|
||||
virtualisation.docker.enable = true;
|
||||
|
||||
services.docuum = {
|
||||
enable = true;
|
||||
threshold = "5 MB";
|
||||
keep = [ "^keep-me:" ];
|
||||
};
|
||||
};
|
||||
|
||||
testScript =
|
||||
let
|
||||
# Each image is 2 MB, so the third non-exempt image should be evicted.
|
||||
imageSizeKb = 2 * 1024;
|
||||
|
||||
mkTestImage =
|
||||
name:
|
||||
pkgs.dockerTools.buildImage {
|
||||
inherit name;
|
||||
tag = "test";
|
||||
copyToRoot = pkgs.runCommand "docuum-test-data-${name}" { } ''
|
||||
mkdir -p $out
|
||||
echo "${name}" > $out/name
|
||||
dd if=/dev/zero of=$out/data bs=1024 count=${toString imageSizeKb}
|
||||
'';
|
||||
};
|
||||
|
||||
images = {
|
||||
keepMe = mkTestImage "keep-me";
|
||||
old = mkTestImage "old-image";
|
||||
new = mkTestImage "new-image";
|
||||
};
|
||||
in
|
||||
''
|
||||
start_all()
|
||||
|
||||
machine.wait_for_unit("docker.service")
|
||||
machine.wait_for_unit("docuum.service")
|
||||
machine.wait_until_succeeds("journalctl -u docuum --grep 'Listening for Docker events'")
|
||||
|
||||
machine.succeed(
|
||||
"docker load < ${images.keepMe}",
|
||||
"docker load < ${images.old}",
|
||||
"docker load < ${images.new}",
|
||||
)
|
||||
|
||||
machine.wait_until_fails("docker image inspect old-image:test")
|
||||
machine.succeed(
|
||||
"docker image inspect keep-me:test",
|
||||
"docker image inspect new-image:test",
|
||||
)
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
traefik-crd = {
|
||||
url = "https://k3s.io/k3s-charts/assets/traefik-crd/traefik-crd-41.4.2+up41.4.0.tgz";
|
||||
sha256 = "0dfvh65gilw4z3cyia8gq0hqgcp09cbdihq6g6n93af9lbpwysnf";
|
||||
};
|
||||
traefik = {
|
||||
url = "https://k3s.io/k3s-charts/assets/traefik/traefik-41.4.2+up41.4.0.tgz";
|
||||
sha256 = "1379f54pci4y41szpnw016wr6kkawyyr6sfzijdsz3f8fryhp3xp";
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"airgap-images-amd64-tar-gz": {
|
||||
"url": "https://github.com/k3s-io/k3s/releases/download/v1.37.0%2Bk3s1/k3s-airgap-images-amd64.tar.gz",
|
||||
"sha256": "936f0ef6acaacb1950367308fbbe0388244df2ffc2a80cbd99e1f01ddde413e7"
|
||||
},
|
||||
"airgap-images-amd64-tar-zst": {
|
||||
"url": "https://github.com/k3s-io/k3s/releases/download/v1.37.0%2Bk3s1/k3s-airgap-images-amd64.tar.zst",
|
||||
"sha256": "0b4ff0d6e233de54be4e16cb5aa298fd53ad88f66ad8ae31093b5ef4dcefcdd0"
|
||||
},
|
||||
"airgap-images-arm-tar-gz": {
|
||||
"url": "https://github.com/k3s-io/k3s/releases/download/v1.37.0%2Bk3s1/k3s-airgap-images-arm.tar.gz",
|
||||
"sha256": "b7d9f8e94a28d0f70b8b9d6782f3d3190fe94b0b19fca4554e41ad3dbdee1f3f"
|
||||
},
|
||||
"airgap-images-arm-tar-zst": {
|
||||
"url": "https://github.com/k3s-io/k3s/releases/download/v1.37.0%2Bk3s1/k3s-airgap-images-arm.tar.zst",
|
||||
"sha256": "be1628b6beb17937140171374beed94e550a9c3c8ea98eec23ae6f21ca8493f1"
|
||||
},
|
||||
"airgap-images-arm64-tar-gz": {
|
||||
"url": "https://github.com/k3s-io/k3s/releases/download/v1.37.0%2Bk3s1/k3s-airgap-images-arm64.tar.gz",
|
||||
"sha256": "d1b534c7b5b67e06fdea2231813b3adc596ba36d7a63699fec1eb23e3c0baf17"
|
||||
},
|
||||
"airgap-images-arm64-tar-zst": {
|
||||
"url": "https://github.com/k3s-io/k3s/releases/download/v1.37.0%2Bk3s1/k3s-airgap-images-arm64.tar.zst",
|
||||
"sha256": "b3bd28d3a20144927b25ebb1d255a16ce55bb050b9af5e63abd1bf91c0838fe5"
|
||||
}
|
||||
}
|
||||
21
pkgs/applications/networking/cluster/k3s/1_37/versions.nix
Normal file
21
pkgs/applications/networking/cluster/k3s/1_37/versions.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
k3sVersion = "1.37.0+k3s1";
|
||||
k3sCommit = "bb7cf0657bafdfbb4349d1740810442d09c2248a";
|
||||
k3sRepoSha256 = "0glzg974w7f0jdaljr9bxw36qv53chii25rjbrvlbzlyzjq19wws";
|
||||
k3sVendorHash = "sha256-AObmRWcIyFDy1aTA66LLFYnnUQzpf6+Ts6HQRA3i26A=";
|
||||
chartVersions = import ./chart-versions.nix;
|
||||
imagesVersions = builtins.fromJSON (builtins.readFile ./images-versions.json);
|
||||
k3sRootVersion = "0.15.2";
|
||||
k3sRootSha256 = "0yxq2jqqb7flm4rs9dl7fqxba3mmwkmjbc8rx7pgai4qa1lzyigy";
|
||||
k3sCNIVersion = "1.9.1-k3s1";
|
||||
k3sCNISha256 = "1ggaz0p1c2k94car9d89a05smz3zx32sxn197b1l5kmjcnzdwadh";
|
||||
containerdVersion = "2.3.4-k3s1";
|
||||
containerdSha256 = "18kci7drnlxkn4vk166jijavgwaml1vhlfqirhzljmb4g16ydrah";
|
||||
containerdPackage = "github.com/k3s-io/containerd/v2";
|
||||
criCtlVersion = "1.37.0-k3s1";
|
||||
flannelVersion = "v0.28.4";
|
||||
flannelPluginVersion = "v1.9.0-flannel1";
|
||||
kubeRouterVersion = "v2.6.3-k3s1";
|
||||
criDockerdVersion = "v0.3.19-k3s5";
|
||||
helmJobVersion = "v0.13.3-build20260727";
|
||||
}
|
||||
@@ -15,4 +15,5 @@ in
|
||||
k3s_1_34 = forVersions ./1_34/versions.nix;
|
||||
k3s_1_35 = forVersions ./1_35/versions.nix;
|
||||
k3s_1_36 = forVersions ./1_36/versions.nix;
|
||||
k3s_1_37 = forVersions ./1_37/versions.nix;
|
||||
}
|
||||
|
||||
@@ -670,13 +670,13 @@
|
||||
"vendorHash": "sha256-CwTlb0QTq0lpZK90IL6mBLoarFYFLsjiLYauGEaR1Rk="
|
||||
},
|
||||
"hashicorp_tfe": {
|
||||
"hash": "sha256-0cDJS89LsTuE2MJoNCnG8Xy7pJYisOggKrqQlK4OeAw=",
|
||||
"hash": "sha256-gEzX7Q/8OMNb3jOf7E9bph6qactFdZHmITr1l/I9kSc=",
|
||||
"homepage": "https://registry.terraform.io/providers/hashicorp/tfe",
|
||||
"owner": "hashicorp",
|
||||
"repo": "terraform-provider-tfe",
|
||||
"rev": "v0.80.0",
|
||||
"rev": "v0.81.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-O+UMVIed8JEwjaXGTewOY6Vk+MopCQSx+qyMvJW7bkI="
|
||||
"vendorHash": "sha256-hfSLa5MrrQ0JFZntykbU33TQnuAoYYFasOzUOzi1RV8="
|
||||
},
|
||||
"hashicorp_time": {
|
||||
"hash": "sha256-kdCdph+H3fWizMh+7AGBEscKpCwP7naj+3NSmPK25Us=",
|
||||
|
||||
@@ -11,15 +11,13 @@
|
||||
}:
|
||||
|
||||
let
|
||||
python = python3.override {
|
||||
self = python;
|
||||
packageOverrides = final: prev: {
|
||||
# The ast-serialize package, a dependency for mypy, depends on
|
||||
# fetchCargoVendor and is part of the bootstrap chain for requests.
|
||||
charset-normalizer = prev.charset-normalizer.override { withMypyc = false; };
|
||||
python3Packages = python3.pkgs // {
|
||||
# Break the requests -> charset-normalizer -> mypy -> ast-serialize ->
|
||||
# fetchCargoVendor bootstrap cycle without overriding the whole Python scope.
|
||||
requests = python3.pkgs.requests.override {
|
||||
charset-normalizer = python3.pkgs.charset-normalizer.override { withMypyc = false; };
|
||||
};
|
||||
};
|
||||
python3Packages = python.pkgs;
|
||||
|
||||
replaceWorkspaceValues = writers.writePython3Bin "replace-workspace-values" {
|
||||
libraries = with python3Packages; [
|
||||
|
||||
@@ -4,6 +4,12 @@
|
||||
fetchFromGitHub,
|
||||
fetchpatch,
|
||||
cmake,
|
||||
zlib,
|
||||
versionCheckHook,
|
||||
|
||||
withZlib ? false,
|
||||
withUnixSockets ? false,
|
||||
withWebSockets ? false,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
@@ -32,11 +38,18 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
];
|
||||
|
||||
strictDeps = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
doInstallCheck = true;
|
||||
nativeInstallCheckInputs = [ versionCheckHook ];
|
||||
versionCheckProgramArg = "-I";
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
];
|
||||
|
||||
buildInputs = lib.optional withZlib zlib;
|
||||
|
||||
# The existence of the "build" script causes `mkdir -p build` to fail:
|
||||
# mkdir: cannot create directory 'build': File exists
|
||||
preConfigure = ''
|
||||
@@ -60,12 +73,22 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
# Workaround CMake 4 compat
|
||||
(lib.cmakeFeature "CMAKE_POLICY_VERSION_MINIMUM" "3.5")
|
||||
];
|
||||
|
||||
(lib.cmakeBool "CIVETWEB_ENABLE_WEBSOCKETS" withWebSockets)
|
||||
|
||||
(lib.cmakeBool "CIVETWEB_ENABLE_ZLIB" withZlib)
|
||||
]
|
||||
|
||||
# Support for listening for HTTP requests on a Unix domain socket.
|
||||
++ lib.optional withUnixSockets "-DCMAKE_C_FLAGS=-DUSE_X_DOM_SOCKET";
|
||||
# NOTE Once 1.17 is released, we can use a CMake flag:
|
||||
# (lib.cmakeBool "CIVETWEB_ENABLE_X_DOM_SOCKET" withUnixSockets)
|
||||
|
||||
meta = {
|
||||
description = "Embedded C/C++ web server";
|
||||
mainProgram = "civetweb";
|
||||
homepage = "https://github.com/civetweb/civetweb";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ jlesquembre ];
|
||||
};
|
||||
})
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
fetchFromGitHub,
|
||||
nix-update-script,
|
||||
versionCheckHook,
|
||||
nixosTests,
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
@@ -28,7 +29,10 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
nativeInstallCheckInputs = [ versionCheckHook ];
|
||||
versionCheckProgramArg = "--version";
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
passthru = {
|
||||
updateScript = nix-update-script { };
|
||||
tests.nixos = nixosTests.docuum;
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Least recently used (LRU) eviction of Docker images";
|
||||
|
||||
@@ -12,13 +12,13 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
# Since then, `dust` has been freed up, allowing this package to take that attribute.
|
||||
# However in order for tools like `nix-env` to detect package updates, keep `du-dust` for pname.
|
||||
pname = "du-dust";
|
||||
version = "1.2.5";
|
||||
version = "1.2.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bootandy";
|
||||
repo = "dust";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-tK7cAckvRmWcaDTd92+XccswKHLAr4r8IzYYzcZYu/g=";
|
||||
hash = "sha256-BHlasERvwS/mr6EUfgItvrL/oozFta4/XwwI3hYyMGo=";
|
||||
# Remove unicode file names which leads to different checksums on HFS+
|
||||
# vs. other filesystems because of unicode normalisation.
|
||||
postFetch = ''
|
||||
@@ -26,7 +26,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
'';
|
||||
};
|
||||
|
||||
cargoHash = "sha256-KQPCRQLTmltoJTgbA3ri5U/w+JJb/J+iclK7Mcb4hfU=";
|
||||
cargoHash = "sha256-oIR10K/vn9sexW+m9vOuGJDqXRk2gjB0WoPj71cT+eg=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "exa-agent-skills";
|
||||
version = "2026.09.11-e7de871";
|
||||
version = "2026.09.16-73cc4b0";
|
||||
|
||||
strictDeps = true;
|
||||
__structuredAttrs = true;
|
||||
@@ -16,7 +16,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
owner = "exa-labs";
|
||||
repo = "agent-skills";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-v8iHcDvKe7Ls1P7V0izJneyo3vYyW4dSzgUdmWeAP7o=";
|
||||
hash = "sha256-cQMUDaHTHgwMjq1P6pMdulhADNAO78S+9WuyA7kssrg=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ installAgentSkills ];
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "ggml";
|
||||
version = "0.23.0";
|
||||
version = "0.24.0";
|
||||
|
||||
__structuredAttrs = true;
|
||||
strictDeps = true;
|
||||
@@ -16,7 +16,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
owner = "ggml-org";
|
||||
repo = "ggml";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-QArqnQ5//Ft9Knm1Caqz68t4ikNQnk+O+OZUTfZlVCk=";
|
||||
hash = "sha256-wSI0GnSFoMyBKuzIrelURzaIaSIS/eIAwG4etmy9XUo=";
|
||||
};
|
||||
|
||||
# The cmake package does not handle absolute CMAKE_INSTALL_LIBDIR and CMAKE_INSTALL_INCLUDEDIR
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
libGL,
|
||||
stdenv,
|
||||
fetchurl,
|
||||
undmg,
|
||||
dpkg,
|
||||
autoPatchelfHook,
|
||||
wrapGAppsHook3,
|
||||
alsa-lib,
|
||||
at-spi2-atk,
|
||||
gdk-pixbuf,
|
||||
nss,
|
||||
udev,
|
||||
gnome-keyring,
|
||||
libgbm,
|
||||
gtk3,
|
||||
libusb1,
|
||||
libsecret,
|
||||
libappindicator,
|
||||
xdotool,
|
||||
libx11,
|
||||
libxcomposite,
|
||||
libxext,
|
||||
libxrandr,
|
||||
libxscrnsaver,
|
||||
libxtst,
|
||||
libxshmfence,
|
||||
}:
|
||||
let
|
||||
pname = "keeweb";
|
||||
version = "1.18.7";
|
||||
|
||||
srcs = {
|
||||
x86_64-linux = fetchurl {
|
||||
url = "https://github.com/keeweb/keeweb/releases/download/v${version}/KeeWeb-${version}.linux.x64.deb";
|
||||
hash = "sha256-/U+vn5TLIU9/J6cRFjuAdyGzlwC04mp4L2X2ETp+ZSE=";
|
||||
};
|
||||
aarch64-darwin = fetchurl {
|
||||
url = "https://github.com/keeweb/keeweb/releases/download/v${version}/KeeWeb-${version}.mac.arm64.dmg";
|
||||
hash = "sha256-bkhwsWYLkec16vMOfXUce7jfrmI9W2xHiZvU1asebK4=";
|
||||
};
|
||||
};
|
||||
src =
|
||||
srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
|
||||
|
||||
libraries = [
|
||||
alsa-lib
|
||||
at-spi2-atk
|
||||
gdk-pixbuf
|
||||
libGL
|
||||
nss
|
||||
udev
|
||||
libx11
|
||||
libxcomposite
|
||||
libxext
|
||||
libxrandr
|
||||
libxscrnsaver
|
||||
libxtst
|
||||
libxshmfence
|
||||
gnome-keyring
|
||||
libgbm
|
||||
gtk3
|
||||
libusb1
|
||||
libsecret
|
||||
libappindicator
|
||||
xdotool
|
||||
];
|
||||
|
||||
meta = {
|
||||
description = "Free cross-platform password manager compatible with KeePass";
|
||||
mainProgram = "keeweb";
|
||||
homepage = "https://keeweb.info/";
|
||||
changelog = "https://github.com/keeweb/keeweb/blob/v${version}/release-notes.md";
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ sikmir ];
|
||||
platforms = builtins.attrNames srcs;
|
||||
knownVulnerabilities = [
|
||||
"Uses Electron 12, EOL on November 16 2012. Has many known CVEs"
|
||||
];
|
||||
};
|
||||
in
|
||||
if stdenv.hostPlatform.isDarwin then
|
||||
stdenv.mkDerivation {
|
||||
inherit
|
||||
pname
|
||||
version
|
||||
src
|
||||
meta
|
||||
;
|
||||
|
||||
nativeBuildInputs = [ undmg ];
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/Applications
|
||||
cp -r *.app $out/Applications
|
||||
'';
|
||||
}
|
||||
else
|
||||
stdenv.mkDerivation {
|
||||
inherit
|
||||
pname
|
||||
version
|
||||
src
|
||||
meta
|
||||
;
|
||||
|
||||
nativeBuildInputs = [
|
||||
autoPatchelfHook
|
||||
wrapGAppsHook3
|
||||
dpkg
|
||||
];
|
||||
|
||||
buildInputs = libraries;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/bin
|
||||
cp -r usr/share $out/share
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
makeWrapper $out/share/keeweb-desktop/keeweb $out/bin/keeweb \
|
||||
--argv0 "keeweb" \
|
||||
--add-flags "$out/share/keeweb-desktop/resources/app.asar" \
|
||||
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath libraries}" \
|
||||
''${gappsWrapperArgs[@]}
|
||||
'';
|
||||
}
|
||||
@@ -5,13 +5,13 @@
|
||||
}:
|
||||
mkLibretroCore {
|
||||
core = "genesis-plus-gx";
|
||||
version = "0-unstable-2026-08-28";
|
||||
version = "0-unstable-2026-09-12";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "Genesis-Plus-GX";
|
||||
rev = "a7985a9c4278ac352f8ca7bb4d3cc6b36e9e3e7d";
|
||||
hash = "sha256-uG4bGYsl4ZisaO7ICg/QdLv6CfV5cB4T56MMpLuu9QQ=";
|
||||
rev = "c2838c7dc4236fc2fe94e5dbd08b41486067918e";
|
||||
hash = "sha256-sqic7mFeuhmW8fPB2WaEE1CJxSxB0pgFzoWX+DPirqM=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -17,17 +17,17 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "matrix-continuwuity";
|
||||
version = "26.8.1";
|
||||
version = "26.9.0";
|
||||
|
||||
src = fetchFromGitea {
|
||||
domain = "forgejo.ellis.link";
|
||||
owner = "continuwuation";
|
||||
repo = "continuwuity";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-slwfK5aEIFjIue01L4nVUHaLx/2j3nRKrmkNkfPPZXE=";
|
||||
hash = "sha256-w/sFqEbvzNTbvR8eTeVT0qo/t0p/vlQUna1bPOqJs7E=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-s87vdh+5rMNIXDWt2dZZvqSY9dJzEHuvEhJLG1HvphY=";
|
||||
cargoHash = "sha256-ubIQNgn/FM++WkmnfDOVUpxfBCElIYJxvNMipwXbmIc=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
|
||||
@@ -29,14 +29,15 @@
|
||||
undmg,
|
||||
makeWrapper,
|
||||
libpulseaudio,
|
||||
pipewire,
|
||||
}:
|
||||
let
|
||||
pname = "nextcloud-talk-desktop";
|
||||
version = "2.2.3"; # Ensure both hashes (Linux and Darwin) are updated!
|
||||
version = "2.2.4"; # Ensure both hashes (Linux and Darwin) are updated!
|
||||
|
||||
hashes = {
|
||||
linux = "sha256-6YoAlMGKPeSJoXd211cufdE/XgroojH3djwaSEwlBjs=";
|
||||
darwin = "sha256-BpyVJXyCYC1qH4ecDobHBVLLTeVDx/MPWBsnXgrnKhE=";
|
||||
linux = "sha256-veIuQqxLxhvJuezJ1dL0+ranMrf9p3YEJ2hFhzuZj0I=";
|
||||
darwin = "sha256-YLD4adfWlRRndQMjSXxERK1aCjLUVq0YoV9bJyu+0BA=";
|
||||
};
|
||||
|
||||
# Only x86_64-linux is supported with Darwin support being universal
|
||||
@@ -113,6 +114,9 @@ let
|
||||
|
||||
# Fixes input/output audio device selection
|
||||
libpulseaudio
|
||||
|
||||
# Electron dynamically loads PipeWire for Wayland screen sharing.
|
||||
pipewire
|
||||
];
|
||||
|
||||
desktopItems = [
|
||||
|
||||
@@ -11,7 +11,7 @@ from typing import Any, Callable, ClassVar, Generic, NamedTuple, cast, get_args
|
||||
|
||||
from markdown_it.token import Token
|
||||
|
||||
from . import md, options
|
||||
from . import md, nixdoc, options
|
||||
from .html import HTMLRenderer, UnresolvedXrefError
|
||||
from .manual_structure import (
|
||||
FragmentType,
|
||||
@@ -637,7 +637,16 @@ class ConfigGroup:
|
||||
# id-prefix can only be set on a group, matching the legacy "includes" behavior
|
||||
id_prefix: str | None = None
|
||||
|
||||
ConfigNode = ConfigLeaf | ConfigGroup
|
||||
# a collection expands to one page per group found in a generated data file.
|
||||
# 'nixdoc' renders a nixdoc manifest-mode export, other types may follow.
|
||||
COLLECTION_TYPES = ('nixdoc',)
|
||||
|
||||
@dataclass
|
||||
class ConfigCollection:
|
||||
collection: str
|
||||
type: str
|
||||
|
||||
ConfigNode = ConfigLeaf | ConfigGroup | ConfigCollection
|
||||
|
||||
@dataclass
|
||||
class ConfigManifest:
|
||||
@@ -720,12 +729,26 @@ class HTMLConverter(BaseConverter[ManualHTMLRenderer]):
|
||||
id_prefix = item.get('id-prefix')
|
||||
if id_prefix is not None and (not isinstance(id_prefix, str)):
|
||||
raise SrcError(src=src, description=f"{where}: 'id-prefix' must be a string when being set")
|
||||
has_file, has_children = 'file' in item, 'children' in item
|
||||
if has_file == has_children:
|
||||
kinds = [k for k in ('file', 'children', 'collection') if k in item]
|
||||
if len(kinds) != 1:
|
||||
raise SrcError(
|
||||
src=src,
|
||||
description=f"{where}: must have exactly one of 'file' or 'children'")
|
||||
if has_file:
|
||||
description=f"{where}: must have exactly one of 'file', 'children' or 'collection'")
|
||||
if kinds[0] == 'collection':
|
||||
if not isinstance(item['collection'], str):
|
||||
raise SrcError(src=src, description=f"{where}: 'collection' must be a string")
|
||||
typ = item.get('type')
|
||||
if typ not in COLLECTION_TYPES:
|
||||
raise SrcError(
|
||||
src=src,
|
||||
description=f"{where}: 'type' must be one of {list(COLLECTION_TYPES)}, got {typ!r}")
|
||||
# a collection expands to many pages, so a single label or prefix cannot apply
|
||||
if label is not None or id_prefix is not None:
|
||||
raise SrcError(
|
||||
src=src,
|
||||
description=f"{where}: a collection accepts neither 'label' nor 'id-prefix'")
|
||||
return ConfigCollection(collection=item['collection'], type=typ)
|
||||
if kinds[0] == '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, id_prefix=id_prefix)
|
||||
@@ -750,13 +773,20 @@ class HTMLConverter(BaseConverter[ManualHTMLRenderer]):
|
||||
tokens[6:6] = [include]
|
||||
|
||||
def _build_config_include(self, nodes: list[ConfigNode], config_file: Path, id_prefix: str | None = None) -> Token:
|
||||
included = [self._build_config_item(node, config_file, id_prefix) for node in nodes]
|
||||
included: list[tuple[list[Token], Path]] = []
|
||||
for node in nodes:
|
||||
included += self._build_config_item(node, config_file, id_prefix)
|
||||
token = Token('included_page', '', 0, map=[0, 1])
|
||||
token.meta['included'] = included
|
||||
token.meta['include-args'] = {}
|
||||
return token
|
||||
|
||||
def _build_config_item(self, node: ConfigNode, config_file: Path, id_prefix: str | None = None) -> tuple[list[Token], Path]:
|
||||
# one node may expand to several pages, so this returns a list of fragments
|
||||
def _build_config_item(self, node: ConfigNode, config_file: Path,
|
||||
id_prefix: str | None = None) -> list[tuple[list[Token], Path]]:
|
||||
if isinstance(node, ConfigCollection):
|
||||
return self._build_config_collection(node, config_file)
|
||||
|
||||
if isinstance(node, ConfigLeaf):
|
||||
path = (config_file.parent / node.file).resolve()
|
||||
leaf_src = path.read_text()
|
||||
@@ -772,7 +802,7 @@ class HTMLConverter(BaseConverter[ManualHTMLRenderer]):
|
||||
self._base_paths.pop()
|
||||
if node.label is not None:
|
||||
fragment[1].meta['toc-label'] = node.label
|
||||
return fragment, path
|
||||
return [(fragment, path)]
|
||||
|
||||
# TocEntry._collect_entries reads nav-label and nav-id.
|
||||
# it builds the sidebar group from them.
|
||||
@@ -785,7 +815,25 @@ class HTMLConverter(BaseConverter[ManualHTMLRenderer]):
|
||||
if node.id is not None:
|
||||
group.meta['nav-id'] = node.id
|
||||
|
||||
return [group], config_file
|
||||
return [([group], config_file)]
|
||||
|
||||
def _build_config_collection(self, node: ConfigCollection,
|
||||
config_file: Path) -> list[tuple[list[Token], Path]]:
|
||||
path = (config_file.parent / node.collection).resolve()
|
||||
try:
|
||||
assert node.type == 'nixdoc', f"unhandled collection type {node.type!r}"
|
||||
sections = nixdoc.render_sections(json.loads(path.read_text()), self._revision)
|
||||
except (OSError, json.JSONDecodeError, nixdoc.NixdocExportError) as e:
|
||||
raise RuntimeError(f"processing {node.type} collection {path}") from e
|
||||
# the export file is the only "location" we can report errors against
|
||||
self._base_paths.append(path)
|
||||
self._current_type.append('page')
|
||||
try:
|
||||
return [(self._parse(src, auto_id_prefix=f"auto-generated-{group_id}"), path)
|
||||
for group_id, src in sections]
|
||||
finally:
|
||||
self._current_type.pop()
|
||||
self._base_paths.pop()
|
||||
|
||||
def _parse(self, src: str, *, auto_id_prefix: None | str = None) -> list[Token]:
|
||||
tokens = super()._parse(src,auto_id_prefix=auto_id_prefix)
|
||||
@@ -975,7 +1023,11 @@ def _build_cli_html(p: argparse.ArgumentParser) -> None:
|
||||
p.add_argument('--sidebar-depth', default=2, type=int)
|
||||
p.add_argument('--experimental-config', type=Path, help="""
|
||||
JSON file of the following form
|
||||
{ items: [ { file, label? } | { label, children: [...], id? } ], open: [ id, ... ] }
|
||||
{ items: [ { file, label? } | { label, children: [...], id? } | { collection, type } ],
|
||||
open: [ id, ... ] }
|
||||
|
||||
A collection reads a generated data file and expands to one page per group in it.
|
||||
'type' selects the renderer; only 'nixdoc' exists so far.
|
||||
|
||||
Files added through this flag prepend '--infile'
|
||||
|
||||
|
||||
@@ -0,0 +1,179 @@
|
||||
# Render a nixdoc export v1 collection
|
||||
#
|
||||
# Takes json of v1 export schema
|
||||
# https://github.com/nix-community/nixdoc/blob/554a2e2676548f58f85d76b69308447a4e60450d/src/export.rs#L101
|
||||
#
|
||||
# Returns a commonmark flavour that nixos-render-docs can process
|
||||
#
|
||||
|
||||
import re
|
||||
from typing import Any, NamedTuple
|
||||
|
||||
# html anchors only allow certain anchors
|
||||
_ANCHOR_HOSTILE = re.compile(r"[^A-Za-z0-9._-]")
|
||||
|
||||
def _anchor_id(s: str) -> str:
|
||||
return _ANCHOR_HOSTILE.sub("", s)
|
||||
|
||||
_SCHEMA_VERSION = 1
|
||||
|
||||
|
||||
class NixdocExportError(Exception):
|
||||
pass
|
||||
|
||||
class Source(NamedTuple):
|
||||
file: str
|
||||
line: int
|
||||
|
||||
|
||||
class Group(NamedTuple):
|
||||
id: str
|
||||
description: str
|
||||
|
||||
|
||||
class Entry(NamedTuple):
|
||||
id: str
|
||||
attr_path: str
|
||||
groups: list[str]
|
||||
description: str
|
||||
source: Source
|
||||
|
||||
|
||||
class Export(NamedTuple):
|
||||
groups: list[Group]
|
||||
entries: list[Entry]
|
||||
|
||||
|
||||
def _require(obj: dict[str, Any], key: str, ctx: str) -> Any:
|
||||
try:
|
||||
return obj[key]
|
||||
except (KeyError, TypeError) as e:
|
||||
raise NixdocExportError(f"{ctx}: missing required field {key!r}") from e
|
||||
|
||||
|
||||
def _parse_group(raw: dict[str, Any]) -> Group:
|
||||
group_id = _require(raw, "id", "group")
|
||||
return Group(id=group_id, description=(raw.get("description") or "").strip())
|
||||
|
||||
|
||||
def _parse_entry(raw: dict[str, Any]) -> Entry:
|
||||
entry_id = _require(raw, "id", "entry")
|
||||
ctx = f"entry {entry_id!r}"
|
||||
source = _require(raw, "source", ctx)
|
||||
return Entry(
|
||||
id=entry_id,
|
||||
attr_path=_require(raw, "attrPath", ctx),
|
||||
groups=_require(raw, "groups", ctx),
|
||||
description=_require(raw, "description", ctx),
|
||||
source=Source(file=_require(source, "file", ctx), line=_require(source, "line", ctx)),
|
||||
)
|
||||
|
||||
|
||||
def parse_export(data: dict[str, Any]) -> Export:
|
||||
schema = data.get("schemaVersion") if isinstance(data, dict) else None
|
||||
if schema != _SCHEMA_VERSION:
|
||||
raise NixdocExportError(
|
||||
f"unsupported nixdoc export schemaVersion {schema!r}; "
|
||||
f"this renderer supports version {_SCHEMA_VERSION}"
|
||||
)
|
||||
return Export(
|
||||
groups=[_parse_group(g) for g in _require(data, "groups", "export")],
|
||||
entries=[_parse_entry(e) for e in _require(data, "entries", "export")],
|
||||
)
|
||||
|
||||
|
||||
def _trim_leading_whitespace(line: str, max_count: int) -> str:
|
||||
count = 0
|
||||
i = 0
|
||||
for ch in line:
|
||||
if ch.isspace() and count < max_count:
|
||||
count += 1
|
||||
i += 1
|
||||
else:
|
||||
break
|
||||
return line[i:]
|
||||
|
||||
|
||||
def _get_fence(line: str, allow_info: bool) -> tuple[int, str] | None:
|
||||
if not line:
|
||||
return None
|
||||
first = line[0]
|
||||
if first not in ('`', '~'):
|
||||
return None
|
||||
count = 1
|
||||
for ch in line[1:]:
|
||||
if ch == first:
|
||||
count += 1
|
||||
else:
|
||||
if not allow_info and ch != '\n':
|
||||
return None
|
||||
return (count, first)
|
||||
return (count, first)
|
||||
|
||||
|
||||
def _handle_heading(line: str, levels: int) -> str:
|
||||
hashes = 0
|
||||
for ch in line:
|
||||
if ch == '#':
|
||||
hashes += 1
|
||||
else:
|
||||
break
|
||||
rest = line[hashes:]
|
||||
new_hashes = min(hashes + levels, 6)
|
||||
return f"{'#' * new_hashes}{rest}"
|
||||
|
||||
|
||||
def shift_headings(text: str, levels: int) -> str:
|
||||
result: list[str] = []
|
||||
curr_fence: tuple[int, str] | None = None
|
||||
for raw_line in text.splitlines(keepends=True):
|
||||
line = _trim_leading_whitespace(raw_line, 3)
|
||||
if line.startswith("```") or line.startswith("~~~"):
|
||||
if curr_fence is None:
|
||||
curr_fence = _get_fence(line, True)
|
||||
else:
|
||||
end = _get_fence(line, False)
|
||||
if end is not None:
|
||||
start_count, start_char = curr_fence
|
||||
end_count, end_char = end
|
||||
if start_char == end_char and start_count <= end_count:
|
||||
curr_fence = None
|
||||
|
||||
if curr_fence is None and line.startswith('#'):
|
||||
result.append(_handle_heading(line, levels))
|
||||
else:
|
||||
result.append(raw_line)
|
||||
return "".join(result)
|
||||
|
||||
|
||||
def _located_at(source: Source, revision: str) -> str:
|
||||
url = f"https://github.com/NixOS/nixpkgs/blob/{revision}/{source.file}#L{source.line}"
|
||||
return f"Located at [{source.file}:{source.line}]({url}) in `<nixpkgs>`."
|
||||
|
||||
|
||||
def render_group(group: Group, entries: list[Entry], revision: str) -> str:
|
||||
parts = [f"# {group.id} {{#sec-functions-library-{_anchor_id(group.id)}}}\n"]
|
||||
if group.description:
|
||||
parts.append(shift_headings(group.description, 1) + "\n")
|
||||
|
||||
for entry in entries:
|
||||
parts.append(f"## `{entry.attr_path}` {{#function-library-{_anchor_id(entry.id)}}}\n")
|
||||
body = shift_headings(entry.description.strip(), 2)
|
||||
if body:
|
||||
parts.append(body + "\n")
|
||||
parts.append(_located_at(entry.source, revision) + "\n")
|
||||
|
||||
return "\n".join(parts)
|
||||
|
||||
|
||||
def render_sections(data: dict[str, Any], revision: str) -> list[tuple[str, str]]:
|
||||
export = parse_export(data)
|
||||
by_group: dict[str, list[Entry]] = {group.id: [] for group in export.groups}
|
||||
for entry in export.entries:
|
||||
for group_id in entry.groups:
|
||||
if group_id in by_group:
|
||||
by_group[group_id].append(entry)
|
||||
return [
|
||||
(group.id, render_group(group, by_group[group.id], revision))
|
||||
for group in export.groups
|
||||
]
|
||||
@@ -518,3 +518,115 @@ def test_config_id_prefix_fails(tmp_path: Path) -> None:
|
||||
{"asserts.md": _NIXDOC_SNIPPET1},
|
||||
)
|
||||
assert "heading does not have an id" in str(excinfo.value.__cause__)
|
||||
|
||||
|
||||
_NIXDOC_EXPORT = {
|
||||
"schemaVersion": 1,
|
||||
"groups": [
|
||||
{"id": "asserts", "description": "assertion functions"},
|
||||
{"id": "attrsets", "description": "attribute set functions"},
|
||||
],
|
||||
"entries": [
|
||||
{
|
||||
"id": "lib.asserts.assertMsg",
|
||||
"attrPath": "lib.asserts.assertMsg",
|
||||
"description": "Throw if pred is false.\n\n# Inputs\n\n`pred`\n",
|
||||
"groups": ["asserts"],
|
||||
"source": {"file": "lib/asserts.nix", "line": 21},
|
||||
},
|
||||
{
|
||||
"id": "lib.attrsets.mapAttrs-prime",
|
||||
"attrPath": "lib.attrsets.mapAttrs'",
|
||||
"description": "Maps over attrs.",
|
||||
"groups": ["attrsets"],
|
||||
"source": {"file": "lib/attrsets.nix", "line": 42},
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def _render_with_collection(tmp_path: Path, export: object, **kwargs: object) -> str:
|
||||
return _render_with_config(
|
||||
tmp_path,
|
||||
{"items": [{"collection": "lib-functions.json", "type": "nixdoc"}]},
|
||||
{"lib-functions.json": json.dumps(export)},
|
||||
**kwargs, # type: ignore[arg-type]
|
||||
)
|
||||
|
||||
|
||||
def test_config_collection_renders_one_page_per_group(tmp_path: Path) -> None:
|
||||
html = _render_with_collection(tmp_path, _NIXDOC_EXPORT)
|
||||
# groups become pages, so their headings sit at the level of a config leaf
|
||||
assert '<h2 id="sec-functions-library-asserts" class="title"' in html
|
||||
assert '<h2 id="sec-functions-library-attrsets" class="title"' in html
|
||||
assert "assertion functions" in html
|
||||
# entries nest below their group
|
||||
assert '<h3 id="function-library-lib.asserts.assertMsg" class="title"' in html
|
||||
assert '<h3 id="function-library-lib.attrsets.mapAttrs-prime" class="title"' in html
|
||||
assert "lib.attrsets.mapAttrs'" in html
|
||||
|
||||
|
||||
def test_config_collection_keeps_group_order(tmp_path: Path) -> None:
|
||||
html = _render_with_collection(tmp_path, _NIXDOC_EXPORT)
|
||||
ids = [id for id in _heading_ids(html) if id.startswith("sec-functions-library-")]
|
||||
assert ids == ["sec-functions-library-asserts", "sec-functions-library-attrsets"]
|
||||
|
||||
|
||||
def test_config_collection_pages_are_sidebar_siblings(tmp_path: Path) -> None:
|
||||
html = _render_with_collection(tmp_path, _NIXDOC_EXPORT)
|
||||
assert 'href="#sec-functions-library-asserts"' in html
|
||||
assert 'href="#sec-functions-library-attrsets"' in html
|
||||
|
||||
|
||||
def test_config_collection_prefixes_generated_ids_per_group(tmp_path: Path) -> None:
|
||||
html = _render_with_collection(tmp_path, _NIXDOC_EXPORT)
|
||||
# '# Inputs' in the doc comment has no authored anchor, so it gets one
|
||||
generated = [id for id in _heading_ids(html) if id.startswith("auto-generated-")]
|
||||
assert generated and all(id.startswith("auto-generated-asserts-") for id in generated)
|
||||
|
||||
|
||||
def test_config_collection_links_source_to_revision(tmp_path: Path) -> None:
|
||||
html = _render_with_collection(tmp_path, _NIXDOC_EXPORT)
|
||||
assert 'href="https://github.com/NixOS/nixpkgs/blob/1.0.0/lib/asserts.nix#L21"' in html
|
||||
|
||||
|
||||
def test_config_collection_renders_before_manual(tmp_path: Path) -> None:
|
||||
html = _render_with_collection(tmp_path, _NIXDOC_EXPORT)
|
||||
assert html.index("assertion functions") < html.index("Manual body.")
|
||||
|
||||
|
||||
def test_config_collection_rejects_unknown_type(tmp_path: Path) -> None:
|
||||
with pytest.raises(RuntimeError) as excinfo:
|
||||
_render_with_config(
|
||||
tmp_path,
|
||||
{"items": [{"collection": "lib-functions.json", "type": "options"}]},
|
||||
{"lib-functions.json": json.dumps(_NIXDOC_EXPORT)},
|
||||
)
|
||||
assert "'type' must be one of ['nixdoc']" in str(excinfo.value.__cause__)
|
||||
|
||||
|
||||
def test_config_collection_rejects_label_and_id_prefix(tmp_path: Path) -> None:
|
||||
for extra in ({"label": "Library"}, {"id-prefix": "auto-generated"}):
|
||||
with pytest.raises(RuntimeError) as excinfo:
|
||||
_render_with_config(
|
||||
tmp_path,
|
||||
{"items": [{"collection": "lib-functions.json", "type": "nixdoc"} | extra]},
|
||||
{"lib-functions.json": json.dumps(_NIXDOC_EXPORT)},
|
||||
)
|
||||
assert "neither 'label' nor 'id-prefix'" in str(excinfo.value.__cause__)
|
||||
|
||||
|
||||
def test_config_collection_excludes_file_and_children(tmp_path: Path) -> None:
|
||||
with pytest.raises(RuntimeError) as excinfo:
|
||||
_render_with_config(
|
||||
tmp_path,
|
||||
{"items": [{"collection": "lib-functions.json", "type": "nixdoc", "file": "x.md"}]},
|
||||
{"x.md": "# X {#x}\n\nB.\n"},
|
||||
)
|
||||
assert "exactly one of 'file', 'children' or 'collection'" in str(excinfo.value.__cause__)
|
||||
|
||||
|
||||
def test_config_collection_rejects_unsupported_export(tmp_path: Path) -> None:
|
||||
with pytest.raises(RuntimeError) as excinfo:
|
||||
_render_with_collection(tmp_path, _NIXDOC_EXPORT | {"schemaVersion": 2})
|
||||
assert "nixdoc collection" in str(excinfo.value.__cause__)
|
||||
|
||||
165
pkgs/by-name/ni/nixos-render-docs/src/tests/test_nixdoc.py
Normal file
165
pkgs/by-name/ni/nixos-render-docs/src/tests/test_nixdoc.py
Normal file
@@ -0,0 +1,165 @@
|
||||
import pytest
|
||||
|
||||
from nixos_render_docs import nixdoc
|
||||
|
||||
|
||||
def test_shift_headings_basic() -> None:
|
||||
assert nixdoc.shift_headings("# H1", 2) == "### H1"
|
||||
assert nixdoc.shift_headings("## H2", 2) == "#### H2"
|
||||
|
||||
|
||||
def test_shift_headings_caps_at_h6() -> None:
|
||||
assert nixdoc.shift_headings("###### H6", 2) == "###### H6"
|
||||
assert nixdoc.shift_headings("##### H5", 2) == "###### H5"
|
||||
|
||||
|
||||
def test_shift_headings_preserves_multiline_and_endings() -> None:
|
||||
src = "# One\n\nbody\n\n## Two\n"
|
||||
assert nixdoc.shift_headings(src, 2) == "### One\n\nbody\n\n#### Two\n"
|
||||
|
||||
|
||||
def test_shift_headings_ignores_fenced_nix_comments() -> None:
|
||||
src = "# Real heading\n\n```nix\n# not a heading\nfoo = 1;\n```\n"
|
||||
out = nixdoc.shift_headings(src, 2)
|
||||
assert out == "### Real heading\n\n```nix\n# not a heading\nfoo = 1;\n```\n"
|
||||
|
||||
|
||||
def test_shift_headings_tilde_fence() -> None:
|
||||
src = "~~~\n# fenced\n~~~\n# heading\n"
|
||||
out = nixdoc.shift_headings(src, 2)
|
||||
assert out == "~~~\n# fenced\n~~~\n### heading\n"
|
||||
|
||||
|
||||
def test_shift_headings_indented_heading_shifted() -> None:
|
||||
# up to 3 leading spaces is still a heading
|
||||
assert nixdoc.shift_headings(" # H1", 2) == "### H1"
|
||||
|
||||
|
||||
def test_shift_headings_four_space_indent_not_a_heading() -> None:
|
||||
# 4+ spaces is an indented code block, not a heading
|
||||
assert nixdoc.shift_headings(" # code", 2) == " # code"
|
||||
|
||||
|
||||
_REVISION = "abc123revision"
|
||||
|
||||
|
||||
def _export() -> dict[str, object]:
|
||||
return {
|
||||
"schemaVersion": 1,
|
||||
"groups": [
|
||||
{"id": "strings", "description": "string manipulation functions"},
|
||||
{
|
||||
"id": "fileset",
|
||||
"description": (
|
||||
"[]{#sec-anchor-compat}\n\n"
|
||||
"Intro prose for the file set library.\n\n"
|
||||
"# Overview {#sec-fileset-overview}\n\n"
|
||||
"Some overview text.\n"
|
||||
),
|
||||
},
|
||||
],
|
||||
"entries": [
|
||||
{
|
||||
"id": "lib.attrsets.mapAttrs-prime",
|
||||
"attrPath": "lib.attrsets.mapAttrs'",
|
||||
"description": "Maps over attrs.\n\n# Example\n\n```nix\n# a comment\nmapAttrs' f s\n```\n",
|
||||
"groups": ["strings"],
|
||||
"source": {"file": "lib/attrsets.nix", "line": 42, "column": 3},
|
||||
},
|
||||
{
|
||||
"id": "lib.strings.optionalString",
|
||||
"attrPath": "lib.strings.optionalString",
|
||||
"description": "Return a string if a condition holds.",
|
||||
"groups": ["strings"],
|
||||
"source": {"file": "lib/strings.nix", "line": 238, "column": 3},
|
||||
},
|
||||
{
|
||||
"id": "lib.fileset.toSource",
|
||||
"attrPath": "lib.fileset.toSource",
|
||||
"description": "Add files to the store.",
|
||||
"groups": ["fileset"],
|
||||
"source": {"file": "lib/fileset/default.nix", "line": 10, "column": 3},
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def _sections() -> dict[str, str]:
|
||||
return dict(nixdoc.render_sections(_export(), _REVISION))
|
||||
|
||||
|
||||
def test_one_section_per_group_in_declared_order() -> None:
|
||||
sections = nixdoc.render_sections(_export(), _REVISION)
|
||||
assert [group_id for group_id, _src in sections] == ["strings", "fileset"]
|
||||
|
||||
|
||||
def test_group_heading_carries_anchor() -> None:
|
||||
assert _sections()["strings"].startswith(
|
||||
"# strings {#sec-functions-library-strings}\n")
|
||||
|
||||
|
||||
def test_group_description_headings_are_shifted() -> None:
|
||||
fileset = _sections()["fileset"]
|
||||
# authored anchors survive, the authored '# Overview' becomes a subheading
|
||||
assert "[]{#sec-anchor-compat}" in fileset
|
||||
assert "## Overview {#sec-fileset-overview}" in fileset
|
||||
|
||||
|
||||
def test_entry_heading_carries_attr_path_and_anchor() -> None:
|
||||
assert (
|
||||
"## `lib.strings.optionalString` {#function-library-lib.strings.optionalString}"
|
||||
in _sections()["strings"]
|
||||
)
|
||||
|
||||
|
||||
def test_entry_anchor_drops_characters_an_anchor_cannot_hold() -> None:
|
||||
# lib.trivial."or" is a real attribute. an unescaped quote would break the anchor
|
||||
# syntax and leak the literal '{#...}' into the heading text.
|
||||
export = _export()
|
||||
export["entries"] = [{
|
||||
"id": 'lib.trivial."or"',
|
||||
"attrPath": 'lib.trivial."or"',
|
||||
"description": "Boolean or.",
|
||||
"groups": ["strings"],
|
||||
"source": {"file": "lib/trivial.nix", "line": 212},
|
||||
}]
|
||||
section = dict(nixdoc.render_sections(export, _REVISION))["strings"]
|
||||
assert '## `lib.trivial."or"` {#function-library-lib.trivial.or}' in section
|
||||
|
||||
|
||||
def test_entry_description_headings_are_shifted_below_entry() -> None:
|
||||
# the entry heading is h2, so an authored '# Example' must land on h3
|
||||
assert "### Example" in _sections()["strings"]
|
||||
|
||||
|
||||
def test_fenced_nix_comment_is_not_shifted() -> None:
|
||||
assert "```nix\n# a comment\nmapAttrs' f s\n```" in _sections()["strings"]
|
||||
|
||||
|
||||
def test_entries_are_grouped_by_declared_group() -> None:
|
||||
sections = _sections()
|
||||
assert "lib.fileset.toSource" in sections["fileset"]
|
||||
assert "lib.fileset.toSource" not in sections["strings"]
|
||||
|
||||
|
||||
def test_located_at_links_to_the_revision() -> None:
|
||||
assert (
|
||||
"Located at [lib/strings.nix:238]"
|
||||
f"(https://github.com/NixOS/nixpkgs/blob/{_REVISION}/lib/strings.nix#L238)"
|
||||
" in `<nixpkgs>`."
|
||||
) in _sections()["strings"]
|
||||
|
||||
|
||||
def test_unsupported_schema_version_raises() -> None:
|
||||
export = _export() | {"schemaVersion": 2}
|
||||
with pytest.raises(nixdoc.NixdocExportError) as excinfo:
|
||||
nixdoc.render_sections(export, _REVISION)
|
||||
assert "schemaVersion 2" in str(excinfo.value)
|
||||
|
||||
|
||||
def test_missing_required_field_raises() -> None:
|
||||
export = _export()
|
||||
del export["entries"][0]["attrPath"] # type: ignore[index]
|
||||
with pytest.raises(nixdoc.NixdocExportError) as excinfo:
|
||||
nixdoc.render_sections(export, _REVISION)
|
||||
assert "missing required field 'attrPath'" in str(excinfo.value)
|
||||
69
pkgs/by-name/po/porting-advisor-for-graviton/package.nix
Normal file
69
pkgs/by-name/po/porting-advisor-for-graviton/package.nix
Normal file
@@ -0,0 +1,69 @@
|
||||
{
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
python3,
|
||||
versionCheckHook,
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (python3.pkgs)
|
||||
buildPythonApplication
|
||||
jinja2
|
||||
packaging
|
||||
progressbar33
|
||||
xlsxwriter
|
||||
;
|
||||
in
|
||||
buildPythonApplication (finalAttrs: {
|
||||
pname = "porting-advisor-for-graviton";
|
||||
version = "1.1.1";
|
||||
format = "other"; # Only has a requirements.txt
|
||||
|
||||
__structuredAttrs = true;
|
||||
strictDeps = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "aws";
|
||||
repo = "porting-advisor-for-graviton";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-73XZXy9hCRFGHGAxjThLE5mAptQZpr1G/t1v2Fx3Bpg=";
|
||||
};
|
||||
|
||||
dependencies = [
|
||||
jinja2
|
||||
packaging
|
||||
progressbar33
|
||||
xlsxwriter
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/bin
|
||||
cp src/porting-advisor.py $out/bin/porting-advisor-graviton
|
||||
chmod +x $out/bin/porting-advisor-graviton
|
||||
|
||||
# Install the advisor Python package
|
||||
mkdir -p $out/${python3.sitePackages}
|
||||
cp -r src/advisor $out/${python3.sitePackages}/
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
# This automatically wraps Python programs with the right environment
|
||||
postFixup = ''
|
||||
wrapPythonPrograms
|
||||
'';
|
||||
|
||||
nativeInstallCheckInputs = [ versionCheckHook ];
|
||||
|
||||
meta = {
|
||||
description = "AWS Porting Advisor for Graviton helps customers assess and prepare their applications for migration to AWS Graviton processors";
|
||||
homepage = "https://github.com/aws/porting-advisor-for-graviton";
|
||||
changelog = "https://github.com/aws/porting-advisor-for-graviton/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ jherland ];
|
||||
mainProgram = "porting-advisor-graviton";
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
})
|
||||
@@ -1,39 +1,91 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
buildNpmPackage,
|
||||
nodejs_22,
|
||||
fetchFromGitHub,
|
||||
nix-update-script,
|
||||
jq,
|
||||
git,
|
||||
ripgrep,
|
||||
pkg-config,
|
||||
glib,
|
||||
libsecret,
|
||||
versionCheckHook,
|
||||
clang_20,
|
||||
makeSetupHook,
|
||||
writeText,
|
||||
}:
|
||||
|
||||
let
|
||||
# https://github.com/numtide/llm-agents.nix/blob/main/packages/darwinOpenptyHook/package.nix
|
||||
darwinOpenptyHook =
|
||||
let
|
||||
header = writeText "darwin-openpty-shim.h" ''
|
||||
#ifndef DARWIN_OPENPTY_SHIM_H
|
||||
#define DARWIN_OPENPTY_SHIM_H
|
||||
/*
|
||||
* https://github.com/NixOS/nixpkgs/issues/457238
|
||||
*
|
||||
* macOS node-gyp builds sometimes see src/util.h from Node.js instead of
|
||||
* the SDK's util.h. That header does not declare openpty(3)/forkpty(3),
|
||||
* which causes node-pty (and other consumers) to fail to build. Including
|
||||
* this shim restores the missing declarations without depending on the
|
||||
* system header lookup.
|
||||
*/
|
||||
#include <sys/types.h>
|
||||
struct termios;
|
||||
struct winsize;
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
int openpty(int *, int *, char *, struct termios *, struct winsize *);
|
||||
pid_t forkpty(int *, char *, struct termios *, struct winsize *);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* DARWIN_OPENPTY_SHIM_H */
|
||||
'';
|
||||
hookScript = writeText "darwin-openpty-hook.sh" ''
|
||||
# shellcheck shell=bash
|
||||
if [ -z "''${darwinOpenptyHookApplied-}" ]; then
|
||||
export NIX_CFLAGS_COMPILE="''${NIX_CFLAGS_COMPILE-} -include ${header}"
|
||||
darwinOpenptyHookApplied=1
|
||||
fi
|
||||
'';
|
||||
in
|
||||
makeSetupHook {
|
||||
name = "darwin-openpty-hook";
|
||||
meta = {
|
||||
description = "Setup hook that injects openpty/forkpty prototypes on Darwin";
|
||||
platforms = lib.platforms.darwin;
|
||||
};
|
||||
passthru = {
|
||||
hideFromDocs = true;
|
||||
};
|
||||
} hookScript;
|
||||
in
|
||||
buildNpmPackage (finalAttrs: {
|
||||
pname = "qwen-code";
|
||||
version = "0.16.0";
|
||||
version = "0.23.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "QwenLM";
|
||||
repo = "qwen-code";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-XWhQ5GlAGW0WAyiPwBULLz1yQps2IdjVkusQ0a88tCs=";
|
||||
hash = "sha256-AWmZhul7/p1atYkLZd/pojGaO80gydGfx+mnSP9SHnY=";
|
||||
};
|
||||
|
||||
npmDepsFetcherVersion = 2;
|
||||
npmDepsHash = "sha256-2vr8Yspm6CCVnO6Jf8B3wiL6X+Tp6hZZEPr+WC/Dcak=";
|
||||
npmDepsHash = "sha256-tyLLtckMO/jFQHvdhHBWIE2Gx5vdHJBYHssVdq/abBU=";
|
||||
|
||||
# npm 11 incompatible with fetchNpmDeps
|
||||
# https://github.com/NixOS/nixpkgs/issues/474535
|
||||
nodejs = nodejs_22;
|
||||
makeCacheWritable = true;
|
||||
|
||||
nativeBuildInputs = [
|
||||
jq
|
||||
pkg-config
|
||||
git
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
clang_20 # Works around node-addon-api constant expression issue with clang 21+ (keytar)
|
||||
darwinOpenptyHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
@@ -42,48 +94,26 @@ buildNpmPackage (finalAttrs: {
|
||||
libsecret
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
# patches below remove node-pty and keytar dependencies which cause build fail on Darwin
|
||||
# should be conditional on platform but since package-lock.json is patched it changes its hash
|
||||
# though seems like these dependencies are not really required by the package
|
||||
${jq}/bin/jq '
|
||||
del(.packages."node_modules/node-pty") |
|
||||
del(.packages."node_modules/@lydell/node-pty") |
|
||||
del(.packages."node_modules/@lydell/node-pty-darwin-arm64") |
|
||||
del(.packages."node_modules/@lydell/node-pty-darwin-x64") |
|
||||
del(.packages."node_modules/@lydell/node-pty-linux-arm64") |
|
||||
del(.packages."node_modules/@lydell/node-pty-linux-x64") |
|
||||
del(.packages."node_modules/@lydell/node-pty-win32-arm64") |
|
||||
del(.packages."node_modules/@lydell/node-pty-win32-x64") |
|
||||
del(.packages."node_modules/keytar") |
|
||||
walk(
|
||||
if type == "object" and has("dependencies") then
|
||||
.dependencies |= with_entries(select(.key | (contains("node-pty") | not) and (contains("keytar") | not)))
|
||||
elif type == "object" and has("optionalDependencies") then
|
||||
.optionalDependencies |= with_entries(select(.key | (contains("node-pty") | not) and (contains("keytar") | not)))
|
||||
else .
|
||||
end
|
||||
) |
|
||||
walk(
|
||||
if type == "object" and has("peerDependencies") then
|
||||
.peerDependencies |= with_entries(select(.key | (contains("node-pty") | not) and (contains("keytar") | not)))
|
||||
else .
|
||||
end
|
||||
)
|
||||
' package-lock.json > package-lock.json.tmp && mv package-lock.json.tmp package-lock.json
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
# Build several internal packages first (required by main bundle)
|
||||
npm run build --workspace=@qwen-code/channel-base
|
||||
npm run build --workspace=@qwen-code/channel-telegram
|
||||
npm run build --workspace=@qwen-code/channel-weixin
|
||||
npm run build --workspace=@qwen-code/channel-dingtalk
|
||||
npm run build --workspace=@qwen-code/web-templates
|
||||
# Increase Node.js heap size on Darwin to prevent OOM during
|
||||
${lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||
export NODE_OPTIONS="--max-old-space-size=8192"
|
||||
''}
|
||||
|
||||
# npmConfigHook only patches the root node_modules. Workspaces with
|
||||
# nested .bin (web-shell's vite) keep /usr/bin/env otherwise.
|
||||
patchShebangs packages/*/node_modules
|
||||
|
||||
npm run generate
|
||||
|
||||
# The CLI esbuild bundle resolves imports against workspace dist/ output.
|
||||
# Use upstream's --cli-only build order so every workspace the bundle pulls
|
||||
# in (core, channels, acp-bridge, sdk-typescript, ...) is built, without
|
||||
# us having to track the dependency list by hand across releases.
|
||||
node scripts/build.js --cli-only
|
||||
|
||||
npm run bundle
|
||||
|
||||
runHook postBuild
|
||||
@@ -93,18 +123,32 @@ buildNpmPackage (finalAttrs: {
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/bin $out/share/qwen-code
|
||||
|
||||
cp -r dist/* $out/share/qwen-code/
|
||||
|
||||
# The bundled dist/cli.js has no shebang; upstream ships a bin wrapper
|
||||
# (scripts/cli-entry.js) that relaunches cli.js with node --expose-gc and
|
||||
# reads package.json for the reported version. Install both next to cli.js.
|
||||
cp scripts/cli-entry.js $out/share/qwen-code/cli-entry.js
|
||||
cp package.json $out/share/qwen-code/package.json
|
||||
|
||||
# Install production dependencies only
|
||||
npm prune --production
|
||||
cp -r node_modules $out/share/qwen-code/
|
||||
|
||||
# Remove broken symlinks that cause issues in Nix environment
|
||||
find $out/share/qwen-code/node_modules -type l -delete || true
|
||||
|
||||
patchShebangs $out/share/qwen-code
|
||||
ln -s $out/share/qwen-code/cli.js $out/bin/qwen
|
||||
|
||||
ln -s $out/share/qwen-code/cli-entry.js $out/bin/qwen
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
doInstallCheck = true;
|
||||
nativeInstallCheckInputs = [ versionCheckHook ];
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -10,16 +10,16 @@
|
||||
|
||||
buildNpmPackage (finalAttrs: {
|
||||
pname = "radicle-explorer";
|
||||
version = "0-unstable-2026-09-03";
|
||||
version = "0-unstable-2026-09-14";
|
||||
|
||||
src = fetchFromRadicle {
|
||||
seed = "seed.radicle.dev";
|
||||
repo = "z4V1sjrXqjvFdnCUbxPFqd5p4DtH5";
|
||||
rev = "fb11e4d9c2c758468b9dca5c615f2392fb011c6e";
|
||||
hash = "sha256-X8YRmyK8VyhmRMnKEiIhbiNyQ/fy4U9FgcIARDz+MfI=";
|
||||
rev = "f1ee718886061b90fac69c53000613eeccbab09f";
|
||||
hash = "sha256-BeZ5xtJVkoSXYggiT/tmJPUcPQoQMQg2FkCkuQvHZC0=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-m+md3XIjn4SpZ3vp5STDFAKU3QSs0maFUm3Ll5DLghc=";
|
||||
npmDepsHash = "sha256-Bwlrh4DivqWhxuHcbJGJtatsGRI0V8BwTT3RtqoJ7lU=";
|
||||
|
||||
preBuild = ''
|
||||
if [[ $configFile ]]; then
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "rusthound-ce";
|
||||
version = "2.5.9";
|
||||
version = "2.5.13";
|
||||
|
||||
src = fetchCrate {
|
||||
inherit (finalAttrs) pname version;
|
||||
hash = "sha256-VJFgUKsmOD0pt2GABeSufWBaE+3zr0q5bv2h7f6opNg=";
|
||||
hash = "sha256-YDW7tL37rKOm+PU98NhtimirVLla40dLx2VGOLfDVho=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-dHJawFfPnU80aocE1oHqdOzX48WgiIz+qknTq9Mt3Ks=";
|
||||
cargoHash = "sha256-5z7VBRua+plcMOf1kY8MxYKPbmKlo4yVEz8WzX6oVWA=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "src-cli";
|
||||
version = "7.6.0";
|
||||
version = "8.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "sourcegraph";
|
||||
repo = "src-cli";
|
||||
rev = version;
|
||||
hash = "sha256-a6F4r5pVJvkQUyUpmqwjyQKfU3KAx9S61+0hnodqlHk=";
|
||||
hash = "sha256-22UlYQxxtInPYgj4rsu07MvusjoW4BoqCW6fbgwQ9Lc=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-+phJFHid2ytXeLrvGMGTXplDAcN9YEDhRrO9ax/d8R8=";
|
||||
|
||||
@@ -19,14 +19,14 @@ assert selinuxSupport -> lib.meta.availableOn stdenv.hostPlatform libselinux;
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "uutils-coreutils";
|
||||
version = "0.11.0";
|
||||
version = "0.12.0";
|
||||
__structuredAttrs = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "uutils";
|
||||
repo = "coreutils";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-ghOUqC5U7L16k7mFxtgNeQssA/OU9MJ6fIK2G17QrhI=";
|
||||
hash = "sha256-/Zi7/vh8hwniMxa+keYjW7KBeq3Xg2rqDlqyN2GOZN4=";
|
||||
};
|
||||
|
||||
# error: linker `aarch64-linux-gnu-gcc` not found
|
||||
@@ -36,7 +36,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoVendor {
|
||||
inherit (finalAttrs) pname src version;
|
||||
hash = "sha256-b9J6BnwnM/4I5xUkkUPTPzTVfDQ+Cfc7KqTLuZpFvu0=";
|
||||
hash = "sha256-aLnQOXiQD9IL6ZiBi/ENF0aHud0kCyHZrnetkV+ZTFE=";
|
||||
};
|
||||
|
||||
buildInputs = lib.optionals selinuxSupport [
|
||||
|
||||
156
pkgs/by-name/va/vastai/package.nix
Normal file
156
pkgs/by-name/va/vastai/package.nix
Normal file
@@ -0,0 +1,156 @@
|
||||
{
|
||||
lib,
|
||||
python3Packages,
|
||||
fetchFromGitHub,
|
||||
fetchpatch2,
|
||||
|
||||
# wrapper
|
||||
openssh,
|
||||
rsync,
|
||||
|
||||
# tests
|
||||
versionCheckHook,
|
||||
writableTmpDirAsHomeHook,
|
||||
|
||||
# passthru
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
python3Packages.buildPythonApplication (finalAttrs: {
|
||||
pname = "vastai";
|
||||
version = "1.5.6";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "vast-ai";
|
||||
repo = "vast-cli";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-ovxFLPBPHJi/DMauS0Yuk9HWfcS+K/gJTAwPf/MLdoA=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
(fetchpatch2 {
|
||||
# Upstream credential hardening: https://github.com/vast-ai/vast-cli/pull/505
|
||||
url = "https://github.com/vast-ai/vast-cli/commit/0889fe32e5bf3228074436dd9688f6a1fdc649e8.patch";
|
||||
hash = "sha256-g3Nje1M1SnXK3eJ26XE13+/Wdg0pv63AKU5wbgZacMM=";
|
||||
})
|
||||
];
|
||||
|
||||
# distutils was removed from Python 3.12. Use setuptools' maintained copy.
|
||||
# The borb 2.x Document class lives in the document submodule.
|
||||
postPatch = ''
|
||||
substituteInPlace vastai/serverless/server/lib/backend.py \
|
||||
--replace-fail \
|
||||
"from distutils.util import strtobool" \
|
||||
"from setuptools._distutils.util import strtobool"
|
||||
|
||||
substituteInPlace vastai/pdf/vast_pdf.py \
|
||||
--replace-fail \
|
||||
"from borb.pdf.document import Document" \
|
||||
"from borb.pdf.document.document import Document"
|
||||
'';
|
||||
|
||||
build-system = with python3Packages; [
|
||||
poetry-core
|
||||
poetry-dynamic-versioning
|
||||
];
|
||||
|
||||
pythonRelaxDeps = [
|
||||
"cryptography"
|
||||
"pillow"
|
||||
"pycares"
|
||||
];
|
||||
dependencies = with python3Packages; [
|
||||
aiodns
|
||||
aiohttp
|
||||
anyio
|
||||
argcomplete
|
||||
borb_2
|
||||
cryptography
|
||||
curlify
|
||||
pillow
|
||||
psutil
|
||||
pycares
|
||||
pycryptodome
|
||||
pyparsing
|
||||
python-dateutil
|
||||
requests
|
||||
rich
|
||||
setuptools
|
||||
typing-extensions
|
||||
urllib3
|
||||
xdg
|
||||
];
|
||||
|
||||
makeWrapperArgs = [
|
||||
"--prefix"
|
||||
"PATH"
|
||||
":"
|
||||
(lib.makeBinPath [
|
||||
openssh
|
||||
rsync
|
||||
])
|
||||
"--set-default"
|
||||
"VASTAI_NO_UPDATE_CHECK"
|
||||
"1"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [
|
||||
"vastai"
|
||||
"vastai.cli.main"
|
||||
"vastai.pdf.vast_pdf"
|
||||
"vastai.serverless.remote.serve_deployment"
|
||||
"vastai_sdk"
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
versionCheckHook
|
||||
writableTmpDirAsHomeHook
|
||||
]
|
||||
++ (with python3Packages; [
|
||||
pyopenssl
|
||||
pytest-asyncio
|
||||
pytestCheckHook
|
||||
]);
|
||||
versionCheckProgramArg = "--version";
|
||||
versionCheckKeepEnvironment = [ "HOME" ];
|
||||
|
||||
enabledTestPaths = [ "tests" ];
|
||||
disabledTestMarks = [
|
||||
"integration"
|
||||
"live"
|
||||
];
|
||||
disabledTests = [
|
||||
# These tests target a removed `compress` argument; 1.5.6 always creates
|
||||
# gzip-compressed deployment archives.
|
||||
"test_contains_config_json"
|
||||
"test_module_becomes_deployment_py"
|
||||
"test_package_becomes_deployment_dir"
|
||||
"test_extra_files_absolute_dest_paths"
|
||||
"test_extra_files_relative_dest_paths"
|
||||
"test_compressed_tarball_is_valid"
|
||||
"test_uncompressed_tarball_is_valid"
|
||||
"test_tar_extract_module_deployment"
|
||||
"test_tar_extract_package_deployment"
|
||||
"test_tar_extract_absolute_extra_files"
|
||||
"test_tar_extract_relative_extra_files"
|
||||
"test_tar_extract_compressed"
|
||||
];
|
||||
|
||||
postCheck = ''
|
||||
$out/bin/vastai --help >/dev/null
|
||||
test -x $out/bin/serve-vast-deployment
|
||||
'';
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = {
|
||||
description = "CLI and SDK for the Vast.ai GPU cloud service";
|
||||
homepage = "https://vast.ai/";
|
||||
changelog = "https://github.com/vast-ai/vast-cli/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.samuela ];
|
||||
mainProgram = "vastai";
|
||||
};
|
||||
})
|
||||
@@ -35,8 +35,6 @@ lib.makeScope pkgs.newScope (
|
||||
inherit (self) elm;
|
||||
};
|
||||
|
||||
elm-analyse = callPackage ./packages/elm-analyse { };
|
||||
|
||||
elm-doc-preview = callPackage ./packages/elm-doc-preview { };
|
||||
|
||||
elm-git-install = callPackage ./packages/elm-git-install { };
|
||||
@@ -70,6 +68,7 @@ lib.makeScope pkgs.newScope (
|
||||
elm-wrap = callPackage ./packages/elm-wrap { };
|
||||
}
|
||||
// lib.optionalAttrs config.allowAliases {
|
||||
elm-analyse = throw "elmPackages.elm-analyse has not be released since May 2019 so it has been removed."; # Added 2026-09-16
|
||||
create-elm-app = throw "'elmPackages.create-elm-app' has not had a release since December 2020, so it was removed."; # Added 2025-11-15
|
||||
elm-pages = throw "'elmPackages.elm-pages' has been removed, as it was broken in nixpkgs and was not maintained."; # Added 2025-11-15
|
||||
}
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildNpmPackage,
|
||||
fetchFromGitHub,
|
||||
elmPackages,
|
||||
}:
|
||||
|
||||
buildNpmPackage (finalAttrs: {
|
||||
pname = "elm-analyse";
|
||||
version = "0.16.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "stil4m";
|
||||
repo = "elm-analyse";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-GFHhHf+JOXGcm0CZEDGMuuTR3CXBdSkYDGRHZ63pE64=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-B/PzGOaxdKSt82ax0izeadsMsz+I0v4wkye3zgNxMF8=";
|
||||
|
||||
npmFlags = [ "--ignore-scripts" ];
|
||||
|
||||
nativeBuildInputs = [
|
||||
elmPackages.elm
|
||||
];
|
||||
|
||||
postConfigure =
|
||||
(elmPackages.fetchElmDeps {
|
||||
elmPackages = import ./elm-srcs.nix;
|
||||
elmVersion = elmPackages.elm.version;
|
||||
registryDat = ./registry.dat;
|
||||
})
|
||||
+ ''
|
||||
ln -sf ${lib.getExe elmPackages.elm} node_modules/.bin/elm
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
make
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
rm -rf $out/lib/node_modules/elm-analyse/node_modules/.bin/
|
||||
'';
|
||||
|
||||
passthru.updateScript = ./update.sh;
|
||||
|
||||
meta = {
|
||||
description = "Analyse your Elm code, identify deficiencies and apply best practices";
|
||||
homepage = "https://stil4m.github.io/elm-analyse/";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ ];
|
||||
mainProgram = "elm-analyse";
|
||||
};
|
||||
})
|
||||
@@ -1,152 +0,0 @@
|
||||
{
|
||||
|
||||
"alex-tan/elm-dialog" = {
|
||||
sha256 = "13dfpzrdi69jaj0hj2cnwg3g6wafhszg0grjw4z3imd0b9avz1hk";
|
||||
version = "1.0.0";
|
||||
};
|
||||
|
||||
"elm-community/dict-extra" = {
|
||||
sha256 = "05ll04wf03m8ic109dz2dbq6pah23m70c4wwyr35026dhmws35n0";
|
||||
version = "2.4.0";
|
||||
};
|
||||
|
||||
"elm-community/graph" = {
|
||||
sha256 = "1rwsq2126q0rb4vmy95ajxfm3m063d6lw0p90d510nzcrbm9bxbc";
|
||||
version = "6.0.0";
|
||||
};
|
||||
|
||||
"elm-community/intdict" = {
|
||||
sha256 = "09i1fk63gp6sr6kc6ccs8g0kxvqhw5czghi9cl8flizanrgcmva1";
|
||||
version = "3.0.0";
|
||||
};
|
||||
|
||||
"elm-community/list-extra" = {
|
||||
sha256 = "06ddwrc0ai0pn5mw99a1d9xnihkliyvq0qvzn32z1l88msflrib7";
|
||||
version = "8.2.2";
|
||||
};
|
||||
|
||||
"elm-community/maybe-extra" = {
|
||||
sha256 = "10jykkdmqpvhbcm50867a894272j4z6jc9r5jy35cz8jfi9j8xv9";
|
||||
version = "5.0.0";
|
||||
};
|
||||
|
||||
"elm-explorations/markdown" = {
|
||||
sha256 = "0k3110ixa4wwf3vkkdplagwah9ypr965qxr1y147rnsc1xsxmr6y";
|
||||
version = "1.0.0";
|
||||
};
|
||||
|
||||
"elm/browser" = {
|
||||
sha256 = "1zlmx672glg7fdgkvh5jm47y85pv7pdfr5mkhg6x7ar6k000vyka";
|
||||
version = "1.0.1";
|
||||
};
|
||||
|
||||
"elm/core" = {
|
||||
sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as";
|
||||
version = "1.0.2";
|
||||
};
|
||||
|
||||
"elm/html" = {
|
||||
sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k";
|
||||
version = "1.0.0";
|
||||
};
|
||||
|
||||
"elm/http" = {
|
||||
sha256 = "1igmm89ialzrjib1j8xagkxalq1x2gj4l0hfxcd66mpwmvg7psl8";
|
||||
version = "1.0.0";
|
||||
};
|
||||
|
||||
"elm/json" = {
|
||||
sha256 = "0kjwrz195z84kwywaxhhlnpl3p251qlbm5iz6byd6jky2crmyqyh";
|
||||
version = "1.1.3";
|
||||
};
|
||||
|
||||
"elm/parser" = {
|
||||
sha256 = "0a3cxrvbm7mwg9ykynhp7vjid58zsw03r63qxipxp3z09qks7512";
|
||||
version = "1.1.0";
|
||||
};
|
||||
|
||||
"elm/project-metadata-utils" = {
|
||||
sha256 = "1d4rd4grrnbdvj9gf00h7dr6hbkjzawgkzpizfrkp1z1pyr3mvq9";
|
||||
version = "1.0.0";
|
||||
};
|
||||
|
||||
"elm/regex" = {
|
||||
sha256 = "0lijsp50w7n1n57mjg6clpn9phly8vvs07h0qh2rqcs0f1jqvsa2";
|
||||
version = "1.0.0";
|
||||
};
|
||||
|
||||
"elm/time" = {
|
||||
sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1";
|
||||
version = "1.0.0";
|
||||
};
|
||||
|
||||
"elm/url" = {
|
||||
sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4";
|
||||
version = "1.0.0";
|
||||
};
|
||||
|
||||
"krisajenkins/remotedata" = {
|
||||
sha256 = "0sjrgpsy4aci0h6qndqx70cnfd065hlkh1rxk0lc93z22sdj4knl";
|
||||
version = "5.0.0";
|
||||
};
|
||||
|
||||
"rundis/elm-bootstrap" = {
|
||||
sha256 = "155rqa2hh9h5s0ryqv4pn40vwl2klk3zg8b2xf48z5ky8fdrr31c";
|
||||
version = "5.2.0";
|
||||
};
|
||||
|
||||
"stil4m/elm-syntax" = {
|
||||
sha256 = "182fz12a115j3wz3fkc209mq8rbbqmvl237pmrvygmvbxwv4ix37";
|
||||
version = "7.1.1";
|
||||
};
|
||||
|
||||
"avh4/elm-color" = {
|
||||
sha256 = "0n16wnvp87x9az3m5qjrl6smsg7051m719xn5d244painx8xmpzq";
|
||||
version = "1.0.0";
|
||||
};
|
||||
|
||||
"avh4/elm-fifo" = {
|
||||
sha256 = "1ka0iz2psr75h4qz7hh5z1prclah1nais9aaycaxapfd7inqmrrc";
|
||||
version = "1.0.4";
|
||||
};
|
||||
|
||||
"elm-community/json-extra" = {
|
||||
sha256 = "0hwlhdlvd5xi866m9bpnabcg2qrgcvfj34p1x1mhx85ymr3gv9mv";
|
||||
version = "4.2.0";
|
||||
};
|
||||
|
||||
"elm/virtual-dom" = {
|
||||
sha256 = "0q1v5gi4g336bzz1lgwpn5b1639lrn63d8y6k6pimcyismp2i1yg";
|
||||
version = "1.0.2";
|
||||
};
|
||||
|
||||
"etaque/elm-response" = {
|
||||
sha256 = "0vydmczvlxkvbjsjpfwad5m77y3155dp8wx648xf1ya3vsy4m5kf";
|
||||
version = "3.1.0";
|
||||
};
|
||||
|
||||
"rtfeldman/elm-hex" = {
|
||||
sha256 = "1y0aa16asvwdqmgbskh5iba6psp43lkcjjw9mgzj3gsrg33lp00d";
|
||||
version = "1.0.0";
|
||||
};
|
||||
|
||||
"rtfeldman/elm-iso8601-date-strings" = {
|
||||
sha256 = "1fa5sslklldy0dq8bm0zdkb9ni50yxhb09xb6lgk00x55bmza9ik";
|
||||
version = "1.1.3";
|
||||
};
|
||||
|
||||
"stil4m/structured-writer" = {
|
||||
sha256 = "0xr95m8k42vwyff91vfd4q59fhnmhywyj20nzxqhl7blk82hnwj0";
|
||||
version = "1.0.2";
|
||||
};
|
||||
|
||||
"elm-explorations/test" = {
|
||||
sha256 = "1fsd7bajm7qa93r5pn3mdafqh3blpzya601jbs9l238p0hmvh576";
|
||||
version = "1.2.2";
|
||||
};
|
||||
|
||||
"elm/random" = {
|
||||
sha256 = "138n2455wdjwa657w6sjq18wx2r0k60ibpc4frhbqr50sncxrfdl";
|
||||
version = "1.0.0";
|
||||
};
|
||||
}
|
||||
Binary file not shown.
@@ -1,17 +0,0 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#! nix-shell -i bash -p nix-update elm2nix nixfmt
|
||||
|
||||
set -eu -o pipefail
|
||||
|
||||
PACKAGE_DIR=$(realpath "$(dirname "$0")")
|
||||
|
||||
# Update version, src and npm deps
|
||||
nix-update "$UPDATE_NIX_ATTR_PATH"
|
||||
|
||||
# Update elm deps
|
||||
cp "$(nix-build -A "$UPDATE_NIX_ATTR_PATH".src)/elm.json" elm.json
|
||||
trap 'rm -rf elm.json registry.dat &> /dev/null' EXIT
|
||||
elm2nix convert >"$PACKAGE_DIR/elm-srcs.nix"
|
||||
nixfmt "$PACKAGE_DIR/elm-srcs.nix"
|
||||
elm2nix snapshot
|
||||
cp registry.dat "$PACKAGE_DIR/registry.dat"
|
||||
@@ -3,6 +3,7 @@
|
||||
buildNpmPackage,
|
||||
fetchFromGitHub,
|
||||
elmPackages,
|
||||
fetchpatch,
|
||||
}:
|
||||
|
||||
buildNpmPackage (finalAttrs: {
|
||||
@@ -12,11 +13,13 @@ buildNpmPackage (finalAttrs: {
|
||||
src = fetchFromGitHub {
|
||||
owner = "stoeffel";
|
||||
repo = "elm-verify-examples";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-HUmIrwmJyGvkCRHRiA069Aj25WBIGtJ7DJxwwF6OvWU=";
|
||||
# Using more recent commit to fix elm 0.19.2 support
|
||||
# tag = "v${finalAttrs.version}";
|
||||
rev = "63b84eca9642f6d0de37d6e35e0d8bc6edca19c6";
|
||||
hash = "sha256-tZ/XT/gZKu8iDmJPxYlLXCRCeOs7ZZiqWpYcyScfqVg=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-frNCo97GOwiClzQwRXHpqqjimJrmipsBebAshJqGZco=";
|
||||
npmDepsHash = "sha256-Puz7AVXaUy/7wflTcqbrQhTwSeeiG3jkfXYJ7NXhXQ0=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
elmPackages.elm
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
|
||||
buildDunePackage (finalAttrs: {
|
||||
pname = "ocaml-version";
|
||||
version = "4.1.2";
|
||||
version = "4.1.4";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/ocurrent/ocaml-version/releases/download/v${finalAttrs.version}/ocaml-version-${finalAttrs.version}.tbz";
|
||||
hash = "sha256-+NqijIAmedHTU9/5ZfZojwr0vQZ0onS6lBWIrnBqPAc=";
|
||||
hash = "sha256-Iiik1STIuLd1639h99JE64H/2sowC3jCnY/drKWkPbI=";
|
||||
};
|
||||
|
||||
checkInputs = [ alcotest ];
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
|
||||
buildDunePackage (finalAttrs: {
|
||||
pname = "spdx_licenses";
|
||||
version = "1.5.0";
|
||||
version = "1.6.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/kit-ty-kate/spdx_licenses/releases/download/v${finalAttrs.version}/spdx_licenses-${finalAttrs.version}.tar.gz";
|
||||
hash = "sha256-Q+z+B/2yHiiulK/FY75fd4+Lyt5fTcJgZwBWdzgy4EQ=";
|
||||
hash = "sha256-ciUka6XWRg2bYqzXWOGsNc62J5OshtXNSDCqbPooGVA=";
|
||||
};
|
||||
|
||||
doCheck = true;
|
||||
|
||||
57
pkgs/development/python-modules/borb/2.nix
Normal file
57
pkgs/development/python-modules/borb/2.nix
Normal file
@@ -0,0 +1,57 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchPypi,
|
||||
|
||||
# build-system
|
||||
setuptools,
|
||||
|
||||
# dependencies
|
||||
cryptography,
|
||||
fonttools,
|
||||
lxml,
|
||||
pillow,
|
||||
python-barcode,
|
||||
qrcode,
|
||||
requests,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "borb";
|
||||
version = "2.1.25";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit (finalAttrs) pname version;
|
||||
hash = "sha256-gTolInuW9HHSkkS/PAens9821h1ivL7PRbFJRLgBHvQ=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
cryptography
|
||||
fonttools
|
||||
lxml
|
||||
pillow
|
||||
python-barcode
|
||||
qrcode
|
||||
requests
|
||||
];
|
||||
|
||||
# Tests are not included in the PyPI source distribution.
|
||||
doCheck = false;
|
||||
|
||||
pythonImportsCheck = [
|
||||
"borb.pdf"
|
||||
"borb.pdf.canvas.layout.table.fixed_column_width_table"
|
||||
];
|
||||
|
||||
meta = {
|
||||
description = "Library for reading, creating and manipulating PDF files";
|
||||
homepage = "https://borbpdf.com/";
|
||||
changelog = "https://github.com/jorisschellekens/borb/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.agpl3Plus;
|
||||
maintainers = [ lib.maintainers.samuela ];
|
||||
};
|
||||
})
|
||||
@@ -11,14 +11,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "icalendar-compatibility";
|
||||
version = "0.1.4";
|
||||
version = "0.1.5";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "niccokunzmann";
|
||||
repo = "icalendar_compatibility";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-h9rpbltNEPMteicPJ6oC32NsZS8QXQphLbC0Qiu7j5Q=";
|
||||
hash = "sha256-rHx4wuLKSBI3/3ShxtpyyuK+iWULpbzfDN8DCNUryHg=";
|
||||
};
|
||||
|
||||
# hatch-vcs tries to read the current git commit hash
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langchain-anthropic";
|
||||
version = "1.5.2";
|
||||
version = "1.7.2";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -32,7 +32,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "langchain-ai";
|
||||
repo = "langchain";
|
||||
tag = "langchain-anthropic==${finalAttrs.version}";
|
||||
hash = "sha256-mk0Cx1rYO1sPbFJdpqVs+hCvLkV7u1WrHOIkTW5ewDE=";
|
||||
hash = "sha256-2hswfwhRt+P+kF5n80zLLbjbC7wadgfgOCy+v0nLnLs=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/libs/partners/anthropic";
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
langchain-anthropic,
|
||||
|
||||
# tests
|
||||
langchain-openai,
|
||||
langchain-tests,
|
||||
pytest-asyncio,
|
||||
pytest-cov-stub,
|
||||
@@ -31,7 +32,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langchain-aws";
|
||||
version = "1.6.4";
|
||||
version = "1.7.6";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -39,7 +40,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "langchain-ai";
|
||||
repo = "langchain-aws";
|
||||
tag = "langchain-aws==${finalAttrs.version}";
|
||||
hash = "sha256-7qg2cUjlFEo6ekK269Ew0wmmSx+1BwUdTJZCMPd2tBU=";
|
||||
hash = "sha256-Lw23OAHSEqf7NAgzSzWqgsb8ZV7Ir1KR0lULIE7TYVU=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -72,6 +73,7 @@ buildPythonPackage (finalAttrs: {
|
||||
nativeCheckInputs = [
|
||||
anthropic
|
||||
langchain
|
||||
langchain-openai
|
||||
langchain-tests
|
||||
pytest-asyncio
|
||||
pytest-cov-stub
|
||||
@@ -84,6 +86,11 @@ buildPythonPackage (finalAttrs: {
|
||||
disabledTests = [
|
||||
# Fails when langchain-core gets ahead of this package
|
||||
"test_serdes"
|
||||
# Requires aws-bedrock-token-generator (not packaged)
|
||||
"test_bedrock_api_key_provider"
|
||||
"test_installed_provider_mints_token_when_called"
|
||||
# botocore added new content block keys
|
||||
"test__bedrock_content_block_keys_match_botocore"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "langchain_aws" ];
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langchain-core";
|
||||
version = "1.5.4";
|
||||
version = "1.6.3";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -45,7 +45,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "langchain-ai";
|
||||
repo = "langchain";
|
||||
tag = "langchain-core==${finalAttrs.version}";
|
||||
hash = "sha256-5aH12hWxnYlRYIa3UT5Z8JycL5ipRNg9KS9h4H2uKA4=";
|
||||
hash = "sha256-IOi1Yw1cYdsLogr/xrECYIlfDdHqZzCUz27ubK1QrSQ=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/libs/core";
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langchain-fireworks";
|
||||
version = "1.4.4";
|
||||
version = "1.6.1";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
strictDeps = true;
|
||||
@@ -33,7 +33,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "langchain-ai";
|
||||
repo = "langchain";
|
||||
tag = "langchain-fireworks==${finalAttrs.version}";
|
||||
hash = "sha256-O63UohmChFeeQZH7G1iYDwNdvJapVEnHlkGHdGxIDjE=";
|
||||
hash = "sha256-tJduBjY+JcG9bhZYsOi7+2TdR4DTi/ZCTIaNZ87R8JM=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/libs/partners/fireworks";
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langchain-openai";
|
||||
version = "1.4.1";
|
||||
version = "1.6.2";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -41,7 +41,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "langchain-ai";
|
||||
repo = "langchain";
|
||||
tag = "langchain-openai==${finalAttrs.version}";
|
||||
hash = "sha256-ELiQJQ8tuQX246ZOr/+iYj/vJRtIX5Cr5PIn4Ul0E8c=";
|
||||
hash = "sha256-VCob54ZCetohK8ZvgAHPdExr2UPgD4vxGCXM0pKW3hQ=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/libs/partners/openai";
|
||||
|
||||
@@ -1,24 +1,32 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchPypi,
|
||||
fetchFromGitHub,
|
||||
hatchling,
|
||||
typing-extensions,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langchain-protocol";
|
||||
version = "0.0.18";
|
||||
version = "0.0.19";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
# Not available vis Github yet; required by langchain-core
|
||||
src = fetchPypi {
|
||||
pname = "langchain_protocol";
|
||||
inherit (finalAttrs) version;
|
||||
hash = "sha256-7D4ReC8e0MnbOOWp7QGw56DT+6QG+qiu9llLc8VqY+Y=";
|
||||
src = fetchFromGitHub {
|
||||
owner = "langchain-ai";
|
||||
repo = "agent-protocol";
|
||||
tag = "langchain-protocol==${finalAttrs.version}";
|
||||
hash = "sha256-RiTuadwE3IMhlsFzEZkVlIKMU8/c9uTTDWrXpptriGI=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/streaming/py";
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "hatchling>=1.26,<1.30" "hatchling"
|
||||
'';
|
||||
|
||||
build-system = [
|
||||
hatchling
|
||||
];
|
||||
|
||||
@@ -24,14 +24,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langchain-xai";
|
||||
version = "1.2.2";
|
||||
version = "1.3.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "langchain-ai";
|
||||
repo = "langchain";
|
||||
tag = "langchain-xai==${finalAttrs.version}";
|
||||
hash = "sha256-RUklm627HiwMcpKkm+0uWZgHp4iDtSsmEpLb9MxumqI=";
|
||||
hash = "sha256-5eUyYr+xyEiHZgMKXW6jQhabVdSZTDT2e93Fy7RwUGM=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/libs/partners/xai";
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langchain";
|
||||
version = "1.3.14";
|
||||
version = "1.4.0";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -54,7 +54,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "langchain-ai";
|
||||
repo = "langchain";
|
||||
tag = "langchain==${finalAttrs.version}";
|
||||
hash = "sha256-SmbqK8/AmUYfp+hUEnuwl18K+A/6csLxMUTv0oQHhEs=";
|
||||
hash = "sha256-p4YqDRa37QC0diLMUPUX1J8Rc3q+DFxjPU+w8M0EJtY=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/libs/langchain_v1";
|
||||
@@ -128,9 +128,15 @@ buildPythonPackage (finalAttrs: {
|
||||
# AttributeError: 'ImportErrorProfileModel' object has no attribute 'profile'
|
||||
# https://github.com/langchain-ai/langchain/issues/36312
|
||||
"test_summarization_middleware_missing_profile"
|
||||
# langchain.mcp requires fastmcp>=4 (nixpkgs has 3.x) and jsonschema
|
||||
"test_import_all"
|
||||
"test_import_all_using_dir"
|
||||
];
|
||||
|
||||
disabledTestPaths = [
|
||||
# Requires fastmcp>=4 (nixpkgs has 3.x) and jsonschema
|
||||
"tests/unit_tests/mcp"
|
||||
|
||||
# Their configuration tests don't place nicely with nixpkgs
|
||||
"tests/unit_tests/test_pytest_config.py"
|
||||
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langgraph-checkpoint-mongodb";
|
||||
version = "0.4.0";
|
||||
version = "0.5.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "langchain-ai";
|
||||
repo = "langchain-mongodb";
|
||||
tag = "libs/langgraph-checkpoint-mongodb/v${finalAttrs.version}";
|
||||
hash = "sha256-AdTAyMHNzkuvNB7DsbWxAxNKNqSxdgYwIB5UHBAAxZc=";
|
||||
hash = "sha256-0cL28QpwcvjOQmaH1lpZZpqcThGN2fZVryWEzrN9Mrc=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/libs/langgraph-checkpoint-mongodb";
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langgraph-checkpoint-postgres";
|
||||
version = "3.1.0";
|
||||
version = "3.1.2";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -34,7 +34,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "langchain-ai";
|
||||
repo = "langgraph";
|
||||
tag = "checkpointpostgres==${finalAttrs.version}";
|
||||
hash = "sha256-xSYJ9D86GuaJEgQYk+pkJ4O7HK6HXfAOGBv4f1CBY5g=";
|
||||
hash = "sha256-7UJh+ObKOdU5QlGOlvF/8uHd+uOfiAjuGAkIVdEBLHQ=";
|
||||
};
|
||||
|
||||
postgresqlTestSetupPost = ''
|
||||
@@ -90,6 +90,11 @@ buildPythonPackage (finalAttrs: {
|
||||
"test_store_ttl"
|
||||
];
|
||||
|
||||
disabledTestPaths = [
|
||||
# Imports langgraph.checkpoint.conformance (not mature enough to package)
|
||||
"tests/test_conformance_delta.py"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "langgraph.checkpoint.postgres" ];
|
||||
|
||||
passthru = {
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langgraph-runtime-inmem";
|
||||
version = "0.32.3";
|
||||
version = "0.34.1";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -22,7 +22,7 @@ buildPythonPackage (finalAttrs: {
|
||||
src = fetchPypi {
|
||||
pname = "langgraph_runtime_inmem";
|
||||
inherit (finalAttrs) version;
|
||||
hash = "sha256-k5ATRuxkds7dDZx3lxGJUL+vUgVFHe8/BaAZqoaaxd4=";
|
||||
hash = "sha256-DgyDoLsWDpnSF8CBPLRtQtpQ5LazZrSozkrbRIOX4xo=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langgraph-sdk";
|
||||
version = "0.4.2";
|
||||
version = "0.4.4";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -29,7 +29,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "langchain-ai";
|
||||
repo = "langgraph";
|
||||
tag = "sdk==${finalAttrs.version}";
|
||||
hash = "sha256-30BY7f8m3YiqEBhb3+TQYTW0N40xI9kTQbMTh4BwcyU=";
|
||||
hash = "sha256-kKIk0vt+2HXpSqW0RVt3cqpdmdf5NOWtXlkSkrogNWs=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/libs/sdk-py";
|
||||
|
||||
@@ -14,14 +14,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langgraph-store-mongodb";
|
||||
version = "0.3.0";
|
||||
version = "0.4.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "langchain-ai";
|
||||
repo = "langchain-mongodb";
|
||||
tag = "libs/langgraph-store-mongodb/v${finalAttrs.version}";
|
||||
hash = "sha256-uivrfCTUu7Pq/ncAGH6HUzgyOGRcOzsQ+SVN6wW33tQ=";
|
||||
hash = "sha256-0cL28QpwcvjOQmaH1lpZZpqcThGN2fZVryWEzrN9Mrc=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/libs/langgraph-store-mongodb";
|
||||
@@ -46,8 +46,8 @@ buildPythonPackage (finalAttrs: {
|
||||
skipBulkUpdate = true;
|
||||
updateScript = nix-update-script {
|
||||
extraArgs = [
|
||||
"-vr"
|
||||
"libs/langgraph-store-mongodb/v(.*)"
|
||||
"--version-regex"
|
||||
"libs/langgraph-store-mongodb/v(.+)"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
}:
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langgraph";
|
||||
version = "1.2.10";
|
||||
version = "1.2.11";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -49,7 +49,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "langchain-ai";
|
||||
repo = "langgraph";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-2P/JsZYQyXIselQaJVuyWTdkRQN7K1TW7w28D7BecRk=";
|
||||
hash = "sha256-5CUQh9KNYQ0HBIuREOP0MxZgn5Z1MxMuqB9Be4e6AJo=";
|
||||
};
|
||||
|
||||
postgresqlTestSetupPost = ''
|
||||
|
||||
@@ -8,11 +8,15 @@
|
||||
hatchling,
|
||||
|
||||
# dependencies
|
||||
httpx,
|
||||
anyio,
|
||||
distro,
|
||||
httpx2,
|
||||
orjson,
|
||||
pydantic,
|
||||
requests,
|
||||
requests-toolbelt,
|
||||
sniffio,
|
||||
typing-extensions,
|
||||
uuid-utils,
|
||||
websockets,
|
||||
xxhash,
|
||||
@@ -20,7 +24,7 @@
|
||||
|
||||
# tests
|
||||
anthropic,
|
||||
attrs,
|
||||
cachetools,
|
||||
dataclasses-json,
|
||||
multipart,
|
||||
opentelemetry-sdk,
|
||||
@@ -29,18 +33,19 @@
|
||||
pytest-socket,
|
||||
pytest-vcr,
|
||||
pytestCheckHook,
|
||||
rich,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "langsmith";
|
||||
version = "0.8.18";
|
||||
version = "0.12.4";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "langchain-ai";
|
||||
repo = "langsmith-sdk";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-YQ49pg0+RepwlEHtu8GDUpfnXQF3yFiz6ZeRcnHXSWU=";
|
||||
hash = "sha256-e5+lttn90eBL4xkvxN9oH3aPp1wRBfy5Q0pS8LDCiq8=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/python";
|
||||
@@ -50,11 +55,15 @@ buildPythonPackage (finalAttrs: {
|
||||
build-system = [ hatchling ];
|
||||
|
||||
dependencies = [
|
||||
httpx
|
||||
anyio
|
||||
distro
|
||||
httpx2
|
||||
orjson
|
||||
pydantic
|
||||
requests
|
||||
requests-toolbelt
|
||||
sniffio
|
||||
typing-extensions
|
||||
uuid-utils
|
||||
websockets
|
||||
xxhash
|
||||
@@ -63,7 +72,7 @@ buildPythonPackage (finalAttrs: {
|
||||
|
||||
nativeCheckInputs = [
|
||||
anthropic
|
||||
attrs
|
||||
cachetools
|
||||
dataclasses-json
|
||||
multipart
|
||||
opentelemetry-sdk
|
||||
@@ -72,6 +81,7 @@ buildPythonPackage (finalAttrs: {
|
||||
pytest-socket
|
||||
pytest-vcr
|
||||
pytestCheckHook
|
||||
rich
|
||||
];
|
||||
|
||||
# evaluation and external tests require OpenAPI key
|
||||
@@ -106,6 +116,38 @@ buildPythonPackage (finalAttrs: {
|
||||
|
||||
# strands-agents isn't packaged
|
||||
"tests/unit_tests/wrappers/test_strands_agents.py"
|
||||
|
||||
# require network access to external test servers
|
||||
"tests/unit_tests/test_async_client.py::test_arequest_with_retries_retries_on_502"
|
||||
"tests/unit_tests/test_async_client.py::test_async_create_feedback_retries_on_not_found"
|
||||
"tests/unit_tests/test_async_client.py::test_create_feedback_retries_on_not_found"
|
||||
"tests/unit_tests/sandbox/test_async_client.py::TestAsyncConnectionErrors"
|
||||
"tests/unit_tests/sandbox/test_async_client.py::TestAsyncSandboxOperations"
|
||||
"tests/unit_tests/sandbox/test_async_client.py::TestAsyncSnapshotTags"
|
||||
"tests/unit_tests/sandbox/test_async_client.py::TestGenerateDownloadURL"
|
||||
"tests/unit_tests/sandbox/test_async_client.py::TestService"
|
||||
"tests/unit_tests/sandbox/test_async_sandbox.py::TestAsyncSandboxContextManager"
|
||||
"tests/unit_tests/sandbox/test_async_sandbox.py::TestAsyncSandboxRead"
|
||||
"tests/unit_tests/sandbox/test_async_sandbox.py::TestAsyncSandboxRun"
|
||||
"tests/unit_tests/sandbox/test_async_sandbox.py::TestAsyncSandboxStatusFields"
|
||||
"tests/unit_tests/sandbox/test_async_sandbox.py::TestAsyncSandboxWrite"
|
||||
"tests/unit_tests/sandbox/test_client.py::TestConnectionErrors"
|
||||
"tests/unit_tests/sandbox/test_client.py::TestGenerateDownloadURL"
|
||||
"tests/unit_tests/sandbox/test_client.py::TestRegistries"
|
||||
"tests/unit_tests/sandbox/test_client.py::TestSandboxOperations"
|
||||
"tests/unit_tests/sandbox/test_client.py::TestService"
|
||||
"tests/unit_tests/sandbox/test_client.py::TestSnapshotOperations"
|
||||
"tests/unit_tests/sandbox/test_client.py::TestStartStopOperations"
|
||||
"tests/unit_tests/sandbox/test_proxy_config.py::test_create_sandbox_expands_mount_config"
|
||||
"tests/unit_tests/sandbox/test_proxy_config.py::test_create_sandbox_forwards_composed_proxy_config"
|
||||
"tests/unit_tests/sandbox/test_proxy_config.py::test_create_sandbox_preserves_mount_config_and_proxy_config_separately"
|
||||
"tests/unit_tests/sandbox/test_sandbox.py::TestSandboxContextManager"
|
||||
"tests/unit_tests/sandbox/test_sandbox.py::TestSandboxRead"
|
||||
"tests/unit_tests/sandbox/test_sandbox.py::TestSandboxRun"
|
||||
"tests/unit_tests/sandbox/test_sandbox.py::TestSandboxStatusFields"
|
||||
"tests/unit_tests/sandbox/test_sandbox.py::TestSandboxWrite"
|
||||
"tests/unit_tests/sandbox/test_transport.py::TestAsyncRetryTransport"
|
||||
"tests/unit_tests/sandbox/test_transport.py::TestRetryTransport"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "langsmith" ];
|
||||
|
||||
90
pkgs/development/python-modules/mosek/default.nix
Normal file
90
pkgs/development/python-modules/mosek/default.nix
Normal file
@@ -0,0 +1,90 @@
|
||||
{
|
||||
autoPatchelfHook,
|
||||
buildPythonPackage,
|
||||
fetchurl,
|
||||
lib,
|
||||
numpy,
|
||||
onetbb,
|
||||
python,
|
||||
pythonOlder,
|
||||
setuptools,
|
||||
stdenv,
|
||||
}:
|
||||
|
||||
buildPythonPackage (
|
||||
finalAttrs:
|
||||
let
|
||||
mosek-major-minor = lib.versions.majorMinor finalAttrs.version;
|
||||
python-major-version = python.sourceVersion.major;
|
||||
|
||||
mosek-libs = stdenv.mkDerivation {
|
||||
pname = "mosek-libs";
|
||||
inherit (finalAttrs) version src;
|
||||
nativeBuildInputs = [
|
||||
onetbb
|
||||
autoPatchelfHook
|
||||
];
|
||||
|
||||
# Copy the vendor mosek library, which will optionally use a tbb that
|
||||
# is located next to it. We should use our own packaged one, even though
|
||||
# that is 2021.11.0 (libtbb.so.12.11) instead of the packaged 2021.12.0 (libtbb.so.12.12).
|
||||
# The packaged tbb would need to be patchelfed to find libstdc++ and would lead
|
||||
# with clashes with other code using the nix based tbb, used in rtech for example.
|
||||
installPhase = ''
|
||||
mkdir -p $out/lib
|
||||
cp ${mosek-major-minor}/tools/platform/linux64x86/bin/libmosek64.so.${mosek-major-minor} $out/lib/
|
||||
ln -snf ${onetbb}/lib/libtbb.so.12 $out/lib/libtbb.so.12
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
pname = "mosek";
|
||||
version = "11.2.2";
|
||||
pyproject = true;
|
||||
build-system = [ setuptools ];
|
||||
|
||||
# MOSEK ships pre-built C extensions; minimum supported Python is 3.9
|
||||
disabled = pythonOlder "3.9";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://download.mosek.com/stable/${finalAttrs.version}/mosektoolslinux64x86.tar.bz2";
|
||||
sha256 = "sha256-DVSZ+8ggmK7EyiaHYCUjxQ/3mY5GcUlgXVRfReiBkiw=";
|
||||
};
|
||||
|
||||
# Move the source we want to the root
|
||||
prePatch = ''
|
||||
mv ${mosek-major-minor}/tools/platform/linux64x86/python/${python-major-version}/* .
|
||||
'';
|
||||
|
||||
# Disable part of setup.py that 'fixes' library paths based on installation
|
||||
# location (which it gets wrong for a Nix build). Rely on autoPatchelfHook
|
||||
# instead. Also disable installation of _mskpreload.py, which tries to preload
|
||||
# dependent libraries and again gets the location wrong, and seems dangerous
|
||||
# anyway.
|
||||
postPatch = ''
|
||||
sed -i -e 's/^\(\s*\)#\?\(self.execute(self.install_\(libs\|preloader\),\)/\1#\2/' setup.py
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
autoPatchelfHook
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
mosek-libs
|
||||
numpy
|
||||
];
|
||||
|
||||
# No tests are supplied
|
||||
doCheck = false;
|
||||
|
||||
pythonImportsCheck = [ "mosek" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Python interface for MOSEK - the package for large scale convex, conic and mixed-integer optimization.";
|
||||
homepage = "https://www.mosek.com/";
|
||||
changelog = "https://docs.mosek.com/${mosek-major-minor}/releasenotes/changes.html";
|
||||
license = licenses.unfree;
|
||||
maintainers = with maintainers; [ jherland ];
|
||||
};
|
||||
}
|
||||
)
|
||||
60
pkgs/development/python-modules/rapidyaml/default.nix
Normal file
60
pkgs/development/python-modules/rapidyaml/default.nix
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
swig,
|
||||
cmake-build-extension,
|
||||
setuptools,
|
||||
setuptools-git,
|
||||
setuptools-scm,
|
||||
deprecation,
|
||||
pytestCheckHook,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "rapidyaml";
|
||||
version = "0.15.2";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "biojppm";
|
||||
repo = "rapidyaml-python";
|
||||
fetchSubmodules = true;
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-lTLVcB6LJKY2gIg2l8/B/hrl0Cu2Ia5d/I1z6jyZ2KM=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
cmake-build-extension
|
||||
setuptools-scm
|
||||
setuptools-git
|
||||
swig
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
# pyproject.toml lists "swig" as a Python build requirement (for PyPI installs),
|
||||
# but in Nix swig is a system binary on PATH, not a Python package. Remove it so
|
||||
# pypa/build's dependency check doesn't fail when using --no-isolation.
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail '"swig"' ""
|
||||
'';
|
||||
|
||||
# cmake-build-extension drives the CMake configure step
|
||||
dontUseCmakeConfigure = true;
|
||||
|
||||
dependencies = [ deprecation ];
|
||||
|
||||
nativeCheckInputs = [ pytestCheckHook ];
|
||||
|
||||
pythonImportsCheck = [ "ryml" ];
|
||||
|
||||
meta = {
|
||||
description = "Parse and emit YAML, and do it fast. Python wrapper for the C++ library";
|
||||
homepage = "https://github.com/biojppm/rapidyaml-python";
|
||||
changelog = "https://github.com/biojppm/rapidyaml-python/blob/master/changelog/${finalAttrs.version}.md";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ jherland ];
|
||||
};
|
||||
})
|
||||
@@ -14,16 +14,16 @@
|
||||
typing-extensions,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "tesla-fleet-api";
|
||||
version = "1.12.1";
|
||||
version = "1.13.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Teslemetry";
|
||||
repo = "python-tesla-fleet-api";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-w/yEfAM2NRxg5yXXPxuudAY1qRSZDgRX+GirIgMi3gY=";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-MMbn/qjy9B5qDF1w1ckT06vz9GeU1Gy+NitnHl7uPk4=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
@@ -48,8 +48,8 @@ buildPythonPackage rec {
|
||||
meta = {
|
||||
description = "Python library for Tesla Fleet API and Teslemetry";
|
||||
homepage = "https://github.com/Teslemetry/python-tesla-fleet-api";
|
||||
changelog = "https://github.com/Teslemetry/python-tesla-fleet-api/releases/tag/${src.tag}";
|
||||
changelog = "https://github.com/Teslemetry/python-tesla-fleet-api/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -11,15 +11,18 @@
|
||||
stdenv,
|
||||
nixComponents,
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "nix-eval-jobs";
|
||||
version = "2.35.3";
|
||||
version = "2.35.4";
|
||||
|
||||
__structuredAttrs = true;
|
||||
strictDeps = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "NixOS";
|
||||
repo = "nix-eval-jobs";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-Ig1h/+qL5sj60fWiy44kQkXjapuff7vJXC9N0Ak8EkY=";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-t1FbcjvTWQ1WO3hJNKN+viNXuz4BX9Pte5K4F+IJLDk=";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
@@ -66,4 +69,4 @@ stdenv.mkDerivation rec {
|
||||
platforms = lib.platforms.unix;
|
||||
mainProgram = "nix-eval-jobs";
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1263,6 +1263,7 @@ mapAliases {
|
||||
kdesvn = throw "'kdesvn' has been removed due to outdated KF5 dependencies."; # Added 2026-05-01
|
||||
keepkey-agent = throw "keepkey-agent has been removed because upstream dropped KeepKey support"; # Added 2026-03-11
|
||||
keepkey_agent = throw "keepkey-agent has been removed because upstream dropped KeepKey support"; # Added 2026-03-11
|
||||
keeweb = throw "'keeweb' has been removed because it was using an EOL electron version"; # Added 2026-09-17
|
||||
keydb = throw "'keydb' has been removed as it was broken, vulnerable, and unmaintained upstream"; # Added 2025-11-08
|
||||
kgraphviewer = throw "'kgraphviewer' has been removed due to outdated KF5 dependencies."; # Added 2026-05-01
|
||||
kgx = throw "'kgx' has been renamed to/replaced by 'gnome-console'"; # Converted to throw 2025-10-27
|
||||
|
||||
@@ -8757,8 +8757,9 @@ with pkgs;
|
||||
k3s_1_34
|
||||
k3s_1_35
|
||||
k3s_1_36
|
||||
k3s_1_37
|
||||
;
|
||||
k3s = k3s_1_35;
|
||||
k3s = k3s_1_36;
|
||||
|
||||
kotatogram-desktop =
|
||||
callPackage ../applications/networking/instant-messengers/telegram/kotatogram-desktop
|
||||
|
||||
@@ -2620,6 +2620,8 @@ self: super: with self; {
|
||||
|
||||
borb = callPackage ../development/python-modules/borb { };
|
||||
|
||||
borb_2 = callPackage ../development/python-modules/borb/2.nix { };
|
||||
|
||||
bork = callPackage ../development/python-modules/bork { };
|
||||
|
||||
bosch-alarm-mode2 = callPackage ../development/python-modules/bosch-alarm-mode2 { };
|
||||
@@ -11205,6 +11207,8 @@ self: super: with self; {
|
||||
|
||||
mortgage = callPackage ../development/python-modules/mortgage { };
|
||||
|
||||
mosek = callPackage ../development/python-modules/mosek { };
|
||||
|
||||
motionblinds = callPackage ../development/python-modules/motionblinds { };
|
||||
|
||||
motionblindsble = callPackage ../development/python-modules/motionblindsble { };
|
||||
@@ -17768,6 +17772,8 @@ self: super: with self; {
|
||||
|
||||
rapidocr-onnxruntime = callPackage ../development/python-modules/rapidocr-onnxruntime { };
|
||||
|
||||
rapidyaml = callPackage ../development/python-modules/rapidyaml { };
|
||||
|
||||
rapt-ble = callPackage ../development/python-modules/rapt-ble { };
|
||||
|
||||
rarfile = callPackage ../development/python-modules/rarfile { inherit (pkgs) libarchive unrar; };
|
||||
|
||||
Reference in New Issue
Block a user