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
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.