2763 lines
97 KiB
Groff
2763 lines
97 KiB
Groff
|
.\" Automatically generated by Pandoc 3.1.11.1
|
||
|
.\"
|
||
|
.TH "GHOSTTY" "5" "" "Version 0.1.0\-main+dd6460bc" "Ghostty terminal emulator configuration file"
|
||
|
.SH NAME
|
||
|
\f[B]ghostty\f[R] \- Ghostty terminal emulator configuration file
|
||
|
.SH DESCRIPTION
|
||
|
To configure Ghostty, you must use a configuration file.
|
||
|
GUI\-based configuration is on the roadmap but not yet supported.
|
||
|
The configuration file must be placed at
|
||
|
\f[CR]$XDG_CONFIG_HOME/ghostty/config\f[R], which defaults to
|
||
|
\f[CR]\[ti]/.config/ghostty/config\f[R] if the \c
|
||
|
.UR
|
||
|
https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
||
|
XDG environment is not set
|
||
|
.UE \c
|
||
|
\&.
|
||
|
.PP
|
||
|
The file format is documented below as an example:
|
||
|
.IP
|
||
|
.EX
|
||
|
# The syntax is \[dq]key = value\[dq]. The whitespace around the equals doesn\[aq]t matter.
|
||
|
background = 282c34
|
||
|
foreground= ffffff
|
||
|
|
||
|
# Blank lines are ignored!
|
||
|
|
||
|
keybind = ctrl+z=close_surface
|
||
|
keybind = ctrl+d=new_split:right
|
||
|
|
||
|
# Colors can be changed by setting the 16 colors of \[ga]palette\[ga], which each color
|
||
|
# being defined as regular and bold.
|
||
|
#
|
||
|
# black
|
||
|
palette = 0=#1d2021
|
||
|
palette = 8=#7c6f64
|
||
|
# red
|
||
|
palette = 1=#cc241d
|
||
|
palette = 9=#fb4934
|
||
|
# green
|
||
|
palette = 2=#98971a
|
||
|
palette = 10=#b8bb26
|
||
|
# yellow
|
||
|
palette = 3=#d79921
|
||
|
palette = 11=#fabd2f
|
||
|
# blue
|
||
|
palette = 4=#458588
|
||
|
palette = 12=#83a598
|
||
|
# purple
|
||
|
palette = 5=#b16286
|
||
|
palette = 13=#d3869b
|
||
|
# aqua
|
||
|
palette = 6=#689d6a
|
||
|
palette = 14=#8ec07c
|
||
|
# white
|
||
|
palette = 7=#a89984
|
||
|
palette = 15=#fbf1c7
|
||
|
.EE
|
||
|
.PP
|
||
|
You can view all available configuration options and their documentation
|
||
|
by executing the command
|
||
|
\f[CR]ghostty +show\-config \-\-default \-\-docs\f[R].
|
||
|
Note that this will output the full default configuration with docs to
|
||
|
stdout, so you may want to pipe that through a pager, an editor, etc.
|
||
|
.PP
|
||
|
Note: You\[cq]ll see a lot of weird blank configurations like
|
||
|
\f[CR]font\-family =\f[R].
|
||
|
This is a valid syntax to specify the default behavior (no value).
|
||
|
The \f[CR]+show\-config\f[R] outputs it so it\[cq]s clear that key is
|
||
|
defaulting and also to have something to attach the doc comment to.
|
||
|
.PP
|
||
|
You can also see and read all available configuration options in the
|
||
|
source Config structure.
|
||
|
The available keys are the keys verbatim, and their possible values are
|
||
|
typically documented in the comments.
|
||
|
You also can search for the public config files of many Ghostty users
|
||
|
for examples and inspiration.
|
||
|
.SS Configuration Errors
|
||
|
If your configuration file has any errors, Ghostty does its best to
|
||
|
ignore them and move on.
|
||
|
Configuration errors currently show up in the log.
|
||
|
The log is written directly to stderr, so it is up to you to figure out
|
||
|
how to access that for your system (for now).
|
||
|
On macOS, you can also use the system \f[CR]log\f[R] CLI utility.
|
||
|
See the Mac App section for more information.
|
||
|
.SS Debugging Configuration
|
||
|
You can verify that configuration is being properly loaded by looking at
|
||
|
the debug output of Ghostty.
|
||
|
Documentation for how to view the debug output is in the \[lq]building
|
||
|
Ghostty\[rq] section at the end of the README.
|
||
|
.PP
|
||
|
In the debug output, you should see in the first 20 lines or so messages
|
||
|
about loading (or not loading) a configuration file, as well as any
|
||
|
errors it may have encountered.
|
||
|
Configuration errors are also shown in a dedicated window on both macOS
|
||
|
and Linux (GTK).
|
||
|
Ghostty does not treat configuration errors as fatal and will fall back
|
||
|
to default values for erroneous keys.
|
||
|
.PP
|
||
|
You can also view the full configuration Ghostty is loading using
|
||
|
\f[CR]ghostty +show\-config\f[R] from the command\-line.
|
||
|
Use the \f[CR]\-\-help\f[R] flag to additional options for that command.
|
||
|
.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 KEYBIND ACTIONS
|
||
|
.TP
|
||
|
\f[B]\f[CB]ignore\f[B]\f[R]
|
||
|
Ignore this key combination, don\[cq]t send it to the child process,
|
||
|
just black hole it.
|
||
|
.TP
|
||
|
\f[B]\f[CB]unbind\f[B]\f[R]
|
||
|
This action is used to flag that the binding should be removed from the
|
||
|
set.
|
||
|
This should never exist in an active set and \f[CR]set.put\f[R] has an
|
||
|
assertion to verify this.
|
||
|
.TP
|
||
|
\f[B]\f[CB]csi\f[B]\f[R]
|
||
|
Send a CSI sequence.
|
||
|
The value should be the CSI sequence without the CSI header
|
||
|
(\f[CR]ESC ]\f[R] or \f[CR]\[rs]x1b]\f[R]).
|
||
|
.TP
|
||
|
\f[B]\f[CB]esc\f[B]\f[R]
|
||
|
Send an \f[CR]ESC\f[R] sequence.
|
||
|
.PP
|
||
|
\f[B]\f[CB]text\f[B]\f[R]
|
||
|
.TP
|
||
|
\f[B]\f[CB]cursor_key\f[B]\f[R]
|
||
|
Send data to the pty depending on whether cursor key mode is enabled
|
||
|
(\f[CR]application\f[R]) or disabled (\f[CR]normal\f[R]).
|
||
|
.TP
|
||
|
\f[B]\f[CB]reset\f[B]\f[R]
|
||
|
Reset the terminal.
|
||
|
This can fix a lot of issues when a running program puts the terminal
|
||
|
into a broken state.
|
||
|
This is equivalent to when you type \[lq]reset\[rq] and press enter.
|
||
|
.RS
|
||
|
.PP
|
||
|
If you do this while in a TUI program such as vim, this may break the
|
||
|
program.
|
||
|
If you do this while in a shell, you may have to press enter after to
|
||
|
get a new prompt.
|
||
|
.RE
|
||
|
.TP
|
||
|
\f[B]\f[CB]copy_to_clipboard\f[B]\f[R]
|
||
|
Copy and paste.
|
||
|
.PP
|
||
|
\f[B]\f[CB]paste_from_clipboard\f[B]\f[R]
|
||
|
.PP
|
||
|
\f[B]\f[CB]paste_from_selection\f[B]\f[R]
|
||
|
.TP
|
||
|
\f[B]\f[CB]increase_font_size\f[B]\f[R]
|
||
|
Increase/decrease the font size by a certain amount.
|
||
|
.PP
|
||
|
\f[B]\f[CB]decrease_font_size\f[B]\f[R]
|
||
|
.TP
|
||
|
\f[B]\f[CB]reset_font_size\f[B]\f[R]
|
||
|
Reset the font size to the original configured size.
|
||
|
.TP
|
||
|
\f[B]\f[CB]clear_screen\f[B]\f[R]
|
||
|
Clear the screen.
|
||
|
This also clears all scrollback.
|
||
|
.TP
|
||
|
\f[B]\f[CB]select_all\f[B]\f[R]
|
||
|
Select all text on the screen.
|
||
|
.TP
|
||
|
\f[B]\f[CB]scroll_to_top\f[B]\f[R]
|
||
|
Scroll the screen varying amounts.
|
||
|
.PP
|
||
|
\f[B]\f[CB]scroll_to_bottom\f[B]\f[R]
|
||
|
.PP
|
||
|
\f[B]\f[CB]scroll_page_up\f[B]\f[R]
|
||
|
.PP
|
||
|
\f[B]\f[CB]scroll_page_down\f[B]\f[R]
|
||
|
.PP
|
||
|
\f[B]\f[CB]scroll_page_fractional\f[B]\f[R]
|
||
|
.PP
|
||
|
\f[B]\f[CB]scroll_page_lines\f[B]\f[R]
|
||
|
.TP
|
||
|
\f[B]\f[CB]adjust_selection\f[B]\f[R]
|
||
|
Adjust an existing selection in a given direction.
|
||
|
This action does nothing if there is no active selection.
|
||
|
.TP
|
||
|
\f[B]\f[CB]jump_to_prompt\f[B]\f[R]
|
||
|
Jump the viewport forward or back by prompt.
|
||
|
Positive number is the number of prompts to jump forward, negative is
|
||
|
backwards.
|
||
|
.TP
|
||
|
\f[B]\f[CB]write_scrollback_file\f[B]\f[R]
|
||
|
Write the entire scrollback into a temporary file.
|
||
|
The action determines what to do with the filepath.
|
||
|
Valid values are:
|
||
|
.RS
|
||
|
.IP \[bu] 2
|
||
|
\[lq]paste\[rq]: Paste the file path into the terminal.
|
||
|
.IP \[bu] 2
|
||
|
\[lq]open\[rq]: Open the file in the default OS editor for text files.
|
||
|
The default OS editor is determined by using \f[CR]open\f[R] on macOS
|
||
|
and \f[CR]xdg\-open\f[R] on Linux.
|
||
|
.RE
|
||
|
.TP
|
||
|
\f[B]\f[CB]write_screen_file\f[B]\f[R]
|
||
|
Same as write_scrollback_file but writes the full screen contents.
|
||
|
See write_scrollback_file for available values.
|
||
|
.TP
|
||
|
\f[B]\f[CB]write_selection_file\f[B]\f[R]
|
||
|
Same as write_scrollback_file but writes the selected text.
|
||
|
If there is no selected text this does nothing (it doesn\[cq]t even
|
||
|
create an empty file).
|
||
|
See write_scrollback_file for available values.
|
||
|
.TP
|
||
|
\f[B]\f[CB]new_window\f[B]\f[R]
|
||
|
Open a new window.
|
||
|
If the application isn\[cq]t currently focused, this will bring it to
|
||
|
the front.
|
||
|
.TP
|
||
|
\f[B]\f[CB]new_tab\f[B]\f[R]
|
||
|
Open a new tab.
|
||
|
.TP
|
||
|
\f[B]\f[CB]previous_tab\f[B]\f[R]
|
||
|
Go to the previous tab.
|
||
|
.TP
|
||
|
\f[B]\f[CB]next_tab\f[B]\f[R]
|
||
|
Go to the next tab.
|
||
|
.TP
|
||
|
\f[B]\f[CB]last_tab\f[B]\f[R]
|
||
|
Go to the last tab (the one with the highest index)
|
||
|
.TP
|
||
|
\f[B]\f[CB]goto_tab\f[B]\f[R]
|
||
|
Go to the tab with the specific number, 1\-indexed.
|
||
|
If the tab number is higher than the number of tabs, this will go to the
|
||
|
last tab.
|
||
|
.TP
|
||
|
\f[B]\f[CB]move_tab\f[B]\f[R]
|
||
|
Moves a tab by a relative offset.
|
||
|
Adjusts the tab position based on \f[CR]offset\f[R] (e.g., \-1 for left,
|
||
|
+1 for right).
|
||
|
If the new position is out of bounds, it wraps around cyclically within
|
||
|
the tab range.
|
||
|
.TP
|
||
|
\f[B]\f[CB]toggle_tab_overview\f[B]\f[R]
|
||
|
Toggle the tab overview.
|
||
|
This only works with libadwaita enabled currently.
|
||
|
.TP
|
||
|
\f[B]\f[CB]new_split\f[B]\f[R]
|
||
|
Create a new split in the given direction.
|
||
|
The new split will appear in the direction given.
|
||
|
.TP
|
||
|
\f[B]\f[CB]goto_split\f[B]\f[R]
|
||
|
Focus on a split in a given direction.
|
||
|
.TP
|
||
|
\f[B]\f[CB]toggle_split_zoom\f[B]\f[R]
|
||
|
zoom/unzoom the current split.
|
||
|
.TP
|
||
|
\f[B]\f[CB]resize_split\f[B]\f[R]
|
||
|
Resize the current split by moving the split divider in the given
|
||
|
direction
|
||
|
.TP
|
||
|
\f[B]\f[CB]equalize_splits\f[B]\f[R]
|
||
|
Equalize all splits in the current window
|
||
|
.TP
|
||
|
\f[B]\f[CB]inspector\f[B]\f[R]
|
||
|
Show, hide, or toggle the terminal inspector for the currently focused
|
||
|
terminal.
|
||
|
.TP
|
||
|
\f[B]\f[CB]open_config\f[B]\f[R]
|
||
|
Open the configuration file in the default OS editor.
|
||
|
If your default OS editor isn\[cq]t configured then this will fail.
|
||
|
Currently, any failures to open the configuration will show up only in
|
||
|
the logs.
|
||
|
.TP
|
||
|
\f[B]\f[CB]reload_config\f[B]\f[R]
|
||
|
Reload the configuration.
|
||
|
The exact meaning depends on the app runtime in use but this usually
|
||
|
involves re\-reading the configuration file and applying any changes.
|
||
|
Note that not all changes can be applied at runtime.
|
||
|
.TP
|
||
|
\f[B]\f[CB]close_surface\f[B]\f[R]
|
||
|
Close the current \[lq]surface\[rq], whether that is a window, tab,
|
||
|
split, etc.
|
||
|
This only closes ONE surface.
|
||
|
This will trigger close confirmation as configured.
|
||
|
.TP
|
||
|
\f[B]\f[CB]close_window\f[B]\f[R]
|
||
|
Close the window, regardless of how many tabs or splits there may be.
|
||
|
This will trigger close confirmation as configured.
|
||
|
.TP
|
||
|
\f[B]\f[CB]close_all_windows\f[B]\f[R]
|
||
|
Close all windows.
|
||
|
This will trigger close confirmation as configured.
|
||
|
This only works for macOS currently.
|
||
|
.TP
|
||
|
\f[B]\f[CB]toggle_fullscreen\f[B]\f[R]
|
||
|
Toggle fullscreen mode of window.
|
||
|
.TP
|
||
|
\f[B]\f[CB]toggle_window_decorations\f[B]\f[R]
|
||
|
Toggle window decorations on and off.
|
||
|
This only works on Linux.
|
||
|
.TP
|
||
|
\f[B]\f[CB]toggle_secure_input\f[B]\f[R]
|
||
|
Toggle secure input mode on or off.
|
||
|
This is used to prevent apps that monitor input from seeing what you
|
||
|
type.
|
||
|
This is useful for entering passwords or other sensitive information.
|
||
|
.RS
|
||
|
.PP
|
||
|
This applies to the entire application, not just the focused terminal.
|
||
|
You must toggle it off to disable it, or quit Ghostty.
|
||
|
.PP
|
||
|
This only works on macOS, since this is a system API on macOS.
|
||
|
.RE
|
||
|
.TP
|
||
|
\f[B]\f[CB]toggle_quick_terminal\f[B]\f[R]
|
||
|
Toggle the \[lq]quick\[rq] terminal.
|
||
|
The quick terminal is a terminal that appears on demand from a
|
||
|
keybinding, often sliding in from a screen edge such as the top.
|
||
|
This is useful for quick access to a terminal without having to open a
|
||
|
new window or tab.
|
||
|
.RS
|
||
|
.PP
|
||
|
When the quick terminal loses focus, it disappears.
|
||
|
The terminal state is preserved between appearances, so you can always
|
||
|
press the keybinding to bring it back up.
|
||
|
.PP
|
||
|
The quick terminal has some limitations:
|
||
|
.IP \[bu] 2
|
||
|
It is a singleton; only one instance can exist at a time.
|
||
|
.IP \[bu] 2
|
||
|
It does not support tabs.
|
||
|
.IP \[bu] 2
|
||
|
It will not be restored when the application is restarted (for systems
|
||
|
that support window restoration).
|
||
|
.IP \[bu] 2
|
||
|
It supports fullscreen, but fullscreen will always be a non\-native
|
||
|
fullscreen (macos\-non\-native\-fullscreen = true).
|
||
|
This only applies to the quick terminal window.
|
||
|
This is a requirement due to how the quick terminal is rendered.
|
||
|
.PP
|
||
|
See the various configurations for the quick terminal in the
|
||
|
configuration file to customize its behavior.
|
||
|
.RE
|
||
|
.TP
|
||
|
\f[B]\f[CB]toggle_visibility\f[B]\f[R]
|
||
|
Show/hide all windows.
|
||
|
If all windows become shown, we also ensure Ghostty is focused.
|
||
|
.RS
|
||
|
.PP
|
||
|
This currently only works on macOS.
|
||
|
When hiding all windows, we do not yield focus to the previous
|
||
|
application.
|
||
|
.RE
|
||
|
.TP
|
||
|
\f[B]\f[CB]quit\f[B]\f[R]
|
||
|
Quit ghostty.
|
||
|
.TP
|
||
|
\f[B]\f[CB]crash\f[B]\f[R]
|
||
|
Crash ghostty in the desired thread for the focused surface.
|
||
|
.RS
|
||
|
.PP
|
||
|
WARNING: This is a hard crash (panic) and data can be lost.
|
||
|
.PP
|
||
|
The purpose of this action is to test crash handling.
|
||
|
For some users, it may be useful to test crash reporting functionality
|
||
|
in order to determine if it all works as expected.
|
||
|
.PP
|
||
|
The value determines the crash location:
|
||
|
.IP \[bu] 2
|
||
|
\[lq]main\[rq] \- crash on the main (GUI) thread.
|
||
|
.IP \[bu] 2
|
||
|
\[lq]io\[rq] \- crash on the IO thread for the focused surface.
|
||
|
.IP \[bu] 2
|
||
|
\[lq]render\[rq] \- crash on the render thread for the focused surface.
|
||
|
.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]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(1)\f[R]
|