about summary refs log tree commit diff
diff options
context:
space:
mode:
authorK900 <me@0upti.me>2023-03-23 18:57:40 +0300
committerGitHub <noreply@github.com>2023-03-23 18:57:40 +0300
commit382c75609754981c38a8f68e8d5528f3d07d0e00 (patch)
tree9730221f25ea18067f12000ad97f5b3e26dbb9db
parent598cf2090c6f8b88c0518057e791d2b5584dd9b1 (diff)
parent8e2e741ab5bdea119a34013b1387eb3f281841cb (diff)
Merge pull request #217205 from linj-fork/fix-zsh-set-env
zsh: set environment variables in zshenv instead of zprofile
-rw-r--r--nixos/doc/manual/release-notes/rl-2305.section.md2
-rw-r--r--pkgs/shells/zsh/default.nix28
2 files changed, 17 insertions, 13 deletions
diff --git a/nixos/doc/manual/release-notes/rl-2305.section.md b/nixos/doc/manual/release-notes/rl-2305.section.md
index deeda73d2fb5f..0fdfb6581b157 100644
--- a/nixos/doc/manual/release-notes/rl-2305.section.md
+++ b/nixos/doc/manual/release-notes/rl-2305.section.md
@@ -224,6 +224,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.
   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`.
 
 - To reduce closure size in `nixos/modules/profiles/minimal.nix` profile disabled installation documentations and manuals. Also disabled `logrotate` and `udisks2` services.
diff --git a/pkgs/shells/zsh/default.nix b/pkgs/shells/zsh/default.nix
index 5a003b889a04a..3a5a83ad1f8c1 100644
--- a/pkgs/shells/zsh/default.nix
+++ b/pkgs/shells/zsh/default.nix
@@ -42,7 +42,7 @@ stdenv.mkDerivation {
     "--enable-multibyte"
     "--with-tcsetpgrp"
     "--enable-pcre"
-    "--enable-zprofile=${placeholder "out"}/etc/zprofile"
+    "--enable-zshenv=${placeholder "out"}/etc/zshenv"
     "--disable-site-fndir"
   ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform && !stdenv.hostPlatform.isStatic) [
     # Also see: https://github.com/buildroot/buildroot/commit/2f32e668aa880c2d4a2cce6c789b7ca7ed6221ba
@@ -64,34 +64,36 @@ stdenv.mkDerivation {
   postInstall = ''
     make install.info install.html
     mkdir -p $out/etc/
-    cat > $out/etc/zprofile <<EOF
+    cat > $out/etc/zshenv <<EOF
 if test -e /etc/NIXOS; then
-  if test -r /etc/zprofile; then
-    . /etc/zprofile
+  if test -r /etc/zshenv; then
+    . /etc/zshenv
   else
     emulate bash
     alias shopt=false
-    . /etc/profile
+    if [ -z "$__NIXOS_SET_ENVIRONMENT_DONE" ]; then
+      . /etc/set-environment
+    fi
     unalias shopt
     emulate zsh
   fi
-  if test -r /etc/zprofile.local; then
-    . /etc/zprofile.local
+  if test -r /etc/zshenv.local; then
+    . /etc/zshenv.local
   fi
 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
-  if test -r /etc/zprofile; then
-    . /etc/zprofile
+  if test -r /etc/zshenv; then
+    . /etc/zshenv
   fi
 fi
 EOF
     ${if stdenv.hostPlatform == stdenv.buildPlatform then ''
-      $out/bin/zsh -c "zcompile $out/etc/zprofile"
+      $out/bin/zsh -c "zcompile $out/etc/zshenv"
     '' 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}
     mkdir -p $out/share/doc/