 73f18fd42f
			
		
	
	
		73f18fd42f
		
	
	
	
	
		
			
			This is useful for adding extra functionality or defaults to _every_ nixos evaluation. My use case is overriding behaviour for all nixos tests, for example setting packageOverrides to newer versions and changing some default dependencies/settings. By making this accessible through an environment variable, this can now be fully accomplished externally. No more need to fork nixos/nixpkgs (which becomes a maintenance burden), just use the channel instead and plug in via this envvar.
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| # From an end-user configuration file (`configuration'), build a NixOS
 | ||
| # configuration object (`config') from which we can retrieve option
 | ||
| # values.
 | ||
| 
 | ||
| { system ? builtins.currentSystem
 | ||
| , pkgs ? null
 | ||
| , baseModules ? import ../modules/module-list.nix
 | ||
| , extraArgs ? {}
 | ||
| , modules
 | ||
| , check ? true
 | ||
| , prefix ? []
 | ||
| }:
 | ||
| 
 | ||
| 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))];
 | ||
| in rec {
 | ||
| 
 | ||
|   # Merge the option definitions in all modules, forming the full
 | ||
|   # system configuration.
 | ||
|   inherit (pkgs.lib.evalModules {
 | ||
|     inherit prefix;
 | ||
|     modules = modules ++ extraModules ++ baseModules;
 | ||
|     args = extraArgs;
 | ||
|     check = check && options.environment.checkConfigurationOptions.value;
 | ||
|   }) config options;
 | ||
| 
 | ||
|   # These are the extra arguments passed to every module.  In
 | ||
|   # particular, Nixpkgs is passed through the "pkgs" argument.
 | ||
|   # FIXME: we enable config.allowUnfree to make packages like
 | ||
|   # nvidia-x11 available. This isn't a problem because if the user has
 | ||
|   # ‘nixpkgs.config.allowUnfree = false’, then evaluation will fail on
 | ||
|   # the 64-bit package anyway. However, it would be cleaner to respect
 | ||
|   # nixpkgs.config here.
 | ||
|   extraArgs = extraArgs_ // {
 | ||
|     inherit pkgs modules baseModules;
 | ||
|     modulesPath = ../modules;
 | ||
|     pkgs_i686 = import ./nixpkgs.nix { system = "i686-linux"; config.allowUnfree = true; };
 | ||
|     utils = import ./utils.nix pkgs;
 | ||
|   };
 | ||
| 
 | ||
|   # Import Nixpkgs, allowing the NixOS option nixpkgs.config to
 | ||
|   # specify the Nixpkgs configuration (e.g., to set package options
 | ||
|   # such as firefox.enableGeckoMediaPlayer, or to apply global
 | ||
|   # overrides such as changing GCC throughout the system), and the
 | ||
|   # option nixpkgs.system to override the platform type.  This is
 | ||
|   # tricky, because we have to prevent an infinite recursion: "pkgs"
 | ||
|   # is passed as an argument to NixOS modules, but the value of "pkgs"
 | ||
|   # depends on config.nixpkgs.config, which we get from the modules.
 | ||
|   # So we call ourselves here with "pkgs" explicitly set to an
 | ||
|   # instance that doesn't depend on nixpkgs.config.
 | ||
|   pkgs =
 | ||
|     if pkgs_ != null
 | ||
|     then pkgs_
 | ||
|     else import ./nixpkgs.nix (
 | ||
|       let
 | ||
|         system = if nixpkgsOptions.system != "" then nixpkgsOptions.system else system_;
 | ||
|         nixpkgsOptions = (import ./eval-config.nix {
 | ||
|           inherit system extraArgs modules prefix;
 | ||
|           # For efficiency, leave out most NixOS modules; they don't
 | ||
|           # define nixpkgs.config, so it's pointless to evaluate them.
 | ||
|           baseModules = [ ../modules/misc/nixpkgs.nix ../modules/config/no-x-libs.nix ];
 | ||
|           pkgs = import ./nixpkgs.nix { system = system_; config = {}; };
 | ||
|           check = false;
 | ||
|         }).config.nixpkgs;
 | ||
|       in
 | ||
|       {
 | ||
|         inherit system;
 | ||
|         inherit (nixpkgsOptions) config;
 | ||
|       });
 | ||
| 
 | ||
| }
 |