jesseduffield/lazygit · error
Unexpected value '%s' for '%s'. Allowed values: %s
Error message
Unexpected value '%s' for '%s'. Allowed values: %s
What it means
Generic enum validator in pkg/config/user_config_validation.go: validateEnum(name, value, allowedValues) returns this error when a config string field does not match any allowed value. It is the shared backstop for several enum-ish user config options (e.g. git.log config values, custom command output modes such as '', none, terminal, log, logWithPty, popup).
Source
Thrown at pkg/config/user_config_validation.go:143
return errors.New("git.diffRenderers: 'args' cannot be used with diff renderer type 'extDiff'.")
}
case "rawGit":
if diffRenderer.Command != "" {
return errors.New("git.diffRenderers: 'command' cannot be used with diff renderer type 'rawGit'.")
}
default:
return fmt.Errorf("git.diffRenderers: unknown type '%s'. Allowed values: stdinFilter, extDiff, rawGit", diffRenderer.Type)
}
}
return nil
}
func validateEnum(name string, value string, allowedValues []string) error {
if slices.Contains(allowedValues, value) {
return nil
}
allowedValuesStr := strings.Join(allowedValues, ", ")
return fmt.Errorf("Unexpected value '%s' for '%s'. Allowed values: %s", value, name, allowedValuesStr)
}
func validateKeybindingsRecurse(path string, node any) error {
value := reflect.ValueOf(node)
if value.Kind() == reflect.Struct {
for _, field := range reflect.VisibleFields(reflect.TypeOf(node)) {
var newPath string
if len(path) == 0 {
newPath = field.Name
} else {
newPath = fmt.Sprintf("%s.%s", path, field.Name)
}
if err := validateKeybindingsRecurse(newPath,
value.FieldByName(field.Name).Interface()); err != nil {
return err
}
}
} else if value.Kind() == reflect.Slice {View on GitHub (pinned to c477a2959b)
Solutions
- Read the allowed values listed in the error message and set the field to one of them exactly.
- Check casing — matching is exact string equality, not case-insensitive.
- If you believe the value should be valid, check the field's allowed list in user_config_validation.go for your lazygit version.
Example fix
# before
customCommands:
- key: 'a'
command: make test
output: window
# after
customCommands:
- key: 'a'
command: make test
output: popup Defensive patterns
Strategy: validation
Validate before calling
func inEnum(v string, allowed ...string) bool {
for _, a := range allowed {
if v == a {
return true
}
}
return false
} Prevention
- Copy enum values verbatim from the docs of the running lazygit version.
- Watch casing — matching is exact.
When it happens
Trigger: Any config field validated via validateEnum receiving a value outside its allowed list — e.g. customCommands output 'window' instead of 'popup', or a v.value like 'menu' for a field that only permits a fixed set.
Common situations: Typos or casing differences in enum-valued config keys; values valid in older lazygit versions that were renamed; hand-written configs instead of copying from docs.
Related errors
- gui.sidePanels: a side panel must have at least one tab.
- gui.sidePanels must not be empty.
- gui.spinner.frames must not be empty.
- All gui.spinner.frames entries must have the same width.
- git.diffRenderers: 'command' must be specified for diff rend
AI-assisted analysis of jesseduffield/lazygit@c477a2959b (2026-08-15).
Data as JSON: /api/errors/66ce8964632f1425.
Report an issue: GitHub.