That is, unless --file is specified, the Nix search path is synthesized into an attribute set. Thus you can say $ nix build nixpkgs.hello assuming $NIX_PATH contains an entry of the form "nixpkgs=...". This is more verbose than $ nix build hello but is less ambiguous.
		
			
				
	
	
		
			48 lines
		
	
	
	
		
			988 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			988 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | ||
| 
 | ||
| #include "args.hh"
 | ||
| 
 | ||
| namespace nix {
 | ||
| 
 | ||
| struct UserEnvElem
 | ||
| {
 | ||
|     Strings attrPath;
 | ||
| 
 | ||
|     // FIXME: should use boost::variant or so.
 | ||
|     bool isDrv;
 | ||
| 
 | ||
|     // Derivation case:
 | ||
|     Path drvPath;
 | ||
|     StringSet outputNames;
 | ||
| 
 | ||
|     // Non-derivation case:
 | ||
|     PathSet outPaths;
 | ||
| };
 | ||
| 
 | ||
| typedef std::vector<UserEnvElem> UserEnvElems;
 | ||
| 
 | ||
| struct Value;
 | ||
| class EvalState;
 | ||
| 
 | ||
| struct MixInstallables : virtual Args
 | ||
| {
 | ||
|     Strings installables;
 | ||
|     Path file;
 | ||
| 
 | ||
|     MixInstallables()
 | ||
|     {
 | ||
|         mkFlag('f', "file", "file", "evaluate FILE rather than the default", &file);
 | ||
|         expectArgs("installables", &installables);
 | ||
|     }
 | ||
| 
 | ||
|     UserEnvElems evalInstallables(ref<Store> store);
 | ||
| 
 | ||
|     /* Return a value representing the Nix expression from which we
 | ||
|        are installing. This is either the file specified by ‘--file’,
 | ||
|        or an attribute set constructed from $NIX_PATH, e.g. ‘{ nixpkgs
 | ||
|        = import ...; bla = import ...; }’. */
 | ||
|     Value * buildSourceExpr(EvalState & state);
 | ||
| 
 | ||
| };
 | ||
| 
 | ||
| }
 |