WezTermIntermediate13 min
WezTerm is a GPU-accelerated terminal emulator configured in Lua. Unlike Alacritty (which uses TOML/YAML), WezTerm's Lua config gives you the full power of a programming language for keybindings, tab management, and dynamic theming.
This guide sets up WezTerm from scratch: GPU rendering, fonts, color schemes, tab and pane management, and shell integration.
Install WezTerm:
brew install --cask weztermCreate your config file:
~/.wezterm.luaStart with a foundational config that covers the essentials:
local wezterm = require 'wezterm'
return {
-- GPU frontend
front_end = "WebGpu",
-- Font configuration
font = wezterm.font('JetBrains Mono Nerd Font'),
font_size = 14.0,
-- Color scheme
color_scheme = 'Catppuccin Mocha',
-- Window appearance
window_background_opacity = 0.95,
window_decorations = "RESIZE",
-- Tab bar
enable_tab_bar = true,
tab_bar_at_bottom = true,
}front_end = "WebGpu" enables GPU renderingWezTerm has its own multiplexer — you don't need tmux. Manage tabs and split panes directly:
Cmd+T — new tabCmd+D — split pane rightCmd+Shift+D — split pane downCmd+[ / Cmd+] — move between panesCmd+W — close pane/tabCmd+Shift+Enter — toggle pane zoomwezterm ssh user@host and your local keybindings work on the remote machine.WezTerm's Lua config means you can do anything. Here are advanced patterns:
-- Dynamic theme based on system appearance
function scheme_for_appearance(appearance)
if appearance:find("Dark") then
return "Catppuccin Mocha"
else
return "Catppuccin Latte"
end
end
wezterm.on('window-config-reloaded', function(window)
window:set_config_overrides({
color_scheme = scheme_for_appearance(
wezterm.gui.get_appearance()
)
})
end)Rendering and config issues:
front_end = "WebGpu" or adjust font_sizewezterm ls-fontswezterm --config-file ~/.wezterm.lua to debug errorsfront_end = "OpenGL" for compatibilityYour WezTerm is configured. Explore more: