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
orto 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
oris parsed as a name, which can't be resolved without making a breaking change to the language.