Initial flake commit

This commit is contained in:
Tim Van Baak 2024-07-07 23:00:24 -07:00
parent 9944ef61a7
commit c57023b567
2 changed files with 82 additions and 0 deletions

23
flake.lock generated Normal file
View File

@ -0,0 +1,23 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 0,
"narHash": "sha256-vboIEwIQojofItm2xGCdZCzW96U85l9nDW3ifMuAIdM=",
"path": "/nix/store/wzx1ba5hqqfa23vfrvqmfmkpj25p37mr-source",
"type": "path"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

59
flake.nix Normal file
View File

@ -0,0 +1,59 @@
{
outputs = { self, nixpkgs, ... }: let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
inherit (builtins) genericClosure hasAttr length map;
inherit (pkgs) runCommandLocal writeText;
inherit (pkgs.lib) concatLines concatLists concatMap filter isDerivation isList mapAttrsToList;
in {
lib = rec {
drvOutputs = drv:
if hasAttr "outputs" drv
then map (output: drv.${output}) drv.outputs
else [ drv ];
drvDeps = attrs:
mapAttrsToList (k: v:
if isDerivation v then (drvOutputs v)
else if isList v then concatMap drvOutputs (filter isDerivation v)
else []
) attrs;
wrap = drv: { key = drv.outPath; inherit drv; };
buildtimeDerivations = drv0: genericClosure {
startSet = map wrap (drvOutputs drv0);
operator = obj: map wrap (concatLists (drvDeps obj.drv.drvAttrs));
};
drvMaintainers = drv:
if ! hasAttr "meta" drv then []
else if ! hasAttr "maintainers" drv.meta then []
else drv.meta.maintainers;
nobodyMaintains = drv:
if ! hasAttr "meta" drv then true
else if ! hasAttr "maintainers" drv.meta then true
else (length drv.meta.maintainers) == 0;
maintainerToString = m: "${m.name} (${m.email})";
drvToString = drv: "${drv.name}";
};
bundlers."x86_64-linux" = with self.lib; {
maintainers = drv: let
deps = buildtimeDerivations drv;
drvs = map (dep: dep.drv) deps;
maintainers = concatMap drvMaintainers drvs;
maintainerNames = map maintainerToString maintainers;
maintainerNamesList = writeText "maintainers" (concatLines maintainerNames);
uniqNames = runCommandLocal "uniq-maintainers.txt" {} ''
<${maintainerNamesList} sort | uniq -c > $out
'';
in uniqNames;
adopt = drv: let
deps = buildtimeDerivations drv;
drvs = map (dep: dep.drv) deps;
drvsNoMain = filter nobodyMaintains drvs;
drvNames = map drvToString drvsNoMain;
drvNamesList = writeText "no-maintainers" (concatLines drvNames);
uniqNames = runCommandLocal "no-maintainers.txt" {} ''
<${drvNamesList} sort | uniq -c > $out
'';
in uniqNames;
};
};
}