Введение в расширения Denix
Некоторые функции, противоречащие философии Denix или являющиеся сугубо опциональными, всё равно могут быть реализованы в виде отдельных расширений. Также, если конфигурации необходимо предоставить какую-либо собственную функцию или изменить поведение существующей - это можно сделать с помощью собственного расширения.
В данный момент API расширений позволяет:
- Расширять
delib
, добавляя в него новые функции или переопределяя существующие. - Добавлять модули, которые автоматически добавляются в конфигурацию.
Использование
Чтобы подключить расширения, необходимо передать аргумент extensions
в функцию delib.configurations
. Этот аргумент представляет собой список расширений.
Официальные расширения находятся в delib.extensions
(см. Все расширения). Помимо них можно также подключать собственные расширения следующими способами:
- Если расширение - это один файл:
delib.callExtension ./myExtension.nix
- Если расширение состоит из нескольких файлов:
delib.mergeExtensions "myExtensionName" [
(delib.callExtension ./myExtensionPart1.nix)
(delib.callExtension ./myExtensionPart2.nix)
]
- Если расширений много:
(delib.callExtensions { paths = [./myExtensions]; }).myExtension
Некоторые расширения поддерживают собственную настройку (не путать с опциями модулей). Настройка производится через withConfig
:
delib.extensions.someExtension.withConfig {
someOption = "value";
}
В качестве параметра может использоваться либо оверлей, либо attrset (он будет автоматически преобразован в оверлей). Подробнее см. NixOS Wiki - Overlays.
Пример
delib.configurations {
# ...
extensions =
with delib.extensions;
with delib.callExtensions { paths = [./myExtensions]; };
[
args
(base.withConfig (final: prev: {
args.enable = true;
hosts.type.types = prev.hosts.type.types ++ ["laptop"];
}))
(delib.callExtension ./myExtension.nix)
extensionFromMyExtensions
(anotherExtensionFromMyExtensions.withConfig { someConfig = "someValue"; })
];
}