Back to list
khaneliman

managing-themes

by khaneliman

Nix configuration for my systems supporting macOS, NixOS, and WSL.

303🍴 14📅 Jan 23, 2026

SKILL.md


name: managing-themes description: "khanelinix theme system patterns. Use when configuring themes, working with Stylix or Catppuccin, or implementing theme-aware module configuration."

Theme System

Theme Hierarchy

Priority (highest to lowest):

  1. Manual theme config - Explicit per-module settings
  2. Catppuccin modules - Catppuccin-specific integration
  3. Stylix - Base16 theming system

Key Principle

Prefer specific theme module customizations over Stylix defaults

Stylix Base

Stylix provides base theming:

stylix = {
  enable = true;
  image = ./wallpaper.png;
  base16Scheme = "catppuccin-mocha";
  polarity = "dark";
};

Catppuccin Overrides

Many apps have dedicated Catppuccin modules:

programs.kitty = {
  enable = true;
  catppuccin.enable = true;  # Uses catppuccin module
};

# Disable stylix for this app
stylix.targets.kitty.enable = false;

Theme-Aware Conditionals

let
  isDark = config.stylix.polarity == "dark";
in
{
  programs.bat.config.theme = lib.mkIf isDark "Catppuccin-mocha";
}

Manual Theme Paths

For apps without theme modules:

xdg.configFile."app/theme.conf".source =
  if config.stylix.polarity == "dark"
  then ./themes/dark.conf
  else ./themes/light.conf;

Theme Configuration Decision Tree

When configuring an application's theme:

Step 1: Check for Catppuccin module

# Search nixpkgs for catppuccin support
nix search nixpkgs catppuccin | grep <app-name>

Step 2A: If Catppuccin module exists → Use it and disable Stylix target

programs.<app> = {
  enable = true;
  catppuccin.enable = true;
  catppuccin.flavor = "mocha";  # or from config.khanelinix.user.theme
};

stylix.targets.<app>.enable = false;  # Prevent conflicts

Step 2B: If no Catppuccin module → Check for built-in theme support

programs.<app> = {
  enable = true;
  theme = "catppuccin-mocha";  # Direct theme name
};

Step 2C: If no theme support → Manual theme files

xdg.configFile."<app>/theme.conf".source =
  if config.stylix.polarity == "dark"
  then ./themes/catppuccin-mocha.conf
  else ./themes/catppuccin-latte.conf;

Step 3: Let Stylix handle it → Last resort fallback

# Do nothing - Stylix will apply base16 theme
# Only if the app supports base16 and no better option exists

Real-World Examples

Example 1: Kitty (has Catppuccin module)

programs.kitty = {
  enable = true;
  catppuccin = {
    enable = true;
    flavor = "mocha";
  };
};

stylix.targets.kitty.enable = false;

Example 2: Waybar (manual theme)

programs.waybar = {
  enable = true;
  style = builtins.readFile (
    if config.stylix.polarity == "dark"
    then ./themes/catppuccin-mocha.css
    else ./themes/catppuccin-latte.css
  );
};

Example 3: Bat (conditional config)

programs.bat = {
  enable = true;
  config.theme = lib.mkIf
    (config.stylix.polarity == "dark")
    "Catppuccin-mocha";
};

Best Practices

  1. Check for Catppuccin module first - Many apps have dedicated support
  2. Disable conflicting Stylix targets when using specific theme modules
  3. Use mkIf for theme conditionals - Clean and readable
  4. Test both polarities when implementing theme-aware config

See Also

Score

Total Score

65/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

+5
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

+5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon