33 pkgs ? import ../nixpkgs.nix { inherit system ; } ,
44 options ? { } ,
55} :
6- with pkgs . lib ;
7- with builtins ;
86let
7+ inherit ( builtins )
8+ concatStringsSep
9+ hasAttr
10+ head
11+ isAttrs
12+ isList
13+ isString
14+ ;
15+
16+ inherit ( pkgs . lib )
17+ attrByPath
18+ collect
19+ flatten
20+ isDerivation
21+ last
22+ mapAttrsRecursiveCond
23+ mapAttrsToList
24+ parseDrvName
25+ pipe
26+ ;
27+
28+ inherit ( pkgs . lib . options ) unknownModule ;
29+
930 inherit ( import ./types.nix { inherit pkgs options ; } )
1031 commandsFlatType
1132 commandsNestedType
1233 resolveKey
1334 strOrPackage
1435 ;
15- in
16- rec {
17- mergeDefs =
18- loc : defs :
19- let
20- t1 = commandsFlatType ;
21- t2 = commandsNestedType ;
22- defsFlat = t1 . merge loc ( map ( d : d // { value = if isList d . value then d . value else [ ] ; } ) defs ) ;
23- defsNested = t2 . merge loc (
24- map ( d : d // { value = if ! ( isList d . value ) then d . value else { } ; } ) defs
25- ) ;
26- in
27- {
28- inherit defsFlat defsNested ;
29- } ;
3036
3137 extractHelp = arg : if isList arg then head arg else null ;
3238
@@ -55,15 +61,13 @@ rec {
5561 else
5662 alternative ;
5763
58- normalizeCommandsFlat_ =
64+ mergeCommandsFlat =
5965 {
60- file ? unknownModule ,
66+ arg ,
6167 loc ? [ ] ,
62- arg ? [ ] ,
68+ file ? unknownModule ,
6369 } :
6470 pipe arg [
65- ( value : ( mergeDefs loc [ { inherit file value ; } ] ) . defsFlat )
66- ( map ( config : flattenNonAttrsOrElse config config ) )
6771 flatten
6872 ( map ( value : {
6973 inherit file ;
7276 ( commandsFlatType . merge loc )
7377 ] ;
7478
79+ normalizeCommandsFlat' = map ( config : flattenNonAttrsOrElse config config ) ;
80+
81+ normalizeCommandsFlat = arg : mergeCommandsFlat { arg = normalizeCommandsFlat' arg ; } ;
82+
7583 highlyUnlikelyAttrName = "adjd-laso-msle-copq-pcod" ;
7684
7785 collectLeaves =
@@ -89,15 +97,21 @@ rec {
8997 ( map ( x : x . ${ highlyUnlikelyAttrName } ) )
9098 ] ;
9199
92- normalizeCommandsNested_ =
93- {
94- file ? unknownModule ,
95- loc ? [ ] ,
96- arg ? { } ,
97- } :
100+ normalizeCommandsNested' =
101+ arg :
98102 pipe arg [
99103 # typecheck and augment configs with missing attributes (if a config is an attrset)
100- ( value : ( mergeDefs loc [ { inherit file value ; } ] ) . defsNested )
104+ (
105+ x :
106+ commandsNestedType . merge
107+ [ ]
108+ [
109+ {
110+ file = unknownModule ;
111+ value = x ;
112+ }
113+ ]
114+ )
101115 ( mapAttrsToList (
102116 category :
103117 map (
@@ -166,44 +180,21 @@ rec {
166180 )
167181 )
168182 ) )
169- flatten
170- ( map ( value : {
171- inherit file ;
172- value = [ value ] ;
173- } ) )
174- ( commandsFlatType . merge loc )
175183 ] ;
176184
177- normalizeCommandsNested = arg : normalizeCommandsNested_ { inherit arg ; } ;
178-
179- commandsType =
180- let
181- t1 = commandsFlatType ;
182- t2 = commandsNestedType ;
183- either = types . either t1 t2 ;
184- in
185- either
186- // rec {
187- name = "commandsType" ;
188- description = "(${ t1 . description } ) or (${ t2 . description } )" ;
189- merge =
190- loc : defs :
191- let
192- inherit ( mergeDefs loc defs ) defsFlat defsNested ;
193- defsFlatNormalized = normalizeCommandsFlat_ {
194- arg = defsFlat ;
195- inherit loc ;
196- } ;
197- defsNestedNormalized = normalizeCommandsNested_ {
198- arg = defsNested ;
199- inherit loc ;
200- } ;
201- defsMerged = defsFlatNormalized ++ defsNestedNormalized ;
202- in
203- defsMerged ;
204- getSubOptions = prefix : {
205- "${ t1 . name } " = t1 . getSubOptions prefix ;
206- "${ t2 . name } " = t2 . getSubOptions prefix ;
207- } ;
208- } ;
185+ normalizeCommandsNested = arg : mergeCommandsFlat { arg = normalizeCommandsNested' arg ; } ;
186+ in
187+ {
188+ inherit
189+ extractHelp
190+ resolveName
191+ flattenNonAttrsOrElse
192+ highlyUnlikelyAttrName
193+ collectLeaves
194+ mergeCommandsFlat
195+ normalizeCommandsFlat'
196+ normalizeCommandsFlat
197+ normalizeCommandsNested'
198+ normalizeCommandsNested
199+ ;
209200}
0 commit comments