kovidgoyal/kitty · error · ValueError
The value {val} is not a valid choice for progress_bar
Error message
The value {val} is not a valid choice for progress_bar What it means
kitty's config parser rejects values for the progress_bar option that are not one of the allowed strings: left, right, top, bottom, hidden. The value is lowercased before checking, so only membership in that frozenset matters. It is raised while parsing kitty.conf (or a remote-control option set).
Source
Thrown at kitty/options/parse.py:1240
ans["placement_strategy"] = val
choices_for_placement_strategy = frozenset(('top-left', 'top', 'top-right', 'left', 'center', 'right', 'bottom-left', 'bottom', 'bottom-right'))
def pointer_shape_when_dragging(self, val: str, ans: dict[str, typing.Any]) -> None:
ans['pointer_shape_when_dragging'] = pointer_shape_when_dragging(val)
def pointer_shape_when_grabbed(self, val: str, ans: dict[str, typing.Any]) -> None:
val = val.lower()
if val not in self.choices_for_pointer_shape_when_grabbed:
raise ValueError(f"The value {val} is not a valid choice for pointer_shape_when_grabbed")
ans["pointer_shape_when_grabbed"] = val
choices_for_pointer_shape_when_grabbed = choices_for_default_pointer_shape
def progress_bar(self, val: str, ans: dict[str, typing.Any]) -> None:
val = val.lower()
if val not in self.choices_for_progress_bar:
raise ValueError(f"The value {val} is not a valid choice for progress_bar")
ans["progress_bar"] = val
choices_for_progress_bar = frozenset(('left', 'right', 'top', 'bottom', 'hidden'))
def remap_modifiers(self, val: str, ans: dict[str, typing.Any]) -> None:
ans['remap_modifiers'] = remap_modifiers(val)
def remember_window_position(self, val: str, ans: dict[str, typing.Any]) -> None:
ans['remember_window_position'] = to_bool(val)
def remember_window_size(self, val: str, ans: dict[str, typing.Any]) -> None:
ans['remember_window_size'] = to_bool(val)
def remote_control_password(self, val: str, ans: dict[str, typing.Any]) -> None:
for k, v in remote_control_password(val, ans["remote_control_password"]):
ans["remote_control_password"][k] = v
def repaint_delay(self, val: str, ans: dict[str, typing.Any]) -> None:View on GitHub (pinned to 6d5d0c4406)
Solutions
- Change the value to one of: left, right, top, bottom, or hidden
- Check spelling and remove extra whitespace; the value must be a single word
- If copied from another config, re-check the kitty docs for progress_bar
Example fix
# before progress_bar none # after progress_bar hidden
Defensive patterns
Strategy: validation
Validate before calling
from kitty.options.parse import Parser
assert 'hidden' in Parser.choices_for_progress_bar # validate before use
value = value.lower()
if value not in ('left','right','top','bottom','hidden'):
raise SystemExit(f'bad progress_bar: {value}') Type guard
def is_progress_bar(v: str) -> bool:
return v.lower() in ('left','right','top','bottom','hidden') Prevention
- Keep a single source-of-truth set of valid choices next to config generation
- Lint kitty.conf with `kitty --debug-config` before deploying
When it happens
Trigger: Setting `progress_bar` in kitty.conf or via the remote control `set_option` / kitten CLI to anything outside {'left','right','top','bottom','hidden'}, e.g. `progress_bar none` or `progress_bar Left-Top`.
Common situations: Typos, guessing 'none' instead of 'hidden', or copy-pasting configs from older kitty versions/other terminals with different value names.
Related errors
- The value {x} is not a known choice
- The value {val} is not a valid choice for scrollbar
- The value {val} is not a valid choice for strip_trailing_spa
- The value {val} is not a valid choice for tab_bar_align
- The value {val} is not a valid choice for tab_bar_style
AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27).
Data as JSON: /api/errors/d3e06ede290889fa.
Report an issue: GitHub.