个人 Nix / Home Manager 配置仓库,用于统一管理多主机开发环境。
推荐使用清华镜像(多用户模式):
sh <(curl -L https://mirrors.tuna.tsinghua.edu.cn/nix/latest/install) --daemon官方安装脚本:
sh <(curl -L https://nixos.org/nix/install) --daemongit clone https://github.com/oevery/nix-config ~/.config/home-manager
cd ~/.config/home-managerLinux(Home Manager):
nix run github:nix-community/home-manager -- switch --flake .#<homeConfigurationName>macOS(nix-darwin,需要 sudo):
sudo nix run nix-darwin#darwin-rebuild -- switch --flake .#oevery-mac常用 alias:
- Linux:
hms - macOS:
drs - macOS 调试:
drst
切换前可先检查:
hchc 会检查当前 host 对应的配置:Linux 只检查当前 homeConfigurationName,macOS 同时检查当前 homeConfigurationName 和 darwinName。
完整命令速查见 docs/commands-cheatsheet.md。
homeConfigurations使用显式的homeConfigurationName作为 key。darwinConfigurations使用稳定的darwinName作为 key,不依赖运行时hostname。
当前示例主机:
- Linux 默认 Home Manager 配置:
homeConfigurationName = "oevery" - macOS 配置:
homeConfigurationName = "oevery-mac",darwinName = "oevery-mac"
- Linux(非 NixOS):优先
/etc/nix/nix.conf - macOS(nix-darwin):优先
modules/darwin/core/system.nix中的nix.settings
Linux nix.conf 参考模板见 docs/linux-nix-conf.md。
- 优先用 Nix/Home Manager 管理 CLI 与开发环境。
- macOS 下用 Homebrew 补充 GUI 或 Nix 不便安装的应用。
- 默认保留个人 Git 身份。
- Home Manager 会额外生成
~/.config/git/local.gitconfig与~/.config/git/work.gitconfig。 - 主 Git 配置只 include
~/.config/git/local.gitconfig,再由这个本地文件继续声明默认的includeIf规则。 - 默认会把
~/Developer/work/下的仓库导向~/.config/git/work.gitconfig,适合填写公司身份。 - 这些文件只在 Git 运行时被 include,不参与 flake import。
标准检查:
nix flake check快速验证输出:
nix eval --raw path:$PWD#homeConfigurations.<homeConfigurationName>.activationPackage.drvPath
nix eval --raw path:$PWD#darwinConfigurations.oevery-mac.config.system.build.toplevel.drvPath常见问题:
- 找不到 Linux 主机配置:检查
hosts/default.nix是否注册了对应的homeConfigurationName。 - Darwin 找不到目标:检查对应
hosts/*.nix是否定义唯一darwinName,并且已在hosts/default.nix注册。 modules字段报错:hosts/*.nix的modules只能使用仓库允许的模块键。
- 在
hosts/新建主机文件,使用mkHost定义数据。 - 在
hosts/default.nix注册该主机。 - 为每台主机设置唯一的
homeConfigurationName。 - 若为 macOS,再设置唯一
darwinName。 - 使用
nix flake check或求值命令验证配置。
- 没有 key 时先生成一个:
gpg --quick-generate-key "Your Name <you@example.com>" ed25519 sign 00 表示不过期。
- 查看私钥 Key ID:
gpg --list-secret-keys --keyid-format LONG --with-colons you@example.com | awk -F: '$1=="sec"{print $5}'- 将输出的 Key ID 写入对应
hosts/*.nix:
gpgKey = "YOUR_KEY_ID";- 如果已有 key,直接执行第 2 步即可。