kovidgoyal/kitty · warning

No theme named %#v found

Error message

No theme named %#v found

What it means

change_colors resolves the --配色 theme name via the theme collection (ThemeByName) and got nil, meaning no bundled or loaded theme matches the requested name. The kitten then cannot switch kitty's colors over the SSH session.

Source

Thrown at kittens/ssh/main.go:612

func change_colors(color_scheme string) (ans string, err error) {
	if color_scheme == "" {
		return
	}
	var theme *themes.Theme
	if !strings.HasSuffix(color_scheme, ".conf") {
		cs := os.ExpandEnv(color_scheme)
		tc, closer, err := themes.LoadThemes(-1)
		if err != nil && errors.Is(err, themes.ErrNoCacheFound) {
			tc, closer, err = themes.LoadThemes(time.Hour * 24)
		}
		if err != nil {
			return "", err
		}
		defer closer.Close()
		theme = tc.ThemeByName(cs)
		if theme == nil {
			return "", fmt.Errorf("No theme named %#v found", cs)
		}
	} else {
		theme, err = themes.ThemeFromFile(utils.ResolveConfPath(color_scheme))
		if err != nil {
			return "", err
		}
	}
	ans, err = theme.AsEscapeCodes()
	if err == nil {
		ans = "\033[#P" + ans
	}
	return
}

func run_ssh(ssh_args, server_args, found_extra_args []string, ssh_config_channel <-chan *SSHConfig) (rc int, err error) {
	go shell_integration.Data()
	go RelevantKittyOpts()
	defer func() {

View on GitHub (pinned to 6d5d0c4406)

Solutions

  1. List available names: kitty +kitten themes (or check themes.json in the kitty config dir)
  2. Fix the spelling/case to match an installed theme exactly
  3. For custom themes, pass the path to the .conf file (which goes through ThemeFromFile) instead of a name
  4. Update kitty if the theme is a newer bundled one

Example fix

# before
kitty +kitten ssh --kitten color-scheme=SolorizedDark user@host
# after
kitty +kitten ssh --kitten color-scheme='Solarized Dark' user@host
Defensive patterns

Strategy: validation

Validate before calling

names, _ := themeNames() // kitty +kitten themes listing
if !slices.Contains(names, wantTheme) {
    // fall back to a known-good name or a theme file path
}

Type guard

func isValidTheme(tc *themes.ThemeCollection, name string) bool {
    return tc.ThemeByName(name) != nil
}

Try / catch

if _, err := changeColors(...); err != nil && strings.Contains(err.Error(), "No theme named") {
    // fall back to default theme
}

Prevention

When it happens

Trigger: run_ssh with a color scheme name that is not in the themes collection — misspelled names, custom theme files passed as names instead of paths, or themes not installed in this kitty build.

Common situations: Typos like 'Solarized Dark Extra' vs 'Solarized Dark'; referencing a user theme file by bare name; older kitty builds lacking newer bundled themes; theme names differing across kitty versions.

Related errors


AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27). Data as JSON: /api/errors/e67a2f3db3bac273. Report an issue: GitHub.