Flake Parts
分布式框架的核心,用于编写 Nix Flakes。
flake-parts
提供了代表标准 flake 属性的选项,并建立了一种处理 system
的方法。一些有主见的功能由您可以导入的生态系统模块提供。
flake-parts
本身的目标是成为 Nix flake 模式的最小镜像。单独使用时,它非常轻量级。
文档:flake.parts
为什么使用模块?
Flakes 是配置。模块系统让您可以将配置重构为可共享的模块。
它减少了自定义 Nix 胶水代码的泛滥,类似于模块系统对 NixOS 配置所做的贡献。
与 NixOS 不同,但遵循 Flakes 的精神,flake-parts
不是一个隐含目标是吸收所有开源内容的单一代码库,而是一个单一模块,其他代码库可以在此基础上构建,同时确保基线级别的兼容性:构成 flake 的核心属性。
特性
-
将您的
flake.nix
拆分为聚焦的单元,每个单元都在自己的文件中。 -
处理 system。
-
允许您的库 flake 的用户轻松地将您生成的 flake 输出集成到他们的 flake 中。
-
重用他人编写的项目逻辑
入门
如果您的项目还没有 flake:
nix flake init -t github:hercules-ci/flake-parts
迁移
否则,添加输入,
flake-parts.url = "github:hercules-ci/flake-parts";
然后将 mkFlake
插入到您的输出函数头和函数体之间,
outputs = inputs@{ flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } {
flake = {
# 在这里放置您原始的 flake 属性。
};
systems = [
# 您想为其构建 `perSystem` 属性的系统
"x86_64-linux"
# ...
];
};
现在您可以像在模板中那样添加剩余的模块属性。
模板
参见模板。
示例
参见 examples/ 目录。
使用 flake-parts 的项目
- nixd (c++)
- hyperswitch (rust)
- argo-workflows (go)
- nlp-service (python)
- emanote (haskell)