On first run we copy the default theme to universal variables for colors
(since these defaults are not included in the binary).
Similarly, we have "fish_config theme save", which copies the given theme
to the same universal variables.
Sometimes we make changes to a default theme. Existing users won't see
those updates by default because previous defaults have been turned into
universal variables, which are indistinguishable from user-set variables.
This also means that installing fish on two systems might result in different
colors if the initially installed versions differ. This is surprising.
It feels difficult to get rid of universal variables here without breaking
features such as instant propagation on "set fish_color_normal blue"
or tab-completion on "set fish_color" showing the current value even when
that's a default.
Assuming that we don't want to stop setting these universal variables,
try a different solution: keep track of whether a variable wants to follow
future updates/removals.
This is opt-in via "--track" (e.g. "fish_config theme save --track THEME")
but crucially, enabled for the default theme when that one is saved on first launch.
(Of course this means that this enhancement only works on new installations.)
This allows customizing individual color variables (which likely means
removing --track marker) while still getting updates for other color variables.
Note that whenever we add a new color, we still need to write a migration
(see "__fish_initialized") that initializes this color in the universal
scope with the "--track" marker.
TODO:
- add a "follow future updates to this theme" checkbox to webconfig
- changelog