Environment variables: Difference between revisions

From NixOS Wiki
imported>SuperSamus
Add XDG_STATE_HOME
imported>SuperSamus
`\${HOME}` has some issues that `$HOME` doesn't have (e.g. logging in a Fish shell via TTY)
Line 8: Line 8:


   environment.sessionVariables = rec {
   environment.sessionVariables = rec {
     XDG_CACHE_HOME  = "\${HOME}/.cache";
     XDG_CACHE_HOME  = "$HOME/.cache";
     XDG_CONFIG_HOME = "\${HOME}/.config";
     XDG_CONFIG_HOME = "$HOME/.config";
     XDG_BIN_HOME    = "\${HOME}/.local/bin";
     XDG_BIN_HOME    = "$HOME/.local/bin";
     XDG_DATA_HOME  = "\${HOME}/.local/share";
     XDG_DATA_HOME  = "$HOME.local/share";
     XDG_STATE_HOME  = "\${HOME}/.local/state";
     XDG_STATE_HOME  = "$HOME/.local/state";


     PATH = [  
     PATH = [  
       "\${XDG_BIN_HOME}"
       "${XDG_BIN_HOME}"
     ];
     ];
   };
   };

Revision as of 23:31, 6 April 2023

Configuration

Environment variables can be set with environment.variables, environment.sessionVariables, and environment.profileRelativeSessionVariables. For example, for the XDG Base Directory Specification, the following could be set to /etc/nixos/configuration.nix:

{
 # ...

  environment.sessionVariables = rec {
    XDG_CACHE_HOME  = "$HOME/.cache";
    XDG_CONFIG_HOME = "$HOME/.config";
    XDG_BIN_HOME    = "$HOME/.local/bin";
    XDG_DATA_HOME   = "$HOME.local/share";
    XDG_STATE_HOME  = "$HOME/.local/state";

    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