它定义一个 home-manager 的模块,或者说是开关,如下:
# cli/audio/cava/default.nix
{ ... }@args:
args.module (
args
// {
path = ./.;
progs = "cava";
}
)
=>
{ lib, config, namespace ... }:
with lib;
let
cfg = config.${namespace}.cli.audio.cava; # 就是上面 path 的相对路径转换而来。
in
{
options.${namespace}.cli.audio.cava.enable = mkEnableOption "";
config = mkIf cfg.enable { programs.cava.enable = true; };
}
它非常简单,就是在 specicalArgs 中加入生成模块的函数,每个文件都调用它,加上必要的参数后传出去。
但这样每个文件都要写 path = ./.
。
有什么更好的方法,或者框架,可以进一步简化模块(开关)的写法?