Nixpkgs 的高级用法
callPackage、Overriding 与 Overlays 是在使用 Nix 时偶尔会用到的技术,它们都是用来自定义 Nix 包的构建方法的。
我们知道许多程序都有大量构建参数需要配置,不同的用户会希望使用不同的构建参数,这时候就需要 Overriding 与 Overlays 来实现。我举几个我遇到过的例子:
- fcitx5-rime.nix: fcitx5-rime 的
rimeDataPkgs
默认使用rime-data
包,但是也可以通过 override 来自定义该参数的值,以加载自定义的 rime 配置(比如加载小鹤音形输入法配置)。 - vscode/with-extensions.nix: vscode 的这个包也可以通过 override 来自定义
vscodeExtensions
参数的值来安装自定义插件。- nix-vscode-extensions: 就是利用该参数实现的 vscode 插件管理
- firefox/common.nix: firefox 同样有许多可自定义的参数
- 等等
总之如果需要自定义上述这类 Nix 包的构建参数,或者实施某些比较底层的修改,我们就得用到 callPackage、Overriding 与 Overlays 这些特性。