Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
nix.conf(5)		      File Formats Manual		   nix.conf(5)

Name
       nix.conf	- Nix configuration file

Description
       Nix  supports  a	variety	of configuration settings, which are read from
       configuration files or taken as command line flags.

   Configuration file
       By default Nix reads settings from the following	places,	in that	order:

       1. The system-wide  configuration  file	sysconfdir/nix/nix.conf	 (i.e.
	  /etc/nix/nix.conf  on	 most  systems),  or $NIX_CONF_DIR/nix.conf if
	  NIX_CONF_DIR <./env-common.md#env-NIX_CONF_DIR> is set.

	  Values loaded	in this	file are not forwarded to the Nix daemon.  The
	  client assumes that the daemon has already loaded them.

       2. If NIX_USER_CONF_FILES <./env-common.md#env-NIX_USER_CONF_FILES>  is
	  set, then each path separated	by : will be loaded in reverse order.

	  Otherwise it will look for nix/nix.conf files	in XDG_CONFIG_DIRS and
	  XDG_CONFIG_HOME  <./env-common.md#env-XDG_CONFIG_HOME>.   If	unset,
	  XDG_CONFIG_DIRS defaults to /etc/xdg,	and  XDG_CONFIG_HOME  defaults
	  to   $HOME/.config   as   per	  XDG	Base  Directory	 Specification
	  <https://specifications.freedesktop.org/basedir-spec/basedir-spec-
	  latest.html>.

       3. If NIX_CONFIG	<./env-common.md#env-NIX_CONFIG> is set, its  contents
	  are treated as the contents of a configuration file.

   File	format
       Configuration  files consist of name = value pairs, one per line.  Com-
       ments start with	a # character.

       Example:

       keep-outputs = true	 # Nice	for developers
       keep-derivations	= true	 # Idem

       Other files can be included with	a  line	 like  include	<path>,	 where
       <path>  is  interpreted	relative to the	current	configuration file.  A
       missing file is an error	unless !include	is used	instead.

       A configuration setting usually overrides any previous value.  However,
       for settings that take a	list of	items, you can prefix the name of  the
       setting by extra- to append to the previous value.

       For instance,

       substituters = a	b
       extra-substituters = c d

       defines the substituters	setting	to be a	b c d.

       Unknown	option	names  are not an error, and are simply	ignored	with a
       warning.

   Command line	flags
       Configuration options can be set	on the command	line,  overriding  the
       values set in the configuration file <#configuration-file>:

         Every	 configuration	setting	 has  corresponding  command line flag
	  (e.g.	--max-jobs 16).	 Boolean settings do not need an argument, and
	  can be explicitly disabled with the no- prefix  (e.g.	 --keep-failed
	  and --no-keep-failed).

	  Unknown  option  names  are invalid flags (unless there is already a
	  flag with that name),	and are	rejected with an error.

         The flag --option <name>  <value>  is	 interpreted  exactly  like  a
	  <name> = <value> in a	setting	file.

	  Unknown option names are ignored with	a warning.

       The  extra-  prefix is supported	for settings that take a list of items
       (e.g. --extra-trusted users alice or --option  extra-trusted-users  al-
       ice).

   Integer settings
       Settings	 that have an integer type support the suffixes	K, M, G	and T.
       These cause the specified value to be multiplied	by  2^10,  2^20,  2^30
       and  2^40,  respectively.  For instance,	--min-free 1M is equivalent to
       --min-free 1048576.

