Структура
В этом разделе будут использованы переменные 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
: равен результату выражения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, ...}: {};
# если moduleSystem == "nixos"
# то {config = ...;}
# иначе {}
nixos.ifEnabled = {name, cfg, myconfig, ...}: {};
nixos.ifDisabled = {name, cfg, myconfig, ...}: {};
nixos.always = {name, cfg, myconfig, ...}: {};
# если moduleSystem == "home"
# то {config = ...;}
# иначе {config.home-manager.users.${homeManagerUser} = ...;}
home.ifEnabled = {name, cfg, myconfig, ...}: {};
home.ifDisabled = {name, cfg, myconfig, ...}: {};
home.always = {name, cfg, myconfig, ...}: {};
# если moduleSystem == "darwin"
# то {config = ...;}
# иначе {}
darwin.ifEnabled = {name, cfg, myconfig, ...}: {};
darwin.ifDisabled = {name, cfg, myconfig, ...}: {};
darwin.always = {name, cfg, myconfig, ...}: {};
}