Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

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]
	 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 our 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  our
	 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 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. The 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 contains 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]

	 This will add at least X pixels on both the left and right sides, and Y
	 pixels on the top and bottom sides.

	 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 is 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 maxmized,  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, 1, or 2.

	 1  uses the colors defined in the colors section, while 2 uses the col-
	 ors from the colors2 section.

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

	 Default: 1

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

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

     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 blink, 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
     This  section controls the 16 ANSI colors, the default foreground and back-
     ground colors, and the extended 256 color palette. Note  that  applications
     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.

     In the context of private mode 2031 (Dark and Light  Mode	detection),  the
     primary  theme (i.e. the colors section) is considered to be the dark theme
     (since the default theme is dark).

     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

     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), white (colors2)

     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: colors2
     This section defines an alternative color theme. It has the exact same keys
     as the colors section. The default values are the	same,  except  for  dim-
     blend-towards, which defaults to white instead.

     Note  that values are not inherited. That is, if you set a value in colors,
     but not in colors2, the value from colors is not inherited by colors2.

     In the context of private mode 2031 (Dark and Light  Mode	detection),  the
     alternative  theme (i.e. the colors2 section) is considered to be the light
     theme (since the default, the primary theme, is dark).

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. The 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. 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 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-1, color-theme-switch-2, color-theme-toggle
	 Switch between the primary color theme (defined in the colors section),
	 and the alternative color theme (defined in the colors2 section).

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

	 color-theme-switch-2 applies the alternative 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  neither  performance
	 nor 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 open is enabled, the changes between the last two frames are
	 brought over to what will become the next frame before foot starts ren-
	 dering the next frame. As soon as the compositor releases the	previous
	 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
	 (rending the next frame no longer has to first bring over  the  changes
	 between the last two frames).

	 Default: yes

SEE ALSO
     foot(1), footclient(1)

				   2026-06-11			     foot.ini(5)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=foot.ini&sektion=5&manpath=FreeBSD+Ports+15.1.quarterly>

home | help