I’m a Senior Software Engineer living in Berlin. Shifting limits based on quality and robustness. Cutting-edge software development. Defining durable and flexible interfaces. Creating rich and intuitive user experiences.

Alacritty Meets Tmux

We will configure Alacritty with sensible defaults, a crisp and modern logo, and some quality-of-life features. On top of that, we’ll prepare Tmux so we can manage multiple terminal sessions with ease. But first — what is Alacritty? It’s a GPU-accelerated terminal emulator focused on simplicity and performance, with no unnecessary bloat. It’s cross-platform, minimal, and integrates well with developer workflows.

Install Alacritty and a nerd font

The easiest way to install Alacritty on macOS is via Homebrew. We’ll also install the FiraCode Nerd Font, which includes developer-friendly glyphs and icons for prompt enhancements, status bars, and UI themes.

brew install alacritty font-fira-code-nerd-font

Configure Alacritty

I keep my Alacritty configuration inside the ~/.config directory, which is the default location according to the XDG Base Directory specification. Alacritty switched from YAML to TOML configuration format in 2023, so if you’re following older guides, be aware that .yaml configs are no longer supported.

The configuration covers several areas:

  • Theme import from a separate theme.toml file.
  • Font settings, here using FiraCode Nerd Font in multiple styles.
  • Environment variables for terminal compatibility.
  • Key bindings aligned with Tmux shortcuts for a smooth workflow.

Theme and Font Settings

[general]
live_config_reload = true
# theme
import = [
"~/.config/alacritty/themes/theme.toml"
]
[env]
TERM = "xterm-256color"
[font]
size = 14.0
[font.bold]
family = "FiraCode Nerd Font"
style = "Bold"
[font.bold_italic]
family = "FiraCode Nerd Font"
style = "Bold Italic"
[font.italic]
family = "FiraCode Nerd Font"
style = "Italic"
[font.normal]
family = "FiraCode Nerd Font"
style = "Regular"

Key Bindings

The key bindings replicate Tmux shortcuts so you can seamlessly navigate, split, and manage panes without conflicting muscle memory. In Tmux, the default leader key is Ctrl+B, which you press before any command sequence. These Alacritty bindings send the corresponding Ctrl+B sequences so you can trigger Tmux actions directly with more familiar shortcuts.

