Skip to main content
  1. Posts/

Catppuccin Mocha: Why I Theme Everything the Same Color

··678 words·4 mins·
Nick Liu
Author
Nick Liu
Building infrastructure for Facebook Feed Ranking at Meta. Previously at Walmart, Twitter, AWS, and eBay. MS in Computer Science at Georgia Tech.
Table of Contents
Your development environment should feel like **one cohesive tool**, not a collection of unrelated windows with clashing colors. I theme everything with the same palette: Catppuccin Mocha . The result is a workspace where context-switching between tools is effortless.

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 = 20

Ghostty 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
#

The real benefit isn’t aesthetics: it’s that context-switching between terminal, editor, and browser no longer requires your brain to re-adapt to different color semantics. Red means error everywhere. Blue means info everywhere. Green means success everywhere.

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:

Related

My Terminal Setup in 2026: Ghostty, tmux, and Neovim

··822 words·4 mins
After years of refining my terminal workflow, I've landed on a stack I genuinely enjoy using every day: **Ghostty** as the terminal emulator, **tmux** with **sesh** for session management, and **Neovim** with **LazyVim** for editing. Everything runs on macOS (Apple Silicon) with a consistent Catppuccin Mocha theme across all tools.

Modern CLI Tools That Replaced My Unix Classics

··901 words·5 mins
I've been gradually replacing classic Unix tools with modern alternatives, mostly written in Rust . After a year of daily use, these aren't experiments anymore. They're muscle memory. The Replacements # Classic Modern Why cat bat Syntax highlighting, line numbers, git integration ls eza Icons, git status, tree view, color-coded grep ripgrep 10x faster, respects .gitignore, smart case find fd Simpler syntax, respects .gitignore, colored output cd zoxide Learns your habits, fuzzy matching sed sd Intuitive regex syntax, no escaping nightmare du dust Visual directory size with a tree view df duf Colorful, filterable disk usage top btop Beautiful TUI with mouse support, per-core graphs ps procs Colorized, searchable, tree view history atuin Encrypted sync, full-text search, workspace filtering Setting Up Aliases # In my .zshrc, I alias the classics to their replacements so the transition is invisible:

Case Study: Building AWS Billing's Unbilled Usage Auditor

··875 words·5 mins
I spent five years on the AWS Billing team. The hardest problem I tackled was detecting when customers used AWS services but weren't charged correctly. This post walks through how I designed a system that reduced charge discrepancies by **300x** and eliminated **230 million** monthly false positives. The Problem # AWS billing is trickier than it looks. When a customer launches an EC2 instance, writes to S3, or queries DynamoDB, each action generates a usage record. These records flow through a pipeline that calculates charges based on the customer’s pricing plan, region, and service tier.