Структура
В этом разделе будут использованы переменные 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, ...}: {};
}