Why One Palette Everywhere? #
Most developers pick a theme for their editor and call it a day. Their terminal is one color, their editor another, their tmux status bar a third, and their Git diffs something else entirely. Every time they switch contexts, their brain spends a fraction of a second recalibrating.
That friction adds up. When red means error in every single tool (terminal output, editor diagnostics, Git diffs, monitoring dashboards), you process information faster because your visual vocabulary is consistent.
The Palette #
Catppuccin is a community-driven pastel theme with four flavor variants. I use Mocha, the darkest flavor, across everything.
Base Colors #
Base, Surface0, Surface1: the foundation. Deep blues that are easy on the eyes during long sessions.
Accent Colors #
Blue (info/links), Red (errors/deletions), Green (success/additions): these carry semantic meaning across every tool.
Warm Accents #
Peach (warnings), Yellow (highlights), Mauve (keywords): used for syntax highlighting and UI accents.
Where I Use It #
Every tool in my daily workflow runs Catppuccin Mocha:
Configuration Snippets #
Here’s how I set up Catppuccin Mocha in each tool:
# ~/.config/ghostty/config
theme = catppuccin-mocha
background-opacity = 0.75
background-blur-radius = 20Ghostty ships with Catppuccin built-in. Just set the theme name. The transparency lets the palette blend with the desktop for a frosted-glass aesthetic.
-- LazyVim extra or manual plugin
{ "catppuccin/nvim",
name = "catppuccin",
opts = {
flavour = "mocha",
transparent_background = true,
integrations = {
treesitter = true,
telescope = { enabled = true },
which_key = true,
},
},
}The Catppuccin Neovim plugin has first-class integrations with virtually every popular plugin: Treesitter, Telescope, nvim-cmp, and more all get coordinated colors.
# ~/.config/tmux/tmux.conf
set -g @plugin 'catppuccin/tmux'
set -g @catppuccin_flavor 'mocha'
set -g @catppuccin_window_status_style "rounded"The tmux plugin adds a themed status bar with window indicators, session name, and system info, all matching the terminal and editor.
# ~/.zshrc
export FZF_DEFAULT_OPTS=" \
--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc \
--color=hl:#f38ba8,fg:#cdd6f4,header:#f38ba8 \
--color=info:#cba6f7,pointer:#f5e0dc,marker:#f5e0dc \
--color=fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8"FZF’s color configuration takes raw hex values, so you set each UI element individually. Once configured, fuzzy finding matches the rest of your environment perfectly.
# ~/.gitconfig
[delta]
syntax-theme = Catppuccin Mocha
minus-style = syntax "#3B1219"
plus-style = syntax "#1C3A2D"Delta (the Git pager) uses the Catppuccin bat theme for syntax highlighting in diffs. The custom minus/plus styles tint additions green and deletions red using the Mocha palette.
The Cognitive Load Argument #
When I jump from reading a Git diff (red = deleted, green = added) to my editor (red = error diagnostic, green = test passing) to my terminal output (red = failed command, green = success), my brain doesn’t skip a beat. The color semantics are identical.
This is the same principle behind why airports, hospitals, and road signs use standardized color systems. Consistency reduces cognitive overhead.
The Full Color Reference #
For anyone wanting to replicate this setup, here are the key Catppuccin Mocha values I use most:
| Role | Color | Hex | Usage |
|---|---|---|---|
| Base | Dark blue | #1e1e2e |
Backgrounds |
| Text | Light lavender | #cdd6f4 |
Primary text |
| Blue | Soft blue | #89b4fa |
Links, info, variables |
| Red | Soft red | #f38ba8 |
Errors, deletions |
| Green | Soft green | #a6e3a1 |
Success, additions |
| Peach | Warm peach | #fab387 |
Warnings, numbers |
| Yellow | Soft yellow | #f9e2af |
Highlights, strings |
| Mauve | Purple | #cba6f7 |
Keywords, headings |
| Overlay | Muted gray | #6c7086 |
Comments, secondary text |
Getting Started #
If you want to try Catppuccin Mocha yourself, the project has ports for 300+ apps. Start with your terminal emulator and editor, then expand from there.
For my complete configuration files including all the snippets above, check out my dotfiles: