Структура
Каждое расширение создаётся через 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 = [];
}