Always-on and machine hooks already live in .zshenv / local.zsh.
Drop the empty stub, remove it on deploy, and leave real .zprofile
files to optional migration into local.zsh only.
Drop ~/.config/zsh/{env,interactive,login} modules. PATH and local.zsh
live in .zshenv; interactive UX is a single .zshrc again. Deploy only
installs the three stubs and removes obsolete trees/examples.
Replace the local/ directory of split env/login/interactive files with
one always-on local.zsh sourced from .zshenv. Deploy migrates old
fragments and never overwrites local.zsh.
Split always-on PATH/env, login hooks, and interactive UX into a
managed tree under ~/.config/zsh, with never-overwrite local/ hooks.
Agents and interactive shells share one PATH owner; deploy.sh applies
the layout safely across machines.
Non-interactive agent shells (Codex, Claude) skip .zshrc and never saw
user-local tools installed via pipx/uv/grok. Add ~/.local/bin in
.zshenv with an idempotent guard, and source optional
~/.config/zshenv.local for machine-local early env.
zoxide is part of the base install; a short j jump alias matches
common muscle memory. Refresh omz on a monthly cadence instead of
the bi-weekly default.
Keep ~/.zshrc upgrade-friendly by not shipping author-specific
plugin samples as patch targets. Prefer the flag-tolerant trash
function over bare aliases so common rm -f usage still works.
Set ZSH_DISABLE_COMPFIX=true so oh-my-zsh runs compinit -u instead of -i,
skipping the per-startup compaudit security scan. The completion directories
are machine-owned and not group/world-writable, so the audit only costs time.
Combined with deferring pyenv init in ~/.config/zshrc/pyenv.zsh, this cuts
interactive startup from ~258ms to ~211ms and agent shells from ~226ms to
~183ms.
Co-authored-by: Cursor <cursoragent@cursor.com>
Uncomment history-substring-search, systemd, k, extract, and sudo, and add
poetry to the default plugin list; all are installed via the bundled or custom
plugin dirs. Switch to robbyrussell when CURSOR_AGENT is set so Cursor's agent
terminal skips powerlevel10k, keeping interactive shells on p10k.
Co-authored-by: Cursor <cursoragent@cursor.com>
.zshenv runs brew shellenv for every zsh, including non-interactive and
GUI-launched shells; without a safe CWD the eval fails or triggers a
permission prompt when launched from a TCC-protected directory such as
~/Documents. Run it from /tmp.
The eza `l` alias (and the myip/e/ip/a/aa group) was defined before
oh-my-zsh loaded, so lib/directories.zsh overrode `l` back to ls. Move
the alias block after the oh-my-zsh source so the eza versions win.
Also document the ~/.config/zshrc personal-config mechanism and patch.sh
in the README, which previously only had a title.
Co-authored-by: Cursor <cursoragent@cursor.com>
Move brew shellenv into .zshenv so PATH is available outside
interactive shells, and make install guarantee a Trash backend
for safer rm aliases on both macOS and Linux.