Yuhao Qing d5afd25bbe perf(pyenv): initialize shell integration once without rehash
Login shells source the fragment twice to restore shim precedence after the system profile. Reapplying PATH does not require repeating shell integration or rebuilding shims.
2026-09-08 00:41:08 +08:00
2026-08-06 14:41:46 +08:00

Easy Zsh Setup

One-command zsh environment: oh-my-zsh, powerlevel10k, and a curated plugin set (autosuggestions, syntax-highlighting, completions, history-substring-search, fzf-tab, k), plus eza, zoxide, fzf, and Nerd Fonts.

Install

curl -fsSL https://git.miomio.moe/mio/easyzsh/raw/branch/master/install.sh | bash

Options:

  • --cp-hist / -c — import bash history
  • --non-interactive / -n — skip default-shell change and optional prompts
  • --with <names> — install optional add-ons (comma-separated, repeatable). Each name runs install_<name>.sh (currently: fnm, pyenv, nvm). Interactive installs (without -n and without --with) prompt for the same list.
./install.sh --with fnm
./install.sh --with fnm,pyenv -n
curl -fsSL …/install.sh | bash -s -- --with fnm

From a git checkout (shell stubs only):

./deploy.sh

Layout

Path Role Reinstall
~/.zshenv Always-on: Homebrew, ~/.local/bin, ~/.config/zsh/*.zsh, then local.zsh Overwritten
~/.zshrc Interactive: omz, plugins, aliases, fzf, zoxide Overwritten
~/.config/zsh/*.zsh Always-on tool fragments (e.g. fnm.zsh) Left alone (via patch.sh)
~/.config/zsh/local.zsh Machine-local overrides (every zsh, including agents) Never overwritten
~/.config/zshrc/*.zsh Personal/tool overlays before oh-my-zsh (interactive) Left alone
~/.local/bin/ User tools + shims (grok → Grok CLI; agent → Cursor when installed) Left alone except those two shims

Core deploy does not manage ~/.zprofile. The pyenv add-on appends one login hook so macOS path_helper cannot outrank pyenv shims. Put other machine hooks in local.zsh.

Do not put ~/.grok/bin on PATH. That tree ships an agent that shadows Cursor. Grok is the grok command (~/.local/bin/grok). Cursor is agent and cursor-agent. Deploy and .zshenv retarget a Grok-stolen ~/.local/bin/agent; .zshrc drops ~/.grok/bin again if a Grok upgrade prepends it.

# ~/.config/zsh/local.zsh
. "$HOME/.cargo/env"

# ~/.config/zshrc/prefs.zsh
plugins+=(docker)

Tool fragments from this repo:

# always-on (sourced from ~/.zshenv)
curl -fsSL https://git.miomio.moe/mio/easyzsh/raw/branch/master/patch.sh | bash -s -- zsh/fnm zsh/pyenv
S
Description
No description provided
Readme
318 KiB
Languages
Shell 100%