Skip to main content
Isabel’s Dotfiles uses the Catppuccin theme system-wide for a cohesive, beautiful aesthetic. The configuration integrates Catppuccin across NixOS, Home Manager, and individual applications.

Overview

Catppuccin is a community-driven pastel theme that comes in four flavors. This configuration uses the Mocha flavor with Pink accents.

Latte

Light theme

Frappé

Mid-light theme

Macchiato

Mid-dark theme

Mocha

Dark theme (used here)

NixOS configuration

The system-level Catppuccin configuration is in modules/nixos/catppuccin.nix:
modules/nixos/catppuccin.nix
{
  imports = [ inputs.catppuccin.nixosModules.catppuccin ];

  config = {
    catppuccin = {
      enable = lib.mkDefault (!config.garden.profiles.headless.enable);
      sources = options.catppuccin.sources.default;
      flavor = "mocha";

      # IFD, easy to vendor
      tty.enable = false;
    };
  };
}
Catppuccin is automatically disabled for headless systems (servers without a GUI).

Console colors

The configuration includes custom console colors matching the Mocha palette:
modules/nixos/catppuccin.nix
console.colors = lib.mkIf config.catppuccin.enable [
  "1e1e2e"  # Base
  "f38ba8"  # Red
  "a6e3a1"  # Green
  "f9e2af"  # Yellow
  "89b4fa"  # Blue
  "f5c2e7"  # Pink
  "94e2d5"  # Teal
  "bac2de"  # Subtext1
  "585b70"  # Surface2
  "f38ba8"  # Red (bright)
  "a6e3a1"  # Green (bright)
  "f9e2af"  # Yellow (bright)
  "89b4fa"  # Blue (bright)
  "f5c2e7"  # Pink (bright)
  "94e2d5"  # Teal (bright)
  "a6adc8"  # Subtext0
];

Home Manager configuration

Per-user theming is configured in home/isabel/themes/catppuccin.nix:
home/isabel/themes/catppuccin.nix
{
  imports = [ inputs.catppuccin.homeModules.catppuccin ];

  config = {
    catppuccin = {
      inherit (config.garden.profiles.workstation) enable;
      sources = options.catppuccin.sources.default;

      flavor = "mocha";
      accent = "pink";

      cursors = {
        enable = isGui;
        accent = "dark";
      };

      gtk.icon.enable = isGui;
    };
  };
}

Accent colors

Catppuccin supports multiple accent colors. This configuration uses pink:
  • Rosewater
  • Flamingo
  • Pink (used here)
  • Mauve
  • Red
  • Maroon
  • Peach
  • Yellow
  • Green
  • Teal
  • Sky
  • Sapphire
  • Blue
  • Lavender

GTK theming

The GTK configuration in home/isabel/themes/gtk.nix uses Catppuccin themes:
home/isabel/themes/gtk.nix
gtk = {
  enable = true;

  theme = {
    name = "catppuccin-${ctp.flavor}-${ctp.accent}-standard";
    package = pkgs.catppuccin-gtk.override {
      size = "standard";
      accents = [ ctp.accent ];
      variant = ctp.flavor;
    };
  };
};

GTK preferences

home/isabel/themes/gtk.nix
gtk3.extraConfig = {
  # Make things look nice
  gtk-application-prefer-dark-theme = true;
  gtk-decoration-layout = "appmenu:none";

  # Font rendering
  gtk-xft-antialias = 1;
  gtk-xft-hinting = 1;
  gtk-xft-hintstyle = "hintslight";

  # Stop annoying sounds
  gtk-enable-event-sounds = 0;
  gtk-enable-input-feedback-sounds = 0;
  gtk-error-bell = 0;
};
The same settings are applied to both GTK3 and GTK4 for consistency.

Selective application theming

Some applications have Catppuccin theming disabled for specific reasons:
home/isabel/themes/catppuccin.nix
# I don't even use the colors from the port
waybar.enable = false;

# IFD and can use term colors
starship.enable = false;

# IFD and easy enough to vendor
fzf.enable = false;

# IFD and can use term colors
eza.enable = false;
IFD (Import From Derivation) can slow down evaluation. Some ports are disabled to avoid this performance penalty when terminal colors can be used instead.

Cursor theme

Catppuccin cursors are enabled for GUI systems:
home/isabel/themes/catppuccin.nix
cursors = {
  enable = isGui;
  accent = "dark";
};
The dark accent provides better contrast on dark backgrounds.

Icon theme

home/isabel/themes/catppuccin.nix
gtk.icon.enable = isGui;

TTY theming

TTY theming is disabled to avoid Import From Derivation:
modules/nixos/catppuccin.nix
# IFD, easy to vendor
tty.enable = false;
Instead, console colors are set manually (shown earlier).

Hyprland integration

The Hyprland configuration uses Catppuccin color variables:
home/isabel/gui/hyprland.nix
general = {
  "col.active_border" = "$pink";
  "col.inactive_border" = "$surface1";
};

group = {
  "col.border_active" = "$rosewater";
  "col.border_inactive" = "$surface1";
};

decoration = {
  shadow = {
    enabled = true;
    color = "rgb(11111B)";  # Mocha base
    color_inactive = "rgba(11111B00)";
  };
};
These color variables are automatically provided by the Catppuccin theme integration.

Binary cache

To speed up builds, the configuration uses the Catppuccin binary cache:
modules/base/nix/substituters.nix
substituters = [
  "https://nix-community.cachix.org"
]
++ optionals hasCtp [
  "https://catppuccin.cachix.org"
];

trusted-public-keys = [
  "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
]
++ optionals hasCtp [
  "catppuccin.cachix.org-1:noG/4HkbhJb+lUAdKrph6LaozJvAeEEZj4N732IysmU="
];
The cache is only added when Catppuccin is enabled.

Changing themes

To use a different flavor or accent:
1

Edit the flavor

Change flavor = "mocha" to one of: latte, frappe, macchiato, or mocha
catppuccin.flavor = "frappe";  # Switch to Frappé
2

Edit the accent

Change accent = "pink" to any of the 14 available accent colors
catppuccin.accent = "mauve";  # Switch to mauve accent
3

Rebuild your system

sudo nixos-rebuild switch --flake ~/.config/flake#<host>

Application-specific theming

Many applications in the configuration automatically use Catppuccin:
  • Terminal emulators: Ghostty, WezTerm
  • Editors: Neovim (via izvim)
  • Browsers: Chromium
  • File managers: Cosmic Files
  • System UI: Hyprland, GTK applications
  • Development tools: Git, lazygit
Each application’s theme configuration is located in its respective module under home/isabel/.

Color reference

Catppuccin Mocha palette:
base      = "#1e1e2e"
mantle    = "#181825"
crust     = "#11111b"

Next steps

Window Manager

See how Catppuccin integrates with Hyprland

Home Manager

Learn about per-user configuration

Build docs developers (and LLMs) love