"让你的配置‘现代且可移植’。" 手把手带你完成从传统的
/etc/nixos/configuration.nix到 Flakes 的迁移。
第一步:创建项目目录#
创建一个专门存放配置的目录(比如 ~/nixos-config),千万不要直接在 /etc/nixos 目录下乱搞。
mkdir ~/nixos-config
cd ~/nixos-config
# 复制原有的硬件配置
cp /etc/nixos/hardware-configuration.nix .
# 复制原有的系统配置
cp /etc/nixos/configuration.nix .第二步:编写 flake.nix#
在项目根目录创建 flake.nix。
{
description = "我的 2026 版 NixOS 配置";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
};
outputs = { self, nixpkgs, ... }@inputs: {
nixosConfigurations.my-host = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
# 传递参数给子模块
specialArgs = { inherit inputs; };
modules = [
./configuration.nix
];
};
};
}第三步:调整 configuration.nix#
由于我们在 Flake 里使用了 nixpkgs.lib.nixosSystem,原本 configuration.nix 顶层的参数可能需要调整:
# 修改前:
# { config, pkgs, ... }:
# 修改后:
{ config, pkgs, inputs, ... }: {
imports = [
./hardware-configuration.nix
];
# 启用 Flakes 和新的 Nix CLI
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# 其他配置项...
system.stateVersion = "24.11"; # 示例初装版本;迁移时保留原值
}第四步:构建并应用#
注意:在 Flake 模式下,当 Flake 通过本地 Git 工作树读取时,所引用的文件需要纳入 Git 跟踪(新文件可先 git add);显式 path: 来源的行为不同。先检查暂存内容,避免加入私钥和无关文件。
git init
git add flake.nix configuration.nix hardware-configuration.nix
nix flake check --no-build
nixos-rebuild dry-build --flake .#my-host
nixos-rebuild build --flake .#my-host
# 检查构建结果、恢复路径与变更后,手动激活:
sudo nixos-rebuild switch --flake .#my-host.:表示当前目录。#my-host:匹配outputs.nixosConfigurations中定义的名称。
迁移后的好处#
- 不再依赖全局 Channel:系统版本完全由
flake.lock决定。 - 易于备份:只需要把这个目录推送到 GitHub。
- 模块化:可以轻松拆分出
desktop.nix,user.nix等子文件并在configuration.nix的imports里引用。
激活后的确认#
构建成功只能证明构建层。激活后仍需检查当前系统代际、服务状态与桌面行为,再继续集成 Home Manager。
参考与延伸
根据技术笔记重新整理,示例使用通用名称。