日常使用与更新
日常使用与更新
标准流程
cd ~/nixos-config
# 查看输出
nix flake show
# 求值检查
nix flake check --no-build
# 只构建,不切换当前系统
nix build .#darwinConfigurations.macbook-m1-max.system --no-link
# 确认后应用
sudo /nix/var/nix/profiles/default/bin/nix \
--extra-experimental-features "nix-command flakes" \
run nix-darwin/nix-darwin-26.05#darwin-rebuild -- \
switch --flake "$PWD#macbook-m1-max"
check 主要检查 flake 输出和模块求值;build 生成 system derivation;switch
才会修改 /etc、系统 profile、launchd 和 Homebrew 状态。
查看当前系统
readlink /run/current-system
/run/current-system/sw/bin/darwin-version
查看系统层命令:
for c in nix nvim chezmoi zellij btop starship; do
type -a "$c"
done
第一次激活后要关闭旧 shell,打开新的 Terminal。已有 shell 不会自动重新读取新的
/etc/zshrc。临时加载 Nix 可以用:
source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
Homebrew
当前配置是:
homebrew.onActivation = {
cleanup = "none";
autoUpdate = false;
upgrade = false;
};
含义是 switch 会安装声明的 cask/formula,但不会删除未分类软件,也不会每次 自动升级所有 Homebrew 软件。
brew list --formula
brew list --cask
brew update
brew outdated
Homebrew 更新和 flake 更新是两套不同的流程,不要混为一次更新。
更新 flake inputs
nix flake metadata
nix flake update nix-darwin
nix flake check --no-build
nix build .#darwinConfigurations.macbook-m1-max.system --no-link
需要全部更新时才执行:
nix flake update
当前 shell 与 sudo PATH
普通 shell 可能能找到 nix,但 sudo 找不到,因为 sudo 会清理 PATH。首次激活和
任何 sudo 命令都可以使用:
/nix/var/nix/profiles/default/bin/nix
激活成功并新开 Terminal 后,通常可以直接使用:
darwin-rebuild switch --flake ~/nixos-config#macbook-m1-max
免密码切换
当前 Darwin 配置还会生成一个固定目标的包装命令:
sudo darwin-rebuild-macbook
它只执行:
darwin-rebuild switch --flake /Users/tetsuya/nixos-config#macbook-m1-max
不会接受额外参数,因此没有开放整个 nix、shell 或任意 flake 的免密码 root 权限。
第一次安装这条 sudoers 规则时,仍然要使用原来的命令输入一次 macOS 登录密码;规则
只有在该次 switch 成功后才会生效。
如果以后改了仓库路径、主机名或希望支持 rollback,需要先修改包装脚本和 sudoers 规则,
再用一次普通 sudo 激活新 generation。不要为了省事直接改成 NOPASSWD: ALL。