两种安装模式的权衡#
| 特性 | 1. 独立模式 (Standalone) | 2. NixOS 模块模式 (Module) |
|---|---|---|
| 应用命令 | home-manager switch |
nixos-rebuild switch |
| 独立性 | 高,可以不改系统配置 | 低,必须写在系统配置里 |
| 回滚 | 系统回滚与 HM 回滚是分开的 | 随系统一起回滚 (极其同步) |
| 推荐人群 | 想在 Arch/macOS 上用 Nix | NixOS 用户 (强烈推荐此项) |
实战:在 Flake 中以模块方式集成#
这种方式能保证你的系统和个人配置通过同一个 flake.lock 管理。
1. 修改 flake.nix
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { nixpkgs, home-manager, ... }: {
nixosConfigurations.my-host = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
home-manager.nixosModules.home-manager {
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.alice = import ./home.nix;
}
];
};
};
}2. 创建 home.nix
这是你个人配置的核心。
{ config, pkgs, ... }: {
home.username = "alice";
home.homeDirectory = "/home/alice";
# 只有在这里添加的包,才属于你个人
home.packages = [ pkgs.ripgrep pkgs.fd ];
programs.home-manager.enable = true;
home.stateVersion = "24.11"; # 示例初装版本,升级输入时不自动修改
}模块化你的 home.nix#
随着配置变多,home.nix 会变得非常臃肿。你可以利用 imports 拆分它:
# home.nix
{
imports = [
./modules/zsh.nix
./modules/git.nix
./modules/vscode.nix
];
}为什么选模块模式?#
当你在引导界面选择一个旧版本回滚时,如果是模块模式,系统配置会包含对应的 Home Manager 激活入口;用户配置是否已经切换仍应检查激活服务。程序的可变数据、正在运行的进程和数据库不会自动恢复为历史快照。
参考与延伸
根据技术笔记重新整理,示例使用通用名称。