at 17.09-beta 1.6 kB view raw
1{ config, lib, ... }: 2 3with lib; 4 5let 6 maintainer = mkOptionType { 7 name = "maintainer"; 8 check = email: elem email (attrValues lib.maintainers); 9 merge = loc: defs: listToAttrs (singleton (nameValuePair (last defs).file (last defs).value)); 10 }; 11 12 listOfMaintainers = types.listOf maintainer // { 13 # Returns list of 14 # { "module-file" = [ 15 # "maintainer1 <first@nixos.org>" 16 # "maintainer2 <second@nixos.org>" ]; 17 # } 18 merge = loc: defs: 19 zipAttrs 20 (flatten (imap1 (n: def: imap1 (m: def': 21 maintainer.merge (loc ++ ["[${toString n}-${toString m}]"]) 22 [{ inherit (def) file; value = def'; }]) def.value) defs)); 23 }; 24 25 docFile = types.path // { 26 # Returns tuples of 27 # { file = "module location"; value = <path/to/doc.xml>; } 28 merge = loc: defs: defs; 29 }; 30in 31 32{ 33 options = { 34 meta = { 35 36 maintainers = mkOption { 37 type = listOfMaintainers; 38 internal = true; 39 default = []; 40 example = [ lib.maintainers.all ]; 41 description = '' 42 List of maintainers of each module. This option should be defined at 43 most once per module. 44 ''; 45 }; 46 47 doc = mkOption { 48 type = docFile; 49 internal = true; 50 example = "./meta.xml"; 51 description = '' 52 Documentation prologe for the set of options of each module. This 53 option should be defined at most once per module. 54 ''; 55 }; 56 57 }; 58 }; 59 60 meta.maintainers = singleton lib.maintainers.pierron; 61}