OFFSET偏移
← 文章目录OFFSET / FIELD NOTESNO. 033

Home Manager 集成与模块化

比较独立模式和 NixOS 模块模式,再拆分用户配置。

所在专题Home Manager:用户配置管理 ↗
约 4 分钟阅读开始阅读

两种安装模式的权衡#

特性 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 激活入口;用户配置是否已经切换仍应检查激活服务。程序的可变数据、正在运行的进程和数据库不会自动恢复为历史快照。

参考与延伸

  1. Home Manager 手册 ↗
  2. Home Manager 命令源码 ↗
  3. Home Manager 文件选项源码 ↗

根据技术笔记重新整理,示例使用通用名称。

沿专题继续阅读

Home Manager:用户配置管理

  1. 01Home Manager 集成与模块化
  2. 02Home Manager 终端环境配置
  3. 03Home Manager 桌面与主题配置
  4. 04Home Manager 文件与符号链接
  5. 05Home Manager 与 NixOS 密钥管理
  6. 06Home Manager 用户级配置管理教程
CONTINUE READING / 下一篇Home Manager 终端环境配置

用模块配置 Zsh、Starship 和常用命令行工具。