Also changes the schemas a bit (still don't care about migrations), switches to named_params!, fixes up perf issues when ingesting manifests and/or hrefs into sqlite, etc. Adds sample queries such as "CudaArtifact conflicts" to datasette config, which explain some issues associated with choosing an evalModules schema on the cudaPackages side.
164 lines
4.8 KiB
Nix
164 lines
4.8 KiB
Nix
{
|
|
npins ? import ./npins,
|
|
nixpkgs ? npins.nixpkgs,
|
|
pkgs ? import nixpkgs { },
|
|
lib ? pkgs.lib,
|
|
...
|
|
}:
|
|
|
|
lib.makeScope pkgs.newScope (
|
|
self:
|
|
let
|
|
addProtobuf = oldAttrs: {
|
|
nativeBuildInputs = oldAttrs.nativeBuildInputs or [ ] ++ [
|
|
(self.callPackage ({ protobuf }: protobuf) { })
|
|
];
|
|
};
|
|
in
|
|
{
|
|
sidx-crate2nix = (
|
|
self.callPackage ./Cargo.nix {
|
|
defaultCrateOverrides = pkgs.defaultCrateOverrides // {
|
|
sidx = oldAttrs: {
|
|
src =
|
|
let
|
|
fs = pkgs.lib.fileset;
|
|
in
|
|
fs.toSource {
|
|
root = ./.;
|
|
fileset = fs.unions [
|
|
./src
|
|
./Cargo.toml
|
|
./Cargo.lock
|
|
];
|
|
};
|
|
};
|
|
snix-castore = addProtobuf;
|
|
# prost-wkt-types = addProtobuf;
|
|
# openssl-sys = oldAttrs: {
|
|
# nativeBuildInputs = oldAttrs.buildInputs or [ ] ++ [
|
|
# (self.callPackage ({ pkg-config }: pkg-config) { })
|
|
# ];
|
|
# buildInputs = oldAttrs.buildInputs or [ ] ++ [
|
|
# (self.callPackage ({ openssl }: openssl) { })
|
|
# ];
|
|
# };
|
|
};
|
|
}
|
|
);
|
|
sidx = self.sidx-crate2nix.rootCrate.build;
|
|
datasette-wrapped = self.callPackage (
|
|
{
|
|
datasette,
|
|
datasette-assets,
|
|
makeWrapper,
|
|
runCommand,
|
|
}:
|
|
runCommand "datasettew"
|
|
{
|
|
nativeBuildInputs = [ makeWrapper ];
|
|
preferLocalBuild = true;
|
|
allowSubstitutes = false;
|
|
}
|
|
''
|
|
mkdir -p "$out/bin"
|
|
makeWrapper ${lib.getExe datasette} "$out/bin/datasettew" \
|
|
--append-flags --metadata=${datasette-assets}/metadata.json \
|
|
--append-flags --static=static:${datasette-assets}/static
|
|
''
|
|
) { };
|
|
datasette-assets = self.callPackage (
|
|
{
|
|
runCommand,
|
|
datasette-metadata,
|
|
datasette-settings,
|
|
}:
|
|
runCommand "datasette-assets"
|
|
{
|
|
preferLocalBuild = true;
|
|
allowSubstitutes = false;
|
|
}
|
|
''
|
|
mkdir "$out"
|
|
cp --no-preserve=mode -r ${./static} "$out"/static
|
|
cp ${datasette-metadata} "$out"/metadata.json
|
|
cp ${datasette-settings} "$out"/settings.json
|
|
''
|
|
) { };
|
|
datasette-settings = self.callPackage (
|
|
{ formats }:
|
|
(formats.json { }).generate "datasette-settings.json" {
|
|
sql_time_limit_ms = 8000;
|
|
}
|
|
) { };
|
|
datasette-metadata = self.callPackage (
|
|
{ formats }:
|
|
(formats.json { }).generate "datasette-metadata.json" {
|
|
title = "CUDA INDEX";
|
|
description_html = ''
|
|
<p>Visualizing the contents of <a href="https://nixos.org/manual/nixpkgs/unstable/#cuda">Nixpkgs' cudaPackages</a>.
|
|
Generated via an <a href="https://forge.someonex.net/else/sidx">ad-hoc indexing tool</a>.
|
|
</p>
|
|
'';
|
|
"extra_css_urls" = [
|
|
"/static/some.css"
|
|
];
|
|
"databases" = {
|
|
"sidx" = {
|
|
"tables" = {
|
|
"Hash" = {
|
|
"label_column" = "hash";
|
|
};
|
|
"CudaArtifact" = {
|
|
facets = [
|
|
"pname"
|
|
"platform"
|
|
];
|
|
};
|
|
};
|
|
queries.cuda_conflicts = {
|
|
title = "CudaArtifact Conflicts";
|
|
description_html = ''
|
|
<code>CudaArtifact</code>s (identified by <code>sha256</code>)
|
|
claiming the same <code>(pname, version, platform)</code> triple
|
|
'';
|
|
sql = ''
|
|
SELECT
|
|
COUNT(DISTINCT sha256) AS conflicts,
|
|
pname.str AS pname,
|
|
ver.str AS ver,
|
|
plat.str AS plat,
|
|
GROUP_CONCAT(name.str, char(10)) AS name,
|
|
GROUP_CONCAT(tag.str, char(10)) AS tag,
|
|
GROUP_CONCAT(h.hash, char(10)) AS sha256
|
|
FROM
|
|
(
|
|
CudaArtifact AS cc,
|
|
Str AS name,
|
|
Str AS pname,
|
|
Str as ver,
|
|
Str as plat,
|
|
Hash as h
|
|
ON cc.name=name.id
|
|
AND cc.pname=pname.id
|
|
AND cc.version = ver.id
|
|
AND cc.platform = plat.id
|
|
AND cc.sha256 = h.id
|
|
)
|
|
LEFT JOIN Str AS tag
|
|
ON
|
|
cc.compat_tag=tag.id
|
|
GROUP BY
|
|
cc.pname, cc.version, cc.platform
|
|
HAVING
|
|
conflicts >= CAST(:min_conflicts AS INTEGER)
|
|
ORDER BY conflicts DESC
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
}
|
|
) { };
|
|
}
|
|
)
|