refactor(themes): move theme assets under omarchy-themes
@@ -0,0 +1,47 @@
|
||||
[colors.primary]
|
||||
background = "{{ background }}"
|
||||
foreground = "{{ foreground }}"
|
||||
|
||||
[colors.cursor]
|
||||
text = "{{ background }}"
|
||||
cursor = "{{ bright_foreground }}"
|
||||
|
||||
[colors.vi_mode_cursor]
|
||||
text = "{{ background }}"
|
||||
cursor = "{{ bright_foreground }}"
|
||||
|
||||
[colors.search.matches]
|
||||
foreground = "{{ background }}"
|
||||
background = "{{ yellow }}"
|
||||
|
||||
[colors.search.focused_match]
|
||||
foreground = "{{ background }}"
|
||||
background = "{{ red }}"
|
||||
|
||||
[colors.footer_bar]
|
||||
foreground = "{{ background }}"
|
||||
background = "{{ foreground }}"
|
||||
|
||||
[colors.selection]
|
||||
text = "{{ selection_foreground }}"
|
||||
background = "{{ selection_background }}"
|
||||
|
||||
[colors.normal]
|
||||
black = "{{ background }}"
|
||||
red = "{{ red }}"
|
||||
green = "{{ green }}"
|
||||
yellow = "{{ yellow }}"
|
||||
blue = "{{ blue }}"
|
||||
magenta = "{{ magenta }}"
|
||||
cyan = "{{ cyan }}"
|
||||
white = "{{ foreground }}"
|
||||
|
||||
[colors.bright]
|
||||
black = "{{ muted }}"
|
||||
red = "{{ bright_red }}"
|
||||
green = "{{ bright_green }}"
|
||||
yellow = "{{ bright_yellow }}"
|
||||
blue = "{{ bright_blue }}"
|
||||
magenta = "{{ bright_magenta }}"
|
||||
cyan = "{{ bright_cyan }}"
|
||||
white = "{{ bright_foreground }}"
|
||||
@@ -0,0 +1,93 @@
|
||||
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||
theme[main_bg]="{{ background }}"
|
||||
|
||||
# Main text color
|
||||
theme[main_fg]="{{ foreground }}"
|
||||
|
||||
# Title color for boxes
|
||||
theme[title]="{{ foreground }}"
|
||||
|
||||
# Highlight color for keyboard shortcuts
|
||||
theme[hi_fg]="{{ accent }}"
|
||||
|
||||
# Background color of selected item in processes box
|
||||
theme[selected_bg]="{{ selection }}"
|
||||
|
||||
# Foreground color of selected item in processes box
|
||||
theme[selected_fg]="{{ accent }}"
|
||||
|
||||
# Color of inactive/disabled text
|
||||
theme[inactive_fg]="{{ muted }}"
|
||||
|
||||
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
|
||||
theme[graph_text]="{{ light_foreground }}"
|
||||
|
||||
# Background color of the percentage meters
|
||||
theme[meter_bg]="{{ selection }}"
|
||||
|
||||
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
||||
theme[proc_misc]="{{ light_foreground }}"
|
||||
|
||||
# CPU, Memory, Network, Proc box outline colors
|
||||
theme[cpu_box]="{{ magenta }}"
|
||||
theme[mem_box]="{{ green }}"
|
||||
theme[net_box]="{{ red }}"
|
||||
theme[proc_box]="{{ accent }}"
|
||||
|
||||
# Box divider line and small boxes line color
|
||||
theme[div_line]="{{ muted }}"
|
||||
|
||||
# Temperature graph color (Green -> Yellow -> Red)
|
||||
theme[temp_start]="{{ green }}"
|
||||
theme[temp_mid]="{{ yellow }}"
|
||||
theme[temp_end]="{{ red }}"
|
||||
|
||||
# CPU graph colors (Teal -> Blue -> Magenta)
|
||||
theme[cpu_start]="{{ cyan }}"
|
||||
theme[cpu_mid]="{{ blue }}"
|
||||
theme[cpu_end]="{{ magenta }}"
|
||||
|
||||
# Mem/Disk free meter
|
||||
theme[free_start]="{{ magenta }}"
|
||||
theme[free_mid]="{{ blue }}"
|
||||
theme[free_end]="{{ cyan }}"
|
||||
|
||||
# Mem/Disk cached meter
|
||||
theme[cached_start]="{{ blue }}"
|
||||
theme[cached_mid]="{{ cyan }}"
|
||||
theme[cached_end]="{{ magenta }}"
|
||||
|
||||
# Mem/Disk available meter
|
||||
theme[available_start]="{{ yellow }}"
|
||||
theme[available_mid]="{{ red }}"
|
||||
theme[available_end]="{{ red }}"
|
||||
|
||||
# Mem/Disk used meter (Green -> Teal -> Blue)
|
||||
theme[used_start]="{{ green }}"
|
||||
theme[used_mid]="{{ cyan }}"
|
||||
theme[used_end]="{{ blue }}"
|
||||
|
||||
# Download graph colors
|
||||
theme[download_start]="{{ yellow }}"
|
||||
theme[download_mid]="{{ red }}"
|
||||
theme[download_end]="{{ red }}"
|
||||
|
||||
# Upload graph colors (Green -> Teal -> Blue)
|
||||
theme[upload_start]="{{ green }}"
|
||||
theme[upload_mid]="{{ cyan }}"
|
||||
theme[upload_end]="{{ blue }}"
|
||||
|
||||
# Process box color gradient for threads, mem and cpu usage
|
||||
theme[process_start]="{{ cyan }}"
|
||||
theme[process_mid]="{{ blue }}"
|
||||
theme[process_end]="{{ magenta }}"
|
||||
|
||||
# Graph gradient colors (spectrum shades from background to foreground)
|
||||
theme[gradient_color_0]="{{ background }}"
|
||||
theme[gradient_color_1]="{{ lighter_background }}"
|
||||
theme[gradient_color_2]="{{ selection }}"
|
||||
theme[gradient_color_3]="{{ muted }}"
|
||||
theme[gradient_color_4]="{{ dark_foreground }}"
|
||||
theme[gradient_color_5]="{{ foreground }}"
|
||||
theme[gradient_color_6]="{{ light_foreground }}"
|
||||
theme[gradient_color_7]="{{ bright_foreground }}"
|
||||
@@ -0,0 +1 @@
|
||||
{{ background_rgb }}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"name": "Omarchy",
|
||||
"base": "{{ theme_type }}",
|
||||
"overrides": {
|
||||
"claude": "{{ accent }}",
|
||||
"claudeShimmer": "{{ mix accent foreground 35% }}",
|
||||
"text": "{{ foreground }}",
|
||||
"inverseText": "{{ background }}",
|
||||
"inactive": "{{ mix foreground background 40% }}",
|
||||
"inactiveShimmer": "{{ mix foreground background 25% }}",
|
||||
"subtle": "{{ muted }}",
|
||||
"suggestion": "{{ cyan }}",
|
||||
"permission": "{{ blue }}",
|
||||
"permissionShimmer": "{{ mix blue foreground 35% }}",
|
||||
"remember": "{{ yellow }}",
|
||||
"success": "{{ green }}",
|
||||
"error": "{{ red }}",
|
||||
"warning": "{{ yellow }}",
|
||||
"warningShimmer": "{{ mix yellow foreground 35% }}",
|
||||
"merged": "{{ magenta }}",
|
||||
"promptBorder": "{{ accent }}",
|
||||
"promptBorderShimmer": "{{ mix accent foreground 35% }}",
|
||||
"planMode": "{{ cyan }}",
|
||||
"autoAccept": "{{ yellow }}",
|
||||
"bashBorder": "{{ bright_yellow }}",
|
||||
"ide": "{{ bright_cyan }}",
|
||||
"diffAdded": "{{ mix background green 15% }}",
|
||||
"diffRemoved": "{{ mix background red 15% }}",
|
||||
"diffAddedDimmed": "{{ mix background green 8% }}",
|
||||
"diffRemovedDimmed": "{{ mix background red 8% }}",
|
||||
"diffAddedWord": "{{ mix background green 32% }}",
|
||||
"diffRemovedWord": "{{ mix background red 32% }}",
|
||||
"userMessageBackground": "{{ mix background foreground 6% }}",
|
||||
"userMessageBackgroundHover": "{{ mix background foreground 10% }}",
|
||||
"bashMessageBackgroundColor": "{{ mix background foreground 6% }}",
|
||||
"memoryBackgroundColor": "{{ mix background foreground 6% }}",
|
||||
"selectionBg": "{{ selection_background }}",
|
||||
"rate_limit_fill": "{{ accent }}",
|
||||
"rate_limit_empty": "{{ mix background foreground 20% }}",
|
||||
"briefLabelYou": "{{ yellow }}",
|
||||
"briefLabelClaude": "{{ accent }}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
[colors-dark]
|
||||
foreground={{ foreground_strip }}
|
||||
background={{ background_strip }}
|
||||
selection-foreground={{ selection_foreground_strip }}
|
||||
selection-background={{ selection_background_strip }}
|
||||
|
||||
cursor={{ background_strip }} {{ bright_foreground_strip }}
|
||||
|
||||
regular0={{ background_strip }}
|
||||
regular1={{ red_strip }}
|
||||
regular2={{ green_strip }}
|
||||
regular3={{ yellow_strip }}
|
||||
regular4={{ blue_strip }}
|
||||
regular5={{ purple_strip }}
|
||||
regular6={{ cyan_strip }}
|
||||
regular7={{ foreground_strip }}
|
||||
|
||||
bright0={{ muted_strip }}
|
||||
bright1={{ bright_red_strip }}
|
||||
bright2={{ bright_green_strip }}
|
||||
bright3={{ bright_yellow_strip }}
|
||||
bright4={{ bright_blue_strip }}
|
||||
bright5={{ bright_magenta_strip }}
|
||||
bright6={{ bright_cyan_strip }}
|
||||
bright7={{ bright_foreground_strip }}
|
||||
@@ -0,0 +1,22 @@
|
||||
background = {{ background }}
|
||||
foreground = {{ foreground }}
|
||||
cursor-color = {{ bright_foreground }}
|
||||
selection-background = {{ selection_background }}
|
||||
selection-foreground = {{ selection_foreground }}
|
||||
|
||||
palette = 0={{ background }}
|
||||
palette = 1={{ red }}
|
||||
palette = 2={{ green }}
|
||||
palette = 3={{ yellow }}
|
||||
palette = 4={{ blue }}
|
||||
palette = 5={{ magenta }}
|
||||
palette = 6={{ cyan }}
|
||||
palette = 7={{ foreground }}
|
||||
palette = 8={{ muted }}
|
||||
palette = 9={{ bright_red }}
|
||||
palette = 10={{ bright_green }}
|
||||
palette = 11={{ bright_yellow }}
|
||||
palette = 12={{ bright_blue }}
|
||||
palette = 13={{ bright_magenta }}
|
||||
palette = 14={{ bright_cyan }}
|
||||
palette = 15={{ bright_foreground }}
|
||||
@@ -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,#{{ accent }}
|
||||
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 }}
|
||||
@@ -0,0 +1,137 @@
|
||||
-- Gum Style (generic) Variables
|
||||
hl.env("FOREGROUND", "{{ foreground }}")
|
||||
hl.env("BACKGROUND", "{{ background }}")
|
||||
hl.env("BORDER_FOREGROUND", "{{ accent }}")
|
||||
hl.env("BORDER_BACKGROUND", "{{ background }}")
|
||||
|
||||
-- Gum Confirm Style Variables
|
||||
hl.env("GUM_CONFIRM_PROMPT_FOREGROUND", "{{ accent }}")
|
||||
hl.env("GUM_CONFIRM_PROMPT_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_CONFIRM_SELECTED_FOREGROUND", "{{ selection_foreground }}")
|
||||
hl.env("GUM_CONFIRM_SELECTED_BACKGROUND", "{{ selection_background }}")
|
||||
hl.env("GUM_CONFIRM_UNSELECTED_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_CONFIRM_UNSELECTED_BACKGROUND", "{{ background }}")
|
||||
|
||||
-- Gum Input Style Variables
|
||||
hl.env("GUM_INPUT_PROMPT_FOREGROUND", "{{ accent }}")
|
||||
hl.env("GUM_INPUT_PROMPT_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_INPUT_PLACEHOLDER_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_INPUT_PLACEHOLDER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_INPUT_CURSOR_FOREGROUND", "{{ bright_foreground }}")
|
||||
hl.env("GUM_INPUT_CURSOR_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_INPUT_HEADER_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_INPUT_HEADER_BACKGROUND", "{{ background }}")
|
||||
|
||||
-- Gum Choose Style Variables
|
||||
hl.env("GUM_CHOOSE_CURSOR_FOREGROUND", "{{ accent }}")
|
||||
hl.env("GUM_CHOOSE_CURSOR_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_CHOOSE_HEADER_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_CHOOSE_HEADER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_CHOOSE_ITEM_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_CHOOSE_ITEM_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_CHOOSE_SELECTED_FOREGROUND", "{{ selection_foreground }}")
|
||||
hl.env("GUM_CHOOSE_SELECTED_BACKGROUND", "{{ selection_background }}")
|
||||
|
||||
-- Gum Filter Style Variables
|
||||
hl.env("GUM_FILTER_PROMPT_FOREGROUND", "{{ accent }}")
|
||||
hl.env("GUM_FILTER_PROMPT_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILTER_TEXT_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_FILTER_TEXT_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILTER_MATCH_FOREGROUND", "{{ accent }}")
|
||||
hl.env("GUM_FILTER_CURSOR_TEXT_FOREGROUND", "{{ bright_foreground }}")
|
||||
hl.env("GUM_FILTER_CURSOR_TEXT_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILTER_SELECTED_FOREGROUND", "{{ selection_foreground }}")
|
||||
hl.env("GUM_FILTER_SELECTED_BACKGROUND", "{{ selection_background }}")
|
||||
hl.env("GUM_FILTER_INDICATOR_FOREGROUND", "{{ accent }}")
|
||||
hl.env("GUM_FILTER_HEADER_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_FILTER_MATCH_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILTER_HEADER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILTER_PLACEHOLDER_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_FILTER_PLACEHOLDER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILTER_INDICATOR_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILTER_SELECTED_PREFIX_FOREGROUND", "{{ selection_foreground }}")
|
||||
hl.env("GUM_FILTER_SELECTED_PREFIX_BACKGROUND", "{{ selection_background }}")
|
||||
hl.env("GUM_FILTER_UNSELECTED_PREFIX_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_FILTER_UNSELECTED_PREFIX_BACKGROUND", "{{ background }}")
|
||||
|
||||
-- Gum Table Style Variables
|
||||
hl.env("GUM_TABLE_HEADER_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_TABLE_HEADER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_TABLE_CELL_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_TABLE_CELL_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_TABLE_BORDER_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_TABLE_BORDER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_TABLE_SELECTED_FOREGROUND", "{{ selection_foreground }}")
|
||||
hl.env("GUM_TABLE_SELECTED_BACKGROUND", "{{ selection_background }}")
|
||||
|
||||
-- Gum Spin Style Variables
|
||||
hl.env("GUM_SPIN_SPINNER_FOREGROUND", "{{ accent }}")
|
||||
hl.env("GUM_SPIN_SPINNER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_SPIN_TITLE_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_SPIN_TITLE_BACKGROUND", "{{ background }}")
|
||||
|
||||
-- Gum File Style Variables
|
||||
hl.env("GUM_FILE_CURSOR_FOREGROUND", "{{ bright_foreground }}")
|
||||
hl.env("GUM_FILE_CURSOR_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILE_SYMLINK_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_FILE_SYMLINK_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILE_DIRECTORY_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_FILE_DIRECTORY_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILE_FILE_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_FILE_FILE_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILE_PERMISSIONS_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_FILE_PERMISSIONS_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILE_SELECTED_FOREGROUND", "{{ selection_foreground }}")
|
||||
hl.env("GUM_FILE_SELECTED_BACKGROUND", "{{ selection_background }}")
|
||||
hl.env("GUM_FILE_FILE_SIZE_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_FILE_FILE_SIZE_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_FILE_HEADER_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_FILE_HEADER_BACKGROUND", "{{ background }}")
|
||||
|
||||
-- Gum Pager Style Variables
|
||||
hl.env("GUM_PAGER_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_PAGER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_PAGER_LINE_NUMBER_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_PAGER_LINE_NUMBER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_PAGER_MATCH_FOREGROUND", "{{ accent }}")
|
||||
hl.env("GUM_PAGER_MATCH_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_PAGER_MATCH_HIGH_FOREGROUND", "{{ accent }}")
|
||||
hl.env("GUM_PAGER_MATCH_HIGH_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_PAGER_HELP_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_PAGER_HELP_BACKGROUND", "{{ background }}")
|
||||
|
||||
-- Gum Write Style Variables
|
||||
hl.env("GUM_WRITE_BASE_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_WRITE_BASE_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_WRITE_CURSOR_LINE_NUMBER_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_WRITE_CURSOR_LINE_NUMBER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_WRITE_CURSOR_LINE_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_WRITE_CURSOR_LINE_BACKGROUND", "{{ selection_background }}")
|
||||
hl.env("GUM_WRITE_CURSOR_FOREGROUND", "{{ bright_foreground }}")
|
||||
hl.env("GUM_WRITE_CURSOR_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_WRITE_END_OF_BUFFER_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_WRITE_END_OF_BUFFER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_WRITE_LINE_NUMBER_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_WRITE_LINE_NUMBER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_WRITE_HEADER_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_WRITE_HEADER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_WRITE_PLACEHOLDER_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_WRITE_PLACEHOLDER_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_WRITE_PROMPT_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_WRITE_PROMPT_BACKGROUND", "{{ background }}")
|
||||
|
||||
-- Gum Log Style Variables
|
||||
hl.env("GUM_LOG_LEVEL_FOREGROUND", "{{ accent }}")
|
||||
hl.env("GUM_LOG_LEVEL_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_LOG_TIME_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_LOG_TIME_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_LOG_PREFIX_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_LOG_PREFIX_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_LOG_MESSAGE_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_LOG_MESSAGE_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_LOG_KEY_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_LOG_KEY_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_LOG_VALUE_FOREGROUND", "{{ foreground }}")
|
||||
hl.env("GUM_LOG_VALUE_BACKGROUND", "{{ background }}")
|
||||
hl.env("GUM_LOG_SEPARATOR_FOREGROUND", "{{ muted }}")
|
||||
hl.env("GUM_LOG_SEPARATOR_BACKGROUND", "{{ background }}")
|
||||
@@ -0,0 +1,133 @@
|
||||
# Syntax
|
||||
"keyword" = "color5"
|
||||
"keyword.control" = { fg = "color5", modifiers = ["italic"] }
|
||||
"function" = "color4"
|
||||
"function.builtin" = "color4"
|
||||
"function.macro" = "color5"
|
||||
"type" = "color3"
|
||||
"type.builtin" = "color5"
|
||||
"type.enum.variant" = "color6"
|
||||
"constructor" = "color4"
|
||||
"constant" = "color3"
|
||||
"constant.builtin" = "color3"
|
||||
"constant.numeric" = "color3"
|
||||
"constant.character" = "color6"
|
||||
"constant.character.escape" = "color5"
|
||||
"string" = "color2"
|
||||
"string.regexp" = "color5"
|
||||
"string.special" = "color4"
|
||||
"comment" = { fg = "color8", modifiers = ["italic"] }
|
||||
"variable" = "foreground"
|
||||
"variable.parameter" = { fg = "color5", modifiers = ["italic"] }
|
||||
"variable.builtin" = "color1"
|
||||
"variable.other.member" = "color4"
|
||||
"label" = "color4"
|
||||
"punctuation" = "color8"
|
||||
"punctuation.special" = "color6"
|
||||
"operator" = "color6"
|
||||
"tag" = "color4"
|
||||
"namespace" = { fg = "color3", modifiers = ["italic"] }
|
||||
"special" = "color5"
|
||||
"attribute" = "color3"
|
||||
|
||||
# Markup
|
||||
"markup.heading.1" = "color1"
|
||||
"markup.heading.2" = "color3"
|
||||
"markup.heading.3" = "color3"
|
||||
"markup.heading.4" = "color2"
|
||||
"markup.heading.5" = "color4"
|
||||
"markup.heading.6" = "color5"
|
||||
"markup.list" = "color6"
|
||||
"markup.list.unchecked" = "color8"
|
||||
"markup.list.checked" = "color2"
|
||||
"markup.bold" = { fg = "color1", modifiers = ["bold"] }
|
||||
"markup.italic" = { fg = "color1", modifiers = ["italic"] }
|
||||
"markup.strikethrough" = { modifiers = ["crossed_out"] }
|
||||
"markup.link.url" = { fg = "color4", modifiers = ["italic", "underlined"] }
|
||||
"markup.link.text" = "color5"
|
||||
"markup.link.label" = "color4"
|
||||
"markup.raw" = "color2"
|
||||
"markup.quote" = "color5"
|
||||
|
||||
# Diff
|
||||
"diff.plus" = "color2"
|
||||
"diff.minus" = "color1"
|
||||
"diff.delta" = "color4"
|
||||
|
||||
# Leave the editor background transparent so the terminal background shows through
|
||||
"ui.background" = { }
|
||||
|
||||
"ui.linenr" = { fg = "color8" }
|
||||
"ui.linenr.selected" = { fg = "foreground" }
|
||||
|
||||
# Statusline uses an inverted band (background-color text on foreground-color
|
||||
# background) to guarantee contrast across both light and dark Omarchy themes.
|
||||
"ui.statusline" = { fg = "background", bg = "foreground" }
|
||||
"ui.statusline.inactive" = { fg = "background", bg = "color8" }
|
||||
"ui.statusline.normal" = { fg = "background", bg = "color4", modifiers = ["bold"] }
|
||||
"ui.statusline.insert" = { fg = "background", bg = "color2", modifiers = ["bold"] }
|
||||
"ui.statusline.select" = { fg = "background", bg = "color5", modifiers = ["bold"] }
|
||||
|
||||
"ui.popup" = { fg = "foreground", bg = "background" }
|
||||
"ui.window" = { fg = "color8" }
|
||||
"ui.help" = { fg = "foreground", bg = "background" }
|
||||
|
||||
"ui.bufferline" = { fg = "color8", bg = "background" }
|
||||
"ui.bufferline.active" = { fg = "foreground", bg = "background", underline = { color = "color5", style = "line" } }
|
||||
|
||||
"ui.text" = "foreground"
|
||||
"ui.text.focus" = { fg = "foreground", bg = "lighter_background", modifiers = ["bold"] }
|
||||
"ui.text.inactive" = { fg = "color8" }
|
||||
"ui.text.directory" = { fg = "color4" }
|
||||
|
||||
"ui.virtual" = "color8"
|
||||
"ui.virtual.ruler" = { bg = "lighter_background" }
|
||||
"ui.virtual.indent-guide" = "color8"
|
||||
"ui.virtual.inlay-hint" = { fg = "color8" }
|
||||
"ui.virtual.jump-label" = { fg = "color1", modifiers = ["bold"] }
|
||||
"ui.virtual.whitespace" = "color8"
|
||||
|
||||
"ui.selection" = { bg = "selection_background", fg = "selection_foreground" }
|
||||
|
||||
"ui.cursor" = { fg = "background", bg = "cursor" }
|
||||
"ui.cursor.primary" = { fg = "background", bg = "cursor" }
|
||||
"ui.cursor.match" = { fg = "color3", modifiers = ["bold"] }
|
||||
"ui.cursor.primary.normal" = { fg = "background", bg = "cursor" }
|
||||
"ui.cursor.primary.insert" = { fg = "background", bg = "color2" }
|
||||
"ui.cursor.primary.select" = { fg = "background", bg = "color5" }
|
||||
|
||||
"ui.cursorline.primary" = { bg = "lighter_background" }
|
||||
|
||||
"ui.highlight" = { bg = "lighter_background", modifiers = ["bold"] }
|
||||
|
||||
"ui.menu" = { fg = "foreground", bg = "background" }
|
||||
"ui.menu.selected" = { fg = "background", bg = "foreground", modifiers = ["bold"] }
|
||||
|
||||
"diagnostic.error" = { underline = { color = "color1", style = "curl" } }
|
||||
"diagnostic.warning" = { underline = { color = "color3", style = "curl" } }
|
||||
"diagnostic.info" = { underline = { color = "color4", style = "curl" } }
|
||||
"diagnostic.hint" = { underline = { color = "color6", style = "curl" } }
|
||||
"diagnostic.unnecessary" = { modifiers = ["dim"] }
|
||||
"diagnostic.deprecated" = { modifiers = ["crossed_out"] }
|
||||
|
||||
error = "color1"
|
||||
warning = "color3"
|
||||
info = "color4"
|
||||
hint = "color6"
|
||||
|
||||
[palette]
|
||||
background = "{{ background }}"
|
||||
foreground = "{{ foreground }}"
|
||||
lighter_background = "{{ lighter_background }}"
|
||||
cursor = "{{ bright_foreground }}"
|
||||
selection_background = "{{ selection_background }}"
|
||||
selection_foreground = "{{ selection_foreground }}"
|
||||
color0 = "{{ background }}"
|
||||
color1 = "{{ red }}"
|
||||
color2 = "{{ green }}"
|
||||
color3 = "{{ yellow }}"
|
||||
color4 = "{{ blue }}"
|
||||
color5 = "{{ magenta }}"
|
||||
color6 = "{{ cyan }}"
|
||||
color7 = "{{ foreground }}"
|
||||
color8 = "{{ muted }}"
|
||||
@@ -0,0 +1,47 @@
|
||||
name: omarchy
|
||||
description: Omarchy system theme
|
||||
colors:
|
||||
background: "{{ background }}"
|
||||
ui_text: "{{ foreground }}"
|
||||
ui_primary: "{{ accent }}"
|
||||
ui_accent: "{{ accent }}"
|
||||
ui_border: "{{ muted }}"
|
||||
ui_label: "{{ accent }}"
|
||||
ui_ok: "{{ green }}"
|
||||
ui_warn: "{{ yellow }}"
|
||||
ui_error: "{{ red }}"
|
||||
ui_tool: "{{ cyan }}"
|
||||
ui_thinking: "{{ dark_foreground }}"
|
||||
banner_border: "{{ muted }}"
|
||||
banner_title: "{{ accent }}"
|
||||
banner_accent: "{{ accent }}"
|
||||
banner_dim: "{{ dark_foreground }}"
|
||||
banner_text: "{{ foreground }}"
|
||||
prompt: "{{ bright_foreground }}"
|
||||
input_rule: "{{ muted }}"
|
||||
response_border: "{{ accent }}"
|
||||
shell_dollar: "{{ blue }}"
|
||||
selection_bg: "{{ selection }}"
|
||||
session_label: "{{ accent }}"
|
||||
session_border: "{{ muted }}"
|
||||
status_bar_bg: "{{ dark_background }}"
|
||||
status_bar_text: "{{ foreground }}"
|
||||
status_bar_strong: "{{ accent }}"
|
||||
status_bar_dim: "{{ dark_foreground }}"
|
||||
status_bar_good: "{{ green }}"
|
||||
status_bar_warn: "{{ yellow }}"
|
||||
status_bar_bad: "{{ red }}"
|
||||
status_bar_critical: "{{ bright_red }}"
|
||||
voice_status_bg: "{{ dark_background }}"
|
||||
completion_menu_bg: "{{ lighter_background }}"
|
||||
completion_menu_current_bg: "{{ selection }}"
|
||||
completion_menu_meta_bg: "{{ lighter_background }}"
|
||||
completion_menu_meta_current_bg: "{{ selection }}"
|
||||
diff_added: "{{ mix background green 15% }}"
|
||||
diff_removed: "{{ mix background red 15% }}"
|
||||
diff_added_word: "{{ green }}"
|
||||
diff_removed_word: "{{ red }}"
|
||||
syntax_string: "{{ green }}"
|
||||
syntax_number: "{{ yellow }}"
|
||||
syntax_keyword: "{{ magenta }}"
|
||||
syntax_comment: "{{ muted }}"
|
||||
@@ -0,0 +1,94 @@
|
||||
@define-color foreground {{ foreground }};
|
||||
@define-color background {{ background }};
|
||||
@define-color accent {{ accent }};
|
||||
@define-color muted {{ muted }};
|
||||
@define-color card_bg {{ lighter_background }};
|
||||
@define-color text_dark {{ background }};
|
||||
@define-color accent_hover {{ bright_blue }};
|
||||
@define-color selected_tab {{ accent }};
|
||||
@define-color text {{ foreground }};
|
||||
|
||||
* {
|
||||
all: unset;
|
||||
font-family: JetBrains Mono NF;
|
||||
color: @foreground;
|
||||
font-weight: bold;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.window {
|
||||
background: alpha(@background, 0.95);
|
||||
border: solid 2px @accent;
|
||||
margin: 4px;
|
||||
padding: 18px;
|
||||
}
|
||||
|
||||
tabs {
|
||||
padding: 0.5rem 1rem;
|
||||
}
|
||||
|
||||
tabs > tab {
|
||||
margin-right: 1rem;
|
||||
}
|
||||
|
||||
.tab-label {
|
||||
color: @text;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
tabs > tab:checked > .tab-label, tabs > tab:active > .tab-label {
|
||||
text-decoration: underline currentColor;
|
||||
color: @selected_tab;
|
||||
}
|
||||
|
||||
tabs > tab:focus > .tab-label {
|
||||
color: @foreground;
|
||||
}
|
||||
|
||||
.page {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.image-label {
|
||||
font-size: 12px;
|
||||
padding: 0.25rem;
|
||||
}
|
||||
|
||||
flowboxchild > .card, button > .card {
|
||||
transition: all 0.2s ease;
|
||||
border: solid 2px transparent;
|
||||
border-color: @background;
|
||||
border-radius: 5px;
|
||||
background-color: @card_bg;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
flowboxchild:hover > .card, button:hover > .card, flowboxchild:active > .card, flowboxchild:selected > .card, button:active > .card, button:selected > .card, button:focus > .card {
|
||||
border: solid 2px @accent;
|
||||
}
|
||||
|
||||
.image {
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.region-button {
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 5px;
|
||||
background-color: @accent;
|
||||
color: @text_dark;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.region-button > label {
|
||||
color: @text_dark;
|
||||
}
|
||||
|
||||
.region-button:not(:disabled):hover, .region-button:not(:disabled):focus {
|
||||
background-color: @accent_hover;
|
||||
color: @text_dark;
|
||||
}
|
||||
|
||||
.region-button:disabled {
|
||||
background-color: @muted;
|
||||
color: @background;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
local active_border_color = {{ hypr_gradient hyprland_active_border accent }}
|
||||
local inactive_border_color = {{ hypr_gradient hyprland_inactive_border rgba(595959aa) }}
|
||||
|
||||
hl.config({
|
||||
general = {
|
||||
col = {
|
||||
active_border = active_border_color,
|
||||
inactive_border = inactive_border_color,
|
||||
},
|
||||
},
|
||||
|
||||
group = {
|
||||
col = {
|
||||
border_active = active_border_color,
|
||||
border_inactive = inactive_border_color,
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,5 @@
|
||||
$color = rgba({{ background_rgb }}, 1.0)
|
||||
$inner_color = rgba({{ background_rgb }}, 0.8)
|
||||
$outer_color = rgba({{ foreground_rgb }}, 1.0)
|
||||
$font_color = rgba({{ foreground_rgb }}, 1.0)
|
||||
$check_color = rgba({{ accent_rgb }}, 1.0)
|
||||
@@ -0,0 +1 @@
|
||||
{{ accent }}
|
||||
@@ -0,0 +1,27 @@
|
||||
foreground {{ foreground }}
|
||||
background {{ background }}
|
||||
selection_foreground {{ selection_foreground }}
|
||||
selection_background {{ selection_background }}
|
||||
|
||||
cursor {{ bright_foreground }}
|
||||
cursor_text_color {{ background }}
|
||||
|
||||
active_border_color {{ accent }}
|
||||
active_tab_background {{ accent }}
|
||||
|
||||
color0 {{ background }}
|
||||
color1 {{ red }}
|
||||
color2 {{ green }}
|
||||
color3 {{ yellow }}
|
||||
color4 {{ blue }}
|
||||
color5 {{ magenta }}
|
||||
color6 {{ cyan }}
|
||||
color7 {{ foreground }}
|
||||
color8 {{ muted }}
|
||||
color9 {{ bright_red }}
|
||||
color10 {{ bright_green }}
|
||||
color11 {{ bright_yellow }}
|
||||
color12 {{ bright_blue }}
|
||||
color13 {{ bright_magenta }}
|
||||
color14 {{ bright_cyan }}
|
||||
color15 {{ bright_foreground }}
|
||||
@@ -0,0 +1,40 @@
|
||||
text-color={{ foreground }}
|
||||
border-color={{ accent }}
|
||||
background-color={{ background }}
|
||||
|
||||
anchor=top-right
|
||||
group-by=app-name,summary,body
|
||||
default-timeout=5000
|
||||
width=420
|
||||
outer-margin=20
|
||||
padding=10,15
|
||||
border-size=2
|
||||
max-icon-size=32
|
||||
font=sans-serif 14px
|
||||
|
||||
[app-name=Spotify]
|
||||
invisible=1
|
||||
|
||||
[mode=do-not-disturb]
|
||||
invisible=true
|
||||
|
||||
[mode=do-not-disturb app-name=notify-send]
|
||||
invisible=false
|
||||
|
||||
[urgency=critical]
|
||||
default-timeout=0
|
||||
layer=overlay
|
||||
|
||||
[summary~="Setup Wi-Fi"]
|
||||
on-button-left=exec sh -c 'omarchy-notification-dismiss "Setup Wi-Fi"; omarchy-launch-wifi'
|
||||
|
||||
[summary~="Update System"]
|
||||
on-button-left=exec sh -c 'omarchy-notification-dismiss "Update System"; omarchy-launch-floating-terminal-with-presentation omarchy-update'
|
||||
|
||||
[summary~="Install Dictation with Voxtype"]
|
||||
on-button-left=exec sh -c 'omarchy-notification-dismiss "Install Dictation with Voxtype"; omarchy-launch-floating-terminal-with-presentation omarchy-voxtype-install'
|
||||
|
||||
[summary~="Screenshot copied & saved"]
|
||||
max-icon-size=80
|
||||
format=<b>%s</b>\n%b
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
return {
|
||||
{
|
||||
"bjarneo/aether.nvim",
|
||||
branch = "v3",
|
||||
name = "aether",
|
||||
priority = 1000,
|
||||
opts = {
|
||||
colors = {
|
||||
bg = "{{ background }}",
|
||||
dark_bg = "{{ dark_background }}",
|
||||
darker_bg = "{{ darker_background }}",
|
||||
lighter_bg = "{{ lighter_background }}",
|
||||
|
||||
fg = "{{ foreground }}",
|
||||
dark_fg = "{{ dark_foreground }}",
|
||||
light_fg = "{{ light_foreground }}",
|
||||
bright_fg = "{{ bright_foreground }}",
|
||||
muted = "{{ muted }}",
|
||||
|
||||
red = "{{ red }}",
|
||||
yellow = "{{ yellow }}",
|
||||
orange = "{{ orange }}",
|
||||
green = "{{ green }}",
|
||||
cyan = "{{ cyan }}",
|
||||
blue = "{{ blue }}",
|
||||
magenta = "{{ magenta }}",
|
||||
brown = "{{ brown }}",
|
||||
|
||||
bright_red = "{{ bright_red }}",
|
||||
bright_yellow = "{{ bright_yellow }}",
|
||||
bright_green = "{{ bright_green }}",
|
||||
bright_cyan = "{{ bright_cyan }}",
|
||||
bright_blue = "{{ bright_blue }}",
|
||||
bright_magenta = "{{ bright_magenta }}",
|
||||
|
||||
accent = "{{ accent }}",
|
||||
cursor = "{{ bright_foreground }}",
|
||||
foreground = "{{ foreground }}",
|
||||
background = "{{ background }}",
|
||||
selection = "{{ selection }}",
|
||||
selection_foreground = "{{ selection_foreground }}",
|
||||
selection_background = "{{ selection_background }}",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"LazyVim/LazyVim",
|
||||
opts = {
|
||||
colorscheme = "aether",
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
/* Omarchy Theme for Obsidian */
|
||||
|
||||
.theme-dark, .theme-light {
|
||||
/* Core colors */
|
||||
--background-primary: {{ background }};
|
||||
--background-primary-alt: {{ background }};
|
||||
--background-secondary: {{ background }};
|
||||
--background-secondary-alt: {{ background }};
|
||||
--text-normal: {{ foreground }};
|
||||
|
||||
/* Selection colors */
|
||||
--text-selection: {{ selection_background }};
|
||||
|
||||
/* Border color */
|
||||
--background-modifier-border: {{ muted }};
|
||||
|
||||
/* Semantic heading colors */
|
||||
--text-title-h1: {{ red }};
|
||||
--text-title-h2: {{ green }};
|
||||
--text-title-h3: {{ yellow }};
|
||||
--text-title-h4: {{ blue }};
|
||||
--text-title-h5: {{ magenta }};
|
||||
--text-title-h6: {{ magenta }};
|
||||
|
||||
/* Links and accents */
|
||||
--text-link: {{ blue }};
|
||||
--text-accent: {{ accent }};
|
||||
--text-accent-hover: {{ accent }};
|
||||
--interactive-accent: {{ accent }};
|
||||
--interactive-accent-hover: {{ accent }};
|
||||
|
||||
/* Muted text */
|
||||
--text-muted: color-mix(in srgb, {{ foreground }} 70%, transparent);
|
||||
--text-faint: color-mix(in srgb, {{ foreground }} 55%, transparent);
|
||||
|
||||
/* Code */
|
||||
--code-normal: {{ cyan }};
|
||||
|
||||
/* Errors and success */
|
||||
--text-error: {{ red }};
|
||||
--text-error-hover: {{ red }};
|
||||
--text-success: {{ green }};
|
||||
|
||||
/* Tags */
|
||||
--tag-color: {{ cyan }};
|
||||
--tag-background: {{ muted }};
|
||||
|
||||
/* Graph */
|
||||
--graph-line: {{ muted }};
|
||||
--graph-node: {{ accent }};
|
||||
--graph-node-focused: {{ blue }};
|
||||
--graph-node-tag: {{ cyan }};
|
||||
--graph-node-attachment: {{ green }};
|
||||
}
|
||||
|
||||
/* Headers */
|
||||
.cm-header-1, .markdown-rendered h1 { color: var(--text-title-h1); }
|
||||
.cm-header-2, .markdown-rendered h2 { color: var(--text-title-h2); }
|
||||
.cm-header-3, .markdown-rendered h3 { color: var(--text-title-h3); }
|
||||
.cm-header-4, .markdown-rendered h4 { color: var(--text-title-h4); }
|
||||
.cm-header-5, .markdown-rendered h5 { color: var(--text-title-h5); }
|
||||
.cm-header-6, .markdown-rendered h6 { color: var(--text-title-h6); }
|
||||
|
||||
/* Code blocks */
|
||||
.markdown-rendered code {
|
||||
color: {{ cyan }};
|
||||
}
|
||||
|
||||
/* Syntax highlighting */
|
||||
.cm-s-obsidian span.cm-keyword { color: {{ red }}; }
|
||||
.cm-s-obsidian span.cm-string { color: {{ green }}; }
|
||||
.cm-s-obsidian span.cm-number { color: {{ yellow }}; }
|
||||
.cm-s-obsidian span.cm-comment { color: {{ muted }}; }
|
||||
.cm-s-obsidian span.cm-operator { color: {{ blue }}; }
|
||||
.cm-s-obsidian span.cm-def { color: {{ blue }}; }
|
||||
|
||||
/* Links */
|
||||
.markdown-rendered a {
|
||||
color: var(--text-link);
|
||||
}
|
||||
|
||||
/* Blockquotes */
|
||||
.markdown-rendered blockquote {
|
||||
border-left-color: {{ accent }};
|
||||
}
|
||||
|
||||
/* Active elements */
|
||||
.workspace-leaf.mod-active .workspace-leaf-header-title {
|
||||
color: var(--interactive-accent);
|
||||
}
|
||||
|
||||
.nav-file-title.is-active {
|
||||
color: var(--interactive-accent);
|
||||
}
|
||||
|
||||
/* Search results */
|
||||
.search-result-file-title {
|
||||
color: var(--interactive-accent);
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||
"name": "omarchy-system",
|
||||
"vars": {
|
||||
"background": "{{ background }}",
|
||||
"foreground": "{{ foreground }}",
|
||||
"accent": "{{ accent }}",
|
||||
"selectionBackground": "{{ selection_background }}",
|
||||
"selectionForeground": "{{ selection_foreground }}",
|
||||
"selectedBackground": "{{ mix background accent 22% }}",
|
||||
"color0": "{{ background }}",
|
||||
"color1": "{{ red }}",
|
||||
"color2": "{{ green }}",
|
||||
"color3": "{{ yellow }}",
|
||||
"color4": "{{ blue }}",
|
||||
"color5": "{{ magenta }}",
|
||||
"color6": "{{ cyan }}",
|
||||
"color7": "{{ foreground }}",
|
||||
"color8": "{{ muted }}",
|
||||
"color9": "{{ bright_red }}",
|
||||
"color10": "{{ bright_green }}",
|
||||
"color11": "{{ bright_yellow }}",
|
||||
"color12": "{{ bright_blue }}",
|
||||
"color13": "{{ bright_magenta }}",
|
||||
"color14": "{{ bright_cyan }}",
|
||||
"color15": "{{ bright_foreground }}",
|
||||
"panel": "{{ mix background foreground 6% }}",
|
||||
"panelAlt": "{{ mix background foreground 10% }}",
|
||||
"panelPending": "{{ mix background accent 12% }}",
|
||||
"panelSuccess": "{{ mix background green 12% }}",
|
||||
"panelError": "{{ mix background red 12% }}",
|
||||
"border": "{{ mix background foreground 30% }}",
|
||||
"borderMuted": "{{ mix background foreground 20% }}",
|
||||
"mutedText": "{{ mix foreground background 34% }}",
|
||||
"dimText": "{{ mix foreground background 52% }}"
|
||||
},
|
||||
"colors": {
|
||||
"accent": "accent",
|
||||
"border": "border",
|
||||
"borderAccent": "accent",
|
||||
"borderMuted": "borderMuted",
|
||||
"success": "color2",
|
||||
"error": "color1",
|
||||
"warning": "color3",
|
||||
"muted": "mutedText",
|
||||
"dim": "dimText",
|
||||
"text": "foreground",
|
||||
"thinkingText": "dimText",
|
||||
"selectedBg": "selectedBackground",
|
||||
"userMessageBg": "panel",
|
||||
"userMessageText": "foreground",
|
||||
"customMessageBg": "panel",
|
||||
"customMessageText": "foreground",
|
||||
"customMessageLabel": "accent",
|
||||
"toolPendingBg": "panelPending",
|
||||
"toolSuccessBg": "panelSuccess",
|
||||
"toolErrorBg": "panelError",
|
||||
"toolTitle": "accent",
|
||||
"toolOutput": "foreground",
|
||||
"mdHeading": "color5",
|
||||
"mdLink": "accent",
|
||||
"mdLinkUrl": "color6",
|
||||
"mdCode": "color6",
|
||||
"mdCodeBlock": "foreground",
|
||||
"mdCodeBlockBorder": "borderMuted",
|
||||
"mdQuote": "mutedText",
|
||||
"mdQuoteBorder": "borderMuted",
|
||||
"mdHr": "borderMuted",
|
||||
"mdListBullet": "color5",
|
||||
"toolDiffAdded": "color2",
|
||||
"toolDiffRemoved": "color1",
|
||||
"toolDiffContext": "mutedText",
|
||||
"syntaxComment": "dimText",
|
||||
"syntaxKeyword": "color5",
|
||||
"syntaxFunction": "color4",
|
||||
"syntaxVariable": "accent",
|
||||
"syntaxString": "color2",
|
||||
"syntaxNumber": "color3",
|
||||
"syntaxType": "color4",
|
||||
"syntaxOperator": "color5",
|
||||
"syntaxPunctuation": "mutedText",
|
||||
"thinkingOff": "borderMuted",
|
||||
"thinkingMinimal": "accent",
|
||||
"thinkingLow": "color4",
|
||||
"thinkingMedium": "color5",
|
||||
"thinkingHigh": "color3",
|
||||
"thinkingXhigh": "color1",
|
||||
"bashMode": "color3"
|
||||
},
|
||||
"export": {
|
||||
"pageBg": "{{ background }}",
|
||||
"cardBg": "{{ mix background foreground 6% }}",
|
||||
"infoBg": "{{ mix background foreground 10% }}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
[colors]
|
||||
# Regular colors
|
||||
background = '{{ background }}'
|
||||
black = '{{ background }}'
|
||||
blue = '{{ blue }}'
|
||||
cyan = '{{ cyan }}'
|
||||
foreground = '{{ foreground }}'
|
||||
green = '{{ green }}'
|
||||
magenta = '{{ magenta }}'
|
||||
red = '{{ red }}'
|
||||
white = '{{ foreground }}'
|
||||
yellow = '{{ yellow }}'
|
||||
|
||||
# Cursor
|
||||
cursor = '{{ bright_foreground }}'
|
||||
vi-cursor = '{{ accent }}'
|
||||
|
||||
# Navigation
|
||||
# tabs and tabs-active set the inactive/active tab title colors.
|
||||
# Tab island backgrounds are derived from the window background color.
|
||||
tabs = '{{ muted }}'
|
||||
tabs-active = '{{ selection }}'
|
||||
split = '{{ muted }}'
|
||||
split-active = '{{ selection }}'
|
||||
|
||||
# Search
|
||||
search-match-background = '{{ light_background }}'
|
||||
search-match-foreground = '{{ dark_foreground }}'
|
||||
search-focused-match-background = '{{ lighter_background }}'
|
||||
search-focused-match-foreground = '{{ dark_foreground }}'
|
||||
|
||||
# Selection
|
||||
selection-foreground = '{{ selection_foreground }}'
|
||||
selection-background = '{{ selection_background }}'
|
||||
|
||||
# Dim colors
|
||||
dim-black = '{{ background }}'
|
||||
dim-blue = '{{ blue }}'
|
||||
dim-cyan = '{{ cyan }}'
|
||||
dim-foreground = '{{ foreground }}'
|
||||
dim-green = '{{ green }}'
|
||||
dim-magenta = '{{ magenta }}'
|
||||
dim-red = '{{ red }}'
|
||||
dim-white = '{{ foreground }}'
|
||||
dim-yellow = '{{ yellow }}'
|
||||
|
||||
# Light colors
|
||||
light-black = '{{ lighter_background }}'
|
||||
light-blue = '{{ bright_blue }}'
|
||||
light-cyan = '{{ bridht_cyan }}'
|
||||
light-foreground = '{{ bright_foreground }}'
|
||||
light-green = '{{ bright_green }}'
|
||||
light-magenta = '{{ bright_magenta }}'
|
||||
light-red = '{{ bright_red}}'
|
||||
light-white = '{{ bright_foreground }}'
|
||||
light-yellow = '{{ bright_yellow }}'
|
||||
@@ -0,0 +1,237 @@
|
||||
# Omarchy shell surfaces. Colors derive from colors.toml; sizes and the
|
||||
# typographic scale come from the keys below. Themes can ship
|
||||
# themes/<name>/shell.toml to replace this generated file.
|
||||
|
||||
[bar]
|
||||
# Alpha companions (where present) range from 0 (invisible) to 1 (opaque).
|
||||
background = "{{ background }}"
|
||||
background-alpha = 1.0
|
||||
text = "{{ foreground }}"
|
||||
# Modules calling attention to themselves (recording, voxtype, alerts, updates)
|
||||
active = "{{ red }}"
|
||||
# Cross-axis size at font base-size 12. size-horizontal is the height of
|
||||
# top/bottom bars; size-vertical is the width of left/right bars. With
|
||||
# scale-with-font enabled, these grow/shrink with [font] base-size.
|
||||
scale-with-font = true
|
||||
size-horizontal = 26
|
||||
size-vertical = 28
|
||||
|
||||
[hyprland]
|
||||
# Shared Hyprland-derived border tokens. Surface sections reference these so
|
||||
# lock, notifications, popups, and menu-style cards stay aligned with the
|
||||
# current Hyprland active-border gradient.
|
||||
active-border = "{{ shell_gradient hyprland_active_border accent }}"
|
||||
active-border-foreground = "{{ shell_gradient hyprland_active_border foreground }}"
|
||||
|
||||
[controls]
|
||||
# Shared state tokens for interactive control chrome (buttons, dropdowns,
|
||||
# tab strips, etc).
|
||||
|
||||
# Normal: idle control chrome. Border widths accept one CSS-style scalar/list:
|
||||
# N, "Y X", "T X B", or "T R B L". Per-side keys like
|
||||
# normal-border-width-left override the list. Each *-border accepts either a
|
||||
# solid color or a Hyprland-style gradient, e.g. "rgba(...) rgba(...) 45deg".
|
||||
normal-color = "{{ foreground }}"
|
||||
normal-fill-alpha = 0.04
|
||||
normal-border = "{{ foreground }}"
|
||||
normal-border-width = 1
|
||||
normal-border-alpha = 0.4
|
||||
|
||||
# Hover-cursor: mouse hover and the panel keyboard cursor.
|
||||
hover-cursor-color = "{{ foreground }}"
|
||||
hover-cursor-fill-alpha = 0.08
|
||||
hover-cursor-border = "{{ foreground }}"
|
||||
hover-cursor-border-width = 1
|
||||
hover-cursor-border-alpha = 0.25
|
||||
|
||||
# Focus: Qt activeFocus. Mirror the hover-cursor values by default so
|
||||
# mouse hover, keyboard cursor, and tab focus all read as the same state
|
||||
# — themes that want focus to stand out override these four lines.
|
||||
focus-color = "{{ foreground }}"
|
||||
focus-fill-alpha = 0.08
|
||||
focus-border = "{{ foreground }}"
|
||||
focus-border-width = 1
|
||||
focus-border-alpha = 0.25
|
||||
|
||||
# Selected: persistent chosen/current state.
|
||||
selected-color = "{{ foreground }}"
|
||||
selected-fill-alpha = 0.18
|
||||
selected-border = "{{ foreground }}"
|
||||
selected-border-width = 0
|
||||
selected-border-alpha = 1.0
|
||||
|
||||
# Momentary fills.
|
||||
pressed-fill-alpha = 0.22
|
||||
selection-fill-alpha = 0.35
|
||||
|
||||
[spacing]
|
||||
# `scale` multiplies shared margins, gaps, padding, controls, and panel
|
||||
# dimensions; components keep their proportions. With scale-with-font
|
||||
# enabled, those dimensions grow/shrink with [font] base-size too. Per-token
|
||||
# overrides (in px) below pin individual values without affecting the rest
|
||||
# of the scale. Uncomment any to tune a specific surface.
|
||||
scale = 1.0
|
||||
scale-with-font = true
|
||||
# xxs = 2
|
||||
# xs = 3
|
||||
# sm = 4
|
||||
# md = 6
|
||||
# lg = 8
|
||||
# xl = 10
|
||||
# xxl = 12
|
||||
# xxxl = 14
|
||||
# huge = 18
|
||||
# control-gap = 8
|
||||
# control-padding-x = 10
|
||||
# control-padding-y = 6
|
||||
# input-padding-y = 7
|
||||
# control-height = 28
|
||||
# popup-row-height = 28
|
||||
# row-gap = 8
|
||||
# row-padding-x = 12
|
||||
# label-gap = 4
|
||||
# panel-gap = 14
|
||||
# panel-padding = 18
|
||||
# popup-padding = 14
|
||||
# dropdown-width = 240
|
||||
# searchable-dropdown-width = 260
|
||||
# number-field-width = 120
|
||||
# searchable-popup-min-height = 220
|
||||
|
||||
[font]
|
||||
# base-size is the rem root for the type scale. Every Style.font.<token>
|
||||
# derives from it (e.g. body = base, subtitle ≈ base * 1.083,
|
||||
# heading ≈ base * 1.333). The shell only floors this at 1px; increase it
|
||||
# as much as you want.
|
||||
base-size = 12
|
||||
# Per-token overrides, in px. Uncomment any to pin a specific size without
|
||||
# affecting the rest of the scale. Useful for stylistic emphasis (a
|
||||
# minimalist theme that wants a bigger heading without scaling everything).
|
||||
# caption = 10
|
||||
# body-small = 11
|
||||
# body = 12
|
||||
# subtitle = 13
|
||||
# title = 14
|
||||
# heading = 16
|
||||
# display = 24
|
||||
# display-large = 28
|
||||
# icon-small = 11
|
||||
# icon = 14
|
||||
# icon-large = 18
|
||||
|
||||
[popups]
|
||||
# Shared by every bar flyout (dropdowns, OSD, popup cards).
|
||||
# Border accepts either a solid color or a Hyprland-style gradient. Border
|
||||
# widths accept one CSS-style scalar/list: N, "Y X", "T X B", or "T R B L";
|
||||
# individual border-width-top/right/bottom/left keys override the list.
|
||||
background = "{{ background }}"
|
||||
background-alpha = 1.0
|
||||
text = "{{ foreground }}"
|
||||
border = "hyprland.active-border"
|
||||
border-alpha = 1.0
|
||||
# border-width = 2
|
||||
|
||||
[tooltip]
|
||||
# Hover tooltips across the bar, panels, and buttons. background-alpha of
|
||||
# 0.97 mirrors the legacy hard-coded tooltip opacity.
|
||||
background = "{{ background }}"
|
||||
background-alpha = 0.97
|
||||
text = "{{ foreground }}"
|
||||
border = "hyprland.active-border-foreground"
|
||||
border-alpha = 1.0
|
||||
|
||||
[notifications]
|
||||
background = "{{ background }}"
|
||||
background-alpha = 1.0
|
||||
text = "{{ foreground }}"
|
||||
# Conventionally matches the Hyprland active-window border. Border accepts
|
||||
# either a solid color or the full active-border gradient.
|
||||
border = "hyprland.active-border"
|
||||
border-alpha = 1.0
|
||||
# border-width = 2
|
||||
countdown = "{{ accent }}"
|
||||
|
||||
[launcher]
|
||||
# Same six tokens as [menu], applied to the launcher overlay. Alpha
|
||||
# companions go from 0 (invisible) to 1 (opaque). scrim is the full-screen
|
||||
# dim layer behind the card; background is the card itself. Defaults
|
||||
# mirror [menu] with the card at 0.95 to preserve the legacy translucency.
|
||||
background = "{{ background }}"
|
||||
background-alpha = 0.95
|
||||
text = "{{ foreground }}"
|
||||
border = "hyprland.active-border-foreground"
|
||||
border-alpha = 1.0
|
||||
scrim = "{{ background }}"
|
||||
scrim-alpha = 0.5
|
||||
selected-background = "{{ foreground }}"
|
||||
selected-background-alpha = 0.08
|
||||
selected-text = "{{ accent }}"
|
||||
selected-border = "hyprland.active-border-foreground"
|
||||
selected-border-alpha = 0.25
|
||||
|
||||
[menu]
|
||||
# Cards, rows, and selected-row treatment. Alpha companions (where present)
|
||||
# go from 0 (invisible) to 1 (opaque). scrim is the full-screen dim layer
|
||||
# behind the card. Clipboard and emojis inherit these tokens.
|
||||
background = "{{ background }}"
|
||||
background-alpha = 1.0
|
||||
text = "{{ foreground }}"
|
||||
border = "hyprland.active-border-foreground"
|
||||
border-alpha = 1.0
|
||||
scrim = "{{ background }}"
|
||||
scrim-alpha = 0.5
|
||||
selected-background = "{{ foreground }}"
|
||||
selected-background-alpha = 0.08
|
||||
selected-text = "{{ accent }}"
|
||||
selected-border = "hyprland.active-border-foreground"
|
||||
selected-border-alpha = 0.25
|
||||
|
||||
[polkit]
|
||||
# Polkit authentication prompt (sudo/password dialogs). scrim is the
|
||||
# darkening layer behind the card; background is the card itself.
|
||||
# text-error tints the lock icon, password text, and placeholder when
|
||||
# authentication fails. border-alpha applies to both border and
|
||||
# border-error (the two states are mutually exclusive in time).
|
||||
background = "{{ background }}"
|
||||
background-alpha = 1.0
|
||||
text = "{{ foreground }}"
|
||||
text-error = "{{ red }}"
|
||||
border = "hyprland.active-border"
|
||||
border-error = "{{ red }}"
|
||||
border-alpha = 1.0
|
||||
scrim = "{{ background }}"
|
||||
scrim-alpha = 0.5
|
||||
# accent is the lock-icon glyph color + text-selection tint.
|
||||
accent = "{{ accent }}"
|
||||
|
||||
[lock]
|
||||
# Lock screen password input. background/background-alpha control the
|
||||
# centered input field card; border/border-active/border-error cycle
|
||||
# through idle, typing/authenticating, and wrong-password states.
|
||||
# border-alpha applies to all three border states (they are mutually
|
||||
# exclusive in time).
|
||||
background = "{{ background }}"
|
||||
background-alpha = 0.8
|
||||
text = "{{ foreground }}"
|
||||
placeholder = "{{ mix foreground background 34% }}"
|
||||
text-error = "{{ red }}"
|
||||
border = "hyprland.active-border"
|
||||
border-active = "hyprland.active-border"
|
||||
border-error = "{{ red }}"
|
||||
border-alpha = 1.0
|
||||
# selection is the text-selection tint inside the input field.
|
||||
selection = "{{ accent }}"
|
||||
selection-alpha = 0.45
|
||||
|
||||
[image-picker]
|
||||
# Carousel-style picker. The picker has no card surface, so `scrim` is
|
||||
# the full-screen wash. Per-slice dim overlays and text outlines on top
|
||||
# of the scrim track the foundational background color directly.
|
||||
# unselected-border-alpha softens carousel slices that aren't selected.
|
||||
scrim = "{{ background }}"
|
||||
scrim-alpha = 0.5
|
||||
text = "{{ foreground }}"
|
||||
selected-border = "{{ accent }}"
|
||||
selected-border-alpha = 1.0
|
||||
unselected-border = "{{ foreground }}"
|
||||
unselected-border-alpha = 0.28
|
||||
@@ -0,0 +1,5 @@
|
||||
@define-color background-color {{ background }};
|
||||
@define-color border-color {{ foreground }};
|
||||
@define-color label {{ foreground }};
|
||||
@define-color image {{ foreground }};
|
||||
@define-color progress {{ accent }};
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"name": "Omarchy",
|
||||
"appearance": "{{ mode }}",
|
||||
"canvas": "{{ background }}",
|
||||
"accent": "{{ accent }}",
|
||||
"colors": {
|
||||
"chrome": "{{ background }}",
|
||||
"toolbar": "{{ background }}",
|
||||
"toolbarForeground": "{{ foreground }}",
|
||||
"toolbarBorder": "{{ muted }}",
|
||||
|
||||
"text": "{{ foreground }}",
|
||||
"border": "{{ muted }}",
|
||||
"focus": "{{ accent }}",
|
||||
|
||||
"sidebar": "{{ dark_background }}",
|
||||
"sidebarForeground": "{{ foreground }}",
|
||||
"sidebarBorder": "{{ muted }}",
|
||||
"sidebarRowHover": "{{ mix dark_background foreground 6% }}",
|
||||
"sidebarRowActive": "{{ mix dark_background accent 18% }}",
|
||||
"sidebarRowSelected": "{{ selection }}",
|
||||
|
||||
"error": "{{ mix red foreground 35% }}",
|
||||
"warning": "{{ mix yellow foreground 35% }}",
|
||||
|
||||
"codeBackground": "{{ dark_background }}",
|
||||
"codeForeground": "{{ foreground }}",
|
||||
|
||||
"terminalBackground": "{{ background }}",
|
||||
"terminalForeground": "{{ foreground }}",
|
||||
"terminalCursor": "{{ bright_foreground }}",
|
||||
"terminalSelection": "{{ selection }}",
|
||||
"terminalScrollbar": "{{ muted }}",
|
||||
"terminalScrollbarHover": "{{ dark_foreground }}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
@define-color selected-text {{ accent }};
|
||||
@define-color text {{ foreground }};
|
||||
@define-color base {{ background }};
|
||||
@define-color border {{ foreground }};
|
||||
@define-color foreground {{ foreground }};
|
||||
@define-color background {{ background }};
|
||||
@@ -0,0 +1,2 @@
|
||||
@define-color foreground {{ foreground }};
|
||||
@define-color background {{ background }};
|
||||
@@ -0,0 +1,63 @@
|
||||
[vars]
|
||||
THEMES_STATE_DIR = ".local/state/omarchy/current/theme"
|
||||
OMARCHY_PATH = "{{config_root}}"
|
||||
|
||||
[dotfiles]
|
||||
"~/.config/environment.d/omarchy.conf" = { source = "templates/environment-omarchy.tmpl", mode = "template", template = "tera" }
|
||||
"~/.local/bin/omarchy-cmd-missing" = { source = "script/omarchy-cmd-missing", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-cmd-present" = { source = "script/omarchy-cmd-present", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-hook" = { source = "script/omarchy-hook", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-restart-btop" = { source = "script/omarchy-restart-btop", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-restart-hyprctl" = { source = "script/omarchy-restart-hyprctl", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-restart-hypridle" = { source = "script/omarchy-restart-hypridle", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-restart-mako" = { source = "script/omarchy-restart-mako", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-restart-tmux" = { source = "script/omarchy-restart-tmux", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-bg-next" = { source = "script/omarchy-theme-bg-next", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-bg-set" = { source = "script/omarchy-theme-bg-set", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-colors-from-alacritty" = { source = "script/omarchy-theme-colors-from-alacritty", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-color" = { source = "script/omarchy-theme-color", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-current" = { source = "script/omarchy-theme-current", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-install" = { source = "script/omarchy-theme-install", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-list" = { source = "script/omarchy-theme-list", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-refresh" = { source = "script/omarchy-theme-refresh", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-remove" = { source = "script/omarchy-theme-remove", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-set" = { source = "script/omarchy-theme-set", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-set-browser" = { source = "script/omarchy-theme-set-browser", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-set-foot" = { source = "script/omarchy-theme-set-foot", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-set-gnome" = { source = "script/omarchy-theme-set-gnome", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-set-keyboard" = { source = "script/omarchy-theme-set-keyboard", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-set-keyboard-asus-rog" = { source = "script/omarchy-theme-set-keyboard-asus-rog", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-set-keyboard-f16" = { source = "script/omarchy-theme-set-keyboard-f16", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-set-obsidian" = { source = "script/omarchy-theme-set-obsidian", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-set-templates" = { source = "script/omarchy-theme-set-templates", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-set-vscode" = { source = "script/omarchy-theme-set-vscode", mode = "symlink" }
|
||||
"~/.local/bin/omarchy-theme-update" = { source = "script/omarchy-theme-update", mode = "symlink" }
|
||||
"~/.local/share/themes/available" = { source = "themes", mode = "symlink" }
|
||||
|
||||
[tasks.setup_theme]
|
||||
run = [
|
||||
'mkdir -p ~/.config/strata/themes && ln -snf ~/.local/state/omarchy/current/theme/strata.toml ~/.config/strata/themes/omarchy.toml',
|
||||
'mkdir -p ~/.config/btop/themes && ln -snf ~/.local/state/omarchy/current/theme/btop.theme ~/.config/btop/themes/current.theme',
|
||||
'mkdir -p ~/.config/ghostty && ln -snf ~/.local/state/omarchy/current/theme/ghostty.conf ~/.config/ghostty/theme',
|
||||
'mkdir -p ~/.config/hypr && ln -snf ~/.local/state/omarchy/current/theme/hyprland.lua ~/.config/hypr/theme.lua',
|
||||
'mkdir -p ~/.config/nvim/plugin && ln -snf ~/.local/state/omarchy/current/theme/neovim-vimpack.lua ~/.config/nvim/plugin/theme.lua',
|
||||
'mkdir -p ~/.config/mako && ln -snf ~/.local/state/omarchy/current/theme/mako.ini ~/.config/mako/config',
|
||||
'mkdir -p ~/.config/rofi && ln -snf ~/.local/state/omarchy/current/theme/rofi.rasi ~/.config/rofi/theme.rasi',
|
||||
'mkdir -p ~/.config/rio/themes && ln -snf ~/.local/state/omarchy/current/theme/rio.toml ~/.config/rio/themes/omarchy.toml',
|
||||
'mkdir -p ~/.config/tmux && ln -snf ~/.local/state/omarchy/current/theme/tmux ~/.config/tmux/theme',
|
||||
]
|
||||
|
||||
[bootstrap.hooks.pre-packages]
|
||||
run = "test -d ~/.local/state/omarchy/current/theme || rsync -av config/omarchy/default/ ~/.local/state/omarchy/current/theme/ --mkpath"
|
||||
|
||||
[tasks.theme]
|
||||
description = 'configure theme'
|
||||
run = [
|
||||
'gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"',
|
||||
'gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"',
|
||||
'gsettings set org.gnome.desktop.interface icon-theme "Yaru-blue"',
|
||||
'omarchy-theme-set "tokyo-night"',
|
||||
]
|
||||
|
||||
[tasks.bootstrap]
|
||||
depends = ["theme"]
|
||||
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Check whether any required commands are missing
|
||||
|
||||
for cmd in "$@"; do
|
||||
if ! command -v "$cmd" &>/dev/null; then
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
|
||||
exit 1
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Check whether all required commands are available
|
||||
|
||||
for cmd in "$@"; do
|
||||
command -v "$cmd" &>/dev/null || exit 1
|
||||
done
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Run a named hook from ~/.config/omarchy/hooks/<name> and ~/.config/omarchy/hooks/<name>.d/.
|
||||
# omarchy:args=[name] [args...]
|
||||
|
||||
set -e
|
||||
|
||||
if (( $# < 1 )); then
|
||||
echo "Usage: omarchy-hook [name] [args...]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
HOOK=$1
|
||||
HOOK_PATH="$HOME/.config/omarchy/hooks/$1"
|
||||
HOOK_DIR="$HOOK_PATH.d"
|
||||
shift
|
||||
|
||||
if [[ -f $HOOK_PATH ]]; then
|
||||
bash "$HOOK_PATH" "$@" || echo "Hook failed: $HOOK_PATH"
|
||||
fi
|
||||
|
||||
if [[ -d $HOOK_DIR ]]; then
|
||||
for hook in "$HOOK_DIR"/*; do
|
||||
[[ -f $hook ]] || continue
|
||||
[[ $hook == *.sample ]] && continue
|
||||
bash "$hook" "$@" || echo "Hook failed: $hook"
|
||||
done
|
||||
fi
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Reload btop configuration (used by the Omarchy theme switching).
|
||||
|
||||
pkill -SIGUSR2 btop
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Reload hyprland configuration (used by the Omarchy theme switching).
|
||||
|
||||
hyprctl reload >/dev/null
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Restart the hypridle service (used for idle detection and auto-lock).
|
||||
|
||||
omarchy-restart-app hypridle
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Reload mako configuration (used by the Omarchy theme switching).
|
||||
|
||||
makoctl reload
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Restart tmux if running with the latest configuration
|
||||
|
||||
if pgrep --quiet tmux; then
|
||||
tmux source-file ~/.config/tmux/tmux.conf
|
||||
fi
|
||||
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Cycle to the next background for the current theme
|
||||
# omarchy:examples=omarchy theme bg next
|
||||
|
||||
THEME_NAME=$(cat "$HOME/.local/state/omarchy/current/theme.name" 2>/dev/null)
|
||||
THEME_BACKGROUNDS_PATH="$HOME/.local/state/omarchy/current/theme/backgrounds/"
|
||||
USER_BACKGROUNDS_PATH="$HOME/.config/omarchy/backgrounds/$THEME_NAME/"
|
||||
CURRENT_BACKGROUND_LINK="$HOME/.local/state/omarchy/current/background"
|
||||
|
||||
mapfile -d '' -t BACKGROUNDS < <(find -L "$USER_BACKGROUNDS_PATH" "$THEME_BACKGROUNDS_PATH" -maxdepth 1 -type f -print0 2>/dev/null | sort -z)
|
||||
TOTAL=${#BACKGROUNDS[@]}
|
||||
|
||||
if (( TOTAL == 0 )); then
|
||||
notify-send "No background was found for theme" -t 2000
|
||||
setsid uwsm app -- awww clear >/dev/null 2>&1 &
|
||||
else
|
||||
# Get current background from symlink
|
||||
if [[ -L $CURRENT_BACKGROUND_LINK ]]; then
|
||||
CURRENT_BACKGROUND=$(readlink "$CURRENT_BACKGROUND_LINK")
|
||||
else
|
||||
# Default to first background if no symlink exists
|
||||
CURRENT_BACKGROUND=""
|
||||
fi
|
||||
|
||||
# Find current background index
|
||||
INDEX=-1
|
||||
for i in "${!BACKGROUNDS[@]}"; do
|
||||
if [[ ${BACKGROUNDS[$i]} == $CURRENT_BACKGROUND ]]; then
|
||||
INDEX=$i
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Get next background (wrap around)
|
||||
if (( INDEX == -1 )); then
|
||||
# Use the first background when no match was found
|
||||
NEW_BACKGROUND="${BACKGROUNDS[0]}"
|
||||
else
|
||||
NEXT_INDEX=$(((INDEX + 1) % TOTAL))
|
||||
NEW_BACKGROUND="${BACKGROUNDS[$NEXT_INDEX]}"
|
||||
fi
|
||||
|
||||
# Set new background symlink
|
||||
ln -nsf "$NEW_BACKGROUND" "$CURRENT_BACKGROUND_LINK"
|
||||
|
||||
setsid uwsm app -- awww img "$CURRENT_BACKGROUND_LINK" >/dev/null 2>&1 &
|
||||
fi
|
||||
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Set the current background image
|
||||
# omarchy:args=<path-to-image>
|
||||
# omarchy:examples=omarchy theme bg set ~/Pictures/wallpaper.png
|
||||
|
||||
if [[ -z $1 ]]; then
|
||||
echo "Usage: omarchy-theme-bg-set <path-to-image>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BACKGROUND="$(realpath "$1")"
|
||||
CURRENT_BACKGROUND_LINK="$HOME/.local/state/omarchy/current/background"
|
||||
|
||||
if [[ ! -f "$BACKGROUND" ]]; then
|
||||
echo "File does not exist: $BACKGROUND" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create symlink to the new background
|
||||
ln -nsf "$BACKGROUND" "$CURRENT_BACKGROUND_LINK"
|
||||
|
||||
# Kill existing swaybg and start new one
|
||||
pkill -x swaybg
|
||||
setsid uwsm-app -- swaybg -i "$CURRENT_BACKGROUND_LINK" -m fill >/dev/null 2>&1 &
|
||||
@@ -0,0 +1,304 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Resolve semantic colors from an Omarchy theme colors.toml
|
||||
# omarchy:args=[--file <colors.toml>] (--all | --raw | <key> [fallback])
|
||||
# omarchy:hidden=true
|
||||
|
||||
# Shared colors.toml parser/resolver. The alias/fallback cascade mirrors what
|
||||
# omarchy-theme-set-templates bakes into the generated configs at theme-set
|
||||
# time, so every consumer (templates, OSC sequences, tmux, GNOME, previews)
|
||||
# resolves the exact same palette.
|
||||
#
|
||||
# --all print every resolved key<TAB>value pair (sorted by key)
|
||||
# --raw print only the key<TAB>value pairs defined in the file
|
||||
# <key> [fallback] print one resolved value; the fallback is tried as
|
||||
# another palette key first, then used verbatim
|
||||
#
|
||||
# Theme mode precedence: `mode` key, legacy `theme_type` key, a light.mode
|
||||
# file beside the colors.toml, background luminance auto-detect, dark.
|
||||
|
||||
COLORS_FILE="$HOME/.local/state/omarchy/current/theme/colors.toml"
|
||||
OUTPUT=""
|
||||
QUERY_KEY=""
|
||||
QUERY_FALLBACK=""
|
||||
|
||||
usage() {
|
||||
echo "Usage: omarchy-theme-color [--file <colors.toml>] (--all | --raw | <key> [fallback])"
|
||||
}
|
||||
|
||||
while (( $# > 0 )); do
|
||||
case "$1" in
|
||||
--file)
|
||||
COLORS_FILE="${2:-}"
|
||||
shift 2
|
||||
;;
|
||||
--all)
|
||||
OUTPUT="all"
|
||||
shift
|
||||
;;
|
||||
--raw)
|
||||
OUTPUT="raw"
|
||||
shift
|
||||
;;
|
||||
-h | --help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
if [[ -z $QUERY_KEY ]]; then
|
||||
QUERY_KEY="$1"
|
||||
elif [[ -z $QUERY_FALLBACK ]]; then
|
||||
QUERY_FALLBACK="$1"
|
||||
else
|
||||
usage >&2
|
||||
exit 1
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z $OUTPUT && -z $QUERY_KEY ]] || [[ -n $OUTPUT && -n $QUERY_KEY ]]; then
|
||||
usage >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
COLORS_DIR=$(dirname "$COLORS_FILE")
|
||||
|
||||
declare -A THEME_COLORS
|
||||
|
||||
# Mix two hex colors. Amount may be a fraction (0.30) or percentage (30%).
|
||||
mix_color() {
|
||||
local start="${1#\#}"
|
||||
local end="${2#\#}"
|
||||
local amount="$3"
|
||||
|
||||
awk -v start="$start" -v end="$end" -v amount="$amount" '
|
||||
function hex_value(char) {
|
||||
return index("0123456789abcdef", tolower(char)) - 1
|
||||
}
|
||||
|
||||
function hex_pair_to_int(hex, idx) {
|
||||
return hex_value(substr(hex, idx, 1)) * 16 + hex_value(substr(hex, idx + 1, 1))
|
||||
}
|
||||
|
||||
BEGIN {
|
||||
if (amount ~ /%$/) {
|
||||
sub(/%$/, "", amount)
|
||||
amount = amount / 100
|
||||
} else {
|
||||
amount += 0
|
||||
if (amount > 1) amount = amount / 100
|
||||
}
|
||||
|
||||
if (amount < 0) amount = 0
|
||||
if (amount > 1) amount = 1
|
||||
|
||||
start_r = hex_pair_to_int(start, 1)
|
||||
start_g = hex_pair_to_int(start, 3)
|
||||
start_b = hex_pair_to_int(start, 5)
|
||||
end_r = hex_pair_to_int(end, 1)
|
||||
end_g = hex_pair_to_int(end, 3)
|
||||
end_b = hex_pair_to_int(end, 5)
|
||||
|
||||
red = int(start_r * (1 - amount) + end_r * amount + 0.5)
|
||||
green = int(start_g * (1 - amount) + end_g * amount + 0.5)
|
||||
blue = int(start_b * (1 - amount) + end_b * amount + 0.5)
|
||||
|
||||
printf "#%02x%02x%02x\n", red, green, blue
|
||||
}
|
||||
'
|
||||
}
|
||||
|
||||
alias_theme_color() {
|
||||
local key="$1"
|
||||
local fallback="$2"
|
||||
|
||||
[[ ${THEME_COLORS[$key]} ]] || THEME_COLORS[$key]="${THEME_COLORS[$fallback]}"
|
||||
}
|
||||
|
||||
resolve_theme_mode() {
|
||||
local bg_hex lum
|
||||
|
||||
[[ ${THEME_COLORS[mode]} ]] || THEME_COLORS[mode]="${THEME_COLORS[theme_type]}"
|
||||
[[ ${THEME_COLORS[mode]} ]] && return
|
||||
|
||||
if [[ -f $COLORS_DIR/light.mode ]]; then
|
||||
THEME_COLORS[mode]="light"
|
||||
elif [[ ${THEME_COLORS[background]} =~ ^#[0-9A-Fa-f]{6}$ ]]; then
|
||||
bg_hex="${THEME_COLORS[background]#\#}"
|
||||
lum=$(( $(printf "%d" "0x${bg_hex:0:2}") + $(printf "%d" "0x${bg_hex:2:2}") + $(printf "%d" "0x${bg_hex:4:2}") ))
|
||||
(( lum > 382 )) && THEME_COLORS[mode]="light" || THEME_COLORS[mode]="dark"
|
||||
else
|
||||
THEME_COLORS[mode]="dark"
|
||||
fi
|
||||
}
|
||||
|
||||
parse_colors_file() {
|
||||
local key value
|
||||
|
||||
[[ -f $COLORS_FILE ]] || return 0
|
||||
|
||||
while IFS='=' read -r key value; do
|
||||
key="${key//[\"\' ]/}" # strip quotes and spaces from key
|
||||
[[ $key && $key != \#* ]] || continue # skip empty lines and comments
|
||||
|
||||
if [[ $value == *[\"\']* ]]; then
|
||||
value="${value#*[\"\']}"
|
||||
value="${value%%[\"\']*}" # extract value between quotes (ignores inline comments)
|
||||
else
|
||||
value="${value#"${value%%[![:space:]]*}"}"
|
||||
value="${value%"${value##*[![:space:]]}"}" # trim unquoted values
|
||||
fi
|
||||
|
||||
# Values reach consumers as sed replacement text, so the charset excludes
|
||||
# the delimiter, backslash, and & while still covering everything a real
|
||||
# palette holds: hex, rgb()/rgba() lists, gradient angles like -45deg,
|
||||
# decimals, and bare words. Rejections are announced so a third-party theme
|
||||
# doesn't lose a key silently and leave a raw {{ placeholder }} behind.
|
||||
if [[ ! $key =~ ^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]+$ ]]; then
|
||||
printf 'omarchy-theme-color: skipping key with unsupported characters\n' >&2
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ ! $value =~ ^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#(),._+/%\ -]*$ ]]; then
|
||||
printf 'omarchy-theme-color: skipping %s: unsupported characters in value\n' "$key" >&2
|
||||
continue
|
||||
fi
|
||||
|
||||
THEME_COLORS[$key]="$value"
|
||||
[[ $OUTPUT == "raw" ]] && printf '%s\t%s\n' "$key" "$value"
|
||||
done <"$COLORS_FILE"
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
resolve_theme_colors() {
|
||||
local key
|
||||
|
||||
# Accept the complete legacy short-name palette before applying ANSI
|
||||
# fallbacks or deriving shades. Canonical names take precedence when a theme
|
||||
# defines both forms.
|
||||
declare -A legacy_palette_alias=(
|
||||
[background]=bg
|
||||
[dark_background]=dark_bg
|
||||
[darker_background]=darker_bg
|
||||
[lighter_background]=lighter_bg
|
||||
[foreground]=fg
|
||||
[dark_foreground]=dark_fg
|
||||
[light_foreground]=light_fg
|
||||
[bright_foreground]=bright_fg
|
||||
)
|
||||
for key in "${!legacy_palette_alias[@]}"; do
|
||||
alias_theme_color "$key" "${legacy_palette_alias[$key]}"
|
||||
done
|
||||
|
||||
# Themes generated before the semantic palette may only define ANSI names.
|
||||
[[ ${THEME_COLORS[background]} ]] || THEME_COLORS[background]="${THEME_COLORS[color0]}"
|
||||
[[ ${THEME_COLORS[foreground]} ]] || THEME_COLORS[foreground]="${THEME_COLORS[color7]}"
|
||||
[[ ${THEME_COLORS[background]} ]] && THEME_COLORS[color0]="${THEME_COLORS[background]}"
|
||||
[[ ${THEME_COLORS[foreground]} ]] && THEME_COLORS[color7]="${THEME_COLORS[foreground]}"
|
||||
|
||||
# Legacy compatibility: map ANSI color0..color15 to semantic names.
|
||||
declare -A legacy_alias=(
|
||||
[red]=color1
|
||||
[green]=color2
|
||||
[yellow]=color3
|
||||
[blue]=color4
|
||||
[magenta]=color5
|
||||
[cyan]=color6
|
||||
[bright_red]=color9
|
||||
[bright_green]=color10
|
||||
[bright_yellow]=color11
|
||||
[bright_blue]=color12
|
||||
[bright_magenta]=color13
|
||||
[bright_cyan]=color14
|
||||
)
|
||||
for key in "${!legacy_alias[@]}"; do
|
||||
alias_theme_color "$key" "${legacy_alias[$key]}"
|
||||
done
|
||||
alias_theme_color magenta purple
|
||||
alias_theme_color bright_magenta bright_purple
|
||||
|
||||
[[ ${THEME_COLORS[light_foreground]} ]] || THEME_COLORS[light_foreground]="${THEME_COLORS[color7]:-${THEME_COLORS[foreground]}}"
|
||||
[[ ${THEME_COLORS[bright_foreground]} ]] || THEME_COLORS[bright_foreground]="${THEME_COLORS[color15]:-${THEME_COLORS[foreground]}}"
|
||||
THEME_COLORS[cursor]="${THEME_COLORS[bright_foreground]}"
|
||||
[[ ${THEME_COLORS[lighter_background]} ]] || THEME_COLORS[lighter_background]="${THEME_COLORS[color0]:-${THEME_COLORS[background]}}"
|
||||
[[ ${THEME_COLORS[dark_foreground]} ]] || THEME_COLORS[dark_foreground]="${THEME_COLORS[color8]:-${THEME_COLORS[foreground]}}"
|
||||
[[ ${THEME_COLORS[muted]} ]] || THEME_COLORS[muted]="${THEME_COLORS[color8]:-${THEME_COLORS[dark_foreground]}}"
|
||||
[[ ${THEME_COLORS[selection]} ]] || THEME_COLORS[selection]="${THEME_COLORS[selection_background]:-${THEME_COLORS[color8]:-${THEME_COLORS[color0]:-${THEME_COLORS[background]}}}}"
|
||||
[[ ${THEME_COLORS[selection_background]} ]] || THEME_COLORS[selection_background]="${THEME_COLORS[selection]}"
|
||||
[[ ${THEME_COLORS[selection_foreground]} ]] || THEME_COLORS[selection_foreground]="${THEME_COLORS[bright_foreground]}"
|
||||
[[ ${THEME_COLORS[orange]} ]] || THEME_COLORS[orange]="${THEME_COLORS[yellow]}"
|
||||
[[ ${THEME_COLORS[brown]} ]] || THEME_COLORS[brown]=$(mix_color "${THEME_COLORS[orange]}" "#000000" 50%)
|
||||
|
||||
# Auto-derive shades from base accents when not defined and not aliased from colorN
|
||||
[[ ${THEME_COLORS[dark_background]} ]] || THEME_COLORS[dark_background]=$(mix_color "${THEME_COLORS[background]}" "#000000" 25%)
|
||||
[[ ${THEME_COLORS[darker_background]} ]] || THEME_COLORS[darker_background]=$(mix_color "${THEME_COLORS[background]}" "#000000" 50%)
|
||||
[[ ${THEME_COLORS[bright_red]} ]] || THEME_COLORS[bright_red]=$(mix_color "${THEME_COLORS[red]}" "#ffffff" 20%)
|
||||
[[ ${THEME_COLORS[bright_yellow]} ]] || THEME_COLORS[bright_yellow]=$(mix_color "${THEME_COLORS[yellow]}" "#ffffff" 20%)
|
||||
[[ ${THEME_COLORS[bright_green]} ]] || THEME_COLORS[bright_green]=$(mix_color "${THEME_COLORS[green]}" "#ffffff" 20%)
|
||||
[[ ${THEME_COLORS[bright_cyan]} ]] || THEME_COLORS[bright_cyan]=$(mix_color "${THEME_COLORS[cyan]}" "#ffffff" 20%)
|
||||
[[ ${THEME_COLORS[bright_blue]} ]] || THEME_COLORS[bright_blue]=$(mix_color "${THEME_COLORS[blue]}" "#ffffff" 20%)
|
||||
[[ ${THEME_COLORS[bright_magenta]} ]] || THEME_COLORS[bright_magenta]=$(mix_color "${THEME_COLORS[magenta]}" "#ffffff" 20%)
|
||||
alias_theme_color purple magenta
|
||||
alias_theme_color bright_purple bright_magenta
|
||||
|
||||
# Keep semantic themes compatible with consumers that still reference the
|
||||
# legacy ANSI names directly.
|
||||
declare -A ansi_alias=(
|
||||
[color0]=background
|
||||
[color1]=red
|
||||
[color2]=green
|
||||
[color3]=yellow
|
||||
[color4]=blue
|
||||
[color5]=magenta
|
||||
[color6]=cyan
|
||||
[color7]=foreground
|
||||
[color8]=muted
|
||||
[color9]=bright_red
|
||||
[color10]=bright_green
|
||||
[color11]=bright_yellow
|
||||
[color12]=bright_blue
|
||||
[color13]=bright_magenta
|
||||
[color14]=bright_cyan
|
||||
[color15]=bright_foreground
|
||||
)
|
||||
for key in "${!ansi_alias[@]}"; do
|
||||
alias_theme_color "$key" "${ansi_alias[$key]}"
|
||||
done
|
||||
|
||||
# Keep canonical themes compatible with old user templates and consumers
|
||||
# that still query the short palette names directly.
|
||||
for key in "${!legacy_palette_alias[@]}"; do
|
||||
if [[ ${THEME_COLORS[$key]} ]]; then
|
||||
THEME_COLORS["${legacy_palette_alias[$key]}"]="${THEME_COLORS[$key]}"
|
||||
fi
|
||||
done
|
||||
|
||||
resolve_theme_mode
|
||||
THEME_COLORS[theme_type]="${THEME_COLORS[mode]}"
|
||||
}
|
||||
|
||||
parse_colors_file
|
||||
|
||||
if [[ $OUTPUT == "raw" ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
resolve_theme_colors
|
||||
|
||||
if [[ $OUTPUT == "all" ]]; then
|
||||
while IFS= read -r key; do
|
||||
printf '%s\t%s\n' "$key" "${THEME_COLORS[$key]}"
|
||||
done < <(printf '%s\n' "${!THEME_COLORS[@]}" | LC_ALL=C sort)
|
||||
exit 0
|
||||
fi
|
||||
|
||||
value="${THEME_COLORS[$QUERY_KEY]:-}"
|
||||
if [[ -z $value && -n $QUERY_FALLBACK ]]; then
|
||||
value="${THEME_COLORS[$QUERY_FALLBACK]:-$QUERY_FALLBACK}"
|
||||
fi
|
||||
|
||||
[[ -n $value ]] || exit 1
|
||||
printf '%s\n' "$value"
|
||||
@@ -0,0 +1,211 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Generate a theme's colors.toml from its alacritty.toml palette
|
||||
# omarchy:args=<theme-dir>
|
||||
# omarchy:hidden=true
|
||||
|
||||
set -e
|
||||
|
||||
THEME_SOURCE="${1:-}"
|
||||
COLORS_OUTPUT="$THEME_SOURCE/colors.toml"
|
||||
ALACRITTY_FILE="$THEME_SOURCE/alacritty.toml"
|
||||
|
||||
if [[ -z $THEME_SOURCE ]]; then
|
||||
echo "Usage: omarchy-theme-colors-from-alacritty <theme-dir>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Skip if colors.toml already exists in source theme
|
||||
if [[ -f $COLORS_OUTPUT ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Skip if no alacritty.toml to extract from
|
||||
if [[ ! -f $ALACRITTY_FILE ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
normalize_hex() {
|
||||
local color="$1"
|
||||
[[ -z $color ]] && return
|
||||
color="${color#0x}"
|
||||
color="${color#\#}"
|
||||
if [[ $color =~ ^[0-9a-fA-F]{6}$ ]]; then
|
||||
printf "#%s\n" "${color,,}"
|
||||
fi
|
||||
}
|
||||
|
||||
extract_color_in_section() {
|
||||
local section="$1"
|
||||
local key="$2"
|
||||
local color_hex=""
|
||||
color_hex=$(awk -v section="$section" -v key="$key" '
|
||||
function trim(value) {
|
||||
gsub(/^[ \t]+|[ \t]+$/, "", value)
|
||||
return value
|
||||
}
|
||||
|
||||
function strip_comment(value, i, ch, out, in_single, in_double, prev) {
|
||||
out = ""
|
||||
in_single = 0
|
||||
in_double = 0
|
||||
prev = ""
|
||||
|
||||
for (i = 1; i <= length(value); i++) {
|
||||
ch = substr(value, i, 1)
|
||||
|
||||
if (ch == "\"" && !in_single && prev != "\\") {
|
||||
in_double = !in_double
|
||||
} else if (ch == "'\''" && !in_double) {
|
||||
in_single = !in_single
|
||||
}
|
||||
|
||||
if (ch == "#" && !in_single && !in_double) {
|
||||
break
|
||||
}
|
||||
|
||||
out = out ch
|
||||
prev = ch
|
||||
}
|
||||
|
||||
gsub(/[ \t]+$/, "", out)
|
||||
return out
|
||||
}
|
||||
|
||||
/^[ \t]*\[/ {
|
||||
in_section = ($0 ~ "^[ \\t]*\\[" section "\\][ \\t]*$")
|
||||
next
|
||||
}
|
||||
|
||||
in_section {
|
||||
line = $0
|
||||
line = strip_comment(line)
|
||||
|
||||
split_pos = index(line, "=")
|
||||
if (split_pos == 0) {
|
||||
next
|
||||
}
|
||||
|
||||
current_key = trim(substr(line, 1, split_pos - 1))
|
||||
current_value = trim(substr(line, split_pos + 1))
|
||||
|
||||
if (current_key == key) {
|
||||
gsub(/["'\''#]/, "", current_value)
|
||||
sub(/^0[xX]/, "", current_value)
|
||||
if (current_value ~ /^[0-9A-Fa-f]{6}$/) {
|
||||
print current_value
|
||||
exit
|
||||
}
|
||||
}
|
||||
}
|
||||
' "$ALACRITTY_FILE")
|
||||
|
||||
if [[ -n $color_hex && $color_hex =~ ^[0-9a-fA-F]{6}$ ]]; then
|
||||
normalize_hex "$color_hex"
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
names=(black red green yellow blue magenta cyan white)
|
||||
|
||||
# Extract normal colors (color0-7)
|
||||
for i in {0..7}; do
|
||||
name="${names[$i]}"
|
||||
val=$(extract_color_in_section "colors.normal" "$name")
|
||||
if [[ -z $val ]]; then
|
||||
val=$(extract_color_in_section "colors" "normal.$name")
|
||||
fi
|
||||
|
||||
printf -v "color$i" "%s" "$val"
|
||||
done
|
||||
|
||||
# Validate we have all normal colors (required)
|
||||
for c in color0 color1 color2 color3 color4 color5 color6 color7; do
|
||||
if [[ -z ${!c} ]]; then
|
||||
echo "Warning: Cannot extract all normal colors from $ALACRITTY_FILE, skipping generation" >&2
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
|
||||
# Extract bright colors (color8-15)
|
||||
for i in {0..7}; do
|
||||
normal="color$i"
|
||||
bright="color$((i + 8))"
|
||||
name="${names[$i]}"
|
||||
|
||||
val=$(extract_color_in_section "colors.bright" "$name")
|
||||
if [[ -z $val ]]; then
|
||||
val=$(extract_color_in_section "colors" "bright.$name")
|
||||
fi
|
||||
|
||||
printf -v "$bright" "%s" "${val:-${!normal}}"
|
||||
done
|
||||
|
||||
# Extract primary colors
|
||||
background=$(extract_color_in_section "colors.primary" "background")
|
||||
foreground=$(extract_color_in_section "colors.primary" "foreground")
|
||||
|
||||
if [[ -z $background ]]; then
|
||||
background=$(extract_color_in_section "colors" "primary.background")
|
||||
fi
|
||||
|
||||
if [[ -z $foreground ]]; then
|
||||
foreground=$(extract_color_in_section "colors" "primary.foreground")
|
||||
fi
|
||||
|
||||
# Extract cursor color (from [colors.cursor] section)
|
||||
cursor=$(extract_color_in_section "colors.cursor" "cursor")
|
||||
|
||||
if [[ -z $cursor ]]; then
|
||||
cursor=$(extract_color_in_section "colors" "cursor.cursor")
|
||||
fi
|
||||
|
||||
# Extract selection colors
|
||||
selection_background=$(extract_color_in_section "colors.selection" "background")
|
||||
|
||||
if [[ -z $selection_background ]]; then
|
||||
selection_background=$(extract_color_in_section "colors" "selection.background")
|
||||
fi
|
||||
|
||||
selection_foreground=$(extract_color_in_section "colors.selection" "text")
|
||||
|
||||
if [[ -z $selection_foreground ]]; then
|
||||
selection_foreground=$(extract_color_in_section "colors" "selection.text")
|
||||
fi
|
||||
|
||||
# Apply defaults
|
||||
background=${background:-$color0}
|
||||
foreground=${foreground:-$color7}
|
||||
cursor=${cursor:-$foreground}
|
||||
selection_background=${selection_background:-$foreground}
|
||||
selection_foreground=${selection_foreground:-$background}
|
||||
accent=$color4
|
||||
|
||||
mkdir -p "$THEME_SOURCE"
|
||||
|
||||
cat > "$COLORS_OUTPUT" <<EOF
|
||||
accent = "$accent"
|
||||
cursor = "$cursor"
|
||||
foreground = "$foreground"
|
||||
background = "$background"
|
||||
selection_foreground = "$selection_foreground"
|
||||
selection_background = "$selection_background"
|
||||
|
||||
color0 = "$color0"
|
||||
color1 = "$color1"
|
||||
color2 = "$color2"
|
||||
color3 = "$color3"
|
||||
color4 = "$color4"
|
||||
color5 = "$color5"
|
||||
color6 = "$color6"
|
||||
color7 = "$color7"
|
||||
color8 = "$color8"
|
||||
color9 = "$color9"
|
||||
color10 = "$color10"
|
||||
color11 = "$color11"
|
||||
color12 = "$color12"
|
||||
color13 = "$color13"
|
||||
color14 = "$color14"
|
||||
color15 = "$color15"
|
||||
EOF
|
||||
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Show current theme
|
||||
# omarchy:examples=omarchy theme current
|
||||
|
||||
THEME_NAME_PATH="$HOME/.local/state/omarchy/current/theme.name"
|
||||
|
||||
if [[ -f $THEME_NAME_PATH ]]; then
|
||||
cat $THEME_NAME_PATH | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g'
|
||||
else
|
||||
echo "Unknown"
|
||||
fi
|
||||
@@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Install a theme from a git repository
|
||||
# omarchy:args=[git-repo-url]
|
||||
# omarchy:examples=omarchy theme install https://github.com/example/omarchy-example-theme.git
|
||||
# omarchy:examples=omarchy theme install git@github.com:example/omarchy-example-theme.git
|
||||
|
||||
if [[ -z $1 ]]; then
|
||||
echo -e "\e[32mSee https://manuals.omamix.org/2/the-omarchy-manual/90/extra-themes\n\e[0m"
|
||||
REPO_URL=$(gum input --placeholder="Git repo URL (https or git@host:org/repo.git)" --header="")
|
||||
else
|
||||
REPO_URL="$1"
|
||||
fi
|
||||
|
||||
if [[ -z $REPO_URL ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
THEMES_DIR="$HOME/.config/omarchy/themes"
|
||||
|
||||
# Strip user@host: prefix from scp-style SSH URLs so basename sees just the path
|
||||
REPO_PATH="$REPO_URL"
|
||||
[[ $REPO_PATH != *"://"* && $REPO_PATH == *:*/* ]] && REPO_PATH="${REPO_PATH#*:}"
|
||||
THEME_NAME=$(basename "$REPO_PATH" .git | sed -E 's/^omarchy-//; s/-theme$//' | tr '[:upper:]' '[:lower:]')
|
||||
THEME_PATH="$THEMES_DIR/$THEME_NAME"
|
||||
|
||||
# Remove existing theme if present
|
||||
if [[ -d $THEME_PATH ]]; then
|
||||
rm -rf "$THEME_PATH"
|
||||
fi
|
||||
|
||||
# Clone the repo directly to ~/.config/omarchy/themes
|
||||
if ! git clone "$REPO_URL" "$THEME_PATH"; then
|
||||
echo "Error: Failed to clone theme repo."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Apply the new theme with omarchy-theme-set
|
||||
omarchy-theme-set $THEME_NAME
|
||||
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=List available themes
|
||||
# omarchy:examples=omarchy theme list | omarchy theme set "Tokyo Night"
|
||||
|
||||
{
|
||||
find ~/.config/omarchy/themes/ -mindepth 1 -maxdepth 1 \( -type d -o -type l \) -printf '%f\n'
|
||||
find "${OMARCHY_PATH}/themes/" -mindepth 1 -maxdepth 1 -type d -printf '%f\n'
|
||||
} | sort -u | while read -r name; do
|
||||
echo "$name" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g'
|
||||
done
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Refresh the current theme from its templates.
|
||||
|
||||
THEME_NAME_PATH="$HOME/.local/state/omarchy/current/theme.name"
|
||||
|
||||
if [[ -f $THEME_NAME_PATH ]]; then
|
||||
OMARCHY_THEME_SKIP_BACKGROUND=1 omarchy-theme-set "$(cat $THEME_NAME_PATH)"
|
||||
fi
|
||||
@@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Remove a user-installed theme
|
||||
# omarchy:args=[theme-name]
|
||||
# omarchy:examples=omarchy theme remove "Tokyo Night"
|
||||
|
||||
if [[ -z $1 ]]; then
|
||||
mapfile -t extra_themes < <(find ~/.config/omarchy/themes -mindepth 1 -maxdepth 1 -type d ! -xtype l -printf '%f\n')
|
||||
|
||||
if (( ${#extra_themes[@]} > 0 )); then
|
||||
THEME_NAME=$(printf '%s\n' "${extra_themes[@]}" | sort | gum choose --header="Remove extra theme")
|
||||
else
|
||||
echo "No extra themes installed."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
THEME_NAME="$1"
|
||||
fi
|
||||
|
||||
THEMES_DIR="$HOME/.config/omarchy/themes"
|
||||
CURRENT_DIR="$HOME/.local/state/omarchy/current"
|
||||
THEME_PATH="$THEMES_DIR/$THEME_NAME"
|
||||
|
||||
# Ensure a theme was set
|
||||
if [[ -z $THEME_NAME ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if theme exists before attempting removal
|
||||
if [[ ! -d $THEME_PATH ]]; then
|
||||
echo "Error: Theme '$THEME_NAME' not found."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Now remove the theme directory for THEME_NAME
|
||||
rm -rf "$THEME_PATH"
|
||||
@@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Apply an Omarchy theme
|
||||
# omarchy:args=<theme-name>
|
||||
# omarchy:examples=omarchy theme list | omarchy theme set "Tokyo Night"
|
||||
|
||||
if [[ -z $1 ]]; then
|
||||
echo "Usage: omarchy-theme-set <theme-name>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
CURRENT_THEME_PATH="$HOME/.local/state/omarchy/current/theme"
|
||||
NEXT_THEME_PATH="$HOME/.local/state/omarchy/current/next-theme"
|
||||
USER_THEMES_PATH="$HOME/.config/omarchy/themes"
|
||||
OMARCHY_THEMES_PATH="${OMARCHY_PATH}/themes"
|
||||
|
||||
THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
|
||||
|
||||
if [[ ! -d $OMARCHY_THEMES_PATH/$THEME_NAME ]] && [[ ! -d $USER_THEMES_PATH/$THEME_NAME ]]; then
|
||||
echo "Theme '$THEME_NAME' does not exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Setup clean next theme directory (for atomic theme config swapping)
|
||||
rm -rf "$NEXT_THEME_PATH"
|
||||
mkdir -p "$NEXT_THEME_PATH"
|
||||
|
||||
# Copy official theme first, then overlay user customizations on top
|
||||
cp -r "$OMARCHY_THEMES_PATH/$THEME_NAME/"* "$NEXT_THEME_PATH/" 2>/dev/null
|
||||
cp -r "$USER_THEMES_PATH/$THEME_NAME/"* "$NEXT_THEME_PATH/" 2>/dev/null
|
||||
|
||||
# Generate colors.toml from alacritty.toml if theme is missing colors.toml
|
||||
if [[ ! -f $NEXT_THEME_PATH/colors.toml && -f $NEXT_THEME_PATH/alacritty.toml ]]; then
|
||||
omarchy-theme-colors-from-alacritty "$NEXT_THEME_PATH"
|
||||
fi
|
||||
|
||||
# Generate dynamic configs
|
||||
omarchy-theme-set-templates
|
||||
|
||||
# Swap next theme in as current
|
||||
rm -rf "$CURRENT_THEME_PATH"
|
||||
mv "$NEXT_THEME_PATH" "$CURRENT_THEME_PATH"
|
||||
|
||||
# Store theme name for reference
|
||||
echo "$THEME_NAME" >"$HOME/.local/state/omarchy/current/theme.name"
|
||||
|
||||
# Change background with theme
|
||||
if [[ $OMARCHY_THEME_SKIP_BACKGROUND != "1" ]]; then
|
||||
omarchy-theme-bg-next
|
||||
fi
|
||||
|
||||
# # Restart components to apply new theme
|
||||
# if pgrep -x waybar >/dev/null; then
|
||||
# omarchy-restart-waybar
|
||||
# fi
|
||||
# omarchy-restart-swayosd
|
||||
# omarchy-restart-terminal
|
||||
omarchy-restart-hyprctl
|
||||
omarchy-restart-btop
|
||||
# omarchy-restart-opencode
|
||||
omarchy-restart-mako
|
||||
omarchy-restart-tmux
|
||||
# omarchy-restart-helix
|
||||
|
||||
# Change app-specific themes
|
||||
omarchy-theme-set-foot
|
||||
omarchy-theme-set-gnome
|
||||
omarchy-theme-set-browser
|
||||
#omarchy-theme-set-vscode
|
||||
omarchy-theme-set-obsidian
|
||||
#omarchy-theme-set-keyboard
|
||||
|
||||
# Call hook on theme set
|
||||
omarchy-hook theme-set "$THEME_NAME" >/dev/null
|
||||
@@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Apply the current theme color to Chromium, Chrome, Edge, and Brave
|
||||
# omarchy:hidden=true
|
||||
|
||||
CHROMIUM_THEME=~/.local/state/omarchy/current/theme/chromium.theme
|
||||
|
||||
if [[ -f $CHROMIUM_THEME ]]; then
|
||||
THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
|
||||
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
|
||||
else
|
||||
# Use a default, neutral grey if theme doesn't have a color
|
||||
THEME_HEX_COLOR="#1c2027"
|
||||
fi
|
||||
|
||||
set_browser_policy() {
|
||||
local policy_dir="$1"
|
||||
|
||||
[[ -d $policy_dir ]] || return
|
||||
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "$policy_dir/color.json" >/dev/null
|
||||
}
|
||||
|
||||
refresh_running_browser() {
|
||||
local process="$1"
|
||||
local command="$2"
|
||||
local pgrep_args="${3:--x}"
|
||||
|
||||
if omarchy-cmd-present "$command" && pgrep $pgrep_args "$process" >/dev/null; then
|
||||
"$command" --refresh-platform-policy --no-startup-window &>/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
set_browser_policy /etc/chromium/policies/managed
|
||||
refresh_running_browser chromium chromium
|
||||
|
||||
set_browser_policy /etc/opt/chrome/policies/managed
|
||||
refresh_running_browser chrome google-chrome-stable || refresh_running_browser chrome google-chrome
|
||||
|
||||
set_browser_policy /etc/opt/edge/policies/managed
|
||||
refresh_running_browser msedge microsoft-edge-stable
|
||||
|
||||
set_browser_policy /etc/brave/policies/managed
|
||||
refresh_running_browser brave brave
|
||||
refresh_running_browser brave-origin-beta brave-origin-beta -f
|
||||
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Apply current Omarchy theme colors to running Foot terminals
|
||||
# omarchy:hidden=true
|
||||
|
||||
foot_theme=~/.local/state/omarchy/current/theme/foot.ini
|
||||
|
||||
if [[ ! -f $foot_theme ]] || ! pgrep -x foot >/dev/null; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
foot_osc=$(awk -F= '
|
||||
function color(value) { return "#" value }
|
||||
/^foreground=/ { printf "\033]10;%s\007", color($2) }
|
||||
/^background=/ { printf "\033]11;%s\007", color($2) }
|
||||
/^cursor=/ { split($2, parts, " "); printf "\033]12;%s\007", color(parts[2]) }
|
||||
/^selection-background=/ { printf "\033]17;%s\007", color($2) }
|
||||
/^selection-foreground=/ { printf "\033]19;%s\007", color($2) }
|
||||
/^regular[0-7]=/ { split($1, parts, "regular"); printf "\033]4;%d;%s\007", parts[2], color($2) }
|
||||
/^bright[0-7]=/ { split($1, parts, "bright"); printf "\033]4;%d;%s\007", parts[2] + 8, color($2) }
|
||||
' "$foot_theme")
|
||||
|
||||
for foot_pid in $(pgrep -x foot); do
|
||||
for child_pid in $(pgrep -P "$foot_pid"); do
|
||||
tty=$(readlink "/proc/$child_pid/fd/1" 2>/dev/null)
|
||||
[[ $tty == /dev/pts/* ]] && printf '%b' "$foot_osc" >"$tty"
|
||||
done
|
||||
done
|
||||
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Apply the current theme to GNOME color mode and icon settings
|
||||
# omarchy:hidden=true
|
||||
|
||||
if [[ -f ~/.local/state/omarchy/current/theme/light.mode ]]; then
|
||||
gsettings set org.gnome.desktop.interface color-scheme "prefer-light"
|
||||
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita"
|
||||
else
|
||||
gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
|
||||
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
|
||||
fi
|
||||
|
||||
# Change gnome icon theme color
|
||||
GNOME_ICONS_THEME=~/.local/state/omarchy/current/theme/icons.theme
|
||||
if [[ -f $GNOME_ICONS_THEME ]]; then
|
||||
gsettings set org.gnome.desktop.interface icon-theme "$(<$GNOME_ICONS_THEME)"
|
||||
else
|
||||
gsettings set org.gnome.desktop.interface icon-theme "Yaru-blue"
|
||||
fi
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Apply the current theme keyboard color to supported keyboards
|
||||
# omarchy:hidden=true
|
||||
|
||||
omarchy-theme-set-keyboard-asus-rog
|
||||
omarchy-theme-set-keyboard-f16
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Apply the current theme keyboard color to ASUS ROG keyboards
|
||||
# omarchy:hidden=true
|
||||
|
||||
ASUSCTL_THEME=~/.local/state/omarchy/current/theme/keyboard.rgb
|
||||
|
||||
if omarchy-cmd-present asusctl; then
|
||||
asusctl aura effect static -c $(sed 's/^#//' $ASUSCTL_THEME)
|
||||
fi
|
||||
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Apply the current theme keyboard color to Framework Laptop 16 keyboards
|
||||
# omarchy:hidden=true
|
||||
|
||||
FRAMEWORK16_THEME=~/.local/state/omarchy/current/theme/keyboard.rgb
|
||||
|
||||
if omarchy-cmd-present qmk_hid && [[ -f $FRAMEWORK16_THEME ]]; then
|
||||
hex=$(cat "$FRAMEWORK16_THEME")
|
||||
hex="${hex#\#}"
|
||||
|
||||
# Convert hex to QMK HSV (0-255 scale) using Python's colorsys
|
||||
read -r h s <<< $(python3 -c "
|
||||
import colorsys
|
||||
r, g, b = int('$hex'[:2],16)/255, int('$hex'[2:4],16)/255, int('$hex'[4:6],16)/255
|
||||
h, s, v = colorsys.rgb_to_hsv(r, g, b)
|
||||
print(int(h * 255), int(s * 255))
|
||||
")
|
||||
|
||||
qmk_hid via --rgb-effect 1 2>/dev/null
|
||||
qmk_hid via --rgb-hue "$h" 2>/dev/null
|
||||
qmk_hid via --rgb-saturation "$s" 2>/dev/null
|
||||
qmk_hid via --rgb-brightness 100 2>/dev/null
|
||||
qmk_hid via --save 2>/dev/null
|
||||
fi
|
||||
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Sync Omarchy theme to all Obsidian vaults
|
||||
# omarchy:hidden=true
|
||||
|
||||
CURRENT_THEME_DIR="$HOME/.local/state/omarchy/current/theme"
|
||||
|
||||
[[ -f $CURRENT_THEME_DIR/obsidian.css ]] || exit 0
|
||||
|
||||
jq -r '.vaults | values[].path' ~/.config/obsidian/obsidian.json 2>/dev/null | while read -r vault_path; do
|
||||
[[ -d $vault_path/.obsidian ]] || continue
|
||||
|
||||
theme_dir="$vault_path/.obsidian/themes/Omarchy"
|
||||
mkdir -p "$theme_dir"
|
||||
|
||||
[[ -f $theme_dir/manifest.json ]] || cat >"$theme_dir/manifest.json" <<'EOF'
|
||||
{
|
||||
"name": "Omarchy",
|
||||
"version": "1.0.0",
|
||||
"minAppVersion": "0.16.0",
|
||||
"description": "Automatically syncs with your current Omarchy system theme colors and fonts",
|
||||
"author": "Omarchy",
|
||||
"authorUrl": "https://omarchy.org"
|
||||
}
|
||||
EOF
|
||||
|
||||
cp "$CURRENT_THEME_DIR/obsidian.css" "$theme_dir/theme.css"
|
||||
done
|
||||
@@ -0,0 +1,404 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Generate themed config files from Omarchy templates
|
||||
# omarchy:hidden=true
|
||||
|
||||
TEMPLATES_DIR="$OMARCHY_PATH/default/themed"
|
||||
USER_TEMPLATES_DIR="$HOME/.config/omarchy/themed"
|
||||
NEXT_THEME_DIR="$HOME/.local/state/omarchy/current/next-theme"
|
||||
COLORS_FILE="$NEXT_THEME_DIR/colors.toml"
|
||||
|
||||
declare -A THEME_COLORS
|
||||
|
||||
# Convert hex color to decimal RGB (e.g., "#1e1e2e" -> "30,30,46")
|
||||
hex_to_rgb() {
|
||||
local hex="${1#\#}"
|
||||
printf "%d,%d,%d" "0x${hex:0:2}" "0x${hex:2:2}" "0x${hex:4:2}"
|
||||
}
|
||||
|
||||
# Mix two hex colors. Amount may be a fraction (0.30) or percentage (30%).
|
||||
mix_color() {
|
||||
local start="${1#\#}"
|
||||
local end="${2#\#}"
|
||||
local amount="$3"
|
||||
|
||||
awk -v start="$start" -v end="$end" -v amount="$amount" '
|
||||
function hex_value(char) {
|
||||
return index("0123456789abcdef", tolower(char)) - 1
|
||||
}
|
||||
|
||||
function hex_pair_to_int(hex, idx) {
|
||||
return hex_value(substr(hex, idx, 1)) * 16 + hex_value(substr(hex, idx + 1, 1))
|
||||
}
|
||||
|
||||
BEGIN {
|
||||
if (amount ~ /%$/) {
|
||||
sub(/%$/, "", amount)
|
||||
amount = amount / 100
|
||||
} else {
|
||||
amount += 0
|
||||
if (amount > 1) amount = amount / 100
|
||||
}
|
||||
|
||||
if (amount < 0) amount = 0
|
||||
if (amount > 1) amount = 1
|
||||
|
||||
start_r = hex_pair_to_int(start, 1)
|
||||
start_g = hex_pair_to_int(start, 3)
|
||||
start_b = hex_pair_to_int(start, 5)
|
||||
end_r = hex_pair_to_int(end, 1)
|
||||
end_g = hex_pair_to_int(end, 3)
|
||||
end_b = hex_pair_to_int(end, 5)
|
||||
|
||||
red = int(start_r * (1 - amount) + end_r * amount + 0.5)
|
||||
green = int(start_g * (1 - amount) + end_g * amount + 0.5)
|
||||
blue = int(start_b * (1 - amount) + end_b * amount + 0.5)
|
||||
|
||||
printf "#%02x%02x%02x\n", red, green, blue
|
||||
}
|
||||
'
|
||||
}
|
||||
|
||||
trim() {
|
||||
local value="$1"
|
||||
|
||||
value="${value#"${value%%[![:space:]]*}"}"
|
||||
value="${value%"${value##*[![:space:]]}"}"
|
||||
printf "%s" "$value"
|
||||
}
|
||||
|
||||
resolve_theme_ref() {
|
||||
local ref="$1"
|
||||
local fallback="${2:-}"
|
||||
|
||||
if [[ -n ${THEME_COLORS[$ref]+_} ]]; then
|
||||
printf "%s" "${THEME_COLORS[$ref]}"
|
||||
elif [[ -n $fallback && -n ${THEME_COLORS[$fallback]+_} ]]; then
|
||||
printf "%s" "${THEME_COLORS[$fallback]}"
|
||||
elif [[ -n $fallback ]]; then
|
||||
printf "%s" "$fallback"
|
||||
else
|
||||
printf "%s" "$ref"
|
||||
fi
|
||||
}
|
||||
|
||||
resolve_gradient_color() {
|
||||
local color
|
||||
|
||||
color=$(trim "$1")
|
||||
if [[ -n ${THEME_COLORS[$color]+_} ]]; then
|
||||
color="${THEME_COLORS[$color]}"
|
||||
fi
|
||||
|
||||
printf "%s" "$color"
|
||||
}
|
||||
|
||||
parse_gradient() {
|
||||
local spec="$1"
|
||||
local part color
|
||||
local -a parts
|
||||
|
||||
GRADIENT_COLORS=()
|
||||
GRADIENT_ANGLE=""
|
||||
|
||||
read -ra parts <<<"$spec"
|
||||
for part in "${parts[@]}"; do
|
||||
[[ -n $part ]] || continue
|
||||
|
||||
if [[ $part =~ ^-?[0-9]+([.][0-9]+)?deg$ ]]; then
|
||||
GRADIENT_ANGLE="${part%deg}"
|
||||
else
|
||||
color=$(resolve_gradient_color "$part")
|
||||
GRADIENT_COLORS+=("$color")
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
color_to_shell_hex() {
|
||||
local color r g b
|
||||
|
||||
color=$(resolve_gradient_color "$1")
|
||||
|
||||
if [[ $color =~ ^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$ ]]; then
|
||||
printf "#%s" "${color:1:6}"
|
||||
elif [[ $color =~ ^[Rr][Gg][Bb][Aa]?\(([0-9A-Fa-f]{6})([0-9A-Fa-f]{2})?\)$ ]]; then
|
||||
printf "#%s" "${BASH_REMATCH[1]}"
|
||||
elif [[ $color =~ ^[Rr][Gg][Bb][Aa]?\(([0-9]+),([0-9]+),([0-9]+)(,[0-9.]+)?\)$ ]]; then
|
||||
r=${BASH_REMATCH[1]}
|
||||
g=${BASH_REMATCH[2]}
|
||||
b=${BASH_REMATCH[3]}
|
||||
(( r > 255 )) && r=255
|
||||
(( g > 255 )) && g=255
|
||||
(( b > 255 )) && b=255
|
||||
printf "#%02x%02x%02x" "$r" "$g" "$b"
|
||||
elif [[ $color =~ ^0x[0-9A-Fa-f]{8}$ ]]; then
|
||||
printf "#%s" "${color:4:6}"
|
||||
else
|
||||
printf "%s" "$color"
|
||||
fi
|
||||
}
|
||||
|
||||
hypr_gradient_value() {
|
||||
local spec color index
|
||||
|
||||
spec=$(resolve_theme_ref "$1" "${2:-}")
|
||||
parse_gradient "$spec"
|
||||
|
||||
if (( ${#GRADIENT_COLORS[@]} == 0 )); then
|
||||
printf '"%s"' "$spec"
|
||||
elif (( ${#GRADIENT_COLORS[@]} == 1 )); then
|
||||
printf '"%s"' "${GRADIENT_COLORS[0]}"
|
||||
else
|
||||
printf '{ colors = {'
|
||||
for index in "${!GRADIENT_COLORS[@]}"; do
|
||||
(( index > 0 )) && printf ','
|
||||
printf ' "%s"' "${GRADIENT_COLORS[$index]}"
|
||||
done
|
||||
printf ' }'
|
||||
[[ -n $GRADIENT_ANGLE ]] && printf ', angle = %s' "$GRADIENT_ANGLE"
|
||||
printf ' }'
|
||||
fi
|
||||
}
|
||||
|
||||
gradient_start_value() {
|
||||
local spec
|
||||
|
||||
spec=$(resolve_theme_ref "$1" "${2:-}")
|
||||
parse_gradient "$spec"
|
||||
|
||||
if (( ${#GRADIENT_COLORS[@]} == 0 )); then
|
||||
color_to_shell_hex "$spec"
|
||||
else
|
||||
color_to_shell_hex "${GRADIENT_COLORS[0]}"
|
||||
fi
|
||||
}
|
||||
|
||||
shell_gradient_value() {
|
||||
local spec index
|
||||
|
||||
spec=$(resolve_theme_ref "$1" "${2:-}")
|
||||
parse_gradient "$spec"
|
||||
|
||||
if (( ${#GRADIENT_COLORS[@]} == 0 )); then
|
||||
printf "%s" "$spec"
|
||||
return
|
||||
fi
|
||||
|
||||
for index in "${!GRADIENT_COLORS[@]}"; do
|
||||
(( index > 0 )) && printf " "
|
||||
printf "%s" "${GRADIENT_COLORS[$index]}"
|
||||
done
|
||||
|
||||
[[ -n $GRADIENT_ANGLE ]] && printf " %sdeg" "$GRADIENT_ANGLE"
|
||||
}
|
||||
|
||||
add_template_value() {
|
||||
local key="$1"
|
||||
local value="$2"
|
||||
local rgb
|
||||
|
||||
printf 's|{{ %s }}|%s|g\n' "$key" "$value" >>"$sed_script"
|
||||
printf 's|{{ %s_strip }}|%s|g\n' "$key" "${value#\#}" >>"$sed_script"
|
||||
|
||||
if [[ $value =~ ^#[0-9A-Fa-f]{6}$ ]]; then
|
||||
rgb=$(hex_to_rgb "$value")
|
||||
printf 's|{{ %s_rgb }}|%s|g\n' "$key" "$rgb" >>"$sed_script"
|
||||
fi
|
||||
}
|
||||
|
||||
add_mix_value() {
|
||||
local token="$1"
|
||||
local content fn start_key end_key amount start end value
|
||||
|
||||
content="${token#\{\{}"
|
||||
content="${content%\}\}}"
|
||||
read -r fn start_key end_key amount <<<"$content"
|
||||
|
||||
start="${THEME_COLORS[$start_key]:-}"
|
||||
end="${THEME_COLORS[$end_key]:-}"
|
||||
|
||||
[[ $start =~ ^#[0-9A-Fa-f]{6}$ && $end =~ ^#[0-9A-Fa-f]{6}$ ]] || return
|
||||
|
||||
value=$(mix_color "$start" "$end" "$amount")
|
||||
|
||||
case "$fn" in
|
||||
mix)
|
||||
;;
|
||||
mix_strip)
|
||||
value="${value#\#}"
|
||||
;;
|
||||
mix_rgb)
|
||||
value=$(hex_to_rgb "$value")
|
||||
;;
|
||||
*)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
printf 's|%s|%s|g\n' "$token" "$value" >>"$sed_script"
|
||||
}
|
||||
|
||||
add_mix_values() {
|
||||
local tpl token
|
||||
local -A seen=()
|
||||
|
||||
for tpl in "${template_files[@]}"; do
|
||||
while IFS= read -r token; do
|
||||
[[ -n ${seen[$token]:-} ]] && continue
|
||||
seen[$token]=1
|
||||
add_mix_value "$token"
|
||||
done < <(grep -hEo '\{\{[[:space:]]*mix(_strip|_rgb)?[[:space:]]+[A-Za-z0-9_]+[[:space:]]+[A-Za-z0-9_]+[[:space:]]+[0-9]+([.][0-9]+)?%?[[:space:]]*\}\}' "$tpl" 2>/dev/null || true)
|
||||
done
|
||||
}
|
||||
|
||||
add_gradient_function_value() {
|
||||
local token="$1"
|
||||
local content fn key fallback value
|
||||
|
||||
content="${token#\{\{}"
|
||||
content="${content%\}\}}"
|
||||
read -r fn key fallback <<<"$content"
|
||||
|
||||
case "$fn" in
|
||||
hypr_gradient)
|
||||
value=$(hypr_gradient_value "$key" "$fallback")
|
||||
;;
|
||||
gradient_start)
|
||||
value=$(gradient_start_value "$key" "$fallback")
|
||||
;;
|
||||
shell_gradient)
|
||||
value=$(shell_gradient_value "$key" "$fallback")
|
||||
;;
|
||||
*)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
printf 's|%s|%s|g\n' "$token" "$value" >>"$sed_script"
|
||||
}
|
||||
|
||||
add_gradient_function_values() {
|
||||
local tpl token
|
||||
local -A seen=()
|
||||
|
||||
for tpl in "${template_files[@]}"; do
|
||||
while IFS= read -r token; do
|
||||
[[ -n ${seen[$token]:-} ]] && continue
|
||||
seen[$token]=1
|
||||
add_gradient_function_value "$token"
|
||||
done < <(grep -hEo '\{\{[[:space:]]*(hypr_gradient|gradient_start|shell_gradient)[[:space:]]+[^}]+[[:space:]]*\}\}' "$tpl" 2>/dev/null || true)
|
||||
done
|
||||
}
|
||||
|
||||
strip_shell_section_header() {
|
||||
local section="$1"
|
||||
local file="$2"
|
||||
|
||||
awk -v section="$section" '
|
||||
BEGIN { skipping_header = 0 }
|
||||
/^[[:space:]]*\[[^]]+\][[:space:]]*($|#)/ {
|
||||
if ($0 ~ "^[[:space:]]*\\[" section "\\][[:space:]]*($|#)") {
|
||||
skipping_header = 1
|
||||
next
|
||||
}
|
||||
}
|
||||
{ print }
|
||||
' "$file"
|
||||
}
|
||||
|
||||
apply_shell_section_override() {
|
||||
local override="$1"
|
||||
local section tmp body
|
||||
|
||||
[[ -f $NEXT_THEME_DIR/shell.toml ]] || return
|
||||
[[ -f $override ]] || return
|
||||
|
||||
section=$(basename "$override")
|
||||
section="${section#shell.}"
|
||||
section="${section%.toml}"
|
||||
[[ $section =~ ^[A-Za-z0-9_-]+$ ]] || return
|
||||
|
||||
tmp=$(mktemp)
|
||||
body=$(mktemp)
|
||||
|
||||
strip_shell_section_header "$section" "$override" >"$body"
|
||||
|
||||
awk -v section="$section" -v body="$body" '
|
||||
function emit_override() {
|
||||
if (emitted) return
|
||||
print "[" section "]"
|
||||
while ((getline line < body) > 0) print line
|
||||
close(body)
|
||||
emitted = 1
|
||||
}
|
||||
|
||||
/^[[:space:]]*\[[^]]+\][[:space:]]*($|#)/ {
|
||||
if (in_section) {
|
||||
emit_override()
|
||||
in_section = 0
|
||||
}
|
||||
if ($0 ~ "^[[:space:]]*\\[" section "\\][[:space:]]*($|#)") {
|
||||
in_section = 1
|
||||
next
|
||||
}
|
||||
}
|
||||
|
||||
!in_section { print }
|
||||
|
||||
END {
|
||||
if (in_section || !emitted) {
|
||||
if (NR > 0) print ""
|
||||
emit_override()
|
||||
}
|
||||
}
|
||||
' "$NEXT_THEME_DIR/shell.toml" >"$tmp"
|
||||
|
||||
mv "$tmp" "$NEXT_THEME_DIR/shell.toml"
|
||||
rm "$body"
|
||||
}
|
||||
|
||||
apply_shell_section_overrides() {
|
||||
local override
|
||||
|
||||
shopt -s nullglob
|
||||
for override in "$NEXT_THEME_DIR"/shell.*.toml; do
|
||||
[[ $(basename "$override") != "shell.toml" ]] || continue
|
||||
apply_shell_section_override "$override"
|
||||
done
|
||||
}
|
||||
|
||||
# Only generate dynamic templates for themes with a colors.toml definition
|
||||
if [[ -f $COLORS_FILE ]]; then
|
||||
sed_script=$(mktemp)
|
||||
|
||||
shopt -s nullglob
|
||||
template_files=("$USER_TEMPLATES_DIR"/*.tpl "$TEMPLATES_DIR"/*.tpl)
|
||||
|
||||
# Parsing and alias/fallback resolution (legacy colorN names, derived
|
||||
# shades, mode/theme_type) is shared with every other colors.toml consumer.
|
||||
while IFS=$'\t' read -r key value; do
|
||||
THEME_COLORS[$key]="$value"
|
||||
done < <(omarchy-theme-color --file "$COLORS_FILE" --all)
|
||||
|
||||
for key in "${!THEME_COLORS[@]}"; do
|
||||
add_template_value "$key" "${THEME_COLORS[$key]}"
|
||||
done
|
||||
|
||||
add_mix_values
|
||||
add_gradient_function_values
|
||||
|
||||
# Process user templates first, then built-in templates (user overrides built-in)
|
||||
for tpl in "${template_files[@]}"; do
|
||||
filename=$(basename "$tpl" .tpl)
|
||||
output_path="$NEXT_THEME_DIR/$filename"
|
||||
|
||||
# Don't overwrite configs already exists in the output directory (copied from theme specific folder)
|
||||
if [[ ! -f $output_path ]]; then
|
||||
sed -f "$sed_script" "$tpl" >"$output_path"
|
||||
fi
|
||||
done
|
||||
|
||||
rm "$sed_script"
|
||||
fi
|
||||
|
||||
apply_shell_section_overrides
|
||||
@@ -0,0 +1,40 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Sync Omarchy theme to VS Code, VSCodium, and Cursor
|
||||
# omarchy:hidden=true
|
||||
|
||||
VS_CODE_THEME="$HOME/.local/state/omarchy/current/theme/vscode.json"
|
||||
|
||||
set_theme() {
|
||||
local editor_cmd="$1"
|
||||
local settings_path="$2"
|
||||
|
||||
omarchy-cmd-present "$editor_cmd" || return 0
|
||||
|
||||
if [[ -f $VS_CODE_THEME ]]; then
|
||||
theme_name=$(jq -r '.name' "$VS_CODE_THEME")
|
||||
extension=$(jq -r '.extension' "$VS_CODE_THEME")
|
||||
|
||||
if [[ -n $extension ]] && ! "$editor_cmd" --list-extensions 2>/dev/null | grep -Fxq "$extension"; then
|
||||
"$editor_cmd" --install-extension "$extension" >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
mkdir -p "$(dirname "$settings_path")"
|
||||
[[ -f $settings_path ]] || printf '{\n}\n' >"$settings_path"
|
||||
|
||||
if ! grep -q '"workbench.colorTheme"' "$settings_path"; then
|
||||
sed -i --follow-symlinks -E '0,/\{/{s/\{/{\ "workbench.colorTheme": "",/}' "$settings_path"
|
||||
fi
|
||||
|
||||
sed -i --follow-symlinks -E \
|
||||
"s/(\"workbench.colorTheme\"[[:space:]]*:[[:space:]]*\")[^\"]*(\")/\1$theme_name\2/" \
|
||||
"$settings_path"
|
||||
elif [[ -f $settings_path ]]; then
|
||||
sed -i --follow-symlinks -E 's/\"workbench\.colorTheme\"[[:space:]]*:[^,}]*,?//' "$settings_path"
|
||||
fi
|
||||
}
|
||||
|
||||
! omarchy-toggle-enabled skip-vscode-theme-changes && set_theme "code" "$HOME/.config/Code/User/settings.json"
|
||||
! omarchy-toggle-enabled skip-vscode-insiders-theme-changes && set_theme "code-insiders" "$HOME/.config/Code - Insiders/User/settings.json"
|
||||
! omarchy-toggle-enabled skip-codium-theme-changes && set_theme "codium" "$HOME/.config/VSCodium/User/settings.json"
|
||||
! omarchy-toggle-enabled skip-cursor-theme-changes && set_theme "cursor" "$HOME/.config/Cursor/User/settings.json"
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Update user-installed git themes
|
||||
|
||||
for dir in ~/.config/omarchy/themes/*/; do
|
||||
if [[ -d $dir ]] && [[ ! -L ${dir%/} ]] && [[ -d $dir/.git ]]; then
|
||||
echo "Updating: $(basename "$dir")"
|
||||
git -C "$dir" pull
|
||||
fi
|
||||
done
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
THEMES_STATE_DIR = "{{ vars.THEMES_STATE_DIR }}"
|
||||
OMARCHY_PATH = "{{ vars.OMARCHY_PATH }}"
|
||||
|
After Width: | Height: | Size: 652 KiB |
|
After Width: | Height: | Size: 652 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 714 B |
@@ -0,0 +1,84 @@
|
||||
# https://github.com/catppuccin/btop/blob/main/themes/catppuccin_latte.theme
|
||||
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||
theme[main_bg]="#eff1f5"
|
||||
|
||||
# Main text color
|
||||
theme[main_fg]="#4c4f69"
|
||||
|
||||
# Title color for boxes
|
||||
theme[title]="#4c4f69"
|
||||
|
||||
# Highlight color for keyboard shortcuts
|
||||
theme[hi_fg]="#1e66f5"
|
||||
|
||||
# Background color of selected item in processes box
|
||||
theme[selected_bg]="#bcc0cc"
|
||||
|
||||
# Foreground color of selected item in processes box
|
||||
theme[selected_fg]="#1e66f5"
|
||||
|
||||
# Color of inactive/disabled text
|
||||
theme[inactive_fg]="#8c8fa1"
|
||||
|
||||
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
|
||||
theme[graph_text]="#dc8a78"
|
||||
|
||||
# Background color of the percentage meters
|
||||
theme[meter_bg]="#bcc0cc"
|
||||
|
||||
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
||||
theme[proc_misc]="#dc8a78"
|
||||
|
||||
# CPU, Memory, Network, Proc box outline colors
|
||||
theme[cpu_box]="#8839ef" #Mauve
|
||||
theme[mem_box]="#40a02b" #Green
|
||||
theme[net_box]="#e64553" #Maroon
|
||||
theme[proc_box]="#1e66f5" #Blue
|
||||
|
||||
# Box divider line and small boxes line color
|
||||
theme[div_line]="#9ca0b0"
|
||||
|
||||
# Temperature graph color (Green -> Yellow -> Red)
|
||||
theme[temp_start]="#40a02b"
|
||||
theme[temp_mid]="#df8e1d"
|
||||
theme[temp_end]="#d20f39"
|
||||
|
||||
# CPU graph colors (Teal -> Lavender)
|
||||
theme[cpu_start]="#179299"
|
||||
theme[cpu_mid]="#209fb5"
|
||||
theme[cpu_end]="#7287fd"
|
||||
|
||||
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
|
||||
theme[free_start]="#8839ef"
|
||||
theme[free_mid]="#7287fd"
|
||||
theme[free_end]="#1e66f5"
|
||||
|
||||
# Mem/Disk cached meter (Sapphire -> Lavender)
|
||||
theme[cached_start]="#209fb5"
|
||||
theme[cached_mid]="#1e66f5"
|
||||
theme[cached_end]="#7287fd"
|
||||
|
||||
# Mem/Disk available meter (Peach -> Red)
|
||||
theme[available_start]="#fe640b"
|
||||
theme[available_mid]="#e64553"
|
||||
theme[available_end]="#d20f39"
|
||||
|
||||
# Mem/Disk used meter (Green -> Sky)
|
||||
theme[used_start]="#40a02b"
|
||||
theme[used_mid]="#179299"
|
||||
theme[used_end]="#04a5e5"
|
||||
|
||||
# Download graph colors (Peach -> Red)
|
||||
theme[download_start]="#fe640b"
|
||||
theme[download_mid]="#e64553"
|
||||
theme[download_end]="#d20f39"
|
||||
|
||||
# Upload graph colors (Green -> Sky)
|
||||
theme[upload_start]="#40a02b"
|
||||
theme[upload_mid]="#179299"
|
||||
theme[upload_end]="#04a5e5"
|
||||
|
||||
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
|
||||
theme[process_start]="#209fb5"
|
||||
theme[process_mid]="#7287fd"
|
||||
theme[process_end]="#8839ef"
|
||||
@@ -0,0 +1,31 @@
|
||||
mode = "light"
|
||||
|
||||
accent = "#1e66f5"
|
||||
selection = "#ccd0da"
|
||||
muted = "#acb0be"
|
||||
|
||||
background = "#eff1f5"
|
||||
dark_background = "#e3e4e8"
|
||||
darker_background = "#d7d8dc"
|
||||
lighter_background = "#dce0e8"
|
||||
|
||||
foreground = "#4c4f69"
|
||||
dark_foreground = "#9ca0b0"
|
||||
light_foreground = "#5c5f77"
|
||||
bright_foreground = "#4c4f69"
|
||||
|
||||
red = "#d20f39"
|
||||
yellow = "#df8e1d"
|
||||
orange = "#d84e2b"
|
||||
green = "#40a02b"
|
||||
cyan = "#179299"
|
||||
blue = "#1e66f5"
|
||||
magenta = "#ea76cb"
|
||||
brown = "#6c2715"
|
||||
|
||||
bright_red = "#d20f39"
|
||||
bright_yellow = "#df8e1d"
|
||||
bright_green = "#40a02b"
|
||||
bright_cyan = "#179299"
|
||||
bright_blue = "#1e66f5"
|
||||
bright_magenta = "#ea76cb"
|
||||
@@ -0,0 +1 @@
|
||||
Yaru-blue
|
||||
@@ -0,0 +1 @@
|
||||
# This will set "prefer-light" and use "Adwaita" as the theme
|
||||
@@ -0,0 +1,2 @@
|
||||
vim.opt.background = 'light'
|
||||
vim.cmd("colorscheme catppuccin")
|
||||
@@ -0,0 +1,16 @@
|
||||
return {
|
||||
{
|
||||
"catppuccin/nvim",
|
||||
name = "catppuccin",
|
||||
priority = 1000,
|
||||
opts = {
|
||||
flavour = "latte",
|
||||
},
|
||||
},
|
||||
{
|
||||
"LazyVim/LazyVim",
|
||||
opts = {
|
||||
colorscheme = "catppuccin-latte",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 308 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "Catppuccin Latte",
|
||||
"extension": "catppuccin.catppuccin-vsc"
|
||||
}
|
||||
|
After Width: | Height: | Size: 353 KiB |
|
After Width: | Height: | Size: 353 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 624 KiB |
|
After Width: | Height: | Size: 254 KiB |
|
After Width: | Height: | Size: 212 KiB |
|
After Width: | Height: | Size: 254 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 716 B |
@@ -0,0 +1,83 @@
|
||||
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||
theme[main_bg]="#1E1E2E"
|
||||
|
||||
# Main text color
|
||||
theme[main_fg]="#c6d0f5"
|
||||
|
||||
# Title color for boxes
|
||||
theme[title]="#c6d0f5"
|
||||
|
||||
# Highlight color for keyboard shortcuts
|
||||
theme[hi_fg]="#8caaee"
|
||||
|
||||
# Background color of selected item in processes box
|
||||
theme[selected_bg]="#51576d"
|
||||
|
||||
# Foreground color of selected item in processes box
|
||||
theme[selected_fg]="#8caaee"
|
||||
|
||||
# Color of inactive/disabled text
|
||||
theme[inactive_fg]="#838ba7"
|
||||
|
||||
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
|
||||
theme[graph_text]="#f2d5cf"
|
||||
|
||||
# Background color of the percentage meters
|
||||
theme[meter_bg]="#51576d"
|
||||
|
||||
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
||||
theme[proc_misc]="#f2d5cf"
|
||||
|
||||
# CPU, Memory, Network, Proc box outline colors
|
||||
theme[cpu_box]="#ca9ee6" #Mauve
|
||||
theme[mem_box]="#a6d189" #Green
|
||||
theme[net_box]="#ea999c" #Maroon
|
||||
theme[proc_box]="#8caaee" #Blue
|
||||
|
||||
# Box divider line and small boxes line color
|
||||
theme[div_line]="#737994"
|
||||
|
||||
# Temperature graph color (Green -> Yellow -> Red)
|
||||
theme[temp_start]="#a6d189"
|
||||
theme[temp_mid]="#e5c890"
|
||||
theme[temp_end]="#e78284"
|
||||
|
||||
# CPU graph colors (Teal -> Lavender)
|
||||
theme[cpu_start]="#81c8be"
|
||||
theme[cpu_mid]="#85c1dc"
|
||||
theme[cpu_end]="#babbf1"
|
||||
|
||||
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
|
||||
theme[free_start]="#ca9ee6"
|
||||
theme[free_mid]="#babbf1"
|
||||
theme[free_end]="#8caaee"
|
||||
|
||||
# Mem/Disk cached meter (Sapphire -> Lavender)
|
||||
theme[cached_start]="#85c1dc"
|
||||
theme[cached_mid]="#8caaee"
|
||||
theme[cached_end]="#babbf1"
|
||||
|
||||
# Mem/Disk available meter (Peach -> Red)
|
||||
theme[available_start]="#ef9f76"
|
||||
theme[available_mid]="#ea999c"
|
||||
theme[available_end]="#e78284"
|
||||
|
||||
# Mem/Disk used meter (Green -> Sky)
|
||||
theme[used_start]="#a6d189"
|
||||
theme[used_mid]="#81c8be"
|
||||
theme[used_end]="#99d1db"
|
||||
|
||||
# Download graph colors (Peach -> Red)
|
||||
theme[download_start]="#ef9f76"
|
||||
theme[download_mid]="#ea999c"
|
||||
theme[download_end]="#e78284"
|
||||
|
||||
# Upload graph colors (Green -> Sky)
|
||||
theme[upload_start]="#a6d189"
|
||||
theme[upload_mid]="#81c8be"
|
||||
theme[upload_end]="#99d1db"
|
||||
|
||||
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
|
||||
theme[process_start]="#85c1dc"
|
||||
theme[process_mid]="#babbf1"
|
||||
theme[process_end]="#ca9ee6"
|
||||
@@ -0,0 +1,31 @@
|
||||
mode = "dark"
|
||||
|
||||
accent = "#89b4fa"
|
||||
selection = "#45475a"
|
||||
muted = "#585b70"
|
||||
|
||||
background = "#1e1e2e"
|
||||
dark_background = "#161622"
|
||||
darker_background = "#101019"
|
||||
lighter_background = "#313244"
|
||||
|
||||
foreground = "#cdd6f4"
|
||||
dark_foreground = "#6c7086"
|
||||
light_foreground = "#bac2de"
|
||||
bright_foreground = "#cdd6f4"
|
||||
|
||||
red = "#f38ba8"
|
||||
yellow = "#f9e2af"
|
||||
orange = "#f6b6ab"
|
||||
green = "#a6e3a1"
|
||||
cyan = "#94e2d5"
|
||||
blue = "#89b4fa"
|
||||
magenta = "#f5c2e7"
|
||||
brown = "#7b5b55"
|
||||
|
||||
bright_red = "#f38ba8"
|
||||
bright_yellow = "#f9e2af"
|
||||
bright_green = "#a6e3a1"
|
||||
bright_cyan = "#94e2d5"
|
||||
bright_blue = "#89b4fa"
|
||||
bright_magenta = "#f5c2e7"
|
||||
@@ -0,0 +1 @@
|
||||
Yaru-purple
|
||||
@@ -0,0 +1,2 @@
|
||||
vim.opt.background = 'dark'
|
||||
vim.cmd("colorscheme catppuccin")
|
||||
@@ -0,0 +1,13 @@
|
||||
return {
|
||||
{
|
||||
"catppuccin/nvim",
|
||||
name = "catppuccin",
|
||||
priority = 1000,
|
||||
},
|
||||
{
|
||||
"LazyVim/LazyVim",
|
||||
opts = {
|
||||
colorscheme = "catppuccin-nvim",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 273 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "Catppuccin Mocha",
|
||||
"extension": "catppuccin.catppuccin-vsc"
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
@define-color foreground #cdd6f4;
|
||||
@define-color background #181824;
|
||||
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 320 KiB |
|
After Width: | Height: | Size: 3.8 MiB |
|
After Width: | Height: | Size: 844 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 716 B |
@@ -0,0 +1,70 @@
|
||||
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||
theme[main_bg]="#060B1E"
|
||||
|
||||
# Main text color
|
||||
theme[main_fg]="#ffcead"
|
||||
|
||||
# Title color for boxes
|
||||
theme[title]="#c89dc1"
|
||||
|
||||
# Highlight color for keyboard shortcuts
|
||||
theme[hi_fg]="#a3bfd1"
|
||||
|
||||
# Background color of selected item in processes box
|
||||
theme[selected_bg]="#6d7db6"
|
||||
|
||||
# Foreground color of selected item in processes box
|
||||
theme[selected_fg]="#ffcead"
|
||||
|
||||
# Color of inactive/disabled text
|
||||
theme[inactive_fg]="#6d7db6"
|
||||
|
||||
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
||||
theme[proc_misc]="#c89dc1"
|
||||
|
||||
# Box outline and divider line color
|
||||
theme[cpu_box]="#92a593"
|
||||
theme[mem_box]="#92a593"
|
||||
theme[net_box]="#92a593"
|
||||
theme[proc_box]="#92a593"
|
||||
theme[div_line]="#6d7db6"
|
||||
|
||||
# Gradient for all meters and graphs
|
||||
theme[temp_start]="#a3bfd1"
|
||||
theme[temp_mid]="#7d82d9"
|
||||
theme[temp_end]="#92a593"
|
||||
|
||||
|
||||
theme[cpu_start]="#a3bfd1"
|
||||
theme[cpu_mid]="#7d82d9"
|
||||
theme[cpu_end]="#92a593"
|
||||
|
||||
|
||||
theme[free_start]="#7d82d9"
|
||||
theme[free_mid]="#E9BB4F"
|
||||
theme[free_end]="#E9BB4F"
|
||||
|
||||
|
||||
theme[cached_start]="#E9BB4F"
|
||||
theme[cached_mid]="#E9BB4F"
|
||||
theme[cached_end]="#E9BB4F"
|
||||
|
||||
|
||||
theme[available_start]="#a3bfd1"
|
||||
theme[available_mid]="#a3bfd1"
|
||||
theme[available_end]="#a3bfd1"
|
||||
|
||||
|
||||
theme[used_start]="#92a593"
|
||||
theme[used_mid]="#92a593"
|
||||
theme[used_end]="#92a593"
|
||||
|
||||
|
||||
theme[download_start]="#E9BB4F"
|
||||
theme[download_mid]="#a3bfd1"
|
||||
theme[download_end]="#7d82d9"
|
||||
|
||||
|
||||
theme[upload_start]="#E9BB4F"
|
||||
theme[upload_mid]="#a3bfd1"
|
||||
theme[upload_end]="#7d82d9"
|
||||
@@ -0,0 +1,31 @@
|
||||
mode = "dark"
|
||||
|
||||
accent = "#7d82d9"
|
||||
selection = "#252e56"
|
||||
muted = "#6d7db6"
|
||||
|
||||
background = "#060B1E"
|
||||
dark_background = "#040816"
|
||||
darker_background = "#030610"
|
||||
lighter_background = "#131a3a"
|
||||
|
||||
foreground = "#ffcead"
|
||||
dark_foreground = "#6d7db6"
|
||||
light_foreground = "#c9b8a6"
|
||||
bright_foreground = "#ffcead"
|
||||
|
||||
red = "#ED5B5A"
|
||||
yellow = "#E9BB4F"
|
||||
orange = "#eb8b54"
|
||||
green = "#92a593"
|
||||
cyan = "#a3bfd1"
|
||||
blue = "#7d82d9"
|
||||
magenta = "#c89dc1"
|
||||
brown = "#75452a"
|
||||
|
||||
bright_red = "#faaaa9"
|
||||
bright_yellow = "#f7dc9c"
|
||||
bright_green = "#c4cfc4"
|
||||
bright_cyan = "#dfeaf0"
|
||||
bright_blue = "#c2c4f0"
|
||||
bright_magenta = "#ead7e7"
|
||||