一统天下的一条 flake:omniflake 把上万个 Nix flake 装进一个输入
来源: fzakaria.com — 2026-08-28
概述
作者厌倦了为每个依赖单独添加 flake 输入并手动做 follows 的繁琐体验,于是构建了 omniflake——一个背后承载近 1.2 万条 Nix flake 的单一 flake 输入。核心技巧是这些 flake「并非真正的 inputs」:omniflake 的 flake.nix 只声明 5 个输入,另外用一个 JSONL 的 pin 表记录所有 flake 的锁定对象;得益于 Nix 的惰性,未访问的输入永远不会被获取或求值,只有当你请求某条 flake 时才通过内嵌加载器复刻 Nix 对锁文件的行为去取树、导入并调用 outputs。作者还提交了 NixOS/nix#16387 修复锁文件命名冲突导致的二次方复杂度(4000 输入时约 21 倍提速)。
核心要点
- omniflake 用一个 flake 输入承载近 1.2 万条 flake,惰性按需访问
- 关键技巧:flake 存为 JSONL pin 表而非真 inputs,避免求值爆炸
- Nix 惰性保证未访问输入不被获取,只为用到的付费
- 修复锁文件命名冲突的二次方复杂度(NixOS/nix#16387),4000 输入提速约 21 倍
- 保留 follows/overrides 等特性,兼顾联邦与集中
金句
我爱联邦的思想,但我也想要集中的简单——omniflake 就是我的蛋糕。
👍 0
👎 0
返回 Lobsters 首页