Add dynamic theming for gum (#4467)

* Add dynamic theming for gum.

* Add migration.

* Fix migration script.

* Add omarchy-theme-reset utility.

* Move env variables into seperate file and update migration script.

* Migration adds the new hyprland config file to the users hyprland.conf.

* Add gum.env.conf to default env.conf instead.

* Reuse new omarchy-theme-refresh and update migration.

* Ensure no errors are thrown if the file can't be loaded

* Just apply this on the next theme selection

So it's not disruptive

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
This commit is contained in:
Severin Richner
2026-05-03 20:26:03 +02:00
committed by GitHub
co-authored by David Heinemeier Hansson
parent 6370a673ed
commit d904ed3afe
4 changed files with 143 additions and 8 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
# omarchy:summary=Prompt for confirmation before starting an update
gum style --border normal --border-foreground 6 --padding "1 2" \
gum style --border normal --padding "1 2" \
"Ready to update?" \
"" \
"• You cannot stop the update once you start!" \
+5
View File
@@ -1,3 +1,8 @@
# GUM environment variables for styling purposes
# hyprlang noerror true
source = ~/.config/omarchy/current/theme/gum.env.conf
# hyprlang noerror false
# Cursor size
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
-7
View File
@@ -138,10 +138,3 @@ cursor {
binds {
hide_special_on_workspace_change = true
}
# Style Gum confirm to match terminal theme
env = GUM_CONFIRM_PROMPT_FOREGROUND,6 # Cyan
env = GUM_CONFIRM_SELECTED_FOREGROUND,0 # Black
env = GUM_CONFIRM_SELECTED_BACKGROUND,2 # Green
env = GUM_CONFIRM_UNSELECTED_FOREGROUND,7 # White
env = GUM_CONFIRM_UNSELECTED_BACKGROUND,8 # Dark grey
+137
View File
@@ -0,0 +1,137 @@
# Gum Style (generic) Variables
env = FOREGROUND,#{{ foreground }}
env = BACKGROUND,#{{ background }}
env = BORDER_FOREGROUND,#{{ accent }}
env = BORDER_BACKGROUND,#{{ background }}
# Gum Confirm Style Variables
env = GUM_CONFIRM_PROMPT_FOREGROUND,#{{ accent }}
env = GUM_CONFIRM_PROMPT_BACKGROUND,#{{ background }}
env = GUM_CONFIRM_SELECTED_FOREGROUND,#{{ selection_foreground }}
env = GUM_CONFIRM_SELECTED_BACKGROUND,#{{ selection_background }}
env = GUM_CONFIRM_UNSELECTED_FOREGROUND,#{{ foreground }}
env = GUM_CONFIRM_UNSELECTED_BACKGROUND,#{{ background }}
# Gum Input Style Variables
env = GUM_INPUT_PROMPT_FOREGROUND,#{{ accent }}
env = GUM_INPUT_PROMPT_BACKGROUND,#{{ background }}
env = GUM_INPUT_PLACEHOLDER_FOREGROUND,#{{ color8 }}
env = GUM_INPUT_PLACEHOLDER_BACKGROUND,#{{ background }}
env = GUM_INPUT_CURSOR_FOREGROUND,#{{ cursor }}
env = GUM_INPUT_CURSOR_BACKGROUND,#{{ background }}
env = GUM_INPUT_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_INPUT_HEADER_BACKGROUND,#{{ background }}
# Gum Choose Style Variables
env = GUM_CHOOSE_CURSOR_FOREGROUND,#{{ cursor }}
env = GUM_CHOOSE_CURSOR_BACKGROUND,#{{ background }}
env = GUM_CHOOSE_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_CHOOSE_HEADER_BACKGROUND,#{{ background }}
env = GUM_CHOOSE_ITEM_FOREGROUND,#{{ foreground }}
env = GUM_CHOOSE_ITEM_BACKGROUND,#{{ background }}
env = GUM_CHOOSE_SELECTED_FOREGROUND,#{{ selection_foreground }}
env = GUM_CHOOSE_SELECTED_BACKGROUND,#{{ selection_background }}
# Gum Filter Style Variables
env = GUM_FILTER_PROMPT_FOREGROUND,#{{ accent }}
env = GUM_FILTER_PROMPT_BACKGROUND,#{{ background }}
env = GUM_FILTER_TEXT_FOREGROUND,#{{ foreground }}
env = GUM_FILTER_TEXT_BACKGROUND,#{{ background }}
env = GUM_FILTER_MATCH_FOREGROUND,#{{ accent }}
env = GUM_FILTER_CURSOR_TEXT_FOREGROUND,#{{ cursor }}
env = GUM_FILTER_CURSOR_TEXT_BACKGROUND,#{{ background }}
env = GUM_FILTER_SELECTED_FOREGROUND,#{{ selection_foreground }}
env = GUM_FILTER_SELECTED_BACKGROUND,#{{ selection_background }}
env = GUM_FILTER_INDICATOR_FOREGROUND,#{{ accent }}
env = GUM_FILTER_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_FILTER_MATCH_BACKGROUND,#{{ background }}
env = GUM_FILTER_HEADER_BACKGROUND,#{{ background }}
env = GUM_FILTER_PLACEHOLDER_FOREGROUND,#{{ color8 }}
env = GUM_FILTER_PLACEHOLDER_BACKGROUND,#{{ background }}
env = GUM_FILTER_INDICATOR_BACKGROUND,#{{ background }}
env = GUM_FILTER_SELECTED_PREFIX_FOREGROUND,#{{ selection_foreground }}
env = GUM_FILTER_SELECTED_PREFIX_BACKGROUND,#{{ selection_background }}
env = GUM_FILTER_UNSELECTED_PREFIX_FOREGROUND,#{{ color8 }}
env = GUM_FILTER_UNSELECTED_PREFIX_BACKGROUND,#{{ background }}
# Gum Table Style Variables
env = GUM_TABLE_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_TABLE_HEADER_BACKGROUND,#{{ background }}
env = GUM_TABLE_CELL_FOREGROUND,#{{ foreground }}
env = GUM_TABLE_CELL_BACKGROUND,#{{ background }}
env = GUM_TABLE_BORDER_FOREGROUND,#{{ color8 }}
env = GUM_TABLE_BORDER_BACKGROUND,#{{ background }}
env = GUM_TABLE_SELECTED_FOREGROUND,#{{ selection_foreground }}
env = GUM_TABLE_SELECTED_BACKGROUND,#{{ selection_background }}
# Gum Spin Style Variables
env = GUM_SPIN_SPINNER_FOREGROUND,#{{ accent }}
env = GUM_SPIN_SPINNER_BACKGROUND,#{{ background }}
env = GUM_SPIN_TITLE_FOREGROUND,#{{ foreground }}
env = GUM_SPIN_TITLE_BACKGROUND,#{{ background }}
# Gum File Style Variables
env = GUM_FILE_CURSOR_FOREGROUND,#{{ cursor }}
env = GUM_FILE_CURSOR_BACKGROUND,#{{ background }}
env = GUM_FILE_SYMLINK_FOREGROUND,#{{ foreground }}
env = GUM_FILE_SYMLINK_BACKGROUND,#{{ background }}
env = GUM_FILE_DIRECTORY_FOREGROUND,#{{ foreground }}
env = GUM_FILE_DIRECTORY_BACKGROUND,#{{ background }}
env = GUM_FILE_FILE_FOREGROUND,#{{ foreground }}
env = GUM_FILE_FILE_BACKGROUND,#{{ background }}
env = GUM_FILE_PERMISSIONS_FOREGROUND,#{{ color8 }}
env = GUM_FILE_PERMISSIONS_BACKGROUND,#{{ background }}
env = GUM_FILE_SELECTED_FOREGROUND,#{{ selection_foreground }}
env = GUM_FILE_SELECTED_BACKGROUND,#{{ selection_background }}
env = GUM_FILE_FILE_SIZE_FOREGROUND,#{{ color8 }}
env = GUM_FILE_FILE_SIZE_BACKGROUND,#{{ background }}
env = GUM_FILE_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_FILE_HEADER_BACKGROUND,#{{ background }}
# Gum Pager Style Variables
env = GUM_PAGER_FOREGROUND,#{{ foreground }}
env = GUM_PAGER_BACKGROUND,#{{ background }}
env = GUM_PAGER_LINE_NUMBER_FOREGROUND,#{{ color8 }}
env = GUM_PAGER_LINE_NUMBER_BACKGROUND,#{{ background }}
env = GUM_PAGER_MATCH_FOREGROUND,#{{ accent }}
env = GUM_PAGER_MATCH_BACKGROUND,#{{ background }}
env = GUM_PAGER_MATCH_HIGH_FOREGROUND,#{{ accent }}
env = GUM_PAGER_MATCH_HIGH_BACKGROUND,#{{ background }}
env = GUM_PAGER_HELP_FOREGROUND,#{{ color8 }}
env = GUM_PAGER_HELP_BACKGROUND,#{{ background }}
# Gum Write Style Variables
env = GUM_WRITE_BASE_FOREGROUND,#{{ foreground }}
env = GUM_WRITE_BASE_BACKGROUND,#{{ background }}
env = GUM_WRITE_CURSOR_LINE_NUMBER_FOREGROUND,#{{ color8 }}
env = GUM_WRITE_CURSOR_LINE_NUMBER_BACKGROUND,#{{ background }}
env = GUM_WRITE_CURSOR_LINE_FOREGROUND,#{{ foreground }}
env = GUM_WRITE_CURSOR_LINE_BACKGROUND,#{{ selection_background }}
env = GUM_WRITE_CURSOR_FOREGROUND,#{{ cursor }}
env = GUM_WRITE_CURSOR_BACKGROUND,#{{ background }}
env = GUM_WRITE_END_OF_BUFFER_FOREGROUND,#{{ color8 }}
env = GUM_WRITE_END_OF_BUFFER_BACKGROUND,#{{ background }}
env = GUM_WRITE_LINE_NUMBER_FOREGROUND,#{{ color8 }}
env = GUM_WRITE_LINE_NUMBER_BACKGROUND,#{{ background }}
env = GUM_WRITE_HEADER_FOREGROUND,#{{ foreground }}
env = GUM_WRITE_HEADER_BACKGROUND,#{{ background }}
env = GUM_WRITE_PLACEHOLDER_FOREGROUND,#{{ color8 }}
env = GUM_WRITE_PLACEHOLDER_BACKGROUND,#{{ background }}
env = GUM_WRITE_PROMPT_FOREGROUND,#{{ foreground }}
env = GUM_WRITE_PROMPT_BACKGROUND,#{{ background }}
# Gum Log Style Variables
env = GUM_LOG_LEVEL_FOREGROUND,#{{ accent }}
env = GUM_LOG_LEVEL_BACKGROUND,#{{ background }}
env = GUM_LOG_TIME_FOREGROUND,#{{ color8 }}
env = GUM_LOG_TIME_BACKGROUND,#{{ background }}
env = GUM_LOG_PREFIX_FOREGROUND,#{{ foreground }}
env = GUM_LOG_PREFIX_BACKGROUND,#{{ background }}
env = GUM_LOG_MESSAGE_FOREGROUND,#{{ foreground }}
env = GUM_LOG_MESSAGE_BACKGROUND,#{{ background }}
env = GUM_LOG_KEY_FOREGROUND,#{{ foreground }}
env = GUM_LOG_KEY_BACKGROUND,#{{ background }}
env = GUM_LOG_VALUE_FOREGROUND,#{{ foreground }}
env = GUM_LOG_VALUE_BACKGROUND,#{{ background }}
env = GUM_LOG_SEPARATOR_FOREGROUND,#{{ color8 }}
env = GUM_LOG_SEPARATOR_BACKGROUND,#{{ background }}