مولدها
مولدها توابعی هستند که قالبهای فایل را از ساختارهای داده Nix ایجاد میکنند، به عنوان مثال برای فایلهای پیکربندی. مولدهایی برای INI، JSON و YAML در دسترس هستند.
تمام مولدها از یک واسط فراخوانی مشابه پیروی میکنند: generatorName configFunctions data که در آن configFunctions یک مجموعه ویژگی از توابع تعریفشده توسط کاربر است که بخشهای تو در توی محتوا را قالببندی میکنند. هر کدام دارای مقادیر پیشفرض مشترکی هستند، بنابراین اغلب نیازی به تنظیم دستی آنها نیست. یک نمونه، mkSectionName از مولد INI است که بهطور پیشفرض برابر با (name: libStr.escape [ "[" "]" ] name) است. این تابع نام یک بخش را دریافت کرده و آن را پاکسازی میکند. تابع پیشفرض mkSectionName کاراکترهای [ و ] را با بکاسلش گریزدهی (escape) میکند.
مولدها را میتوان بهدقت تنظیم کرد تا دقیقاً همان قالب فایل مورد نیاز برنامه/سرویس شما را تولید کنند. یک نمونه، یک قالب فایل INI است که از : به عنوان جداکننده و رشتههای "yes" و "no" به عنوان مقادیر بولین استفاده میکند و نیاز دارد تمام مقادیر رشتهای داخل گیومه قرار گیرند:
let
inherit (lib) generators isString;
customToINI = generators.toINI {
# specifies how to format a key/value pair
mkKeyValue = generators.mkKeyValueDefault {
# specifies the generated string for a subset of nix values
mkValueString =
v:
if v == true then
''"yes"''
else if v == false then
''"no"''
else if isString v then
''"${v}"''
# and delegates all other values to the default generator
else
generators.mkValueStringDefault { } v;
} ":";
};
# the INI file can now be given as plain old nix values
in
customToINI {
main = {
pushinfo = true;
autopush = false;
host = "localhost";
port = 42;
};
mergetool = {
merge = "diff3";
};
} این عبارت فایل INI زیر را به عنوان یک رشته Nix تولید خواهد کرد:
[main]
autopush:"no"
host:"localhost"
port:42
pushinfo:"yes"
str\:ange:"very::strange"
[mergetool]
merge:"diff3" نکته
مسیرهای انبار نیکس (Nix store) را میتوان با قرار دادن صفت (attribute) یک derivation / اشتقاق ساخت به این صورت به رشتهها تبدیل کرد:
"${'{'}'{'{'}'{'}'}drv{'{'}'{'}'}'{'}'}".
مستندات تفصیلی برای هر مولد را میتوان در اینجا یافت.