Skip to content

目录结构

一个标准的用户配置仓库长这样:

.
├── flake.nix                             # 唯一入口
├── hosts/                                # NixOS 主机
│   └── nixos-desktop.x86_64-linux/
│       └── default.nix                   #   -> nixosConfigurations.nixos-desktop
├── homes/                                # home-manager 用户
│   └── rhencloud/
│       ├── default.nix                   #   -> homeConfigurations.rhencloud
│       └── nixos-desktop.nix             #   -> homeConfigurations."rhencloud@nixos-desktop"
├── modules/                              # 可复用模块(单树,自动分拣)
│   ├── desktop/hyprland/
│   │   ├── default.nix                   #   中性模块:声明共享 option
│   │   ├── nixos.nix                     #   注入 NixOS
│   │   └── home.nix                      #   注入 home-manager
│   └── shell/fish/
│       ├── default.nix
│       └── home.nix                      #   仅 HM 侧,可无 nixos.nix
├── packages/                             # 自定义包
│   └── <name>/default.nix
├── overlays/                             # overlays(含 patch 逻辑)
│   └── <name>/default.nix
├── lib/                                  # 项目级工具库
├── shells/<name>/default.nix             # devShells
├── checks/<name>/default.nix             # flake checks
└── secrets/                              # sops(common.yaml + hosts/<host>.yaml)

Output 映射

每个目录层级都映射到一个 flake output:

目录生成的 output
hosts/<name>.<system>/default.nixnixosConfigurations.<name>
homes/<user>/default.nixhomeConfigurations.<user>
homes/<user>/<host>.nixhomeConfigurations."<user>@<host>"
modules/**/{default,nixos,home}.nix自动注入两侧模块列表
packages/<name>/default.nixpackages.<name>(另支持 packages/<name>.<system> 单架构)
overlays/<name>/default.nixoverlays.<name>
lib/lib
shells/<name>/default.nixdevShells.<system>.<name>
checks/<name>/default.nixchecks.<system>.<name>

主机目录必须带 system 后缀

hosts/ 下的主机目录必须.<system> 后缀(如 nixos-desktop.x86_64-linux),framework 不猜测默认架构。

主机声明用户

hosts/<name>.<system>/default.nix 通过 config.cloud.users 声明该主机构建哪些 home(对应生成 <user>@<host>,并内嵌进系统配置):

nix
# hosts/nixos-desktop.x86_64-linux/default.nix
{ config, ... }: {
  config.cloud = {
    system = "x86_64-linux";
    users = [ "rhencloud" ];
  };
}

MIT 许可发布