Difference between revisions of "Environment variables"
m (Fix an outdated link to nixos search.) |
m (Add a note with the exact error text so people can find why it could be failing. Faced this issue.) |
||
Line 28: | Line 28: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | {{Note|Setting sessionVariables will do that for all users. This can break nix commands such as <code>nix store</code> or <code>nix copy</code>. They will fail to find ssh binary with <code>nixos filesystem error: status: Permission denied [/.local/bin/ssh]</code>}} | ||
== Troubleshooting == | == Troubleshooting == |
Latest revision as of 10:14, 6 July 2025
Configuration
Environment variables can be set with environment.variables , environment.sessionVariables , and environment.profileRelativeSessionVariables .
environment.variables
are global variables set on shell initialization, whereas environment.sessionVariables
and environment.profileRelativeSessionVariables
are initialized through PAM.
For example, for the XDG Base Directory Specification, the following could be set to /etc/nixos/configuration.nix
:
{
# ...
# This is using a rec (recursive) expression to set and access XDG_BIN_HOME within the expression
# For more on rec expressions see https://nix.dev/tutorials/first-steps/nix-language#recursive-attribute-set-rec
environment.sessionVariables = rec {
XDG_CACHE_HOME = "$HOME/.cache";
XDG_CONFIG_HOME = "$HOME/.config";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_STATE_HOME = "$HOME/.local/state";
# Not officially in the specification
XDG_BIN_HOME = "$HOME/.local/bin";
PATH = [
"${XDG_BIN_HOME}"
];
};
# ...
}
Troubleshooting
pam_env(sudo:session): Expandable variables must be wrapped in {} <$VARIABLE/path/to>
Error logs may be found with journalctl -xb -p3
regarding the no presence of curly braces {}
for variable expansion.
sudo[3424]: pam_env(sudo:session): Expandable variables must be wrapped in {} <$VARIABLE/path/to> - ignoring
While checking the configuration values, for instance with nixos-option environment.sessionVariables
, it might be found that Nix is correctly parsing the curly braces.
Value:
{
...
VARIABLE = "${VARIABLE}/path/to";
...
}
This indicates that the curly braces are getting removed at a later stage.
Solution or workaround
Unknown.
nix-build sandbox
Compared to a normal shell environment, in a nix-build sandbox, Nix will set some environment variables, for example:
NIX_BINTOOLS=/nix/store/lvg99f3zni6zw4cvlci6wpmzlls0nsn4-binutils-wrapper-2.38 NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu=1 NIX_BUILD_CORES=3 NIX_BUILD_TOP=/build NIX_CC=/nix/store/61zfi5pmhb0d91422f186x26v7b52y5k-gcc-wrapper-11.3.0 NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu=1 NIX_CFLAGS_COMPILE= -frandom-seed=8cnrgjjflj NIX_ENFORCE_NO_NATIVE=1 NIX_ENFORCE_PURITY=1 NIX_HARDENING_ENABLE=fortify stackprotector pic strictoverflow format relro bindnow NIX_INDENT_MAKE=1 NIX_LDFLAGS=-rpath /nix/store/8cnrgjjflj3dyppz299w50l9yydgnqkp-x/lib64 -rpath /nix/store/8cnrgjjflj3dyppz299w50l9yydgnqkp-x/lib NIX_LOG_FD=2 NIX_SSL_CERT_FILE=/no-cert-file.crt NIX_STORE=/nix/store