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