Структура
Аргументы функции
name
: строка, представляющая имя хоста.useHomeManagerModule
: добавлять ли модуль Home Manager в конфигурации NixOS и Nix-Darwin этого хоста. По умолчаниюtrue
.homeManagerSystem
: строка, используемая в атрибутеpkgs
функцииhome-manager.lib.homeManagerConfiguration
, которая используется в функцииdelib.configurations
в видеhomeManagerNixpkgs.legacyPackages.${homeManagerSystem}
.myconfig
: устанавливает её значение вconfig.${myconfigName}
, еслиconfig.${myconfigName}.host
соответствует текущему хосту.nixos
: устанавливает её значение вconfig
, еслиmoduleSystem
равенnixos
иconfig.${myconfigName}.host
соответствует текущему хосту.home
: устанавливает её значение вconfig
, еслиmoduleSystem
равенhome
иconfig.${myconfigName}.host
соответствует текущему хосту. В противном случае, еслиconfig.${myconfigName}.host
соответствует текущему хосту, устанавливает её значение вconfig.home-manager.users.${homeManagerUser}
.darwin
: устанавливает её значение вconfig
, еслиmoduleSystem
равенdarwin
иconfig.${myconfigName}.host
соответствует текущему хосту.shared.myconfig
: устанавливает её значение вconfig.${myconfigName}
для всех хостов.shared.nixos
: устанавливает её значение вconfig
, еслиmoduleSystem
равенnixos
. В противном случае, ничего не делает.shared.home
: устанавливает её значение вconfig
, еслиmoduleSystem
равенhome
. В противном случае, устанавливает вconfig.home-manager.users.${homeManagerUser}
.shared.darwin
: устанавливает её значение вconfig
, еслиmoduleSystem
равенdarwin
. В противном случае, ничего не делает.
Передаваемые аргументы
Список аргументов, которые передаются в ?(shared.)[myconfig|nixos|home|darwin]
, если их тип - lambda
:
name
: тот жеname
, что и в аргументахdelib.host
.myconfig
: равенconfig.${myConfigName}
.cfg
: равенconfig.${myConfigName}.hosts.${delib.host :: name}
.
Псевдокод
nix
delib.host {
name = "";
useHomeManagerModule = true;
# homeManagerNixpkgs.legacyPackages.${homeManagerSystem}
homeManagerSystem = "x86_64-linux";
# если config.${myconfigName}.host == name
# то {config.${myConfigName} = ...;}
# иначе {}
myconfig = {name, cfg, myconfig, ...}: {};
# если config.${myconfigName}.host == name, то
# если moduleSystem == "nixos",
# то {config = ...;}
# иначе {}
# иначе {}
nixos = {name, cfg, myconfig, ...}: {};
# если config.${myconfigName}.host == name, то
# если moduleSystem == "home"
# то {config = ...;}
# иначе {config.home-manager.users.${homeManagerUser} = ...;}
# иначе {}
home = {name, cfg, myconfig, ...}: {};
# если config.${myconfigName}.host == name, то
# если moduleSystem == "darwin",
# то {config = ...;}
# иначе {}
# иначе {}
darwin = {name, cfg, myconfig, ...}: {};
# config.${myConfigName} = ...
shared.myconfig = {name, cfg, myconfig, ...}: {};
# если moduleSystem == "nixos"
# то {config = ...;}
# иначе {}
shared.nixos = {name, cfg, myconfig, ...}: {};
# если moduleSystem == "home"
# то {config = ...;}
# иначе {config.home-manager.users.${homeManagerUser} = ...;}
shared.home = {name, cfg, myconfig, ...}: {};
# если moduleSystem == "darwin"
# то {config = ...;}
# иначе {}
shared.darwin = {name, cfg, myconfig, ...}: {};
}