zsh: set environment variables in zshenv instead of zprofile
This patch fixes two issues: 1. The file in which environment variables are set is inconsistent. - This file sets them in zprofile when programs.zsh.enable is not set. - Zsh module sets them in zshenv when programs.zsh.enable is set. 2. Setting environment variables in zprofile overrides what users set in .zshenv. See these[1] home-manager[2] issues[3]. /etc/profile is also changed to /etc/set-environment. Here is a comparison: Using /etc/profile: - Pros - config.environment.shellInit is sourced in all zsh - Cons - config.environment.loginShellInit is also sourced in non-login zsh - config.programs.bash.shellInit is also sourced in all zsh - config.programs.bash.loginShellInit is also sourced in all zsh Using /etc/set-environment: - Pros - config.programs.bash.shellInit is not sourced in any zsh - config.programs.bash.loginShellInit is not sourced in any zsh - Cons - config.environment.shellInit is not sourced in any zsh - config.environment.loginShellInit is not sourced in any zsh [1]: https://github.com/nix-community/home-manager/issues/2751#issuecomment-1048682643 [2]: https://github.com/nix-community/home-manager/issues/2991 [3]: https://github.com/nix-community/home-manager/issues/3681#issuecomment-1436054233
This commit is contained in:
parent
2ed116f7a1
commit
8e2e741ab5
2 changed files with 17 additions and 13 deletions
|
@ -187,6 +187,8 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||||
The `{aclUse,superUser,disableActions}` attributes have been renamed, `pluginsConfig` now also accepts an attribute set of booleans, passing plain PHP is deprecated.
|
The `{aclUse,superUser,disableActions}` attributes have been renamed, `pluginsConfig` now also accepts an attribute set of booleans, passing plain PHP is deprecated.
|
||||||
Same applies to `acl` which now also accepts structured settings.
|
Same applies to `acl` which now also accepts structured settings.
|
||||||
|
|
||||||
|
- The `zsh` package changes the way to set environment variables on NixOS systems where `programs.zsh.enable` equals `false`. It now sources `/etc/set-environment` when reading the system-level `zshenv` file. Before, it sourced `/etc/profile` when reading the system-level `zprofile` file.
|
||||||
|
|
||||||
- The `wordpress` service now takes configuration via the `services.wordpress.sites.<name>.settings` attribute set, `extraConfig` is still available to append additional text to `wp-config.php`.
|
- The `wordpress` service now takes configuration via the `services.wordpress.sites.<name>.settings` attribute set, `extraConfig` is still available to append additional text to `wp-config.php`.
|
||||||
|
|
||||||
- To reduce closure size in `nixos/modules/profiles/minimal.nix` profile disabled installation documentations and manuals. Also disabled `logrotate` and `udisks2` services.
|
- To reduce closure size in `nixos/modules/profiles/minimal.nix` profile disabled installation documentations and manuals. Also disabled `logrotate` and `udisks2` services.
|
||||||
|
|
|
@ -42,7 +42,7 @@ stdenv.mkDerivation {
|
||||||
"--enable-multibyte"
|
"--enable-multibyte"
|
||||||
"--with-tcsetpgrp"
|
"--with-tcsetpgrp"
|
||||||
"--enable-pcre"
|
"--enable-pcre"
|
||||||
"--enable-zprofile=${placeholder "out"}/etc/zprofile"
|
"--enable-zshenv=${placeholder "out"}/etc/zshenv"
|
||||||
"--disable-site-fndir"
|
"--disable-site-fndir"
|
||||||
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform && !stdenv.hostPlatform.isStatic) [
|
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform && !stdenv.hostPlatform.isStatic) [
|
||||||
# Also see: https://github.com/buildroot/buildroot/commit/2f32e668aa880c2d4a2cce6c789b7ca7ed6221ba
|
# Also see: https://github.com/buildroot/buildroot/commit/2f32e668aa880c2d4a2cce6c789b7ca7ed6221ba
|
||||||
|
@ -64,34 +64,36 @@ stdenv.mkDerivation {
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
make install.info install.html
|
make install.info install.html
|
||||||
mkdir -p $out/etc/
|
mkdir -p $out/etc/
|
||||||
cat > $out/etc/zprofile <<EOF
|
cat > $out/etc/zshenv <<EOF
|
||||||
if test -e /etc/NIXOS; then
|
if test -e /etc/NIXOS; then
|
||||||
if test -r /etc/zprofile; then
|
if test -r /etc/zshenv; then
|
||||||
. /etc/zprofile
|
. /etc/zshenv
|
||||||
else
|
else
|
||||||
emulate bash
|
emulate bash
|
||||||
alias shopt=false
|
alias shopt=false
|
||||||
. /etc/profile
|
if [ -z "$__NIXOS_SET_ENVIRONMENT_DONE" ]; then
|
||||||
|
. /etc/set-environment
|
||||||
|
fi
|
||||||
unalias shopt
|
unalias shopt
|
||||||
emulate zsh
|
emulate zsh
|
||||||
fi
|
fi
|
||||||
if test -r /etc/zprofile.local; then
|
if test -r /etc/zshenv.local; then
|
||||||
. /etc/zprofile.local
|
. /etc/zshenv.local
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# on non-nixos we just source the global /etc/zprofile as if we did
|
# on non-nixos we just source the global /etc/zshenv as if we did
|
||||||
# not use the configure flag
|
# not use the configure flag
|
||||||
if test -r /etc/zprofile; then
|
if test -r /etc/zshenv; then
|
||||||
. /etc/zprofile
|
. /etc/zshenv
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
EOF
|
EOF
|
||||||
${if stdenv.hostPlatform == stdenv.buildPlatform then ''
|
${if stdenv.hostPlatform == stdenv.buildPlatform then ''
|
||||||
$out/bin/zsh -c "zcompile $out/etc/zprofile"
|
$out/bin/zsh -c "zcompile $out/etc/zshenv"
|
||||||
'' else ''
|
'' else ''
|
||||||
${lib.getBin buildPackages.zsh}/bin/zsh -c "zcompile $out/etc/zprofile"
|
${lib.getBin buildPackages.zsh}/bin/zsh -c "zcompile $out/etc/zshenv"
|
||||||
''}
|
''}
|
||||||
mv $out/etc/zprofile $out/etc/zprofile_zwc_is_used
|
mv $out/etc/zshenv $out/etc/zshenv_zwc_is_used
|
||||||
|
|
||||||
rm $out/bin/zsh-${version}
|
rm $out/bin/zsh-${version}
|
||||||
mkdir -p $out/share/doc/
|
mkdir -p $out/share/doc/
|
||||||
|
|
Loading…
Reference in a new issue