Skip to content

config-settings

Usage
config-settings [-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.

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
Arguments:
-h, --help Print usage and exit

Exit Status:

0 Exited normally
1 Unknown flag, no TTY, or python3/curses unavailable
Examples
config-settings

Dependencies: __fish_palette, __config_settings_state, __config_settings_apply, __config_settings_set_value, python3

Used by: config-toggle