Структура
Аргументы функции
name: строка, представляющая имя хоста.useHomeManagerModule: добавлять ли модуль Home Manager в конфигурации NixOS и Nix-Darwin этого хоста. По умолчаниюdelib.configurations :: useHomeManagerModule, который, в свою очередь, по умолчаниюtrue.homeManagerUser: имя пользователя, используется вhome-manager.users.${homeManagerUser}и для генерации списка конфигураций Home Manager. По умолчаниюdelib.configurations :: homeManagerUser.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;
homeManagerUser = "sjohn";
# 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, ...}: {};
}