Skip to content

Directives

File-specific template options can be set using template directives in the template of the form:

chezmoi:template:$KEY=$VALUE

which sets the template option $KEY to $VALUE. $VALUE must be quoted if it contains spaces or double quotes. Multiple key/value pairs may be specified on a single line.

Lines containing template directives are removed to avoid parse errors from any delimiters. If multiple directives are present in a file, later directives override earlier ones.

Delimiters

By default, chezmoi uses the standard text/template delimiters {{ and }}. If a template contains the string:

chezmoi:template:left-delimiter=$LEFT right-delimiter=$RIGHT

Then the delimiters $LEFT and $RIGHT are used instead. Either or both of left-delimiter=$LEFT and right-delimiter=$RIGHT may be omitted. If either $LEFT or $RIGHT is empty then the default delimiter ({{ and }} respectively) is set instead.

The delimiters are specific to the file in which they appear and are not inherited by templates called from the file.

Example

#!/bin/sh
# chezmoi:template:left-delimiter="# [[" right-delimiter=]]

# [[ "true" ]]

Line endings

Many of the template functions available in chezmoi primarily use UNIX-style line endings (lf/\n), which may result in unexpected output when running chezmoi diff on a modify_ template. These line endings can be overridden with a template directive:

chezmoi:template:line-endings=$VALUE

$VALUE can be an arbitrary string or one of:

Value Effect
crlf Use Windows line endings (\r\n)
lf Use UNIX-style line endings (\n)
native Use platform-native line endings (crlf on Windows, lf elsewhere)

Missing keys

By default, chezmoi will return an error if a template indexes a map with a key that is not present in the map. This behavior can be changed globally with the template.options configuration variable or with a template directive:

chezmoi:template:missing-key=$VALUE

$VALUE can be one of:

Value Effect
error Return an error on any missing key (default)
invalid Ignore missing keys. If printed, the result of the index operation is the string <no value>
zero Ignore missing keys. If printed, the result of the index operation is the zero value