Структура
В этом разделе будут использованы переменные myconfigName, moduleSystem и homeManagerUser, поэтому рекомендуется предварительно ознакомиться с соответствующим подразделом: Аргументы delib.configurations.
Аргументы функции
name: строка. Рекомендуется, чтобы она совпадала с родительским путём опцииenableмодуля, например,"programs.example", так как передаваемый аргументcfgзависит именно от этого пути.options: attrset или lambda, которая возвращает attrset (см. Опции).[myconfig|nixos|home|darwin].[ifEnabled|ifDisabled|always]: attrset или lambda, которая возвращает attrset.myconfig.*: устанавливает значения вconfig.${myconfigName}.nixos.*: устанавливает значения вconfig, еслиmoduleSystemравенnixos. В противном случае, ничего не делает.home.*: устанавливает значения вconfig, еслиmoduleSystemравенhome. В противном случае, устанавливает вconfig.home-manager.users.${homeManagerUser}.darwin.*: устанавливает значения вconfig, еслиmoduleSystemравенdarwin. В противном случае, ничего не делает.[myconfig|nixos|home|darwin].ifEnabled: выполняется только если опцияcfg.enable(см. Передаваемые аргументы - cfg) существует и равнаtrue.[myconfig|nixos|home|darwin].ifDisabled: выполняется только если опцияcfg.enableсуществует и равнаfalse.[myconfig|nixos|home|darwin].always: выполняется всегда, даже если опцияcfg.enableне существует.
Передаваемые аргументы
Список аргументов, которые передаются в options и [myconfig|nixos|home|darwin].[ifEnabled|ifDisabled|always], если их тип - это lambda:
name: тот же name из аргументовdelib.module.myconfig: равенconfig.${myConfigName}.cfg: по сути, значения (присвоенные) из конфигурации текущего модуля. Другими словами, равняетсяconfig.${myConfigName}.${name}, гдеnameэто аргумент изdelib.module, "раскрывающийся" (конвертируется в валидный путь как атрибут) при этом.parent: равняется модулю-"родителю" (набору атрибутов)cfg. Пример:parentэтоconfig.${myConfigName}.programs, еслиcfgэтоconfig.${myConfigName}.programs.example.
Псевдокод
nix
delib.module {
name = "";
# options.${myConfigName} = ...
options = {name, cfg, parent, myconfig, ...}: {};
# config.${myConfigName} = ...
myconfig.ifEnabled = {name, cfg, parent, myconfig, ...}: {};
myconfig.ifDisabled = {name, cfg, parent, myconfig, ...}: {};
myconfig.always = {name, cfg, parent, myconfig, ...}: {};
# если moduleSystem == "nixos"
# то {config = ...;}
# иначе {}
nixos.ifEnabled = {name, cfg, parent, myconfig, ...}: {};
nixos.ifDisabled = {name, cfg, parent, myconfig, ...}: {};
nixos.always = {name, cfg, parent, myconfig, ...}: {};
# если moduleSystem == "home"
# то {config = ...;}
# иначе {config.home-manager.users.${homeManagerUser} = ...;}
home.ifEnabled = {name, cfg, parent, myconfig, ...}: {};
home.ifDisabled = {name, cfg, parent, myconfig, ...}: {};
home.always = {name, cfg, parent, myconfig, ...}: {};
# если moduleSystem == "darwin"
# то {config = ...;}
# иначе {}
darwin.ifEnabled = {name, cfg, parent, myconfig, ...}: {};
darwin.ifDisabled = {name, cfg, parent, myconfig, ...}: {};
darwin.always = {name, cfg, parent, myconfig, ...}: {};
}