For example:

  • Cmd+N → Split pane horizontally (Ctrl+B ")
  • Cmd+Shift+N → Split pane vertically (Ctrl+B %)
  • Cmd+[0-9] → Switch to specific Tmux windows
  • Cmd+T → Create a new Tmux window (Ctrl+B c)
  • Cmd+O → Toggle between panes (Ctrl+B o)
  • Cmd+W → Close the current pane/window (Ctrl+B x)
  • Cmd+Z → Zoom/unzoom the current pane (Ctrl+B z)
  • Alt+Right / Alt+Left → Move forward/backward one word (useful in shells and editors)

This setup also mimics well-known macOS keybindings for opening (Cmd+T), closing (Cmd+W), and switching (Cmd+[0-9]) between tabs or windows—making the terminal feel like a native macOS app while still retaining the power of Tmux.

[[keyboard.bindings]]
chars = "\u0002\u0022"
key = "N"
mods = "Command"
[[keyboard.bindings]]
chars = "\u0002%"
key = "N"
mods = "Command|Shift"
[[keyboard.bindings]]
chars = "\u00020"
key = "Key0"
mods = "Command"
[[keyboard.bindings]]
chars = "\u00021"
key = "Key1"
mods = "Command"
[[keyboard.bindings]]
chars = "\u00022"
key = "Key2"
mods = "Command"
[[keyboard.bindings]]
chars = "\u00023"
key = "Key3"
mods = "Command"
[[keyboard.bindings]]
chars = "\u00024"
key = "Key4"
mods = "Command"
[[keyboard.bindings]]
chars = "\u00025"
key = "Key5"
mods = "Command"
[[keyboard.bindings]]
chars = "\u00026"
key = "Key6"
mods = "Command"
[[keyboard.bindings]]
chars = "\u00027"
key = "Key7"
mods = "Command"
[[keyboard.bindings]]
chars = "\u00028"
key = "Key8"
mods = "Command"
[[keyboard.bindings]]
chars = "\u00029"
key = "Key9"
mods = "Command"
[[keyboard.bindings]]
chars = "\u0002c"
key = "T"
mods = "Command"
[[keyboard.bindings]]
chars = "\u0002o"
key = "O"
mods = "Command"
[[keyboard.bindings]]
chars = "\u0002x"
key = "W"
mods = "Command"
[[keyboard.bindings]]
chars = "\u0002z"
key = "Z"
mods = "Command"
# see: https://stackoverflow.com/a/78008190
[[keyboard.bindings]]
chars = "\u001BF"
key = "Right"
mods = "Alt"
[[keyboard.bindings]]
chars = "\u001BB"
key = "Left"
mods = "Alt"

Starting with Alacritty 0.13.1, YAML configuration files are no longer supported. In the current TOML format, the \x1B escape sequence is not recognized—use \u001B instead, as described here.

General Settings

The general settings section adjusts scrolling history, removes macOS window decorations for a cleaner look, and adds padding for a balanced feel.

[scrolling]
history = 10000
[window]
decorations = "buttonless"
dynamic_padding = false
[window.padding]
x = 8
y = 8

Alacritty Theme

For a consistent look across my development tools, I use the Monokai Pro theme. It’s a well-balanced color palette that’s easy on the eyes and works equally well in bright or dim environments.

# Default colors
[colors.primary]
background = "#2d2a2e"
foreground = "#fff1f3"
# Normal colors
[colors.normal]
black = "#2c2525"
red = "#fd6883"
green = "#adda78"
yellow = "#f9cc6c"
blue = "#f38d70"
magenta = "#a8a9eb"
cyan = "#85dacc"
white = "#fff1f3"
# Bright colors
[colors.bright]
black = "#72696a"
red = "#fd6883"
green = "#adda78"
yellow = "#f9cc6c"
blue = "#f38d70"
magenta = "#a8a9eb"
cyan = "#85dacc"
white = "#fff1f3"

Bonus: A fancy app icon for Alacritty

For those looking to give Alacritty a more visually cohesive feel on macOS, the talented designer at Yoolk.Ninja has created a sleek, modern icon inspired by the Alacritty logo. This custom icon places a stylized “A” overlaid with a subtle gradient and long shadow effect, resulting in a flat design that fits in beautifully with macOS aesthetics.

Alacritty App Icon

To use it: download the .zip file, extract it, right-click your Alacritty.app in Finder’s Applications folder, choose Get Info, and then drag the new icon (Apps-Alacritty.icns from within the ICNS folder) onto the small icon preview in the window. Your terminal will now sport a polished, native look that aligns seamlessly with other apps. Unfortunately, this change does not survive Alacritty updates, so you’ll need to repeat the process after each upgrade—but I personally find it very worth the effort.

Introducing Tmux

Tmux is a powerful terminal multiplexer that allows you to run multiple terminal sessions inside a single window. With Tmux, you can split your terminal into panes, create multiple windows, detach from a session, and reattach later—even after logging out or rebooting. It’s an indispensable tool for developers and system administrators who need persistent terminal workflows.

To get the most out of Tmux, it’s worth using the Tmux Plugin Manager (tpm). This lightweight manager makes it easy to install, update, and remove Tmux plugins without manually cloning repositories. With tpm, you can add extra functionality such as session restoration, Vim-like navigation between panes, or enhanced status bar themes—all managed from within Tmux itself.

Install Tmux and tpm

Installing Tmux and tpm on macOS is straightforward with Homebrew:

brew install tmux tpm

After installation, Tmux will be available in your terminal, and tpm will be installed into your Homebrew prefix, ready to manage your plugins.

Configure Tmux

My Tmux configuration focuses on improving usability, providing a clean theme, and aligning shortcuts with my Alacritty setup. For the theme, I use maxpetretta/tmux-monokai-pro, where I contributed improvements to the network bandwidth part as well as updates to the newest version of the underlying Dracula theme.

Some notable configuration points:

  • Status bar position moved to the top for better visibility.
  • Pane and window numbering starts at 1 instead of 0.
  • Mouse support enabled for scrolling and pane resizing.
  • Path-preserving splits so new panes and windows start in the current working directory.
  • Zoom toggle bound to Ctrl+Space for quickly focusing on a single pane.
  • Large scrollback buffer for working with long output history.
  • Plugins for sensible defaults, Vim-style navigation, Monokai Pro theming, and session persistence (tmux-resurrect and tmux-continuum).

~/.config/tmux/tmux.conf

# set status bar to the top (default is bottom)
set-option -g status-position top
# disable confirm before killing
bind-key x kill-pane
# enable mouse scrolling
set-option -g mouse on
# start windows and panes at 1, not 0
set -g base-index 1
set -g pane-base-index 1
set-window-option -g pane-base-index 1
set-option -g renumber-windows on
# [Ctrl-Space] to zoom current pane
# see: https://sgeb.io/posts/tmux-zoom-panes/
bind-key -n C-Space resize-pane -Z
# increase history limit
set-option -g history-limit 100000
# split windows using current path
bind-key '"' split-window -c "#{pane_current_path}"
bind-key % split-window -h -c "#{pane_current_path}"
bind-key c new-window -c "#{pane_current_path}"
# typecraft: https://www.youtube.com/playlist?list=PLsz00TDipIfdrJDjpULKY7mQlIFi4HjdR
# reload config with <Leader> + r
unbind-key r
bind-key r source-file ~/.config/tmux/tmux.conf \; display-message "Config reloaded …"
# list of plugins
set-option -g @plugin "tmux-plugins/tpm"
set-option -g @plugin "tmux-plugins/tmux-sensible"
set-option -g @plugin "christoomey/vim-tmux-navigator"
set-option -g @plugin "maxpetretta/tmux-monokai-pro"
set-option -g @plugin "tmux-plugins/tmux-resurrect"
set-option -g @plugin "tmux-plugins/tmux-continuum"
set-option -g @continuum-restore "on"
set-option -g @monokai-show-flags true
set-option -g @monokai-network-bandwidth en0
set-option -g @monokai-network-bandwidth-colors "yellow black"
set-option -g @monokai-time-format "%a %b %d %H:%M"
set-option -g @monokai-time-colors "white black"
# the last plugin has to have a yellow background
set-option -g @monokai-plugins "time network-bandwidth"
# initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run "/opt/homebrew/opt/tpm/share/tpm/tpm"

Use tmux

Using Tmux day-to-day typically involves creating a session (e.g., tmux new -t main) or attaching to a running one (tmux attach -d -t main). With the tmux-resurrect plugin, you can save the exact layout of windows, panes, and even the commands running inside them. tmux-continuum builds on this by automatically saving those states periodically and restoring them when you start Tmux again. Together, they make your terminal workspace persistent across reboots, crashes, or logouts—so you can pick up exactly where you left off without manually recreating your environment.

tmux new -t main
tmux attach -d -t main

Closing Thoughts

This guide covered setting up a powerful and visually appealing terminal environment using Alacritty and Tmux, complete with custom themes, keybindings, session management, and handy plugins. For those who want to dive deeper or prefer ready-made, opinionated setups, my public repository m99coder/dotfiles is a great resource. Inside, you’ll find a curated collection of configurations tailored for macOS, including shell customizations, editor settings, terminal themes, Tmux configurations, and various utility scripts—all designed to streamline development workflows and create a consistent, efficient workspace. Whether you’re starting fresh or looking to refine your setup, this repo offers practical examples and inspiration to help you craft your ideal environment.