diff --git a/default.nix b/default.nix index 6ef5f0b..c5c2096 100644 --- a/default.nix +++ b/default.nix @@ -1,48 +1,85 @@ -{ pkgs ? import {}, ... }: let - inherit (builtins) genericClosure hasAttr length map; +{ + 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 { + 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 [] + 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; + 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 - ''; + 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 - ''; + 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 88b49e5..3c961d1 100644 --- a/flake.nix +++ b/flake.nix @@ -1,13 +1,18 @@ { - outputs = { self, nixpkgs, ... }: let - system = "x86_64-linux"; - pkgs = nixpkgs.legacyPackages.${system}; - lib = import ./default.nix { inherit pkgs; }; - in { - bundlers."x86_64-linux" = rec { - default = adopt; - maintainers = lib.allMaintainers; - adopt = lib.noMaintainers; + outputs = + { self, nixpkgs, ... }: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + lib = import ./default.nix { inherit pkgs; }; + in + { + bundlers."x86_64-linux" = rec { + default = adopt; + maintainers = lib.allMaintainers; + adopt = lib.noMaintainers; + }; + + formatter."x86_64-linux" = pkgs.nixfmt-rfc-style; }; - }; }