Skip to content

Instantly share code, notes, and snippets.

@sielicki
Last active November 25, 2024 04:30
Show Gist options
  • Save sielicki/2601de3ad8d8c732af80b12e36d326aa to your computer and use it in GitHub Desktop.
Save sielicki/2601de3ad8d8c732af80b12e36d326aa to your computer and use it in GitHub Desktop.
cuda auto update
{
lib ? (import <nixpkgs> { }).lib,
redistribs_raw,
}:
let
redistribs = (builtins.fromJSON redistribs_raw);
base_url = "https://developer.download.nvidia.com/compute/cuda/redist/";
minVersion = "11.4.2";
redistribsSufficientVersion = (builtins.filter (x: lib.strings.versionOlder minVersion x.redistrib_release) redistribs);
allVersions = map (x: x.redistrib_release) redistribsSufficientVersion;
transformOneEntry =
redistrib:
let
release = redistrib.redistrib_release;
isSystemAttr =
value: (builtins.isString value) || (builtins.isAttrs value && builtins.hasAttr "sha256" value);
extractSha256 =
source:
if (builtins.isString source) then
null
else
builtins.mapAttrs
(
system: value:
if (builtins.isString value) then
value
else if (builtins.hasAttr "sha256" value) then
{
inherit (value) sha256;
url = "${base_url}${value.relative_path}";
}
else
null
)
(
builtins.removeAttrs source [
"name"
"version"
"license"
"license_path"
]
);
transformSource =
sourceName: source:
let
extracted = extractSha256 source;
in
(
if extracted == null then
source
else
{
meta = {
inherit release;
name = source.name or null;
version = source.version or null;
license = source.license or null;
};
systems = extracted;
}
);
in
{
name = "${release}";
value = (builtins.mapAttrs transformSource redistrib);
};
allEntries = builtins.listToAttrs (map transformOneEntry redistribsSufficientVersion);
in
{
data = allEntries;
}
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl ripgrep jq nixfmt-rfc-style
BASE_RELEASE_URL="https://developer.download.nvidia.com/compute/cuda/redist/"
nix eval --arg-from-file redistribs_raw \
<((while read release; do
curl -f --silent "${BASE_RELEASE_URL}/redistrib_${release}.json" |
jq --arg release "$release" '. += { "redistrib_release": $release } '
done < \
<(curl --silent "${BASE_RELEASE_URL}" |
rg "^\s+<span class='file'.*>redistrib_(.*)\.json.*$" -or '$1')) | jq -s '.') \
-f ./update-helper.nix data | nixfmt >releases.nix
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment