Identifiers
An identifier is an ASCII character sequence that:
- Starts with a letter (
a-z
,A-Z
) or underscore (_
) - Can contain any number of:
- Letters (
a-z
,A-Z
) - Digits (
0-9
) - Underscores (
_
) - Apostrophes (
'
) - Hyphens (
-
)
- Letters (
- Is not one of the keywords
Syntax
identifier ~
[A-Za-z_][A-Za-z0-9_'-]*
Names
A name can be written as an identifier or a string literal.
Syntax
name → identifier | string
Names are used in attribute sets, let
bindings, and inherit
.
Two names are the same if they represent the same sequence of characters, regardless of whether they are written as identifiers or strings.
Keywords
These keywords are reserved and cannot be used as identifiers:
Note
The Nix language evaluator currently allows
or
to be used as a name in some contexts, for backwards compatibility reasons. Users are advised not to rely on this.There are long-standing issues with how
or
is parsed as a name, which can't be resolved without making a breaking change to the language.