Skip to content

config-settings

Usage
config-settings [-s | --style color|mono|contrast] [-h | --help]

Opens an interactive full-screen TUI for managing fish config settings across four pages, without having to type or remember variable names:

Universal — opinionated-category toggles (C1–C6) + master, persistent (set -U)
Session — the same toggles, current shell only (set -g)
Sponge — sponge history-scrubbing settings: delay, successful exit codes, purge-only-on-exit, allow-previously-successful, and extra sensitive variable-name tokens
Paths — scrollback log directory, scrollback max files, the user-dots path, and the user-dots convenience symlink toggle (Dots link)

Toggle rows use ← / → (or h / l) to step OFF ← DEFAULT → ON; DEFAULT erases the variable so the master switch / built-in default applies. On the Universal/Session pages, Enter on a category row (C1–C6) opens that category’s sub-category drill-down page, which leads with the category’s own toggle; Escape backs out. Value rows (Sponge, Paths) use Enter to edit inline and ← / h to reset to the row default; committing a blank edit does the same. List rows (e.g. Extra secret, OK codes) accept values separated by commas and/or whitespace — “A, B”, “A,B” and “A B” all yield the same two entries. Tab / Shift-Tab cycle through pages.

/ filters the current page on label and description. On the Universal and Session pages the filter also reaches into every category’s sub-categories, listing hits as “Category › Sub”, so a sub-category can be toggled without drilling into its parent first.

Edits are collected while the TUI runs and applied in one batch when it exits, via __config_settings_apply and __config_settings_set_value. The status bar shows a pending count. This is a deliberate consequence of the renderer being a child process: a child cannot reach into its parent shell to set a global, so the Session page’s edits come back as a fish script the function sources on exit, and the Universal page rides the same path for consistency. Always available regardless of __fish_config_opinionated state.

The Sponge and Paths pages always write universal variables — these are persistent, set-and-forget settings with no per-session scope. Editing a scrollback row updates both the __fish_scrollback_history_* source-of-truth variables and the exported SCROLLBACK_HISTORY_* mirrors, so the AUR/tmux/ zellij log wrappers (which read the exported names) see the change in the running session. Editing Dots link re-runs __fish_user_dots_link.

The panel is drawn by scripts/config-settings-tui.py using Python’s stdlib curses module, which owns the cell arithmetic, the alternate screen and the redraw diffing. It resizes with the terminal and needs no width tiers.

Three display styles: color (the default), mono and contrast. mono draws in the terminal’s own colours only, marking the selection with reverse video; values always read as text (ON / OFF / DEFAULT), so nothing is lost without colour. contrast keeps the colours but replaces the dim grey and blue with white, bolds every line and marks the selection in reverse video. NO_COLOR set to a non-empty value (https://no-color.org) selects mono unless --style says otherwise.

Navigation:

↑ ↓ / k j Move cursor
← → / h l Toggle rows: OFF ← DEFAULT → ON
← / h Value rows: reset to default
Enter Category rows: open the sub-category page.
Value rows: edit inline
/ Filter, sub-categories included
Escape Back out of a sub-category page, or clear the filter
Tab / S-Tab Next / previous page
? Help overlay
q Apply pending edits and exit
-s, --style <name> Display style: color, mono or contrast (default: mono when NO_COLOR is set, color otherwise)
-h, --help Print usage and exit
0 Exited normally
1 No TTY, or python3/curses unavailable
2 Unknown flag, or an unknown --style
Terminal window
config-settings
config-settings --style contrast

Dependencies: __fish_palette, __config_settings_state, __config_settings_apply, __config_settings_set_value, python3

Classification: bypasses-shadow(rm)