GitHub ↗

generation、回滚与安全

generation、回滚与安全

什么是 generation

每次 nix-darwin 激活都会产生新的系统 profile,通常包括系统包、/etc 生成文件、 shell 初始化、launchd plist、Home Manager 生成和当前配置的构建产物。

旧 generation 通常仍然保留,所以配置错误时可以回到之前的系统 profile。

切换前检查

cd ~/nixos-config
git status --short --branch
git diff -- flake.nix flake.lock hosts modules docs
nix flake check --no-build
nix build .#darwinConfigurations.macbook-m1-max.system --no-link

查看和回滚

sudo /run/current-system/sw/bin/darwin-rebuild --list-generations
sudo /run/current-system/sw/bin/darwin-rebuild switch --rollback

具体版本的参数以帮助为准:

/run/current-system/sw/bin/darwin-rebuild --help

回滚的边界

Darwin generation 可以回滚 Nix 包、/etc 生成内容、Home Manager 激活内容和 launchd 声明。它不会自动回滚:

  • Homebrew 应用写入的用户数据;
  • 浏览器 profile;
  • SSH key、Bitwarden session、.env;
  • 模型、缓存、项目源码和构建目录;
  • macOS TCC 授权数据库;
  • macOS 系统升级。

所以 generation 是配置回滚,不是整机备份。重要数据仍需独立备份。

不要急着清理旧 generation

完成新 Terminal、CLI、Homebrew GUI、Home Manager、输入法、浏览器和 Agent 的 真实验证后,再考虑清理。切换成功不等于所有用户功能都已完成。

秘密与日志

不要把 .env、SSH 私钥、Bitwarden session、浏览器 cookie、API key 或个人机器 序列号贴进 issue、提交或学习文档。命令输出可以保留错误类型,但应删除敏感值。