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 an identifier or a string literal.
Syntax
name → identifier | string
Names are used in attribute sets, let bindings, and [inherit](./syntax.md#inheriting attributes).
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.