使用 zimfw 配置 zsh
zimfw 比 oh my zsh 更轻量,适合把 zsh plugin、Starship 和 zoxide 的 shell integration
统一交给 zimfw module 管理。现在主方案是 Starship + zoxide + fzf,powerlevel10k
只作为备份方案保留。
安装 zsh 和基础工具
Debian / Ubuntu
sudo apt install -y zsh git curl chroma fzf
chsh -s "$(command -v zsh)"zoxide 可以用官方安装脚本安装到 ~/.local/bin。
curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh如果已经用 nix profile 管理用户态工具,也可以直接用 nix 安装。
nix profile add nixpkgs#zoxide如果 ~/.local/bin 没有在 PATH 里,先加到 ~/.zshrc。
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrcmacOS
brew install zsh git curl chroma fzf zoxide
chsh -s "$(command -v zsh)"Starship binary 的安装和 starship.toml 配置看 Starship 配置。
安装 zimfw
curl -fsSL https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zshZim install 会生成一批默认 module,例如 environment、git、input、termtitle、
utility、zsh-completions、completion、zsh-syntax-highlighting、
zsh-history-substring-search、zsh-autosuggestions。这些默认配置保留即可,不要重复追加。
只把自己额外需要的 module 放到 ~/.zimrc 末尾。
cat <<'EOF' >> ~/.zimrc
zmodule joke/zim-starship
zmodule antoineco/zim-zoxide
zmodule zimfw/ssh
zmodule romkatv/zsh-defer
EOF
zimfw install注意不要在 ~/.zimrc 里同时加载 powerlevel10k、asciiship、zimfw 自带 theme 或其他 prompt /
theme module。joke/zim-starship 会初始化 Starship,所以不要再在 ~/.zshrc 里写
eval "$(starship init zsh)"。同理,antoineco/zim-zoxide 会初始化 zoxide,所以不要再重复写
eval "$(zoxide init zsh)"。两个地方一起启用容易出现重复 prompt、样式错乱或初始化顺序问题。
如果使用 Zim install 默认生成的 .zimrc,还要确认 Prompt 这一段保持注释状态。
asciiship 是 prompt 本体,duration-info 和 git-info 是给 asciiship 用的辅助信息。
使用 Starship 时不要打开它们。
# Exposes to prompts how long the last command took to execute, used by asciiship.
#zmodule duration-info
# Exposes git repository status information to prompts, used by asciiship.
#zmodule git-info
# A heavily reduced, ASCII-only version of the Spaceship and Starship prompts.
#zmodule asciiship配置 zsh
下面是自用配置。systemctl 和 journalctl 相关 alias 只适合 Linux,macOS 上可以删掉。
cat <<'EOF' >> ~/.zshrc
# ============================================================
# fzf
# ============================================================
# fzf key bindings and completion
if command -v fzf >/dev/null 2>&1 && fzf --zsh >/dev/null 2>&1; then
source <(fzf --zsh)
fi
# ============================================================
# Python venv
# ============================================================
activate_venv() {
local venv_path="${1:-.venv}"
local candidate
local activate=""
local candidates=(
"$venv_path"
"$venv_path/bin/activate"
"$venv_path/.venv/bin/activate"
)
for candidate in "${candidates[@]}"; do
if [[ -f "$candidate" ]]; then
activate="$candidate"
break
fi
done
if [[ -z "$activate" ]]; then
print -u2 "No virtual environment activation script found for '$venv_path'."
return 1
fi
source "$activate"
}
deactivate_venv() {
if (( $+functions[deactivate] )); then
deactivate
return
fi
print "No active Python virtual environment."
}
alias venv="activate_venv"
alias va="activate_venv"
alias vde="deactivate_venv"
# ============================================================
# Aliases
# ============================================================
# zoxide
alias j="z"
alias ji="zi"
# Git
alias g="git"
alias gct="git commit"
alias gs="git stash"
alias gr1="git reset --soft HEAD~1"
alias gp="git pull"
alias ggp="git push"
alias gaa="git add ."
alias gch="git checkout"
# JavaScript runtime
alias nr="npm run"
alias br="bun run"
alias bx="bunx"
# Python
alias uvpy="uv run python"
alias uvpip="uv pip"
# Linux systemd
alias sdr="systemctl daemon-reload"
alias sr="systemctl restart"
alias jl="journalctl -o cat -fu"
# Tools
alias ard="aria2c --summary-interval=10 -x 3 --allow-overwrite=true -Z"
EOF
source ~/.zshrc如果之前用过 autojump,可以把历史数据导入 zoxide。
zoxide import --from=autojump ~/.local/share/autojump/autojump.txt备份方案:Powerlevel10k
如果要临时回退到 p10k,只保留一个 prompt。启用 p10k 时,把 ~/.zimrc 里的
zmodule joke/zim-starship 注释掉;切回 Starship 时,再从 ~/.zimrc 移除或注释
zmodule romkatv/powerlevel10k。
cat <<'EOF' >> ~/.zimrc
zmodule romkatv/powerlevel10k
EOF
zimfw install
p10k configure