Nix 统一模块系统
摘要
作者分享如何组织 Nix/NixOS/home-manager/darwin 配置的最佳实践,解决多平台配置管理的痛点。按功能而非类型组织模块,实现跨平台配置的无缝管理。
为什么不喜欢"标准"方法
- 模块按类型分割(home/nixos/darwin),而非按功能
- 相关功能的模块分散在不同目录
- 需要手动导入和启用多个模块
- 重构时容易遗漏
设计目标
- 仅限 Dotfiles:只处理个人电脑配置,服务器配置分离
- 不使用独立 Home Manager:只在 NixOS/macOS 上运行
- 单一用户:配置只针对个人设备
- opinionated 模块:提供开箱即用的元模块
- 跨平台行为:轻松定义 NixOS/macOS 特定配置
- 无外部依赖:DIY 方案,完全控制
示例配置结构
{ pkgs, ... }: {
imports = [ ./hardware-configuration.nix ];
nixfiles = {
enable = true;
user.name = "dan";
development = {...};
desktop = {...};
# 按功能组织,而非按平台
};
}