| 
									
										
										
										
											2016-12-29 16:23:51 -05:00
										 |  |  | # From an end-user configuration file (`configuration.nix'), build a NixOS | 
					
						
							| 
									
										
										
										
											2009-05-27 09:16:56 +00:00
										 |  |  | # 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-05 15:22:45 -04:00
										 |  |  | let extraArgs_ = extraArgs; pkgs_ = pkgs; | 
					
						
							| 
									
										
										
										
											2014-12-16 17:07:14 +01:00
										 |  |  |     extraModules = let e = builtins.getEnv "NIXOS_EXTRA_MODULE_PATH"; | 
					
						
							| 
									
										
										
										
											2018-05-22 16:42:02 -04:00
										 |  |  |                    in if e == "" then [] else [(import e)]; | 
					
						
							| 
									
										
										
										
											2014-05-05 15:52:33 -04:00
										 |  |  | in | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   pkgsModule = rec { | 
					
						
							|  |  |  |     _file = ./eval-config.nix; | 
					
						
							|  |  |  |     key = _file; | 
					
						
							|  |  |  |     config = { | 
					
						
							| 
									
										
										
										
											2018-05-17 18:53:13 -04:00
										 |  |  |       # Explicit `nixpkgs.system` or `nixpkgs.localSystem` should override | 
					
						
							|  |  |  |       # this.  Since the latter defaults to the former, the former should | 
					
						
							|  |  |  |       # default to the argument. That way this new default could propagate all | 
					
						
							|  |  |  |       # they way through, but has the last priority behind everything else. | 
					
						
							|  |  |  |       nixpkgs.system = lib.mkDefault system; | 
					
						
							| 
									
										
										
										
											2020-03-04 23:24:22 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |       # Stash the value of the `system` argument. When using `nesting.children` | 
					
						
							|  |  |  |       # we want to have the same default value behavior (immediately above) | 
					
						
							|  |  |  |       # without any interference from the user's configuration. | 
					
						
							|  |  |  |       nixpkgs.initialSystem = 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; | 
					
						
							| 
									
										
										
										
											2018-09-23 21:34:36 +02:00
										 |  |  |     modules = baseModules ++ extraModules ++ [ pkgsModule ] ++ modules; | 
					
						
							| 
									
										
										
										
											2013-10-28 22:43:29 +01:00
										 |  |  |     args = extraArgs; | 
					
						
							| 
									
										
										
										
											2018-10-29 13:06:55 +01:00
										 |  |  |     specialArgs = | 
					
						
							|  |  |  |       { modulesPath = builtins.toString ../modules; } // specialArgs; | 
					
						
							| 
									
										
										
										
											2020-03-19 21:19:25 +01:00
										 |  |  |   }) config options _module; | 
					
						
							| 
									
										
										
										
											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_ // { | 
					
						
							| 
									
										
										
										
											2018-09-23 21:34:36 +02:00
										 |  |  |     inherit baseModules extraModules modules; | 
					
						
							| 
									
										
										
										
											2009-07-14 12:36:02 +00:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-19 21:19:25 +01:00
										 |  |  |   inherit (_module.args) pkgs; | 
					
						
							| 
									
										
										
										
											2009-05-27 09:16:56 +00:00
										 |  |  | } |