From d904ed3afe127bd5319ca7da1fdea88ed1c50404 Mon Sep 17 00:00:00 2001 From: Severin Richner <79863534+severin-richner@users.noreply.github.com> Date: Sun, 3 May 2026 20:26:03 +0200 Subject: [PATCH] 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 --- bin/omarchy-update-confirm | 2 +- default/hypr/envs.conf | 5 ++ default/hypr/looknfeel.conf | 7 -- default/themed/gum.env.conf.tpl | 137 ++++++++++++++++++++++++++++++++ 4 files changed, 143 insertions(+), 8 deletions(-) create mode 100644 default/themed/gum.env.conf.tpl diff --git a/bin/omarchy-update-confirm b/bin/omarchy-update-confirm index 6cdddaaf..4ec37e85 100755 --- a/bin/omarchy-update-confirm +++ b/bin/omarchy-update-confirm @@ -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!" \ diff --git a/default/hypr/envs.conf b/default/hypr/envs.conf index 436c38cd..9210f594 100644 --- a/default/hypr/envs.conf +++ b/default/hypr/envs.conf @@ -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 diff --git a/default/hypr/looknfeel.conf b/default/hypr/looknfeel.conf index 0bdd6dee..ab2567c9 100644 --- a/default/hypr/looknfeel.conf +++ b/default/hypr/looknfeel.conf @@ -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 diff --git a/default/themed/gum.env.conf.tpl b/default/themed/gum.env.conf.tpl new file mode 100644 index 00000000..179c08ff --- /dev/null +++ b/default/themed/gum.env.conf.tpl @@ -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 }} \ No newline at end of file