Вложенные модули
Вложенные модули - это тип, позволяющий определять вложенные модули с собственным набором опций. Он используется для структурирования сложных конфигураций, группируя связанные опции в отдельный блок.
Работа вложенных модулей
При использовании lib.types.submodule вы создаёте новую опцию, значение которой будет набором атрибутов, соответствующих другому, вложенному модулю. Этот вложенный модуль имеет свой собственный набор опций, как и обычный модуль NixOS.
Пример:
Допустим, вы создаёте модуль для веб-сервиса, и хотите, чтобы опции для базы данных были сгруппированы.
- Объявление типа
submodule:
Вы определяете опциюdatabaseс типомsubmodule. Внутриsubmoduleвы задаёте собственные опции, например,host,portиuser.
# module.nix { config, lib, ... }: let types = lib.types; in { options.database = lib.mkOption { type = types.submodule { options = { host = lib.mkOption { type = types.str; default = "localhost"; }; port = lib.mkOption { type = types.int; default = 5432; }; user = lib.mkOption { type = types.str; default = "admin"; }; }; }; description = "Настройки для базы данных."; }; } - Использование в конфигурации:
Затем в вашей конфигурации вы можете определить значения для этих вложенных опций.
# configuration.nix { ... }: { imports = [ ./module.nix ]; database = { host = "db.example.com"; port = 5433; user = "web_user"; }; }
В результате вы получите конфигурацию, где config.database.host будет "db.example.com", config.database.port будет 5433 и т.database.user будет "web_user".
Преимущества
- Модульность: Позволяет разбивать сложные конфигурации на логические, повторно используемые блоки.
- Структурирование: Повышает читаемость и удобство управления конфигурацией.
- Типобезопасность: Каждая опция внутри
submoduleимеет свой тип и проверяется, что предотвращает ошибки конфигурации. - Совместимость с другими типами: Часто используется в сочетании с
lib.types.attrsOfилиlib.types.listOfдля создания списков или наборов подмодулей. Например, можно создатьlistOf submodulesдля определения нескольких веб-сервисов с похожими настройками.
No comments to display
No comments to display