| 
									
										
										
										
											2009-05-27 09:16:56 +00:00
										 |  |  | # From an end-user configuration file (`configuration'), build a NixOS | 
					
						
							|  |  |  | # configuration object (`config') from which we can retrieve option | 
					
						
							|  |  |  | # values. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 16:30:51 -04:00
										 |  |  | # !!! Please think twice before adding to this argument list! | 
					
						
							|  |  |  | # Ideally eval-config.nix would be an extremely thin wrapper | 
					
						
							|  |  |  | # around lib.evalModules, so that modular systems that have nixos configs | 
					
						
							|  |  |  | # as subcomponents (e.g. the container feature, or nixops if network | 
					
						
							|  |  |  | # expressions are ever made modular at the top level) can just use | 
					
						
							|  |  |  | # types.submodule instead of using eval-config.nix | 
					
						
							|  |  |  | { # !!! system can be set modularly, would be nice to remove | 
					
						
							|  |  |  |   system ? builtins.currentSystem | 
					
						
							|  |  |  | , # !!! is this argument needed any more? The pkgs argument can | 
					
						
							|  |  |  |   # be set modularly anyway. | 
					
						
							|  |  |  |   pkgs ? null | 
					
						
							|  |  |  | , # !!! what do we gain by making this configurable? | 
					
						
							|  |  |  |   baseModules ? import ../modules/module-list.nix | 
					
						
							|  |  |  | , # !!! See comment about args in lib/modules.nix | 
					
						
							|  |  |  |   extraArgs ? {} | 
					
						
							| 
									
										
										
										
											2015-08-09 14:40:01 +02:00
										 |  |  | , # !!! See comment about args in lib/modules.nix | 
					
						
							|  |  |  |   specialArgs ? {} | 
					
						
							| 
									
										
										
										
											2009-08-27 11:57:43 +00:00
										 |  |  | , modules | 
					
						
							| 
									
										
										
										
											2014-05-05 16:30:51 -04:00
										 |  |  | , # !!! See comment about check in lib/modules.nix | 
					
						
							|  |  |  |   check ? true | 
					
						
							| 
									
										
										
										
											2013-11-27 16:54:20 +01:00
										 |  |  | , prefix ? [] | 
					
						
							| 
									
										
										
										
											2014-05-05 15:52:33 -04:00
										 |  |  | , lib ? import ../../lib | 
					
						
							| 
									
										
										
										
											2009-06-05 13:19:39 +00:00
										 |  |  | }: | 
					
						
							| 
									
										
										
										
											2009-05-27 09:16:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-16 17:07:14 +01:00
										 |  |  | let extraArgs_ = extraArgs; pkgs_ = pkgs; system_ = system; | 
					
						
							|  |  |  |     extraModules = let e = builtins.getEnv "NIXOS_EXTRA_MODULE_PATH"; | 
					
						
							|  |  |  |                    in if e == "" then [] else [(import (builtins.toPath e))]; | 
					
						
							| 
									
										
										
										
											2014-05-05 15:52:33 -04:00
										 |  |  | in | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   pkgsModule = rec { | 
					
						
							|  |  |  |     _file = ./eval-config.nix; | 
					
						
							|  |  |  |     key = _file; | 
					
						
							|  |  |  |     config = { | 
					
						
							|  |  |  |       nixpkgs.system = lib.mkDefault system_; | 
					
						
							| 
									
										
										
										
											2015-03-12 23:19:23 +01:00
										 |  |  |       _module.args.pkgs = lib.mkIf (pkgs_ != null) (lib.mkForce pkgs_); | 
					
						
							| 
									
										
										
										
											2014-05-05 15:52:33 -04:00
										 |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-16 17:07:14 +01:00
										 |  |  | in rec { | 
					
						
							| 
									
										
										
										
											2009-06-05 13:19:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-26 16:52:38 +00:00
										 |  |  |   # Merge the option definitions in all modules, forming the full | 
					
						
							| 
									
										
										
										
											2013-10-28 15:48:20 +01:00
										 |  |  |   # system configuration. | 
					
						
							| 
									
										
										
										
											2014-05-05 15:52:33 -04:00
										 |  |  |   inherit (lib.evalModules { | 
					
						
							| 
									
										
										
										
											2014-05-05 16:23:57 -04:00
										 |  |  |     inherit prefix check; | 
					
						
							| 
									
										
										
										
											2014-05-05 15:52:33 -04:00
										 |  |  |     modules = modules ++ extraModules ++ baseModules ++ [ pkgsModule ]; | 
					
						
							| 
									
										
										
										
											2013-10-28 22:43:29 +01:00
										 |  |  |     args = extraArgs; | 
					
						
							| 
									
										
										
										
											2015-08-09 14:40:01 +02:00
										 |  |  |     specialArgs = { modulesPath = ../modules; } // specialArgs; | 
					
						
							| 
									
										
										
										
											2013-10-28 22:43:29 +01:00
										 |  |  |   }) config options; | 
					
						
							| 
									
										
										
										
											2009-08-26 16:52:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # These are the extra arguments passed to every module.  In | 
					
						
							|  |  |  |   # particular, Nixpkgs is passed through the "pkgs" argument. | 
					
						
							| 
									
										
										
										
											2009-08-05 14:43:13 +00:00
										 |  |  |   extraArgs = extraArgs_ // { | 
					
						
							| 
									
										
										
										
											2014-05-06 10:31:48 -04:00
										 |  |  |     inherit modules baseModules; | 
					
						
							| 
									
										
										
										
											2009-07-14 12:36:02 +00:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-12 23:19:23 +01:00
										 |  |  |   inherit (config._module.args) pkgs; | 
					
						
							| 
									
										
										
										
											2009-05-27 09:16:56 +00:00
										 |  |  | } |