为什么迁移?#
之前我的 Shell 配置使用 Oh My Zsh 和 Powerlevel10k。它精致而且速度 很快,但提示符绑定在 Zsh 上。我希望在 macOS、Linux、HPC 集群和 Windows PowerShell 中使用同一套视觉风格,因此将提示符迁移到了 Oh My Posh。
Oh My Posh 将提示符主题与 Shell 分离,所以同一个 JSON 配置可以由 Zsh 和
PowerShell 初始化。现在使用的是锦鲤主题
jinli.omp.json,
配色基于 Catppuccin。

Jinli 主题展示什么?#
这个主题希望在不让提示符变得拥挤的前提下,始终显示有用的上下文信息:
- 路径区会根据上下文显示家目录、不可写目录、GitHub、Git、npm、Downloads、 Pictures 和普通目录图标;
- Git 区显示仓库、分支、工作区状态和变更数量;
- 当前项目相关时,在右侧显示 Python 和 Node 版本;
- SSH 会话会显示远程图标,方便识别当前 Shell 是否位于远程机器;
- 电池、时间、命令耗时和退出状态会根据机器环境自适应,并保持右对齐;
- 同一个主题可用于 Zsh 和 PowerShell,周边配置也支持 Linux、macOS、Windows 和 NixOS。
当前配置结构#
现在最重要的变化,是将稳定的公共配置与工具可以修改的本地配置分开:
- 仓库中的
.zshrc.common保存共享的 Zsh 配置; ~/.zshrc是安装脚本创建的普通本地文件。它会先加入 Oh My Posh 的可执行 文件目录,再加载.zshrc.common;- Conda、OpenClaw 等工具可以向
~/.zshrc追加配置,而不会修改 Git 管理的 公共文件; - 为兼容旧版安装,如果已有
~/.zshrc.local,它会在公共配置之后继续被加载; - 在 macOS/Linux 上,主题会链接到
~/.config/oh-my-posh/jinli.omp.json。
机器专属配置应放在 ~/.zshrc 中,例如:
| |
这样私有变量、集群 module、工作站专属别名和本地工具路径就不会进入共享仓库。
Oh My Zsh 仍然是可选的#
Oh My Posh 是提示符引擎,并不取代所有 Zsh 插件。共享配置会启用 zsh-autosuggestions 和 fast-syntax-highlighting。
如果已经安装 Oh My Zsh,脚本会将两个插件安装并加载到它的自定义插件目录;
否则会将插件安装到 ~/.local/share/zsh/plugins 并直接加载。为了使用这些插件,
不需要额外安装 Oh My Zsh。
共享 Zsh 配置还提供不区分大小写、支持子串匹配的补全。例如输入
cd dev<Tab>,可以补全为 itrip-dev-doc。配置还通过 AUTO_PUSHD 和
PUSHD_IGNORE_DUPS 维护目录栈,可以使用 cd -<数字> 和 dirs -v 浏览历史目录。
安装#
macOS 和 Linux#
请以普通用户运行。macOS 请先安装 Homebrew:
| |
脚本会询问仓库目录。直接按 Enter 使用 ~/Documents/GitHub/ShellConfig,也可以
输入其他目录。运行前设置 SHELL_CONFIG_DIR 时,它会作为建议的安装目录。
脚本会安装 Oh My Posh 和 Zsh 依赖,安装插件,创建主题链接,创建本地
~/.zshrc,并询问是否安装 Meslo Nerd Font。完成后请重启终端,或运行
exec zsh。
已有安装请从仓库目录运行更新脚本:
| |
更新脚本使用自身所在目录定位仓库,因此即使仓库不在默认目录也可以正常更新。
它会更新仓库和主题链接,同时保留本地 ~/.zshrc。
Windows PowerShell#
以普通用户运行:
| |
PowerShell 脚本会在缺少 Oh My Posh 或 Git 时通过 WinGet 安装,询问仓库目录,
并且只更新 $PROFILE 中由 ShellConfig 管理的区块,保留用户和其他工具的配置。
主题直接从所选仓库目录加载;Windows 不使用 Unix 风格的 ~/.config 主题链接。
NixOS#
本仓库也通过 Flake 提供 NixOS 模块:
| |
然后重建系统并启动新的会话:
| |
字体与终端设置#
主题使用 Nerd Font 图标。请在终端配置中安装并选择 MesloLGM Nerd Font, 否则图标可能显示为方框。使用 WSL 时,请在 WSL 内运行 Linux 安装脚本,但在 Windows 中安装并配置字体。
没有 sudo 权限的 HPC 集群#
macOS/Linux 安装脚本会在尝试安装系统软件前询问 sudo,并检查 curl、git、
unzip 和 zsh。如果没有 sudo 且只有 Zsh 缺失,脚本可以将 ncurses 和 Zsh
编译到默认的 ~/.local,也可以通过 $SHELL_CONFIG_PREFIX 指定其他目录。编译器
和 make 必须已经可用,通常可以通过集群 module 加载。
其他缺失依赖需要由集群提供,或由用户安装到自己的环境中。可以在本地 ~/.zshrc
中加载 module,并将用户目录下的可执行文件目录加入 PATH。
Neovim 保持独立#
LazyVim 安装脚本与提示符安装脚本保持独立:Oh My Posh 负责 Shell 提示符,LazyVim 负责管理 Neovim 配置和编辑器插件。
| |
脚本会检查 Neovim 版本是否为 0.11.2 或更高,备份已有的 Neovim 配置和数据,
并将 LazyVim starter 克隆到 ~/.config/nvim。它不再管理旧版 ~/.vimrc。之后
启动 nvim 安装插件,并运行 :checkhealth 或 :LazyHealth。
最终效果#
现在 Zsh 和 PowerShell 使用同一个主题,共享配置保存在 Git 中,机器专属工具可以
安全地修改本地 ~/.zshrc。这样配置就能更容易地在个人电脑、Linux 工作站、HPC
集群和 Windows 之间迁移,同时避免机器专属改动与公共配置发生冲突。
