fix: add .zshenv for non-login shell support#72
Merged
Conversation
Fixes #114 Problem: - Dotfiles failed to load in non-login shells (SSH, tmux, subshells) - .zprofile only runs for login shells, but sets critical ZDOTDIR - Without ZDOTDIR, zsh looks for .zshrc in wrong location - shortcutrc had 664 permissions, rejected by safe_source Changes: - Add .zshenv with XDG variables and ZDOTDIR (runs for ALL shells) - Update install.sh to symlink .zshenv to $HOME/.zshenv - Fix generate-shortcuts.sh to create shortcutrc with 644 permissions Impact: - Aliases and dotfiles now work in all shell types - Maintains security with proper file permissions
maxrantil
added a commit
that referenced
this pull request
Nov 17, 2025
Fixes maxrantil/vm-infra#115 Problem: - Aliases like 'v' and 'e' don't work in non-login shells (SSH) - These aliases depend on $EDITOR being set - EDITOR, VISUAL, BROWSER, and PATH were only in .zprofile - .zprofile only runs for login shells Changes: - Move EDITOR, VISUAL, BROWSER to .zshenv (runs for ALL shells) - Move PATH addition to .zshenv (needed for user scripts) - Add shellcheck directive to .zprofile - Fix SC2155 warnings in .zprofile (separate declare and assign) - Update .zprofile with note explaining variable locations - Keep less critical variables in .zprofile (LESSHISTFILE, etc.) Impact: - Aliases 'v', 'e' now work in SSH sessions - User scripts in ~/.local/bin are found in all shells - Completes the .zshenv fix started in #72
maxrantil
added a commit
that referenced
this pull request
Nov 17, 2025
Fixes maxrantil/vm-infra#115 Problem: - Aliases like 'v' and 'e' don't work in non-login shells (SSH) - These aliases depend on $EDITOR being set - EDITOR, VISUAL, BROWSER, and PATH were only in .zprofile - .zprofile only runs for login shells Changes: - Move EDITOR, VISUAL, BROWSER to .zshenv (runs for ALL shells) - Move PATH addition to .zshenv (needed for user scripts) - Add shellcheck directive to .zprofile - Fix SC2155 warnings in .zprofile (separate declare and assign) - Update .zprofile with note explaining variable locations - Keep less critical variables in .zprofile (LESSHISTFILE, etc.) Impact: - Aliases 'v', 'e' now work in SSH sessions - User scripts in ~/.local/bin are found in all shells - Completes the .zshenv fix started in #72
maxrantil
added a commit
that referenced
this pull request
Nov 17, 2025
* fix: move EDITOR, VISUAL, BROWSER, and PATH to .zshenv Fixes maxrantil/vm-infra#115 Problem: - Aliases like 'v' and 'e' don't work in non-login shells (SSH) - These aliases depend on $EDITOR being set - EDITOR, VISUAL, BROWSER, and PATH were only in .zprofile - .zprofile only runs for login shells Changes: - Move EDITOR, VISUAL, BROWSER to .zshenv (runs for ALL shells) - Move PATH addition to .zshenv (needed for user scripts) - Add shellcheck directive to .zprofile - Fix SC2155 warnings in .zprofile (separate declare and assign) - Update .zprofile with note explaining variable locations - Keep less critical variables in .zprofile (LESSHISTFILE, etc.) Impact: - Aliases 'v', 'e' now work in SSH sessions - User scripts in ~/.local/bin are found in all shells - Completes the .zshenv fix started in #72 * docs: update session handoff for Issue #115 fix
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes maxrantil/vm-infra#114
Adds
.zshenvfile to ensure dotfiles work in non-login shells (SSH, tmux, subshells).Problem
.zprofileonly runs for login shells but sets criticalZDOTDIRZDOTDIR, zsh looks for.zshrcin wrong location ($HOMEinstead of~/.config/zsh/)shortcutrchad 664 permissions, rejected bysafe_sourcesecurity checksChanges
.zshenv: Minimal file with XDG variables and ZDOTDIR (sourced for ALL shells)install.sh: Now symlinks.zshenvto$HOME/.zshenvgenerate-shortcuts.sh: Sets secure 644 permissions on generatedshortcutrcTesting
✅ Tested in VM provisioned with
--test-dotfiles✅ Aliases work in SSH sessions:
cf,sc,h,docall functional✅
ZDOTDIRcorrectly set to/home/mr/.config/zsh✅
shortcutrchas correct permissions (644, not 664)✅ All pre-commit hooks passing
Impact
--test-dotfilesflagFiles Changed
.zshenv(new): XDG and ZDOTDIR setup for all shellsinstall.sh: Added .zshenv symlinkinggenerate-shortcuts.sh: Added chmod 644 for security compliance