36 Shades of Terminal: Why Random Kitty Themes Make Work Better
Every time I open a terminal, I get a surprise.
Maybe it’s the warm amber of Gruvbox. Maybe it’s the neon punch of Synthwave ‘84. Maybe it’s the deep ocean blues of Kanagawa.
I don’t choose. The system chooses for me.
Why Random?
Terminal work can be monotonous. Same commands, same workflows, same walls of text.
But when every session has a different aesthetic? Something shifts. The work feels fresh. You notice things differently. Your environment is alive.
It’s a tiny thing. It costs nothing. And it makes hours of terminal work just a little more pleasant.
The Setup (NixOS/Home Manager)
I maintain a curated list of 36 themes in my kitty.nix. All dark, all readable, all tested for contrast. No broken blues in ncurses apps.
The magic happens in three parts:
1. Theme definitions — each theme as a Nix attribute:
themes = {
gruvbox-dark = ''
background #282828
foreground #ebdbb2
# ... full color definitions
'';
tokyo-night = ''
background #1a1b26
foreground #c0caf5
# ...
'';
# ... 34 more themes
};
2. A random selector script:
#!/usr/bin/env bash
THEMES_DIR="$HOME/.config/kitty/themes"
THEME_FILES=("$THEMES_DIR"/*.conf)
RANDOM_THEME="${THEME_FILES[RANDOM % ${#THEME_FILES[@]}]}"
cp "$RANDOM_THEME" "$HOME/.config/kitty/current-theme.conf"
3. A wrapper that runs selection before launch:
#!/usr/bin/env bash
kitty-random-theme >/dev/null 2>&1
exec kitty --single-instance=no "$@"
Kitty’s config just includes the generated file:
include current-theme.conf
Home Manager handles installing themes to ~/.config/kitty/themes/ and ensuring the current-theme file stays writable between activations.
The Setup (Traditional Linux)
No Nix? No problem. Same principle, fewer abstractions.
1. Create a themes directory:
mkdir -p ~/.config/kitty/themes
2. Download themes (or create your own .conf files):
# Kitty has a built-in theme browser
kitty +kitten themes
# Or grab theme files from:
# https://github.com/kovidgoyal/kitty-themes
3. Create the selector script at ~/.local/bin/kitty-random-theme:
#!/usr/bin/env bash
THEMES_DIR="$HOME/.config/kitty/themes"
CURRENT="$HOME/.config/kitty/current-theme.conf"
THEME_FILES=("$THEMES_DIR"/*.conf)
cp "${THEME_FILES[RANDOM % ${#THEME_FILES[@]}]}" "$CURRENT"
4. Add to your kitty.conf:
include current-theme.conf
5. Create a launcher (or add to shell rc):
# Option A: wrapper script
alias kitty='kitty-random-theme && command kitty'
# Option B: add to .bashrc/.zshrc
kitty-random-theme 2>/dev/null
That’s it. Every new terminal, new vibes.
The Pleasure of Variety
I’ve been running this setup for months now. Some observations:
- Certain themes trigger different moods. Matrix green for late-night hacking. Catppuccin for gentle morning work.
- You develop favorites you never would have found. I didn’t know I liked Everforest until randomness handed it to me.
- It breaks monotony. 8 hours of terminal work feels less same-y when the canvas keeps changing.
- It’s just… nice. Not everything needs a productivity justification. Some things are just pleasant.
Curation Matters
I curate the theme pool. No light themes (eye strain). No low-contrast themes (readability). No broken color schemes that make ls output unreadable.
36 themes might sound like a lot, but each one is vetted. Every theme in the rotation brings something worth seeing.
Try It
If you spend significant time in a terminal, give random theming a shot for a week.
The variety is surprisingly refreshing.
And when Synthwave ‘84’s neon pink greets you on a gray Monday morning? That’s a tiny moment of joy.
Worth more than you’d expect.
The full Nix configuration lives in my nix-config repo if you want the complete setup.