home | help
foot.ini(5)		       File Formats Manual		     foot.ini(5)

NAME
     foot.ini - configuration file for foot(1)

DESCRIPTION
     foot  uses  the  standard	unix  configuration  format,  with section based
     key/value pairs. The default section is usually unnamed, i.e. not	prefixed
     with a [section]. However it can also be explicitly named [main], say if it
     needs to be reopened after any of the other sections.

     foot  will  search  for a configuration file in the following locations, in
     this order:

	 *   XDG_CONFIG_HOME/foot/foot.ini    (defaulting     to     $HOME/.con-
	     fig/foot/foot.ini if unset)
	 *   XDG_CONFIG_DIRS/foot/foot.ini	(defaulting	 to	/usr/lo-
	     cal/etc/xdg/foot/foot.ini if unset)

     An example configuration file containing all  options  with  their  default
     value    commented    out	 will	usually   be   installed   to	/usr/lo-
     cal/etc/xdg/foot/foot.ini.

     Options are set using KEY=VALUE pairs:

	 [colors-dark]
	 background=000000
	 foreground=ffffff

     Empty values (KEY=) are not supported. String options do  allow  the  empty
     string to be set, but it must be quoted: KEY=""

SECTION: main
     shell
	 Executable to launch. Typically a shell. Default: $SHELL if set, other-
	 wise  the user's default shell (as specified in /usr/local/etc/passwd).
	 You can also pass arguments. For example /bin/bash --norc.

     login-shell
	 Boolean. If enabled, the shell will be launched as a  login  shell,  by
	 prepending a '-' to argv[0]. Default: no.

     term
	 Value to set the environment variable TERM to. Default: foot

     font, font-bold, font-italic, font-bold-italic
	 Comma	separated list of fonts to use, in fontconfig format. That is, a
	 font name followed by a list of colon-separated options. Most	notewor-
	 thy  is  :size=n (or :pixelsize=n), which is used to set the font size.
	 Note that the font size is also affected by the dpi-aware option.

	 Examples:
	     *	 Dina:weight=bold:slant=italic
	     *	 Courier New:size=12
	     *	 Fantasque Sans Mono:fontfeatures=ss01
	     *	 Iosevka:fontfeatures=cv01=1:fontfeatures=cv06=1
	     *	 Meslo LG S:size=12, Noto Color Emoji:size=12
	     *	 Courier New:pixelsize=8

	 Be aware that, depending on your setup, there may be global  FontConfig
	 options  that	overrides options set here. If an option appears to have
	 no effect, ensure there is no global configuration file that  sets  the
	 same  option  with assign or assign_replace; use one of the many append
	 or possibly prepend modes.

	 For each option, the first font is  the  primary  font.  The  remaining
	 fonts	are  fallback fonts that will be used whenever a glyph cannot be
	 found in the primary font.

	 The fallback fonts are searched in the order they appear.  If	a  glyph
	 cannot be found in any of the fallback fonts, the dynamic fallback list
	 from fontconfig (for the primary font) is searched.

	 font-bold,  font-italic  and  font-bold-italic allow custom fonts to be
	 used for  bold/italic/bold+italic  fonts.  If	left  unconfigured,  the
	 bold/italic variants of the regular font(s) specified in font are used.
	 Note: you may have to tweak the size(s) of the custom bold/italic fonts
	 to match the regular font.

	 To  disable bold and/or italic fonts, set e.g. font-bold to exactly the
	 same value as font.

	 size is in points (as defined by the FontConfig format). To set a pixel
	 size, use pixelsize instead. Note that pixel sizes  are  unaffected  by
	 DPI  aware rendering (see dpi-aware), but are affected by desktop scal-
	 ing.

	 Default: monospace:size=8  (font),  not  set  (font-bold,  font-italic,
	 font-bold-italic).

     font-size-adjustment
	 Amount,  in  points, pixels or percent, to increment/decrement the font
	 size when zooming in or out.

	 Examples:
	     font-size-adjustment=0.5	# Adjust by 0.5 points
	     font-size-adjustment=10px	# Adjust by 10 pixels
	     font-size-adjustment=7.5%	# Adjust by 7.5 percent

	 Default: 0.5

     include
	 Absolute path to configuration file to import.

	 The import file has its own section scope. I.e. the including	configu-
	 ration is still in the default section after the include, regardless of
	 which section the included file ends in.

	     *	 The path must be an absolute path, or start with ~/.
	     *	 Multiple  include directives are allowed, but only one path per
		 directive.
	     *	 Nested imports are allowed.

	 Default: not set.

     line-height
	 An absolute value, in points, that override line height from  the  font
	 metrics.

	 You  can  specify a height in pixels by using the px suffix: e.g. line-
	 height=12px.

	 Warning: when changing the font size at runtime  (i.e.  zooming  in  or
	 out), foot will change the line height by the same percentage. However,
	 due to rounding, it is possible the line height will be "too small" for
	 some font sizes, causing e.g. underscores to "disappear".

	 See also: vertical-letter-offset.

	 Default: not set.

     letter-spacing
	 Spacing  between letters, in points. A positive value will increase the
	 cell size, and a negative value shrinks it.

	 You can specify a letter spacing in pixels by using the px suffix: e.g.
	 letter-spacing=2px.

	 See also: horizontal-letter-offset.

	 Default: 0.

     horizontal-letter-offset, vertical-letter-offset
	 Configure the horizontal and vertical	offsets  used  when  positioning
	 glyphs within cells, in points, relative to the top left corner.

	 To  specify an offset in pixels, append px: e.g. horizontal-letter-off-
	 set=2px.

	 Default: 0.

     underline-offset
	 Use a custom offset for underlines.  The  offset  is,	by  default,  in
	 points  and relative to the font's baseline. A positive value positions
	 the underline under the baseline, while a negative value  positions  it
	 above the baseline.

	 To specify an offset in pixels, append px: underline-offset=2px.

	 If  left unset (the default), the offset specified in the font is used,
	 or estimated by foot if the font lacks underline  positioning	informa-
	 tion.

	 Default: unset.

     underline-thickness
	 Use  a  custom  thickness (height) for underlines. The thickness is, by
	 default, in points.

	 To specify a thickness in pixels, append px: underline-thickness=1px.

	 If left unset (the default), the thickness specified  in  the	font  is
	 used.

	 Default: unset

     strikeout-thickness
	 Use  a  custom  thickness (height) for strikeouts. The thickness is, by
	 default, in points.

	 To specify a thickness in pixels, append px: strikeout-thickness=1px.

	 If left unset (the default), the thickness specified  in  the	font  is
	 used.

	 Default: unset

     gamma-correct-blending
	 Boolean.  When  enabled,  foot will do gamma-correct blending in linear
	 color space. This is how font glyphs are supposed to be  rendered,  but
	 since nearly no applications or toolkits are doing it on Linux, the re-
	 sult may not look like you are used to.

	 Compared  to the default (disabled), bright glyphs on a dark background
	 will appear thicker, and dark glyphs on a light background will  appear
	 thinner.

	 FreeType  can	limit  the effect of the latter, with a technique called
	 stem darkening. It is only available for CFF fonts (OpenType, .otf) and
	 disabled by default (in FreeType). You can enable it by setting the en-
	 vironment variable FREETYPE_PROPERTIES="cff:no-stem-darkening=0" before
	 starting foot.

	 Also be aware that many fonts have been developed on  systems	that  do
	 not  do gamma-correct blending, and may therefore look thicker than in-
	 tended when rendered with gamma-correct blending, since  the  font  de-
	 signer set the font weight based on incorrect rendering.

	 In order to represent colors faithfully, higher precision image buffers
	 are  required. By default, foot will use either 16-bit, or 10-bit color
	 channels, depending on availability, when gamma-correct blending is en-
	 abled. However, the high precision buffers are slow; if you want to use
	 gamma-correct blending, but prefer speed (throughput and input latency)
	 over accurate colors, you can force 8-bit  color  channels  by  setting
	 tweak.surface-bit-depth=8-bit.

	 Default: no.

     uppercase-regex-insert
	 Boolean.  When  enabled, inputting an uppercase hint character in show-
	 urls-copy or regex-copy mode will insert the  selected  text  into  the
	 prompt in addition to copying it to the clipboard.

	 Default: yes

     box-drawings-uses-font-glyphs
	 Boolean.  When disabled, foot generates box/line drawing characters it-
	 self. There are several advantages to doing this instead of using  font
	 glyphs:

	     *	 No antialiasing effects where e.g. line endpoints appear dimmed
		 down, or blurred.
	     *	 Line-	and  box  characters  are  guaranteed to span the entire
		 cell, resulting in a gap-less appearance.
	     *	 No alignment issues, i.e. lines are centered when  they  should
		 be.
	     *	 Many  fonts  lack  some,  or  all, of the line- and box drawing
		 characters, causing fallback fonts to be used, which results in
		 out-of-place looking glyphs (for example, badly sized).

	 When enabled, box/line  drawing  characters  are  rendered  using  font
	 glyphs. This may result in a more uniform look, in some use cases.

	 When disabled, foot will render the following Unicode codepoints by it-
	 self:

	     *	 U+02500 - U+0259F
	     *	 U+02800 - U+028FF
	     *	 U+1CD00 - U+1CDE5
	     *	 U+1Fb00 - U+1FB9B

	 Default: no.

     dpi-aware
	 Boolean.

	 When set to yes, fonts are sized using the monitor's DPI, making a font
	 of  a given size have the same physical size, regardless of monitor. In
	 other words, if you drag a foot window between different monitors,  the
	 font size remains the same.

	 In  this  mode,  the  monitor's scaling factor is ignored; doubling the
	 scaling factor will not double the font size.

	 When set to no, the monitor's DPI is ignored. The font is instead sized
	 using the monitor's scaling factor; doubling the  scaling  factor  does
	 double the font size.

	 Note  that this option typically does not work with bitmap fonts, which
	 only contain a pre-defined set of  sizes,  and  cannot  be  dynamically
	 scaled.  Whichever  size  (of the available ones) that best matches the
	 DPI or scaling factor, will be used.

	 Also note that if the font size has been specified in	pixels	(:pixel-
	 size=N,  instead  of :size=N), DPI scaling (dpi-aware=yes) will have no
	 effect (the specified pixel size will be used as is). But, if the moni-
	 tor's scaling factor is used  to  size  the  font  (dpi-aware=no),  the
	 font's pixel size will be multiplied with the scaling factor.

	 Default: no

     pad
	 Padding  between  border and glyphs, in pixels (subject to output scal-
	 ing), in the form

	     _XxY_ [center | center-when-fullscreen | center-when-maximized-and-fullscreen]
	 or
	     RIGHTxTOPxLEFTxBOTTOM [center | center-when-fullscreen | center-when-maximized-and-fullscreen]

	 *   `XxY` adds at least: - X pixels on the left and right  sides.  -  Y
	     pixels on the top and bottom sides.

	 *   `LEFTxTOPxRIGHTxBOTTOM`  adds at least: - LEFT pixels to the left -
	     TOP pixels to the top - RIGHT pixels to the right -  BOTTOM  pixels
	     to the bottom

	 When no centering is specified, the grid content is anchored to the top
	 left  corner.	I.e.  if the window manager forces an odd window size on
	 foot, the additional pixels will be  added  to  the  right  and  bottom
	 sides.

	 If  center is specified, the grid content is instead centered. This may
	 cause "jumpiness" when resizing the window.

	 With center-when-fullscreen  and  center-when-maximized-and-fullscreen,
	 the grid is anchored to the top left corner, unless the window is maxi-
	 mized, or fullscreened.

	 Default: 0x0 center-when-maximized-and-fullscreen.

     resize-delay-ms

	 Time, in milliseconds, of "idle time" before foot performs text reflow,
	 and sends the new window dimensions to the client application while do-
	 ing  an  interactive resize of a foot window. Idle time in this context
	 is a period of time where the window size is not changing.

	 In other words, while you are fiddling with the window size, foot  does
	 not  send  the  updated  dimensions  to the client. It also does a fast
	 "truncating" resize of the grid, instead of actually reflowing the con-
	 tents. Only when you pause the fiddling for  resize-delay-ms  millisec-
	 onds is the client updated, and the contents properly reflowed.

	 Emphasis is on while here; as soon as the interactive resize ends (i.e.
	 when you let go of the window border), the final dimensions are sent to
	 the client, without any delays.

	 Setting it to 0 disables the delay completely.

	 Default: 100.

     resize-by-cells
	 Boolean.

	 When  set  to	yes, the window size will be constrained to multiples of
	 the cell size (plus any configured padding). When set to no, the window
	 size will be unconstrained, and padding may be adjusted as necessary to
	 accommodate window sizes that are not multiples of the cell size.

	 This option only applies to floating windows. Sizes of maximized, tiled
	 or fullscreen windows will not be constrained to multiples of the  cell
	 size.

	 Default: yes

     resize-keep-grid
	 Boolean.

	 When  set to yes, the window size will be adjusted with changes in font
	 size to preserve the dimensions of the text grid. When set to	no,  the
	 window  size will remain constant and the text grid will be adjusted as
	 necessary to fit the window.

	 This option only applies to floating windows.

	 Default: yes

     initial-color-theme
	 Selects which color theme to use, dark, or light.

	 dark uses the colors defined in the colors-dark  section,  while  light
	 uses the colors from the colors-light section.

	 Use  the  color-theme-switch-dark,  color-theme-switch-light and color-
	 theme-toggle key bindings to switch between the two themes at	runtime,
	 or send SIGUSR1/SIGUSR2 to the foot process (see foot(1) for details).

	 Default: dark

     initial-window-size-pixels
	 Initial  window width and height in pixels (subject to output scaling),
	 in the form WIDTHxHEIGHT. The height includes the titlebar  when  using
	 CSDs. Mutually exclusive to initial-window-size-chars.

	 Note that this option may not work as expected if fractional scaling is
	 being	used,  due  to	the fact that many compositors do not report the
	 correct scaling factor until after a window has been mapped.

	 Default: 700x500.

     initial-window-size-chars
	 Initial window width and height in  characters,  in  the  form  WIDTHx-
	 HEIGHT. Mutually exclusive to initial-window-size-pixels.

	 Note  that  if  you  have a multi-monitor setup, with different scaling
	 factors, there is a possibility the window size will not  be  set  cor-
	 rectly. If that is the case, use initial-window-size-pixels instead.

	 And,  just like initial-window-size-pixels, this option may not work as
	 expected if fractional scaling is being used (see  initial-window-size-
	 pixels for details).

	 Default: not set.

     initial-window-mode
	 Initial  window mode for each newly spawned window: windowed, maximized
	 or fullscreen. Default: windowed.

     title
	 Initial window title. Default: foot.

     locked-title
	 Boolean. If enabled, applications are not allowed to change  the  title
	 at run-time. Default: no.

     app-id
	 Value to set the app-id property on the Wayland window to. The composi-
	 tor  can use this value to e.g. group multiple windows, or apply window
	 management rules. Default: foot (normal mode),  or  footclient  (server
	 mode).

     toplevel-tag
	 Value	to  set  the toplevel-tag property on the Wayland window to. The
	 compositor can use this value for session management, window rules etc.
	 Default: not set

     bold-text-in-bright
	 Semi-boolean. When enabled, bold text is rendered in a  brighter  color
	 (in addition to using a bold font). The color is brightened by blending
	 it with white.

	 If set to palette-based, rather than a simple yes|true, colors matching
	 one of the 8 regular palette colors will be brightened using the corre-
	 sponding bright palette color. Other colors will not be brightened.

	 Default: no.

     word-delimiters
	 String  of  characters that act as word delimiters when selecting text.
	 Note that whitespace characters are always word delimiters,  regardless
	 of this setting. Default: ,^a`|:"'()[]{}<>

     selection-target
	 Clipboard  target  to automatically copy selected text to. One of none,
	 primary, clipboard or both. Default: primary.

     workers
	 Number of threads to use for rendering. Set  to  0  to  disable  multi-
	 threading.  Default:  the  number  of available logical CPUs (including
	 SMT). Note that this is not always the best value. In some  cases,  the
	 number of physical cores is better.

	 In  case you have a ridiculous amount of cores and/or threads, consider
	 limiting the number of workers, since foot cannot parallelize more than
	 the number of visible rows.

     utmp-helper
	 Path to utmp logging helper binary.

	 When starting foot, an utmp record is created by launching  the  helper
	 binary with the following arguments:

	     login $WAYLAND_DISPLAY

	 When foot is closed, the utmp record is removed by launching the helper
	 binary with the following arguments:

	     logout

	 Set to none to disable utmp records. Default: /usr/libexec/ulog-helper.

SECTION: environment
     This  section  is	used to define environment variables that will be set in
     the client application, in addition to the  variables  inherited  from  the
     terminal process itself.

     The format is simply:

     name=value

     Note:  do not set TERM here; use the term option in the main (default) sec-
     tion instead.

SECTION: security
     osc52

	 Whether OSC-52 (clipboard access) is enabled or disabled. One	of  dis-
	 abled, copy-enabled, paste-enabled or enabled.

	 OSC-52  gives	terminal  application access to the host clipboard (i.e.
	 the Wayland clipboard). This is normally not a  security  issue,  since
	 all  applications  can  access  the clipboard directly over the Wayland
	 socket.

	 However, when SSH:ing into a remote system, or  accessing  a  container
	 etc, the terminal applications may be untrusted, and you might consider
	 disabling the host clipboard access.

	 *   disabled: disables all clipboard access
	 *   copy-enabled: applications can write to the clipboard, but not read
	     from it.
	 *   paste-enabled:  applications  can	read from the clipboard, but not
	     write to it.
	 *   enabled: all applications have full access to the	host  clipboard.
	     This is the default.

	 Default: enabled

SECTION: bell
     system
	 Boolean,  when set to yes, ring the system bell. The bell is rung inde-
	 pendent of whether the foot window has keyboard focus or not. Exact be-
	 havior is compositor dependent.

	 Default: yes

     urgent
	 Boolean, when set to yes, foot will signal urgency  to  the  compositor
	 through  the  XDG activation protocol whenever BEL is received, and the
	 window does NOT have keyboard focus.

	 If the compositor does not implement this protocol, the margins will be
	 painted in red instead.

	 Applications can enable/disable this feature programmatically with  the
	 CSI ? 1042 h and CSI ? 1042 l escape sequences.

	 Default: no

     notify
	 Boolean,  when  set to yes, foot will emit a desktop notification using
	 the command specified in the notify option whenever BEL is received. By
	 default, bell notifications are shown only when  the  window  does  not
	 have keyboard focus. See desktop-notifications.inhibit-when-focused.

	 Default: no

     visual
	 Boolean, when set to yes, foot will flash the terminal window. Default:
	 no

     command
	 When set, foot will execute this command when BEL is received. Default:
	 none

     command-focused
	 Boolean, whether to run the command on BEL even while focused. Default:
	 no

SECTION: desktop-notifications
     command
	 Command to execute to display a notification.

	 Template arguments
	     ${title}  and  ${body} will be replaced with the notification's ac-
	     tual title and body (message content).

	     ${app-id} is replaced with the value of  the  command  line  option
	     --app-id, and defaults to foot (normal mode), or footclient (server
	     mode).

	     ${window-title} is replaced with the current window title.

	     ${icon}  is  replaced by the icon specified in the notification re-
	     quest, or the empty string if no icon was specified.  Can	be  used
	     with  e.g.  notify-send's	--icon option, or preferably, by setting
	     the image-path hint (with e.g. notify-send's --hint option).

	     ${category} is replaced by the notification's category. Can be used
	     together with e.g. notify-send's --category option.

	     ${urgency} is replaced with the notifications urgency; low,  normal
	     or critical. Can be used together with e.g. notify-send's --urgency
	     option.

	     ${expire-time}  is replaced with the notification specified notifi-
	     cation timeout. Can be used together with e.g. notify-send's  --ex-
	     pire-time option.

	     ${replace-id}  is	replaced  by the notification daemon assigned ID
	     that the notification replaces/updates.  For  this  to  work,  foot
	     needs to know the externally assigned IDs of previously emitted no-
	     tifications,  see	the 'stdout' section below. Can be used together
	     with e.g. notify-send's --replace-id option.

	     ${muted} is replaced by either true or false, depending on  whether
	     the notification has requested all notification sounds be muted. It
	     is intended to set the suppress-sound hint (with e.g. notify-send's
	     --hint option).

	     ${sound-name}  is replaced by sound-name requested by the notifica-
	     tion. This should be a name from the freedesktop sound naming spec-
	     ification, but this is not something that foot enforces. It is  in-
	     tended  to  set the sound-name hint (with e.g. notify-send's --hint
	     option).

	     ${action-argument} will be expanded to the  command-action-argument
	     option, for each notification action. There will always be at least
	     one  action,  the "default" action. Foot uses this to enable window
	     focusing, and reporting  notification  activation	to  applications
	     that requested such events.

	     Applications can also define their own custom notification actions.
	     See the command-action-argument option for details.

	 Ways to trigger notifications
	     Applications can trigger notifications in the following ways:

	     *	 OSC 777: \e]777;notify;<title>;<body>\e\\
	     *	 OSC  99: \e]99;;<title>\e\\ (this is just a bare bones example;
		 this protocol	has  lots  of  features,  see  https://sw.kovid-
		 goyal.net/kitty/desktop-notifications)

	     By default, notifications are inhibited if the foot window has key-
	     board focus. See desktop-notifications.inhibit-when-focused.

	 Window activation (focusing)
	     Foot  can focus the window when the notification is 'activated'. It
	     can also send an event back to the client application, notifying it
	     that the notification has been 'activated', This typically  happens
	     when the default action is invoked, and/or when the notification is
	     clicked,  but  exact behavior depends on the notification daemon in
	     use, and how it has been configured.

	     For this to work, foot needs to know when the notification was  ac-
	     tivated (as opposed to just dismissed), and it needs an XDG activa-
	     tion token.

	     There  are  two  parts to handle this. First, the notification must
	     define an action. For this purpose, foot will add a  "default"  ac-
	     tion to the notification (see the command-action-argument option).

	     Second,  foot needs to know when the notification is activated, and
	     it needs to get hold of the XDG activation token.

	     Both are expected to be printed on stdout.

	     Foot expects the action name (not label) to be printed on a  single
	     line. No prefix, no postfix.

	     Foot  expects  the activation token to be printed on a single line,
	     prefixed with xdgtoken=.

	     Example:
		 default
		 xdgtoken=18179adf579a7a904ce73754964b1ec3

	     The expected format of stdout may change at any time.  Please  read
	     the changelog when upgrading foot.

	     Note:  notify-send  does not, out of the box, support reporting the
	     XDG activation token in any way. This means window activation  will
	     not work by default.

	 Stdout
	     Foot recognizes the following things from the notification helper's
	     stdout:

	     *	 id: integer in base 10, daemon assigned notification ID
	     *	 id=id: same as plain nnn.
	     *	 default: the 'default' action was triggered
	     *	 action=default: same as default
	     *	 action=n: application custom action n triggered
	     *	 n: integer in base 10, appearing after the ID; application cus-
		 tom action n triggered
	     *	 xdgtoken=xyz: XDG activation token.

	     Example #1:
		 17
		 action=default
		 xdgtoken=95ebdfe56e4f47ddb5bba9d7dc3a2c35

		 Foot recognizes this as:
		 *   notification has the daemon assigned ID 17
		 *   the user triggered the default action
		 *   the notification sent an XDG activation token

	     Example #2:
		 17
		 1

		 Foot recognizes this as:
		 *   notification has the daemon assigned ID 17
		 *   the user triggered the first custom action, "1"

	     Example #3:
		 id=17
		 1

		 Foot recognizes this as:
		 *   notification has the daemon assigned ID 17
		 *   the user triggered the first custom action, "1"

	 Default: notify-send
	 --wait
	 --app-name    ${app-id}
	 --icon        ${app-id}
	 --category    ${category}
	 --urgency     ${urgency}
	 --expire-time ${expire-time}
	 --hint        STRING:image-path:${icon}
	 --hint        BOOLEAN:suppress-sound:${muted}
	 --hint        STRING:sound-name:${sound-name}
	 --replace-id  ${replace-id}
	 ${action-argument}
	 --print-id
	 -- ${title} ${body}.

     command-action-argument
	 String to use with command to enable passing action/button names to the
	 notification helper.

	 Foot  will always configure a "default" action that can be used to "ac-
	 tivate" the notification, which in turn can cause the foot window to be
	 focused, or an escape to be sent to the terminal application (depending
	 on how the application generated the notification).

	 Furthermore, the OSC-99 notifications protocol allows	applications  to
	 define  their	own  actions. Foot uses a combination of the command op-
	 tion, and the command-action-argument option to pass the names  of  the
	 actions to the notification helper.

	 This option has the following template arguments:

	 *   ${action-name}: the name of the action; default for the default ac-
	     tion configured by foot, and n, where n is an integer >= 1, for ap-
	     plication defined actions.
	 *   ${action-label}:  Activate  for the default action, and a free-form
	     string for application defined actions.

	 For each notification action (remember, there will always be  at  least
	 one),	command-action-argument  will be expanded with the action's name
	 and label.

	 Then, ${action-argument} is expanded in command to the full list of ac-
	 tions.

	 If command-action-argument is set to the empty string, no actions  will
	 be passed to command. That is, ${action-argument} will be replaced with
	 the empty string.

	 Example:

	 command-action-argument=--action ${action-name}=${action-label}
	 command=notify-send ${action-argument} ...

	 Assume the application defined two custom actions: OK and Cancel.

	 Given the above, foot will execute:

	     notify-send
	     --action default='Click to activate'
	     --action 1=OK
	     --action 2=Cancel

	 Default: --action ${action-name}=${action-label}

     close
	 Command to execute to close an existing notification.

	 ${id}	is expanded to the ID of the notification that should be closed.
	 For example:

	     fyi --close ${id}

	 Closing a notification is only supported by the Kitty Desktop Notifica-
	 tion protocol, OSC-99.

	 If set to the empty string (the default),  foot  will	instead  try  to
	 close	the  notification  by  sending SIGINT to the notification helper
	 process. For example, notify-send --wait (libnotify >= 0.8.0)	responds
	 to SIGINT by closing the notification.

	 Default: not set

     inhibit-when-focused
	 Boolean.  If enabled, foot will not display notifications if the termi-
	 nal window has keyboard focus.

	 Default: yes

SECTION: scrollback
     lines
	 Number of scrollback lines. The maximum number of allocated lines  will
	 be this value plus the number of visible lines, rounded up to the near-
	 est power of 2. Default: 1000.

     multiplier
	 Amount  to  multiply mouse scrolling with. It is a decimal number, i.e.
	 fractions are allowed. Default: 3.0.

     indicator-position
	 Configures the style of the scrollback position indicator. One of none,
	 fixed or relative. none disables the indicator completely. fixed always
	 renders the indicator near the top of the window, and relative  renders
	 the  indicator  at the position corresponding to the current scrollback
	 position. Default: relative.

     indicator-format
	 Which format to use when displaying the scrollback position  indicator.
	 Either  percentage,  line, or a custom fixed string. This option is ig-
	 nored if indicator-position=none. Default: empty string.

SECTION: url
     Note that you can also add custom regular expressions, see the 'regex' sec-
     tion.

     launch
	 Command to execute when opening URLs. ${url} will be replaced with  the
	 actual URL. Default: xdg-open ${url}.

     osc8-underline
	 When to underline OSC-8 URLs. Possible values are url-mode and always.

	 When set to url-mode, OSC-8 URLs are only highlighted in URL mode, just
	 like auto-detected URLs.

	 When  set  to	always, OSC-8 URLs are always highlighted, regardless of
	 their other attributes (bold, italic etc). Note that this does not make
	 them clickable.

	 Default: url-mode

     style
	 The underline style to use when rendering URL underlines. This  applies
	 to  both  OSC-8 underlines when osc8-underline=always, and all detected
	 URLs in URL mode. One of none, single, double, curly, dotted or dashed.

	 Default: dotted

     label-letters
	 String of characters to use when generating key sequences for URL  jump
	 labels.

	 If  you  change  this	option	to include the letter t, you should also
	 change the default  [url-bindings].toggle-url-visible	key  binding  to
	 avoid a clash.

	 Default: sadfjklewcmpgh.

     regex
	 Regular  expression  to  use  when  auto-detecting  URLs. The format is
	 "POSIX-Extended Regular Expressions". Note that the first marked subex-
	 pression is used as the URL. In other words,  if  you	want  the  whole
	 regex	match to be used as an URL, surround all of it with parenthesis:
	 (regex-pattern).

	 Default: (((https?://|mailto:|ftp://|file:|ssh:|ssh://|git://|tel:|mag-
	 net:|ipfs://|ipns://|gemini://|gopher://|news:)|www.)([0-9a-zA-
	 Z:/?#@!$&*+,;=.~_%^-]+|([]["0-9a-zA-Z:/?#@!$&'*+,;=.~_%^-]*)|[[()"0-9a-
	 zA-Z:/?#@!$&'*+,;=.~_%^-]*]|"[][()0-9a-zA-
	 Z:/?#@!$&'*+,;=.~_%^-]*"|'[][()0-9a-zA-Z:/?#@!$&*+,;=.~_%^-]*')+([0-9a-
	 zA-Z/#@$&*+=~_%^-]|([]["0-9a-zA-Z:/?#@!$&'*+,;=.~_%^-]*)|[[()"0-9a-zA-
	 Z:/?#@!$&'*+,;=.~_%^-]*]|"[][()0-9a-zA-
	 Z:/?#@!$&'*+,;=.~_%^-]*"|'[][()0-9a-zA-Z:/?#@!$&*+,;=.~_%^-]*'))

SECTION: regex
     Similar to the 'url' mode, but with custom defined regular expressions (and
     launchers).

     To use a custom defined regular expression, you also  need  to  add  a  key
     binding  for it. This is done in the key-binding section, see below for de-
     tails. For example, a regex to detect hash digests (e.g. git commit hashes)
     could look like:

	 [regex:hashes]
	 regex=([a-fA-F0-9]{7,128})
	 launch=path-to-script-or-application ${match}

	 [key-bindings]
	 regex-launch=[hashes] Control+Shift+q
	 regex-copy=[hashes] Control+Mod1+Shift+q

     launch
	 Command to execute when "launching" a regex match. ${match} will be re-
	 placed with the actual URL. Default: not set.

     regex
	 Regular expression to use when matching text. The format is  "POSIX-Ex-
	 tended  Regular  Expressions". Note that the first marked subexpression
	 is used as the match. In other words, if you want the whole regex match
	 to be used, surround all of it with parenthesis: (regex-pattern).

	 Default: not set.

SECTION: cursor
     This section controls the cursor style and color.	Note  that  applications
     can change these at runtime.

     style
	 Configures the default cursor style, and is one of: block, beam, under-
	 line  or  hollow. Note that this can be overridden by applications. De-
	 fault: block.

     unfocused-style
	 Configures how the cursor is rendered when the terminal window is unfo-
	 cused. Possible values are:

	 *   unchanged: render cursor in exactly the same way as when the window
	     has focus.
	 *   hollow: render a block cursor, but hollowed out.
	 *   none: do not display any cursor at all.

     blink
	 Boolean. Enables blinking cursor. Note that this can be  overridden  by
	 applications. Related option: blink-rate. Default: no.

     blink-rate
	 The  rate at which the cursor blinks, when cursor blinking has been en-
	 abled. Expressed in milliseconds between each blink. Default: 500.

     beam-thickness
	 Thickness (width) of the beam styled cursor. The value  is  in  points,
	 and its exact value thus depends on the monitor's DPI. To instead spec-
	 ify  a thickness in pixels, use the px suffix: e.g. beam-thickness=2px.
	 Default: 1.5

     underline-thickness
	 Thickness (height) of the underline styled  cursor.  The  value  is  in
	 points, and its exact value thus depends on the monitor's DPI.

	 To  instead  specify a thickness in pixels, use the px suffix: e.g. un-
	 derline-thickness=2px.

	 Note that if left unset, the cursor's thickness  will	scale  with  the
	 font size, while if set, the size is fixed.

	 Default: font underline thickness.

SECTION: mouse
     hide-when-typing
	 Boolean.  When  enabled,  the	mouse cursor is hidden while typing. De-
	 fault: no.

     alternate-scroll-mode
	 Boolean. This option controls	the  initial  value  for  the  alternate
	 scroll  mode. When this mode is enabled, mouse scroll events are trans-
	 lated to up/down key events when displaying the alternate screen.

	 This lets you scroll with the mouse in e.g. pagers (like less)  without
	 enabling native mouse support in them.

	 Alternate scrolling is not used if the application enables native mouse
	 support.

	 This  option  can be modified by applications at run-time using the es-
	 cape sequences CSI ? 1007 h (enable) and CSI ? 1007 l (disable).

	 Default: yes.

SECTION: touch
     long-press-delay
	 Number of milliseconds to distinguish between a short press and a  long
	 press on the touchscreen.

	 Default: 400.

SECTION: colors-dark, colors-light
     These  two sections controls the 16 ANSI colors, the default foreground and
     background colors, and the extended 256 color palette. Note  that	applica-
     tions can change these at runtime.

     The colors are in RRGGBB format (i.e. plain old 6-digit hex values, without
     prefix).  That  is,  they do not have an alpha component. You can configure
     the background transparency with the alpha option.

     colors-dark is intended to define a dark color theme, and	colors-light  is
     intended  to  define a light color theme. You can switch between them using
     the color-theme-switch-dark, color-theme-switch-light and	color-theme-tog-
     gle key bindings, or by sending SIGUSR1/SIGUSR2 to the foot process.

     The default theme used is colors-dark, unless initial-color-theme=light has
     been set.

     cursor
	 Two  space  separated RRGGBB values (i.e. plain old 6-digit hex values,
	 without prefix) specifying the foreground (text) and  background  (cur-
	 sor) colors for the cursor.

	 Example: ff0000 00ff00 (green cursor, red text)

	 Default: the regular foreground and background colors, reversed.

     foreground
	 Default  foreground color. This is the color used when no ANSI color is
	 being used. Default: 839496.

     background
	 Default background color. This is the color used when no ANSI color  is
	 being used. Default: 002b36.

     regular0, regular1 .. regular7
	 The  eight basic ANSI colors (Black, Red, Green, Yellow, Blue, Magenta,
	 Cyan, White). Default: 242424, f62b5a, 47b413, e3c401, 24acd4,  f2affd,
	 13c299, e6e6e6 (starlight theme, V4).

     bright0, bright1 .. bright7
	 The eight bright ANSI colors (Black, Red, Green, Yellow, Blue, Magenta,
	 Cyan,	White). Default: 616161, ff4d51, 35d450, e9e836, 5dc5f8, feabf2,
	 24dfc4, ffffff (starlight theme, V4).

     dim0, dim1 .. dim7
	 Custom colors to use with dimmed colors. Dimmed colors do not	have  an
	 entry in the color palette. Applications emit them by combining a color
	 value, and a "dim" attribute.

	 By  default,  foot  implements  this by blending the current color with
	 black or white, depending on what the dim-blend-towards option  is  set
	 to  .	This  is a generic approach that applies to both colors from the
	 256-color palette, as well as 24-bit RGB colors.

	 You can change this behavior by setting the  dimN  options.  When  set,
	 foot  will match the current color against the color palette, and if it
	 matches one of the regularN colors, the corresponding dimN  color  will
	 be used.

	 If  instead  the  current  color matches one of the brightN colors, the
	 corresponding regularN color will be used.

	 If the current color does not match any known color, it  is  dimmed  by
	 blending  with black (i.e. the same behavior as if the dimN options are
	 unconfigured). 24-bit RGB colors will typically fall  into  this  cate-
	 gory.

	 Note  that  applications  can change the regularN and brightN colors at
	 runtime. However, they have no way of changing the dimN colors.  If  an
	 application  has  changed  the regularN colors, foot will still use the
	 corresponding dimN color, as configured in foot.ini.

	 Default: not set.

     0 .. 255
	 Arbitrary colors in the 256-color palette. Default: for 0  ..	15,  see
	 regular	and	   bright	 defaults	above;	     see
	 https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit for an explanation
	 of the remainder.

     sixel0 .. sixel15
	 The default sixel  color  palette.  Default:  000000,	3333cc,  cc2121,
	 33cc33, cc33cc, 33cccc, cccc33, 878787, 424242, 545499, 994242, 549954,
	 995499, 549999, 999954, cccccc.

     alpha
	 Background  translucency. A value in the range 0.0-1.0, where 0.0 means
	 completely transparent, and 1.0 is opaque. Default: 1.0.

     alpha-mode
	 Specifies when alpha is applied. One of default, matching or all.

	 default applies alpha to cells with the default background  color,  ex-
	 cluding cells with the same RGB value as the default background color.

	 matching  is  the same as default, but also applies alpha to cells with
	 the same RGB value as the default background color.

	 all applies alpha to all cells, regardless of background color.

	 Default: default

     blur
	 Boolean. When enabled, foot will blur the background (main window only,
	 not CSDs etc), when it is transparent. This feature requires  the  com-
	 positor to implement the ext-background-effect-v1 protocol (and specif-
	 ically, the blur effect).

	 Default: no

     dim-blend-towards
	 Which	color  to  blend  towards  when  "auto"  dimming  a  color  (see
	 dim0..dim7 above). One of black or white. Blending towards black  makes
	 the  text  darker,  while  blending  towards white makes it whiter (but
	 still dimmer than normal text).

	 Default: black (colors-dark), white (colors-light)

     selection-foreground, selection-background
	 Foreground (text) and background color to use	in  selected  text.  De-
	 fault: inverse foreground/background.

     jump-labels
	 Two color values specifying the foreground (text) and background colors
	 to  use when rendering jump labels in URL mode. Default: regular0 regu-
	 lar3.

     scrollback-indicator
	 Two color values specifying the foreground (text) and background (indi-
	 cator itself) colors for the scrollback  indicator.  Default:	regular0
	 bright4.

     search-box-no-match
	 Two color values specifying the foreground (text) and background colors
	 for the scrollback search box, when there are no matches. Default: reg-
	 ular0 regular1.

     search-box-match
	 Two color values specifying the foreground (text) and background colors
	 for  the scrollback search box, when the search box is either empty, or
	 there are matches. Default: regular0 regular3.

     urls
	 Color to use for the underline used to highlight URLs in URL mode.  De-
	 fault: regular3.

     flash
	 Color to use for the terminal window flash. Default: 7f7f00.

     flash-alpha
	 Flash	translucency. A value in the range 0.0-1.0, where 0.0 means com-
	 pletely transparent, and 1.0 is opaque. Default: 0.5.

SECTION: csd
     This section controls the look of the CSDs (Client Side Decorations).  Note
     that  the	default is to not use CSDs, but instead to use SSDs (Server Side
     Decorations) when the compositor supports it.

     Note that unlike the colors defined in the colors section, the color values
     here are in AARRGGBB (i.e. plain old 8-digit hex values) format. I.e.  they
     contain  an alpha component - 00 means completely transparent, and ff fully
     opaque.

     Examples:

     *	 ffffffff: white, fully opaque
     *	 ff000000: black, fully opaque
     *	 7fffffff: white, semi-transparent
     *	 ff00ff00: green, fully opaque

     preferred
	 Which type of window decorations to prefer: client (CSD), server  (SSD)
	 or none.

	 Note  that this is only a hint to the compositor. Depending on composi-
	 tor support, and how it has been configured, it may  instruct	foot  to
	 use CSDs even though this option has been set to server, or render SSDs
	 despite client or none being set.

	 Default: server.

     size
	 Height, in pixels (subject to output scaling), of the titlebar. Setting
	 it to 0 will hide the titlebar, while still showing the border (if bor-
	 der-width is set to a non-zero value). Default: 26.

     color
	 Titlebar color. Default: use the default foreground color.

     font
	 Font  to use for the title bar. This is a list of fonts, similar to the
	 main font option. Note that the font will be sized using the title  bar
	 size. That is, all :size and :pixelsize attributes will be ignored. De-
	 fault: primary font.

     hide-when-maximized
	 Boolean.  When  enabled,  the CSD titlebar is hidden when the window is
	 maximized. To completely disable the titlebar, set size to  0	instead.
	 Default: no.

     double-click-to-maximize
	 Boolean.  When enabled, double-clicking the CSD titlebar will (un)maxi-
	 mize the window. Default: yes.

     border-width
	 Width of the border, in pixels (subject to output scaling).  Note  that
	 the  border encompasses the entire window, including the title bar. De-
	 fault: 0.

     border-color
	 Color of border. By default, the title bar color is used. If the  title
	 bar  color  has  not  been  set, the default foreground color (from the
	 color scheme) is used. Default: titlebar color.

     button-width
	 Width, in pixels (subject to output  scaling),  of  the  minimize/maxi-
	 mize/close buttons. Default: 26.

     button-color
	 Foreground  color on the minimize/maximize/close buttons and the title-
	 bar text. Default: use the default background color.

     button-minimize-color
	 Minimize button's background color. Default: use the  default	regular4
	 color (blue).

     button-maximize-color
	 Maximize  button's  background color. Default: use the default regular2
	 color (green).

     button-close-color
	 Close button's background color.  Default:  use  the  default	regular1
	 color (red).

SECTION: key-bindings
     This section lets you override the default key bindings.

     The general format is action=combo1...comboN. That is, each action may have
     one  or  more key combinations, space separated. Each combination is in the
     form mod1+mod2+key. The names of the modifiers and the key  must  be  valid
     XKB key names.

     Note  that  if  Shift is one of the modifiers, the key must not be in upper
     case. For example, Control+Shift+V will never trigger, but  Control+Shift+v
     will.

     The  default  key	bindings  all use "real" modifiers (Mod1, Mod4 etc), but
     "virtual" modifiers (Alt, Super etc) are allowed.

     xkbcli interactive-wayland can be useful for finding keysym names.

     When matching key presses to key bindings, foot uses a couple of  different
     approaches.

     As an example, let's say you press ctrl+shift+c (assume plain us ASCII lay-
     out).  XKB will tell foot Control+C was pressed. Note the lack of the shift
     modifier, and the upper case 'C'. Internally, this is  called  the  "trans-
     lated" form.

     The  "untranslated"  form	(Control+Shift+c) is derived from the translated
     form, and is what foot tries to match first.

     If no "untranslated" key bindings can be found, foot proceeds  to	checking
     the "translated" variant.

     This  means  you  can  use either form in your foot configuration, and that
     Control+Shift+c (and similar) has higher priority than Control+C. Also note
     that while foot normally detects when the same combination is  assigned  to
     multiple  actions,  it will not detect Control+C vs. Control+Shift+c colli-
     sions. Call it a known bug...

     Finally, foot tries to match the raw key code. Here, the primary layout  is
     queried  for  all	key codes that generate a particular XKB symbol, and the
     pressed key's code is matched against this. For example,  if  you	use  the
     layouts  "us,de(neo)", the 'r' key generates the symbol 'c' in the neo lay-
     out. I.e. to get a 'c', you press 'r'. The match logic described above will
     only match 'c' key bindings (e.g. Control+Shift+c). The raw  mode	however,
     will match 'r' key bindings (e.g. Control+Shift+r). This is useful for non-
     latin  layouts,  where  you would otherwise have to customize all key bind-
     ings.

     A key combination can only be mapped to one action. Let's say you	want  to
     bind  Control+Shift+R to fullscreen. Since this is the default shortcut for
     search-start, you first need to unmap the default binding. This can be done
     by setting action=none; e.g. search-start=none.

     noop
	 All key combinations listed here will not be sent to  the  application.
	 Default: none.

     scrollback-up-page
	 Scrolls   up/back   one   page   in   history.  Default:  Shift+Page_Up
	 Shift+KP_Page_Up.

     scrollback-up-half-page
	 Scrolls up/back half of a page in history. Default: none.

     scrollback-up-line
	 Scrolls up/back a single line in history. Default: none.

     scrollback-down-page
	 Scroll down/forward  one  page  in  history.  Default:  Shift+Page_Down
	 Shift+KP_Page_Down.

     scrollback-down-half-page
	 Scroll down/forward half of a page in history. Default: none.

     scrollback-down-line
	 Scroll down/forward a single line in history. Default: none.

     scrollback-home
	 Scroll to the beginning of the scrollback. Default: none.

     scrollback-end
	 Scroll to the end (bottom) of the scrollback. Default: none.

     clipboard-copy
	 Copies   the  current	selection  into  the  clipboard.  Default:  Con-
	 trol+Shift+c XF86Copy.

     clipboard-paste
	 Pastes from the clipboard. Default: Control+Shift+v XF86Paste.

     primary-paste
	 Pastes from the primary selection. Default: Shift+Insert (also  defined
	 in mouse-bindings).

     search-start
	 Starts a scrollback/history search. Default: Control+Shift+r.

     font-increase
	 Increases  the  font size by 0.5pt. Default: Control+plus Control+equal
	 Control+KP_Add (also defined in mouse-bindings).

     font-decrease
	 Decreases  the  font  size  by  0.5pt.  Default:   Control+minus   Con-
	 trol+KP_Subtract (also defined in mouse-bindings).

     font-reset
	 Resets the font size to the default. Default: Control+0 Control+KP_0.

     spawn-terminal
	 Spawns a new terminal. If the shell has been configured to emit the OSC
	 7  escape  sequence, the new terminal will start in the current working
	 directory. Default: Control+Shift+n.

     minimize
	 Minimizes the window. Default: none.

     maximize
	 Toggle the maximized state. Default: none.

     fullscreen
	 Toggles the fullscreen state. Default: none.

     pipe-visible, pipe-scrollback, pipe-selected, pipe-command-output
	 Pipes the currently visible text, the entire scrollback, the  currently
	 selected  text,  or  the last command's output to an external tool. The
	 syntax for this option is a bit special; the first part of the value is
	 the command to execute enclosed in "[]", followed by the binding(s).

	 You can configure multiple pipes as long as  the  command  strings  are
	 different and the key bindings are unique.

	 Note  that  the command is not automatically run inside a shell; use sh
	 -c "command line" if you need that.

	 Example #1:
	     # Extract currently visible URLs, let user choose one (via fuzzel),
	     then launch firefox with the selected URL
	     pipe-visible=[sh -c "xurls | uniq | tac | fuzzel | xargs  -r  fire-
	     fox"] Control+Print

	 Example #2:
	     # Open scrollback contents in Emacs running in a new foot instance
	     pipe-scrollback=[sh  -c  "f=$(mktemp)  &&	cat - > $f && foot emac-
	     sclient -t $f; rm $f"] Control+Shift+Print

	 Default: none

     show-urls-launch
	 Enter URL mode, where all currently visible URLs are tagged with a jump
	 label with a key sequence that will open the URL (and exit  URL  mode).
	 Default: Control+Shift+o.

     show-urls-persistent
	 Similar  to  show-urls-launch, but does not automatically exit URL mode
	 after activating an URL. Default: none.

     show-urls-copy
	 Enter URL mode, where all currently visible URLs are tagged with a jump
	 label with a key sequence that will place the URL in the clipboard.  If
	 the  hint is completed with an uppercase character, the match will also
	 be pasted. Default: none.

     regex-launch
	 Enter regex mode. This works exactly the same as URL  mode;  all  regex
	 matches  are  tagged  with  a	jump label with a key sequence that will
	 "launch" to match (and exit regex mode).

	 The name of the regex section must be specified in the key binding:

	     [regex:hashes]
	     regex=([a-fA-F0-9]{7,128})
	     launch=path-to-script-or-application ${match}

	     [key-bindings]
	     regex-launch=[hashes] Control+Shift+q
	     regex-copy=[hashes] Control+Mod1+Shift+q

	 Default: none.

     regex-copy
	 Same as regex-launch, but the match is placed in the clipboard, instead
	 of "launched", upon activation. If the hint is completed with an upper-
	 case character, the match will also be pasted. Default: none.

     prompt-prev
	 Jump to the previous, currently not visible, prompt (requires shell in-
	 tegration, see foot(1)). Default: Control+Shift+z.

     prompt-next
	 Jump to the next prompt (requires shell integration, see foot(1)).  De-
	 fault: Control+Shift+x.

     unicode-input
	 Input	a Unicode character by typing its codepoint in hexadecimal, fol-
	 lowed by Enter or Space.

	 For example, to input the character ~A<paragraph> (LATIN SMALL LETTER  O
	 WITH  DIAERESIS, Unicode codepoint 0xf6), you would first activate this
	 key binding, then type: f, 6, Enter.

	 Another example: to input dh (SMILING FACE WITH HEART-SHAPED EYES, Uni-
	 code codepoint 0x1f60d), activate this key binding, then type: 1, f, 6,
	 0, d, Enter.

	 Recognized key bindings in Unicode input mode:

	 *   Enter, Space: commit the Unicode character, then exit this mode.
	 *   Escape, q, Ctrl+c, Ctrl+d, Ctrl+g:  abort	input,	then  exit  this
	     mode.
	 *   0-9, a-f: append next digit to the Unicode's codepoint.
	 *   Backspace: undo the last digit.

	 Note  that  there  is no visual feedback while in this mode. This is by
	 design; foot's Unicode input mode is considered to be a  fallback.  The
	 preferred way of entering Unicode characters, emojis etc is by using an
	 IME.

	 Default: Control+Shift+u.

     color-theme-switch-dark, color-theme-switch-light, color-theme-toggle
	 Switch  between  the  dark color theme (defined in the colors-dark sec-
	 tion), and the light color theme (defined in the colors-light section).

	 color-theme-switch-dark applies the  dark  color  theme  regardless  of
	 which color theme is currently active.

	 color-theme-switch-light  applies  the  light color theme regardless of
	 which color theme is currently active.

	 color-theme-toggle toggles between the primary  and  alternative  color
	 themes.

	 Note:	you  can also send SIGUSR1/SIGUSR2 to the foot process to change
	 the theme (see foot(1) for details.)

	 Default: none

     quit
	 Quit foot. Default: none.

SECTION: search-bindings
     This section lets you override the default key bindings used in  scrollback
     search mode. The syntax is exactly the same as the regular key-bindings.

     cancel
	 Aborts  the  search. The viewport is restored and the primary selection
	 is not updated. Default: Control+g Control+c Escape.

     commit
	 Exit search mode and copy current selection into the primary selection.
	 Viewport is not restored. To copy the selection to  the  regular  clip-
	 board, use Control+Shift+c. Default: Return KP_Enter.

     find-prev
	 Search backwards in the scrollback history for the next match. Default:
	 Control+r.

     find-next
	 Searches  forwards  in  the  scrollback history for the next match. De-
	 fault: Control+s.

     cursor-left
	 Moves the cursor in the search box one character to the left.	Default:
	 Left Control+b.

     cursor-left-word
	 Moves	the cursor in the search box one word to the left. Default: Con-
	 trol+Left Mod1+b.

     cursor-right
	 Moves the cursor in the search box one character to the right. Default:
	 Right Control+f.

     cursor-right-word
	 Moves the cursor in the search box one word to the right. Default: Con-
	 trol+Right Mod1+f.

     cursor-home
	 Moves the cursor in the search box to the beginning of the  input.  De-
	 fault: Home Control+a.

     cursor-end
	 Moves	the  cursor  in the search box to the end of the input. Default:
	 End Control+e.

     delete-prev
	 Deletes the character before the cursor. Default: BackSpace.

     delete-prev-word
	 Deletes the  word  before  the  cursor.  Default:  Mod1+BackSpace  Con-
	 trol+BackSpace.

     delete-next
	 Deletes the character after the cursor. Default: Delete.

     delete-next-word
	 Deletes the word after the cursor. Default: Mod1+d Control+Delete.

     delete-to-start
	 Deletes search input before the cursor. Default: Ctrl+u.

     delete-to-end
	 Deletes search input after the cursor. Default: Ctrl+k.

     extend-char
	 Extend  current  selection  to  the  right,  by one character. Default:
	 Shift+Right.

     extend-to-word-boundary
	 Extend current selection to the right, to the next word  boundary.  De-
	 fault: Control+w Control+Shift+Right.

     extend-to-next-whitespace
	 Extend  the current selection to the right, to the next whitespace. De-
	 fault: Control+Shift+w.

     extend-line-down
	 Extend current selection down one line. Default: Shift+Down.

     extend-backward-char
	 Extend current selection  to  the  left,  by  one  character.	Default:
	 Shift+Left.

     extend-backward-to-word-boundary
	 Extend  current  selection  to the left, to the next word boundary. De-
	 fault: Control+Shift+Left.

     extend-backward-to-next-whitespace
	 Extend the current selection to the left, to the next	whitespace.  De-
	 fault: none.

     extend-line-up
	 Extend current selection up one line. Default: Shift+Up.

     clipboard-paste
	 Paste	from  the  clipboard  into the search buffer. Default: Control+v
	 Control+y Control+Shift+v XF86Paste.

     primary-paste
	 Paste from the primary  selection  into  the  search  buffer.	Default:
	 Shift+Insert.

     unicode-input
	 Unicode  input  mode.	See  key-bindings.unicode-input for details. De-
	 fault: none.

     scrollback-up-page
	 Scrolls  up/back  one	 page	in   history.	Default:   Shift+Page_Up
	 Shift+KP_Page_Up.

     scrollback-up-half-page
	 Scrolls up/back half of a page in history. Default: none.

     scrollback-up-line
	 Scrolls up/back a single line in history. Default: none.

     scrollback-down-page
	 Scroll  down/forward  one  page  in  history.	Default: Shift+Page_Down
	 Shift+KP_Page_Down.

     scrollback-down-half-page
	 Scroll down/forward half of a page in history. Default: none.

     scrollback-down-line
	 Scroll down/forward a single line in history. Default: none.

     scrollback-home
	 Scroll to the beginning of the scrollback. Default: none.

     scrollback-end
	 Scroll to the end (bottom) of the scrollback. Default: none.

SECTION: url-bindings
     This section lets you override the default key bindings used in  URL  mode.
     The syntax is exactly the same as the regular key-bindings.

     Be  careful;  do not use single-letter keys that are also used in [url].la-
     bel-letters, as doing so will make some URLs inaccessible.

     cancel
	 Exits URL mode without opening a URL. Default: Control+g Control+c Con-
	 trol+d Escape.

     toggle-url-visible
	 By default, the jump label only shows the key sequence required to  ac-
	 tivate  it.  This is fine as long as the URL is visible in the original
	 text.

	 But with e.g. OSC-8 URLs (the terminal version of  HTML  anchors,  i.e.
	 "links"),  the text on the screen can be something completely different
	 than the URL.

	 This action toggles between showing and hiding the URL on the jump  la-
	 bel.

	 Default: t.

SECTION: text-bindings
     This section lets you remap key combinations to custom escape sequences.

     The  format  is  text=combo1...comboN. That is, the string to emit may have
     one or more key combinations, space separated. Each combination is  in  the
     form  mod1+mod2+key.  The	names of the modifiers and the key must be valid
     XKB key names.

     The text string specifies the characters, or bytes, to emit when the  asso-
     ciated  key  combination(s)  are  pressed.  There are two ways to specify a
     character:

     *	 Normal, printable characters are written as-is: abcdef.
     *	 Bytes (e.g. ESC) are written as two-digit hexadecimal numbers,  with  a
	 \x prefix: \x1b.

     Example: you would like to remap Super+k to the Up key.

     The  escape  sequence for the Up key is ESC [ A (without the spaces). Thus,
     we need to specify this in foot.ini (Mod4 is  the	XKB  name  for	the  Su-
     per/logo key):

     \x1b[A = Mod4+k

     Another example: to remap Super+c to Control+c:

     \x03 = Mod4+c

SECTION: mouse-bindings
     This section lets you override the default mouse bindings.

     The general format is action=combo1...comboN. That is, each action may have
     one  or  more key combinations, space separated. Each combination is in the
     form mod1+mod2+BTN_<name>[-COUNT]. The names of the modifiers must be valid
     XKB key names, and the button name must be a valid libinput name.	You  can
     find the button names using libinput debug-events.

     The  trailing  COUNT  (number of times the button has to be clicked) is op-
     tional and specifies the click count required to trigger the  binding.  The
     default if COUNT is omitted is 1.

     To  map  wheel events (i.e. scrolling), use the button names BTN_WHEEL_BACK
     (up) and BTN_WHEEL_FORWARD (down). Note that these events never generate  a
     COUNT  larger  than  1.  That is, BTN_WHEEL_BACK+2, for example, will never
     trigger.

     Foot also recognizes tiltable wheels; to map these, use BTN_WHEEL_LEFT  and
     BTN_WHEEL_RIGHT.

     A	modifier+button  combination can only be mapped to one action. Let's say
     you want to bind BTN_MIDDLE to fullscreen. Since BTN_MIDDLE is the  default
     binding  for  primary-paste,  you	first need to unmap the default binding.
     This can be done by setting action=none; e.g. primary-paste=none.

     selection-override-modifiers
	 The modifiers set in this set (which may be set to any  combination  of
	 modifiers, e.g. mod1+mod2+mod3, as well as none) are used to enable se-
	 lecting  text	with the mouse irrespective of whether a client applica-
	 tion currently has the mouse grabbed. These modifiers cannot be used as
	 modifiers in mouse bindings. Because the order of bindings is	signifi-
	 cant,	it  is	best  to set this prior to any other mouse bindings that
	 might use modifiers in the default set. Default: Shift

     The actions to which mouse combos can be bound are listed	below.	All  ac-
     tions listed under key-bindings can be used here as well.

     scrollback-up-mouse
	 Normal screen: scrolls up the contents.

	 Alt screen: send fake KeyUP events to the client application, if alter-
	 nate scroll mode is enabled.

	 Default: BTN_WHEEL_BACK

     scrollback-down-mouse
	 Normal screen: scrolls down the contents.

	 Alt  screen: send fake KeyDOWN events to the client application, if al-
	 ternate scroll mode is enabled.

	 Default: BTN_WHEEL_FORWARD

     select-begin
	 Begin an interactive selection. The selection is finalized, and  copied
	 to  the  primary  selection,  when  the  button  is  released. Default:
	 BTN_LEFT.

     select-begin-block
	 Begin an interactive block selection. The selection is  finalized,  and
	 copied  to the primary selection, when the button is released. Default:
	 Control+BTN_LEFT.

     select-word
	 Begin an interactive word-wise selection, where words are separated  by
	 whitespace  and  all  characters defined by the word-delimiters option.
	 The selection is finalized, and copied to the primary	selection,  when
	 the button is released. Default: BTN_LEFT-2.

     select-word-whitespace
	 Same  as  select-word, but the characters in the word-delimiters option
	 are ignored. I.e only whitespace characters act as delimiters. The  se-
	 lection  is  finalized,  and  copied to the primary selection, when the
	 button is released. Default: Control+BTN_LEFT-2.

     select-quote
	 Begin an interactive "quote" selection. This is similar to select-word,
	 except an entire quote is selected  (that  is,  everything  inside  the
	 quote,  excluding  the  quote	characters). Recognized quote characters
	 are: " and '.

	 If a complete quote cannot be found on the current  logical  row  (only
	 one quote character, or none are found), the entire row is selected.

	 The  selection  is finalized, and copied to the primary selection, when
	 the button is released.

	 After the initial selection has been made, it	behaves  like  a  normal
	 word,	or row selection, depending on whether a quote was found or not.
	 This affects what happens when, for example, extending the selection.

	 Notes:
	 *   Escaped quote characters are not supported ("foo \"bar" will  match
	     'foo \', not 'foo "bar').
	 *   Foot  does not try to handle mismatched quote characters; they will
	     simply not match.
	 *   Nested quotes (using different quote characters) are supported.

	 Default: BTN_LEFT-3.

     select-row
	 Begin an interactive row-wise selection. The  selection  is  finalized,
	 and  copied  to the primary selection, when the button is released. De-
	 fault: BTN_LEFT-4.

     select-extend
	 Interactively extend an existing selection, using the	original  selec-
	 tion  mode (normal, block, word-wise or row-wise). The selection is fi-
	 nalized, and copied to the primary selection, when the  button  is  re-
	 leased. Default: BTN_RIGHT.

     select-extend-character-wise
	 Same  as  select-extend,  but forces the selection mode to normal (i.e.
	 character wise). Note that this causes subsequent select-extend  opera-
	 tions	to  be	character  wise. This action is ignored for block selec-
	 tions. Default: Control+BTN_RIGHT.

     primary-paste
	 Pastes from the primary selection. Default: BTN_MIDDLE.

     font-increase
	 Increases the font size by 0.5pt. Default: Control+BTN_WHEEL_BACK (also
	 defined in key-bindings).

     font-decrease
	 Decreases the font size by  0.5pt.  Default:  Control+BTN_WHEEL_FORWARD
	 (also defined in key-bindings).

TWEAK
     This section is for advanced users and describes configuration options that
     can be used to tweak foot's low-level behavior.

     These options are not included in the example configuration. You should not
     change these unless you understand what they do.

     Note  that  these	options  may  change, or be removed at any time, without
     prior notice.

     When reporting bugs, please mention if, and to what, you have  changed  any
     of these options.

     scaling-filter
	 Overrides  the  default  scaling  filter  used when down-scaling bitmap
	 fonts (e.g. emoji fonts). Possible values are none, nearest,  bilinear,
	 impulse,  box,  linear,  cubic,  gaussian,  lanczos2, lanczos3 or lanc-
	 zos3-stretched.

	 Default: lanczos3.

     overflowing-glyphs
	 Boolean. When enabled, glyphs wider than their cell(s) are  allowed  to
	 render into one additional neighbouring cell.

	 One use case for this are fonts with wide italic characters that "bend"
	 into  the  next cell. Without this option, such glyphs will appear "cut
	 off".

	 Another use case are fonts with "icon" characters in the  Unicode  pri-
	 vate  usage  area, e.g. Nerd Fonts, or Powerline Fonts and legacy emoji
	 characters like WHITE FROWNING FACE.

	 Note: might impact performance depending on the font  used.  Especially
	 small	font sizes can cause many overflowing glyphs because of subpixel
	 rendering.

	 Default: yes.

     render-timer
	 Enables a frame rendering timer, that prints the time it takes to  ren-
	 der  each frame, in microseconds, either on-screen, to stderr, or both.
	 Valid values are none, osd, log and both. Default: none.

     box-drawing-base-thickness
	 Line thickness to use for LIGHT box drawing line characters, in points.
	 This value is converted to pixels using the  monitor's  DPI,  and  then
	 multiplied  with  the	cell  size. The end result is that a larger font
	 (and thus larger cells) result in thicker lines. Default: 0.04.

     box-drawing-solid-shades
	 Boolean. When enabled, box drawing "shades" (e.g. LIGHT  SHADE,  MEDIUM
	 SHADE and DARK SHADE) are rendered as solid blocks using a darker vari-
	 ant of the current foreground color.

	 When  disabled, they are instead rendered as checker box pattern, using
	 the current foreground color as is.

	 Default: yes.

     delayed-render-lower, delayed-render-upper
	 These two values control the timeouts (in nanoseconds) that are used to
	 mitigate screen flicker caused by  clients  writing  large,  non-atomic
	 screen updates.

	 If  a client splits up a screen update over multiple write(3) calls, we
	 may end up rendering an intermediate frame, quickly followed by another
	 frame with the final screen content. For example, the client may  erase
	 part of the screen (or scroll) in one write, and then write new content
	 in  one  or more subsequent writes. Rendering the frame when the screen
	 has been erased, but not yet filled with new content will be  perceived
	 as screen flicker.

	 The   real   solution	to  this  is  Application  Synchronized  Updates
	 (https://gitlab.freedesktop.org/terminal-wg/specifications/-/merge_re-
	 quests/2).

	 The problem with this is twofold - first, it has not yet been standard-
	 ized, and thus there are not many terminal emulators that implement  it
	 (foot	does  implement it), and second, applications must be patched to
	 use it.

	 Until this has happened, foot offers an interim workaround; an  attempt
	 to  mitigate the screen flicker without affecting either performance or
	 latency.

	 It is based on the fact that the screen is updated at a fixed	interval
	 (typically  60Hz). For us, this means it does not matter if we render a
	 new frame at the beginning of a frame interval, or at	the  end.  Thus,
	 the goal is to introduce a delay between receiving client data and ren-
	 dering the resulting state, but without causing a frame skip.

	 While	it  should be possible to estimate the amount of time left until
	 the next frame, foot's algorithm is currently not that advanced, but is
	 based on statistics I guess you could say - the delay we  introduce  is
	 so  small that the risk of pushing the frame over to the next frame in-
	 terval is also very small.

	 Now, that was a lot of text. But what is it foot actually does?

	 When receiving client data, it schedules a timer,  the  delayed-render-
	 lower.  If  we do not receive any more client data before the timer has
	 run out, we render the frame. If however, we do receive more data,  the
	 timer is re-scheduled. That is, each time we receive client data, frame
	 rendering is delayed another delayed-render-lower nanoseconds.

	 Now, while this works very well with most clients, it would be possible
	 to construct a malicious client that keeps writing data at a slow pace.
	 To  the  user,  this would look like foot has frozen as we never get to
	 render a new frame. To prevent this, an upper limit is set  -	delayed-
	 render-upper. If this timer runs out, we render the frame regardless of
	 what the client is doing.

	 If changing these values, note that the lower timeout must be set lower
	 than the upper timeout, but that this is not verified by foot. Further-
	 more,	both  values  must be less than 16ms (that is, 16000000 nanosec-
	 onds).

	 You can disable the feature altogether by setting either value to 0. In
	 this case, frames are rendered "as soon as possible".

	 Default: lower=500000 (0.5ms), upper=8333333 (8.3ms - half a frame  in-
	 terval).

     damage-whole-window
	 Boolean. When enabled, foot will 'damage' the entire window each time a
	 frame	has  been rendered. This forces the compositor to redraw the en-
	 tire window. If disabled, foot will only 'damage' updated rows.

	 There is normally no reason to enable this. However, it has  been  seen
	 to workaround an issue with fractional scaling in Gnome.

	 Note that enabling this option is likely to increase CPU and/or GPU us-
	 age (by the compositor, not by foot), and may have a negative impact on
	 battery life.

	 Default: no.

     grapheme-shaping
	 Boolean.  When  enabled,  foot will use utf8proc to do grapheme cluster
	 segmentation while parsing "printed" text.  Then,  when  rendering,  it
	 will use fcft (if compiled with HarfBuzz support) to shape the grapheme
	 clusters.

	 This  is  required  to  render  e.g. flag (emoji) sequences, keycap se-
	 quences, modifier  sequences,	zero-width-joiner  (ZWJ)  sequences  and
	 emoji	tag sequences. It might also improve rendering of composed char-
	 acters, depending on font.

	     *	 foot must have been compiled with utf8proc support
	     *	 fcft must have been compiled with HarfBuzz support

	 This option can also be set runtime with DECSET/DECRST 2027.

	 See also: grapheme-width-method.

	 Default: yes

     grapheme-width-method
	 Selects which method to use when calculating the width (i.e. number  of
	 columns) of a grapheme cluster. One of wcswidth, double-width and max.

	 wcswidth  simply  adds  together the individual width of all codepoints
	 making up the cluster.

	 double-width does the same, but limits the maximum number of columns to
	 2. This is more correct, but may break some applications since applica-
	 tions typically use wcswidth(3) internally to calculate the width. This
	 results in cursor de-synchronization issues.

	 max uses the width of the largest codepoint in the cluster.

	 Default: double-width

     font-monospace-warn
	 Boolean. When enabled, foot will use heuristics to try  to  verify  the
	 primary font is a monospace font, and warn if it is not.

	 Disable  this if you still want to use the font, even if foot thinks it
	 is not monospaced.

	 You may also want to disable it to get slightly faster startup times.

	 Default: yes

     max-shm-pool-size-mb
	 This option controls the amount of virtual address space  used  by  the
	 pixmap memory to which the terminal screen content is rendered.

	 It does not change how much physical memory foot uses.

	 Foot  uses a memory mapping trick to implement fast rendering of inter-
	 active scrolling (typically, but applies to "slow"  scrolling	in  gen-
	 eral).  Example: holding down the 'up' or 'down' arrow key to scroll in
	 a text editor.

	 For this to work, it needs a large amount  of	virtual  address  space.
	 Again, note that this is not physical memory.

	 On  a	normal x64 based computer, each process has 128TB of virtual ad-
	 dress space, and newer ones have 64PB. This is  an  insane  amount  and
	 most applications do not use anywhere near that amount.

	 Each  foot  terminal  window  can allocate up to 2GB of virtual address
	 space. With 128TB of address space, that means a maximum of 65536  win-
	 dows in server/daemon mode (for 2GB). That should be enough, yes?

	 However,  the Wayland compositor also needs to allocate the same amount
	 of virtual address space. Thus, it has a slightly higher chance of run-
	 ning out of address space since it needs to host  all	running  Wayland
	 clients in the same way, at the same time.

	 In  the  off chance that this becomes a problem for you, you can reduce
	 the amount used with this option.

	 Or, for optimal performance, you can increase it to the maximum allowed
	 value, 2GB (but note that you most likely will not notice  any  differ-
	 ence compared to the default value).

	 Setting it to 0 disables the feature.

	 Limitations:
	     *	 only supported on 64-bit architectures
	     *	 only supported on Linux

	 Default: 512. Maximum allowed: 2048 (2GB).

     min-stride-alignment
	 This option controls the minimum stride alignment, in bytes, when allo-
	 cating SHM buffers.

	 In  some  circumstances, a compositor can import foot's SHM buffers di-
	 rectly to the GPU, without copying the buffer to GPU memory  (typically
	 on  integrated graphics). Different drivers have different requirements
	 for this, and one of those requirements is typically the stride  align-
	 ment. At the time of writing, AMD GPUs require 256-byte alignment.

	 Note that doing a direct import typically disables immediate buffer re-
	 lease (if the compositor supports that), which means foot has to double
	 buffer. This adds a performance penalty in foot, but the overall system
	 performance should still be better.

	 If you are not using integrated graphics, or if the compositor does not
	 support  GPU  direct imports, this option has close to zero impact. You
	 can save a small amount of memory by setting this to 0.

	 Ultimately, it is up to the compositor to decide whether to do  immedi-
	 ate buffer releases, or try to optimize GPU imports.

	 Default: 256

     sixel
	 Boolean. When enabled, foot will process sixel images. Default: yes

     dim-amount
	 Amount by which dimmed text is darkened. Default: 1.5.

     bold-text-in-bright-amount
	 Amount  by  which bold fonts are brightened when bold-text-in-bright is
	 set to yes (the palette-based variant is not affected by this	option).
	 Default: 1.3.

     surface-bit-depth
	 Selects  which  RGB  bit  depth  to use for image buffers. One of auto,
	 8-bit, 10-bit or 16-bit.

	 auto chooses bit depth depending on other settings, and availability.

	 8-bit, uses 8 bits for each color channel, alpha included. This is  the
	 default when gamma-correct-blending=no.

	 10-bit  uses  10  bits  for  each RGB channel, and 2 bits for the alpha
	 channel. Thus, it provides higher precision color channels, but a lower
	 precision alpha channel.

	 16-bit 16 bits for each color channel, alpha  included.  If  available,
	 this is the default when gamma-correct-blending=yes.

	 Note  that  both  10-bit  and 16-bit are much slower than 8-bit; if you
	 want to use gamma-correct blending, and if you prefer speed (throughput
	 and input latency) over  accurate  colors,  you  can  set  surface-bit-
	 depth=8-bit explicitly.

	 Default: auto

     pre-apply-damage
	 Boolean. When enabled, foot will attempt to "pre-apply" the damage from
	 the last frame when foot is forced to double-buffer (i.e. when the com-
	 positor  does not release SHM buffers immediately). All text after this
	 assumes the compositor is not releasing buffers immediately.

	 When this option is disabled, each time foot needs to render  a  frame,
	 it  has  to  first copy over areas that changed in the last frame (i.e.
	 all changes between the last two frames).  This  is  basically  a  mem-
	 cpy(3), which can be slow if the changed area is large. It is also done
	 on  the  main	thread,  which means foot cannot do anything else at the
	 same time; no other rendering, no VT parsing. After  the  changes  have
	 been  brought	over  to the new frame, foot proceeds with rendering the
	 cells that has changed between the last frame and the new frame.

	 When this option is enabled, the changes between the  last  two  frames
	 are  brought over to what will become the next frame before foot starts
	 rendering the next frame. As soon as the compositor releases the previ-
	 ous buffer (typically right after foot has pushed a  new  frame),  foot
	 kicks	off  a thread that copies over the changes to the newly released
	 buffer. Since this is done in a thread, foot  can  continue  processing
	 input	at  the same time. Later, when it is time to render a new frame,
	 the changes have already been transferred,  and  foot	can  immediately
	 start with the actual rendering.

	 Thus, having this option enabled improves both performance (copying the
	 last two frames' changes is threaded), and improves input latency (ren-
	 dering the next frame no longer has to first bring over the changes be-
	 tween the last two frames).

	 Default: yes

SEE ALSO
     foot(1), footclient(1)

				   2026-08-27			     foot.ini(5)

home | help