tvl-depot/tvix/eval/docs/builtins.md
Ryan Lahfa e7af8e0d62 feat(tvix/eval): implement appendContext
`appendContext s ctx` will just append a user-crafted context attrs to `s`.

The most important part of this builtin is to perform all the relevant invariant validations
to avoid letting the user craft invalid contexts which can never be built, e.g. invalid store paths,
inexistent derivations, etc.

This version is incomplete and full of TODOs, but passes all the Nix's
context strings tests, so we turn them on.

Change-Id: I625dc5e7c4f5b784f078b390f04b0ee5a8d65a7c
Signed-off-by: Ryan Lahfa <tvl@lahfa.xyz>
Reviewed-on: https://cl.tvl.fyi/c/depot/+/11263
Reviewed-by: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
2024-04-04 17:24:26 +00:00

8.4 KiB

Nix builtins

Nix has a lot of built-in functions, some of which are accessible in the global scope, and some of which are only accessible through the global builtins attribute set.

This document is an attempt to track all of these builtins, but without documenting their functionality.

See also https://nixos.org/manual/nix/stable/expressions/builtins.html

The impl column indicates implementation status in tvix:

  • implemented: "" (empty cell)
  • not yet implemented, but not blocked: todo
  • not yet implemented, but blocked by other prerequisites:
    • store: awaiting eval<->store api(s)
    • context: awaiting support for string contexts
name global arity pure impl
abort true 1
add false 2 true
addErrorContext false ? context
all false 2 true
any false 2 true
appendContext false ?
attrNames false 1 true
attrValues false true
baseNameOf true
bitAnd false
bitOr false
bitXor false
builtins true
catAttrs false
compareVersions false
concatLists false
concatMap false
concatStringsSep false
currentSystem false
currentTime false false
deepSeq false
derivation true store
derivationStrict true store
dirOf true
div false
elem false
elemAt false
false true
fetchGit true store
fetchMercurial true store
fetchTarball true store
fetchurl false store
filter false
filterSource false store
findFile false false todo
foldl' false
fromJSON false
fromTOML true
functionArgs false
genList false
genericClosure false todo
getAttr false
getContext false
getEnv false false
hasAttr false
hasContext false
hashFile false false
hashString false
head false
import true
intersectAttrs false
isAttrs false
isBool false
isFloat false
isFunction false
isInt false
isList false
isNull true
isPath false
isString false
langVersion false
length false
lessThan false
listToAttrs false
map true
mapAttrs false
match false
mul false
nixPath false todo
nixVersion false todo
null true
parseDrvName false
partition false
path false sometimes store
pathExists false false
placeholder true context
readDir false false
readFile false false
removeAttrs true
replaceStrings false
scopedImport true
seq false
sort false
split false
splitVersion false
storeDir false store
storePath false store
stringLength false
sub false
substring false
tail false
throw true
toFile false store
toJSON false
toPath false
toString true
toXML true
trace false
true true
tryEval false
typeOf false
unsafeDiscardOutputDependency false
unsafeDiscardStringContext false
unsafeGetAttrPos false todo
valueSize false todo

Added after C++ Nix 2.3 (without Flakes enabled)

name global arity pure impl
break false 1 todo
ceil false 1 true
fetchTree true 1 todo
floor false 1 true
groupBy false 2 true
traceVerbose false 2 todo
zipAttrsWith false 2 true todo