Skip to content

从 flake.parts 迁移

相似点

  • 均支持模块化组织 flake outputs
  • 均支持 per-system outputs

主要差异

flake.partsSnowveil
范式显式模块组合目录约定自动发现
扩展方式flakeModule约定目录 + outputs.extra
目录发现可选(autowiring)核心特性
NixOS + HM 集成需要组合模块内置

何时选择 Snowveil

  • 配置仓库以 NixOS + home-manager 为主
  • 希望目录结构即配置意图,减少样板代码
  • 不需要 flake.parts 插件生态

何时保留 flake.parts

  • 需要大量非 NixOS 的 flake outputs(Rust crate、Go module 等)
  • 已有大量 flakeModule 投资
  • 团队熟悉 flake.parts 模块系统

混合使用

Snowveil 可以通过 outputs.extra 与 flake.parts 产出并存,无需完整迁移:

nix
outputs = inputs:
  inputs.snowveil.lib.mkFlake {
    inherit inputs;
    outputs.extra = {
      # 从 flake.parts 迁移过来的其他 outputs
    };
  };

perSystem 对应

flake.parts 的 perSystem 在 Snowveil 中对应 packages/checks/apps/shells/formatter/ 等目录约定。框架内部使用 lib.genAttrs systems 实现 per-system 展开。

MIT 许可发布