builtins.abort s
Прервать оценку выражения Nix и вывести сообщение об ошибке s.
builtins.add e1 e2
Возвращает сумму чисел e1 и e2.
builtins.all pred list
Возвращает true если функция pred возвращает true для всех элементов списка list, и false в противном случае.
builtins.any pred list
Возвращает true если функция pred возвращает true хотя бы для одного элемента списка list, и false в противном случае.
builtins.attrNames set
Возвращает имена атрибутов в наборе set в отсортированном по алфавиту списке. Например, builtins.attrNames { y = 1; x = "foo"; } вычисляется в [ "x" "y" ].
builtins.attrValues set
Возвращает значения атрибутов в наборе set в порядке, соответствующем отсортированным именам атрибутов.
builtins.baseNameOf s
Возвращает базовое имя строки s, то есть всё, что следует после последнего слэша в строке. Это аналогично команде GNU basename.
builtins.bitAnd e1 e2
Возвращает битовое И логическое значение целых чисел e1 и e2.
builtins.bitOr e1 e2
Возвращает битовое ИЛИ целых чисел e1 и e2.
builtins.bitXor e1 e2
Возвращает битовое ИСКЛЮЧАЮЩЕЕ ИЛИ целых чисел e1 и e2.
builtins.break v
В режиме отладки (включен с помощью --debugger), приостанавливает оценку выражения Nix и переходит в REPL. В противном случае возвращает аргумент v.
builtins.catAttrs attr list
Собирает каждый атрибут с именем attr из списка наборов атрибутов. Наборы атрибутов, не содержащие указанный атрибут, игнорируются. Например,
builtins.catAttrs "a" [{a = 1;} {b = 0;} {a = 2;}]
вычисляется в [1 2].
builtins.ceil double
Преобразует число с плавающей запятой двойной точности IEEE-754 (double) в ближайшее большее целое число.
Если тип данных не является ни целым числом, ни "float", будет выброшено исключение.
builtins.compareVersions s1 s2
Сравнивает две строки, представляющие версии, и возвращает -1 если версия s1 старше версии s2, 0 если они одинаковые, и 1 если s1 новее s2. Алгоритм сравнения версий такой же, как и у nix-env -u.
builtins.concatLists lists
Конкатенация списка списков в один список.
builtins.concatMap f list
Эта функция эквивалентна builtins.concatLists (map f list), но более эффективна.
builtins.concatStringsSep separator list
Конкатенирует список строк с разделителем между каждым элементом, например, concatStringsSep "/" ["usr" "local" "bin"] == "usr/local/bin".
builtins.deepSeq e1 e2
Это аналогично seq e1 e2, за исключением того, что e1 вычисляется полностью: если это список или множество, его элементы или атрибуты также вычисляются рекурсивно.
builtins.dirOf s
Возвращает часть пути каталога строки s, то есть всё до последнего слэша в строке. Это аналогично команде GNU dirname.
builtins.div e1 e2
Возвращает частное от деления чисел e1 и e2.
builtins.elem x xs
Возвращает true если значение, равное x, встречается в списке xs, и false в противном случае.
builtins.elemAt xs n
Возвращает элемент n из списка xs. Элементы считаются, начиная с 0. Если индекс выходит за пределы границ, возникает ошибка.
builtins.fetchClosure args
Извлекает замыкание хранилища Nix из кэша двоичных данных, преобразуя его в форму с адресом по содержимому. Например,
builtins.fetchClosure {
fromStore = "https://cache.nixos.org";
fromPath = /nix/store/r2jd6ygnmirm2g803mksqqjm4y39yi6i-git-2.33.1;
toPath = /nix/store/ldbhlwhh39wha58rm61bkiiwm6j7211j-git-2.33.1;
}
извлекает /nix/store/r2jd... из указанного кэша двоичных данных и преобразует его в путь хранилища с адресом по содержимому /nix/store/ldbh....
Если fromPath уже имеет адрес по содержимому, или если вы разрешаете нечистое вычисление (--impure), то toPath можно опустить.
Чтобы определить правильное значение для toPath для заданного fromPath, можно использовать nix store make-content-addressed:
# nix store make-content-addressed --from https://cache.nixos.org /nix/store/r2jd6ygnmirm2g803mksqqjm4y39yi6i-git-2.33.1 rewrote '/nix/store/r2jd6ygnmirm2g803mksqqjm4y39yi6i-git-2.33.1' to '/nix/store/ldbhlwhh39wha58rm61bkiiwm6j7211j-git-2.33.1'
Эта функция похожа на builtins.storePath, позволяя использовать ранее созданный путь хранилища в выражении Nix. Однако она более воспроизводима, так как требует указания кэша двоичных данных, из которого путь можно извлечь. Кроме того, требование к пути хранилища с адресом по содержимому позволяет избежать необходимости пользователям в настройке общедоступных ключей кэша двоичных данных.
Эта функция доступна только при включении экспериментальной функции fetch-closure.
builtins.fetchGit args
Извлечение пути из git. args может быть URL, в этом случае извлекается HEAD репозитория по этому URL. В противном случае это может быть атрибут со следующими атрибутами (все, кроме url необязательны):
-
url
URL репозитория. -
name
Имя каталога, в который репозиторий должен быть экспортирован в хранилище. По умолчанию используется имя файла URL. -
rev
Git ревизия для извлечения. По умолчанию используется последняя ревизияref. -
ref
Git ссылка для поиска запрошенной ревизии. Часто это имя ветки или тега. По умолчаниюHEAD.По умолчанию значение
refпредваряетсяrefs/heads/. Начиная с Nix 2.3.0, Nix не будет предварятьrefs/heads/, еслиrefначинается сrefs/. -
submodules
Булевый параметр, указывающий, следует ли извлекать подмодули. По умолчаниюfalse. -
shallow
Булевый параметр, указывающий, разрешено ли извлечение поверхностного клона. По умолчаниюfalse. -
allRefs
Следует ли извлечь все ссылки репозитория. С этим аргументом, равным true, можно загрузитьrevиз любойref(по умолчанию поддерживаются толькоrevиз указанногоref).
Вот несколько примеров использования fetchGit.
-
Для извлечения закрытого репозитория через SSH:
builtins.fetchGit { url = "git@github.com:my-secret/repository.git"; ref = "master"; rev = "adab8b916a45068c044658c4158d81878f9ed1c3"; } -
Для извлечения произвольной ссылки:
builtins.fetchGit { url = "https://github.com/NixOS/nix.git"; ref = "refs/heads/0.5-release"; } -
Если ревизия, которую вы ищете, находится в основной ветке git-репозитория, вам не обязательно указывать имя ветки в атрибуте
ref.Однако, если ревизия, которую вы ищете, находится в будущей ветке, отличной от основной, вам потребуется указать атрибут
ref.builtins.fetchGit { url = "https://github.com/nixos/nix.git"; rev = "841fcbd04755c7a2865c51c1e2d3b045976b7452"; ref = "1.11-maintenance"; }Примечание
Желательно всегда указывать ветку, к которой принадлежит ревизия. Без указания ветки извлечение может завершиться неудачей, если изменится основная ветка. Кроме того, попытка извлечь коммит из ветки, отличной от основной, может привести к неудаче извлечения. Если ветка указана, ошибка будет более очевидной.
-
Если ревизия, которую вы ищете, находится в основной ветке git-репозитория, вы можете опустить атрибут
ref.builtins.fetchGit { url = "https://github.com/nixos/nix.git"; rev = "841fcbd04755c7a2865c51c1e2d3b045976b7452"; } -
Для извлечения конкретного тега:
builtins.fetchGit { url = "https://github.com/nixos/nix.git"; ref = "refs/tags/1.9"; } -
Для извлечения последней версии удаленной ветки:
builtins.fetchGit { url = "ssh://git@github.com/nixos/nix.git"; ref = "master"; }Примечание
Nix повторно извлечет ветку в соответствии с опцией
tarball-ttl.Примечание
Это поведение отключено в режиме чистого вычисления.
builtins.fetchTarball args
Загрузка указанного URL, распаковка и возврат пути распакованного дерева. Файл должен быть архивом ленты (.tar) сжатым с помощью gzip, bzip2 или xz. Компонент пути верхнего уровня файлов в архиве удаляется, поэтому лучше, если архив содержит единственный каталог на верхнем уровне. Типичное использование функции — получение внешних зависимостей выражения Nix, например, определённой версии Nixpkgs, например:
with import (fetchTarball https://github.com/NixOS/nixpkgs/archive/nixos-14.12.tar.gz) {};
stdenv.mkDerivation { … }
Извлечённый архив кешируется в течение определённого времени (по умолчанию 1 час) в ~/.cache/nix/tarballs/. Вы можете изменить время кеширования как на командной строке с помощью --tarball-ttl число-секунд, так и в файле конфигурации Nix, добавив строку tarball-ttl = число-секунд.
Обратите внимание, что при получении хэша с помощью nix-prefetch-url требуется опция --unpack.
Эта функция также может проверять содержимое по хэшу. В этом случае функция принимает множество вместо URL. Множество требует атрибут url и атрибут sha256, например:
with import (fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/nixos-14.12.tar.gz";
sha256 = "1jppksrfvbk5ypiqdz4cddxdl8z6zyzdb2srq8fcffr327ld5jj2";
}) {};
stdenv.mkDerivation { … }
Эта функция недоступна, если ограниченный режим вычислений включён.
builtins.fetchurl url
Загрузка указанного URL и возврат пути загруженного файла. Эта функция недоступна, если ограниченный режим вычислений включён.
builtins.filter f list
Возвращает список, состоящий из элементов list, для которых функция f возвращает true.
builtins.filterSource e1 e2
Предупреждение
filterSourceне следует использовать для фильтрации путей к хранилищу. ПосколькуfilterSourceиспользует имя входного каталога для наименования выходного каталога, это приведет к имени каталога в формате<hash2>-<hash>-<name>, где<hash>-<name>— имя входного каталога. Поскольку<hash>зависит от неотфильтрованного каталога, имя выходного каталога косвенно будет зависеть от файлов, отфильтрованных функцией. Это вызовет перестроение даже при изменении отфильтрованного файла. Вместо этого используйтеbuiltins.path, которое позволяет указать имя выходного каталога.
Эта функция позволяет копировать исходные данные в хранилище Nix, фильтруя определённые файлы. Например, предположим, что вы хотите использовать каталог source-dir в качестве входных данных для выражения Nix, например:
stdenv.mkDerivation {
...
src = ./source-dir;
}
Однако, если source-dir является рабочим каталогом Subversion, то все эти надоедливые подкаталоги .svn также будут скопированы в хранилище. Хуже того, содержимое этих каталогов может значительно изменяться, вызывая множество ложных перестроек. С помощью filterSource вы можете отфильтровать каталоги .svn:
src = builtins.filterSource (path: type: type != "directory" || baseNameOf path != ".svn") ./source-dir;
Таким образом, первый аргумент e1 должен быть функцией-предикатом, которая вызывается для каждого обычного файла, каталога или символической ссылки в дереве источников e2. Если функция возвращает true, файл копируется в хранилище Nix, в противном случае он пропускается. Функция вызывается с двумя аргументами. Первый — это полный путь к файлу. Второй — строка, идентифицирующая тип файла, которая может быть "regular", "directory", "symlink" или "unknown" (для других типов файлов, таких как узлы устройств или FIFO-файлы — обратите внимание, что их нельзя скопировать в хранилище Nix, поэтому, если предикат возвращает true для них, копирование завершится неудачей). Если вы исключаете каталог, весь соответствующий поддерево e2 также будет исключено.
builtins.floor double
Преобразует число с плавающей запятой двойной точности IEEE-754 (double) в следующее меньшее целое число.
Если тип данных не является целым числом или "float", будет выброшено исключение ошибки вычисления.
builtins.foldl' op nul list
Рекурсивно применяет бинарную операцию к списку слева направо, например foldl' op nul [x0 x1 x2 ...] = op (op (op nul x0) x1) x2) .... Операция применяется строго, т.е. её аргументы вычисляются в первую очередь. Например, foldl' (x: y: x + y) 0 [1 2 3] вычисляется до 6.
builtins.fromJSON e
Преобразует строку JSON в значение Nix. Например,
builtins.fromJSON ''{"x": [1, 2, 3], "y": null}''
возвращает значение { x = [ 1 2 3 ]; y = null; }.
builtins.functionArgs f
Возвращает множество, содержащее имена формальных аргументов, ожидаемых функцией f. Значение каждого атрибута — булево значение, обозначающее, имеет ли соответствующий аргумент значение по умолчанию. Например, functionArgs ({ x, y ? 123}: ...) = { x = false; y = true; }.
«Формальный аргумент» здесь относится к атрибутам, сопоставляемым по шаблону функцией. Простые лямбда-выражения не включены, например functionArgs (x: ...) = { }.
builtins.genList generator length
Генерирует список размера length, где каждый элемент i равен значению, возвращённому generator i. Например,
builtins.genList (x: x * x) 5
возвращает список [ 0 1 4 9 16 ].
builtins.genericClosure attrset
Принимает attrset со значениями, именованными startSet и operator в порядке, для возврата списка attrset, начиная с startSet, рекурсивно применяя функцию operator к каждому элементу. Attrsets в startSet и полученные функцией operator должны каждый содержать значение с именем key, которые сравнимы друг с другом. Результат получается путём многократного вызова оператора для каждого встреченного элемента с уникальным ключом, завершая вычисление, когда больше не создаются новые элементы. Например,
builtins.genericClosure {
startSet = [ {key = 5;} ];
operator = item: [{
key = if (item.key / 2 ) * 2 == item.key
then item.key / 2
else 3 * item.key + 1;
}];
}
вычисляется как
[ { key = 5; } { key = 16; } { key = 8; } { key = 4; } { key = 2; } { key = 1; } ]
builtins.getAttr s set
getAttr возвращает атрибут с именем s из set. Вычисление прерывается, если атрибут не существует. Это динамическая версия оператора ., так как s является выражением, а не идентификатором.
builtins.getEnv s
getEnv возвращает значение переменной окружения s или пустую строку, если переменная не существует. Эту функцию следует использовать с осторожностью, так как она может вносить всевозможные зависимости от среды в ваше выражение Nix.
getEnv используется в пакетах Nix для поиска файла ~/.nixpkgs/config.nix, который содержит локальные настройки пакетов Nix для пользователя. (То есть, он выполняет getEnv "HOME" для поиска домашнего каталога пользователя.)
builtins.getFlake args
Загружает флейк из ссылки на флейк и возвращает атрибуты вывода и некоторую метаданные. Например:
(builtins.getFlake "nix/55bc52401966fbffa525c574c14f67b00bc4fb3a").packages.x86_64-linux.nix
Если разрешено нечистое вычисление (--impure), ссылка на флейк должна быть «закреплена», например, содержать версию Git или хеш содержимого. Пример использования без закрепления:
(builtins.getFlake "github:edolstra/dwarffs").rev
Эта функция доступна только если вы включили экспериментальную функцию flakes.
builtins.groupBy f list
Группирует элементы list по строке, возвращённой функцией f, вызываемой для каждого элемента. Возвращает множество атрибутов, где каждое значение атрибута содержит элементы list, сопоставленные одному и тому же имени атрибута, возвращённому f.
Например,
builtins.groupBy (builtins.substring 0 1) ["foo" "bar" "baz"]
вычисляется как
{ b = [ "bar" "baz" ]; f = [ "foo" ]; }
builtins.hasAttr s set
hasAttr возвращает true, если set имеет атрибут с именем s, и false в противном случае. Это динамическая версия оператора ?, так как s является выражением, а не идентификатором.
builtins.hashFile type p
Возвращает шестнадцатеричное представление криптографического хеша файла по пути p. Алгоритм хеширования, указанный параметром type, должен быть одним из "md5", "sha1", "sha256" или "sha512".
builtins.hashString type s
Возвращает шестнадцатеричное представление криптографического хеша строки s. Алгоритм хеширования, указанный параметром type, должен быть одним из "md5", "sha1", "sha256" или "sha512".
builtins.head list
Возвращает первый элемент списка; прерывает вычисление, если аргумент не является списком или является пустым списком. Вы можете проверить, является ли список пустым, сравнив его с [].
builtins.import path
Загружает, анализирует и возвращает выражение Nix в файле path. Если path является каталогом, загружается файл default.nix в этом каталоге. Вычисление прерывается, если файл не существует или содержит некорректное выражение Nix. import реализует систему модулей Nix: вы можете поместить любое выражение Nix (например, множество или функцию) в отдельный файл и использовать его из выражений Nix в других файлах.
Примечание
В отличие от некоторых языков программирования,
import— это обычная функция в Nix. Пути, использующие синтаксис в угловых скобках (например,import<foo>), являются обычными значениями путей.
Выражение Nix, загруженное с помощью import, не должно содержать никаких свободных переменных (идентификаторов, которые не определены в самом выражении Nix и не являются встроенными). Следовательно, оно не может ссылаться на переменные, находящиеся в области видимости в месте вызова. Например, если у вас есть вызывающее выражение
rec {
x = 123;
y = import ./foo.nix;
}
то следующее foo.nix вызовет ошибку:
x + 456
потому что x не находится в области видимости в foo.nix. Если вы хотите, чтобы x было доступно в foo.nix, вы должны передать его как аргумент функции:
rec {
x = 123;
y = import ./foo.nix x;
}
и
x: x + 456
(Аргумент функции не обязательно должен называться x в foo.nix; подойдет любое имя.)
builtins.intersectAttrs e1 e2
Возвращает множество атрибутов из множества e2, которые также существуют в множестве e1.
builtins.isAttrs e
Возвращает true если e вычисляется в множество, и false в противном случае.
builtins.isBool e
Возвращает true если e вычисляется в булево значение, и false в противном случае.
builtins.isFloat e
Возвращает true если e вычисляется в число с плавающей запятой, и false в противном случае.
builtins.isFunction e
Возвращает true если e вычисляется в функцию, и false в противном случае.
builtins.isInt e
Возвращает true если e вычисляется в целое число, и false в противном случае.
builtins.isList e
Возвращает true если e вычисляется в список, и false в противном случае.
builtins.isNull e
Возвращает true если e вычисляется в null, и false в противном случае.
Предупреждение
Эта функция устарела; используйте
e == nullвместо этого.
builtins.isPath e
Возвращает true если e вычисляется в путь, и false в противном случае.
builtins.isString e
Возвращает true если e вычисляется в строку, и false в противном случае.
builtins.length e
Возвращает длину списка e.
builtins.lessThan e1 e2
Возвращает true если число e1 меньше числа e2, и false в противном случае. Вычисление прерывается, если e1 или e2 не вычисляется в число.
builtins.listToAttrs e
Создаёт множество из списка, определяющего имена и значения каждого атрибута. Каждый элемент списка должен быть множеством, состоящим из атрибута со строковым значением name, определяющего имя атрибута, и атрибута value определяющего его значение. Пример:
builtins.listToAttrs
[ { name = "foo"; value = 123; }
{ name = "bar"; value = 456; }
]
вычисляется как
{ foo = 123; bar = 456; }
builtins.map f list
Применяет функцию f к каждому элементу в списке list. Например,
map (x: "foo" + x) [ "bar" "bla" "abc" ]
вычисляется как [ "foobar" "foobla" "fooabc" ].
builtins.mapAttrs f attrset
Примените функцию f ко всем элементам attrset. Например,
builtins.mapAttrs (name: value: value * 10) { a = 1; b = 2; }
вычисляется как { a = 10; b = 20; }.
builtins.match regex str
Возвращает список, если расширенное выражение POSIX регулярных выражений regex точно соответствует str, в противном случае возвращает null. Каждый элемент в списке — группа регулярного выражения.
builtins.match "ab" "abc"
Вычисляется как null.
builtins.match "abc" "abc"
Вычисляется как [ ].
builtins.match "a(b)(c)" "abc"
Вычисляется как [ "b" "c" ].
builtins.match "[[:space:]]+([[:upper:]]+)[[:space:]]+" " FOO "
Вычисляется как [ "FOO" ].
builtins.mul e1 e2
Возвращает произведение чисел e1 и e2.
builtins.parseDrvName s
Разделить строку s на имя пакета и версию. Имя пакета — всё до, но не включая, первой тире, за которой следует цифра, а версия — всё после этого тире. Результат возвращается в наборе { name, version }. Таким образом, builtins.parseDrvName "nix-0.12pre12876" возвращает { name = "nix"; version = "0.12pre12876"; }.
builtins.partition pred list
Для заданной предикатной функции pred эта функция возвращает attrset, содержащий список, названный right, содержащий элементы из list, для которых pred вернула true, и список, названный wrong, содержащий элементы, для которых она вернула false. Например,
builtins.partition (x: x > 10) [1 23 9 3 42]
вычисляется как
{ right = [ 23 42 ]; wrong = [ 1 9 3 ]; }
builtins.path args
Расширение встроенного типа пути, основанное на атрибутах, присутствующих в args. Все они необязательны, за исключением path:
-
path
Основной путь. -
name
Имя пути при добавлении в хранилище. Это можно использовать для ссылки на пути, содержащие недопустимые для nix символы, такие как@. -
filter
Функция типа, ожидаемогоbuiltins.filterSource, с такой же семантикой. -
recursive
Когдаfalse, при добавлении в хранилище он добавляется с плоским хэшем, а не с хэшем сериализации NAR файла. Таким образом,pathдолжен ссылаться на обычный файл, а не на каталог. Это позволяет получить поведение, подобноеfetchurl. По умолчаниюtrue. -
sha256
Если предоставлено, это ожидаемый хэш файла по пути. Вычисление завершится ошибкой, если хэш неверен, а предоставление хэша позволяет использоватьbuiltins.path, даже если опция конфигурации Nixpure-evalвключена.
builtins.pathExists path
Возвращает true если путь path существует во время вычисления, и false в противном случае.
builtins.placeholder output
Возвращает заполнитель строки для указанного output, который будет заменён соответствующим путём вывода во время сборки. Типичные выводы — "out", "bin" или "dev".
builtins.readDir path
Возвращает содержимое каталога path в виде набора, сопоставляющего элементы каталога соответствующему типу файла. Например, если каталог A содержит обычный файл B и другой каталог C, то builtins.readDir ./A вернёт набор
{ B = "regular"; C = "directory"; }
Возможные значения для типа файла — "regular", "directory", "symlink" и "unknown".
builtins.readFile path
Возвращает содержимое файла path в виде строки.
builtins.removeAttrs set list
Удалить атрибуты, перечисленные в list из set. Атрибуты не обязательно должны существовать в set. Например,
removeAttrs { x = 1; y = 2; z = 3; } [ "a" "x" "z" ]
вычисляется как { y = 2; }.
builtins.replaceStrings from to s
Для заданной строки s заменить все вхождения строк из from соответствующими строками из to. Например,
builtins.replaceStrings ["oo" "a"] ["a" "i"] "foobar"
вычисляется как "fabir".
builtins.seq e1 e2
Вычислить e1, затем вычислить и вернуть e2. Это гарантирует, что вычисление строго зависит от значения e1.
builtins.sort comparator list
Возвращает list в отсортированном порядке. Повторяет вызов функции comparator с двумя элементами. Сравнение должно возвращать true если первый элемент меньше второго, и false в противном случае. Например,
builtins.sort builtins.lessThan [ 483 249 526 147 42 77 ]
производит список [ 42 77 147 249 483 526 ].
Это стабильная сортировка: она сохраняет относительный порядок элементов, считающихся равными по результатам сравнения.
builtins.split regex str
Возвращает список, состоящий из несопоставленных строк, чередующихся со списками совпадений расширенного выражения POSIX регулярных выражений regex для str. Каждый элемент в списках сопоставленных последовательностей — группа регулярного выражения.
builtins.split "(a)b" "abc"
Вычисляется как [ "" [ "a" ] "c" ].
builtins.split "([ac])" "abc"
Вычисляется как [ "" [ "a" ] "b" [ "c" ] "" ].
builtins.split "(a)|(c)" "abc"
Вычисляется как [ "" [ "a" null ] "b" [ null "c" ] "" ].
builtins.split "([[:upper:]]+)" " FOO "
Вычисляется как [ " " [ "FOO" ] " " ].
builtins.splitVersion s
Разделить строку, представляющую версию, на составляющие, используя ту же логику разделения версии, что и сравнение версий в nix-env -u.
builtins.storePath path
Эта функция позволяет определить зависимость от уже существующего пути хранилища. Например, атрибут вывода src = builtins.storePath /nix/store/f1d18v1y…-source заставляет вывод зависеть от указанного пути, который должен существовать или быть заменяемым. Обратите внимание, что это отличается от простого пути (например, src = /nix/store/f1d18v1y…-source) в том, что последний приводит к копированию пути обратно в хранилище Nix, что приводит к новому пути (например, /nix/store/ld01dnzc…-source-source).
Эта функция недоступна в режиме чистого вычисления.
builtins.stringLength e
Возвращает длину строки e. Если e не является строкой, вычисление прерывается.
builtins.sub e1 e2
Возвращает разницу между числами e1 и e2.
builtins.substring start len s
Возвращает подстроку s с позиции символа start (нумерация с нуля) до, но не включая, start + len. Если start больше длины строки, возвращается пустая строка, а если start + len выходит за пределы строки, возвращается только подстрока до конца строки. start должно быть неотрицательным. Например,
builtins.substring 0 3 "nixos"
вычисляется как "nix".
builtins.tail list
Возвращает предпоследние элементы списка; прерывает вычисление, если аргумент не является списком или является пустым списком.
Предупреждение
От этой функции следует в целом избегать, так как она неэффективна: в отличие от
tailязыка Haskell, она работает за время O(n), поэтому рекурсия по списку с многократным вызовомtailзанимает время O(n^2).
builtins.throw s
Выбрасывает сообщение об ошибке s. Обычно это приводит к прерыванию вычисления выражения Nix, но в nix-env -qa и других командах, которые пытаются вычислить набор выводов для получения информации об этих выводах, вывод, который генерирует ошибку, пропускается без уведомления (в отличие от abort).
builtins.toFile name s
Сохраняет строку s в файле в хранилище Nix и возвращает его путь. Файл имеет суффикс name. Этот файл можно использовать в качестве входных данных для выводов. Одно применение — запись билдеров «встроеным» способом. Например, следующее выражение Nix объединяет выражение Nix для GNU Hello и его скрипт сборки в один файл:
{ stdenv, fetchurl, perl }:
stdenv.mkDerivation {
name = "hello-2.1.1";
builder = builtins.toFile "builder.sh" "
source $stdenv/setup
PATH=$perl/bin:$PATH
tar xvfz $src
cd hello-*
./configure --prefix=$out
make
make install
";
src = fetchurl {
url = "http://ftp.nluug.nl/pub/gnu/hello/hello-2.1.1.tar.gz";
sha256 = "1md7jsfd8pa45z73bz1kszpp01yw6x5ljkjk2hx7wl800any6465";
};
inherit perl;
}
Даже возможно, что один файл ссылается на другой, например:
builder = let
configFile = builtins.toFile "foo.conf" "
# This is some dummy configuration file.
...
";
in builtins.toFile "builder.sh" "
source $stdenv/setup
...
cp ${configFile} $out/etc/foo.conf
";
Обратите внимание, что ${configFile} — это антикавычка, поэтому результат выражения configFile (т.е., путь, например /nix/store/m7p7jfny445k...-foo.conf) будет включён в результирующую строку.
Однако не разрешено иметь файлы, которые взаимно ссылаются друг на друга, например:
let
foo = builtins.toFile "foo" "...${bar}...";
bar = builtins.toFile "bar" "...${foo}...";
in foo
Это не разрешено, так как это вызовет циклическую зависимость в вычислении криптографических хэшей для foo и bar.
Также невозможно сослаться на результат вывода. Если вы используете Nixpkgs, функция writeTextFile может это сделать.
builtins.toJSON e
Возвращает строку, содержащую JSON представление e. Строки, целые числа, числа с плавающей точкой, булевы значения, null и списки отображаются в их JSON эквиваленты. Множества (кроме выводов) представляются как объекты. Выводы преобразуются в JSON строку, содержащую путь вывода вывода. Пути копируются в хранилище и представляются в JSON строке результирующего пути хранилища.
builtins.toPath s
УСТАРЕЛО. Используйте /. + "/path" для преобразования строки в абсолютный путь. Для относительных путей используйте ./. + "/path".
builtins.toString e
Преобразовать выражение e в строку. e может быть:
-
Строкой (в этом случае возвращается строка без изменений).
-
Путь (например,
toString /foo/barдаёт"/foo/bar"). -
Множество, содержащее
{ __toString = self: ...; }или{ outPath = ...; }. -
Целое число.
-
Список, в этом случае строковые представления его элементов соединяются пробелами.
-
Булево значение (
falseдаёт"",trueдаёт"1"). -
null, что даёт пустую строку.
builtins.toXML e
Возвращает строку, содержащую XML-представление e. Основное применение toXML — передача информации билдеру в более структурированном формате, чем обычные переменные окружения.
Вот пример:
{ stdenv, fetchurl, libxslt, jira, uberwiki }:
stdenv.mkDerivation (rec {
name = "web-server";
buildInputs = [ libxslt ];
builder = builtins.toFile "builder.sh" "
source $stdenv/setup
mkdir $out
echo "$servlets" | xsltproc ${stylesheet} - > $out/server-conf.xml ①
";
stylesheet = builtins.toFile "stylesheet.xsl" ②
"<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/'>
<Configure>
<xsl:for-each select='/expr/list/attrs'>
<Call name='addWebApplication'>
<Arg><xsl:value-of select=\"attr[@name = 'path']/string/@value\" /></Arg>
<Arg><xsl:value-of select=\"attr[@name = 'war']/path/@value\" /></Arg>
</Call>
</xsl:for-each>
</Configure>
</xsl:template>
</xsl:stylesheet>
";
servlets = builtins.toXML [ ③
{ path = "/bugtracker"; war = jira + "/lib/atlassian-jira.war"; }
{ path = "/wiki"; war = uberwiki + "/uberwiki.war"; }
];
})
Билдер должен сгенерировать конфигурационный файл для сервлета Jetty. Сервлетный контейнер содержит ряд сервлетов (*.war файлы), каждый из которых экспортирован под определенным префиксом URI. Таким образом, конфигурация сервлета представляет собой список наборов, содержащих path и war сервлета (①). Такую информацию сложно передать обычным методом, передавая информацию через переменную окружения, которая просто конкатенирует всё вместе в строку (что может сработать в этом случае, но не сработает, если поля являются необязательными или содержат списки). Вместо этого выражение Nix преобразуется в XML-представление с toXML, которое является однозначным и может быть легко обработано соответствующими инструментами. Например, в примере к нему применяется XSLT-стиль (в точке ②) для генерации XML-конфигурационного файла для сервера Jetty (в точке ①). XML-представление, сгенерированное в точке ③ toXML, выглядит следующим образом:
<?xml version='1.0' encoding='utf-8'?>
<expr>
<list>
<attrs>
<attr name="path">
<string value="/bugtracker" />
</attr>
<attr name="war">
<path value="/nix/store/d1jh9pasa7k2...-jira/lib/atlassian-jira.war" />
</attr>
</attrs>
<attrs>
<attr name="path">
<string value="/wiki" />
</attr>
<attr name="war">
<path value="/nix/store/y6423b1yi4sx...-uberwiki/uberwiki.war" />
</attr>
</attrs>
</list>
</expr>
Обратите внимание, что мы использовали toFile встроенный для записи билдера и стиля «встроенно» в выражении Nix. Путь к стилю встраивается в билдер с помощью синтаксиса xsltproc ${stylesheet}.
builtins.trace e1 e2
Вычисляет e1 и выводит его абстрактное синтаксическое представление в стандартный поток ошибок. Затем возвращает e2. Эта функция полезна для отладки.
builtins.traceVerbose e1 e2
Вычисляет e1 и выводит его абстрактное синтаксическое представление в стандартный поток ошибок, если --trace-verbose включено. Затем возвращает e2. Эта функция полезна для отладки.
builtins.tryEval e
Попытка поверхностного вычисления e. Возвращает множество, содержащее атрибуты success (true если e вычислено успешно, false если произошла ошибка) и value, равное e в случае успеха и false в противном случае. tryEval будет предотвращать только ошибки, созданные throw или assert, от вывода. Ошибки tryEval не будут перехвачены, например, те, которые созданы abort и ошибки типов, сгенерированные встроенными функциями. Также обратите внимание, что это не вычисляет e глубоко, поэтому let e = { x = throw ""; }; in (builtins.tryEval e).success будет true. Используя builtins.deepSeq, можно получить ожидаемый результат: let e = { x = throw ""; }; in (builtins.tryEval (builtins.deepSeq e e)).success будет false.
builtins.typeOf e
Возвращает строку, представляющую тип значения e, а именно "int", "bool", "string", "path", "null", "set", "list", "lambda" или "float".
builtins.zipAttrsWith f list
Транспонирует список наборов атрибутов в набор атрибутов списков, а затем применяет mapAttrs.
f получает два аргумента: имя атрибута и непустой список всех значений, встреченных для этого имени атрибута.
Результат — набор атрибутов, где имена атрибутов являются объединением имён атрибутов в каждом элементе list. Значения атрибутов — это возвращаемые значения f.
builtins.zipAttrsWith
(name: values: { inherit name values; })
[ { a = "x"; } { a = "y"; b = "z"; } ]
равно
{
a = { name = "a"; values = [ "x" "y" ]; };
b = { name = "b"; values = [ "z" ]; };
}
© 2022 NixOS Contributors
Licensed under the LGPL License.
https://nixos.org/manual/nix/stable/expressions/builtins.html