hide:
- toc
WezTerm is a powerful cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
Features
- Runs on Linux, macOS, Windows 10 and FreeBSD
- Multiplex terminal panes, tabs and windows on local and remote hosts, with native mouse and scrollback
- Ligatures, Color Emoji and font fallback, with true color and dynamic color schemes.
- Hyperlinks
- A full list of features can be found here
Looking for a configuration reference?
These docs are searchable: press S
or click on the magnifying glass icon
to activate the search function!
hide:
- toc
Available Features
- Runs on Linux, macOS, Windows 10 and FreeBSD
- Multiplex terminal panes, tabs and windows on local and remote hosts, with native mouse and scrollback
- Ligatures, Color Emoji and font fallback, with true color and dynamic color schemes.
- Hyperlinks
- Searchable Scrollback (use mouse wheel and
Shift-PageUp
andShift PageDown
to navigate, Ctrl-Shift-F to activate search mode) - xterm style selection of text with mouse; paste selection via
Shift-Insert
(bracketed paste is supported!) - SGR style mouse reporting (works in vim and tmux)
- Render underline, double-underline, italic, bold, strikethrough (most other terminal emulators do not support as many render attributes)
- Configuration via a configuration file with hot reloading
- Multiple Windows (Hotkey:
Super-N
) - Splits/Panes (Split horizontally/vertically:
Ctrl-Shift-Alt-%
andCtrl-Shift-Alt-"
, move between panes:Ctrl-Shift-ArrowKey
) - Tabs (Hotkey:
Super-T
, next/prev:Super-Shift-[
andSuper-Shift-]
, go-to:Super-[1-9]
) - SSH client with native tabs
- Connect to serial ports for embedded/Arduino work
- Connect to a local multiplexer server over unix domain sockets
- Connect to a remote multiplexer using SSH or TLS over TCP/IP
- iTerm2 compatible image protocol support, and built-in imgcat command
- Kitty graphics support
- Sixel graphics support (experimental: starting in
20200620-160318-e00b076c
)
WezTerm provides a searchable scrollback buffer with a configurable maximum size limit that allows you to review information that doesn't fit in the physical window size. As content is printed to the display the display may be scrolled up to accommodate newly added lines. The scrolled lines are moved into the scrollback buffer and can be reviewed by scrolling the window up or down.
This section describes working with the scrollback and discusses some configuration options; be sure to read the configuration docs to learn how to change your settings!
Controlling the scrollback size
This value serves as an upper bound on the number of lines. The larger this value, the more memory is required to manage the tab. If you have a lot of long lived tabs then making this value very large may put some pressure on your system depending on the amount of RAM you have available.
-- How many lines of scrollback you want to retain per tab
config.scrollback_lines = 3500
Clearing the scrollback buffer
By default, CTRL-SHIFT-K
and CMD-K
will trigger the ClearScrollback
action and discard the contents of the scrollback buffer. There is no way
to undo discarding the scrollback.
See the ClearScrollback docs for information on rebinding this key.
Enable/Disable scrollbar
You can control whether WezTerm displays a scrollbar via your configuration file:
-- Enable the scrollbar.
-- It will occupy the right window padding space.
-- If right padding is set to 0 then it will be increased
-- to a single cell width
config.enable_scroll_bar = true
You may change the color of the scrollbar if you wish!
Scrolling without a scrollbar
By default, SHIFT-PageUp
and SHIFT-PageDown
will adjust the viewport scrollback position
by one full screen for each press.
See the ScrollByPage docs for more information on this key binding assignment.
Searching the scrollback
By default, CTRL-SHIFT-F
and CMD-F
(F
for Find
) will activate the
search overlay in the current tab.
When the search overlay is active the behavior of wezterm changes:
- Typing (or pasting) text will populate the search pattern in the bar at the bottom of the screen.
- Text from the scrollback that matches the search pattern will be highlighted and the number of matches shown in the search bar.
- The bottom-most match will be selected and the viewport scrolled to show the selected text.
Enter
,UpArrow
andCTRL-P
will cause the selection to move to any prior matching text.PageUp
will traverse to previous matches one page at a time.CTRL-N
andDownArrow
will cause the selection to move to any next matching text.PageDown
will traverse to the next match one page at a time.CTRL-R
will cycle through the pattern matching mode; the initial mode is case-sensitive text matching, the next will match ignoring case and the last will match using the regular expression syntax described here. The matching mode is indicated in the search bar.CTRL-U
will clear the search pattern so you can start over.CTRL-SHIFT-C
will copy the selected text to the clipboard.Escape
will cancel the search overlay, leaving the currently selected text selected with the viewport scrolled to that location.
Configurable search mode key assignments
{{since('20220624-141144-bd1b7c5d')}}
The key assignments for search mode are specified by the search_mode
Key Table.
You may use wezterm.gui.default_key_tables to obtain the defaults and extend them. In earlier versions of wezterm there wasn't a way to override portions of the key table, only to replace the entire table.
The default configuration at the time that these docs were built (which may be more recent than your version of wezterm) is shown below.
You can see the configuration in your version of wezterm by running
wezterm show-keys --lua --key-table search_mode
.
{% include "examples/default-search-mode-key-table.markdown" %}
(Those assignments reference CopyMode
because search mode is a facet of Copy Mode).
Configuring Saved Searches
{{since('20200607-144723-74889cd4')}}
If you find that you're often searching for the same things then you may wish to assign a keybinding to trigger that search.
For example, if you find that you're frequently running git log
and then reaching
for your mouse to copy and paste a relevant git commit hash then you might like
this:
config.keys = {
-- search for things that look like git hashes
{
key = 'H',
mods = 'SHIFT|CTRL',
action = wezterm.action.Search { Regex = '[a-f0-9]{6,}' },
},
}
With that in your config you can now:
CTRL-SHIFT-H
to highlight all the git hashes and select the closest one to the bottom of the screen.- Use
ENTER
/CTRL-N
/CTRL-P
to cycle through the git hashes CTRL-SHIFT-C
to copyEscape
CTRL-SHIFT-V
(orSHIFT-Insert
) to Paste
without needing to reach for your mouse.
See the Search action docs for more information on
using the Search
action.
{{since('20210502-154244-3f7122cb')}}
Quick Select mode allows you to quickly highlight text that matches commonly copied patterns, select a match by typing a one-or-two character prefix and copy it to the clipboard.
The QuickSelect
key assignment is used to enter quick select mode; it is
bound to CTRL-SHIFT-SPACE
by default.
When quick select mode is activated, the terminal is searched for items that match the patterns defined by the quick_select_patterns configuration combined with a default set of patterns that match things such as URL and path fragments, git hashes, ip addresses and numbers.
Matches are highlighted and shown with a one or two character prefix derived from the quick_select_alphabet configuration. The colors of the highlighted text can be configured.
The bottom of the screen shows your input text along with a hint as to what to do next; typing in a highlighted prefix will cause that text to be selected and copied to the clipboard, and quick select mode will be cancelled.
Typing in the uppercase form of the prefix will copy AND paste the highlighted text, and cancel quick select mode.
Pressing ESCAPE
will cancel quick select mode.
{{since('20200607-144723-74889cd4')}}
Copy mode allows you to make selections using the keyboard; no need to reach for your mouse or trackpad. Copy mode is similar to quick select mode but is geared up for describing selections based on keyboard control, whereas quick select mode is used to quickly select and copy commonly used patterns. The colors of the highlighted/selected text can be configured.
The ActivateCopyMode
key assignment is used to enter copy mode; it is
bound to CTRL-SHIFT-X
by default.
When copy mode is activated, the title is prefixed with "Copy Mode" and the behavior of the tab is changed; keyboard input now controls the cursor and allows moving it through the scrollback, scrolling the viewport as needed, in a style similar to that of the Vim editor.
Move the cursor to the start of the region you wish to select and press v
to
toggle selection mode (it is off by default), then move the cursor to the end
of that region. You can then use Copy
(by default: CTRL-SHIFT-C
) to copy
that region to the clipboard.
Key Assignments
The default key assignments in copy mode are as follows:
Action | Key Assignment |
---|---|
Activate copy mode | Ctrl + Shift + X |
Copy and exit copy mode | y |
Exit copy mode | Esc |
Ctrl + C | |
Ctrl + G | |
q | |
Cell selection | v |
Line selection | Shift + V |
Rectangular selection | Ctrl + V {{since('20220624-141144-bd1b7c5d', inline=True)}} |
Move Left | LeftArrow |
h | |
Move Down | DownArrow |
j | |
Move Up | UpArrow |
k | |
Move Right | RightArrow |
l | |
Move forward one word | Alt + RightArrow |
Alt + F | |
Tab | |
w | |
Move backward one word | Alt + LeftArrow |
Alt + B | |
Shift + Tab | |
b | |
Move forward one word end | e {{since('20230320-124340-559cb7b0', inline=True)}} |
Move to start of this line | 0 |
Home | |
Move to start of next line | Enter |
Move to end of this line | $ |
End | |
Move to start of indented line | Alt + M |
^ | |
Move to bottom of scrollback | Shift + G |
Move to top of scrollback | g |
Move to top of viewport | Shift + H |
Move to middle of viewport | Shift + M |
Move to bottom of viewport | Shift + L |
Move up one screen | PageUp |
Ctrl + B | |
Move up half a screen | Ctrl + U {{since('20230320-124340-559cb7b0', inline=True)}} |
Move down one screen | PageDown |
Ctrl + F | |
Move down half a screen | Ctrl + D {{since('20230320-124340-559cb7b0', inline=True)}} |
Move to other end of the selection | o |
Move to other end of the selection horizontally | Shift + O (useful in Rectangular mode) |
Configurable Key Assignments
{{since('20220624-141144-bd1b7c5d')}}
The key assignments for copy mode are specified by the copy_mode
Key Table.
You may provide your own definition of this key table if you wish to customize it.
You may use wezterm.gui.default_key_tables to obtain the defaults and extend them. In earlier versions of wezterm there wasn't a way to override portions of the key table, only to replace the entire table.
The default configuration at the time that these docs were built (which may be more recent than your version of wezterm) is shown below.
You can see the configuration in your version of wezterm by running
wezterm show-keys --lua --key-table copy_mode
.
{% include "examples/default-copy-mode-key-table.markdown" %}
wezterm has support for both implicit and explicit hyperlinks.
Implicit Hyperlinks
Implicit hyperlinks are produced by running a series of rules over the output displayed in the terminal to produce a hyperlink. There is a default rule to match URLs and make them clickable, but you can also specify your own rules to make your own links.
As an example, at my place of work many of our internal tools use T123
to
indicate task number 123 in our internal task tracking system. It is desirable
to make this clickable, and that can be done with the following configuration
in your ~/.wezterm.lua
:
local wezterm = require 'wezterm'
local config = {}
-- Use the defaults as a base
config.hyperlink_rules = wezterm.default_hyperlink_rules()
-- make task numbers clickable
-- the first matched regex group is captured in $1.
table.insert(config.hyperlink_rules, {
regex = [[\b[tt](\d+)\b]],
format = 'https://example.com/tasks/?t=$1',
})
-- make username/project paths clickable. this implies paths like the following are for github.
-- ( "nvim-treesitter/nvim-treesitter" | wbthomason/packer.nvim | wezterm/wezterm | "wezterm/wezterm.git" )
-- as long as a full url hyperlink regex exists above this it should not match a full url to
-- github or gitlab / bitbucket (i.e. https://gitlab.com/user/project.git is still a whole clickable url)
table.insert(config.hyperlink_rules, {
regex = [[["]?([\w\d]{1}[-\w\d]+)(/){1}([-\w\d\.]+)["]?]],
format = 'https://www.github.com/$1/$3',
})
return config
See also hyperlink_rules and default_hyperlink_rules.
Explicit Hyperlinks
wezterm supports the relatively new Hyperlinks in Terminal Emulators specification that allows emitting text that can be clicked and resolve to a specific URL, without the URL being part of the display text. This allows for a cleaner presentation.
The gist of it is that running the following bash one-liner:
printf '\e]8;;http://example.com\e\\This is a link\e]8;;\e\\\n'
will output the text This is a link
that when clicked will open
http://example.com
in your browser.
wezterm supports integrating with the shell through the following means:
OSC 7
Escape sequences to advise the terminal of the working directoryOSC 133
Escape sequence to define Input, Output and Prompt zonesOSC 1337
Escape sequences to set user vars for tracking additional shell state
OSC
is escape sequence jargon for Operating System Command.
These sequences enable some improved user experiences, such as being able to spawn new panes, tabs and windows with the same current working directory as the current pane, jumping through the scrollback to the start of an earlier command, or conveniently selecting the complete output from a command.
In order for these features to be enabled, you will need to configure your shell program to emit the escape sequences at the appropriate place.
You can find some examples for various shells in the wezterm repo.
To use this file to setup shell integration in wezterm with Bash or Zsh, you can
copy the file to your computer and source it via . /path/to/file.sh
in your .bashrc
or .zshrc
, or you can install it at /etc/profile.d
on most unix systems.
Xonsh is supported via a term-integrations plugin.
Starting with version 20210314-114017-04b7cedd, the Fedora and Debian packages automatically activate shell integration for Bash and Zsh. Starting with version 20230320.124340.559cb7b0, the Arch Linux package also automatically activate it.
If you're on another system, more information on how these escapes work can be found below.
Learn more about OSC 133 Semantic Prompt Escapes.
User Vars
OSC 1337
provides a means for setting user vars, which are somewhat similar
to environment variables, except that they are variables associated with a
given pane rather than a process.
Installing the wezterm shell integration will define the following user vars by default:
WEZTERM_PROG
- the command line being executed by the shellWEZTERM_USER
- holds the output fromid -un
; the current user nameWEZTERM_HOST
- holds the output fromhostname
; the hostname that the shell is running onWEZTERM_IN_TMUX
- holds1
if the shell is running inside tmux,0
otherwise
If you are a tmux user, you must ensure that you have set -g allow-passthrough on
set
in your tmux.conf for user vars to work.
Those vars will be updated each time the prompt is shown and just prior to executing a command.
The shell integration provides a shell function named __wezterm_set_user_var
which can be
used to set your own user vars.
Setting a user var will generate events in the window that contains the corresponding pane:
- user-var-changed, which allows you to directly take action when a var is set/changed.
- update-status which allows you to update left/right status items
- the title and tab bar area will then update and trigger any associated events as part of that update
You can access the complete set of user vars in a given pane by calling
pane:get_user_vars(), or by accessing
the user_vars
field in a PaneInformation
struct.
You may wish to use this information to adjust what is shown in your tab titles or in the status area.
OSC 7 Escape sequence to set the working directory
OSC 7
means Operating System Command number 7. This is an escape sequence
that originated in the macOS Terminal application that is used to advise the
terminal of the current working directory.
An application (usually your shell) can be configured to emit this escape sequence when the current directory changes, or just to emit it each time it prints the prompt.
The current working directory can be specified as a URL like this:
printf "\033]7;file://HOSTNAME/CURRENT/DIR\033\\"
When the current working directory has been set via OSC 7, spawning a new tab will use the current working directory of the current tab, so that you don't have to manually change the directory.
If you are on a modern Fedora installation, the defaults for bash and
zsh source a vte.sh
script that configures the shell to emit this
sequence. On other systems you will likely need to configure this
for yourself.
OSC 7 on Windows with cmd.exe
cmd.exe
doesn't allow a lot of flexibility in configuring the prompt,
but fortunately it does allow for emitting escape sequences. You
can use the set_environment_variables
configuration to pre-configure
the prompt environment in your .wezterm.lua
; this example configures
the use of OSC 7 as well as including the time and current directory in
the visible prompt with green and purple colors, and makes the prompt
span multiple lines:
config.set_environment_variables = {
prompt = '$E]7;file://localhost/$P$E\\$E[32m$T$E[0m $E[35m$P$E[36m$_$G$E[0m ',
}
OSC 7 on Windows with powershell
You can configure a custom prompt in powershell by creating/editing your powershell profile and defining a function like this:
function prompt {
$p = $executionContext.SessionState.Path.CurrentLocation
$osc7 = ""
if ($p.Provider.Name -eq "FileSystem") {
$ansi_escape = [char]27
$provider_path = $p.ProviderPath -Replace "\\", "/"
$osc7 = "$ansi_escape]7;file://${env:COMPUTERNAME}/${provider_path}${ansi_escape}\"
}
"${osc7}PS $p$('>' * ($nestedPromptLevel + 1)) ";
}
OSC 7 on Windows with powershell (with starship)
When using Starship, since it has taken control of the prompt, hooking in to set OSC 7 can be achieved this way instead:
$prompt = ""
function Invoke-Starship-PreCommand {
$current_location = $executionContext.SessionState.Path.CurrentLocation
if ($current_location.Provider.Name -eq "FileSystem") {
$ansi_escape = [char]27
$provider_path = $current_location.ProviderPath -replace "\\", "/"
$prompt = "$ansi_escape]7;file://${env:COMPUTERNAME}/${provider_path}$ansi_escape\"
}
$host.ui.Write($prompt)
}
Using Clink on Windows Systems
Clink brings bash style line editing,
completions and autosuggestions to your Windows cmd.exe experience. If you
haven't installed clink to be the global default on your system, you can
configure wezterm to launch clink by setting the default_prog
configuration
in your .wezterm.lua
; for example, if you have extracted clink to c:\clink
you might configure this:
local wezterm = require 'wezterm'
local config = {}
config.set_environment_variables = {}
if wezterm.target_triple == 'x86_64-pc-windows-msvc' then
-- Use OSC 7 as per the above example
config.set_environment_variables['prompt'] =
'$E]7;file://localhost/$P$E\\$E[32m$T$E[0m $E[35m$P$E[36m$_$G$E[0m '
-- use a more ls-like output format for dir
config.set_environment_variables['DIRCMD'] = '/d'
-- And inject clink into the command prompt
config.default_prog =
{ 'cmd.exe', '/s', '/k', 'c:/clink/clink_x64.exe', 'inject', '-q' }
end
return config
Now, rather than just running cmd.exe
on its own, this will cause cmd.exe
to self-inject the clink line editor.
wezterm implements support for the iTerm2 inline images
protocol and provides a handy
imgcat
subcommand to make it easy to try out. Because the protocol is
just a protocol, wezterm's imgcat
also renders images in iTerm2.
To render an image inline in your terminal:
$ wezterm imgcat /path/to/image.png
Note that the image protocol isn't fully handled by multiplexer sessions at this time.
{{since('20220319-142410-0fcdea07')}}
WezTerm supports an extension to the protocol; passing doNotMoveCursor=1
as
an argument to the File
escape sequence causes wezterm to not move the cursor
position after processing the image.
wezterm uses an embedded ssh library to provide an integrated SSH client. The client can be used to make ad-hoc SSH connections to remote hosts by invoking the client like this:
$ wezterm ssh wez@my.server
(checkout wezterm ssh -h
for more options).
When invoked in this way, wezterm may prompt you for SSH authentication and once a connection is established, open a new terminal window with your requested command, or your shell if you didn't specify one.
Creating new tabs or panes will each create a new channel in your existing session so you won't need to re-authenticate for additional tabs that you create.
SSH sessions created in this way are non-persistent and all associated tabs will die if your network connection is interrupted.
Take a look at the multiplexing section for an alternative configuration that connects to a remote wezterm instance and preserves your tabs.
The ssh_backend configuration can be used to specify which ssh library is used.
{{since('20210404-112810-b63a949d')}}
wezterm is now able to parse ~/.ssh/config
and /etc/ssh/ssh_config
and respects the following options:
IdentityAgent
IdentityFile
Hostname
User
Port
ProxyCommand
Host
(including wildcard matching)UserKnownHostsFile
IdentitiesOnly
BindAddress
All other options are parsed but have no effect. Notably, neither Match
or
Include
will do anything.
{{since('20210502-154244-3f7122cb:')}}
Match
is now recognized but currently supports only single-phase (final
,
canonical
are not supported) configuration parsing for Host
and
LocalUser
. Exec
based matches are recognized but not supported.
{{since('20210814-124438-54e29167:')}}
Include
is now supported.
{{since('nightly')}}
ProxyUseFDpass
is now supported. (But not on Microsoft Windows).
CLI Overrides
wezterm ssh
CLI allows overriding config settings via the command line. This
example shows how to specify the private key to use when connecting to
some-host
:
wezterm ssh -oIdentityFile=/secret/id_ed25519 some-host
wezterm can also connect to serial ports as a client. This is useful for example when working with embedded devices such as Arduino, or when connecting to a serial console on a headless server.
For example, on Linux:
$ wezterm serial /dev/ttyUSB0
or on Windows:
$ wezterm serial COM0
You can also specify the baud rate:
$ wezterm serial --baud 38400 /dev/ttyUSB0
When a wezterm window is operating in serial mode it is not possible to create new tabs.
!!! note multiplexing is still a young feature and is evolving rapidly. Your feedback is welcomed!
Multiplexing
The out-of-the-box experience with wezterm
allows you to multiplex local tabs
and windows which will persist until they are closed. With a little extra
configuration you can enable local terminal multiplexing with features similar
to those in tmux or screen.
Multiplexing in wezterm
is based around the concept of multiplexing domains;
a domain is a distinct set of windows and tabs. When wezterm starts up it
creates a default local domain to manage the windows and tabs in the UI, but it
can also be configured to start or connect to additional domains.
Once connected to a domain, wezterm
can attach its windows and tabs to the
local native UI, providing a more natural experience for interacting with
the mouse, clipboard and scrollback features of the terminal.
Key bindings allow you to spawn new tabs in the default local domain, the domain of the current tab, or a specific numbered domain.
SSH Domains
wezterm also supports regular ad-hoc ssh connections. This section of the docs refers to running a wezterm daemon on the remote end of a multiplexing session that uses ssh as a channel
A connection to a remote wezterm multiplexer made via an ssh connection is referred to as an SSH domain. A compatible version of wezterm must be installed on the remote system in order to use SSH domains. SSH domains are supported on all systems via libssh2.
To configure an SSH domain, place something like the following in
your .wezterm.lua
file:
config.ssh_domains = {
{
-- This name identifies the domain
name = 'my.server',
-- The hostname or address to connect to. Will be used to match settings
-- from your ssh config file
remote_address = '192.168.1.1',
-- The username to use on the remote host
username = 'wez',
},
}
See SshDomain for more information on possible settings to use with SSH domains.
To connect to the system, run:
$ wezterm connect my.server
This will launch an SSH session that connects to the specified address and may pop up authentication dialogs (using SSH keys for auth is strongly recommended!). Once connected, it will attempt to spawn the wezterm multiplexer daemon on the remote host and connect to it via a unix domain socket using a similar mechanism to that described in the Unix Domains section below.
{{since('20230408-112425-69ae8472')}}
Ssh_domains now auto-populate from your ~/.ssh/config
file. Each populated host will have both a plain SSH and a multiplexing SSH domain. Plain SSH hosts are defined with a SSH:
prefix to their name and multiplexing hosts are defined with a prefix SSHMUX:
. For example, to connect to a host named my.server
in your ~/.ssh/config
using a multiplexing domain, run:
$ wezterm connect SSHMUX:my.server
# or to spawn into a new tab in an existing wezterm gui instance:
$ wezterm cli spawn --domain-name SSHMUX:my.server
To customize this functionality, see the example for wezterm.default_ssh_domains()
Unix Domains
A connection to a multiplexer made via a unix socket is referred to as a unix domain. Unix domains are supported on all systems, even Windows and are a way to connect the native win32 GUI into the Windows Subsystem for Linux (WSL).
The bare minimum configuration to enable a unix domain is this, which will spawn a server if needed and then connect the gui to it automatically when wezterm is launched:
config.unix_domains = {
{
name = 'unix',
},
}
-- This causes `wezterm` to act as though it was started as
-- `wezterm connect unix` by default, connecting to the unix
-- domain on startup.
-- If you prefer to connect manually, leave out this line.
config.default_gui_startup_args = { 'connect', 'unix' }
If you prefer to connect manually, omit the default_gui_startup_args
setting
and then run:
$ wezterm connect unix
Note that in earlier versions of wezterm, a connect_automatically
domain
option was shown as the way to connect on startup. Using
default_gui_startup_args
is recommended instead as it works more reliably.
The possible configuration values are:
config.unix_domains = {
{
-- The name; must be unique amongst all domains
name = 'unix',
-- The path to the socket. If unspecified, a reasonable default
-- value will be computed.
-- socket_path = "/some/path",
-- If true, do not attempt to start this server if we try and fail to
-- connect to it.
-- no_serve_automatically = false,
-- If true, bypass checking for secure ownership of the
-- socket_path. This is not recommended on a multi-user
-- system, but is useful for example when running the
-- server inside a WSL container but with the socket
-- on the host NTFS volume.
-- skip_permissions_check = false,
},
}
{{since('20220101-133340-7edc5b5a')}}
It is now possible to specify a proxy_command
that will be used
in place of making a direct unix connection. When proxy_command
is specified, it will be used instead of the optional socket_path
.
This example shows a redundant use of nc
(netcat) to connect to
the unix socket path on my mac. This isn't useful on its own,
but may help with the WSL 2 issue mentioned below when translated
to an appropriate invocation of netcat/socat on Windows:
config.unix_domains = {
{
name = 'unix',
proxy_command = { 'nc', '-U', '/Users/wez/.local/share/wezterm/sock' },
},
}
{{since('20220319-142410-0fcdea07')}}
You may now specify the round-trip latency threshold for enabling predictive
local echo using local_echo_threshold_ms
. If the measured round-trip latency
between the wezterm client and the server exceeds the specified threshold, the
client will attempt to predict the server's response to key events and echo the
result of that prediction locally without waiting, hence hiding latency to the
user. This option only applies when multiplexing = "WezTerm"
.
config.unix_domains = {
{
name = 'unix',
local_echo_threshold_ms = 10,
},
}
Connecting into Windows Subsystem for Linux
Note: this only works with WSL 1. WSL 2 doesn't support AF_UNIX interop
Inside your WSL instance, configure .wezterm.lua
with this snippet:
config.unix_domains = {
{
name = 'wsl',
-- Override the default path to match the default on the host win32
-- filesystem. This will allow the host to connect into the WSL
-- container.
socket_path = '/mnt/c/Users/USERNAME/.local/share/wezterm/sock',
-- NTFS permissions will always be "wrong", so skip that check
skip_permissions_check = true,
},
}
In the host win32 configuration, use this snippet:
config.unix_domains = {
{
name = 'wsl',
serve_command = { 'wsl', 'wezterm-mux-server', '--daemonize' },
},
}
config.default_gui_startup_args = { 'connect', 'wsl' }
Now when you start wezterm you'll be presented with a WSL tab.
You can also omit default_gui_startup_args
and use:
$ wezterm connect wsl
to manually connect into your WSL instance.
TLS Domains
A connection to a multiplexer made via a TLS encrypted TCP connection is referred to as a TLS Domain.
Starting with version 20200202-180558-2489abf9
, wezterm can bootstrap a TLS
session by performing an initial connection via SSH to start the wezterm
multiplexer on the remote host and securely obtain a key. Once bootstrapped,
the client will use a TLS protected TCP connection to communicate with the
server.
Configuring the client
For each server that you wish to connect to, add a client section like this:
config.tls_clients = {
{
-- A handy alias for this session; you will use `wezterm connect server.name`
-- to connect to it.
name = 'server.name',
-- The host:port for the remote host
remote_address = 'server.hostname:8080',
-- The value can be "user@host:port"; it accepts the same syntax as the
-- `wezterm ssh` subcommand.
bootstrap_via_ssh = 'server.hostname',
},
}
See TlsDomainClient for more information on possible settings.
Configuring the server
config.tls_servers = {
{
-- The host:port combination on which the server will listen
-- for connections
bind_address = 'server.hostname:8080',
},
}
See TlsDomainServer for more information on possible settings.
Connecting
On the client, running this will connect to the server, start up the multiplexer and obtain a certificate for the TLS connection. A connection window will show the progress and may prompt you for SSH authentication. Once the connection has been initiated, wezterm will automatically reconnect using the certificate it obtained during bootstrapping if your connection was interrupted and resume your remote terminal session
$ wezterm connect server.name
Quick Start
Create a file named .wezterm.lua
in your home directory, with the following
contents:
-- Pull in the wezterm API
local wezterm = require 'wezterm'
-- This will hold the configuration.
local config = wezterm.config_builder()
-- This is where you actually apply your config choices
-- For example, changing the color scheme:
config.color_scheme = 'AdventureTime'
-- and finally, return the configuration to wezterm
return config
Configuration Files
wezterm
will look for a lua
configuration file using the logic shown below.
!!! tip
The recommendation is to place your configuration file at $HOME/.wezterm.lua
(%USERPROFILE%/.wezterm.lua
on Windows) to get started.
More complex configurations that need to span multiple files can be placed in
$XDG_CONFIG_HOME/wezterm/wezterm.lua
(for X11/Wayland) or
$HOME/.config/wezterm/wezterm.lua
(for all other systems).
{% raw %}
graph TD X[Locate Configuration file] --> A{{--config-file CLI argument specified?}} A -->|Yes| B{{Can that file be loaded?}} B -->|Yes| C[Use it] B -->|No| D[Use built-in default configuration] A -->|No| E{{$WEZTERM_CONFIG_FILE<br/>environment set?}} E -->|Yes| B E -->|No| F{{"Running on Windows and<br/>wezterm.lua exists in same<br/>dir as wezterm.exe?<br/>(Thumb drive mode)"}} F -->|Yes| B F -->|No| H{{Is $XDG_CONFIG_HOME<br/>environment set and<br/>wezterm/wezterm.lua<br/>exists inside it?}} H -->|Yes| B J --> B H -->|No| K{{Does $HOME/.config/wezterm/wezterm.lua exist?}} K -->|Yes| B K -->|No| J[Use $HOME/.wezterm.lua]
{% endraw %}
Prior to version 20210314-114017-04b7cedd, if the candidate file exists but failed to parse, wezterm would treat it as though it didn't exist and continue to try other candidate file locations. In all current versions of wezterm, an error will be shown and the default configuration will be used instead.
!!! note On Windows, to support users that carry their wezterm application and configuration around on a thumb drive, wezterm will look for the config file in the same location as wezterm.exe. That is shown in the chart above as thumb drive mode. It is not recommended to store your configs in that location if you are not running off a thumb drive.
wezterm
will watch the config file that it loads; if/when it changes, the
configuration will be automatically reloaded and the majority of options will
take effect immediately. You may also use the CTRL+SHIFT+R
keyboard shortcut
to force the configuration to be reloaded.
!!! info The configuration file may be evaluated multiple times for each wezterm process both at startup and in response to the configuration file being reloaded. You should avoid taking actions in the main flow of the config file that have side effects; for example, unconditionally launching background processes can result in many of them being spawned over time if you launch many copies of wezterm, or are frequently reloading your config file.
Configuration Overrides
{{since('20210314-114017-04b7cedd')}}
wezterm
allows overriding configuration values via the command line; here are
a couple of examples:
$ wezterm --config enable_scroll_bar=true
$ wezterm --config 'exit_behavior="Hold"'
Configuration specified via the command line will always override the values provided by the configuration file, even if the configuration file is reloaded.
Each window can have an additional set of window-specific overrides applied to it by code in your configuration file. That's useful for eg: setting transparency or any other arbitrary option on a per-window basis. Read the window:set_config_overrides documentation for more information and examples of how to use that functionality.
Configuration File Structure
The wezterm.lua
configuration file is a lua script which allows for a high
degree of flexibility. The script is expected to return a configuration
table, so a basic empty (and rather useless!) configuration file will look like
this:
return {}
Throughout these docs you'll find configuration fragments that demonstrate configuration and that look something like this:
local wezterm = require 'wezterm'
local config = {}
config.color_scheme = 'Batman'
return config
and perhaps another one like this:
local wezterm = require 'wezterm'
local config = {}
config.font = wezterm.font 'JetBrains Mono'
return config
If you wanted to use both of these in the same file, you would merge them together like this:
local wezterm = require 'wezterm'
local config = {}
config.font = wezterm.font 'JetBrains Mono'
config.color_scheme = 'Batman'
return config
For the sake of brevity in these docs, individual snippets may be shown as just the config assignments:
config.color_scheme = 'Batman'
Making your own Lua Modules
If you'd like to break apart your configuration into multiple files, you'll be interested in this information.
The Lua package.path
is configured with the following paths in this order:
- On Windows: a
wezterm_modules
dir in the same directory aswezterm.exe
. This is for thumb drive mode, and is not recommended to be used otherwise. ~/.config/wezterm
~/.wezterm
- A system specific set of paths which may (or may not!) find locally installed lua modules
That means that if you wanted to break your config up into a helpers.lua
file
you would place it in ~/.config/wezterm/helpers.lua
with contents like this:
-- I am helpers.lua and I should live in ~/.config/wezterm/helpers.lua
local wezterm = require 'wezterm'
-- This is the module table that we will export
local module = {}
-- This function is private to this module and is not visible
-- outside.
local function private_helper()
wezterm.log_error 'hello!'
end
-- define a function in the module table.
-- Only functions defined in `module` will be exported to
-- code that imports this module.
-- The suggested convention for making modules that update
-- the config is for them to export an `apply_to_config`
-- function that accepts the config object, like this:
function module.apply_to_config(config)
private_helper()
config.color_scheme = 'Batman'
end
-- return our module table
return module
and then in your wezterm.lua
you would use it like this:
local helpers = require 'helpers'
local config = {}
helpers.apply_to_config(config)
return config
Configuration Reference
Continue browsing this section of the docs for an overview of the commonly adjusted settings, or visit the Lua Config Reference for a more detailed list of possibilities.
Color Scheme
WezTerm ships with over 700 color schemes available from iTerm2-Color-Schemes, base16, Gogh and terminal.sexy and a couple of other locations.
You can select a color scheme with a line like this:
local wezterm = require 'wezterm'
local config = {}
config.color_scheme = 'Batman'
return config
You can find a list of available color schemes and screenshots in The Color Schemes Section.
If you'd like to automatically adjust your color scheme based on the system dark mode or light mode appearance, see the example in wezterm.gui.get_appearance()
!!! note if you are using multiplexing with ssh or tls domains, the color scheme is controlled by the config file on the multiplexer server side. This is because the palette is an attribute of the terminal emulation and that state lives on the multiplexer server.*
Precedence of colors
vs color_schemes
The color_scheme
option takes precedence over the colors
section below,
and is mutually exclusive with it. If you want to merge/override colors
you need to use wezterm.color.get_default_colors() and explicitly merge them.
{{since('20220903-194523-3bb1ed61')}}
The behavior has been changed so that the color_scheme
you have selected, if
any, is used to define the colors, and then any colors you define in the
colors
section will override those colors.
Defining your own colors
You can specify the color palette using the colors
configuration section.
You can configure colors with a section like this. In addition to specifying
SVG/CSS3 color names,
you can use #RRGGBB
to specify a color code using the
usual hex notation; eg: #000000
is equivalent to black
:
local wezterm = require 'wezterm'
local config = {}
config.colors = {
-- The default text color
foreground = 'silver',
-- The default background color
background = 'black',
-- Overrides the cell background color when the current cell is occupied by the
-- cursor and the cursor style is set to Block
cursor_bg = '#52ad70',
-- Overrides the text color when the current cell is occupied by the cursor
cursor_fg = 'black',
-- Specifies the border color of the cursor when the cursor style is set to Block,
-- or the color of the vertical or horizontal bar when the cursor style is set to
-- Bar or Underline.
cursor_border = '#52ad70',
-- the foreground color of selected text
selection_fg = 'black',
-- the background color of selected text
selection_bg = '#fffacd',
-- The color of the scrollbar "thumb"; the portion that represents the current viewport
scrollbar_thumb = '#222222',
-- The color of the split lines between panes
split = '#444444',
ansi = {
'black',
'maroon',
'green',
'olive',
'navy',
'purple',
'teal',
'silver',
},
brights = {
'grey',
'red',
'lime',
'yellow',
'blue',
'fuchsia',
'aqua',
'white',
},
-- Arbitrary colors of the palette in the range from 16 to 255
indexed = { [136] = '#af8700' },
-- Since: 20220319-142410-0fcdea07
-- When the IME, a dead key or a leader key are being processed and are effectively
-- holding input pending the result of input composition, change the cursor
-- to this color to give a visual cue about the compose state.
compose_cursor = 'orange',
-- Colors for copy_mode and quick_select
-- available since: 20220807-113146-c2fee766
-- In copy_mode, the color of the active text is:
-- 1. copy_mode_active_highlight_* if additional text was selected using the mouse
-- 2. selection_* otherwise
copy_mode_active_highlight_bg = { Color = '#000000' },
-- use `AnsiColor` to specify one of the ansi color palette values
-- (index 0-15) using one of the names "Black", "Maroon", "Green",
-- "Olive", "Navy", "Purple", "Teal", "Silver", "Grey", "Red", "Lime",
-- "Yellow", "Blue", "Fuchsia", "Aqua" or "White".
copy_mode_active_highlight_fg = { AnsiColor = 'Black' },
copy_mode_inactive_highlight_bg = { Color = '#52ad70' },
copy_mode_inactive_highlight_fg = { AnsiColor = 'White' },
quick_select_label_bg = { Color = 'peru' },
quick_select_label_fg = { Color = '#ffffff' },
quick_select_match_bg = { AnsiColor = 'Navy' },
quick_select_match_fg = { Color = '#ffffff' },
}
return config
{{since('20220101-133340-7edc5b5a')}}
You may specify colors in the HSL color space, if you prefer that over RGB, by using:
config.colors = {
-- the first number is the hue measured in degrees with a range
-- of 0-360.
-- The second number is the saturation measured in percentage with
-- a range of 0-100.
-- The third number is the lightness measured in percentage with
-- a range of 0-100.
foreground = 'hsl:235 100 50',
}
{{since('20220319-142410-0fcdea07')}}
Colors now also accept the following CSS-style color specifications:
rgb(0,255,0)
rgb(0% 100% 0%)
rgb(0 255 0 / 100%)
rgba(0,255,0,1)
hsl(120,100%,50%)
hsl(120deg 100% 50%)
hsl(-240 100% 50%)
hsl(-240deg 100% 50%)
hsl(0.3333turn 100% 50%)
hsl(133.333grad 100% 50%)
hsl(2.0944rad 100% 50%)
hsla(120,100%,50%,100%)
hwb(120 0% 0%)
hwb(480deg 0% 0% / 100%)
hsv(120,100%,100%)
hsv(120deg 100% 100% / 100%)
The alpha value is ignored except when used with selection_fg
and
selection_bg
:
config.colors = {
-- Make the selection text color fully transparent.
-- When fully transparent, the current text color will be used.
selection_fg = 'none',
-- Set the selection background color with alpha.
-- When selection_bg is transparent, it will be alpha blended over
-- the current cell background color, rather than replace it
selection_bg = 'rgba(50% 50% 50% 50%)',
}
Defining a Color Scheme in your .wezterm.lua
If you'd like to keep a couple of color schemes handy in your configuration
file, rather than filling out the colors
section, place it in a
color_schemes
section as shown below; you can then reference it using the
color_scheme
setting.
Color schemes names that you define in your wezterm.lua
take precedence
over all other color schemes.
All of the settings available from the colors
section are available
to use in the color_schemes
sections.
config.color_scheme = 'Red Scheme'
config.color_schemes = {
['Red Scheme'] = {
background = 'red',
},
['Blue Scheme'] = {
background = 'blue',
},
}
See also wezterm.get_builtin_color_schemes() for some more advanced examples, such as picking a random color scheme, or deriving from a builting color scheme.
Defining a Color Scheme in a separate file
If you'd like to factor your color schemes out into separate files, you
can create a TOML format file with a [colors]
section; take a look at one of
the available color schemes for an example.
It is recommended that you place your custom scheme in a directory
named $HOME/.config/wezterm/colors
if you're on a POSIX system.
On a Windows system, wezterm
will search for schemes in a directory
named colors
that is in the same directory as the wezterm.exe
.
If you wish to place your color scheme files in some other location, then you
will need to instruct wezterm where to look for your scheme files; the
color_scheme_dirs
setting specifies a list of directories to be searched:
config.color_scheme_dirs = { '/some/path/to/my/color/schemes' }
Color scheme names that are defined in files in your color_scheme_dirs
list
take precedence over the built-in color schemes.
Dynamic Color Escape Sequences
Wezterm supports dynamically changing its color palette via escape sequences.
The dynamic-colors directory of the color scheme repo contains shell scripts that can change the color scheme immediately on the fly. This can be used in your own scripts to alter the terminal appearance programmatically:
$ git clone https://github.com/mbadolato/iTerm2-Color-Schemes.git
$ cd iTerm2-Color-Schemes/dynamic-colors
$ for scheme in *.sh ; do ; echo $scheme ; \
bash "$scheme" ; ../tools/screenshotTable.sh; sleep 0.5; done
Tab Bar Appearance & Colors
The tab bar has two modes; the default is a native looking style, but it is also possible to enable a retro aesthetic. The configuration for the two styles is broadly similar, but there are a few different details.
- use_fancy_tab_bar option controls which tab bar style is used.
- enable_tab_bar option control whether the tab bar is used at all.
- hide_tab_bar_if_only_one_tab option causes the tab bar to be hidden when there is only a single tab.
- tab_bar_at_bottom places the tab bar at the bottom of the window instead of the top
- tab_max_width sets the maximum width, measured in cells, of a given tab when using retro tab mode.
Native (Fancy) Tab Bar appearance
The following options affect the fancy tab bar:
config.window_frame = {
-- The font used in the tab bar.
-- Roboto Bold is the default; this font is bundled
-- with wezterm.
-- Whatever font is selected here, it will have the
-- main font setting appended to it to pick up any
-- fallback fonts you may have used there.
font = wezterm.font { family = 'Roboto', weight = 'Bold' },
-- The size of the font in the tab bar.
-- Default to 10.0 on Windows but 12.0 on other systems
font_size = 12.0,
-- The overall background color of the tab bar when
-- the window is focused
active_titlebar_bg = '#333333',
-- The overall background color of the tab bar when
-- the window is not focused
inactive_titlebar_bg = '#333333',
}
config.colors = {
tab_bar = {
-- The color of the inactive tab bar edge/divider
inactive_tab_edge = '#575757',
},
}
In addition, the tab bar colors mentioned below also apply to the items displayed in the tab bar.
Retro Tab Bar appearance
The following options control the appearance of the tab bar:
config.colors = {
tab_bar = {
-- The color of the strip that goes along the top of the window
-- (does not apply when fancy tab bar is in use)
background = '#0b0022',
-- The active tab is the one that has focus in the window
active_tab = {
-- The color of the background area for the tab
bg_color = '#2b2042',
-- The color of the text for the tab
fg_color = '#c0c0c0',
-- Specify whether you want "Half", "Normal" or "Bold" intensity for the
-- label shown for this tab.
-- The default is "Normal"
intensity = 'Normal',
-- Specify whether you want "None", "Single" or "Double" underline for
-- label shown for this tab.
-- The default is "None"
underline = 'None',
-- Specify whether you want the text to be italic (true) or not (false)
-- for this tab. The default is false.
italic = false,
-- Specify whether you want the text to be rendered with strikethrough (true)
-- or not for this tab. The default is false.
strikethrough = false,
},
-- Inactive tabs are the tabs that do not have focus
inactive_tab = {
bg_color = '#1b1032',
fg_color = '#808080',
-- The same options that were listed under the `active_tab` section above
-- can also be used for `inactive_tab`.
},
-- You can configure some alternate styling when the mouse pointer
-- moves over inactive tabs
inactive_tab_hover = {
bg_color = '#3b3052',
fg_color = '#909090',
italic = true,
-- The same options that were listed under the `active_tab` section above
-- can also be used for `inactive_tab_hover`.
},
-- The new tab button that let you create new tabs
new_tab = {
bg_color = '#1b1032',
fg_color = '#808080',
-- The same options that were listed under the `active_tab` section above
-- can also be used for `new_tab`.
},
-- You can configure some alternate styling when the mouse pointer
-- moves over the new tab button
new_tab_hover = {
bg_color = '#3b3052',
fg_color = '#909090',
italic = true,
-- The same options that were listed under the `active_tab` section above
-- can also be used for `new_tab_hover`.
},
},
}
Window Padding
You may add padding around the edges of the terminal area.
See the window_padding docs for more info
Styling Inactive Panes
{{since('20201031-154415-9614e117')}}
To make it easier to see which pane is active, the inactive panes are dimmed and de-saturated slightly.
You can specify your own transformation to the pane colors with a hue, saturation, brightness (HSB) multiplier.
In this example, inactive panes will be slightly de-saturated and dimmed; this is the default configuration:
config.inactive_pane_hsb = {
saturation = 0.9,
brightness = 0.8,
}
The transform works by converting the RGB colors to HSV values and
then multiplying the HSV by the numbers specified in inactive_pane_hsb
.
Modifying the hue changes the hue of the color by rotating it through the color wheel. It is not as useful as the other components, but is available "for free" as part of the colorspace conversion.
Modifying the saturation can add or reduce the amount of "colorfulness". Making the value smaller can make it appear more washed out.
Modifying the brightness can be used to dim or increase the perceived amount of light.
The range of these values is 0.0 and up; they are used to multiply the existing values, so the default of 1.0 preserves the existing component, whilst 0.5 will reduce it by half, and 2.0 will double the value.
Window Background Image
{{since('20201031-154415-9614e117')}}
You can attach an image to the background of the wezterm window:
config.window_background_image = '/path/to/wallpaper.jpg'
If the path is a relative path then it will be expanded relative
to the directory containing your wezterm.lua
config file.
PNG, JPEG, GIF, BMP, ICO, TIFF, PNM, DDS, TGA and farbfeld files can be loaded. Animated GIF and PNG files will animate while the window has focus.
The image will be scaled to fit the window contents. Very large images may decrease render performance and take up VRAM from the GPU, so you may wish to resize the image file before using it.
You can optionally transform the background image by specifying a hue, saturation, brightness multiplier:
config.window_background_image = '/path/to/wallpaper.jpg'
config.window_background_image_hsb = {
-- Darken the background image by reducing it to 1/3rd
brightness = 0.3,
-- You can adjust the hue by scaling its value.
-- a multiplier of 1.0 leaves the value unchanged.
hue = 1.0,
-- You can adjust the saturation also.
saturation = 1.0,
}
See Styling Inactive Panes for more information on hue, saturation, brightness transformations.
If you'd like to have control over scaling, tiling/repeating, scrolling behavior and more, take a look at the more powerful background configuration option.
Window Background Gradient
{{since('20210814-124438-54e29167')}}
See window_background_gradient for configuration information on gradients.
Window Background Opacity
{{since('20201031-154415-9614e117')}}
If your Operating System provides Compositing support then WezTerm is able to specify the alpha channel value for the background content, rendering the window background translucent (some refer to this as transparent rather than translucent) and causing the windows/desktop behind it to show through the window.
macOS, Windows and Wayland support compositing out of the box. X11 may require installing or configuring a compositing window manager. XWayland under Mutter/Wayland also works without any additional configuration.
window_background_opacity
specifies the alpha channel value
with floating point numbers in the range 0.0
(meaning completely
translucent/transparent) through to 1.0
(meaning completely opaque).
Setting this to a value other than the default 1.0
may impact render
performance.
config.window_background_opacity = 1.0
Text Background Opacity
{{since('20201031-154415-9614e117')}}
When using a background image or background opacity, the image content can have relatively low contrast with respect to the text you are trying to read in your terminal.
The text_background_opacity
setting specifies the alpha channel value to use
for the background color of cells other than the default background color.
The default for this setting is 1.0
, which means that the background
color is fully opaque.
The range of values permitted are 0.0
(completely translucent)
through to 1.0
(completely opaque).
config.text_background_opacity = 0.3
Launching Programs
By default, when opening new tabs or windows, your shell will be spawned.
Your shell is determined by the following rules:
=== "On Posix Systems"
The shell configured for the current user in the password database will be
used. The value of the `$SHELL` environment variable is **_deliberately
ignored_** in order for wezterm to continue to be functional without
restarting after the user changes their shell.
wezterm will set the `$SHELL` environment variable to the shell that it
resolved from the password database. If you want to control the value of
`$SHELL` in your spawned processes, use
[set_environment_variables](lua/config/set_environment_variables.md) to
define the value you prefer.
The shell will be spawned as `-<SHELL>` (with a `-` prefixed to its *ARGV0*)
to invoke it as a login shell. A login shell generally loads additional
startup files and sets up more environment than a non-login shell.
Older versions of wezterm (circa 2022 and earlier) used slightly
different logic to determine the default program and invoke it.
=== "On Windows Systems"
1. The value of the `%COMSPEC%` environment variable is used if it is set.
**It is not recommended to change COMSPEC**, keep reading this
page of the documentation to learn how to make wezterm
run a different program.
2. Otherwise, `cmd.exe`
Changing the default program
If you'd like wezterm
to run a different program than the shell as
described above, you can use the default_prog
config setting to specify
the argument array; the array allows specifying the program and arguments
portably:
-- Spawn a fish shell in login mode
config.default_prog = { '/usr/local/bin/fish', '-l' }
Launching a different program as a one off via the CLI
If you want to make a shortcut for your desktop environment that will,
for example, open an editor in wezterm you can use the start
subcommand
to launch it. This example opens up a new terminal window running vim
to edit your wezterm configuration:
$ wezterm start -- vim ~/.wezterm.lua
Specifying the current working directory
If you'd like wezterm
to start running a program in a specific working
directory you can do so via the config, CLI, and when using
SpawnCommand
:
-
Setting the
default_cwd
via the config:config.default_cwd = "/some/path"
-
One off program in a specific working directory via the CLI:
$ wezterm start --cwd /some/path
-
The
SpawnCommandInNewTab
, andSpawnCommandInNewWindow
key assignments, and the Launcher Menu described below all accept aSpawnCommand
object that accepts an optionalcwd
field:{ label = "List files in /some/path", args = {"ls", "-al"}, cwd = "/some/path", }
Panes/Tabs/Windows created after the first will generally try to resolve the
current working directory of the current Pane, preferring
a value set by OSC 7 and falling back to
attempting to lookup the cwd
of the current process group leader attached to a
local Pane. If no cwd
can be resolved, then the default_cwd
will be used.
If default_cwd
is not specified, then the home directory of the user will be
used.
See default_cwd
for an easier to understand visualization.
Passing Environment variables to the spawned program
The set_environment_variables configuration setting can be used to add environment variables to the environment of the spawned program.
The behavior is to take the environment of the wezterm
process
and then set the specified variables for the spawned process.
config.set_environment_variables = {
-- This changes the default prompt for cmd.exe to report the
-- current directory using OSC 7, show the current time and
-- the current directory colored in the prompt.
prompt = '$E]7;file://localhost/$P$E\\$E[32m$T$E[0m $E[35m$P$E[36m$_$G$E[0m ',
}
The Launcher Menu
The launcher menu is accessed from the new tab button in the tab bar UI; the
+
button to the right of the tabs. Left clicking on the button will spawn a
new tab, but right clicking on it will open the launcher menu. You may also
bind a key to the ShowLauncher or
ShowLauncherArgs action to trigger the
menu.
The launcher menu by default lists the various multiplexer domains and offers the option of connecting and spawning tabs/windows in those domains.
You can define your own entries using the
launch_menu configuration setting. The snippet
below adds two new entries to the menu; one that runs the top
program to
monitor process activity and a second one that explicitly launches the bash
shell.
Each entry in launch_menu
is an instance of a
SpawnCommand object.
config.launch_menu = {
{
args = { 'top' },
},
{
-- Optional label to show in the launcher. If omitted, a label
-- is derived from the `args`
label = 'Bash',
-- The argument array to spawn. If omitted the default program
-- will be used as described in the documentation above
args = { 'bash', '-l' },
-- You can specify an alternative current working directory;
-- if you don't specify one then a default based on the OSC 7
-- escape sequence will be used (see the Shell Integration
-- docs), falling back to the home directory.
-- cwd = "/some/path"
-- You can override environment variables just for this command
-- by setting this here. It has the same semantics as the main
-- set_environment_variables configuration option described above
-- set_environment_variables = { FOO = "bar" },
},
}
Here's a fancy example that will add some helpful entries to the launcher menu when running on Windows:
local wezterm = require 'wezterm'
local launch_menu = {}
if wezterm.target_triple == 'x86_64-pc-windows-msvc' then
table.insert(launch_menu, {
label = 'PowerShell',
args = { 'powershell.exe', '-NoLogo' },
})
-- Find installed visual studio version(s) and add their compilation
-- environment command prompts to the menu
for _, vsvers in
ipairs(
wezterm.glob('Microsoft Visual Studio/20*', 'C:/Program Files (x86)')
)
do
local year = vsvers:gsub('Microsoft Visual Studio/', '')
table.insert(launch_menu, {
label = 'x64 Native Tools VS ' .. year,
args = {
'cmd.exe',
'/k',
'C:/Program Files (x86)/'
.. vsvers
.. '/BuildTools/VC/Auxiliary/Build/vcvars64.bat',
},
})
end
end
return {
launch_menu = launch_menu,
}
Font Related Configuration
WezTerm bundles JetBrains Mono, Nerd Font Symbols and Noto Color Emoji fonts and uses those for the default font configuration.
If you wish to use a different font face, then you can use the wezterm.font function to specify it:
config.font = wezterm.font 'Fira Code'
-- You can specify some parameters to influence the font selection;
-- for example, this selects a Bold, Italic font variant.
config.font =
wezterm.font('JetBrains Mono', { weight = 'Bold', italic = true })
Fallback
WezTerm allows specifying an ordered list of fonts; when resolving text into glyphs the first font in the list is consulted, and if the glyph isn't present in that font, WezTerm proceeds to the next font in the fallback list.
The default fallback includes the popular Nerd Font Symbols font, which means that you don't need to use specially patched fonts to use the powerline or Nerd Fonts symbol glyphs.
You can specify your own fallback; that's useful if you've got a killer monospace font, but it doesn't have glyphs for the asian script that you sometimes work with:
config.font = wezterm.font_with_fallback {
'Fira Code',
'DengXian',
}
WezTerm will still append its default fallback to whatever list you specify, so you needn't worry about replicating that list if you set your own fallback.
If none of the fonts in the fallback list (including WezTerm's default fallback list) contain a given glyph, then wezterm will resolve the system fallback list and try those fonts too. If a glyph cannot be resolved, wezterm will render a special "Last Resort" glyph as a placeholder. You may notice the placeholder appear momentarily and then refresh itself to the system fallback glyph on some systems.
Font Related Options
Additional options for configuring fonts can be found elsewhere in the docs:
- bold_brightens_ansi_colors - whether bold text uses the bright ansi palette
- dpi - override the DPI; potentially useful for X11 users with high-density displays if experiencing tiny or blurry fonts
- font_dirs - look for fonts in a set of directories
- font_locator - override the system font resolver
- font_rules - advanced control over which fonts are used for italic, bold and other textual styles
- font_shaper - affects kerning and ligatures
- font_size - change the size of the text
- freetype_load_flags - advanced hinting configuration
- freetype_load_target - configure hinting and anti-aliasing
- freetype_render_target - configure anti-aliasing
- cell_width - scale the font-specified cell width
- line_height - scale the font-specified line height
- wezterm.font - select a font based on family and style attributes
- wezterm.font_with_fallback - select a font from a list of candidates
Troubleshooting Fonts
You may use wezterm ls-fonts
to have wezterm explain information about which font files it will use for the different text styles.
It shows output like this:
$ wezterm ls-fonts
Primary font:
wezterm.font_with_fallback({
-- /home/wez/.fonts/OperatorMonoSSmLig-Medium.otf, FontDirs
{family="Operator Mono SSm Lig", weight="DemiLight"},
-- /home/wez/.fonts/MaterialDesignIconsDesktop.ttf, FontDirs
"Material Design Icons Desktop",
-- /usr/share/fonts/jetbrains-mono-fonts/JetBrainsMono-Regular.ttf, FontConfig
"JetBrains Mono",
-- /usr/share/fonts/google-noto-emoji/NotoColorEmoji.ttf, FontConfig
-- Assumed to have Emoji Presentation
-- Pixel sizes: [128]
"Noto Color Emoji",
})
When Intensity=Half Italic=true:
wezterm.font_with_fallback({
-- /home/wez/.fonts/OperatorMonoSSmLig-BookItalic.otf, FontDirs
{family="Operator Mono SSm Lig", weight=325, italic=true},
-- /home/wez/.fonts/MaterialDesignIconsDesktop.ttf, FontDirs
"Material Design Icons Desktop",
-- /usr/share/fonts/jetbrains-mono-fonts/JetBrainsMono-Regular.ttf, FontConfig
"JetBrains Mono",
-- /usr/share/fonts/google-noto-emoji/NotoColorEmoji.ttf, FontConfig
-- Assumed to have Emoji Presentation
-- Pixel sizes: [128]
"Noto Color Emoji",
})
...
You can ask wezterm to including a listing of all of the fonts on the system in a form that can be copied and pasted into the configuration file:
$ wezterm ls-fonts --list-system
<same output as above, but then:>
112 fonts found in your font_dirs + built-in fonts:
wezterm.font("Cascadia Code", {weight="ExtraLight", stretch="Normal", italic=false}) -- /home/wez/.fonts/CascadiaCode.ttf index=0 variation=1, FontDirs
wezterm.font("Cascadia Code", {weight="Light", stretch="Normal", italic=false}) -- /home/wez/.fonts/CascadiaCode.ttf index=0 variation=2, FontDirs
wezterm.font("Cascadia Code", {weight="DemiLight", stretch="Normal", italic=false}) -- /home/wez/.fonts/CascadiaCode.ttf index=0 variation=3, FontDirs
wezterm.font("Cascadia Code", {weight="Regular", stretch="Normal", italic=false}) -- /home/wez/.fonts/CascadiaCode.ttf index=0 variation=4, FontDirs
wezterm.font("Cascadia Code", {weight="DemiBold", stretch="Normal", italic=false}) -- /home/wez/.fonts/CascadiaCode.ttf index=0 variation=5, FontDirs
wezterm.font("Cascadia Code", {weight="Bold", stretch="Normal", italic=false}) -- /home/wez/.fonts/CascadiaCode.ttf index=0 variation=6, FontDirs
wezterm.font("Fira Code", {weight="Light", stretch="Normal", italic=false}) -- /home/wez/.fonts/FiraCode-Light.otf, FontDirs
wezterm.font("Fira Code", {weight="Regular", stretch="Normal", italic=false}) -- /home/wez/.fonts/FiraCode-Regular.otf, FontDirs
wezterm.font("Fira Code", {weight=450, stretch="Normal", italic=false}) -- /home/wez/.fonts/FiraCode-Retina.otf, FontDirs
wezterm.font("Fira Code", {weight="Medium", stretch="Normal", italic=false}) -- /home/wez/.fonts/FiraCode-Medium.otf, FontDirs
wezterm.font("Fira Code", {weight="Bold", stretch="Normal", italic=false}) -- /home/wez/.fonts/FiraCode-Bold.otf, FontDirs
wezterm.font("Font Awesome 5 Free", {weight="Black", stretch="Normal", italic=false}) -- /home/wez/.fonts/Font Awesome 5 Free-Solid-900.otf, FontDirs
...
690 system fonts found using FontConfig:
wezterm.font("Abyssinica SIL", {weight="Regular", stretch="Normal", italic=false}) -- /usr/share/fonts/sil-abyssinica-fonts/AbyssinicaSIL-R.ttf, FontConfig
wezterm.font("C059", {weight="Regular", stretch="Normal", italic=false}) -- /usr/share/fonts/urw-base35/C059-Bold.t1, FontConfig
wezterm.font("C059", {weight="Regular", stretch="Normal", italic=false}) -- /usr/share/fonts/urw-base35/C059-Roman.otf, FontConfig
wezterm.font("C059", {weight="Regular", stretch="Normal", italic=false}) -- /usr/share/fonts/urw-base35/C059-Roman.t1, FontConfig
wezterm.font("C059", {weight="Regular", stretch="Normal", italic=true}) -- /usr/share/fonts/urw-base35/C059-BdIta.t1, FontConfig
wezterm.font("C059", {weight="Regular", stretch="Normal", italic=true}) -- /usr/share/fonts/urw-base35/C059-Italic.otf, FontConfig
...
You may also display the shaping plan for a given text string; in this example,
the a
and the b
are separated by a special symbol which is not present in
the main font, so we expect to see a different font used for that glyph:
$ wezterm ls-fonts --text a🞄b
a \u{61} x_adv=8 glyph=29 wezterm.font("Operator Mono SSm Lig", {weight="DemiLight", stretch="Normal", italic=false})
/home/wez/.fonts/OperatorMonoSSmLig-Medium.otf, FontDirs
🞄 \u{1f784} x_adv=4 glyph=9129 wezterm.font("Symbola", {weight="Regular", stretch="SemiCondensed", italic=false})
/usr/share/fonts/gdouros-symbola/Symbola.ttf, FontConfig
b \u{62} x_adv=8 glyph=30 wezterm.font("Operator Mono SSm Lig", {weight="DemiLight", stretch="Normal", italic=false})
/home/wez/.fonts/OperatorMonoSSmLig-Medium.otf, FontDirs
tags:
- font keywords:
- ligature
- font
Advanced Font Shaping Options
Font shaping is the process which expands font ligatures and applies other advanced font display features that are encoded in your chosen font, in order to correctly position and display the appropriate glyphs on your display.
The HarfBuzz library is used to perform font shaping.
The harfbuzz_features
option allows specifying the features to enable when
using harfbuzz for font shaping.
There is some light documentation here: https://harfbuzz.github.io/shaping-opentype-features.html but it boils down to allowing opentype feature names to be specified using syntax similar to the CSS font-feature-settings options: https://developer.mozilla.org/en-US/docs/Web/CSS/font-feature-settings. The OpenType spec lists a number of features here: https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist
Options of likely interest will be:
calt
- https://docs.microsoft.com/en-us/typography/opentype/spec/features_ae#tag-caltclig
- https://docs.microsoft.com/en-us/typography/opentype/spec/features_ae#tag-clig
If you want to disable ligatures in most fonts, then you may want to use a setting like this:
config.harfbuzz_features = { 'calt=0', 'clig=0', 'liga=0' }
Some fonts make available extended options via stylistic sets. If you use the Fira Code font, it lists available stylistic sets here: https://github.com/tonsky/FiraCode/wiki/How-to-enable-stylistic-sets
and you can set them in wezterm:
-- Use this for a zero with a line through it rather than a dot
-- when using the Fira Code font
config.harfbuzz_features = { 'zero' }
{{since('20220101-133340-7edc5b5a')}}
You can specify harfbuzz_features
on a per-font basis, rather than
globally for all fonts:
config.font = wezterm.font {
family = 'JetBrains Mono',
harfbuzz_features = { 'calt=0', 'clig=0', 'liga=0' },
}
and this example disables ligatures for JetBrains Mono, but keeps the default for the other fonts in the fallback:
config.font = wezterm.font_with_fallback {
{
family = 'JetBrains Mono',
weight = 'Medium',
harfbuzz_features = { 'calt=0', 'clig=0', 'liga=0' },
},
{ family = 'Terminus', weight = 'Bold' },
'Noto Color Emoji',
}
wezterm
allows assigning action(s) to specific key events, and comes
pre-configured with a number of commonly useful assignments.
This page describes how key presses are handled and turned into actions or sent to the terminal as text.
It's important to understand these concepts when considering keyboard input; first, some operating system concepts:
- Input Method Editor (IME) - An OS-provided service which allows for rich composition of input, often with a pop-over candidate selection window. This is commonly used for Asian input, but on some systems the IME may also be responsible for emoji input or dead keys. The IME may have multiple modes per language and those modes can be changed dynamically.
- Keyboard Layout - An OS configuration that describes how to translate physical key button presses into inputs appropriate to the user's preferred input locale. The mapping performed by the layout is largely opaque to applications and, on most systems, can be changed dynamically.
- Dead Key - a keyboard layout may define these modal keys which don't immediately produce output (and thus appears to be "dead"), but instead holds some state that will compose with a subsequently pressed key. Most commonly used for example in European layouts to produce accented versions of the plain latin alphabet.
- Physical Key - a way to identify a key based on its hardware-dependent location.
wezterm
can refer to keys based on code they would emit if configured to use an ANSI US English keyboard layout (even if that layout is not currently active), or based on its raw scan code. - Mapped key - a way to identify a key after the keyboard layout has been applied by the OS.
- Modifier - A key such as
SHIFT
,CTRL
,CMD
,ALT
that can be held simultaneously while other keys are pressed. Modifier keys are special because keyboard hardware traditionally only supports those four modifiers, and that detail is ingrained into most OS input APIs.
And then some wezterm concepts:
- Key Assignment - an action assigned to a matching key and modifier combination.
- Key Table - a grouping of key assignments. For each window,
wezterm
maintains a stack of table activations, allowing for rich modal keyboard input customization
Keyboard Processing Flow
This schematic depicts the processing flow for keyboard events in wezterm
:
{% raw %}
flowchart TD A[OS Generates a Key Event] A --> B{{Is IME enabled?}} B -->|Yes| C[Deliver event to IME] --> C1{{IME Response}} B -->|No| F C1 -->|Composed| D[Make RawKeyEvent from<br/> Composed text] --> RAW1 C1 -->|Composing| E[Render composing status] C1 -->|Continue| F[Make RawKeyEvent] --> RAW1 RAW1{{match a phys: mapping?}} RAW1 -->|Yes| RAWDONE1(( )) RAW1 -->|No| RAW2{{match a raw: mapping?}} RAW2 -->|Yes| RAWDONE1 RAW2 -->|No| RAW3{{match a mapped: mapping?}} RAW3 -->|Yes| RAWDONE1 RAW3 -->|No| DEAD1{{Does RawKeyEvent complete a dead-key?}} DEAD1 -->|Yes| I[Make KeyEvent from<br/>expanded dead key] --> KEY1 DEAD1 -->|No| DEAD2{{Does RawKeyEvent start a dead-key?}} DEAD2 -->|No| J[Make KeyEvent from<br/>RawKeyEvent] --> KEY1 DEAD2 -->|Yes| DEADCOMP[Render composing status] KEY1{{match a phys: mapping?}} KEY1 -->|Yes| RAWDONE2(( )) KEY1 -->|No| KEY2{{match a raw: mapping?}} KEY2 -->|Yes| RAWDONE2 KEY2 -->|No| KEY3{{match a mapped: mapping?}} KEY3 -->|Yes| RAWDONE2 KEY3 -->|No| M[Send key to terminal] RAWDONE1 --> RAWDONE3[Perform assignment action] RAWDONE2 --> RAWDONE3
{% endraw %}
Alt / Option Key Behavior & Composed Keys
The operating system has its own user selectable keymap that is sometimes at odds with old-school terminal emulation that pre-dates internationalization as a concept. WezTerm tries to behave reasonably by default, but also give you control in other situations.
Layouts with an AltGr key
If you have, for example, a European keyboard layout with an AltGr key then
wezterm will respect the composition effects of AltGr produced by the system.
For example, in a German keymap, AltGr <
will produce |
.
If your physical keyboard doesn't match the keyboard layout (eg: using a US
keyboard with DEU selected in the OS), then the right hand Alt
key is often
re-interpreted as having the AltGr
function with behavior as described above.
The left Alt
will be treated as a modifier with no composition effects.
Microsoft Windows and Ctrl-Alt <-> AltGr
If you are using VNC and a keyboard layout with dead keys, then you may wish to enable treat_left_ctrlalt_as_altgr.
macOS Left and Right Option Key
{{since('20200620-160318-e00b076c')}}
The default behavior is to treat the left Option
key as the Alt
modifier
with no composition effects, while the right Option
key performs composition
(making it approximately equivalent to AltGr
on other operating systems).
You can control this behavior in your configuration:
config.send_composed_key_when_left_alt_is_pressed = false
config.send_composed_key_when_right_alt_is_pressed = true
{{since('20210203-095643-70a364eb')}}
WezTerm is now able to perform dead-key expansion when use_ime = false
. Dead
keys are treated as composition effects, so with the default settings of
send_composed_key_when_left_alt_is_pressed
and
send_composed_key_when_right_alt_is_pressed
above, in a US layout, Left-Opt n
will produce Alt N
and Right-Opt n
will for a subsequent key press
before generating an event; Right-Opt n SPACE
will emit ~
whereas Right-Opt n n
will emit ñ
.
You may also set use_dead_keys = false
to skip the hold state; continuing
the example above, Right-Opt n
will then immediately produce ~
.
Input Method Editor (IME)
WezTerm has support for using the operating system Input Method Editor (IME) on some operating systems.
The use_ime
docs have more information.
Dead Keys
{{since('20201031-154415-9614e117')}}
By default, if you are using a layout with dead keys (eg: US International
layout, or a number of European layouts such as German or French) pressing
a dead key in wezterm will "hold" the dead key until the next character is
pressed, resulting in a combined character with a diacritic. For example,
pressing ^
and then e
will produce ê
. Pressing ^
then SPACE
will produce ^
on its own.
If you are a heavy user of Vi style editors then you may wish to disable
dead key processing so that ^
can be used with a single keypress.
You can tell WezTerm to disable dead keys by setting this in your configuration file:
config.use_dead_keys = false
Note that for X11 systems with use_ime=true
, depending on the configured IME,
the IME may handle dead key processing implicitly. There is no way for
wezterm
to prevent it from doing that, short of disabling the IME.
Defining Assignments for key combinations that may be composed
When a key combination produces a composed key result, wezterm will look up both the composed and uncomposed versions of the keypress in your key mappings. If either lookup matches your assignment, that will take precedence over the normal key processing.
Configuring Key Assignments
The default key table assignments can be overridden or extended using the
keys
section in your ~/.wezterm.lua
config file. For example, you can
disable a default assignment like this:
config.keys = {
-- Turn off the default CMD-m Hide action, allowing CMD-m to
-- be potentially recognized and handled by the tab
{
key = 'm',
mods = 'CMD',
action = wezterm.action.DisableDefaultAssignment,
},
}
The action
value can be one of the available key
assignments. Every action has an example that shows
how to use it.
Possible Modifier labels are:
SUPER
,CMD
,WIN
- these are all equivalent: on macOS theCommand
key, on Windows theWindows
key, on Linux this can also be theSuper
orHyper
key. Left and right are equivalent.CTRL
- The control key. Left and right are equivalent.SHIFT
- The shift key. Left and right are equivalent.ALT
,OPT
,META
- these are all equivalent: on macOS theOption
key, on other systems theAlt
orMeta
key. Left and right are equivalent.LEADER
- a special modal modifier state managed bywezterm
. See Leader Key for more information.VoidSymbol
- This keycode is emitted in special cases where the original function of the key has been removed. Such as in Linux and usingsetxkbmap
.setxkbmap -option caps:none
. TheCapsLock
will no longer function as before in all applications, instead emittingVoidSymbol
.
You can combine modifiers using the |
symbol (eg: "CMD|CTRL"
).
The key
value can be one of the following keycode identifiers. Note that not
all of these are meaningful on all platforms:
Hyper
, Super
, Meta
, Cancel
, Backspace
, Tab
, Clear
, Enter
,
Shift
, Escape
, LeftShift
, RightShift
, Control
, LeftControl
,
RightControl
, Alt
, LeftAlt
, RightAlt
, Menu
, LeftMenu
, RightMenu
,
Pause
, CapsLock
, VoidSymbol
, PageUp
, PageDown
, End
, Home
, LeftArrow
,
RightArrow
, UpArrow
, DownArrow
, Select
, Print
, Execute
,
PrintScreen
, Insert
, Delete
, Help
, LeftWindows
, RightWindows
,
Applications
, Sleep
, Numpad0
, Numpad1
, Numpad2
, Numpad3
,
Numpad4
, Numpad5
, Numpad6
, Numpad7
, Numpad8
, Numpad9
, Multiply
,
Add
, Separator
, Subtract
, Decimal
, Divide
, NumLock
, ScrollLock
,
BrowserBack
, BrowserForward
, BrowserRefresh
, BrowserStop
,
BrowserSearch
, BrowserFavorites
, BrowserHome
, VolumeMute
,
VolumeDown
, VolumeUp
, MediaNextTrack
, MediaPrevTrack
, MediaStop
,
MediaPlayPause
, ApplicationLeftArrow
, ApplicationRightArrow
,
ApplicationUpArrow
, ApplicationDownArrow
, F1
, F2
, F3
, F4
,
F5
, F6
, F7
, F8
, F9
, F10
, F11
, F12
, F13
, F14
, F15
,
F16
, F17
, F18
, F19
, F20
, F21
, F22
, F23
, F24
.
Alternatively, a single unicode character can be specified to indicate pressing the corresponding key.
Pay attention to the case of the text that you use and the state of the SHIFT
modifier, as key="A"
will match
Physical vs Mapped Key Assignments
{{since('20220319-142410-0fcdea07')}}
The key
value can refer either to the physical position of a key on an ANSI
US keyboard or to the post-keyboard-layout-mapped value produced by a key
press.
You can explicitly assign using the physical position by adding a phys:
prefix
to the value, for example: key="phys:A"
. This will match key presses for
the key that would be in the position of the A
key on an ANSI US keyboard.
You can explicitly assign the mapped key by adding a mapped:
prefix to the
value, for example: key="mapped:a"
will match a key press where the OS
keyboard layout produces a
, regardless of its physical position.
If you omit an explicit prefix, wezterm will assume phys:
and use the
physical position of the specified key.
The default key assignments listed above use phys:
. In previous releases
there was no physical position support and those assignments were all mapped:
.
When upgrading from earlier releases, if you had {key="N", mods="CMD", ..}
in
your config, you will need to change it to either
{key="N", mods="CMD|SHIFT", ..}
or {key="mapped:N", mods="CMD", ..}
in order to continue to respect the SHIFT
modifier.
{{since('20220408-101518-b908e2dd')}}
A new key_map_preference
option controls how keys without an explicit phys:
or mapped:
prefix are treated. If key_map_preference = "Mapped"
(the
default), then mapped:
is assumed. If key_map_preference = "Physical"
then
phys:
is assumed.
The default key assignments will respect key_map_preference
.
Raw Key Assignments
In some cases, wezterm
may not know how to represent a key event in either
its phys:
or mapped:
forms. In that case, you may wish to define an
assignment in terms of the underlying operating system key code, using a raw:
prefix.
Similar in concept to the phys:
mapping described above, the raw:
mapping
is independent of the OS keyboard layout. Raw codes are hardware and windowing system dependent, so there is no portable way to list which key does what.
To discover these values, you can set debug_key_events = true and press the keys of interest.
You can specify a raw key value of 123 by using key="raw:123"
in your config
rather than one of the other key values.
Leader Key
{{since('20201031-154415-9614e117')}}
A leader key is a a modal modifier key. If leader is specified in the
configuration then pressing that key combination will enable a virtual LEADER
modifier.
While LEADER
is active, only defined key assignments that include
LEADER
in the mods
mask will be recognized. Other keypresses
will be swallowed and NOT passed through to the terminal.
LEADER
stays active until a keypress is registered (whether it
matches a key binding or not), or until it has been active for
the duration specified by timeout_milliseconds
, at which point
it will automatically cancel itself.
Here's an example configuration using LEADER
. In this configuration,
pressing CTRL-A
activates the leader key for up to 1 second (1000
milliseconds). While LEADER
is active, the |
key (with no other modifiers)
will trigger the current pane to be split.
-- timeout_milliseconds defaults to 1000 and can be omitted
config.leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 1000 }
config.keys = {
{
key = '|',
mods = 'LEADER|SHIFT',
action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' },
},
-- Send "CTRL-A" to the terminal when pressing CTRL-A, CTRL-A
{
key = 'a',
mods = 'LEADER|CTRL',
action = wezterm.action.SendKey { key = 'a', mods = 'CTRL' },
},
}
VoidSymbol
{{since('20210814-124438-54e29167')}}
On X11 systems, If you decide to change certain keys on the keyboard to
VoidSymbol
(like CapsLock
), then you can utilize it as a LEADER
or any
other part of key bindings. The following example now uses VoidSymbol
and
uses CapsLock
as a LEADER
without it affecting the shift / capital state as
long as you have setxkbmap -option caps:none
configured.
-- timeout_milliseconds defaults to 1000 and can be omitted
-- for this example use `setxkbmap -option caps:none` in your terminal.
config.leader = { key = 'VoidSymbol', mods = '', timeout_milliseconds = 1000 }
config.keys = {
{
key = '|',
mods = 'LEADER|SHIFT',
action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' },
},
{
key = '-',
mods = 'LEADER',
action = wezterm.action.SplitVertical { domain = 'CurrentPaneDomain' },
},
}
Available Actions
See the KeyAssignment
reference for information
on available actions.
{{since('20220408-101518-b908e2dd')}}
In addition to the default key table defined by the keys
configuration
option, wezterm
supports defining additional named key tables using the
key_tables
configuration option.
On its own, a named table doesn't do anything, but when paired with the
ActivateKeyTable
action, some powerful keyboard customization is possible.
As a motivating example, let's consider working with panes. In the default
config CTRL+SHIFT+ArrowKey
will activate a pane in the direction of the arrow
key, while CTRL+SHIFT+ALT+ArrowKey
will resize a pane in the direction of the
arrow key. Our goal is to avoid holding down so many keys at once, or even
having to remember so many key combinations, so what we'd like to do is use
CTRL-SHIFT-SPACE
as a leader prefix to select between resize and activation
modes, using r
for resize and a
for activation:
local wezterm = require 'wezterm'
local act = wezterm.action
local config = {}
-- Show which key table is active in the status area
wezterm.on('update-right-status', function(window, pane)
local name = window:active_key_table()
if name then
name = 'TABLE: ' .. name
end
window:set_right_status(name or '')
end)
config.leader = { key = 'Space', mods = 'CTRL|SHIFT' }
config.keys = {
-- CTRL+SHIFT+Space, followed by 'r' will put us in resize-pane
-- mode until we cancel that mode.
{
key = 'r',
mods = 'LEADER',
action = act.ActivateKeyTable {
name = 'resize_pane',
one_shot = false,
},
},
-- CTRL+SHIFT+Space, followed by 'a' will put us in activate-pane
-- mode until we press some other key or until 1 second (1000ms)
-- of time elapses
{
key = 'a',
mods = 'LEADER',
action = act.ActivateKeyTable {
name = 'activate_pane',
timeout_milliseconds = 1000,
},
},
}
config.key_tables = {
-- Defines the keys that are active in our resize-pane mode.
-- Since we're likely to want to make multiple adjustments,
-- we made the activation one_shot=false. We therefore need
-- to define a key assignment for getting out of this mode.
-- 'resize_pane' here corresponds to the name="resize_pane" in
-- the key assignments above.
resize_pane = {
{ key = 'LeftArrow', action = act.AdjustPaneSize { 'Left', 1 } },
{ key = 'h', action = act.AdjustPaneSize { 'Left', 1 } },
{ key = 'RightArrow', action = act.AdjustPaneSize { 'Right', 1 } },
{ key = 'l', action = act.AdjustPaneSize { 'Right', 1 } },
{ key = 'UpArrow', action = act.AdjustPaneSize { 'Up', 1 } },
{ key = 'k', action = act.AdjustPaneSize { 'Up', 1 } },
{ key = 'DownArrow', action = act.AdjustPaneSize { 'Down', 1 } },
{ key = 'j', action = act.AdjustPaneSize { 'Down', 1 } },
-- Cancel the mode by pressing escape
{ key = 'Escape', action = 'PopKeyTable' },
},
-- Defines the keys that are active in our activate-pane mode.
-- 'activate_pane' here corresponds to the name="activate_pane" in
-- the key assignments above.
activate_pane = {
{ key = 'LeftArrow', action = act.ActivatePaneDirection 'Left' },
{ key = 'h', action = act.ActivatePaneDirection 'Left' },
{ key = 'RightArrow', action = act.ActivatePaneDirection 'Right' },
{ key = 'l', action = act.ActivatePaneDirection 'Right' },
{ key = 'UpArrow', action = act.ActivatePaneDirection 'Up' },
{ key = 'k', action = act.ActivatePaneDirection 'Up' },
{ key = 'DownArrow', action = act.ActivatePaneDirection 'Down' },
{ key = 'j', action = act.ActivatePaneDirection 'Down' },
},
}
return config
Key Table Activation Stack
Each wezterm
GUI window maintains a stack of activations, which allows you to
create complex layering of keyboard customization.
The ActivateKeyTable action will push
an entry to the stack, and provides one_shot
and timeout_milliseconds
fields to affect when/how it will pop itself from the stack, and
replace_current
to implicitly pop the current entry from the stack.
The PopKeyTable action will explicitly pop an entry from the stack.
The ClearKeyTableStack action will clear the entire stack.
The stack is also cleared when the configuration is reloaded, so if you're working on a complex key table setup and get stuck, you may be able to unstick yourself by re-saving your wezterm configuration to trigger a reload.
{{since('20220624-141144-bd1b7c5d')}}
When resolving a key assignment, the top of stack is first searched for a match, and if one is not found, the next entry on the stack is searched and so on until a match is found.
In previous releases, only a single lookup was performed on the top of the stack.
The new behavior allows key table activations to effectively layer over the top of previously activated key assignments, making it a bit easier to compose key assignments.
search: boost: 20 keywords: default keys key tags:
- keys
The default key assignments are shown in the table below.
You may also use wezterm show-keys --lua
to see the assignments
in a form that you can copy and paste into your own configuration.
Modifiers | Key | Action |
---|---|---|
SUPER | c | CopyTo="Clipboard" |
SUPER | v | PasteFrom="Clipboard" |
CTRL+SHIFT | c | CopyTo="Clipboard" |
CTRL+SHIFT | v | PasteFrom="Clipboard" |
Copy | CopyTo="Clipboard" | |
Paste | PasteFrom="Clipboard" | |
CTRL | Insert | CopyTo="PrimarySelection" {{since('20210203-095643-70a364eb', inline=True)}} |
SHIFT | Insert | PasteFrom="PrimarySelection" |
SUPER | m | Hide |
SUPER | n | SpawnWindow |
CTRL+SHIFT | n | SpawnWindow |
ALT | Enter | ToggleFullScreen |
SUPER | - | DecreaseFontSize |
CTRL | - | DecreaseFontSize |
SUPER | = | IncreaseFontSize |
CTRL | = | IncreaseFontSize |
SUPER | 0 | ResetFontSize |
CTRL | 0 | ResetFontSize |
SUPER | t | SpawnTab="CurrentPaneDomain" |
CTRL+SHIFT | t | SpawnTab="CurrentPaneDomain" |
SUPER+SHIFT | T | SpawnTab="DefaultDomain" |
SUPER | w | CloseCurrentTab{confirm=true} |
SUPER | 1 | ActivateTab=0 |
SUPER | 2 | ActivateTab=1 |
SUPER | 3 | ActivateTab=2 |
SUPER | 4 | ActivateTab=3 |
SUPER | 5 | ActivateTab=4 |
SUPER | 6 | ActivateTab=5 |
SUPER | 7 | ActivateTab=6 |
SUPER | 8 | ActivateTab=7 |
SUPER | 9 | ActivateTab=-1 |
CTRL+SHIFT | w | CloseCurrentTab{confirm=true} |
CTRL+SHIFT | 1 | ActivateTab=0 |
CTRL+SHIFT | 2 | ActivateTab=1 |
CTRL+SHIFT | 3 | ActivateTab=2 |
CTRL+SHIFT | 4 | ActivateTab=3 |
CTRL+SHIFT | 5 | ActivateTab=4 |
CTRL+SHIFT | 6 | ActivateTab=5 |
CTRL+SHIFT | 7 | ActivateTab=6 |
CTRL+SHIFT | 8 | ActivateTab=7 |
CTRL+SHIFT | 9 | ActivateTab=-1 |
SUPER+SHIFT | [ | ActivateTabRelative=-1 |
CTRL+SHIFT | Tab | ActivateTabRelative=-1 |
CTRL | PageUp | ActivateTabRelative=-1 |
SUPER+SHIFT | ] | ActivateTabRelative=1 |
CTRL | Tab | ActivateTabRelative=1 |
CTRL | PageDown | ActivateTabRelative=1 |
CTRL+SHIFT | PageUp | MoveTabRelative=-1 |
CTRL+SHIFT | PageDown | MoveTabRelative=1 |
SHIFT | PageUp | ScrollByPage=-1 |
SHIFT | PageDown | ScrollByPage=1 |
SUPER | r | ReloadConfiguration |
CTRL+SHIFT | R | ReloadConfiguration |
SUPER | h | HideApplication (macOS only) |
SUPER | k | ClearScrollback="ScrollbackOnly" |
CTRL+SHIFT | K | ClearScrollback="ScrollbackOnly" |
CTRL+SHIFT | L | ShowDebugOverlay {{since('20210814-124438-54e29167', inline=True)}} |
CTRL+SHIFT | P | ActivateCommandPalette {{since('20230320-124340-559cb7b0', inline=True)}} |
CTRL+SHIFT | U | CharSelect {{since('20220903-194523-3bb1ed61', inline=True)}} |
SUPER | f | Search={CaseSensitiveString=""} |
CTRL+SHIFT | F | Search={CaseSensitiveString=""} |
CTRL+SHIFT | X | ActivateCopyMode |
CTRL+SHIFT | Space | QuickSelect {{since('20210502-130208-bff6815d', inline=True)}} |
CTRL+SHIFT+ALT | " | SplitVertical={domain="CurrentPaneDomain"} |
CTRL+SHIFT+ALT | % | SplitHorizontal={domain="CurrentPaneDomain"} |
CTRL+SHIFT+ALT | LeftArrow | AdjustPaneSize={"Left", 1} |
CTRL+SHIFT+ALT | RightArrow | AdjustPaneSize={"Right", 1} |
CTRL+SHIFT+ALT | UpArrow | AdjustPaneSize={"Up", 1} |
CTRL+SHIFT+ALT | DownArrow | AdjustPaneSize={"Down", 1} |
CTRL+SHIFT | LeftArrow | ActivatePaneDirection="Left" |
CTRL+SHIFT | RightArrow | ActivatePaneDirection="Right" |
CTRL+SHIFT | UpArrow | ActivatePaneDirection="Up" |
CTRL+SHIFT | DownArrow | ActivatePaneDirection="Down" |
CTRL+SHIFT | Z | TogglePaneZoomState |
If you don't want the default assignments to be registered, you can disable all of them with this configuration; if you chose to do this, you must explicitly register every binding.
config.disable_default_key_bindings = true
!!! tip
When using disable_default_key_bindings
, it is recommended that you
assign ShowDebugOverlay to
something to aid in potential future troubleshooting.
Likewise, you may wish to assign
[ActivateCommandPalette](lua/keyassignment/ActivateCommandPalette.md).
Keyboard Encoding
When input that doesn't match a key assignment is processed, it is encoded into a byte stream and sent to the PTY associated with the program that is running in the active pane.
The default encoding scheme used by wezterm is xterm compatible, but there are some configuration options that can modify the encoding.
The standard xterm compatible encoding generates events for key presses (but not releases) and can represent the set of keys that existed on terminal hardware of the 1980's.
That scheme has worked well for quite some time, but has some ambiguity due
to the way that the Control modifier "shifts" the ASCII representation of
keypresses like Control-I
to be ASCII Tab, as an example.
xterm modifyOtherKeys
{{since('20221119-145034-49b9839f')}}
When wezterm receives the sequence CSI >4;Nm
, where N
is 0
, 1
or 2
,
the keyboard encoding is changed according to
modifyOtherKeys,
which causes certain modified keys to be encoded as described in xterms
docs, making it
possible for applications to distinguish between the modified and unmodified
key presses.
Note that enable_csi_u_key_encoding and allow_win32_input_mode both take precedence over this behavior.
CSI-u/fixterms/libtickit
Fix Keyboard Input on Terminals is an attempt at resolving the ambiguous encoding and doing a better job at representing more modifiers. It's not a perfect attempt as there are a number of issues with it.
You can enable support for this encoding by setting enable_csi_u_key_encoding = true
, however, it is not recommended as it does change the behavior of some
keys in backwards incompatible ways and there isn't a way for applications to
detect or request this behavior.
See also: enable_csi_u_key_encoding.
Note that allow_win32_input_mode takes precedence over this option.
Kitty Keyboard Protocol
The Kitty terminal extended and enhanced the CSI-u based encoding scheme with its Comprehensive keyboard handling protocol.
The kitty protocol allows applications to request varying degrees of
enhancement over the standard encoding scheme and also allows for more modifier
keys (notably: CMD
/Super
/Windows
) to be reported to the application.
enable_kitty_keyboard controls whether wezterm will honor the application requests to modify the keyboard encoding.
Windows
On Windows, allow_win32_input_mode
defaults to true
which causes wezterm to listen for an escape sequence
generated by the ConPTY layer of Windows to enable Win32 Input Mode.
In this mode, key release events as well as events that can distinguish between positional (left/right) modifier keys are generated and this mode provides the best compatibility with win32 console applications such as Far Manager.
allow_win32_input_mode
takes precedence over
enable_csi_u_key_encoding.
tags:
- mouse
Mouse bindings are configurable, and there are a number of default assignments described below.
The assignments are based around a triggering mouse event which may be combined with a set of modifier keys to produce an action.
By default applications running in the terminal don't respond to the mouse. However, applications can emit escape sequences to request mouse event tracking. When mouse event tracking is enabled, mouse events are NOT matched against the mouse assignments and are instead passed through to the application.
You can bypass the mouse reporting capture by holding down the SHIFT
key;
that will prevent the event from being passed to the application and allow matching
it against your assignments as though the SHIFT
key were not pressed.
The bypass_mouse_reporting_modifiers option allows you to specify an alternative set of modifiers to use for bypassing mouse reporting capture.
Default Mouse Assignments
Note: you can run wezterm show-keys
to show the effective key and mouse assignments.
In the table below, Triple Left Down
means that the left mouse button is
being triple clicked and that the event matches the downstroke of the third
quick consecutive press. Triple Left Up
matches the subsequent release event
of that triple click, so for a triple click both
SelectTextAtMouseCursor="Line"
and CompleteSelection
will be triggered in
that order.
NOTE: In the action column, act
is an alias to wezterm.action
(to avoid repetition):
local act = wezterm.action
Event | Modifiers | Action |
---|---|---|
Triple Left Down | NONE | act.SelectTextAtMouseCursor("Line") |
Double Left Down | NONE | act.SelectTextAtMouseCursor("Word") |
Single Left Down | NONE | act.SelectTextAtMouseCursor("Cell") |
Single Left Down | SHIFT | act.ExtendSelectionToMouseCursor("Cell") |
Single Left Down | ALT | act.SelectTextAtMouseCursor("Block") {{since('20220624-141144-bd1b7c5d', inline=True)}} |
Single Left Up | SHIFT | act.CompleteSelectionOrOpenLinkAtMouseCursor("ClipboardAndPrimarySelection") |
Single Left Up | NONE | act.CompleteSelectionOrOpenLinkAtMouseCursor("ClipboardAndPrimarySelection") |
Single Left Up | ALT | act.CompleteSelection("ClipboardAndPrimarySelection") {{since('20220624-141144-bd1b7c5d', inline=True)}} |
Double Left Up | NONE | act.CompleteSelection("ClipboardAndPrimarySelection") |
Triple Left Up | NONE | act.CompleteSelection("ClipboardAndPrimarySelection") |
Single Left Drag | NONE | act.ExtendSelectionToMouseCursor("Cell") |
Single Left Drag | ALT | act.ExtendSelectionToMouseCursor("Block") {{since('20220624-141144-bd1b7c5d', inline=True)}} |
Single Left Down | ALT+SHIFT | act.ExtendSelectionToMouseCursor("Block") {{since('20220624-141144-bd1b7c5d', inline=True)}} |
Single Left Up | ALT+SHIFT | act.CompleteSelection("ClipboardAndPrimarySelection") {{since('20220624-141144-bd1b7c5d', inline=True)}} |
Double Left Drag | NONE | act.ExtendSelectionToMouseCursor("Word") |
Triple Left Drag | NONE | act.ExtendSelectionToMouseCursor("Line") |
Single Middle Down | NONE | act.PasteFrom("PrimarySelection") |
Single Left Drag | SUPER | act.StartWindowDrag (since 20210314-114017-04b7cedd) |
Single Left Drag | CTRL+SHIFT | act.StartWindowDrag (since 20210314-114017-04b7cedd) |
If you don't want the default assignments to be registered, you can disable all of them with this configuration; if you chose to do this, you must explicitly register every binding.
config.disable_default_mouse_bindings = true
Configuring Mouse Assignments
{{since('20200607-144723-74889cd4')}}
You can define mouse actions using the mouse_bindings
configuration section:
local wezterm = require 'wezterm'
local act = wezterm.action
local config = {}
config.mouse_bindings = {
-- Right click sends "woot" to the terminal
{
event = { Down = { streak = 1, button = 'Right' } },
mods = 'NONE',
action = act.SendString 'woot',
},
-- Change the default click behavior so that it only selects
-- text and doesn't open hyperlinks
{
event = { Up = { streak = 1, button = 'Left' } },
mods = 'NONE',
action = act.CompleteSelection 'ClipboardAndPrimarySelection',
},
-- and make CTRL-Click open hyperlinks
{
event = { Up = { streak = 1, button = 'Left' } },
mods = 'CTRL',
action = act.OpenLinkAtMouseCursor,
},
-- NOTE that binding only the 'Up' event can give unexpected behaviors.
-- Read more below on the gotcha of binding an 'Up' event only.
}
return config
Each entry in the mouse binding table can have the following fields:
event
- the mouse event on which to trigger. Described in detail below.mods
- the keyboard modifier keys that must be active in order to match the event.mods
have the same definition and meaning as for key assignments and are described in more detail in Configuring Key Assignments.action
- the action to take when this mouse binding is matchedmouse_reporting
- an optional boolean that defaults tofalse
. This mouse binding entry will only be considered if the current pane's mouse reporting state matches. In general, you should avoid defining assignments that havemouse_reporting=true
as it will prevent the application running in the pane from receiving that mouse event. You can, of course, define these and still send your mouse event to the pane by holding down the configured mouse reporting bypass modifier key. {{since('20220807-113146-c2fee766', inline=True)}}alt_screen
- an optional field that defaults to'Any'
, but that can also be set to eithertrue
orfalse
. This mouse binding entry will only be considered if the current pane's alt screen state matches this field. Most of the default mouse assignments are defined asalt_screen='Any'
, a notable exception being that mouse wheel scrolling only applies whenalt_screen=false
, as the mouse wheel is typically mapped to arrow keys by the terminal in alt screen mode. {{since('20220807-113146-c2fee766', inline=True)}}.
The action
and mods
portions are described in more detail in the key assignment
information below.
The event
portion has three components:
- Whether it is a
Down
,Up
orDrag
event - The number of consecutive clicks within the click threshold (the click streak)
- The mouse button;
Left
,Right
, orMiddle
.
A double click is a down-up-down
sequence where either the second button down
is held for long enough or is released and no subsequent down event occurs
within the click threshold. When recognized, it emits a Down
event with
streak=2
. If the mouse is moved while the button is held, a Drag
event
with streak=2
is generated. When the mouse button is released an Up
event
with streak=2
is generated.
The mouse event recognizer supports an arbitrary click streak, so if
you wanted quadruple-click bindings you can specify streak=4
.
Event | Lua Representation |
---|---|
Triple Left Down | event={Down={streak=3, button="Left"}} |
Double Left Up | event={Up={streak=2, button="Left"}} |
Single Left Drag | event={Drag={streak=1, button="Left"}} |
{{since('20220807-113146-c2fee766')}}
You can handle vertical wheel scroll events using the example shown below. The
streak
and amount associated with either WheelUp
or WheelDown
are set to
1
for the sake of simplicity of matching the event; you may use
window:current_event
, if to access the actual
delta scroll value while handling the event.
local wezterm = require 'wezterm'
local act = wezterm.action
local config = {}
config.mouse_bindings = {
-- Scrolling up while holding CTRL increases the font size
{
event = { Down = { streak = 1, button = { WheelUp = 1 } } },
mods = 'CTRL',
action = act.IncreaseFontSize,
},
-- Scrolling down while holding CTRL decreases the font size
{
event = { Down = { streak = 1, button = { WheelDown = 1 } } },
mods = 'CTRL',
action = act.DecreaseFontSize,
},
}
return config
Gotcha on binding an 'Up' event only
If you only have a mouse bind on the 'Up' event and not on the 'Down' event, the 'Down' event will still be sent to the running program. If that program is tracking mouse inputs (like tmux or vim with mouse support), you may experience unintuitive behavior as the program receives the 'Down' event, but not the 'Up' event (which is bound to something in your config).
To avoid this, it is recommended to disable the 'Down' event (to ensure it won't be sent to the running program), for example:
local wezterm = require 'wezterm'
local act = wezterm.action
local config = {}
config.mouse_bindings = {
-- Bind 'Up' event of CTRL-Click to open hyperlinks
{
event = { Up = { streak = 1, button = 'Left' } },
mods = 'CTRL',
action = act.OpenLinkAtMouseCursor,
},
-- Disable the 'Down' event of CTRL-Click to avoid weird program behaviors
{
event = { Down = { streak = 1, button = 'Left' } },
mods = 'CTRL',
action = act.Nop,
},
}
return config
Available Actions
See the KeyAssignment
reference for information
on available actions.
Introduction
A Wezterm plugin is a package of Lua files that provide some some predefined functionality not in the core product.
A plugin is distributed via a Git URL.
!!! Tip
Michael Brusegard maintains a [list of plugins](https://github.com/michaelbrusegard/awesome-wezterm)
Installing a Plugin
Brief example:
local wezterm = require 'wezterm'
local a_plugin = wezterm.plugin.require 'https://github.com/owner/repo'
local config = wezterm.config_builder()
a_plugin.apply_to_config(config)
return config
The plugin URL must use the HTTPS
or file
protocol.
When Wezterm clones the repo into the runtime directory the default branch (probably main
)
is checked out and used as the plugin source.
Plugins can be configured, for example:
local wezterm = require 'wezterm'
local a_plugin = wezterm.plugin.require 'https://github.com/owner/repo'
local config = wezterm.config_builder()
local myPluginConfig = { enable = true, location = 'right' }
a_plugin.apply_to_config(config, myPluginConfig)
return config
!!! Note
Consult the README for a particular plugin to discover any specific configuration options.
Updating Plugins
When changes are published to a plugin repository they are not updated in the local Wezterm instance.
Run the command wezterm.plugin.update_all()
to update all local plugins.
!!! Tip
This can be run using the Lua REPL in [DebugOverlay](../troubleshooting.md#debug-overlay).
Removing a Plugin
When a plugin is first referenced, wezterm.plugin.require()
will clone the repo if it doesn't already
exist and store it in the runtime directory under plugins/NAME
where
NAME
is derived from the repo URL.
You can discover locations of the various plugins with wezterm.plugin.list()
.
To remove the plugin simply delete the appropriate plugin directory.
Developing a Plugin
- Create a local development repo
- Add a file
plugin/init.lua
init.lua
must return a module that exports anapply_to_config
function. This function must accept at least a config builder parameter, but may pass other parameters, or a Lua table with aconfig
field that maps to a config build parameter- Add any other Lua code needed to fulfil the plugin feature set.
- Add the plugin using a local file url e.g.
local a_plugin = wezterm.plugin.require "file:///home/user/projects/myPlugin"
!!! Info
When changes are made to the local project, wezterm.plugin.update_all()
must be run
to sync the changes into the Wezterm runtime directory for testing and use.
!!! Info
This assumes development on the repo default branch (i.e. main
). To use a different
development branch see below.
Managing a Plugin with Multiple Lua Modules
When requiring
other Lua modules in your plugin the value of package.path
needs to updated
with the location of the plugin. The plugin directory can be obtained by running
wezterm.plugin.list()
. This function returns an array of triplets. e.g.
[
{
"component": "filesCssZssZssZsUserssZsdevelopersZsprojectssZsmysDsPlugin",
"plugin_dir": "/Users/alec/Library/Application Support/wezterm/plugins/filesCssZssZssZsUserssZsalecsZsprojectssZsbarsDswezterm",
"url": "file:///Users/developer/projects/my.Plugin",
},
]
The package path can then be updated with the value of plugin_dir
. For example:
function findPluginPackagePath(myProject)
local separator = package.config:sub(1, 1) == '\\' and '\\' or '/'
for _, v in ipairs(wezterm.plugin.list()) do
if v.url == myProject then
return v.plugin_dir .. separator .. 'plugin' .. separator .. '?.lua'
end
end
--- #TODO Add error fail here
end
package.path = package.path
.. ';'
.. findPluginPackagePath 'file:///Users/developer/projects/my.Plugin'
!!! Tip Review other published plugins to discover more details on how to structure a plugin project
Making changes to a Existing Plugin
- Remove the original plugin from Wezterm
- Fork the plugin repo
- Clone the repo to a local directory
- Optionally set an
upstream
remote to the original plugin repo. This makes it easier it merge upstream changes - Create a new branch for development
- Make the new branch the default branch with
git symbolic-ref HEAD refs/heads/mybranch
- Set the
plugin_dir
if required (some plugins hard code the value of the plugin directory). - Add the plugin to Wezterm using the file protocol
Proceed using the develop workflow above
1001 Color schemes listed by first letter
title: Color Schemes with first letter "3"
3024 (base16)
Author: `Jan T. Sott (http://github.com/idleberg)`Source:
{{since('20220807-113146-c2fee766')}}
This scheme is also known as `3024 (dark) (terminal.sexy)`.
To use this scheme, add this to your config:
config.color_scheme = '3024 (base16)'
3024 (dark) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = '3024 (dark) (terminal.sexy)'
3024 (light) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = '3024 (light) (terminal.sexy)'
3024 Day
Author: `Jan T. Sott (http://github.com/idleberg)`Source:
This scheme is also known as `3024 Day (Gogh)`, `3024Day (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = '3024 Day'
3024 Day (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = '3024 Day (Gogh)'
3024 Night
Author: `Jan T. Sott (http://github.com/idleberg)`Source:
This scheme is also known as `3024 Night (Gogh)`, `3024Night (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = '3024 Night'
3024 Night (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = '3024 Night (Gogh)'
title: Color Schemes with first letter "a"
Aardvark Blue
Source:{{since('20240127-113634-bbcac864')}}
To use this scheme, add this to your config:
config.color_scheme = 'Aardvark Blue'
Abernathy
Source:To use this scheme, add this to your config:
config.color_scheme = 'Abernathy'
Aci (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Aci (Gogh)'
Aco (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Aco (Gogh)'
Adventure
Source:To use this scheme, add this to your config:
config.color_scheme = 'Adventure'
Adventure Time (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Adventure Time (Gogh)'
AdventureTime
Source:This scheme is also known as `Adventure Time (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'AdventureTime'
Afterglow
Source:To use this scheme, add this to your config:
config.color_scheme = 'Afterglow'
Afterglow (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Afterglow (Gogh)'
aikofog (terminal.sexy)
Author: `Gutterslob`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'aikofog (terminal.sexy)'
Alabaster
Source:To use this scheme, add this to your config:
config.color_scheme = 'Alabaster'
Alien Blood (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Alien Blood (Gogh)'
AlienBlood
Source:This scheme is also known as `Alien Blood (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'AlienBlood'
Andromeda
Source:To use this scheme, add this to your config:
config.color_scheme = 'Andromeda'
Apathy (base16)
Author: `Jannik Siebert (https://github.com/janniks)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Apathy (base16)'
Apple Classic
Source:{{since('20230320-124340-559cb7b0')}}
To use this scheme, add this to your config:
config.color_scheme = 'Apple Classic'
Apple System Colors
Source:{{since('20240127-113634-bbcac864')}}
To use this scheme, add this to your config:
config.color_scheme = 'Apple System Colors'
Apprentice (base16)
Author: `romainl`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Apprentice (base16)'
Apprentice (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Apprentice (Gogh)'
arcoiris
Source:To use this scheme, add this to your config:
config.color_scheme = 'arcoiris'
Argonaut
Source:This scheme is also known as `Argonaut (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Argonaut'
Argonaut (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Argonaut (Gogh)'
Arthur
Source:This scheme is also known as `Arthur (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Arthur'
Arthur (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Arthur (Gogh)'
Ashes (base16)
Author: `Jannik Siebert (https://github.com/janniks)`Source:
{{since('20220807-113146-c2fee766')}}
This scheme is also known as `Ashes (dark) (terminal.sexy)`.
To use this scheme, add this to your config:
config.color_scheme = 'Ashes (base16)'
Ashes (dark) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Ashes (dark) (terminal.sexy)'
Ashes (light) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Ashes (light) (terminal.sexy)'
Astrodark (Gogh)
Source:{{since('nightly builds only')}}
To use this scheme, add this to your config:
config.color_scheme = 'Astrodark (Gogh)'
astromouse (terminal.sexy)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'astromouse (terminal.sexy)'
Atelier Cave (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Cave (base16)'
Atelier Cave Light (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Cave Light (base16)'
Atelier Dune (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Dune (base16)'
Atelier Dune Light (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Dune Light (base16)'
Atelier Estuary (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Estuary (base16)'
Atelier Estuary Light (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Estuary Light (base16)'
Atelier Forest (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Forest (base16)'
Atelier Forest Light (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Forest Light (base16)'
Atelier Heath (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Heath (base16)'
Atelier Heath Light (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Heath Light (base16)'
Atelier Lakeside (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Lakeside (base16)'
Atelier Lakeside Light (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Lakeside Light (base16)'
Atelier Plateau (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Plateau (base16)'
Atelier Plateau Light (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Plateau Light (base16)'
Atelier Savanna (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Savanna (base16)'
Atelier Savanna Light (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Savanna Light (base16)'
Atelier Seaside (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Seaside (base16)'
Atelier Seaside Light (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Seaside Light (base16)'
Atelier Sulphurpool (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Sulphurpool (base16)'
Atelier Sulphurpool Light (base16)
Author: `Bram de Haan (http://atelierbramdehaan.nl)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelier Sulphurpool Light (base16)'
Atelierdune (dark) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelierdune (dark) (terminal.sexy)'
Atelierdune (light) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelierdune (light) (terminal.sexy)'
Atelierforest (dark) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelierforest (dark) (terminal.sexy)'
Atelierforest (light) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelierforest (light) (terminal.sexy)'
Atelierheath (dark) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelierheath (dark) (terminal.sexy)'
Atelierheath (light) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelierheath (light) (terminal.sexy)'
Atelierlakeside (dark) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelierlakeside (dark) (terminal.sexy)'
Atelierlakeside (light) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelierlakeside (light) (terminal.sexy)'
Atelierseaside (dark) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelierseaside (dark) (terminal.sexy)'
Atelierseaside (light) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atelierseaside (light) (terminal.sexy)'
AtelierSulphurpool
Source:To use this scheme, add this to your config:
config.color_scheme = 'AtelierSulphurpool'
Atlas (base16)
Author: `Alex Lende (https://ajlende.com)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atlas (base16)'
Atom
Source:This scheme is also known as `Atom (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Atom'
Atom (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Atom (Gogh)'
AtomOneLight
Source:To use this scheme, add this to your config:
config.color_scheme = 'AtomOneLight'
Aura (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Aura (Gogh)'
Aurora
Source:To use this scheme, add this to your config:
config.color_scheme = 'Aurora'
ayu
Source:To use this scheme, add this to your config:
config.color_scheme = 'ayu'
Ayu Dark (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
This scheme is also known as `AyuDark (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Ayu Dark (Gogh)'
Ayu Light (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
This scheme is also known as `AyuLight (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Ayu Light (Gogh)'
Ayu Mirage
Source:To use this scheme, add this to your config:
config.color_scheme = 'Ayu Mirage'
Ayu Mirage (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
This scheme is also known as `AyuMirage (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Ayu Mirage (Gogh)'
ayu_light
Source:To use this scheme, add this to your config:
config.color_scheme = 'ayu_light'
Azu (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Azu (Gogh)'
title: Color Schemes with first letter "b"
Bamboo
Author: `Riley Bruins`Source:
{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Bamboo'
Bamboo Light
Author: `Riley Bruins`Source:
{{since('20240127-113634-bbcac864')}}
To use this scheme, add this to your config:
config.color_scheme = 'Bamboo Light'
Bamboo Multiplex
Author: `Riley Bruins`Source:
{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Bamboo Multiplex'
Banana Blueberry
Source:To use this scheme, add this to your config:
config.color_scheme = 'Banana Blueberry'
Batman
Source:To use this scheme, add this to your config:
config.color_scheme = 'Batman'
Belafonte Day
Author: `Jan T. Sott`Source:
This scheme is also known as `Belafonte Day (Gogh)`, `BelafonteDay (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Belafonte Day'
Belafonte Day (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Belafonte Day (Gogh)'
Belafonte Night
Author: `Jan T. Sott`Source:
This scheme is also known as `Belafonte Night (Gogh)`, `BelafonteNight (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Belafonte Night'
Belafonte Night (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Belafonte Night (Gogh)'
Belge (terminal.sexy)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Belge (terminal.sexy)'
Bespin (base16)
Author: `Jan T. Sott`Source:
{{since('20220807-113146-c2fee766')}}
This scheme is also known as `Bespin (dark) (terminal.sexy)`.
To use this scheme, add this to your config:
config.color_scheme = 'Bespin (base16)'
Bespin (dark) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Bespin (dark) (terminal.sexy)'
Bespin (light) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Bespin (light) (terminal.sexy)'
Bim (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Bim (Gogh)'
Birds Of Paradise (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Birds Of Paradise (Gogh)'
BirdsOfParadise
Source:This scheme is also known as `Birds Of Paradise (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'BirdsOfParadise'
Bitmute (terminal.sexy)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Bitmute (terminal.sexy)'
Black Metal (base16)
Author: `metalelf0 (https://github.com/metalelf0)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Black Metal (base16)'
Black Metal (Bathory) (base16)
Author: `metalelf0 (https://github.com/metalelf0)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Black Metal (Bathory) (base16)'
Black Metal (Burzum) (base16)
Author: `metalelf0 (https://github.com/metalelf0)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Black Metal (Burzum) (base16)'
Black Metal (Dark Funeral) (base16)
Author: `metalelf0 (https://github.com/metalelf0)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Black Metal (Dark Funeral) (base16)'
Black Metal (Gorgoroth) (base16)
Author: `metalelf0 (https://github.com/metalelf0)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Black Metal (Gorgoroth) (base16)'
Black Metal (Immortal) (base16)
Author: `metalelf0 (https://github.com/metalelf0)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Black Metal (Immortal) (base16)'
Black Metal (Khold) (base16)
Author: `metalelf0 (https://github.com/metalelf0)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Black Metal (Khold) (base16)'
Black Metal (Marduk) (base16)
Author: `metalelf0 (https://github.com/metalelf0)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Black Metal (Marduk) (base16)'
Black Metal (Mayhem) (base16)
Author: `metalelf0 (https://github.com/metalelf0)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Black Metal (Mayhem) (base16)'
Black Metal (Nile) (base16)
Author: `metalelf0 (https://github.com/metalelf0)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Black Metal (Nile) (base16)'
Black Metal (Venom) (base16)
Author: `metalelf0 (https://github.com/metalelf0)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Black Metal (Venom) (base16)'
Blazer
Source:This scheme is also known as `Blazer (Gogh)`, `Miu (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Blazer'
Blazer (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Blazer (Gogh)'
Bleh-1 (terminal.sexy)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Bleh-1 (terminal.sexy)'
Blue Dolphin (Gogh)
Source:{{since('nightly builds only')}}
To use this scheme, add this to your config:
config.color_scheme = 'Blue Dolphin (Gogh)'
Blue Matrix
Source:To use this scheme, add this to your config:
config.color_scheme = 'Blue Matrix'
BlueBerryPie
Source:To use this scheme, add this to your config:
config.color_scheme = 'BlueBerryPie'
BlueDolphin
Source:To use this scheme, add this to your config:
config.color_scheme = 'BlueDolphin'
Bluloco Light (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
This scheme is also known as `BlulocoLight (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Bluloco Light (Gogh)'
Bluloco Zsh Light (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
This scheme is also known as `BlulocoZshLight (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Bluloco Zsh Light (Gogh)'
BlulocoDark
Source:To use this scheme, add this to your config:
config.color_scheme = 'BlulocoDark'
BlulocoLight
Source:To use this scheme, add this to your config:
config.color_scheme = 'BlulocoLight'
Borland
Source:This scheme is also known as `Borland (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Borland'
Borland (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Borland (Gogh)'
Breadog (Gogh)
Source:{{since('nightly builds only')}}
To use this scheme, add this to your config:
config.color_scheme = 'Breadog (Gogh)'
Breath (Gogh)
Source:{{since('20230320-124340-559cb7b0')}}
To use this scheme, add this to your config:
config.color_scheme = 'Breath (Gogh)'
Breath Darker (Gogh)
Source:{{since('20230320-124340-559cb7b0')}}
To use this scheme, add this to your config:
config.color_scheme = 'Breath Darker (Gogh)'
Breath Light (Gogh)
Source:{{since('20230320-124340-559cb7b0')}}
This scheme is also known as `BreathLight (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Breath Light (Gogh)'
Breath Silverfox (Gogh)
Source:{{since('20230320-124340-559cb7b0')}}
This scheme is also known as `BreathSilverfox (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Breath Silverfox (Gogh)'
Breeze
Source:To use this scheme, add this to your config:
config.color_scheme = 'Breeze'
Breeze (Gogh)
Source:{{since('20230320-124340-559cb7b0')}}
To use this scheme, add this to your config:
config.color_scheme = 'Breeze (Gogh)'
Brewer (base16)
Author: `Timothée Poisot (http://github.com/tpoisot)`Source:
{{since('20220807-113146-c2fee766')}}
This scheme is also known as `Brewer (dark) (terminal.sexy)`.
To use this scheme, add this to your config:
config.color_scheme = 'Brewer (base16)'
Brewer (dark) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Brewer (dark) (terminal.sexy)'
Brewer (light) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Brewer (light) (terminal.sexy)'
Bright (base16)
Author: `Chris Kempson (http://chriskempson.com)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Bright (base16)'
Bright Lights
Source:To use this scheme, add this to your config:
config.color_scheme = 'Bright Lights'
Broadcast
Source:This scheme is also known as `Broadcast (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Broadcast'
Broadcast (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Broadcast (Gogh)'
Brogrammer
Source:This scheme is also known as `Brogrammer (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Brogrammer'
Brogrammer (base16)
Author: `Vik Ramanujam (http://github.com/piggyslasher)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Brogrammer (base16)'
Brogrammer (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Brogrammer (Gogh)'
Brush Trees (base16)
Author: `Abraham WhiteSource:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Brush Trees (base16)'
Brush Trees Dark (base16)
Author: `Abraham WhiteSource:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Brush Trees Dark (base16)'
Builtin Dark
Source:To use this scheme, add this to your config:
config.color_scheme = 'Builtin Dark'
Builtin Light
Source:To use this scheme, add this to your config:
config.color_scheme = 'Builtin Light'
Builtin Pastel Dark
Source:To use this scheme, add this to your config:
config.color_scheme = 'Builtin Pastel Dark'
Builtin Solarized Dark
Source:This scheme is also known as `iTerm2 Solarized Dark`.
To use this scheme, add this to your config:
config.color_scheme = 'Builtin Solarized Dark'
Builtin Solarized Light
Source:This scheme is also known as `Solarized Light (Gogh)`, `SolarizedLight (Gogh)`, `iTerm2 Solarized Light`.
To use this scheme, add this to your config:
config.color_scheme = 'Builtin Solarized Light'
Builtin Tango Dark
Source:This scheme is also known as `Gnometerm (terminal.sexy)`.
To use this scheme, add this to your config:
config.color_scheme = 'Builtin Tango Dark'
Builtin Tango Light
Source:To use this scheme, add this to your config:
config.color_scheme = 'Builtin Tango Light'
Butrin (Gogh)
Source:{{since('nightly builds only')}}
To use this scheme, add this to your config:
config.color_scheme = 'Butrin (Gogh)'
title: Color Schemes with first letter "c"
C64
Author: `Jan T. Sott`Source:
This scheme is also known as `C64 (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'C64'
C64 (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'C64 (Gogh)'
Cai (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Cai (Gogh)'
Calamity
Source:To use this scheme, add this to your config:
config.color_scheme = 'Calamity'
Campbell (Gogh)
Source:{{since('20240127-113634-bbcac864')}}
To use this scheme, add this to your config:
config.color_scheme = 'Campbell (Gogh)'
Canvased Pastel (terminal.sexy)
Author: `dkeg`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Canvased Pastel (terminal.sexy)'
carbonfox
Author: `EdenEast`Source:
{{since('20220903-194523-3bb1ed61')}}
To use this scheme, add this to your config:
config.color_scheme = 'carbonfox'
Catch Me If You Can (terminal.sexy)
Author: `dkeg`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Catch Me If You Can (terminal.sexy)'
Catppuccin Frappe
Author: `Catppuccin Org`Source:
{{since('20220807-113146-c2fee766')}}
This scheme is also known as `Catppuccin Frappé (Gogh)`, `catppuccin-frappe`.
To use this scheme, add this to your config:
config.color_scheme = 'Catppuccin Frappe'
Catppuccin Frappé (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Catppuccin Frappé (Gogh)'
Catppuccin Latte
Author: `Catppuccin Org`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Catppuccin Latte'
Catppuccin Latte (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Catppuccin Latte (Gogh)'
Catppuccin Macchiato
Author: `Catppuccin Org`Source:
{{since('20220807-113146-c2fee766')}}
This scheme is also known as `Catppuccin Macchiato (Gogh)`, `catppuccin-macchiato`.
To use this scheme, add this to your config:
config.color_scheme = 'Catppuccin Macchiato'
Catppuccin Macchiato (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Catppuccin Macchiato (Gogh)'
Catppuccin Mocha
Author: `Catppuccin Org`Source:
{{since('20220807-113146-c2fee766')}}
This scheme is also known as `Catppuccin Mocha (Gogh)`, `catppuccin-mocha`.
To use this scheme, add this to your config:
config.color_scheme = 'Catppuccin Mocha'
Catppuccin Mocha (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Catppuccin Mocha (Gogh)'
catppuccin-frappe
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'catppuccin-frappe'
catppuccin-latte
Source:{{since('20230320-124340-559cb7b0')}}
This scheme is also known as `Catppuccin Latte (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'catppuccin-latte'
catppuccin-macchiato
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'catppuccin-macchiato'
catppuccin-mocha
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'catppuccin-mocha'
CGA
Source:To use this scheme, add this to your config:
config.color_scheme = 'CGA'
Chalk
Source:To use this scheme, add this to your config:
config.color_scheme = 'Chalk'
Chalk (base16)
Author: `Chris Kempson (http://chriskempson.com)`Source:
{{since('20220807-113146-c2fee766')}}
This scheme is also known as `Chalk (dark) (terminal.sexy)`.
To use this scheme, add this to your config:
config.color_scheme = 'Chalk (base16)'
Chalk (dark) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Chalk (dark) (terminal.sexy)'
Chalk (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Chalk (Gogh)'
Chalk (light) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Chalk (light) (terminal.sexy)'
Chalkboard
Source:This scheme is also known as `Chalkboard (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Chalkboard'
Chalkboard (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Chalkboard (Gogh)'
ChallengerDeep
Source:To use this scheme, add this to your config:
config.color_scheme = 'ChallengerDeep'
Chameleon (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Chameleon (Gogh)'
Chester
Source:To use this scheme, add this to your config:
config.color_scheme = 'Chester'
Ciapre
Source:This scheme is also known as `Ciapre (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Ciapre'
Ciapre (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Ciapre (Gogh)'
Circus (base16)
Author: `Stephan Boyer (https://github.com/stepchowfun) and Esther Wang (https://github.com/ewang12)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Circus (base16)'
City Lights (Gogh)
Source:{{since('nightly builds only')}}
To use this scheme, add this to your config:
config.color_scheme = 'City Lights (Gogh)'
City Streets (terminal.sexy)
Author: `dkeg`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'City Streets (terminal.sexy)'
Classic Dark (base16)
Author: `Jason Heeris (http://heeris.id.au)`Source:
{{since('20220807-113146-c2fee766')}}
This scheme is also known as `Default (dark) (terminal.sexy)`.
To use this scheme, add this to your config:
config.color_scheme = 'Classic Dark (base16)'
Classic Light (base16)
Author: `Jason Heeris (http://heeris.id.au)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Classic Light (base16)'
Clone Of Ubuntu (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
This scheme is also known as `CloneofUbuntu (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Clone Of Ubuntu (Gogh)'
Cloud (terminal.sexy)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Cloud (terminal.sexy)'
CLRS
Source:This scheme is also known as `Clrs (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'CLRS'
Clrs (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Clrs (Gogh)'
Cobalt 2 (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Cobalt 2 (Gogh)'
Cobalt Neon
Source:This scheme is also known as `Cobalt Neon (Gogh)`, `CobaltNeon (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Cobalt Neon'
Cobalt Neon (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Cobalt Neon (Gogh)'
Cobalt2
Source:This scheme is also known as `Cobalt 2 (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Cobalt2'
Codeschool (base16)
Author: `blockloop`Source:
{{since('20220807-113146-c2fee766')}}
This scheme is also known as `Codeschool (dark) (terminal.sexy)`.
To use this scheme, add this to your config:
config.color_scheme = 'Codeschool (base16)'
Codeschool (dark) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Codeschool (dark) (terminal.sexy)'
Codeschool (light) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Codeschool (light) (terminal.sexy)'
coffee_theme
Source:To use this scheme, add this to your config:
config.color_scheme = 'coffee_theme'
Color Star (terminal.sexy)
Author: `dkeg`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Color Star (terminal.sexy)'
Colorcli (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Colorcli (Gogh)'
Colorful Colors (terminal.sexy)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Colorful Colors (terminal.sexy)'
Colors (base16)
Author: `mrmrs (http://clrs.cc)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Colors (base16)'
Count Von Count (terminal.sexy)
Author: `Baskerville`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Count Von Count (terminal.sexy)'
Crayon Pony Fish (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Crayon Pony Fish (Gogh)'
CrayonPonyFish
Source:This scheme is also known as `Crayon Pony Fish (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'CrayonPonyFish'
Cupcake (base16)
Author: `Chris Kempson (http://chriskempson.com)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Cupcake (base16)'
Cupertino (base16)
Author: `Defman21`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Cupertino (base16)'
CutiePro
Source:{{since('nightly builds only')}}
To use this scheme, add this to your config:
config.color_scheme = 'CutiePro'
Cyberdyne
Source:To use this scheme, add this to your config:
config.color_scheme = 'Cyberdyne'
cyberpunk
Source:To use this scheme, add this to your config:
config.color_scheme = 'cyberpunk'
title: Color Schemes with first letter "d"
DanQing (base16)
Author: `Wenhan Zhu (Cosmos) (zhuwenhan950913@gmail.com)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'DanQing (base16)'
DanQing Light (base16)
Author: `Wenhan Zhu (Cosmos) (zhuwenhan950913@gmail.com)`Source:
{{since('20220903-194523-3bb1ed61')}}
To use this scheme, add this to your config:
config.color_scheme = 'DanQing Light (base16)'
Darcula (base16)
Author: `jetbrains`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Darcula (base16)'
Dark Ocean (terminal.sexy)
Author: `DOOMICIDE`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Dark Ocean (terminal.sexy)'
Dark Pastel
Source:This scheme is also known as `Dark Pastel (Gogh)`, `DarkPastel (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Dark Pastel'
Dark Pastel (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Dark Pastel (Gogh)'
Dark Violet (base16)
Author: `ruler501 (https://github.com/ruler501/base16-darkviolet)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Dark Violet (base16)'
Dark+
Source:To use this scheme, add this to your config:
config.color_scheme = 'Dark+'
darkermatrix
Source:To use this scheme, add this to your config:
config.color_scheme = 'darkermatrix'
darkmatrix
Source:To use this scheme, add this to your config:
config.color_scheme = 'darkmatrix'
darkmoss (base16)
Author: `Gabriel Avanzi (https://github.com/avanzzzi)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'darkmoss (base16)'
Darkside
Source:This scheme is also known as `Darkside (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Darkside'
Darkside (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Darkside (Gogh)'
Darktooth (base16)
Author: `Jason Milkins (https://github.com/jasonm23)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Darktooth (base16)'
Dawn (terminal.sexy)
Author: `Escapist`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Dawn (terminal.sexy)'
dawnfox
Author: `EdenEast`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'dawnfox'
dayfox
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'dayfox'
Deafened (terminal.sexy)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Deafened (terminal.sexy)'
Decaf (base16)
Author: `Alex Mirrington (https://github.com/alexmirrington)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Decaf (base16)'
deep
Source:To use this scheme, add this to your config:
config.color_scheme = 'deep'
Default (dark) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Default (dark) (terminal.sexy)'
Default (light) (terminal.sexy)
Author: `Chris Kempson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Default (light) (terminal.sexy)'
Default Dark (base16)
Author: `Chris Kempson (http://chriskempson.com)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Default Dark (base16)'
Default Light (base16)
Author: `Chris Kempson (http://chriskempson.com)`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Default Light (base16)'
Dehydration (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
This scheme is also known as `DeHydration (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Dehydration (Gogh)'
Derp (terminal.sexy)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Derp (terminal.sexy)'
Desert
Source:This scheme is also known as `Desert (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'Desert'
Desert (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Desert (Gogh)'
Digerati (terminal.sexy)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Digerati (terminal.sexy)'
Dimmed Monokai (Gogh)
Source:{{since('20230712-072601-f4abf8fd')}}
To use this scheme, add this to your config:
config.color_scheme = 'Dimmed Monokai (Gogh)'
DimmedMonokai
Source:This scheme is also known as `Dimmed Monokai (Gogh)`.
To use this scheme, add this to your config:
config.color_scheme = 'DimmedMonokai'
dirtysea (base16)
Author: `Kahlil (Kal) Hodgson`Source:
{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'dirtysea (base16)'
Dissonance (Gogh)
Source:{{since('20220807-113146-c2fee766')}}
To use this scheme, add this to your config:
config.color_scheme = 'Dissonance (Gogh)'
Django
Source:To use this scheme, add this to your config:
config.color_scheme = 'Django'
DjangoRebornAgain
Source:To use this scheme, add this to your config:
config.color_scheme = 'DjangoRebornAgain'
DjangoSmooth
Source:To use this scheme, add this to your config:
config.color_scheme = 'DjangoSmooth'
Doom Peacock
Source:To use this scheme, add this to your config: