Структура
Каждое расширение создаётся через delib.extension.
Аргументы функции
name: строка. Должно быть уникальным. Используется для поиска вdelib.extensionsилиdelib.callExtensions.description: строка. Краткое описание. По умолчанию"", но для официальных расширений заполнение обязательное.maintainers: список ответственных за расширение. По умолчанию[].config: оверлей. Если указана lambda с 1 параметром или attrset, то значение будет преобразовано в lambda с 2 параметрами с помощьюnixpkgs.lib.toExtension, где lambda с 1 параметром - этоprev. По умолчаниюfinal: prev: {}.initialConfig: объект, на который накладываются оверлеи, или null. Если указан attrset, он будет преобразован в lambda с 1 параметромfinal. Если вы мержите расширения, то только у одного из них может быть значениеinitialConfig, отличающееся отnull. По умолчаниюnull.configOrder: целое число. Указывает порядок композицииconfigэтого расширения сconfigдругих расширений при мерже. Чем меньше число, тем раньше, а следовательно и важнее. По умолчанию0.libExtension: оверлей с конфигурацией расширения. Если указана lambda с 1 параметром, то этот параметр -config, а если с двумя -configиprev. Применяется кdelib. По умолчаниюconfig: final: prev: {}.libExtensionOrder: целое число. Указывает порядок композицииlibExtensionэтого расширения сlibExtensionдругих расширений при мерже. Чем меньше число, тем раньше, а следовательно и важнее. По умолчанию0.modules: список модулей с конфигурацией расширения. Если указана lambda с 1 параметром, то этот параметр -config. Импортирует указанные модули в конфигурациях, использующих это расширение. Настоятельно не рекомендуется использоватьdelibиз аргументов файла, в котором создаётся расширение, при создании модулей. Вместо этого используйтеdelibв самих модулях:modules = [({delib, ...}: delib.module {/* ... */})]. По умолчанию[].
Псевдокод
nix
delib.extension {
name = "test";
description = "";
maintainers = with delib.maintainers; [sjohn];
# config = {};
# config = prev: {};
config = final: prev: {};
# initialConfig = {};
# initialConfig = final: {}
initialConfig = null;
configOrder = 0;
# libExtension = {};
# libExtension = config: {};
# libExtension = config: prev: {};
libExtension = config: final: prev: {};
libExtensionOrder = 0;
# modules = config: [];
modules = [];
}