Available settings
         abort-on-warn	<#conf-abort-on-warn>

	  If	      set	    to		 true,		 builtins.warn
	  <@docroot@/language/builtins.md#builtins-warn>  throws an error when
	  logging a warning.

	  This will give you a stack trace that	leads to the location  of  the
	  warning.

	  This is useful for finding information about warnings	in third-party
	  Nix  code  when  you can not start the interactive debugger, such as
	  when Nix is called from a non-interactive script.  See  debugger-on-
	  warn <#conf-debugger-on-warn>.

	  Currently,  a	 stack trace can only be produced when the debugger is
	  enabled, or when evaluation is aborted.

	  This option can be enabled by	setting	NIX_ABORT_ON_WARN=1 in the en-
	  vironment.

	  Default: false

         accept-flake-config <#conf-accept-flake-config>

		 Warning

		 This setting  is  part	 of  an	 experimental  feature	<@doc-
		 root@/development/experimental-features.md>.

		 To  change  this  setting,  make sure the flakes experimental
		 feature   <@docroot@/development/experimental-features.md#xp-
		 feature-flakes> is enabled.  For example, include the follow-
		 ing in	nix.conf <@docroot@/command-ref/conf-file.md>:

	  extra-experimental-features =	flakes
	  accept-flake-config =	...

	  Whether  to  accept  Nix configuration settings from a flake without
	  prompting.

	  Default: false

         access-tokens	<#conf-access-tokens>

	  Access tokens	used to	access protected GitHub, GitLab, or other  lo-
	  cations requiring token-based	authentication.

	  Access  tokens  are specified	as a string made up of space-separated
	  host=token values.  The specific token used is selected by  matching
	  the  host portion against the	"host" specification of	the input. The
	  host portion may contain a path element which	 matches  against  the
	  prefix URL for the input. (eg: github.com/org=token).	The actual use
	  of  the  token value is determined by	the type of resource being ac-
	  cessed:

	    Github: the token value is	the OAUTH-TOKEN	string obtained	as the
	     Personal	Access	 Token	 from	the   Github	server	  (see
	     <https://docs.github.com/en/developers/apps/building-oauth-
	     apps/authorizing-oauth-apps>).

	    Gitlab:  the  token  value	is either the OAuth2 token or the Per-
	     sonal Access Token	(these are different types tokens for  gitlab,
	     see <https://docs.gitlab.com/12.10/ee/api/README.html#authentica-
	     tion>).  The token	value should be	type:tokenstring where type is
	     either  OAuth2  or	 PAT  to indicate which	type of	token is being
	     specified.

	  Example ~/.config/nix/nix.conf:

       access-tokens = github.com=23ac...b289 gitlab.mycompany.com=PAT:A123Bp_Cd..EfG gitlab.com=OAuth2:1jklw3jk

	      Example ~/code/flake.nix:

       input.foo = {
       type = "gitlab";
       host = "gitlab.mycompany.com";
       owner = "mycompany";
       repo = "pro";
       };

	      This example specifies three  tokens,  one  each	for  accessing
	      github.com, gitlab.mycompany.com,	and gitlab.com.

	      The  input.foo  uses  the	"gitlab" fetcher, which	might requires
	      specifying the token type	along with the token value.

	      Default: empty

         allow-dirty <#conf-allow-dirty>

	  Whether to allow dirty Git/Mercurial trees.

	  Default: true

         allow-dirty-locks <#conf-allow-dirty-locks>

		 Warning

		 This setting  is  part	 of  an	 experimental  feature	<@doc-
		 root@/development/experimental-features.md>.

		 To  change  this  setting,  make sure the flakes experimental
		 feature   <@docroot@/development/experimental-features.md#xp-
		 feature-flakes> is enabled.  For example, include the follow-
		 ing in	nix.conf <@docroot@/command-ref/conf-file.md>:

	  extra-experimental-features =	flakes
	  allow-dirty-locks = ...

	  Whether  to  allow  dirty  inputs (such as dirty Git workdirs) to be
	  locked via their NAR hash. This is generally bad practice since  Nix
	  has  no way to obtain	such inputs if they are	subsequently modified.
	  Therefore lock files with dirty locks	should generally only be  used
	  for local testing, and should	not be pushed to other users.

	  Default: false

         allow-import-from-derivation <#conf-allow-import-from-derivation>

	  By  default,	Nix  allows  Import  from  Derivation  <@docroot@/lan-
	  guage/import-from-derivation.md>.

	  With this option set to false, Nix throws an error  when  evaluating
	  an  expression  that uses this feature, even when the	required store
	  object is readily available.	This ensures that  evaluation  doesn't
	  require  any	builds	to  take place,	regardless of the state	of the
	  store.

	  Default: true

         allow-symlinked-store	<#conf-allow-symlinked-store>

	  If set to true, Nix stops complaining	if the store directory	(typi-
	  cally	/nix/store) contains symlink components.

	  This	risks  making  some builds "impure" because builders sometimes
	  "canonicalise" paths by resolving all	symlink	 components.  Problems
	  occur	if those builds	are then deployed to machines where /nix/store
	  resolves to a	different location from	that of	the build machine. You
	  can enable this setting if you are sure you're not going to do that.

	  Default: false

         allow-unsafe-native-code-during-evaluation	  <#conf-allow-unsafe-
	  native-code-during-evaluation>

	  Enable built-in functions that allow executing native	code.

	  In particular, this adds:

	    builtins.importNative path	symbol

	  Opens	dynamic	shared object (DSO) at path, loads the	function  with
	  the  symbol  name  symbol  from it and runs it.  The loaded function
	  must have the	following  signature:  cpp  extern  "C"	 typedef  void
	  (*ValueInitialiser) (EvalState & state, Value	& v);

	  The		Nix	      C++	    API		 documentation
	  <@docroot@/development/documentation.md#api-documentation> has  more
	  details on evaluator internals.

	    builtins.exec arguments

	  Execute  a  program,	where  arguments  are  specified  as a list of
	  strings, and parse its output	as a Nix expression.

	  Default: false

         allowed-impure-host-deps <#conf-allowed-impure-host-deps>

	  Which	prefixes to allow derivations to ask for access	to  (primarily
	  for Darwin).

	  Default: empty

         allowed-uris <#conf-allowed-uris>

	  A  list  of  URI  prefixes  to which access is allowed in restricted
	  evaluation mode. For example,	when set to  https://github.com/NixOS,
	  builtin   functions	such   as   fetchGit  are  allowed  to	access
	  https://github.com/NixOS/patchelf.git.

	  Access is granted when

	    the URI is	equal to the prefix,
	    or	the URI	is a subpath of	the prefix,
	    or	the prefix is a	URI scheme ended by a colon : and the URI  has
	     the same scheme.

	  Default: empty

         allowed-users	<#conf-allowed-users>

	  A list user names, separated by whitespace.  These users are allowed
	  to connect to	the Nix	daemon.

	  You  can  specify  groups  by	prefixing names	with @.	 For instance,
	  @wheel means all users in the	wheel group.  Also, you	can allow  all
	  users	by specifying *.

		 Note

		 Trusted  users	 (set  in trusted-users	<#conf-trusted-users>)
		 can always connect to the Nix daemon.

	  Default: *

         always-allow-substitutes <#conf-always-allow-substitutes>

	  If   set    to    true,    Nix    ignores    the    allowSubstitutes
	  <@docroot@/language/advanced-attributes.md> attribute	in derivations
	  and  always  attempt	to  use	 available substituters	<#conf-substi-
	  tuters>.

	  Default: false

         auto-allocate-uids <#conf-auto-allocate-uids>

		 Warning

		 This setting  is  part	 of  an	 experimental  feature	<@doc-
		 root@/development/experimental-features.md>.

		 To  change this setting, make sure the	auto-allocate-uids ex-
		 perimental    feature	  <@docroot@/development/experimental-
		 features.md#xp-feature-auto-allocate-uids>  is	 enabled.  For
		 example, include the following	 in  nix.conf  <@docroot@/com-
		 mand-ref/conf-file.md>:

	  extra-experimental-features =	auto-allocate-uids
	  auto-allocate-uids = ...

	  Whether  to  select  UIDs for	builds automatically, instead of using
	  the users in build-users-group.

	  UIDs are allocated starting at 872415232 (0x34000000)	on  Linux  and
	  56930	on macOS.

	  Default: false

         auto-optimise-store <#conf-auto-optimise-store>

	  If  set  to  true, Nix automatically detects files in	the store that
	  have identical contents, and replaces	them with hard links to	a sin-
	  gle copy. This saves disk space. If set to false (the	default),  you
	  can still run	nix-store --optimise to	get rid	of duplicate files.

	  Default: false

         bash-prompt <#conf-bash-prompt>

	  The bash prompt (PS1)	in nix develop shells.

	  Default: empty

         bash-prompt-prefix <#conf-bash-prompt-prefix>

	  Prefix  prepended  to	 the  PS1  environment variable	in nix develop
	  shells.

	  Default: empty

         bash-prompt-suffix <#conf-bash-prompt-suffix>

	  Suffix appended to the  PS1  environment  variable  in  nix  develop
	  shells.

	  Default: empty

         build-dir <#conf-build-dir>

	  Override  the	 build-dir store setting for all stores	that have this
	  setting.

	  Default: ``

         build-hook <#conf-build-hook>

	  The path to the helper program that executes remote builds.

	  Nix communicates with	the build hook over stdio using	a custom  pro-
	  tocol	to request builds that cannot be performed directly by the Nix
	  daemon.   The	 default  value	is the internal	Nix binary that	imple-
	  ments	remote building.

		 Important

		 Change	this setting only if you really	know what youre	doing.

	  Default: nix __build-remote

         build-poll-interval <#conf-build-poll-interval>

	  How often (in	seconds) to poll for locks.

	  Default: 5

         build-users-group <#conf-build-users-group>

	  This options specifies the Unix group	containing the Nix build  user
	  accounts. In multi-user Nix installations, builds should not be per-
	  formed  by the Nix account since that	would allow users to arbitrar-
	  ily modify the Nix store and database	by supplying specially crafted
	  builders; and	they cannot be performed by  the  calling  user	 since
	  that would allow him/her to influence	the build result.

	  Therefore,  if this option is	non-empty and specifies	a valid	group,
	  builds are performed under the user accounts that are	 a  member  of
	  the  group  specified	here (as listed	in /etc/group).	Those user ac-
	  counts should	not be used for	any other purpose!

	  Nix never runs two builds under the same user	account	 at  the  same
	  time.	 This is to prevent an obvious security	hole: a	malicious user
	  writing a Nix	expression that	modifies the build result of a legiti-
	  mate Nix expression being built by another  user.  Therefore	it  is
	  good to have as many Nix build user accounts as you can spare.  (Re-
	  member: uids are cheap.)

	  The  build  users  should have permission to create files in the Nix
	  store, but not delete	them. Therefore, /nix/store should be owned by
	  the Nix account, its group should be the group specified  here,  and
	  its mode should be 1775.

	  If the build users group is empty, builds areperformed under the uid
	  of  the Nix process (that is,	the uid	of the caller if NIX_REMOTE is
	  empty, the uid under which the Nix daemon runs if NIX_REMOTE is dae-
	  mon).	Obviously, this	should not be used with	a nix daemon  accessi-
	  ble to untrusted clients.

	  Defaults to nixbld when running as root, empty otherwise.

	  Default: machine-specific

         builders <#conf-builders>

	  A semicolon- or newline-separated list of build machines.

	  In  addition	to  the	 usual	ways  of setting configuration options
	  <@docroot@/command-ref/conf-file.md>,	the value can be read  from  a
	  file by prefixing its	absolute path with @.

		 Example

		 This is the default setting:

	  builders = @/etc/nix/machines

	  Each machine specification consists of the following elements, sepa-
	  rated	 by  spaces.   Only the	first element is required.  To leave a
	  field	at its default,	set it to -.

	  1. The URI of	the remote store in the	format	ssh://[username@]host-
	     name[:port].

		    Example

		    ssh://nix@mac

	     For  backward compatibility, ssh:// may be	omitted.  The hostname
	     may be an alias defined in	~/.ssh/config.

	  2. A comma-separated list of Nix  system  types  <@docroot@/develop-
	     ment/building.md#system-type>.   If omitted, this defaults	to the
	     local platform type.

		    Example

		    aarch64-darwin

	     It	is possible for	a machine to support multiple platform types.

		    Example

		    i686-linux,x86_64-linux

	  3. The SSH identity file to be used to log in	to the remote machine.
	     If	omitted, SSH uses its regular identities.

		    Example

		    /home/user/.ssh/id_mac

	  4. The maximum number	of builds that Nix executes in parallel	on the
	     machine.  Typically this should be	equal to  the  number  of  CPU
	     cores.

	  5. The speed factor, indicating the relative speed of	the machine as
	     a	positive integer.  If there are	multiple machines of the right
	     type, Nix prefers the fastest, taking load	into account.

	  6. A comma-separated list of supported system	 features  <#conf-sys-
	     tem-features>.

	     A	machine	is only	used to	build a	derivation if all the features
	     in	       the	   derivation's		requiredSystemFeatures
	     <@docroot@/language/advanced-attributes.html#adv-attr-
	     requiredSystemFeatures> attribute are supported by	that machine.

	  7. A comma-separated list of required	system features	<#conf-system-
	     features>.

	     A	machine	 is  only used to build	a derivation if	all of the ma-
	     chines required features appear in	the  derivations  requiredSys-
	     temFeatures     <@docroot@/language/advanced-attributes.html#adv-
	     attr-requiredSystemFeatures> attribute.

	  8. The (base64-encoded) public host key of the remote	 machine.   If
	     omitted, SSH uses its regular known_hosts file.

	     The value for this	field can be obtained via base64 -w0.

		 Example

		 Multiple builders specified on	the command line:

	  --builders 'ssh://mac	x86_64-darwin ;	ssh://beastie x86_64-freebsd'

		 Example

		 This  specifies  several machines that	can perform i686-linux
		 builds:

	  nix@scratchy.labs.cs.uu.nl i686-linux	/home/nix/.ssh/id_scratchy 8 1 kvm
	  nix@itchy.labs.cs.uu.nl    i686-linux	/home/nix/.ssh/id_scratchy 8 2
	  nix@poochie.labs.cs.uu.nl  i686-linux	/home/nix/.ssh/id_scratchy 1 2 kvm benchmark

		 However, poochie only builds derivations that	have  the  at-
		 tribute

	  requiredSystemFeatures = [ "benchmark" ];

		 or

	  requiredSystemFeatures = [ "benchmark" "kvm" ];

		 itchy	cannot	do  builds that	require	kvm, but scratchy does
		 support such builds.  For regular builds, itchy is  preferred
		 over scratchy because it has a	higher speed factor.

	  For  Nix  to	use  substituters,  the	 calling  user	must be	in the
	  trusted-users	<#conf-trusted-users> list.

		 Note

		 A build machine must be accessible via	SSH and	have  Nix  in-
		 stalled.   nix	 must  be available in $PATH for the user con-
		 necting over SSH.

		 Warning

		 If you	are building via the Nix  daemon  (default),  the  Nix
		 daemon	 user account on the local machine (that is, root) re-
		 quires	access to a user account on the	 remote	 machine  (not
		 necessarily root).

		 If  you cant or dont want to configure	root to	be able	to ac-
		 cess the remote machine, set store <#conf-store> to any local
		 store <@docroot@/store/types/local-store.html>, e.g. by pass-
		 ing --store /tmp to the command on the	local machine.

	  To build only	on remote machines and disable local builds, set  max-
	  jobs <#conf-max-jobs>	to 0.

	  If  you  want	the remote machines to use substituters, set builders-
	  use-substitutes <#conf-builders-use-substitutes> to true.

	  Default: machine-specific

         builders-use-substitutes <#conf-builders-use-substitutes>

	  If set to true, Nix instructs	remote build machines <#conf-builders>
	  to use their own substituters	<#conf-substituters> if	available.

	  It means that	remote build hosts fetches  as	many  dependencies  as
	  possible from	their own substituters (e.g, from cache.nixos.org) in-
	  stead	of waiting for the local machine to upload them	all.  This can
	  drastically reduce build times if the	network	connection between the
	  local	machine	and the	remote build host is slow.

	  Default: false

         commit-lock-file-summary <#conf-commit-lock-file-summary>

		 Warning

		 This  setting	is  part  of  an  experimental	feature	<@doc-
		 root@/development/experimental-features.md>.

		 To change this	setting, make  sure  the  flakes  experimental
		 feature   <@docroot@/development/experimental-features.md#xp-
		 feature-flakes> is enabled.  For example, include the follow-
		 ing in	nix.conf <@docroot@/command-ref/conf-file.md>:

	  extra-experimental-features =	flakes
	  commit-lock-file-summary = ...

	  The commit summary to	use when committing changed flake lock	files.
	  If empty, the	summary	is generated based on the action performed.

	  Default: empty

	  Deprecated alias: commit-lockfile-summary

         compress-build-log <#conf-compress-build-log>

	  If   set   to	  true	 (the	default),   build   logs   written  to
	  /nix/var/log/nix/drvs	are compressed on the fly using	bzip2.	Other-
	  wise,	they are not compressed.

	  Default: true

	  Deprecated alias: build-compress-log

         connect-timeout <#conf-connect-timeout>

	  The timeout (in seconds) for establishing connections	in the	binary
	  cache	substituter. It	corresponds to curls --connect-timeout option.
	  A value of 0 means no	limit.

	  Default: 15

         cores	<#conf-cores>

	  Sets	the  value  of the NIX_BUILD_CORES environment variable	in the
	  invocation	     of		the	    builder	    executable
	  <@docroot@/language/derivations.md#builder-execution>	 of  a deriva-
	  tion.	 The builder executable	can use	this variable to  control  its
	  own maximum amount of	parallelism.

	  For  instance,  in  Nixpkgs, if the attribute	enableParallelBuilding
	  for the mkDerivation build helper is set  to	true,  it  passes  the
	  -j${NIX_BUILD_CORES} flag to GNU Make.

	  If  set  to 0, nix will detect the number of CPU cores and pass this
	  number via NIXBUILDCORES.

		 Note

		 The number of parallel	local Nix build	jobs is	 independently
		 controlled with the max-jobs <#conf-max-jobs> setting.

	  Default: 0

	  Deprecated alias: build-cores

         debugger-on-trace <#conf-debugger-on-trace>

	  If set to true and the --debugger flag is given, the following func-
	  tions	  enter	  the  debugger	 like  builtins.break  <@docroot@/lan-
	  guage/builtins.md#builtins-break>:

	    builtins.trace <@docroot@/language/builtins.md#builtins-trace>
	    builtins.traceVerbose   <@docroot@/language/builtins.md#builtins-
	     traceVerbose>  if	trace-verbose  <#conf-trace-verbose> is	set to
	     true.
	    builtins.warn <@docroot@/language/builtins.md#builtins-warn>

	  This is useful for debugging warnings	in third-party Nix code.

	  Default: false

         debugger-on-warn <#conf-debugger-on-warn>

	  If set to true and  the  --debugger  flag  is	 given,	 builtins.warn
	  <@docroot@/language/builtins.md#builtins-warn> will enter the	debug-
	  ger  like  builtins.break  <@docroot@/language/builtins.md#builtins-
	  break>.

	  This is useful for debugging warnings	in third-party Nix code.

	  Use debugger-on-trace	<#conf-debugger-on-trace> to  also  enter  the
	  debugger  on	legacy	warnings  that	are logged with	builtins.trace
	  <@docroot@/language/builtins.md#builtins-trace>.

	  Default: false

         diff-hook <#conf-diff-hook>

	  Absolute path	to an executable capable of diffing build results. The
	  hook is executed if run-diff-hook is true, and the output of a build
	  is known to not be the same. This program is not executed to	deter-
	  mine if two results are the same.

	  The  diff  hook  is  executed	by the same user and group who ran the
	  build. However, the diff hook	does not  have	write  access  to  the
	  store	path just built.

	  The diff hook	program	receives three parameters:

	  1. A path to the previous build's results

	  2. A path to the current build's results

	  3. The path to the build's derivation

	  4. The  path to the build's scratch directory. This directory	exists
	     only if the build was run with --keep-failed.

	  The stderr and stdout	output from the	diff hook isn't	 displayed  to
	  the user. Instead, it	print to the nix-daemon's log.

	  When	using  the  Nix	 daemon, diff-hook must	be set in the nix.conf
	  configuration	file, and cannot be passed at the command line.

	  Default: ``

         download-attempts <#conf-download-attempts>

	  The number of	times Nix attempts to download a  file	before	giving
	  up.

	  Default: 5

         download-buffer-size <#conf-download-buffer-size>

	  The  size  of	 Nix's	internal  download buffer in bytes during curl
	  transfers. If	data is	not processed quickly  enough  to  exceed  the
	  size	of  this buffer, downloads may stall.  The default is 67108864
	  (64 MiB).

	  Default: 67108864

         download-speed <#conf-download-speed>

	  Specify the maximum transfer rate in kilobytes per second  you  want
	  Nix to use for downloads.

	  Default: 0

         eval-attrset-update-layer-rhs-threshold  <#conf-eval-attrset-update-
	  layer-rhs-threshold>

	  Tunes	the maximum size of an attribute set  that,  when  used	 as  a
	  right	 operand in an attribute set update expression <@docroot@/lan-
	  guage/operators.md#update>, uses a more space-efficient  linked-list
	  representation of attribute sets.

	  Setting this to larger values	generally leads	to less	memory alloca-
	  tions, but may lead to worse evaluation performance.

	  A value of 0 disables	this optimization completely.

	  This	is  an advanced	performance tuning option and typically	should
	  not be changed.  The default value is	chosen to balance  performance
	  and  memory usage. On	32 bit systems where memory is scarce, the de-
	  fault	is a large value to reduce the amount of allocations.

	  Default: 16

         eval-cache <#conf-eval-cache>

	  Whether to use the flake evaluation cache.  Certain  commands	 won't
	  have	to evaluate when invoked for the second	time with a particular
	  version of a flake.  Intermediate results are	not cached.

	  Default: true

         eval-profile-file <#conf-eval-profile-file>

	  Specifies the	file where evaluation profile <#conf-eval-profiler> is
	  saved.

	  Default: nix.profile

         eval-profiler	<#conf-eval-profiler>

	  Enables evaluation profiling.	The following modes are	supported:

	    flamegraph	stack sampling profiler. Outputs  folded  format,  one
	     line per stack (suitable for flamegraph.pl	and compatible tools).

	  Use eval-profile-file	<#conf-eval-profile-file> to specify where the
	  profile is saved.

	  See  Using  the  eval-profiler  <@docroot@/advanced-topics/eval-pro-
	  filer.md>.

	  Default: disabled

         eval-profiler-frequency <#conf-eval-profiler-frequency>

	  Specifies the	sampling rate in hertz for sampling evaluation profil-
	  ers.	Use 0 to sample	the stack after	each function call.  See eval-
	  profiler <#conf-eval-profiler>.

	  Default: 99

         eval-system <#conf-eval-system>

	  This	       option	       defines		builtins.currentSystem
	  <@docroot@/language/builtins.md#builtins-currentSystem>  in  the Nix
	  language if it is set	as a non-empty string.	Otherwise,  if	it  is
	  defined  as  the empty string	(the default), the value of the	system
	  <#conf-system> configuration setting is used instead.

	  Unlike system, this setting does not change what kind	of derivations
	  can be built locally.	 This is useful	for evaluating Nix code	on one
	  system to produce derivations	to be built on another type of system.

	  Default: empty

         experimental-features	<#conf-experimental-features>

	  Experimental features	that are enabled.

	  Example:

       experimental-features = nix-command flakes

	      The following experimental features are available:

	      {{#include experimental-features-shortlist.md}}

	      Experimental features  are  further  documented  in  the	manual
	      <@docroot@/development/experimental-features.md>.

	      Default: empty

         external-builders <#conf-external-builders>

	  Helper programs that execute derivations.

	  The program is passed	a JSON document	that describes the build envi-
	  ronment as the final argument.  The JSON document looks like this:

	  {    "args":	  [    "-e",   "/nix/store/vj1c3wf9-source-stdenv.sh",
	  "/nix/store/shkw4qm9-default-builder.sh"	  ],	    "builder":
	  "/nix/store/s1qkj0ph-bash-5.2p37/bin/bash", "env": { "HOME": "/home-
	  less-shelter",	    "builder":		 "/nix/store/s1qkj0ph-
	  bash-5.2p37/bin/bash",			  "nativeBuildInputs":
	  "/nix/store/l31j72f1-version-check-hook",			"out":
	  "/nix/store/2yx2prgx-hello-2.12.2"	  },	  "inputPaths":	     [
	  "/nix/store/14dciax3-glibc-2.32-54-dev",   "/nix/store/1azs5s8z-get-
	  text-0.21",	],   "outputs":	  {    "out":	 "/nix/store/2yx2prgx-
	  hello-2.12.2"	   },	 "realStoreDir":   "/nix/store",   "storeDir":
	  "/nix/store",	  "system":    "aarch64-linux",	   "tmpDir":	"/pri-
	  vate/tmp/nix-build-hello-2.12.2.drv-0/build",	    "tmpDirInSandbox":
	  "/build", "topTmpDir":  "/private/tmp/nix-build-hello-2.12.2.drv-0",
	  "version": 1 }

	  Default: empty

         extra-platforms <#conf-extra-platforms>

	  System types of executables that can be run on this machine.

	  Nix	   only	     builds	 a	given	  store	    derivation
	  <@docroot@/glossary.md#gloss-store-derivation> locally when its sys-
	  tem attribute	equals any of the values specified here	or in the sys-
	  tem option <#conf-system>.

	  Setting this can be useful to	build derivations locally on  compati-
	  ble machines:

	    i686-linux	 executables  can be run on x86_64-linux machines (set
	     by	default)
	    x86_64-darwin executables can be run on macOS aarch64-darwin with
	     Rosetta 2 (set by default where applicable)
	    armv6 and armv5tel	executables can	be run on armv7
	    some aarch64 machines can also natively run 32-bit	ARM code
	    qemu-user may be used to  support	non-native  platforms  (though
	     this may be slow and buggy)

	  Build	 systems  usually detect the target platform to	be the current
	  physical system and therefore	produce	machine	code incompatible with
	  what may be intended in the derivation.  You should design your  de-
	  rivation's  builder accordingly and cross-check the results when us-
	  ing this option against natively-built versions of your derivation.

	  Default: machine-specific

         fallback <#conf-fallback>

	  If set to true, Nix falls back to building from source if  a	binary
	  substitute fails. This is equivalent to the --fallback flag. The de-
	  fault	is false.

	  Default: false

	  Deprecated alias: build-fallback

         flake-registry <#conf-flake-registry>

		 Warning

		 This  setting	is  part  of  an  experimental	feature	<@doc-
		 root@/development/experimental-features.md>.

		 To change this	setting, make  sure  the  flakes  experimental
		 feature   <@docroot@/development/experimental-features.md#xp-
		 feature-flakes> is enabled.  For example, include the follow-
		 ing in	nix.conf <@docroot@/command-ref/conf-file.md>:

	  extra-experimental-features =	flakes
	  flake-registry = ...

	  Path or URI of the global flake registry.

	  When empty, disables the global flake	registry.

	  Default: https://channels.nixos.org/flake-registry.json

         fsync-metadata <#conf-fsync-metadata>

	  If  set  to  true,  changes  to   the	  Nix	store	metadata   (in
	  /nix/var/nix/db)  are	 synchronously	flushed	to disk. This improves
	  robustness in	case of	system crashes,	but reduces  performance.  The
	  default is true.

	  Default: true

         fsync-store-paths <#conf-fsync-store-paths>

	  Whether  to  call fsync() on store paths before registering them, to
	  flush	them to	disk. This  improves  robustness  in  case  of	system
	  crashes, but reduces performance. The	default	is false.

	  Default: false

         gc-reserved-space <#conf-gc-reserved-space>

	  Amount of reserved disk space	for the	garbage	collector.

	  Default: 8388608

         hashed-mirrors <#conf-hashed-mirrors>

	  A  list  of web servers used by builtins.fetchurl to obtain files by
	  hash.	Given a	hash algorithm ha and a	base-16	hash h,	Nix  tries  to
	  download  the	 file from hashed-mirror/ha/h. This allows files to be
	  downloaded even if they have disappeared from	 their	original  URI.
	  For  example,	 given	an  example mirror http://tarballs.nixos.org/,
	  when building	the derivation

       builtins.fetchurl {
       url = "https://example.org/foo-1.2.3.tar.xz";
       sha256 =	"2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae";
       }

	      Nix  will	 attempt  to  download	this  file  from   http://tar-
	      balls.nixos.org/sha256/2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae
	      first. If	it is not available there, it tries the	original URI.

	      Default: empty

         http-connections <#conf-http-connections>

	  The  maximum	number of parallel TCP connections used	to fetch files
	  from binary caches and by other downloads.  It  defaults  to	25.  0
	  means	no limit.

	  Default: 25

	  Deprecated alias: binary-caches-parallel-connections

         http2	<#conf-http2>

	  Whether to enable HTTP/2 support.

	  Default: true

         id-count <#conf-id-count>

	  The number of	UIDs/GIDs to use for dynamic ID	allocation.

	  Default: 128

         ignore-try <#conf-ignore-try>

	  If set to true, ignore exceptions inside `tryEval' calls when	evalu-
	  ating	 Nix  expressions in debug mode	(using the -debugger flag). By
	  default the debugger pauses on all exceptions.

	  Default: false

         impersonate-linux-26 <#conf-impersonate-linux-26>

	  Whether to impersonate a Linux 2.6 machine on	newer kernels.

	  Default: false

	  Deprecated alias: build-impersonate-linux-26

         impure-env <#conf-impure-env>

		 Warning

		 This setting  is  part	 of  an	 experimental  feature	<@doc-
		 root@/development/experimental-features.md>.

		 To change this	setting, make sure the configurable-impure-env
		 experimental	feature	  <@docroot@/development/experimental-
		 features.md#xp-feature-configurable-impure-env>  is  enabled.
		 For   example,	 include  the  following  in  nix.conf	<@doc-
		 root@/command-ref/conf-file.md>:

	  extra-experimental-features =	configurable-impure-env
	  impure-env = ...

	  A list of items, each	in the format of:

	    name=value: Set environment variable name to value.

	  If the user is trusted (see trusted-users option), when  building  a
	  fixed-output derivation, environment variables set in	this option is
	  passed  to  the  builder  if they are	listed in impureEnvVars	<@doc-
	  root@/language/advanced-attributes.md#adv-attr-impureEnvVars>.

	  This option is useful	for, e.g., setting https_proxy for  fixed-out-
	  put  derivations  and	 in  a multi-user Nix installation, or setting
	  private access tokens	when fetching a	private	repository.

	  Default: empty

         json-log-path	<#conf-json-log-path>

	  A file or unix socket	to which JSON records of Nix's log output  are
	  written,  in	the same format	as --log-format	internal-json (without
	  the @nix prefixes on each line).  Concurrent writes to the same file
	  by multiple Nix processes are	not supported and may result in	inter-
	  leaved or corrupted log records.

	  Default: empty

         keep-build-log <#conf-keep-build-log>

	  If set to true (the default),	Nix writes the build log of a  deriva-
	  tion	(i.e. the standard output and error of its builder) to the di-
	  rectory /nix/var/log/nix/drvs. The build log can be retrieved	 using
	  the command nix-store	-l path.

	  Default: true

	  Deprecated alias: build-keep-log

         keep-derivations <#conf-keep-derivations>

	  If  true (default), the garbage collector keeps the derivations from
	  which	non-garbage store paths	were built. If false, they are deleted
	  unless explicitly registered as a  root  (or	reachable  from	 other
	  roots).

	  Keeping  derivation  around  is useful for querying and traceability
	  (e.g., it allows you to ask with  what  dependencies	or  options  a
	  store	 path was built), so by	default	this option is on. Turn	it off
	  to save a bit	of disk	space (or a lot	if keep-outputs	is also	turned
	  on).

	  Default: true

	  Deprecated alias: gc-keep-derivations

         keep-env-derivations <#conf-keep-env-derivations>

	  If false (default), derivations are not stored in Nix	user  environ-
	  ments.  That is, the derivations of any build-time-only dependencies
	  may be garbage-collected.

	  If true, when	you add	a Nix derivation to a  user  environment,  the
	  path	of the derivation is stored in the user	environment. Thus, the
	  derivation isn't garbage-collected until the user environment	gener-
	  ation	is deleted (nix-env --delete-generations). To  prevent	build-
	  time-only dependencies from being collected, you should also turn on
	  keep-outputs.

	  The difference between this option and keep-derivations is that this
	  one is sticky: it applies to any user	environment created while this
	  option  was  enabled,	while keep-derivations only applies at the mo-
	  ment the garbage collector is	run.

	  Default: false

	  Deprecated alias: env-keep-derivations

         keep-failed <#conf-keep-failed>

	  Whether to keep temporary directories	of failed builds.

	  Default: false

         keep-going <#conf-keep-going>

	  Whether to keep building derivations when another build fails.

	  Default: false

         keep-outputs <#conf-keep-outputs>

	  If true, the garbage collector keeps the outputs of non-garbage  de-
	  rivations.  If  false	(default), outputs are deleted unless they are
	  GC roots themselves (or reachable from other roots).

	  In general, outputs must be registered as roots separately. However,
	  even if the output of	a derivation is	registered as a	root, the col-
	  lector still deletes store paths that	are used only  at  build  time
	  (e.g.,  the  C compiler, or source tarballs downloaded from the net-
	  work). To prevent it from doing so, set this option to true.

	  Default: false

	  Deprecated alias: gc-keep-outputs

         log-lines <#conf-log-lines>

	  The number of	lines of the tail of the log to	show if	a build	fails.

	  Default: 25

         max-build-log-size <#conf-max-build-log-size>

	  This option defines the maximum number of bytes that a  builder  can
	  write	 to  its stdout/stderr.	If the builder exceeds this limit, its
	  killed. A value of 0 (the default) means that	there is no limit.

	  Default: 0

	  Deprecated alias: build-max-log-size

         max-call-depth <#conf-max-call-depth>

	  The maximum function call depth to allow before erroring.

	  Default: 10000

         max-free <#conf-max-free>

	  When a garbage collection is triggered by the	 min-free  option,  it
	  stops	as soon	as max-free bytes are available. The default is	infin-
	  ity (i.e. delete all garbage).

	  Default: 9223372036854775807

         max-jobs <#conf-max-jobs>

	  Maximum number of jobs that Nix tries	to build locally in parallel.

	  The  special value auto causes Nix to	use the	number of CPUs in your
	  system.  Use 0 to disable local builds and directly use  the	remote
	  machines  specified  in builders <#conf-builders>.  This doesn't af-
	  fect derivations that	have preferLocalBuild =	 true  <@docroot@/lan-
	  guage/advanced-attributes.md#adv-attr-preferLocalBuild>,  which  are
	  always built locally.

		 Note

		 The number of CPU cores to use	for each build job is indepen-
		 dently	determined by the cores	<#conf-cores> setting.

	  The setting can be overridden	using the --max-jobs (-j) command line
	  switch.

	  Default: 1

	  Deprecated alias: build-max-jobs

         max-silent-time <#conf-max-silent-time>

	  This option defines the maximum number of seconds that a builder can
	  go without producing any data	on standard output or standard	error.
	  This	is useful (for instance	in an automated	build system) to catch
	  builds that are stuck	in an infinite loop, or	to catch remote	builds
	  that are hanging due to network problems. It can be overridden using
	  the --max-silent-time	command	line switch.

	  The value 0 means that there is no timeout. This  is	also  the  de-
	  fault.

	  Default: 0

	  Deprecated alias: build-max-silent-time

         max-substitution-jobs	<#conf-max-substitution-jobs>

	  This option defines the maximum number of substitution jobs that Nix
	  tries	 to  run in parallel. The default is 16. The minimum value one
	  can choose is	1 and lower values are interpreted as 1.

	  Default: 16

	  Deprecated alias: substitution-max-jobs

         min-free <#conf-min-free>

	  When free disk space in /nix/store drops  below  min-free  during  a
	  build,  Nix  performs	 a garbage-collection until max-free bytes are
	  available or there is	no more	garbage. A value of  0	(the  default)
	  disables this	feature.

	  Default: 0

         min-free-check-interval <#conf-min-free-check-interval>

	  Number of seconds between checking free disk space.

	  Default: 5

         nar-buffer-size <#conf-nar-buffer-size>

	  Maximum size of NARs before spilling them to disk.

	  Default: 33554432

         narinfo-cache-negative-ttl <#conf-narinfo-cache-negative-ttl>

	  The TTL in seconds for negative lookups.  If a store path is queried
	  from	a  substituter <#conf-substituters> but	was not	found, a nega-
	  tive lookup is cached	in the local disk cache	database for the spec-
	  ified	duration.

	  Set to 0 to force updating the lookup	cache.

	  To wipe the lookup cache completely:

       $ rm $HOME/.cache/nix/binary-cache-v*.sqlite*
       # rm /root/.cache/nix/binary-cache-v*.sqlite*

	      Default: 3600

         narinfo-cache-positive-ttl <#conf-narinfo-cache-positive-ttl>

	  The TTL in seconds for positive lookups. If a	store path is  queried
	  from	a  substituter,	the result of the query	is cached in the local
	  disk cache database including	some of	the NAR	metadata. The  default
	  TTL  is  a  month, setting a shorter TTL for positive	lookups	can be
	  useful for binary caches that	have frequent garbage  collection,  in
	  which	 case  having a	more frequent cache invalidation would prevent
	  trying to pull the path again	and failing with a  hash  mismatch  if
	  the build isn't reproducible.

	  Default: 2592000

         netrc-file <#conf-netrc-file>

	  If  set  to  an absolute path	to a netrc file, Nix uses the HTTP au-
	  thentication credentials in this file	when trying to download	from a
	  remote host through HTTP or HTTPS. Defaults to $NIX_CONF_DIR/netrc.

	  The netrc file consists of a list of accounts	in the following  for-
	  mat:

	  machine my-machine login my-username password	my-password

	  For	 the	exact	 syntax,    see	   the	  curl	 documentation
	  <https://ec.haxx.se/usingcurl-netrc.html>.

		 Note

		 This must be an absolute path,	and ~ is not resolved. For ex-
		 ample,	 ~/.netrc  won't  resolve  to  your  home  directory's
		 .netrc.

	  Default: /tmp/dummy/netrc

         nix-path <#conf-nix-path>

	  List	   of	 search	   paths    to	  use	 for	lookup	  path
	  <@docroot@/language/constructs/lookup-path.md>   resolution.	  This
	  setting     determines     the     value     of     builtins.nixPath
	  <@docroot@/language/builtins.md#builtins-nixPath> and	 can  be  used
	  with	 builtins.findFile   <@docroot@/language/builtins.md#builtins-
	  findFile>.

	    The  configuration	 setting  is  overridden   by	the   NIX_PATH
	     <@docroot@/command-ref/env-common.md#env-NIX_PATH>	   environment
	     variable.
	    NIX_PATH is overridden by specifying the setting as  the  command
	     line flag <@docroot@/command-ref/conf-file.md#command-line-flags>
	     --nix-path.
	    Any    current    value	is   extended	by   the   -I	option
	     <@docroot@/command-ref/opt-common.md#opt-I> or --extra-nix-path.

	  If the respective paths are accessible, the default values are:

	    $HOME/.nix-defexpr/channels

	  The user channel  link  <@docroot@/command-ref/files/default-nix-ex-
	  pression.md#user-channel-link>,  pointing  to	 the  current state of
	  channels <@docroot@/command-ref/files/channels.md> for  the  current
	  user.

	    nixpkgs=$NIX_STATE_DIR/profiles/per-user/root/channels/nixpkgs

	  The current state of the nixpkgs channel for the root	user.

	    $NIX_STATE_DIR/profiles/per-user/root/channels

	  The current state of all channels for	the root user.

	  These	 files	are  set  up by	the Nix	installer <@docroot@/installa-
	  tion/installing-binary.md>.  See  NIX_STATE_DIR  <@docroot@/command-
	  ref/env-common.md#env-NIX_STATE_DIR>	for details on the environment
	  variable.

		 Note

		 If   restricted    evaluation	  <@docroot@/command-ref/conf-
		 file.md#conf-restrict-eval>  is enabled, the default value is
		 empty.

		 If   pure   evaluation	   <#conf-pure-eval>	is    enabled,
		 builtins.nixPath always evaluates to the empty	list [ ].

	  Default: machine-specific

         nix-shell-always-looks-for-shell-nix	<#conf-nix-shell-always-looks-
	  for-shell-nix>

	  Before  Nix  2.24,  nix-shell	  <@docroot@/command-ref/nix-shell.md>
	  would	 only  look  at	shell.nix if it	was in the working directory -
	  when no file was specified.

	  Since	Nix 2.24, nix-shell always  looks  for	a  shell.nix,  whether
	  that's  in  the working directory, or	in a directory that was	passed
	  as an	argument.

	  You may set this to false to temporarily revert to the  behavior  of
	  Nix 2.23 and older.

	  Using	 this  setting	is not recommended.  It	will be	deprecated and
	  removed.

	  Default: true

         nix-shell-shebang-arguments-relative-to-script     <#conf-nix-shell-
	  shebang-arguments-relative-to-script>

	  Before  Nix  2.24,  relative file path expressions in	arguments in a
	  nix-shell shebang were resolved relative to the working directory.

	  Since	Nix 2.24, nix-shell resolves these paths in a manner  that  is
	  relative to the base directory <@docroot@/glossary.md#gloss-base-di-
	  rectory>, defined as the script's directory.

	  You  may  set	this to	false to temporarily revert to the behavior of
	  Nix 2.23 and older.

	  Using	this setting is	not recommended.  It will  be  deprecated  and
	  removed.

	  Default: true

         plugin-files <#conf-plugin-files>

	  A  list  of plugin files to be loaded	by Nix.	Each of	these files is
	  dlopened by Nix. If they contain the symbol nix_plugin_entry(), this
	  symbol is called. Alternatively, they	can affect  execution  through
	  static  initialization.  In  particular, these plugins may construct
	  static instances of RegisterPrimOp to	add new	primops	 or  constants
	  to  the  expression language,	RegisterStoreImplementation to add new
	  store	implementations, RegisterCommand to add	new subcommands	to the
	  nix command, and RegisterSetting to add new nix config settings. See
	  the constructors for those types for more details.

	  Warning! These APIs are inherently unstable and may change from  re-
	  lease	to release.

	  Since	 these files are loaded	into the same address space as Nix it-
	  self,	they must be DSOs compatible with the instance of Nix  running
	  at  the  time	(i.e. compiled against the same	headers, not linked to
	  any incompatible libraries). They should not be linked  to  any  Nix
	  libraries directly, as those are already available at	load time.

	  If  an  entry	in the list is a directory, all	files in the directory
	  are loaded as	plugins	(non-recursively).

	  Default: empty

         post-build-hook <#conf-post-build-hook>

	  Optional. The	path to	a program to execute after each	build.

	  This option is only settable in the global nix.conf, or on the  com-
	  mand line by trusted users.

	  When using the nix-daemon, the daemon	executes the hook as root.  If
	  the  nix-daemon is not involved, the hook runs as the	user executing
	  the nix-build.

	    The hook executes after an	evaluation-time	build.

	    The hook does not execute on substituted paths.

	    The hook's	output always goes to the user's terminal.

	    If	the hook fails,	the build succeeds but no further builds  exe-
	     cute.

	    The  hook	executes  synchronously,  and blocks other builds from
	     progressing while it runs.

	  The program executes with no arguments.  The	program's  environment
	  contains the following environment variables:

	    DRV_PATH The derivation for the built paths.

	     Example:		  /nix/store/5nihn1a7pa8b25l9zafqaqibznlvvp3f-
	     bash-4.4-p23.drv

	    OUT_PATHS Output paths of the built derivation,  separated	 by  a
	     space character.

	     Example:		  /nix/store/zf5lbh336mnzf1nlswdn11g4n2m8zh3g-
	     bash-4.4-p23-dev	  /nix/store/rjxwxwv1fpn9wa2x5ssk5phzwlcv4mna-
	     bash-4.4-p23-doc
	     /nix/store/6bqvbzjkcp9695dq0dpl5y43nvy37pq1-bash-4.4-p23-info
	     /nix/store/r7fng3kk3vlpdlh2idnrbn37vh4imlj2-bash-4.4-p23-man
	     /nix/store/xfghy8ixrhz3kyy6p724iv3cxji088dx-bash-4.4-p23.

	  Default: empty

         pre-build-hook <#conf-pre-build-hook>

	  If set, the path to a	program	that can set extra derivation-specific
	  settings  for	 this  system. This is used for	settings that can't be
	  captured by the derivation model itself and are too variable between
	  different versions of	the same system	to be hard-coded into nix.

	  The hook is passed the derivation path and,  if  sandboxes  are  en-
	  abled,  the  sandbox	directory.  It can then	modify the sandbox and
	  send a series	of commands to modify various settings to stdout.  The
	  currently recognized commands	are:

	    extra-sandbox-paths
	     Pass  a list of files and directories to be included in the sand-
	     box for this build. One entry per line, terminated	 by  an	 empty
	     line. Entries have	the same format	as sandbox-paths.

	  Default: empty

         preallocate-contents <#conf-preallocate-contents>

	  Whether to preallocate files when writing objects with known size.

	  Default: false

         print-missing	<#conf-print-missing>

	  Whether to print what	paths need to be built or downloaded.

	  Default: true

         pure-eval <#conf-pure-eval>

	  Pure	evaluation  mode ensures that the result of Nix	expressions is
	  fully	determined by explicitly declared inputs, and  not  influenced
	  by external state:

	    Restrict  file  system  and  network access to files specified by
	     cryptographic hash
	    Disable impure constants:
	    builtins.currentSystem  <@docroot@/language/builtins.md#builtins-
	     currentSystem>
	    builtins.currentTime    <@docroot@/language/builtins.md#builtins-
	     currentTime>
	    builtins.nixPath	     <@docroot@/language/builtins.md#builtins-
	     nixPath>
	    builtins.storePath	     <@docroot@/language/builtins.md#builtins-
	     storePath>

	  Default: false

         require-drop-supplementary-groups <#conf-require-drop-supplementary-
	  groups>

	  Following the	principle of least privilege,  Nix  attempts  to  drop
	  supplementary	groups when building with sandboxing.

	  However this can fail	under some circumstances.  For example,	if the
	  user lacks the CAP_SETGID capability.	 Search	setgroups(2) for EPERM
	  to find more detailed	information on this.

	  If  you  encounter  such a failure, setting this option to false en-
	  ables	you to ignore it and  continue.	  But  before  doing  so,  you
	  should  consider  the	security implications carefully.  Not dropping
	  supplementary	groups means the build sandbox is less restricted than
	  intended.

	  This option defaults to true when the	user is	root (since root  usu-
	  ally has permissions to call setgroups) and false otherwise.

	  Default: true

         require-sigs <#conf-require-sigs>

	  If  set  to true (the	default), any non-content-addressed path added
	  or copied to the Nix store (e.g. when	 substituting  from  a	binary
	  cache)  must have a signature	by a trusted key. A trusted key	is one
	  listed in trusted-public-keys, or a public key counterpart to	a pri-
	  vate key stored in a file listed in secret-key-files.

	  Set to false to disable signature checking and  trust	 all  non-con-
	  tent-addressed paths unconditionally.

	  (Content-addressed  paths  are inherently trustworthy	and thus unaf-
	  fected by this configuration option.)

	  Default: true

         restrict-eval	<#conf-restrict-eval>

	  If set to true, the Nix evaluator doesn't allow access to any	 files
	  outside	   of	      builtins.nixPath	       <@docroot@/lan-
	  guage/builtins.md#builtins-nixPath>, or to URIs outside of  allowed-
	  uris <@docroot@/command-ref/conf-file.md#conf-allowed-uris>.

	  Default: false

         run-diff-hook	<#conf-run-diff-hook>

	  If true, enable the execution	of the diff-hook program.

	  When using the Nix daemon, run-diff-hook must	be set in the nix.conf
	  configuration	file, and cannot be passed at the command line.

	  Default: false

         sandbox <#conf-sandbox>

	  If  set  to  true,  builds are performed in a	sandboxed environment,
	  i.e.,	theyre isolated	from the normal	file system hierarchy and only
	  see their dependencies in the	Nix store, the temporary build	direc-
	  tory,	 private  versions  of	/proc, /dev, /dev/shm and /dev/pts (on
	  Linux), and the paths	configured with	the sandbox-paths option. This
	  is useful to prevent undeclared dependencies on files	in directories
	  such as /usr/bin. In addition, on Linux, builds run in private  PID,
	  mount,  network,  IPC	 and UTS namespaces to isolate them from other
	  processes in the system (except that fixed-output derivations	do not
	  run in private network namespace to ensure they can access the  net-
	  work).

	  Currently,  sandboxing  only	work  on Linux and macOS. The use of a
	  sandbox requires that	Nix is run as root  (so	 you  should  use  the
	  build	 users	feature	 to  perform the actual	builds under different
	  users	than root).

	  If this option is set	to relaxed, then fixed-output derivations  and
	  derivations  that  have  the __noChroot attribute set	to true	do not
	  run in sandboxes.

	  The default is true on Linux and false on all	other platforms.

	  Default: false

	  Deprecated alias: build-use-chroot, build-use-sandbox

         sandbox-build-dir <#conf-sandbox-build-dir>

	  Linux	only

	  The build directory inside the sandbox.

	  This directory is backed by build-dir	<#conf-build-dir> on the host.

	  Default: /build

         sandbox-fallback <#conf-sandbox-fallback>

	  Whether to disable sandboxing	when the kernel	doesn't	allow it.

	  Default: true

         sandbox-paths	<#conf-sandbox-paths>

	  A list of paths bind-mounted into Nix	sandbox	environments. You  can
	  use the syntax target=source to mount	a path in a different location
	  in the sandbox; for instance,	/bin=/nix-bin mounts the path /nix-bin
	  as  /bin  inside the sandbox.	If source is followed by ?, then it is
	  not an error if source does not exist; for example,  /dev/nvidiactl?
	  specifies  that  /dev/nvidiactl only be mounted in the sandbox if it
	  exists in the	host filesystem.

	  If the source	is in the Nix store, then its closure is added to  the
	  sandbox as well.

	  Depending  on	 how  Nix was built, the default value for this	option
	  may be empty or provide /bin/sh as a bind-mount of bash.

	  Default: empty

	  Deprecated alias: build-chroot-dirs, build-sandbox-paths

         secret-key-files <#conf-secret-key-files>

	  A whitespace-separated list of  files	 containing  secret  (private)
	  keys.	These are used to sign locally-built paths. They can be	gener-
	  ated	using nix-store	--generate-binary-cache-key. The corresponding
	  public key can be distributed	to other users,	 who  can  add	it  to
	  trusted-public-keys in their nix.conf.

	  Default: empty

         show-trace <#conf-show-trace>

	  Whether Nix should print out a stack trace in	case of	Nix expression
	  evaluation errors.

	  Default: false

         ssl-cert-file	<#conf-ssl-cert-file>

	  The  path  of	a file containing CA certificates used to authenticate
	  https:// downloads. Nix by default uses the first of	the  following
	  files	that exists:

	  1. /etc/ssl/certs/ca-certificates.crt
	  2. /nix/var/nix/profiles/default/etc/ssl/certs/ca-bundle.crt

	  The  path  can be overridden by the following	environment variables,
	  in order of precedence:

	  1. NIX_SSL_CERT_FILE
	  2. SSL_CERT_FILE

	  Default: machine-specific

         stalled-download-timeout <#conf-stalled-download-timeout>

	  The timeout (in seconds) for	receiving  data	 from  servers	during
	  download. Nix	cancels	idle downloads after this timeout's duration.

	  Default: 300

         start-id <#conf-start-id>

	  The first UID	and GID	to use for dynamic ID allocation.

	  Default: 56930

         store	<#conf-store>

	  The  URL of the Nix store <@docroot@/store/types/index.md#store-url-
	  format>  to  use  for	 most  operations.   See   the	 Store	 Types
	  <@docroot@/store/types/index.md> section of the manual for supported
	  store	types and settings.

	  Default: auto

         substitute <#conf-substitute>

	  If  set to true (default), Nix uses binary substitutes if available.
	  This option can be disabled to force building	from source.

	  Default: true

	  Deprecated alias: build-use-substitutes

         substituters <#conf-substituters>

	  A list of URLs of Nix	stores	<@docroot@/store/types/index.md#store-
	  url-format>  to be used as substituters, separated by	whitespace.  A
	  substituter is  an  additional  store	 <@docroot@/glossary.md#gloss-
	  store>     from    which    Nix    can    obtain    store    objects
	  <@docroot@/store/store-object.md> instead of building	them.

	  Substituters are tried based on their	 priority  value,  which  each
	  substituter  can set independently.  Lower value means higher	prior-
	  ity.	The default is https://cache.nixos.org,	which has  a  priority
	  of 40.

	  At  least one	of the following conditions must be met	for Nix	to use
	  a substituter:

	    The substituter is	in  the	 trusted-substituters  <#conf-trusted-
	     substituters> list
	    The  user	calling	 Nix  is  in the trusted-users <#conf-trusted-
	     users> list

	  In addition, each store path	should	be  trusted  as	 described  in
	  trusted-public-keys <#conf-trusted-public-keys>

	  Default: https://cache.nixos.org/

	  Deprecated alias: binary-caches

         sync-before-registering <#conf-sync-before-registering>

	  Whether to call sync() before	registering a path as valid.

	  Default: false

         system <#conf-system>

	  The  system type of the current Nix installation.  Nix only builds a
	  given	   store    derivation	   <@docroot@/glossary.md#gloss-store-
	  derivation> locally when its system attribute	equals any of the val-
	  ues specified	here or	in extra-platforms <#conf-extra-platforms>.

	  The  default value is	set when Nix itself is compiled	for the	system
	  it will run on.  The following system	types are widely used, as  Nix
	  is actively supported	on these platforms:

	    x86_64-linux
	    x86_64-darwin
	    i686-linux
	    aarch64-linux
	    aarch64-darwin
	    armv6l-linux
	    armv7l-linux

	  In  general,	you do not have	to modify this setting.	 While you can
	  force	Nix to run a Darwin-specific builder executable	on a Linux ma-
	  chine, the result would obviously be wrong.

	  This value is	available in the Nix language as  builtins.currentSys-
	  tem  <@docroot@/language/builtins.md#builtins-currentSystem>	if the
	  eval-system <#conf-eval-system> configuration	option is set  as  the
	  empty	string.

	  Default: x86_64-freebsd

         system-features <#conf-system-features>

	  A set	of system features supported by	this machine.

	  This	complements  the  system  <#conf-system>  and  extra-platforms
	  <#conf-extra-platforms> configuration	options	and the	 corresponding
	  system  <@docroot@/language/derivations.md#attr-system> attribute on
	  derivations.

	  A derivation can require system features in  the  requiredSystemFea-
	  tures	attribute <@docroot@/language/advanced-attributes.md#adv-attr-
	  requiredSystemFeatures>,  and	 the  machine  to build	the derivation
	  must have them.

	  System features are user-defined, but	Nix  sets  the	following  de-
	  faults:

	    apple-virt

	  Included on Darwin if	virtualization is available.

	    kvm

	  Included on Linux if /dev/kvm	is accessible.

	    nixos-test, benchmark, big-parallel

	  These	 historical  pseudo-features  are always enabled for backwards
	  compatibility, as they are used in Nixpkgs to	route Hydra builds  to
	  specific machines.

	    ca-derivations

	  Included  by	default	 if  the  ca-derivations  experimental feature
	  <@docroot@/development/experimental-features.md#xp-feature-ca-
	  derivations> is enabled.

	  This system feature is implicitly required by	derivations  with  the
	  __contentAddressed   attribute  <@docroot@/language/advanced-attrib-
	  utes.md#adv-attr-__contentAddressed>.

	    recursive-nix

	  Included  by	default	 if  the  recursive-nix	 experimental  feature
	  <@docroot@/development/experimental-features.md#xp-feature-
	  recursive-nix> is enabled.

	    uid-range

	  On  Linux,  Nix can run builds in a user namespace where they	run as
	  root (UID 0) and have	65,536 UIDs available.	This is	primarily use-
	  ful for running containers  such  as	systemd-nspawn	inside	a  Nix
	  build. For an	example, see [tests/systemd-nspawn/nix][nspawn].

	  [nspawn]:
	  <https://github.com/NixOS/nix/blob/67bcb99700a0da1395fa063d7c6586740b304598/tests/systemd-
	  nspawn.nix>

	  Included  by default on Linux	if the auto-allocate-uids <#conf-auto-
	  allocate-uids> setting is enabled.

	  Default: machine-specific

         tarball-ttl <#conf-tarball-ttl>

	  The number of	seconds	a downloaded tarball is	considered  fresh.  If
	  the  cached  tarball	is stale, Nix checks whether it	is still up to
	  date using the ETag header. Nix downloads a new version if the  ETag
	  header is unsupported, or the	cached ETag doesn't match.

	  Setting the TTL to 0 forces Nix to always check if the tarball is up
	  to date.

	  Nix caches tarballs in $XDG_CACHE_HOME/nix/tarballs.

	  Files	 fetched via NIX_PATH, fetchGit, fetchMercurial, fetchTarball,
	  and fetchurl respect this TTL.

	  Default: 3600

         timeout <#conf-timeout>

	  This option defines the maximum number of seconds that a builder can
	  run. This is useful (for instance in an automated build  system)  to
	  catch	 builds	that are stuck in an infinite loop but keep writing to
	  their	standard output	or standard error. It can be overridden	 using
	  the --timeout	command	line switch.

	  The  value  0	 means	that there is no timeout. This is also the de-
	  fault.

	  Default: 0

	  Deprecated alias: build-timeout

         trace-function-calls <#conf-trace-function-calls>

	  If set to true, the Nix evaluator traces every function  call.   Nix
	  prints  a  log  message  at the "vomit" level	for every function en-
	  trance and function exit.

	  function-trace entered  undefined  position  at  1565795816999559622
	  function-trace  exited  undefined  position  at  1565795816999581277
	  function-trace    entered    /nix/store/.../example.nix:226:41    at
	  1565795253249935150	function-trace	 exited	  /nix/store/.../exam-
	  ple.nix:226:41 at 1565795253249941684

	  The undefined	position means the function call is a builtin.

	  Use the contrib/stack-collapse.py script distributed	with  the  Nix
	  source  code	to  convert the	trace logs in to a format suitable for
	  flamegraph.pl.

	  Default: false

         trace-import-from-derivation <#conf-trace-import-from-derivation>

	  By  default,	Nix  allows  Import  from  Derivation  <@docroot@/lan-
	  guage/import-from-derivation.md>.

	  When	this  setting  is  true, Nix logs a warning indicating that it
	  performed such an import.  This option has no	 effect	 if  allow-im-
	  port-from-derivation is disabled.

	  Default: false

         trace-verbose	<#conf-trace-verbose>

	  Whether  builtins.traceVerbose  should trace its first argument when
	  evaluated.

	  Default: false

         trust-tarballs-from-git-forges       <#conf-trust-tarballs-from-git-
	  forges>

	  If  enabled  (the  default),	Nix considers tarballs from GitHub and
	  similar Git forges to	be locked if a Git revision is specified, e.g.
	  github:NixOS/patchelf/7c2f768bf9601268a4e71c2ebe91e2011918a70f.
	  This requires	Nix to trust that the  provider	 returns  the  correct
	  contents for the specified Git revision.

	  If  disabled,	 such tarballs are only	considered locked if a narHash
	  attribute		 is		 specified,		  e.g.
	  github:NixOS/patchelf/7c2f768bf9601268a4e71c2ebe91e2011918a70f?narHash=sha256-PPX-
	  qKY2hJng4DBVE0I4xshv/vGLUskL7jl53roB8UdU%3D.

	  Default: true

         trusted-public-keys <#conf-trusted-public-keys>

	  A whitespace-separated list of public	keys.

	  At  least  one of the	following condition must be met	for Nix	to ac-
	  cept copying a store object from another Nix store (such as  a  sub-
	  stituter <#conf-substituters>):

	    the  store	object has been	signed using a key in the trusted keys
	     list
	    the require-sigs <#conf-require-sigs>  option  has	 been  set  to
	     false
	    the store URL is configured with trusted=true
	    the	store	     object	   is	     content-addressed
	     <@docroot@/glossary.md#gloss-content-addressed-store-object>

	  Default:  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcD-
	  ShjY=

	  Deprecated alias: binary-cache-public-keys

         trusted-substituters <#conf-trusted-substituters>

	  A  list of Nix store URLs <@docroot@/store/types/index.md#store-url-
	  format>, separated by	whitespace.  These are not  used  by  default,
	  but  users  of  the Nix daemon can enable them by specifying substi-
	  tuters <#conf-substituters>.

	  Unprivileged users (those set	in only	allowed-users  <#conf-allowed-
	  users> but not trusted-users <#conf-trusted-users>) can pass as sub-
	  stituters only those URLs listed in trusted-substituters.

	  Default: empty

	  Deprecated alias: trusted-binary-caches

         trusted-users	<#conf-trusted-users>

	  A  list  of  user  names, separated by whitespace.  These users will
	  have additional rights when connecting to the	Nix  daemon,  such  as
	  the ability to specify additional substituters <#conf-substituters>,
	  or to	import unsigned	realisations or	unsigned input-addressed store
	  objects.

	  You  can  also  specify  groups  by prefixing	names with @.  For in-
	  stance, @wheel means all users in the	wheel group.

		 Warning

		 Adding	a user to trusted-users	is essentially	equivalent  to
		 giving	that user root access to the system.  For example, the
		 user can access or replace store path contents	that are crit-
		 ical for system security.

	  Default: root

         upgrade-nix-store-path-url <#conf-upgrade-nix-store-path-url>

	  Used by nix upgrade-nix, the URL of the file that contains the store
	  paths	of the latest Nix release.

	  Default:	https://github.com/NixOS/nixpkgs/raw/master/nixos/mod-
	  ules/installer/tools/nix-fallback-paths.nix

         use-case-hack	<#conf-use-case-hack>

	  Whether to enable a macOS-specific hack for dealing with  file  name
	  case collisions.

	  Default: false

         use-registries <#conf-use-registries>

		 Warning

		 This  setting	is  part  of  an  experimental	feature	<@doc-
		 root@/development/experimental-features.md>.

		 To change this	setting, make  sure  the  flakes  experimental
		 feature   <@docroot@/development/experimental-features.md#xp-
		 feature-flakes> is enabled.  For example, include the follow-
		 ing in	nix.conf <@docroot@/command-ref/conf-file.md>:

	  extra-experimental-features =	flakes
	  use-registries = ...

	  Whether to use flake registries to resolve flake references.

	  Default: true

         use-sqlite-wal <#conf-use-sqlite-wal>

	  Whether SQLite should	use WAL	mode.

	  Default: true

         use-xdg-base-directories <#conf-use-xdg-base-directories>

	  If set to true, Nix conforms to the XDG Base Directory Specification
	  <https://specifications.freedesktop.org/basedir-spec/basedir-spec-
	  latest.html> for files in $HOME.  The	environment variables used  to
	  implement  this  are documented in the Environment Variables section
	  <@docroot@/command-ref/env-common.md>.

		 Warning This changes the location of some well-known symlinks
		 that Nix creates, which might break tools that	 rely  on  the
		 old, non-XDG-conformant locations.

	  In particular, the following locations change:
	  +------------------------+----------------------------------+
	  | Old			   |	    New			      |
	  +------------------------+----------------------------------+
	  | ~/.nix-profile	   |	    $XDG_STATE_HOME/nix/pro-  |
	  |			   |	    file		      |
	  +------------------------+----------------------------------+
	  | ~/.nix-defexpr	   |	    $XDG_STATE_HOME/nix/def-  |
	  |			   |	    expr		      |
	  +------------------------+----------------------------------+
	  | ~/.nix-channels	   |	    $XDG_STATE_HOME/nix/chan- |
	  |			   |	    nels		      |
	  +------------------------+----------------------------------+

	  If   you   already   have  Nix  installed  and  are  using  profiles
	  <@docroot@/package-management/profiles.md>   or   channels	<@doc-
	  root@/command-ref/nix-channel.md>,  you should migrate manually when
	  you  enable  this  option.   If  $XDG_STATE_HOME  is	not  set,  use
	  $HOME/.local/state/nix  instead of $XDG_STATE_HOME/nix.  This	can be
	  achieved with	the following shell commands:

       nix_state_home=${XDG_STATE_HOME-$HOME/.local/state}/nix
       mkdir -p	$nix_state_home
       mv $HOME/.nix-profile $nix_state_home/profile
       mv $HOME/.nix-defexpr $nix_state_home/defexpr
       mv $HOME/.nix-channels $nix_state_home/channels

	      Default: false

         user-agent-suffix <#conf-user-agent-suffix>

	  String appended to the user agent in HTTP requests.

	  Default: empty

         warn-dirty <#conf-warn-dirty>

	  Whether to warn about	dirty Git/Mercurial trees.

	  Default: true

         warn-large-path-threshold <#conf-warn-large-path-threshold>

	  Warn when copying a path larger than this number of bytes to the Nix
	  store	(as determined by its NAR serialisation).  Default is 0, which
	  disables the warning.	 Set it	to 1 to	warn on	all paths.

	  Default: 0

         warn-short-path-literals <#conf-warn-short-path-literals>

	  If set to true, the Nix evaluator will warn when encountering	 rela-
	  tive path literals that don't	start with ./ or ../.

	  For example, with this setting enabled, foo/bar would	emit a warning
	  suggesting to	use ./foo/bar instead.

	  This is useful for improving code readability	and making path	liter-
	  als more explicit.

	  Default: false

								   nix.conf(5)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=nix.conf&sektion=5&manpath=FreeBSD+Ports+15.0.quarterly>

home | help