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
- List available names: kitty +kitten themes (or check themes.json in the kitty config dir)
- Fix the spelling/case to match an installed theme exactly
- For custom themes, pass the path to the .conf file (which goes through ThemeFromFile) instead of a name
- 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
- Pin exact theme names from kitty +kitten themes
- Prefer theme file paths for custom schemes
- Recheck theme names after kitty upgrades
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
- Could not parse delegate command: %#v with error: %w
- The colors configuration file {emph(err.filename)} was not f
- Invalid listen-on value: {spec} must be of the form protocol
- Unknown protocol in listen-on value: {spec}
- Unknown action in option `notify_on_cmd_finish`: {action}
AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27).
Data as JSON: /api/errors/e67a2f3db3bac273.
Report an issue: GitHub.