dotfiles/bin/share/man/man1/ghostty.1

2594 lines
93 KiB
Groff
Raw Permalink Normal View History

2025-01-18 20:12:19 +01:00
.\" Automatically generated by Pandoc 3.1.11.1
.\"
.TH "GHOSTTY" "1" "" "Version 0.1.0\-main+dd6460bc" "Ghostty terminal emulator"
.SH NAME
\f[B]ghostty\f[R] \- Ghostty terminal emulator
.SH DESCRIPTION
Ghostty is a cross\-platform, GPU\-accelerated terminal emulator that
aims to push the boundaries of what is possible with a terminal emulator
by exposing modern, opt\-in features that enable CLI tool developers to
build more feature rich, interactive applications.
.PP
There are a number of excellent terminal emulator options that exist
today.
The unique goal of Ghostty is to have a platform for experimenting with
modern, optional, non\-standards\-compliant features to enhance the
capabilities of CLI applications.
We aim to be the best in this category, and competitive in the rest.
.PP
While aiming for this ambitious goal, Ghostty is a fully standards
compliant terminal emulator that aims to remain compatible with all
existing shells and software.
You can use this as a drop\-in replacement for your existing terminal
emulator.
.SH COMMAND LINE ACTIONS
.TP
\f[B]\f[CB]\-\-version\f[B]\f[R]
The \f[CR]version\f[R] command is used to display information about
Ghostty.
.TP
\f[B]\f[CB]\-\-help\f[B]\f[R]
The \f[CR]help\f[R] command shows general help about Ghostty.
You can also specify \f[CR]\-\-help\f[R] or \f[CR]\-h\f[R] along with
any action such as \f[CR]+list\-themes\f[R] to see help for a specific
action.
.TP
\f[B]\f[CB]+list\-fonts\f[B]\f[R]
The \f[CR]list\-fonts\f[R] command is used to list all the available
fonts for Ghostty.
This uses the exact same font discovery mechanism Ghostty uses to find
fonts to use.
.RS
.PP
When executed with no arguments, this will list all available fonts,
sorted by family name, then font name.
If a family name is given with \f[CR]\-\-family\f[R], the sorting will
be disabled and the results instead will be shown in the same priority
order Ghostty would use to pick a font.
.PP
The \f[CR]\-\-family\f[R] argument can be used to filter results to a
specific family.
The family handling is identical to the \f[CR]font\-family\f[R] set of
Ghostty configuration values, so this can be used to debug why your
desired font may not be loading.
.PP
The \f[CR]\-\-bold\f[R] and \f[CR]\-\-italic\f[R] arguments can be used
to filter results to specific styles.
It is not guaranteed that only those styles are returned, it will just
prioritize fonts that match those styles.
.RE
.TP
\f[B]\f[CB]+list\-keybinds\f[B]\f[R]
The \f[CR]list\-keybinds\f[R] command is used to list all the available
keybinds for Ghostty.
.RS
.PP
When executed without any arguments this will list the current keybinds
loaded by the config file.
If no config file is found or there aren\[cq]t any changes to the
keybinds it will print out the default ones configured for Ghostty
.PP
The \f[CR]\-\-default\f[R] argument will print out all the default
keybinds configured for Ghostty
.PP
The \f[CR]\-\-plain\f[R] flag will disable formatting and make the
output more friendly for Unix tooling.
This is default when not printing to a tty.
.RE
.TP
\f[B]\f[CB]+list\-themes\f[B]\f[R]
The \f[CR]list\-themes\f[R] command is used to preview or list all the
available themes for Ghostty.
.RS
.PP
If this command is run from a TTY, a TUI preview of the themes will be
shown.
While in the preview, \f[CR]F1\f[R] will bring up a help screen and
\f[CR]ESC\f[R] will exit the preview.
Other keys that can be used to navigate the preview are listed in the
help screen.
.PP
If this command is not run from a TTY, or the output is piped to another
command, a plain list of theme names will be printed to the screen.
A plain list can be forced using the \f[CR]\-\-plain\f[R] CLI flag.
.PP
Two different directories will be searched for themes.
.PP
The first directory is the \f[CR]themes\f[R] subdirectory of your
Ghostty configuration directory.
This is \f[CR]$XDG_CONFIG_DIR/ghostty/themes\f[R] or
\f[CR]\[ti]/.config/ghostty/themes\f[R].
.PP
The second directory is the \f[CR]themes\f[R] subdirectory of the
Ghostty resources directory.
Ghostty ships with a multitude of themes that will be installed into
this directory.
On macOS, this directory is the
\f[CR]Ghostty.app/Contents/ Resources/ghostty/themes\f[R].
On Linux, this directory is the \f[CR]share/ghostty/ themes\f[R]
(wherever you installed the Ghostty \[lq]share\[rq] directory).
If you\[cq]re running Ghostty from the source, this is the
\f[CR]zig\-out/share/ghostty/themes\f[R] directory.
.PP
You can also set the \f[CR]GHOSTTY_RESOURCES_DIR\f[R] environment
variable to point to the resources directory.
.PP
Flags:
.IP \[bu] 2
\f[CR]\-\-path\f[R]: Show the full path to the theme.
.IP \[bu] 2
\f[CR]\-\-plain\f[R]: Force a plain listing of themes.
.RE
.TP
\f[B]\f[CB]+list\-colors\f[B]\f[R]
The \f[CR]list\-colors\f[R] command is used to list all the named RGB
colors in Ghostty.
.TP
\f[B]\f[CB]+list\-actions\f[B]\f[R]
The \f[CR]list\-actions\f[R] command is used to list all the available
keybind actions for Ghostty.
.RS
.PP
The \f[CR]\-\-docs\f[R] argument will print out the documentation for
each action.
.RE
.TP
\f[B]\f[CB]+show\-config\f[B]\f[R]
The \f[CR]show\-config\f[R] command shows the current configuration in a
valid Ghostty configuration file format.
.RS
.PP
When executed without any arguments this will output the current
configuration that is different from the default configuration.
If you\[cq]re using the default configuration this will output nothing.
.PP
If you are a new user and want to see all available options with
documentation, run
\f[CR]ghostty +show\-config \-\-default \-\-docs\f[R].
.PP
The output is not in any specific order, but the order should be
consistent between runs.
The output is not guaranteed to be exactly match the input configuration
files, but it will result in the same behavior.
Comments, whitespace, and other formatting is not preserved from user
configuration files.
.PP
Flags:
.IP \[bu] 2
\f[CR]\-\-default\f[R]: Show the default configuration instead of
loading the user configuration.
.IP \[bu] 2
\f[CR]\-\-changes\-only\f[R]: Only show the options that have been
changed from the default.
This has no effect if \f[CR]\-\-default\f[R] is specified.
.IP \[bu] 2
\f[CR]\-\-docs\f[R]: Print the documentation above each option as a
comment, This is very noisy but is very useful to learn about available
options, especially paired with \f[CR]\-\-default\f[R].
.RE
.TP
\f[B]\f[CB]+validate\-config\f[B]\f[R]
The \f[CR]validate\-config\f[R] command is used to validate a Ghostty
config file.
.RS
.PP
When executed without any arguments, this will load the config from the
default location.
.PP
The \f[CR]\-\-config\-file\f[R] argument can be passed to validate a
specific target config file in a non\-default location.
.RE
.TP
\f[B]\f[CB]+crash\-report\f[B]\f[R]
The \f[CR]crash\-report\f[R] command is used to inspect and send crash
reports.
.RS
.PP
When executed without any arguments, this will list existing crash
reports.
.PP
This command currently only supports listing crash reports.
Viewing and sending crash reports is unimplemented and will be added in
the future.
.RE
.SH CONFIGURATION OPTIONS
.TP
\f[B]\f[CB]\-\-font\-family\f[B]\f[R]
The font families to use.
.RS
.PP
You can generate the list of valid values using the CLI:
.IP
.EX
ghostty +list\-fonts
.EE
.PP
This configuration can be repeated multiple times to specify preferred
fallback fonts when the requested codepoint is not available in the
primary font.
This is particularly useful for multiple languages, symbolic fonts, etc.
.PP
Notes on emoji specifically: On macOS, Ghostty by default will always
use Apple Color Emoji and on Linux will always use Noto Emoji.
You can override this behavior by specifying a font family here that
contains emoji glyphs.
.PP
The specific styles (bold, italic, bold italic) do not need to be
explicitly set.
If a style is not set, then the regular style (font\-family) will be
searched for stylistic variants.
If a stylistic variant is not found, Ghostty will use the regular style.
This prevents falling back to a different font family just to get a
style such as bold.
This also applies if you explicitly specify a font family for a style.
For example, if you set \f[CR]font\-family\-bold = FooBar\f[R] and
\[lq]FooBar\[rq] cannot be found, Ghostty will use whatever font is set
for \f[CR]font\-family\f[R] for the bold style.
.PP
Finally, some styles may be synthesized if they are not supported.
For example, if a font does not have an italic style and no alternative
italic font is specified, Ghostty will synthesize an italic style by
applying a slant to the regular style.
If you want to disable these synthesized styles then you can use the
\f[CR]font\-style\f[R] configurations as documented below.
.PP
You can disable styles completely by using the \f[CR]font\-style\f[R]
set of configurations.
See the documentation for \f[CR]font\-style\f[R] for more information.
.PP
If you want to overwrite a previous set value rather than append a
fallback, specify the value as \f[CR]\[dq]\[dq]\f[R] (empty string) to
reset the list and then set the new values.
For example:
.IP
.EX
font\-family = \[dq]\[dq]
font\-family = \[dq]My Favorite Font\[dq]
.EE
.PP
Setting any of these as CLI arguments will automatically clear the
values set in configuration files so you don\[cq]t need to specify
\f[CR]\-\-font\-family=\[dq]\[dq]\f[R] before setting a new value.
You only need to specify this within config files if you want to clear
previously set values in configuration files or on the CLI if you want
to clear values set on the CLI.
.PP
Changing this configuration at runtime will only affect new terminals,
i.e.
new windows, tabs, etc.
.RE
.PP
\f[B]\f[CB]\-\-font\-family\-bold\f[B]\f[R]
.PP
\f[B]\f[CB]\-\-font\-family\-italic\f[B]\f[R]
.PP
\f[B]\f[CB]\-\-font\-family\-bold\-italic\f[B]\f[R]
.TP
\f[B]\f[CB]\-\-font\-style\f[B]\f[R]
The named font style to use for each of the requested terminal font
styles.
This looks up the style based on the font style string advertised by the
font itself.
For example, \[lq]Iosevka Heavy\[rq] has a style of \[lq]Heavy\[rq].
.RS
.PP
You can also use these fields to completely disable a font style.
If you set the value of the configuration below to literal
\f[CR]false\f[R] then that font style will be disabled.
If the running program in the terminal requests a disabled font style,
the regular font style will be used instead.
.PP
These are only valid if its corresponding font\-family is also
specified.
If no font\-family is specified, then the font\-style is ignored unless
you\[cq]re disabling the font style.
.RE
.PP
\f[B]\f[CB]\-\-font\-style\-bold\f[B]\f[R]
.PP
\f[B]\f[CB]\-\-font\-style\-italic\f[B]\f[R]
.PP
\f[B]\f[CB]\-\-font\-style\-bold\-italic\f[B]\f[R]
.TP
\f[B]\f[CB]\-\-font\-synthetic\-style\f[B]\f[R]
Control whether Ghostty should synthesize a style if the requested style
is not available in the specified font\-family.
.RS
.PP
Ghostty can synthesize bold, italic, and bold italic styles if the font
does not have a specific style.
For bold, this is done by drawing an outline around the glyph of varying
thickness.
For italic, this is done by applying a slant to the glyph.
For bold italic, both of these are applied.
.PP
Synthetic styles are not perfect and will generally not look as good as
a font that has the style natively.
However, they are useful to provide styled text when the font does not
have the style.
.PP
Set this to \[lq]false\[rq] or \[lq]true\[rq] to disable or enable
synthetic styles completely.
You can disable specific styles using \[lq]no\-bold\[rq],
\[lq]no\-italic\[rq], and \[lq]no\-bold\-italic\[rq].
You can disable multiple styles by separating them with a comma.
For example, \[lq]no\-bold,no\-italic\[rq].
.PP
Available style keys are: \f[CR]bold\f[R], \f[CR]italic\f[R],
\f[CR]bold\-italic\f[R].
.PP
If synthetic styles are disabled, then the regular style will be used
instead if the requested style is not available.
If the font has the requested style, then the font will be used as\-is
since the style is not synthetic.
.PP
Warning: An easy mistake is to disable \f[CR]bold\f[R] or
\f[CR]italic\f[R] but not \f[CR]bold\-italic\f[R].
Disabling only \f[CR]bold\f[R] or \f[CR]italic\f[R] will NOT disable
either in the \f[CR]bold\-italic\f[R] style.
If you want to disable \f[CR]bold\-italic\f[R], you must explicitly
disable it.
You cannot partially disable \f[CR]bold\-italic\f[R].
.PP
By default, synthetic styles are enabled.
.RE
.TP
\f[B]\f[CB]\-\-font\-feature\f[B]\f[R]
Apply a font feature.
This can be repeated multiple times to enable multiple font features.
You can NOT set multiple font features with a single value (yet).
.RS
.PP
The font feature will apply to all fonts rendered by Ghostty.
A future enhancement will allow targeting specific faces.
.PP
A valid value is the name of a feature.
Prefix the feature with a \f[CR]\-\f[R] to explicitly disable it.
Example: \f[CR]ss20\f[R] or \f[CR]\-ss20\f[R].
.PP
To disable programming ligatures, use \f[CR]\-calt\f[R] since this is
the typical feature name for programming ligatures.
To look into what font features your font has and what they do, use a
font inspection tool such as \c
.UR https://fontdrop.info
fontdrop.info
.UE \c
\&.
.PP
To generally disable most ligatures, use \f[CR]\-calt\f[R],
\f[CR]\-liga\f[R], and \f[CR]\-dlig\f[R] (as separate repetitive entries
in your config).
.RE
.TP
\f[B]\f[CB]\-\-font\-size\f[B]\f[R]
Font size in points.
This value can be a non\-integer and the nearest integer pixel size will
be selected.
If you have a high dpi display where 1pt = 2px then you can get an odd
numbered pixel size by specifying a half point.
.RS
.PP
For example, 13.5pt \[at] 2px/pt = 27px
.PP
Changing this configuration at runtime will only affect new terminals,
i.e.\ new windows, tabs, etc.
Note that you may still not see the change depending on your
\f[CR]window\-inherit\-font\-size\f[R] setting.
If that setting is true, only the first window will be affected by this
change since all subsequent windows will inherit the font size of the
previous window.
.RE
.TP
\f[B]\f[CB]\-\-font\-variation\f[B]\f[R]
A repeatable configuration to set one or more font variations values for
a variable font.
A variable font is a single font, usually with a filename ending in
\f[CR]\-VF.ttf\f[R] or \f[CR]\-VF.otf\f[R] that contains one or more
configurable axes for things such as weight, slant, etc.
Not all fonts support variations; only fonts that explicitly state they
are variable fonts will work.
.RS
.PP
The format of this is \f[CR]id=value\f[R] where \f[CR]id\f[R] is the
axis identifier.
An axis identifier is always a 4 character string, such as
\f[CR]wght\f[R].
To get the list of supported axes, look at your font documentation or
use a font inspection tool.
.PP
Invalid ids and values are usually ignored.
For example, if a font only supports weights from 100 to 700, setting
\f[CR]wght=800\f[R] will do nothing (it will not be clamped to 700).
You must consult your font\[cq]s documentation to see what values are
supported.
.PP
Common axes are: \f[CR]wght\f[R] (weight), \f[CR]slnt\f[R] (slant),
\f[CR]ital\f[R] (italic), \f[CR]opsz\f[R] (optical size),
\f[CR]wdth\f[R] (width), \f[CR]GRAD\f[R] (gradient), etc.
.RE
.PP
\f[B]\f[CB]\-\-font\-variation\-bold\f[B]\f[R]
.PP
\f[B]\f[CB]\-\-font\-variation\-italic\f[B]\f[R]
.PP
\f[B]\f[CB]\-\-font\-variation\-bold\-italic\f[B]\f[R]
.TP
\f[B]\f[CB]\-\-font\-codepoint\-map\f[B]\f[R]
Force one or a range of Unicode codepoints to map to a specific named
font.
This is useful if you want to support special symbols or if you want to
use specific glyphs that render better for your specific font.
.RS
.PP
The syntax is \f[CR]codepoint=fontname\f[R] where \f[CR]codepoint\f[R]
is either a single codepoint or a range.
Codepoints must be specified as full Unicode hex values, such as
\f[CR]U+ABCD\f[R].
Codepoints ranges are specified as \f[CR]U+ABCD\-U+DEFG\f[R].
You can specify multiple ranges for the same font separated by commas,
such as \f[CR]U+ABCD\-U+DEFG,U+1234\-U+5678=fontname\f[R].
The font name is the same value as you would use for
\f[CR]font\-family\f[R].
.PP
This configuration can be repeated multiple times to specify multiple
codepoint mappings.
.PP
Changing this configuration at runtime will only affect new terminals,
i.e.\ new windows, tabs, etc.
.RE
.TP
\f[B]\f[CB]\-\-font\-thicken\f[B]\f[R]
Draw fonts with a thicker stroke, if supported.
This is only supported currently on macOS.
.TP
\f[B]\f[CB]\-\-adjust\-cell\-width\f[B]\f[R]
All of the configurations behavior adjust various metrics determined by
the font.
The values can be integers (1, \-1, etc.)
or a percentage (20%, \-15%, etc.).
In each case, the values represent the amount to change the original
value.
.RS
.PP
For example, a value of \f[CR]1\f[R] increases the value by 1; it does
not set it to literally 1.
A value of \f[CR]20%\f[R] increases the value by 20%.
And so on.
.PP
There is little to no validation on these values so the wrong values
(i.e.
\f[CR]\-100%\f[R]) can cause the terminal to be unusable.
Use with caution and reason.
.PP
Some values are clamped to minimum or maximum values.
This can make it appear that certain values are ignored.
For example, the underline position is clamped to the height of a cell.
If you set the underline position so high that it extends beyond the
bottom of the cell size, it will be clamped to the bottom of the cell.
.PP
\f[CR]adjust\-cell\-height\f[R] has some additional behaviors to
describe:
.IP \[bu] 2
The font will be centered vertically in the cell.
.IP \[bu] 2
The cursor will remain the same size as the font.
.IP \[bu] 2
Powerline glyphs will be adjusted along with the cell height so that
things like status lines continue to look aligned.
.RE
.PP
\f[B]\f[CB]\-\-adjust\-cell\-height\f[B]\f[R]
.TP
\f[B]\f[CB]\-\-adjust\-font\-baseline\f[B]\f[R]
Distance in pixels from the bottom of the cell to the text baseline.
Increase to move baseline UP, decrease to move baseline DOWN.
.TP
\f[B]\f[CB]\-\-adjust\-underline\-position\f[B]\f[R]
Distance in pixels from the top of the cell to the top of the underline.
Increase to move underline DOWN, decrease to move underline UP.
.TP
\f[B]\f[CB]\-\-adjust\-underline\-thickness\f[B]\f[R]
Thickness in pixels of the underline.
.TP
\f[B]\f[CB]\-\-adjust\-strikethrough\-position\f[B]\f[R]
Distance in pixels from the top of the cell to the top of the
strikethrough.
Increase to move strikethrough DOWN, decrease to move underline UP.
.TP
\f[B]\f[CB]\-\-adjust\-strikethrough\-thickness\f[B]\f[R]
Thickness in pixels of the strikethrough.
.TP
\f[B]\f[CB]\-\-adjust\-overline\-position\f[B]\f[R]
Distance in pixels from the top of the cell to the top of the overline.
Increase to move overline DOWN, decrease to move underline UP.
.TP
\f[B]\f[CB]\-\-adjust\-overline\-thickness\f[B]\f[R]
Thickness in pixels of the overline.
.TP
\f[B]\f[CB]\-\-adjust\-cursor\-thickness\f[B]\f[R]
Thickness in pixels of the bar cursor and outlined rect cursor.
.TP
\f[B]\f[CB]\-\-adjust\-box\-thickness\f[B]\f[R]
Thickness in pixels of box drawing characters.
.TP
\f[B]\f[CB]\-\-grapheme\-width\-method\f[B]\f[R]
The method to use for calculating the cell width of a grapheme cluster.
The default value is \f[CR]unicode\f[R] which uses the Unicode standard
to determine grapheme width.
This results in correct grapheme width but may result in cursor\-desync
issues with some programs (such as shells) that may use a legacy method
such as \f[CR]wcswidth\f[R].
.RS
.PP
Valid values are:
.IP \[bu] 2
\f[CR]legacy\f[R] \- Use a legacy method to determine grapheme width,
such as wcswidth This maximizes compatibility with legacy programs but
may result in incorrect grapheme width for certain graphemes such as
skin\-tone emoji, non\-English characters, etc.
.RS 2
.PP
This is called \[lq]legacy\[rq] and not something more specific because
the behavior is undefined and we want to retain the ability to modify
it.
For example, we may or may not use libc \f[CR]wcswidth\f[R] now or in
the future.
.RE
.IP \[bu] 2
\f[CR]unicode\f[R] \- Use the Unicode standard to determine grapheme
width.
.PP
If a running program explicitly enables terminal mode 2027, then
\f[CR]unicode\f[R] width will be forced regardless of this
configuration.
When mode 2027 is reset, this configuration will be used again.
.PP
This configuration can be changed at runtime but will not affect
existing terminals.
Only new terminals will use the new configuration.
.RE
.TP
\f[B]\f[CB]\-\-freetype\-load\-flags\f[B]\f[R]
FreeType load flags to enable.
The format of this is a list of flags to enable separated by commas.
If you prefix a flag with \f[CR]no\-\f[R] then it is disabled.
If you omit a flag, it\[cq]s default value is used, so you must
explicitly disable flags you don\[cq]t want.
You can also use \f[CR]true\f[R] or \f[CR]false\f[R] to turn all flags
on or off.
.RS
.PP
This configuration only applies to Ghostty builds that use FreeType.
This is usually the case only for Linux builds.
macOS uses CoreText and does not have an equivalent configuration.
.PP
Available flags:
.IP \[bu] 2
\f[CR]hinting\f[R] \- Enable or disable hinting, enabled by default.
.IP \[bu] 2
\f[CR]force\-autohint\f[R] \- Use the freetype auto\-hinter rather than
the font\[cq]s native hinter.
Enabled by default.
.IP \[bu] 2
\f[CR]monochrome\f[R] \- Instructs renderer to use 1\-bit monochrome
rendering.
This option doesn\[cq]t impact the hinter.
Enabled by default.
.IP \[bu] 2
\f[CR]autohint\f[R] \- Use the freetype auto\-hinter.
Enabled by default.
.PP
Example: \f[CR]hinting\f[R], \f[CR]no\-hinting\f[R],
\f[CR]force\-autohint\f[R], \f[CR]no\-force\-autohint\f[R]
.RE
.TP
\f[B]\f[CB]\-\-theme\f[B]\f[R]
A theme to use.
This can be a built\-in theme name, a custom theme name, or an absolute
path to a custom theme file.
Ghostty also supports specifying a different theme to use for light and
dark mode.
Each option is documented below.
.RS
.PP
If the theme is an absolute pathname, Ghostty will attempt to load that
file as a theme.
If that file does not exist or is inaccessible, an error will be logged
and no other directories will be searched.
.PP
If the theme is not an absolute pathname, two different directories will
be searched for a file name that matches the theme.
This is case sensitive on systems with case\-sensitive filesystems.
It is an error for a theme name to include path separators unless it is
an absolute pathname.
.PP
The first directory is the \f[CR]themes\f[R] subdirectory of your
Ghostty configuration directory.
This is \f[CR]$XDG_CONFIG_DIR/ghostty/themes\f[R] or
\f[CR]\[ti]/.config/ghostty/themes\f[R].
.PP
The second directory is the \f[CR]themes\f[R] subdirectory of the
Ghostty resources directory.
Ghostty ships with a multitude of themes that will be installed into
this directory.
On macOS, this list is in the
\f[CR]Ghostty.app/Contents/ Resources/ghostty/themes\f[R] directory.
On Linux, this list is in the \f[CR]share/ ghostty/themes\f[R] directory
(wherever you installed the Ghostty \[lq]share\[rq] directory.
.PP
To see a list of available themes, run \f[CR]ghostty +list\-themes\f[R].
.PP
A theme file is simply another Ghostty configuration file.
They share the same syntax and same configuration options.
A theme can set any valid configuration option so please do not use a
theme file from an untrusted source.
The built\-in themes are audited to only set safe configuration options.
.PP
Some options cannot be set within theme files.
The reason these are not supported should be self\-evident.
A theme file cannot set \f[CR]theme\f[R] or \f[CR]config\-file\f[R].
At the time of writing this, Ghostty will not show any warnings or
errors if you set these options in a theme file but they will be
silently ignored.
.PP
Any additional colors specified via background, foreground, palette,
etc.
will override the colors specified in the theme.
.PP
To specify a different theme for light and dark mode, use the following
syntax: \f[CR]light:theme\-name,dark:theme\-name\f[R].
For example: \f[CR]light:rose\-pine\-dawn,dark:rose\-pine\f[R].
Whitespace around all values are trimmed and order of light and dark
does not matter.
Both light and dark must be specified in this form.
In this form, the theme used will be based on the current desktop
environment theme.
.PP
There are some known bugs with light/dark mode theming.
These will be fixed in a future update:
.IP \[bu] 2
macOS: titlebar tabs style is not updated when switching themes.
.RE
.TP
\f[B]\f[CB]\-\-background\f[B]\f[R]
Background color for the window.
.TP
\f[B]\f[CB]\-\-foreground\f[B]\f[R]
Foreground color for the window.
.TP
\f[B]\f[CB]\-\-selection\-foreground\f[B]\f[R]
The foreground and background color for selection.
If this is not set, then the selection color is just the inverted window
background and foreground (note: not to be confused with the cell
bg/fg).
.PP
\f[B]\f[CB]\-\-selection\-background\f[B]\f[R]
.TP
\f[B]\f[CB]\-\-selection\-invert\-fg\-bg\f[B]\f[R]
Swap the foreground and background colors of cells for selection.
This option overrides the \f[CR]selection\-foreground\f[R] and
\f[CR]selection\-background\f[R] options.
.RS
.PP
If you select across cells with differing foregrounds and backgrounds,
the selection color will vary across the selection.
.RE
.TP
\f[B]\f[CB]\-\-minimum\-contrast\f[B]\f[R]
The minimum contrast ratio between the foreground and background colors.
The contrast ratio is a value between 1 and 21.
A value of 1 allows for no contrast (i.e.\ black on black).
This value is the contrast ratio as defined by the \c
.UR https://www.w3.org/TR/WCAG20/
WCAG 2.0 specification
.UE \c
\&.
.RS
.PP
If you want to avoid invisible text (same color as background), a value
of 1.1 is a good value.
If you want to avoid text that is difficult to read, a value of 3 or
higher is a good value.
The higher the value, the more likely that text will become black or
white.
.PP
This value does not apply to Emoji or images.
.RE
.TP
\f[B]\f[CB]\-\-palette\f[B]\f[R]
Color palette for the 256 color form that many terminal applications
use.
The syntax of this configuration is \f[CR]N=HEXCODE\f[R] where
\f[CR]N\f[R] is 0 to 255 (for the 256 colors in the terminal color
table) and \f[CR]HEXCODE\f[R] is a typical RGB color code such as
\f[CR]#AABBCC\f[R].
.RS
.PP
For definitions on all the codes \c
.UR https://www.ditig.com/256-colors-cheat-sheet
see this cheat sheet
.UE \c
\&.
.RE
.TP
\f[B]\f[CB]\-\-cursor\-color\f[B]\f[R]
The color of the cursor.
If this is not set, a default will be chosen.
.TP
\f[B]\f[CB]\-\-cursor\-invert\-fg\-bg\f[B]\f[R]
Swap the foreground and background colors of the cell under the cursor.
This option overrides the \f[CR]cursor\-color\f[R] and
\f[CR]cursor\-text\f[R] options.
.TP
\f[B]\f[CB]\-\-cursor\-opacity\f[B]\f[R]
The opacity level (opposite of transparency) of the cursor.
A value of 1 is fully opaque and a value of 0 is fully transparent.
A value less than 0 or greater than 1 will be clamped to the nearest
valid value.
Note that a sufficiently small value such as 0.3 may be effectively
invisible and may make it difficult to find the cursor.
.TP
\f[B]\f[CB]\-\-cursor\-style\f[B]\f[R]
The style of the cursor.
This sets the default style.
A running program can still request an explicit cursor style using
escape sequences (such as \f[CR]CSI q\f[R]).
Shell configurations will often request specific cursor styles.
.RS
.PP
Note that shell integration will automatically set the cursor to a bar
at a prompt, regardless of this configuration.
You can disable that behavior by specifying
\f[CR]shell\-integration\-features = no\-cursor\f[R] or disabling shell
integration entirely.
.PP
Valid values are:
.IP \[bu] 2
\f[CR]block\f[R]
.IP \[bu] 2
\f[CR]bar\f[R]
.IP \[bu] 2
\f[CR]underline\f[R]
.IP \[bu] 2
\f[CR]block_hollow\f[R]
.RE
.TP
\f[B]\f[CB]\-\-cursor\-style\-blink\f[B]\f[R]
Sets the default blinking state of the cursor.
This is just the default state; running programs may override the cursor
style using \f[CR]DECSCUSR\f[R] (\f[CR]CSI q\f[R]).
.RS
.PP
If this is not set, the cursor blinks by default.
Note that this is not the same as a \[lq]true\[rq] value, as noted
below.
.PP
If this is not set at all (\f[CR]null\f[R]), then Ghostty will respect
DEC Mode 12 (AT&T cursor blink) as an alternate approach to turning
blinking on/off.
If this is set to any value other than null, DEC mode 12 will be ignored
but \f[CR]DECSCUSR\f[R] will still be respected.
.PP
Valid values are:
.IP \[bu] 2
\[ga]\[ga] (blank)
.IP \[bu] 2
\f[CR]true\f[R]
.IP \[bu] 2
\f[CR]false\f[R]
.RE
.TP
\f[B]\f[CB]\-\-cursor\-text\f[B]\f[R]
The color of the text under the cursor.
If this is not set, a default will be chosen.
.TP
\f[B]\f[CB]\-\-cursor\-click\-to\-move\f[B]\f[R]
Enables the ability to move the cursor at prompts by using
\f[CR]alt+click\f[R] on Linux and \f[CR]option+click\f[R] on macOS.
.RS
.PP
This feature requires shell integration (specifically prompt marking via
\f[CR]OSC 133\f[R]) and only works in primary screen mode.
Alternate screen applications like vim usually have their own version of
this feature but this configuration doesn\[cq]t control that.
.PP
It should be noted that this feature works by translating your desired
position into a series of synthetic arrow key movements, so some weird
behavior around edge cases are to be expected.
This is unfortunately how this feature is implemented across terminals
because there isn\[cq]t any other way to implement it.
.RE
.TP
\f[B]\f[CB]\-\-mouse\-hide\-while\-typing\f[B]\f[R]
Hide the mouse immediately when typing.
The mouse becomes visible again when the mouse is used (button,
movement, etc.).
Platform\-specific behavior may dictate other scenarios where the mouse
is shown.
For example on macOS, the mouse is shown again when a new window, tab,
or split is created.
.TP
\f[B]\f[CB]\-\-mouse\-shift\-capture\f[B]\f[R]
Determines whether running programs can detect the shift key pressed
with a mouse click.
Typically, the shift key is used to extend mouse selection.
.RS
.PP
The default value of \f[CR]false\f[R] means that the shift key is not
sent with the mouse protocol and will extend the selection.
This value can be conditionally overridden by the running program with
the \f[CR]XTSHIFTESCAPE\f[R] sequence.
.PP
The value \f[CR]true\f[R] means that the shift key is sent with the
mouse protocol but the running program can override this behavior with
\f[CR]XTSHIFTESCAPE\f[R].
.PP
The value \f[CR]never\f[R] is the same as \f[CR]false\f[R] but the
running program cannot override this behavior with
\f[CR]XTSHIFTESCAPE\f[R].
The value \f[CR]always\f[R] is the same as \f[CR]true\f[R] but the
running program cannot override this behavior with
\f[CR]XTSHIFTESCAPE\f[R].
.PP
If you always want shift to extend mouse selection even if the program
requests otherwise, set this to \f[CR]never\f[R].
.PP
Valid values are:
.IP \[bu] 2
\f[CR]true\f[R]
.IP \[bu] 2
\f[CR]false\f[R]
.IP \[bu] 2
\f[CR]always\f[R]
.IP \[bu] 2
\f[CR]never\f[R]
.RE
.TP
\f[B]\f[CB]\-\-mouse\-scroll\-multiplier\f[B]\f[R]
Multiplier for scrolling distance with the mouse wheel.
Any value less than 0.01 or greater than 10,000 will be clamped to the
nearest valid value.
.RS
.PP
A value of \[lq]1\[rq] (default) scrolls te default amount.
A value of \[lq]2\[rq] scrolls double the default amount.
A value of \[lq]0.5\[rq] scrolls half the default amount.
Et cetera.
.RE
.TP
\f[B]\f[CB]\-\-background\-opacity\f[B]\f[R]
The opacity level (opposite of transparency) of the background.
A value of 1 is fully opaque and a value of 0 is fully transparent.
A value less than 0 or greater than 1 will be clamped to the nearest
valid value.
.RS
.PP
On macOS, background opacity is disabled when the terminal enters native
fullscreen.
This is because the background becomes gray and it can cause widgets to
show through which isn\[cq]t generally desirable.
.RE
.TP
\f[B]\f[CB]\-\-background\-blur\-radius\f[B]\f[R]
A positive value enables blurring of the background when
background\-opacity is less than 1.
The value is the blur radius to apply.
A value of 20 is reasonable for a good looking blur.
Higher values will cause strange rendering issues as well as performance
issues.
.RS
.PP
This is only supported on macOS.
.RE
.TP
\f[B]\f[CB]\-\-unfocused\-split\-opacity\f[B]\f[R]
The opacity level (opposite of transparency) of an unfocused split.
Unfocused splits by default are slightly faded out to make it easier to
see which split is focused.
To disable this feature, set this value to 1.
.RS
.PP
A value of 1 is fully opaque and a value of 0 is fully transparent.
Because \[lq]0\[rq] is not useful (it makes the window look very weird),
the minimum value is 0.15.
This value still looks weird but you can at least see what\[cq]s going
on.
A value outside of the range 0.15 to 1 will be clamped to the nearest
valid value.
.RE
.TP
\f[B]\f[CB]\-\-unfocused\-split\-fill\f[B]\f[R]
The color to dim the unfocused split.
Unfocused splits are dimmed by rendering a semi\-transparent rectangle
over the split.
This sets the color of that rectangle and can be used to carefully
control the dimming effect.
.RS
.PP
This will default to the background color.
.RE
.TP
\f[B]\f[CB]\-\-command\f[B]\f[R]
The command to run, usually a shell.
If this is not an absolute path, it\[cq]ll be looked up in the
\f[CR]PATH\f[R].
If this is not set, a default will be looked up from your system.
The rules for the default lookup are:
.RS
.IP \[bu] 2
\f[CR]SHELL\f[R] environment variable
.IP \[bu] 2
\f[CR]passwd\f[R] entry (user information)
.PP
This can contain additional arguments to run the command with.
If additional arguments are provided, the command will be executed using
\f[CR]/bin/sh \-c\f[R].
Ghostty does not do any shell command parsing.
.PP
This command will be used for all new terminal surfaces, i.e.\ new
windows, tabs, etc.
If you want to run a command only for the first terminal surface created
when Ghostty starts, use the \f[CR]initial\-command\f[R] configuration.
.PP
Ghostty supports the common \f[CR]\-e\f[R] flag for executing a command
with arguments.
For example, \f[CR]ghostty \-e fish \-\-with \-\-custom \-\-args\f[R].
This flag sets the \f[CR]initial\-command\f[R] configuration, see that
for more information.
.RE
.TP
\f[B]\f[CB]\-\-initial\-command\f[B]\f[R]
This is the same as \[lq]command\[rq], but only applies to the first
terminal surface created when Ghostty starts.
Subsequent terminal surfaces will use the \f[CR]command\f[R]
configuration.
.RS
.PP
After the first terminal surface is created (or closed), there is no way
to run this initial command again automatically.
As such, setting this at runtime works but will only affect the next
terminal surface if it is the first one ever created.
.PP
If you\[cq]re using the \f[CR]ghostty\f[R] CLI there is also a shortcut
to set this with arguments directly: you can use the \f[CR]\-e\f[R]
flag.
For example: \f[CR]ghostty \-e fish \-\-with \-\-custom \-\-args\f[R].
The \f[CR]\-e\f[R] flag automatically forces some other behaviors as
well:
.IP \[bu] 2
\f[CR]gtk\-single\-instance=false\f[R] \- This ensures that a new
instance is launched and the CLI args are respected.
.IP \[bu] 2
\f[CR]quit\-after\-last\-window\-closed=true\f[R] \- This ensures that
the Ghostty process will exit when the command exits.
Additionally, the \f[CR]quit\-after\-last\-window\-closed\-delay\f[R] is
unset.
.IP \[bu] 2
\f[CR]shell\-integration=detect\f[R] (if not \f[CR]none\f[R]) \- This
prevents forcibly injecting any configured shell integration into the
command\[cq]s environment.
With \f[CR]\-e\f[R] its highly unlikely that you\[cq]re executing a
shell and forced shell integration is likely to cause problems (i.e.\ by
wrapping your command in a shell, setting env vars, etc.).
This is a safety measure to prevent unexpected behavior.
If you want shell integration with a \f[CR]\-e\f[R]\-executed command,
you must either name your binary appopriately or source the shell
integration script manually.
.RE
.TP
\f[B]\f[CB]\-\-wait\-after\-command\f[B]\f[R]
If true, keep the terminal open after the command exits.
Normally, the terminal window closes when the running command (such as a
shell) exits.
With this true, the terminal window will stay open until any keypress is
received.
.RS
.PP
This is primarily useful for scripts or debugging.
.RE
.TP
\f[B]\f[CB]\-\-abnormal\-command\-exit\-runtime\f[B]\f[R]
The number of milliseconds of runtime below which we consider a process
exit to be abnormal.
This is used to show an error message when the process exits too
quickly.
.RS
.PP
On Linux, this must be paired with a non\-zero exit code.
On macOS, we allow any exit code because of the way shell processes are
launched via the login command.
.RE
.TP
\f[B]\f[CB]\-\-scrollback\-limit\f[B]\f[R]
The size of the scrollback buffer in bytes.
This also includes the active screen.
No matter what this is set to, enough memory will always be allocated
for the visible screen and anything leftover is the limit for the
scrollback.
.RS
.PP
When this limit is reached, the oldest lines are removed from the
scrollback.
.PP
Scrollback currently exists completely in memory.
This means that the larger this value, the larger potential memory
usage.
Scrollback is allocated lazily up to this limit, so if you set this to a
very large value, it will not immediately consume a lot of memory.
.PP
This size is per terminal surface, not for the entire application.
.PP
It is not currently possible to set an unlimited scrollback buffer.
This is a future planned feature.
.PP
This can be changed at runtime but will only affect new terminal
surfaces.
.RE
.TP
\f[B]\f[CB]\-\-link\f[B]\f[R]
Match a regular expression against the terminal text and associate
clicking it with an action.
This can be used to match URLs, file paths, etc.
Actions can be opening using the system opener (i.e.\ \f[CR]open\f[R] or
\f[CR]xdg\-open\f[R]) or executing any arbitrary binding action.
.RS
.PP
Links that are configured earlier take precedence over links that are
configured later.
.PP
A default link that matches a URL and opens it in the system opener
always exists.
This can be disabled using \f[CR]link\-url\f[R].
.PP
TODO: This can\[cq]t currently be set!
.RE
.TP
\f[B]\f[CB]\-\-link\-url\f[B]\f[R]
Enable URL matching.
URLs are matched on hover with control (Linux) or super (macOS) pressed
and open using the default system application for the linked URL.
.RS
.PP
The URL matcher is always lowest priority of any configured links (see
\f[CR]link\f[R]).
If you want to customize URL matching, use \f[CR]link\f[R] and disable
this.
.RE
.TP
\f[B]\f[CB]\-\-fullscreen\f[B]\f[R]
Start new windows in fullscreen.
This setting applies to new windows and does not apply to tabs, splits,
etc.
However, this setting will apply to all new windows, not just the first
one.
.RS
.PP
On macOS, this setting does not work if window\-decoration is set to
\[lq]false\[rq], because native fullscreen on macOS requires window
decorations to be set.
.RE
.TP
\f[B]\f[CB]\-\-title\f[B]\f[R]
The title Ghostty will use for the window.
This will force the title of the window to be this title at all times
and Ghostty will ignore any set title escape sequences programs (such as
Neovim) may send.
.RS
.PP
If you want a blank title, set this to one or more spaces by quoting the
value.
For example, \f[CR]title = \[dq] \[dq]\f[R].
This effectively hides the title.
This is necessary because setting a blank value resets the title to the
default value of the running program.
.PP
This configuration can be reloaded at runtime.
If it is set, the title will update for all windows.
If it is unset, the next title change escape sequence will be honored
but previous changes will not retroactively be set.
This latter case may require you restart programs such as neovim to get
the new title.
.RE
.TP
\f[B]\f[CB]\-\-class\f[B]\f[R]
The setting that will change the application class value.
.RS
.PP
This controls the class field of the \f[CR]WM_CLASS\f[R] X11 property
(when running under X11), and the Wayland application ID (when running
under Wayland).
.PP
Note that changing this value between invocations will create new,
separate instances, of Ghostty when running with
\f[CR]gtk\-single\-instance=true\f[R].
See that option for more details.
.PP
The class name must follow the requirements defined \c
.UR https://docs.gtk.org/gio/type_func.Application.id_is_valid.html
in the GTK documentation
.UE \c
\&.
.PP
The default is \f[CR]com.mitchellh.ghostty\f[R].
.PP
This only affects GTK builds.
.RE
.TP
\f[B]\f[CB]\-\-x11\-instance\-name\f[B]\f[R]
This controls the instance name field of the \f[CR]WM_CLASS\f[R] X11
property when running under X11.
It has no effect otherwise.
.RS
.PP
The default is \f[CR]ghostty\f[R].
.PP
This only affects GTK builds.
.RE
.TP
\f[B]\f[CB]\-\-working\-directory\f[B]\f[R]
The directory to change to after starting the command.
.RS
.PP
This setting is secondary to the
\f[CR]window\-inherit\-working\-directory\f[R] setting.
If a previous Ghostty terminal exists in the same process,
\f[CR]window\-inherit\-working\-directory\f[R] will take precedence.
Otherwise, this setting will be used.
Typically, this setting is used only for the first window.
.PP
The default is \f[CR]inherit\f[R] except in special scenarios listed
next.
On macOS, if Ghostty can detect it is launched from launchd
(double\-clicked) or \f[CR]open\f[R], then it defaults to
\f[CR]home\f[R].
On Linux with GTK, if Ghostty can detect it was launched from a desktop
launcher, then it defaults to \f[CR]home\f[R].
.PP
The value of this must be an absolute value or one of the special values
below:
.IP \[bu] 2
\f[CR]home\f[R] \- The home directory of the executing user.
.IP \[bu] 2
\f[CR]inherit\f[R] \- The working directory of the launching process.
.RE
.TP
\f[B]\f[CB]\-\-keybind\f[B]\f[R]
Key bindings.
The format is \f[CR]trigger=action\f[R].
Duplicate triggers will overwrite previously set values.
The list of actions is available in the documentation or using the
\f[CR]ghostty +list\-actions\f[R] command.
.RS
.PP
Trigger: \f[CR]+\f[R]\-separated list of keys and modifiers.
Example: \f[CR]ctrl+a\f[R], \f[CR]ctrl+shift+b\f[R], \f[CR]up\f[R].
Some notes:
.IP \[bu] 2
modifiers cannot repeat, \f[CR]ctrl+ctrl+a\f[R] is invalid.
.IP \[bu] 2
modifiers and keys can be in any order, \f[CR]shift+a+ctrl\f[R] is
\f[I]weird\f[R], but valid.
.IP \[bu] 2
only a single key input is allowed, \f[CR]ctrl+a+b\f[R] is invalid.
.IP \[bu] 2
the key input can be prefixed with \f[CR]physical:\f[R] to specify a
physical key mapping rather than a logical one.
A physical key mapping responds to the hardware keycode and not the
keycode translated by any system keyboard layouts.
Example: \[lq]ctrl+physical:a\[rq]
.PP
Valid modifiers are \f[CR]shift\f[R], \f[CR]ctrl\f[R] (alias:
\f[CR]control\f[R]), \f[CR]alt\f[R] (alias: \f[CR]opt\f[R],
\f[CR]option\f[R]), and \f[CR]super\f[R] (alias: \f[CR]cmd\f[R],
\f[CR]command\f[R]).
You may use the modifier or the alias.
When debugging keybinds, the non\-aliased modifier will always be used
in output.
.PP
Note: The fn or \[lq]globe\[rq] key on keyboards are not supported as a
modifier.
This is a limitation of the operating systems and GUI toolkits that
Ghostty uses.
.PP
You may also specify multiple triggers separated by \f[CR]>\f[R] to
require a sequence of triggers to activate the action.
For example, \f[CR]ctrl+a>n=new_window\f[R] will only trigger the
\f[CR]new_window\f[R] action if the user presses \f[CR]ctrl+a\f[R]
followed separately by \f[CR]n\f[R].
In other software, this is sometimes called a leader key, a key chord, a
key table, etc.
There is no hardcoded limit on the number of parts in a sequence.
.PP
Warning: If you define a sequence as a CLI argument to
\f[CR]ghostty\f[R], you probably have to quote the keybind since
\f[CR]>\f[R] is a special character in most shells.
Example: ghostty \[en]keybind=`ctrl+a>n=new_window'
.PP
A trigger sequence has some special handling:
.IP \[bu] 2
Ghostty will wait an indefinite amount of time for the next key in the
sequence.
There is no way to specify a timeout.
The only way to force the output of a prefix key is to assign another
keybind to specifically output that key
(i.e.\ \f[CR]ctrl+a>ctrl+a=text:foo\f[R]) or press an unbound key which
will send both keys to the program.
.IP \[bu] 2
If a prefix in a sequence is previously bound, the sequence will
override the previous binding.
For example, if \f[CR]ctrl+a\f[R] is bound to \f[CR]new_window\f[R] and
\f[CR]ctrl+a>n\f[R] is bound to \f[CR]new_tab\f[R], pressing
\f[CR]ctrl+a\f[R] will do nothing.
.IP \[bu] 2
Adding to the above, if a previously bound sequence prefix is used in a
new, non\-sequence binding, the entire previously bound sequence will be
unbound.
For example, if you bind \f[CR]ctrl+a>n\f[R] and \f[CR]ctrl+a>t\f[R],
and then bind \f[CR]ctrl+a\f[R] directly, both \f[CR]ctrl+a>n\f[R] and
\f[CR]ctrl+a>t\f[R] will become unbound.
.IP \[bu] 2
Trigger sequences are not allowed for \f[CR]global:\f[R] or
\f[CR]all:\f[R]\-prefixed triggers.
This is a limitation we could remove in the future.
.PP
Action is the action to take when the trigger is satisfied.
It takes the format \f[CR]action\f[R] or \f[CR]action:param\f[R].
The latter form is only valid if the action requires a parameter.
.IP \[bu] 2
\f[CR]ignore\f[R] \- Do nothing, ignore the key input.
This can be used to black hole certain inputs to have no effect.
.IP \[bu] 2
\f[CR]unbind\f[R] \- Remove the binding.
This makes it so the previous action is removed, and the key will be
sent through to the child command if it is printable.
.IP \[bu] 2
\f[CR]csi:text\f[R] \- Send a CSI sequence.
i.e.\ \f[CR]csi:A\f[R] sends \[lq]cursor up\[rq].
.IP \[bu] 2
\f[CR]esc:text\f[R] \- Send an escape sequence.
i.e.\ \f[CR]esc:d\f[R] deletes to the end of the word to the right.
.IP \[bu] 2
\f[CR]text:text\f[R] \- Send a string.
Uses Zig string literal syntax.
i.e.\ \f[CR]text:\[rs]x15\f[R] sends Ctrl\-U.
.IP \[bu] 2
All other actions can be found in the documentation or by using the
\f[CR]ghostty +list\-actions\f[R] command.
.PP
Some notes for the action:
.IP \[bu] 2
The parameter is taken as\-is after the \f[CR]:\f[R].
Double quotes or other mechanisms are included and NOT parsed.
If you want to send a string value that includes spaces, wrap the entire
trigger/action in double quotes.
Example: \f[CR]\-\-keybind=\[dq]up=csi:A B\[dq]\f[R]
.PP
There are some additional special values that can be specified for
keybind:
.IP \[bu] 2
\f[CR]keybind=clear\f[R] will clear all set keybindings.
Warning: this removes ALL keybindings up to this point, including the
default keybindings.
.PP
The keybind trigger can be prefixed with some special values to change
the behavior of the keybind.
These are:
.IP \[bu] 2
\f[CR]all:\f[R] \- Make the keybind apply to all terminal surfaces.
By default, keybinds only apply to the focused terminal surface.
If this is true, then the keybind will be sent to all terminal surfaces.
This only applies to actions that are surface\-specific.
For actions that are already global (i.e.\ \f[CR]quit\f[R]), this prefix
has no effect.
.IP \[bu] 2
\f[CR]global:\f[R] \- Make the keybind global.
By default, keybinds only work within Ghostty and under the right
conditions (application focused, sometimes terminal focused, etc.).
If you want a keybind to work globally across your system (i.e.\ even
when Ghostty is not focused), specify this prefix.
This prefix implies \f[CR]all:\f[R].
Note: this does not work in all environments; see the additional notes
below for more information.
.IP \[bu] 2
\f[CR]unconsumed:\f[R] \- Do not consume the input.
By default, a keybind will consume the input, meaning that the
associated encoding (if any) will not be sent to the running program in
the terminal.
If you wish to send the encoded value to the program, specify the
\f[CR]unconsumed:\f[R] prefix before the entire keybind.
For example: \f[CR]unconsumed:ctrl+a=reload_config\f[R].
\f[CR]global:\f[R] and \f[CR]all:\f[R]\-prefixed keybinds will always
consume the input regardless of this setting.
Since they are not associated with a specific terminal surface,
they\[cq]re never encoded.
.PP
Keybind triggers are not unique per prefix combination.
For example, \f[CR]ctrl+a\f[R] and \f[CR]global:ctrl+a\f[R] are not two
separate keybinds.
The keybind set later will overwrite the keybind set earlier.
In this case, the \f[CR]global:\f[R] keybind will be used.
.PP
Multiple prefixes can be specified.
For example, \f[CR]global:unconsumed:ctrl+a=reload_config\f[R] will make
the keybind global and not consume the input to reload the config.
.PP
Note: \f[CR]global:\f[R] is only supported on macOS.
On macOS, this feature requires accessibility permissions to be granted
to Ghostty.
When a \f[CR]global:\f[R] keybind is specified and Ghostty is launched
or reloaded, Ghostty will attempt to request these permissions.
If the permissions are not granted, the keybind will not work.
On macOS, you can find these permissions in System Preferences \->
Privacy & Security \-> Accessibility.
.RE
.TP
\f[B]\f[CB]\-\-window\-padding\-x\f[B]\f[R]
Horizontal window padding.
This applies padding between the terminal cells and the left and right
window borders.
The value is in points, meaning that it will be scaled appropriately for
screen DPI.
.RS
.PP
If this value is set too large, the screen will render nothing, because
the grid will be completely squished by the padding.
It is up to you as the user to pick a reasonable value.
If you pick an unreasonable value, a warning will appear in the logs.
.PP
Changing this configuration at runtime will only affect new terminals,
i.e.
new windows, tabs, etc.
.PP
To set a different left and right padding, specify two numerical values
separated by a comma.
For example, \f[CR]window\-padding\-x = 2,4\f[R] will set the left
padding to 2 and the right padding to 4.
If you want to set both paddings to the same value, you can use a single
value.
For example, \f[CR]window\-padding\-x = 2\f[R] will set both paddings to
2.
.RE
.TP
\f[B]\f[CB]\-\-window\-padding\-y\f[B]\f[R]
Vertical window padding.
This applies padding between the terminal cells and the top and bottom
window borders.
The value is in points, meaning that it will be scaled appropriately for
screen DPI.
.RS
.PP
If this value is set too large, the screen will render nothing, because
the grid will be completely squished by the padding.
It is up to you as the user to pick a reasonable value.
If you pick an unreasonable value, a warning will appear in the logs.
.PP
Changing this configuration at runtime will only affect new terminals,
i.e.\ new windows, tabs, etc.
.PP
To set a different top and bottom padding, specify two numerical values
separated by a comma.
For example, \f[CR]window\-padding\-y = 2,4\f[R] will set the top
padding to 2 and the bottom padding to 4.
If you want to set both paddings to the same value, you can use a single
value.
For example, \f[CR]window\-padding\-y = 2\f[R] will set both paddings to
2.
.RE
.TP
\f[B]\f[CB]\-\-window\-padding\-balance\f[B]\f[R]
The viewport dimensions are usually not perfectly divisible by the cell
size.
In this case, some extra padding on the end of a column and the bottom
of the final row may exist.
If this is \f[CR]true\f[R], then this extra padding is automatically
balanced between all four edges to minimize imbalance on one side.
If this is \f[CR]false\f[R], the top left grid cell will always hug the
edge with zero padding other than what may be specified with the other
\f[CR]window\-padding\f[R] options.
.RS
.PP
If other \f[CR]window\-padding\f[R] fields are set and this is
\f[CR]true\f[R], this will still apply.
The other padding is applied first and may affect how many grid cells
actually exist, and this is applied last in order to balance the padding
given a certain viewport size and grid cell size.
.RE
.TP
\f[B]\f[CB]\-\-window\-padding\-color\f[B]\f[R]
The color of the padding area of the window.
Valid values are:
.RS
.IP \[bu] 2
\f[CR]background\f[R] \- The background color specified in
\f[CR]background\f[R].
.IP \[bu] 2
\f[CR]extend\f[R] \- Extend the background color of the nearest grid
cell.
.IP \[bu] 2
\f[CR]extend\-always\f[R] \- Same as \[lq]extend\[rq] but always extends
without applying any of the heuristics that disable extending noted
below.
.PP
The \[lq]extend\[rq] value will be disabled in certain scenarios.
On primary screen applications (i.e.\ not something like Neovim), the
color will not be extended vertically if any of the following are true:
.IP \[bu] 2
The nearest row has any cells that have the default background color.
The thinking is that in this case, the default background color looks
fine as a padding color.
.IP \[bu] 2
The nearest row is a prompt row (requires shell integration).
The thinking here is that prompts often contain powerline glyphs that do
not look good extended.
.IP \[bu] 2
The nearest row contains a perfect fit powerline character.
These don\[cq]t look good extended.
.RE
.TP
\f[B]\f[CB]\-\-window\-vsync\f[B]\f[R]
Synchronize rendering with the screen refresh rate.
If true, this will minimize tearing and align redraws with the screen
but may cause input latency.
If false, this will maximize redraw frequency but may cause tearing, and
under heavy load may use more CPU and power.
.RS
.PP
This defaults to true because out\-of\-sync rendering on macOS can cause
kernel panics (macOS 14.4+) and performance issues for external displays
over some hardware such as DisplayLink.
If you want to minimize input latency, set this to false with the known
aforementioned risks.
.PP
Changing this value at runtime will only affect new terminals.
.PP
This setting is only supported currently on macOS.
.RE
.TP
\f[B]\f[CB]\-\-window\-inherit\-working\-directory\f[B]\f[R]
If true, new windows and tabs will inherit the working directory of the
previously focused window.
If no window was previously focused, the default working directory will
be used (the \f[CR]working\-directory\f[R] option).
.TP
\f[B]\f[CB]\-\-window\-inherit\-font\-size\f[B]\f[R]
If true, new windows and tabs will inherit the font size of the
previously focused window.
If no window was previously focused, the default font size will be used.
If this is false, the default font size specified in the configuration
\f[CR]font\-size\f[R] will be used.
.TP
\f[B]\f[CB]\-\-window\-decoration\f[B]\f[R]
Valid values:
.RS
.IP \[bu] 2
\f[CR]true\f[R]
.IP \[bu] 2
\f[CR]false\f[R] \- windows won\[cq]t have native decorations,
i.e.\ titlebar and borders.
On macOS this also disables tabs and tab overview.
.PP
The \[lq]toggle_window_decorations\[rq] keybind action can be used to
create a keybinding to toggle this setting at runtime.
.PP
Changing this configuration in your configuration and reloading will
only affect new windows.
Existing windows will not be affected.
.PP
macOS: To hide the titlebar without removing the native window borders
or rounded corners, use \f[CR]macos\-titlebar\-style = hidden\f[R]
instead.
.RE
.TP
\f[B]\f[CB]\-\-window\-title\-font\-family\f[B]\f[R]
The font that will be used for the application\[cq]s window and tab
titles.
.RS
.PP
This is currently only supported on macOS.
.RE
.TP
\f[B]\f[CB]\-\-window\-theme\f[B]\f[R]
The theme to use for the windows.
Valid values:
.RS
.IP \[bu] 2
\f[CR]auto\f[R] \- Determine the theme based on the configured terminal
background color.
This has no effect if the \[lq]theme\[rq] configuration has separate
light and dark themes.
In that case, the behavior of \[lq]auto\[rq] is equivalent to
\[lq]system\[rq].
.IP \[bu] 2
\f[CR]system\f[R] \- Use the system theme.
.IP \[bu] 2
\f[CR]light\f[R] \- Use the light theme regardless of system theme.
.IP \[bu] 2
\f[CR]dark\f[R] \- Use the dark theme regardless of system theme.
.IP \[bu] 2
\f[CR]ghostty\f[R] \- Use the background and foreground colors specified
in the Ghostty configuration.
This is only supported on Linux builds with Adwaita and
\f[CR]gtk\-adwaita\f[R] enabled.
.PP
On macOS, if \f[CR]macos\-titlebar\-style\f[R] is \[lq]tabs\[rq], the
window theme will be automatically set based on the luminosity of the
terminal background color.
This only applies to terminal windows.
This setting will still apply to non\-terminal windows within Ghostty.
.PP
This is currently only supported on macOS and Linux.
.RE
.TP
\f[B]\f[CB]\-\-window\-colorspace\f[B]\f[R]
The colorspace to use for the terminal window.
The default is \f[CR]srgb\f[R] but this can also be set to
\f[CR]display\-p3\f[R] to use the Display P3 colorspace.
.RS
.PP
Changing this value at runtime will only affect new windows.
.PP
This setting is only supported on macOS.
.RE
.TP
\f[B]\f[CB]\-\-window\-height\f[B]\f[R]
The initial window size.
This size is in terminal grid cells by default.
Both values must be set to take effect.
If only one value is set, it is ignored.
.RS
.PP
We don\[cq]t currently support specifying a size in pixels but a future
change can enable that.
If this isn\[cq]t specified, the app runtime will determine some default
size.
.PP
Note that the window manager may put limits on the size or override the
size.
For example, a tiling window manager may force the window to be a
certain size to fit within the grid.
There is nothing Ghostty will do about this, but it will make an effort.
.PP
Sizes larger than the screen size will be clamped to the screen size.
This can be used to create a maximized\-by\-default window size.
.PP
This will not affect new tabs, splits, or other nested terminal
elements.
This only affects the initial window size of any new window.
Changing this value will not affect the size of the window after it has
been created.
This is only used for the initial size.
.PP
BUG: On Linux with GTK, the calculated window size will not properly
take into account window decorations.
As a result, the grid dimensions will not exactly match this
configuration.
If window decorations are disabled (see window\-decorations), then this
will work as expected.
.PP
Windows smaller than 10 wide by 4 high are not allowed.
.RE
.PP
\f[B]\f[CB]\-\-window\-width\f[B]\f[R]
.TP
\f[B]\f[CB]\-\-window\-save\-state\f[B]\f[R]
Whether to enable saving and restoring window state.
Window state includes their position, size, tabs, splits, etc.
Some window state requires shell integration, such as preserving working
directories.
See \f[CR]shell\-integration\f[R] for more information.
.RS
.PP
There are three valid values for this configuration:
.IP \[bu] 2
\f[CR]default\f[R] will use the default system behavior.
On macOS, this will only save state if the application is forcibly
terminated or if it is configured systemwide via Settings.app.
.IP \[bu] 2
\f[CR]never\f[R] will never save window state.
.IP \[bu] 2
\f[CR]always\f[R] will always save window state whenever Ghostty is
exited.
.PP
If you change this value to \f[CR]never\f[R] while Ghostty is not
running, the next Ghostty launch will NOT restore the window state.
.PP
If you change this value to \f[CR]default\f[R] while Ghostty is not
running and the previous exit saved state, the next Ghostty launch will
still restore the window state.
This is because Ghostty cannot know if the previous exit was due to a
forced save or not (macOS doesn\[cq]t provide this information).
.PP
If you change this value so that window state is saved while Ghostty is
not running, the previous window state will not be restored because
Ghostty only saves state on exit if this is enabled.
.PP
The default value is \f[CR]default\f[R].
.PP
This is currently only supported on macOS.
This has no effect on Linux.
.RE
.TP
\f[B]\f[CB]\-\-window\-step\-resize\f[B]\f[R]
Resize the window in discrete increments of the focused surface\[cq]s
cell size.
If this is disabled, surfaces are resized in pixel increments.
Currently only supported on macOS.
.TP
\f[B]\f[CB]\-\-window\-new\-tab\-position\f[B]\f[R]
The position where new tabs are created.
Valid values:
.RS
.IP \[bu] 2
\f[CR]current\f[R] \- Insert the new tab after the currently focused
tab, or at the end if there are no focused tabs.
.IP \[bu] 2
\f[CR]end\f[R] \- Insert the new tab at the end of the tab list.
.RE
.TP
\f[B]\f[CB]\-\-resize\-overlay\f[B]\f[R]
This controls when resize overlays are shown.
Resize overlays are a transient popup that shows the size of the
terminal while the surfaces are being resized.
The possible options are:
.RS
.IP \[bu] 2
\f[CR]always\f[R] \- Always show resize overlays.
.IP \[bu] 2
\f[CR]never\f[R] \- Never show resize overlays.
.IP \[bu] 2
\f[CR]after\-first\f[R] \- The resize overlay will not appear when the
surface is first created, but will show up if the surface is
subsequently resized.
.PP
The default is \f[CR]after\-first\f[R].
.RE
.TP
\f[B]\f[CB]\-\-resize\-overlay\-position\f[B]\f[R]
If resize overlays are enabled, this controls the position of the
overlay.
The possible options are:
.RS
.IP \[bu] 2
\f[CR]center\f[R]
.IP \[bu] 2
\f[CR]top\-left\f[R]
.IP \[bu] 2
\f[CR]top\-center\f[R]
.IP \[bu] 2
\f[CR]top\-right\f[R]
.IP \[bu] 2
\f[CR]bottom\-left\f[R]
.IP \[bu] 2
\f[CR]bottom\-center\f[R]
.IP \[bu] 2
\f[CR]bottom\-right\f[R]
.PP
The default is \f[CR]center\f[R].
.RE
.TP
\f[B]\f[CB]\-\-resize\-overlay\-duration\f[B]\f[R]
If resize overlays are enabled, this controls how long the overlay is
visible on the screen before it is hidden.
The default is ¾ of a second or 750 ms.
.RS
.PP
The duration is specified as a series of numbers followed by time units.
Whitespace is allowed between numbers and units.
Each number and unit will be added together to form the total duration.
.PP
The allowed time units are as follows:
.IP \[bu] 2
\f[CR]y\f[R] \- 365 SI days, or 8760 hours, or 31536000 seconds.
No adjustments are made for leap years or leap seconds.
.IP \[bu] 2
\f[CR]d\f[R] \- one SI day, or 86400 seconds.
.IP \[bu] 2
\f[CR]h\f[R] \- one hour, or 3600 seconds.
.IP \[bu] 2
\f[CR]m\f[R] \- one minute, or 60 seconds.
.IP \[bu] 2
\f[CR]s\f[R] \- one second.
.IP \[bu] 2
\f[CR]ms\f[R] \- one millisecond, or 0.001 second.
.IP \[bu] 2
\f[CR]us\f[R] or \f[CR]µs\f[R] \- one microsecond, or 0.000001 second.
.IP \[bu] 2
\f[CR]ns\f[R] \- one nanosecond, or 0.000000001 second.
.PP
Examples: * \f[CR]1h30m\f[R] * \f[CR]45s\f[R]
.PP
Units can be repeated and will be added together.
This means that \f[CR]1h1h\f[R] is equivalent to \f[CR]2h\f[R].
This is confusing and should be avoided.
A future update may disallow this.
.PP
The maximum value is \f[CR]584y 49w 23h 34m 33s 709ms 551µs 615ns\f[R].
Any value larger than this will be clamped to the maximum value.
.RE
.PP
\f[B]\f[CB]\-\-focus\-follows\-mouse\f[B]\f[R]
.TP
\f[B]\f[CB]\-\-clipboard\-read\f[B]\f[R]
Whether to allow programs running in the terminal to read/write to the
system clipboard (OSC 52, for googling).
The default is to allow clipboard reading after prompting the user and
allow writing unconditionally.
.RS
.PP
Valid values are:
.IP \[bu] 2
\f[CR]ask\f[R]
.IP \[bu] 2
\f[CR]allow\f[R]
.IP \[bu] 2
\f[CR]deny\f[R]
.RE
.PP
\f[B]\f[CB]\-\-clipboard\-write\f[B]\f[R]
.TP
\f[B]\f[CB]\-\-clipboard\-trim\-trailing\-spaces\f[B]\f[R]
Trims trailing whitespace on data that is copied to the clipboard.
This does not affect data sent to the clipboard via
\f[CR]clipboard\-write\f[R].
.TP
\f[B]\f[CB]\-\-clipboard\-paste\-protection\f[B]\f[R]
Require confirmation before pasting text that appears unsafe.
This helps prevent a \[lq]copy/paste attack\[rq] where a user may
accidentally execute unsafe commands by pasting text with newlines.
.TP
\f[B]\f[CB]\-\-clipboard\-paste\-bracketed\-safe\f[B]\f[R]
If true, bracketed pastes will be considered safe.
By default, bracketed pastes are considered safe.
\[lq]Bracketed\[rq] pastes are pastes while the running program has
bracketed paste mode enabled (a setting set by the running program, not
the terminal emulator).
.TP
\f[B]\f[CB]\-\-image\-storage\-limit\f[B]\f[R]
The total amount of bytes that can be used for image data (i.e.\ the
Kitty image protocol) per terminal screen.
The maximum value is 4,294,967,295 (4GiB).
The default is 320MB.
If this is set to zero, then all image protocols will be disabled.
.RS
.PP
This value is separate for primary and alternate screens so the
effective limit per surface is double.
.RE
.TP
\f[B]\f[CB]\-\-copy\-on\-select\f[B]\f[R]
Whether to automatically copy selected text to the clipboard.
\f[CR]true\f[R] will prefer to copy to the selection clipboard if
supported by the OS, otherwise it will copy to the system clipboard.
.RS
.PP
The value \f[CR]clipboard\f[R] will always copy text to the selection
clipboard (for supported systems) as well as the system clipboard.
This is sometimes a preferred behavior on Linux.
.PP
Middle\-click paste will always use the selection clipboard on Linux and
the system clipboard on macOS.
Middle\-click paste is always enabled even if this is \f[CR]false\f[R].
.PP
The default value is true on Linux and false on macOS.
macOS copy on select behavior is not typical for applications so it is
disabled by default.
On Linux, this is a standard behavior so it is enabled by default.
.RE
.TP
\f[B]\f[CB]\-\-click\-repeat\-interval\f[B]\f[R]
The time in milliseconds between clicks to consider a click a repeat
(double, triple, etc.)
or an entirely new single click.
A value of zero will use a platform\-specific default.
The default on macOS is determined by the OS settings.
On every other platform it is 500ms.
.TP
\f[B]\f[CB]\-\-config\-file\f[B]\f[R]
Additional configuration files to read.
This configuration can be repeated to read multiple configuration files.
Configuration files themselves can load more configuration files.
Paths are relative to the file containing the \f[CR]config\-file\f[R]
directive.
For command\-line arguments, paths are relative to the current working
directory.
.RS
.PP
Prepend a ?
character to the file path to suppress errors if the file does not
exist.
If you want to include a file that begins with a literal ?
character, surround the file path in double quotes (\[lq]).
.PP
Cycles are not allowed.
If a cycle is detected, an error will be logged and the configuration
file will be ignored.
.PP
Configuration files are loaded after the configuration they\[cq]re
defined within in the order they\[cq]re defined.
\f[B]THIS IS A VERY SUBTLE BUT IMPORTANT POINT.\f[R] To put it another
way: configuration files do not take effect until after the entire
configuration is loaded.
For example, in the configuration below:
.IP
.EX
config\-file = \[dq]foo\[dq]
a = 1
.EE
.PP
If \[lq]foo\[rq] contains \f[CR]a = 2\f[R], the final value of
\f[CR]a\f[R] will be 2, because \f[CR]foo\f[R] is loaded after the
configuration file that configures the nested \f[CR]config\-file\f[R]
value.
.RE
.TP
\f[B]\f[CB]\-\-config\-default\-files\f[B]\f[R]
When this is true, the default configuration file paths will be loaded.
The default configuration file paths are currently only the XDG config
path ($XDG_CONFIG_HOME/ghostty/config).
.RS
.PP
If this is false, the default configuration paths will not be loaded.
This is targeted directly at using Ghostty from the CLI in a way that
minimizes external effects.
.PP
This is a CLI\-only configuration.
Setting this in a configuration file will have no effect.
It is not an error, but it will not do anything.
This configuration can only be set via CLI arguments.
.RE
.TP
\f[B]\f[CB]\-\-confirm\-close\-surface\f[B]\f[R]
Confirms that a surface should be closed before closing it.
This defaults to true.
If set to false, surfaces will close without any confirmation.
.TP
\f[B]\f[CB]\-\-quit\-after\-last\-window\-closed\f[B]\f[R]
Whether or not to quit after the last surface is closed.
.RS
.PP
This defaults to \f[CR]false\f[R] on macOS since that is standard
behavior for a macOS application.
On Linux, this defaults to \f[CR]true\f[R] since that is generally
expected behavior.
.PP
On Linux, if this is \f[CR]true\f[R], Ghostty can delay quitting fully
until a configurable amount of time has passed after the last window is
closed.
See the documentation of
\f[CR]quit\-after\-last\-window\-closed\-delay\f[R].
.RE
.TP
\f[B]\f[CB]\-\-quit\-after\-last\-window\-closed\-delay\f[B]\f[R]
Controls how long Ghostty will stay running after the last open surface
has been closed.
This only has an effect if \f[CR]quit\-after\-last\-window\-closed\f[R]
is also set to \f[CR]true\f[R].
.RS
.PP
The minimum value for this configuration is \f[CR]1s\f[R].
Any values lower than this will be clamped to \f[CR]1s\f[R].
.PP
The duration is specified as a series of numbers followed by time units.
Whitespace is allowed between numbers and units.
Each number and unit will be added together to form the total duration.
.PP
The allowed time units are as follows:
.IP \[bu] 2
\f[CR]y\f[R] \- 365 SI days, or 8760 hours, or 31536000 seconds.
No adjustments are made for leap years or leap seconds.
.IP \[bu] 2
\f[CR]d\f[R] \- one SI day, or 86400 seconds.
.IP \[bu] 2
\f[CR]h\f[R] \- one hour, or 3600 seconds.
.IP \[bu] 2
\f[CR]m\f[R] \- one minute, or 60 seconds.
.IP \[bu] 2
\f[CR]s\f[R] \- one second.
.IP \[bu] 2
\f[CR]ms\f[R] \- one millisecond, or 0.001 second.
.IP \[bu] 2
\f[CR]us\f[R] or \f[CR]µs\f[R] \- one microsecond, or 0.000001 second.
.IP \[bu] 2
\f[CR]ns\f[R] \- one nanosecond, or 0.000000001 second.
.PP
Examples: * \f[CR]1h30m\f[R] * \f[CR]45s\f[R]
.PP
Units can be repeated and will be added together.
This means that \f[CR]1h1h\f[R] is equivalent to \f[CR]2h\f[R].
This is confusing and should be avoided.
A future update may disallow this.
.PP
The maximum value is \f[CR]584y 49w 23h 34m 33s 709ms 551µs 615ns\f[R].
Any value larger than this will be clamped to the maximum value.
.PP
By default \f[CR]quit\-after\-last\-window\-closed\-delay\f[R] is unset
and Ghostty will quit immediately after the last window is closed if
\f[CR]quit\-after\-last\-window\-closed\f[R] is \f[CR]true\f[R].
.PP
Only implemented on Linux.
.RE
.TP
\f[B]\f[CB]\-\-initial\-window\f[B]\f[R]
This controls whether an initial window is created when Ghostty is run.
Note that if \f[CR]quit\-after\-last\-window\-closed\f[R] is
\f[CR]true\f[R] and \f[CR]quit\-after\-last\-window\-closed\-delay\f[R]
is set, setting \f[CR]initial\-window\f[R] to \f[CR]false\f[R] will mean
that Ghostty will quit after the configured delay if no window is ever
created.
Only implemented on Linux and macOS.
.TP
\f[B]\f[CB]\-\-quick\-terminal\-position\f[B]\f[R]
The position of the \[lq]quick\[rq] terminal window.
To learn more about the quick terminal, see the documentation for the
\f[CR]toggle_quick_terminal\f[R] binding action.
.RS
.PP
Valid values are:
.IP \[bu] 2
\f[CR]top\f[R] \- Terminal appears at the top of the screen.
.IP \[bu] 2
\f[CR]bottom\f[R] \- Terminal appears at the bottom of the screen.
.IP \[bu] 2
\f[CR]left\f[R] \- Terminal appears at the left of the screen.
.IP \[bu] 2
\f[CR]right\f[R] \- Terminal appears at the right of the screen.
.PP
Changing this configuration requires restarting Ghostty completely.
.RE
.TP
\f[B]\f[CB]\-\-quick\-terminal\-screen\f[B]\f[R]
The screen where the quick terminal should show up.
.RS
.PP
Valid values are:
.IP \[bu] 2
\f[CR]main\f[R] \- The screen that the operating system recommends as
the main screen.
On macOS, this is the screen that is currently receiving keyboard input.
This screen is defined by the operating system and not chosen by
Ghostty.
.IP \[bu] 2
\f[CR]mouse\f[R] \- The screen that the mouse is currently hovered over.
.IP \[bu] 2
\f[CR]macos\-menu\-bar\f[R] \- The screen that contains the macOS menu
bar as set in the display settings on macOS.
This is a bit confusing because every screen on macOS has a menu bar,
but this is the screen that contains the primary menu bar.
.PP
The default value is \f[CR]main\f[R] because this is the recommended
screen by the operating system.
.RE
.TP
\f[B]\f[CB]\-\-quick\-terminal\-animation\-duration\f[B]\f[R]
Duration (in seconds) of the quick terminal enter and exit animation.
Set it to 0 to disable animation completely.
This can be changed at runtime.
.TP
\f[B]\f[CB]\-\-shell\-integration\f[B]\f[R]
Whether to enable shell integration auto\-injection or not.
Shell integration greatly enhances the terminal experience by enabling a
number of features:
.RS
.IP \[bu] 2
Working directory reporting so new tabs, splits inherit the previous
terminal\[cq]s working directory.
.IP \[bu] 2
Prompt marking that enables the \[lq]jump_to_prompt\[rq] keybinding.
.IP \[bu] 2
If you\[cq]re sitting at a prompt, closing a terminal will not ask for
confirmation.
.IP \[bu] 2
Resizing the window with a complex prompt usually paints much better.
.PP
Allowable values are:
.IP \[bu] 2
\f[CR]none\f[R] \- Do not do any automatic injection.
You can still manually configure your shell to enable the integration.
.IP \[bu] 2
\f[CR]detect\f[R] \- Detect the shell based on the filename.
.IP \[bu] 2
\f[CR]bash\f[R], \f[CR]elvish\f[R], \f[CR]fish\f[R], \f[CR]zsh\f[R] \-
Use this specific shell injection scheme.
.PP
The default value is \f[CR]detect\f[R].
.RE
.TP
\f[B]\f[CB]\-\-shell\-integration\-features\f[B]\f[R]
Shell integration features to enable if shell integration itself is
enabled.
The format of this is a list of features to enable separated by commas.
If you prefix a feature with \f[CR]no\-\f[R] then it is disabled.
If you omit a feature, its default value is used, so you must explicitly
disable features you don\[cq]t want.
You can also use \f[CR]true\f[R] or \f[CR]false\f[R] to turn all
features on or off.
.RS
.PP
Available features:
.IP \[bu] 2
\f[CR]cursor\f[R] \- Set the cursor to a blinking bar at the prompt.
.IP \[bu] 2
\f[CR]sudo\f[R] \- Set sudo wrapper to preserve terminfo.
.IP \[bu] 2
\f[CR]title\f[R] \- Set the window title via shell integration.
.PP
Example: \f[CR]cursor\f[R], \f[CR]no\-cursor\f[R], \f[CR]sudo\f[R],
\f[CR]no\-sudo\f[R], \f[CR]title\f[R], \f[CR]no\-title\f[R]
.RE
.TP
\f[B]\f[CB]\-\-osc\-color\-report\-format\f[B]\f[R]
Sets the reporting format for OSC sequences that request color
information.
Ghostty currently supports OSC 10 (foreground), OSC 11 (background), and
OSC 4 (256 color palette) queries, and by default the reported values
are scaled\-up RGB values, where each component are 16 bits.
This is how most terminals report these values.
However, some legacy applications may require 8\-bit, unscaled,
components.
We also support turning off reporting altogether.
The components are lowercase hex values.
.RS
.PP
Allowable values are:
.IP \[bu] 2
\f[CR]none\f[R] \- OSC 4/10/11 queries receive no reply
.IP \[bu] 2
\f[CR]8\-bit\f[R] \- Color components are return unscaled,
i.e.\ \f[CR]rr/gg/bb\f[R]
.IP \[bu] 2
\f[CR]16\-bit\f[R] \- Color components are returned scaled,
e.g.\ \f[CR]rrrr/gggg/bbbb\f[R]
.PP
The default value is \f[CR]16\-bit\f[R].
.RE
.TP
\f[B]\f[CB]\-\-vt\-kam\-allowed\f[B]\f[R]
If true, allows the \[lq]KAM\[rq] mode (ANSI mode 2) to be used within
the terminal.
KAM disables keyboard input at the request of the application.
This is not a common feature and is not recommended to be enabled.
This will not be documented further because if you know you need KAM,
you know.
If you don\[cq]t know if you need KAM, you don\[cq]t need it.
.TP
\f[B]\f[CB]\-\-custom\-shader\f[B]\f[R]
Custom shaders to run after the default shaders.
This is a file path to a GLSL\-syntax shader for all platforms.
.RS
.PP
Warning: Invalid shaders can cause Ghostty to become unusable such as by
causing the window to be completely black.
If this happens, you can unset this configuration to disable the shader.
.PP
On Linux, this requires OpenGL 4.2.
Ghostty typically only requires OpenGL 3.3, but custom shaders push that
requirement up to 4.2.
.PP
The shader API is identical to the Shadertoy API: you specify a
\f[CR]mainImage\f[R] function and the available uniforms match
Shadertoy.
The iChannel0 uniform is a texture containing the rendered terminal
screen.
.PP
If the shader fails to compile, the shader will be ignored.
Any errors related to shader compilation will not show up as
configuration errors and only show up in the log, since shader
compilation happens after configuration loading on the dedicated render
thread.
For interactive development, use \c
.UR https://shadertoy.com
shadertoy.com
.UE \c
\&.
.PP
This can be repeated multiple times to load multiple shaders.
The shaders will be run in the order they are specified.
.PP
Changing this value at runtime and reloading the configuration will only
affect new windows, tabs, and splits.
.RE
.TP
\f[B]\f[CB]\-\-custom\-shader\-animation\f[B]\f[R]
If \f[CR]true\f[R] (default), the focused terminal surface will run an
animation loop when custom shaders are used.
This uses slightly more CPU (generally less than 10%) but allows the
shader to animate.
This only runs if there are custom shaders and the terminal is focused.
.RS
.PP
If this is set to \f[CR]false\f[R], the terminal and custom shader will
only render when the terminal is updated.
This is more efficient but the shader will not animate.
.PP
This can also be set to \f[CR]always\f[R], which will always run the
animation loop regardless of whether the terminal is focused or not.
The animation loop will still only run when custom shaders are used.
Note that this will use more CPU per terminal surface and can become
quite expensive depending on the shader and your terminal usage.
.PP
This value can be changed at runtime and will affect all currently open
terminals.
.RE
.TP
\f[B]\f[CB]\-\-macos\-non\-native\-fullscreen\f[B]\f[R]
If anything other than false, fullscreen mode on macOS will not use the
native fullscreen, but make the window fullscreen without animations and
using a new space.
It\[cq]s faster than the native fullscreen mode since it doesn\[cq]t use
animations.
.RS
.PP
Important: tabs DO NOT WORK in this mode.
Non\-native fullscreen removes the titlebar and macOS native tabs
require the titlebar.
If you use tabs, you should not use this mode.
.PP
If you fullscreen a window with tabs, the currently focused tab will
become fullscreen while the others will remain in a separate window in
the background.
You can switch to that window using normal window\-switching keybindings
such as command+tilde.
When you exit fullscreen, the window will return to the tabbed state it
was in before.
.PP
Allowable values are:
.IP \[bu] 2
\f[CR]visible\-menu\f[R] \- Use non\-native macOS fullscreen, keep the
menu bar visible
.IP \[bu] 2
\f[CR]true\f[R] \- Use non\-native macOS fullscreen, hide the menu bar
.IP \[bu] 2
\f[CR]false\f[R] \- Use native macOS fullscreen
.PP
Changing this option at runtime works, but will only apply to the next
time the window is made fullscreen.
If a window is already fullscreen, it will retain the previous setting
until fullscreen is exited.
.RE
.TP
\f[B]\f[CB]\-\-macos\-titlebar\-style\f[B]\f[R]
The style of the macOS titlebar.
Available values are: \[lq]native\[rq], \[lq]transparent\[rq],
\[lq]tabs\[rq], and \[lq]hidden\[rq].
.RS
.PP
The \[lq]native\[rq] style uses the native macOS titlebar with zero
customization.
The titlebar will match your window theme (see
\f[CR]window\-theme\f[R]).
.PP
The \[lq]transparent\[rq] style is the same as \[lq]native\[rq] but the
titlebar will be transparent and allow your window background color to
come through.
This makes a more seamless window appearance but looks a little less
typical for a macOS application and may not work well with all themes.
.PP
The \[lq]transparent\[rq] style will also update in real\-time to
dynamic changes to the window background color, i.e.\ via OSC 11.
To make this more aesthetically pleasing, this only happens if the
terminal is a window, tab, or split that borders the top of the window.
This avoids a disjointed appearance where the titlebar color changes but
all the topmost terminals don\[cq]t match.
.PP
The \[lq]tabs\[rq] style is a completely custom titlebar that integrates
the tab bar into the titlebar.
This titlebar always matches the background color of the terminal.
There are some limitations to this style: On macOS 13 and below, saved
window state will not restore tabs correctly.
macOS 14 does not have this issue and any other macOS version has not
been tested.
.PP
The \[lq]hidden\[rq] style hides the titlebar.
Unlike \f[CR]window\-decoration = false\f[R], however, it does not
remove the frame from the window or cause it to have squared corners.
Changing to or from this option at run\-time may affect existing windows
in buggy ways.
The top titlebar area of the window will continue to drag the window
around and you will not be able to use the mouse for terminal events in
this space.
.PP
The default value is \[lq]transparent\[rq].
This is an opinionated choice but its one I think is the most
aesthetically pleasing and works in most cases.
.PP
Changing this option at runtime only applies to new windows.
.RE
.TP
\f[B]\f[CB]\-\-macos\-titlebar\-proxy\-icon\f[B]\f[R]
Whether the proxy icon in the macOS titlebar is visible.
The proxy icon is the icon that represents the folder of the current
working directory.
You can see this very clearly in the macOS built\-in Terminal.app
titlebar.
.RS
.PP
The proxy icon is only visible with the native macOS titlebar style.
.PP
Valid values are:
.IP \[bu] 2
\f[CR]visible\f[R] \- Show the proxy icon.
.IP \[bu] 2
\f[CR]hidden\f[R] \- Hide the proxy icon.
.PP
The default value is \f[CR]visible\f[R].
.PP
This setting can be changed at runtime and will affect all currently
open windows but only after their working directory changes again.
Therefore, to make this work after changing the setting, you must
usually \f[CR]cd\f[R] to a different directory, open a different file in
an editor, etc.
.RE
.TP
\f[B]\f[CB]\-\-macos\-option\-as\-alt\f[B]\f[R]
macOS doesn\[cq]t have a distinct \[lq]alt\[rq] key and instead has the
\[lq]option\[rq] key which behaves slightly differently.
On macOS by default, the option key plus a character will sometimes
produces a Unicode character.
For example, on US standard layouts option\-b produces \[lq]∫\[rq].
This may be undesirable if you want to use \[lq]option\[rq] as an
\[lq]alt\[rq] key for keybindings in terminal programs or shells.
.RS
.PP
This configuration lets you change the behavior so that option is
treated as alt.
.PP
The default behavior (unset) will depend on your active keyboard layout.
If your keyboard layout is one of the keyboard layouts listed below,
then the default value is \[lq]true\[rq].
Otherwise, the default value is \[lq]false\[rq].
Keyboard layouts with a default value of \[lq]true\[rq] are:
.IP \[bu] 2
U.S.
Standard
.IP \[bu] 2
U.S.
International
.PP
Note that if an \f[I]Option\f[R]\-sequence doesn\[cq]t produce a
printable character, it will be treated as \f[I]Alt\f[R] regardless of
this setting.
(i.e.\ \f[CR]alt+ctrl+a\f[R]).
.PP
Explicit values that can be set:
.PP
If \f[CR]true\f[R], the \f[I]Option\f[R] key will be treated as
\f[I]Alt\f[R].
This makes terminal sequences expecting \f[I]Alt\f[R] to work properly,
but will break Unicode input sequences on macOS if you use them via the
\f[I]Alt\f[R] key.
.PP
You may set this to \f[CR]false\f[R] to restore the macOS \f[I]Alt\f[R]
key unicode sequences but this will break terminal sequences expecting
\f[I]Alt\f[R] to work.
.PP
The values \f[CR]left\f[R] or \f[CR]right\f[R] enable this for the left
or right \f[I]Option\f[R] key, respectively.
.PP
This does not work with GLFW builds.
.RE
.TP
\f[B]\f[CB]\-\-macos\-window\-shadow\f[B]\f[R]
Whether to enable the macOS window shadow.
The default value is true.
With some window managers and window transparency settings, you may find
false more visually appealing.
.TP
\f[B]\f[CB]\-\-macos\-auto\-secure\-input\f[B]\f[R]
If true, Ghostty on macOS will automatically enable the \[lq]Secure
Input\[rq] feature when it detects that a password prompt is being
displayed.
.RS
.PP
\[lq]Secure Input\[rq] is a macOS security feature that prevents
applications from reading keyboard events.
This can always be enabled manually using the
\f[CR]Ghostty > Secure Keyboard Entry\f[R] menu item.
.PP
Note that automatic password prompt detection is based on heuristics and
may not always work as expected.
Specifically, it does not work over SSH connections, but there may be
other cases where it also doesn\[cq]t work.
.PP
A reason to disable this feature is if you find that it is interfering
with legitimate accessibility software (or software that uses the
accessibility APIs), since secure input prevents any application from
reading keyboard events.
.RE
.TP
\f[B]\f[CB]\-\-macos\-secure\-input\-indication\f[B]\f[R]
If true, Ghostty will show a graphical indication when secure input is
enabled.
This indication is generally recommended to know when secure input is
enabled.
.RS
.PP
Normally, secure input is only active when a password prompt is
displayed or it is manually (and typically temporarily) enabled.
However, if you always have secure input enabled, the indication can be
distracting and you may want to disable it.
.RE
.TP
\f[B]\f[CB]\-\-linux\-cgroup\f[B]\f[R]
Put every surface (tab, split, window) into a dedicated Linux cgroup.
.RS
.PP
This makes it so that resource management can be done on a per\-surface
granularity.
For example, if a shell program is using too much memory, only that
shell will be killed by the oom monitor instead of the entire Ghostty
process.
Similarly, if a shell program is using too much CPU, only that surface
will be CPU\-throttled.
.PP
This will cause startup times to be slower (a hundred milliseconds or
so), so the default value is \[lq]single\-instance.\[rq] In
single\-instance mode, only one instance of Ghostty is running (see
gtk\-single\-instance) so the startup time is a one\-time cost.
Additionally, single instance Ghostty is much more likely to have many
windows, tabs, etc.
so cgroup isolation is a big benefit.
.PP
This feature requires systemd.
If systemd is unavailable, cgroup initialization will fail.
By default, this will not prevent Ghostty from working (see
linux\-cgroup\-hard\-fail).
.PP
Valid values are:
.IP \[bu] 2
\f[CR]never\f[R] \- Never use cgroups.
.IP \[bu] 2
\f[CR]always\f[R] \- Always use cgroups.
.IP \[bu] 2
\f[CR]single\-instance\f[R] \- Enable cgroups only for Ghostty instances
launched as single\-instance applications (see gtk\-single\-instance).
.RE
.TP
\f[B]\f[CB]\-\-linux\-cgroup\-memory\-limit\f[B]\f[R]
Memory limit for any individual terminal process (tab, split, window,
etc.)
in bytes.
If this is unset then no memory limit will be set.
.RS
.PP
Note that this sets the \[lq]memory.high\[rq] configuration for the
memory controller, which is a soft limit.
You should configure something like systemd\-oom to handle killing
processes that have too much memory pressure.
.RE
.TP
\f[B]\f[CB]\-\-linux\-cgroup\-processes\-limit\f[B]\f[R]
Number of processes limit for any individual terminal process (tab,
split, window, etc.).
If this is unset then no limit will be set.
.RS
.PP
Note that this sets the \[lq]pids.max\[rq] configuration for the process
number controller, which is a hard limit.
.RE
.TP
\f[B]\f[CB]\-\-linux\-cgroup\-hard\-fail\f[B]\f[R]
If this is false, then any cgroup initialization (for linux\-cgroup)
will be allowed to fail and the failure is ignored.
This is useful if you view cgroup isolation as a \[lq]nice to have\[rq]
and not a critical resource management feature, because Ghostty startup
will not fail if cgroup APIs fail.
.RS
.PP
If this is true, then any cgroup initialization failure will cause
Ghostty to exit or new surfaces to not be created.
.PP
Note: This currently only affects cgroup initialization.
Subprocesses must always be able to move themselves into an isolated
cgroup.
.RE
.TP
\f[B]\f[CB]\-\-gtk\-single\-instance\f[B]\f[R]
If \f[CR]true\f[R], the Ghostty GTK application will run in
single\-instance mode: each new \f[CR]ghostty\f[R] process launched will
result in a new window if there is already a running process.
.RS
.PP
If \f[CR]false\f[R], each new ghostty process will launch a separate
application.
.PP
The default value is \f[CR]detect\f[R] which will default to
\f[CR]true\f[R] if Ghostty detects that it was launched from the
\f[CR].desktop\f[R] file such as an app launcher (like Gnome Shell) or
by D\-Bus activation.
If Ghostty is launched from the command line, it will default to
\f[CR]false\f[R].
.PP
Note that debug builds of Ghostty have a separate single\-instance ID so
you can test single instance without conflicting with release builds.
.RE
.TP
\f[B]\f[CB]\-\-gtk\-titlebar\f[B]\f[R]
When enabled, the full GTK titlebar is displayed instead of your window
manager\[cq]s simple titlebar.
The behavior of this option will vary with your window manager.
.RS
.PP
This option does nothing when \f[CR]window\-decoration\f[R] is false or
when running under macOS.
.PP
Changing this value at runtime and reloading the configuration will only
affect new windows.
.RE
.TP
\f[B]\f[CB]\-\-gtk\-tabs\-location\f[B]\f[R]
Determines the side of the screen that the GTK tab bar will stick to.
Top, bottom, left, right, and hidden are supported.
The default is top.
.RS
.PP
If this option has value \f[CR]left\f[R] or \f[CR]right\f[R] when using
Adwaita, it falls back to \f[CR]top\f[R].
\f[CR]hidden\f[R], meaning that tabs don\[cq]t exist, is not supported
without using Adwaita, falling back to \f[CR]top\f[R].
.PP
When \f[CR]hidden\f[R] is set and Adwaita is enabled, a tab button
displaying the number of tabs will appear in the title bar.
It has the ability to open a tab overview for displaying tabs.
Alternatively, you can use the \f[CR]toggle_tab_overview\f[R] action in
a keybind if your window doesn\[cq]t have a title bar, or you can switch
tabs with keybinds.
.RE
.TP
\f[B]\f[CB]\-\-adw\-toolbar\-style\f[B]\f[R]
Determines the appearance of the top and bottom bars when using the
Adwaita tab bar.
This requires \f[CR]gtk\-adwaita\f[R] to be enabled (it is by default).
.RS
.PP
Valid values are:
.IP \[bu] 2
\f[CR]flat\f[R] \- Top and bottom bars are flat with the terminal
window.
.IP \[bu] 2
\f[CR]raised\f[R] \- Top and bottom bars cast a shadow on the terminal
area.
.IP \[bu] 2
\f[CR]raised\-border\f[R] \- Similar to \f[CR]raised\f[R] but the shadow
is replaced with a more subtle border.
.PP
Changing this value at runtime will only affect new windows.
.RE
.TP
\f[B]\f[CB]\-\-gtk\-wide\-tabs\f[B]\f[R]
If \f[CR]true\f[R] (default), then the Ghostty GTK tabs will be
\[lq]wide.\[rq] Wide tabs are the new typical Gnome style where tabs
fill their available space.
If you set this to \f[CR]false\f[R] then tabs will only take up space
they need, which is the old style.
.TP
\f[B]\f[CB]\-\-gtk\-adwaita\f[B]\f[R]
If \f[CR]true\f[R] (default), Ghostty will enable Adwaita theme support.
This will make \f[CR]window\-theme\f[R] work properly and will also
allow Ghostty to properly respond to system theme changes, light/dark
mode changing, etc.
This requires a GTK4 desktop with a GTK4 theme.
.RS
.PP
If you are running GTK3 or have a GTK3 theme, you may have to set this
to false to get your theme picked up properly.
Having this set to true with GTK3 should not cause any problems, but it
may not work exactly as expected.
.PP
This configuration only has an effect if Ghostty was built with Adwaita
support.
.RE
.TP
\f[B]\f[CB]\-\-desktop\-notifications\f[B]\f[R]
If \f[CR]true\f[R] (default), applications running in the terminal can
show desktop notifications using certain escape sequences such as OSC 9
or OSC 777.
.TP
\f[B]\f[CB]\-\-bold\-is\-bright\f[B]\f[R]
If \f[CR]true\f[R], the bold text will use the bright color palette.
.TP
\f[B]\f[CB]\-\-term\f[B]\f[R]
This will be used to set the \f[CR]TERM\f[R] environment variable.
HACK: We set this with an \f[CR]xterm\f[R] prefix because vim uses that
to enable key protocols (specifically this will enable
\f[CR]modifyOtherKeys\f[R]), among other features.
An option exists in vim to modify this:
\f[CR]:set keyprotocol=ghostty:kitty\f[R], however a bug in the
implementation prevents it from working properly.
https://github.com/vim/vim/pull/13211 fixes this.
.TP
\f[B]\f[CB]\-\-enquiry\-response\f[B]\f[R]
String to send when we receive \f[CR]ENQ\f[R] (\f[CR]0x05\f[R]) from the
command that we are running.
Defaults to an empty string if not set.
.TP
\f[B]\f[CB]\-\-auto\-update\f[B]\f[R]
Control the auto\-update functionality of Ghostty.
This is only supported on macOS currently, since Linux builds are
distributed via package managers that are not centrally controlled by
Ghostty.
.RS
.PP
Checking or downloading an update does not send any information to the
project beyond standard network information mandated by the underlying
protocols.
To put it another way: Ghostty doesn\[cq]t explicitly add any tracking
to the update process.
The update process works by downloading information about the latest
version and comparing it client\-side to the current version.
.PP
Valid values are:
.IP \[bu] 2
\f[CR]off\f[R] \- Disable auto\-updates.
.IP \[bu] 2
\f[CR]check\f[R] \- Check for updates and notify the user if an update
is available, but do not automatically download or install the update.
.IP \[bu] 2
\f[CR]download\f[R] \- Check for updates, automatically download the
update, notify the user, but do not automatically install the update.
.PP
The default value is \f[CR]check\f[R].
.PP
Changing this value at runtime works after a small delay.
.RE
.TP
\f[B]\f[CB]\-\-auto\-update\-channel\f[B]\f[R]
The release channel to use for auto\-updates.
.RS
.PP
The default value of this matches the release channel of the currently
running Ghostty version.
If you download a pre\-release version of Ghostty then this will be set
to \f[CR]tip\f[R] and you will receive pre\-release updates.
If you download a stable version of Ghostty then this will be set to
\f[CR]stable\f[R] and you will receive stable updates.
.PP
Valid values are:
.IP \[bu] 2
\f[CR]stable\f[R] \- Stable, tagged releases such as \[lq]1.0.0\[rq].
.IP \[bu] 2
\f[CR]tip\f[R] \- Pre\-release versions generated from each commit to
the main branch.
This is the version that was in use during private beta testing by
thousands of people.
It is generally stable but will likely have more bugs than the stable
channel.
.PP
Changing this configuration requires a full restart of Ghostty to take
effect.
.PP
This only works on macOS since only macOS has an auto\-update feature.
.RE
.SH FILES
.TP
\f[I]$XDG_CONFIG_HOME/ghostty/config\f[R]
Location of the default configuration file.
.TP
\f[I]$LOCALAPPDATA/ghostty/config\f[R]
\f[B]On Windows\f[R], if \f[I]$XDG_CONFIG_HOME\f[R] is not set,
\f[I]$LOCALAPPDATA\f[R] will be searched for configuration files.
.SH ENVIRONMENT
.TP
\f[B]TERM\f[R]
Defaults to \f[CR]xterm\-ghostty\f[R].
Can be configured with the \f[CR]term\f[R] configuration option.
.TP
\f[B]GHOSTTY_RESOURCES_DIR\f[R]
Where the Ghostty resources can be found.
.TP
\f[B]XDG_CONFIG_HOME\f[R]
Default location for configuration files.
.TP
\f[B]LOCALAPPDATA\f[R]
\f[B]WINDOWS ONLY:\f[R] alternate location to search for configuration
files.
.SH BUGS
See GitHub issues: \c
.UR https://github.com/ghostty-org/ghostty/issues
.UE \c
.SH AUTHOR
Mitchell Hashimoto \c
.MT m@mitchellh.com
.ME \c
.SH SEE ALSO
\f[B]ghostty(5)\f[R]