at master 1.6 kB view raw
1# Test: 2# ./meta-maintainers/test.nix 3{ lib, ... }: 4let 5 inherit (lib) 6 mkOption 7 mkOptionType 8 types 9 ; 10 11 maintainer = mkOptionType { 12 name = "maintainer"; 13 check = email: lib.elem email (lib.attrValues lib.maintainers); 14 merge = loc: defs: { 15 # lib.last: Perhaps this could be merged instead, if "at most once per module" 16 # is a problem (see option description). 17 ${(lib.last defs).file} = (lib.last defs).value; 18 }; 19 }; 20 21 listOfMaintainers = types.listOf maintainer // { 22 merge = 23 loc: defs: 24 lib.zipAttrs ( 25 lib.flatten ( 26 lib.imap1 ( 27 n: def: 28 lib.imap1 ( 29 m: def': 30 maintainer.merge (loc ++ [ "[${toString n}-${toString m}]" ]) [ 31 { 32 inherit (def) file; 33 value = def'; 34 } 35 ] 36 ) def.value 37 ) defs 38 ) 39 ); 40 }; 41in 42{ 43 _class = null; # not specific to NixOS 44 options = { 45 meta = { 46 maintainers = mkOption { 47 type = listOfMaintainers; 48 default = [ ]; 49 example = lib.literalExpression ''[ lib.maintainers.alice lib.maintainers.bob ]''; 50 description = '' 51 List of maintainers of each module. 52 This option should be defined at most once per module. 53 54 The option value is not a list of maintainers, but an attribute set that maps module file names to lists of maintainers. 55 ''; 56 }; 57 }; 58 }; 59 meta.maintainers = with lib.maintainers; [ 60 pierron 61 roberth 62 ]; 63}