64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								{ config, lib, ... }:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								with lib;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let
							 | 
						||
| 
								 | 
							
								  maintainer = mkOptionType {
							 | 
						||
| 
								 | 
							
								    name = "maintainer";
							 | 
						||
| 
								 | 
							
								    check = email: elem email (attrValues lib.maintainers);
							 | 
						||
| 
								 | 
							
								    merge = loc: defs: listToAttrs (singleton (nameValuePair (last defs).file (last defs).value));
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  listOfMaintainers = types.listOf maintainer // {
							 | 
						||
| 
								 | 
							
								    # Returns list of
							 | 
						||
| 
								 | 
							
								    #   { "module-file" = [
							 | 
						||
| 
								 | 
							
								    #        "maintainer1 <first@nixos.org>"
							 | 
						||
| 
								 | 
							
								    #        "maintainer2 <second@nixos.org>" ];
							 | 
						||
| 
								 | 
							
								    #   }
							 | 
						||
| 
								 | 
							
								    merge = loc: defs:
							 | 
						||
| 
								 | 
							
								      zipAttrs
							 | 
						||
| 
								 | 
							
								        (flatten (imap (n: def: imap (m: def':
							 | 
						||
| 
								 | 
							
								          maintainer.merge (loc ++ ["[${toString n}-${toString m}]"])
							 | 
						||
| 
								 | 
							
								            [{ inherit (def) file; value = def'; }]) def.value) defs));
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  docFile = types.path // {
							 | 
						||
| 
								 | 
							
								    # Returns tuples of
							 | 
						||
| 
								 | 
							
								    #   { file = "module location"; value = <path/to/doc.xml>; }
							 | 
						||
| 
								 | 
							
								    merge = loc: defs: defs;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								in
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  options = {
							 | 
						||
| 
								 | 
							
								    meta = {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      maintainers = mkOption {
							 | 
						||
| 
								 | 
							
								        type = listOfMaintainers;
							 | 
						||
| 
								 | 
							
								        internal = true;
							 | 
						||
| 
								 | 
							
								        default = [];
							 | 
						||
| 
								 | 
							
								        example = [ lib.maintainers.all ];
							 | 
						||
| 
								 | 
							
								        description = ''
							 | 
						||
| 
								 | 
							
									  List of maintainers of each module.  This option should be defined at
							 | 
						||
| 
								 | 
							
								          most once per module.
							 | 
						||
| 
								 | 
							
								        '';
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      doc = mkOption {
							 | 
						||
| 
								 | 
							
								        type = docFile;
							 | 
						||
| 
								 | 
							
								        internal = true;
							 | 
						||
| 
								 | 
							
								        example = "./meta.xml";
							 | 
						||
| 
								 | 
							
								        description = ''
							 | 
						||
| 
								 | 
							
									  Documentation prologe for the set of options of each module.  This
							 | 
						||
| 
								 | 
							
								          option should be defined at most once per module.
							 | 
						||
| 
								 | 
							
								        '';
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  config = {
							 | 
						||
| 
								 | 
							
								    meta.maintainers = singleton lib.maintainers.pierron;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 |