refactor(shell): simplify zsh profile startup

Summary:
- Move reusable PATH setup into a shared .pathrc and source it from zsh
  login and interactive startup.
- Keep .zshenv minimal, and guard p10k, Oh My Zsh, and terminal-only
  setup so non-terminal shells stay quiet.
- Preserve Emacs vterm p10k support while skipping prompt-heavy setup in
  eshell-style sessions.

Rationale:
- The local profile had startup-time side effects, duplicate PATH/plugin
  setup, and non-terminal noise similar to the cleanup already done on
  dabel.
- Neutral helper names avoid personal prefixes in reusable profile code.

Tests:
- zsh -n ~/.zshenv ~/.zprofile ~/.zshrc ~/.pathrc
- zsh -lic 'print ok'
- INSIDE_EMACS=eshell TERM=dumb zsh -ic 'print ok; print theme=$ZSH_THEME'
- INSIDE_EMACS=vterm TERM=xterm-256color zsh -ic 'print ok; print theme=$ZSH_THEME'
- SSH_AUTH_SOCK=/tmp/test-sock zsh -lc 'printf "%s\n" "$SSH_AUTH_SOCK"'

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Petr Nyc
2026-06-05 13:36:44 +02:00
parent 4d6a76487f
commit bf5f2131b4
4 changed files with 308 additions and 414 deletions

152
.zshenv
View File

@@ -1,157 +1,9 @@
set -o vi
# Minimal zsh environment. This file is read by every zsh process, including
# non-interactive shells, so keep startup work out of it.
export LC_ALL=en_US.UTF-8
export PATH=/Users/jetpac/.asdf/shims/:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/jetpac/work/flutter/bin:$HOME/.rd/bin:$HOME/bin:$PATH:$HOME/.fzf/bin:$HOME/Documents/codex-tools/mcpgw-cli/
# homebrew config
# output of brew shellenv
export HOMEBREW_PREFIX="/opt/homebrew";
export HOMEBREW_CELLAR="/opt/homebrew/Cellar";
export HOMEBREW_REPOSITORY="/opt/homebrew";
fpath[1,0]="/opt/homebrew/share/zsh/site-functions";
eval "$(/usr/bin/env PATH_HELPER_ROOT="/opt/homebrew" /usr/libexec/path_helper -s)"
[ -z "${MANPATH-}" ] || export MANPATH=":${MANPATH#:}";
export INFOPATH="/opt/homebrew/share/info:${INFOPATH:-}";
alias oe='open /Applications/Emacs.app'
# Force mc to use bash for its subshell
alias mc='SHELL=/bin/bash mc'
alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
alias -g N="2>&1 "
alias pig='ping'
alias ops='OCI_CLI_PROFILE=solarisx86-us-phoenix-1-apikey ops'
# export PATH=$HOME/.rd/bin
#
# on speccy only
if [[ "$(hostname)" == "speccy" ]];
then
# defined via https://github.com/syl20bnr/spacemacs/wiki/Terminal
export TERM=xterm-24bit
alias ssh="TERM=xterm-256color ssh"
alias vi=te
alias vim=te
fi
# for gems installed in my home direcotry
# inspiration: https://guides.cocoapods.org/using/getting-started.html#installation
export GEM_HOME=$HOME/.gem
export PATH=$GEM_HOME/bin:$PATH
# change iTerm & tmux profile
# doc:
# https://iterm2.com/documentation-escape-codes.html
# https://github.com/tmux/tmux/issues/1502
## change color profile in iTerm
##it2prof() { echo -e "\033]50;SetProfile=$1\a" }
function print_osc() {
if [[ -n $TMUX ]] ; then
printf '\033Ptmux;\033\033]';
else printf '\033]'; fi
}
function print_st() {
if [[ -n $TMUX ]] ; then
printf '\a\033\\'
else printf '\a'; fi
}
function set_iterm_profile() {
readonly profile=${1:?"The profile must be specified."}
print_osc
printf "1337;SetProfile=$profile"
print_st
}
function set_tmux_profile() {
if [[ -n $TMUX ]]; then
profile=${1:?"The profile must be specified."}
tmux source-file $HOME/.tmux/plugins/tmux-colors-solarized/tmuxcolors-${profile}.conf
fi
}
function set_dark() {
set_iterm_profile 'Solarized Dark'
set_tmux_profile 'dark'
}
function set_light() {
set_iterm_profile 'Solarized Light'
set_tmux_profile 'light'
}
export seznam6='2a02:598:2::1222'
export OPENAI_API_KEY='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'
# for flutter
# export PATH=$PATH:/Users/jetpac/Documents/flutter-dev-env/bin
export NVM_DIR="$HOME/.nvm"
# nvm initialization is commented out; it significantly slows down shell startup
# [ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"
#
ZSH_AUTOSUGGEST_ACCEPT_WIDGETS='vi-forward-char'
#ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS='end-of-line'
#
# alias km='kubectl --kubeconfig /Users/jetpac/.kube.lenovo/config'
alias nextcloud-shell='k exec -n nextcloud deployments/nextcloud -c nextcloud -it -- runuser --user www-data bash'
alias nextcloud-shell-root='k exec -n nextcloud deployments/nextcloud -c nextcloud -it -- bash'
alias occ='k exec -n nextcloud deployments/nextcloud -c nextcloud -it -- runuser --user www-data /var/www/html/occ'
alias speech_to_text="$HOME/Downloads/whisper.cpp/convert_video_to_txt.sh"
if [ -f "/Users/jetpac/.local/bin/k9s" ]; then
alias k9s='/Users/jetpac/.local/bin/k9s --logoless'
fi
# lh nodes function for kubectl
if [[ -n ${commands[kubectl]} ]]; then
lh_nodes() {
local ns="${1:-longhorn-system}"
kubectl -n "$ns" get nodes.longhorn.io -o yaml | \
yq eval '
.items[] |
{
"node": .metadata.name,
"allowScheduling": .spec.allowScheduling,
"disks": (
[ (.spec.disks // {}) | to_entries | .[] |
{
"diskName": .key,
"path": .value.path,
"allowScheduling": .value.allowScheduling,
"evictionRequested": .value.evictionRequested,
"storageReservedGiB": ((.value.storageReserved // 0) / 1073741824)
}
]
),
"diskStatus": (
[ (.status.diskStatus // {}) | to_entries | .[] |
{
"diskName": .key,
"storageAvailableGiB": ((.value.storageAvailable // 0) / 1073741824),
"storageMaximumGiB": ((.value.storageMaximum // 0) / 1073741824),
"storageScheduledGiB":((.value.storageScheduled // 0) / 1073741824)
}
]
)
}'
}
fi
alias scm-ssh='/Users/jetpac/.ssh/scm-script.sh'