Zsh 的 Nix 化配置#
Home Manager 提供了极其强大的 programs.zsh 选项,让你在 Nix 代码里就能管理所有插件。
{ pkgs, lib, ... }: {
programs.zsh = {
enable = true;
enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
# 别名 (Aliases)
shellAliases = {
ll = "ls -l";
build-system = "nixos-rebuild build --flake .#my-host";
};
# 插件 (Plugins)
plugins = [
{
name = "zsh-nix-shell";
file = "nix-shell.plugin.zsh";
src = pkgs.fetchFromGitHub {
owner = "chisui";
repo = "zsh-nix-shell";
rev = "v0.8.0";
hash = lib.fakeHash; # 占位;首次构建核验来源后填写实际固定输出 hash
};
}
];
# 自定义 .zshrc 内容
initExtra = ''
export PATH=$HOME/.bin:$PATH
'';
};
}提示符:Starship#
如果你喜欢现代化的终端提示符,配置非常简单:
{
programs.starship = {
enable = true;
# 这里可以自定义 starship.toml
settings = {
add_newline = false;
character = {
success_symbol = "[➜](bold green)";
error_symbol = "[➜](bold red)";
};
};
};
}常用命令行工具 (CLI)#
这些工具在 Home Manager 下也有专门的配置项:
programs.git:配置用户名、邮箱和别名。programs.fzf:自动启用 Zsh 绑定。programs.direnv:进入目录自动加载开发环境。programs.bat:带语法高亮的cat。
为什么这样做?#
- 开箱即用:在新机器上克隆配置后,运行一下命令,你所有的 Shell 插件和主题就全自动装好了。
- 配置复用:你可以轻松地把 Zsh 配置做成一个单独的文件,在不同的机器(甚至是在 macOS 上)共享。
迁移提示#
在 configuration.nix 层面只需指定 users.defaultUserShell = pkgs.zsh;,具体的 Shell 细节全部交给 Home Manager 管理。
版本适配与 Shell 边界#
例子保留了历史 Home Manager 的 initExtra 写法;新版本可能采用 initContent。插件版本与 hash 必须按实际锁定来源核验,不能把占位值当作已验证配置。系统层还需启用 programs.zsh.enable 并设置用户登录 Shell;Home Manager 管理用户配置。
参考与延伸
根据技术笔记重新整理,示例使用通用名称。