From 6efb6110a6a11d86c08ff6010dcbff131f03e672 Mon Sep 17 00:00:00 2001 From: Tim Van Baak Date: Mon, 8 Jul 2024 12:37:49 -0700 Subject: [PATCH] Move logic to default.nix --- default.nix | 48 +++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 56 ++++------------------------------------------------- 2 files changed, 52 insertions(+), 52 deletions(-) create mode 100644 default.nix diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..6ef5f0b --- /dev/null +++ b/default.nix @@ -0,0 +1,48 @@ +{ pkgs ? import {}, ... }: let + inherit (builtins) genericClosure hasAttr length map; + inherit (pkgs) runCommandLocal writeText; + inherit (pkgs.lib) concatLines concatLists concatMap filter isDerivation isList mapAttrsToList; +in rec { + drvOutputs = drv: if hasAttr "outputs" drv then map (out: drv.${out}) drv.outputs else [ drv ]; + drvDeps = drv: + mapAttrsToList (k: v: + if isDerivation v then (drvOutputs v) + else if isList v then concatMap drvOutputs (filter isDerivation v) + else [] + ) drv; + drvClosure = let + wrap = drv: { key = drv.outPath; inherit drv; }; + in drv: map (obj: obj.drv) (genericClosure { + startSet = map wrap (drvOutputs drv); + 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: + hasAttr "meta" drv && + hasAttr "maintainers" drv.meta && + (length drv.meta.maintainers) == 0; + stringJoin = objToString: objs: writeText "txt" (concatLines (map objToString objs)); + + allMaintainers = drv: let + closure = drvClosure drv; + maintainers = concatMap drvMaintainers closure; + mainToString = m: "${m.name} (${m.email})"; + in runCommandLocal "uniq-maintainers.txt" {} '' + <${stringJoin mainToString maintainers} sort | uniq -c > $out + ''; + + noMaintainers = drv: let + closure = drvClosure drv; + unmaintained = filter nobodyMaintains closure; + drvToString = drv: "${drv.name} ${drv.meta.position}"; + in runCommandLocal "no-maintainers.txt" {} '' + <${stringJoin drvToString unmaintained} sort -u \ + | sed 's/\/nix\/store\/[^/]*/https:\/\/github.com\/NixOS\/nixpkgs\/blob\/master/' \ + | sed 's/.nix:\(.*\)$/#L\1/' \ + | ${pkgs.unixtools.column}/bin/column -t \ + > $out + ''; +} diff --git a/flake.nix b/flake.nix index 78538e0..88b49e5 100644 --- a/flake.nix +++ b/flake.nix @@ -2,60 +2,12 @@ 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; + lib = import ./default.nix { inherit pkgs; }; 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: map (obj: obj.drv) (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: - hasAttr "meta" drv && - hasAttr "maintainers" drv.meta && - (length drv.meta.maintainers) == 0; - stringJoin = objToString: objs: writeText "txt" (concatLines (map objToString objs)); - maintainerToString = m: "${m.name} (${m.email})"; - drvToString = drv: "${drv.name}"; - }; - bundlers."x86_64-linux" = with self.lib; rec { + bundlers."x86_64-linux" = rec { default = adopt; - maintainers = drv: let - drvs = buildtimeDerivations drv; - maintainers = concatMap drvMaintainers drvs; - maintainerNamesList = stringJoin (m: "${m.name} (${m.email})") maintainers; - uniqNames = runCommandLocal "uniq-maintainers.txt" {} '' - <${maintainerNamesList} sort | uniq -c > $out - ''; - in uniqNames; - adopt = drv: let - drvs = buildtimeDerivations drv; - drvsNoMain = filter nobodyMaintains drvs; - drvNamesList = stringJoin (drv: "${drv.name} ${drv.meta.position}") drvsNoMain; - uniqNames = runCommandLocal "no-maintainers.txt" {} '' - <${drvNamesList} sort -u \ - | sed 's/\/nix\/store\/[^/]*/https:\/\/github.com\/NixOS\/nixpkgs\/blob\/master/' \ - | sed 's/.nix:\(.*\)$/#L\1/' \ - | ${pkgs.unixtools.column}/bin/column -t \ - > $out - ''; - in uniqNames; + maintainers = lib.allMaintainers; + adopt = lib.noMaintainers; }; }; }