diff --git a/tests/config/test_themes.py b/tests/config/test_themes.py index e1e99ee9971..39bf6b62879 100644 --- a/tests/config/test_themes.py +++ b/tests/config/test_themes.py @@ -22,11 +22,31 @@ expected_complete_themes = { "zt_dark", "gruvbox_dark", + "gruvbox_light", "zt_light", "zt_blue", } aliases_16_color = [ "default", + "dark0 hard", + "dark2", + "dark4", + "gray 245", + "gray 244", + "light0 hard", + "light2", + "light4", + "bright red", + "bright green", + "bright yellow", + "bright blue", + "neutral yellow", + "neutral blue", + "neutral purple", + "faded red", + "faded green", + "faded yellow", + "faded blue", "black", "dark red", "dark green", diff --git a/zulipterminal/config/themes.py b/zulipterminal/config/themes.py index a82a3f7cdf0..25053454ae0 100644 --- a/zulipterminal/config/themes.py +++ b/zulipterminal/config/themes.py @@ -3,7 +3,7 @@ from pygments.token import STANDARD_TYPES from zulipterminal.config.color import term16 -from zulipterminal.themes import gruvbox_dark, zt_blue, zt_dark, zt_light +from zulipterminal.themes import gruvbox_dark, gruvbox_light, zt_blue, zt_dark, zt_light StyleSpec = Union[ @@ -87,6 +87,7 @@ THEMES: Dict[str, Any] = { "gruvbox_dark": gruvbox_dark, + "gruvbox_light": gruvbox_light, "zt_dark": zt_dark, "zt_light": zt_light, "zt_blue": zt_blue, @@ -95,6 +96,7 @@ THEME_ALIASES = { "default": "zt_dark", "gruvbox_dark": "gruvbox_dark", + "gruvbox_light": "gruvbox_light", "light": "zt_light", "blue": "zt_blue", } diff --git a/zulipterminal/themes/colors_gruvbox.py b/zulipterminal/themes/colors_gruvbox.py index 3d81af9bb9e..fdc13cdb3b9 100644 --- a/zulipterminal/themes/colors_gruvbox.py +++ b/zulipterminal/themes/colors_gruvbox.py @@ -22,19 +22,25 @@ class GruvBoxColor(Enum): # color = 16code 256code 24code DEFAULT = 'default default default' - DARK0_HARD = 'black h234 #1d2021' - GRAY_244 = 'dark_gray h244 #928374' - LIGHT2 = 'white h250 #d5c4a1' - LIGHT4 = 'light_gray h248 #bdae93' - BRIGHT_BLUE = 'light_blue h109 #83a598' - BRIGHT_GREEN = 'light_green h142 #b8bb26' - BRIGHT_RED = 'light_red h167 #fb4934' - NEUTRAL_PURPLE = 'light_magenta h132 #b16286' - NEUTRAL_BLUE = 'dark_cyan h66 #458588' - NEUTRAL_YELLOW = 'yellow h172 #d79921' - FADED_BLUE = 'dark_blue h24 #076678' - FADED_YELLOW = 'brown h136 #b57614' - FADED_RED = 'dark_red h88 #9d0006' + DARK0_HARD = 'dark0_hard h234 #1d2021' + DARK2 = 'dark2 h239 #504945' + DARK4 = 'dark4 h243 #7c6f64' + GRAY_245 = 'gray_245 h245 #928374' + GRAY_244 = 'gray_244 h244 #928374' + LIGHT0_HARD = 'light0_hard h230 #f9f5d7' + LIGHT2 = 'light2 h250 #d5c4a1' + LIGHT4 = 'light4 h246 #a89984' + BRIGHT_RED = 'bright_red h167 #fb4934' + BRIGHT_GREEN = 'bright_green h142 #b8bb26' + BRIGHT_YELLOW = 'bright_yellow h214 #fabd2f' + BRIGHT_BLUE = 'bright_blue h109 #83a598' + NEUTRAL_YELLOW = 'neutral_yellow h172 #d79921' + NEUTRAL_BLUE = 'neutral_blue h66 #458588' + NEUTRAL_PURPLE = 'neutral_purple h132 #b16286' + FADED_RED = 'faded_red h88 #9d0006' + FADED_GREEN = 'faded_green h100 #79740e' + FADED_YELLOW = 'faded_yellow h136 #b57614' + FADED_BLUE = 'faded_blue h24 #076678' # fmt: on diff --git a/zulipterminal/themes/gruvbox_light.py b/zulipterminal/themes/gruvbox_light.py new file mode 100644 index 00000000000..cc34127c782 --- /dev/null +++ b/zulipterminal/themes/gruvbox_light.py @@ -0,0 +1,97 @@ +""" +GRUVBOX LIGHT +------- + +For syntax highlighting, this theme uses the solarized light styles +from pygments. This could be updated to a gruvbox style when the style +is released. + +For further details on themefiles look at the theme contribution guide +""" +from pygments.styles.solarized import SolarizedLightStyle + +from zulipterminal.themes.colors_gruvbox import DefaultBoldColor as Color + + +# fmt: off + +STYLES = { + # style_name : foreground background + None : (Color.DARK2, Color.LIGHT0_HARD), + 'selected' : (Color.DARK2, Color.BRIGHT_BLUE), + 'msg_selected' : (Color.DARK2, Color.BRIGHT_BLUE), + 'header' : (Color.NEUTRAL_BLUE, Color.BRIGHT_BLUE), + 'general_narrow' : (Color.DARK2, Color.BRIGHT_BLUE), + 'general_bar' : (Color.DARK2, Color.LIGHT0_HARD), + 'name' : (Color.NEUTRAL_YELLOW__BOLD, Color.LIGHT0_HARD), + 'unread' : (Color.NEUTRAL_PURPLE, Color.LIGHT0_HARD), + 'user_active' : (Color.FADED_GREEN, Color.LIGHT0_HARD), + 'user_idle' : (Color.NEUTRAL_YELLOW, Color.LIGHT0_HARD), + 'user_offline' : (Color.DARK2, Color.LIGHT0_HARD), + 'user_inactive' : (Color.DARK2, Color.LIGHT0_HARD), + 'title' : (Color.DARK2__BOLD, Color.LIGHT0_HARD), + 'column_title' : (Color.DARK2__BOLD, Color.LIGHT0_HARD), + 'time' : (Color.FADED_BLUE, Color.LIGHT0_HARD), + 'bar' : (Color.DARK2, Color.GRAY_245), + 'msg_emoji' : (Color.NEUTRAL_PURPLE, Color.LIGHT0_HARD), + 'reaction' : (Color.NEUTRAL_PURPLE__BOLD, Color.LIGHT0_HARD), + 'reaction_mine' : (Color.LIGHT0_HARD, Color.NEUTRAL_PURPLE), + 'msg_heading' : (Color.LIGHT0_HARD__BOLD, Color.FADED_GREEN), + 'msg_math' : (Color.LIGHT0_HARD, Color.GRAY_245), + 'msg_mention' : (Color.FADED_RED__BOLD, Color.LIGHT0_HARD), + 'msg_link' : (Color.FADED_BLUE, Color.LIGHT0_HARD), + 'msg_link_index' : (Color.FADED_BLUE__BOLD, Color.LIGHT0_HARD), + 'msg_quote' : (Color.BRIGHT_YELLOW, Color.LIGHT0_HARD), + 'msg_code' : (Color.LIGHT0_HARD, Color.DARK2), + 'msg_bold' : (Color.DARK2__BOLD, Color.LIGHT0_HARD), + 'msg_time' : (Color.LIGHT0_HARD, Color.DARK2), + 'footer' : (Color.LIGHT0_HARD, Color.DARK4), + 'footer_contrast' : (Color.DARK2, Color.LIGHT0_HARD), + 'starred' : (Color.FADED_RED__BOLD, Color.LIGHT0_HARD), + 'unread_count' : (Color.NEUTRAL_YELLOW, Color.LIGHT0_HARD), + 'starred_count' : (Color.DARK4, Color.LIGHT0_HARD), + 'table_head' : (Color.DARK2__BOLD, Color.LIGHT0_HARD), + 'filter_results' : (Color.LIGHT0_HARD, Color.FADED_GREEN), + 'edit_topic' : (Color.LIGHT0_HARD, Color.GRAY_245), + 'edit_tag' : (Color.LIGHT0_HARD, Color.GRAY_245), + 'edit_author' : (Color.NEUTRAL_YELLOW, Color.LIGHT0_HARD), + 'edit_time' : (Color.FADED_BLUE, Color.LIGHT0_HARD), + 'current_user' : (Color.DARK2, Color.LIGHT0_HARD), + 'muted' : (Color.FADED_BLUE, Color.LIGHT0_HARD), + 'popup_border' : (Color.DARK2, Color.LIGHT0_HARD), + 'popup_category' : (Color.FADED_BLUE__BOLD, Color.LIGHT0_HARD), + 'popup_contrast' : (Color.LIGHT0_HARD, Color.GRAY_245), + 'popup_important' : (Color.FADED_RED__BOLD, Color.LIGHT0_HARD), + 'widget_disabled' : (Color.GRAY_245, Color.LIGHT0_HARD), + 'area:help' : (Color.LIGHT0_HARD, Color.FADED_GREEN), + 'area:msg' : (Color.LIGHT0_HARD, Color.FADED_RED), + 'area:stream' : (Color.LIGHT0_HARD, Color.FADED_BLUE), + 'area:error' : (Color.DARK2, Color.BRIGHT_RED), + 'area:user' : (Color.DARK2, Color.BRIGHT_BLUE), + 'search_error' : (Color.FADED_RED, Color.LIGHT0_HARD), + 'task:success' : (Color.LIGHT0_HARD, Color.FADED_GREEN), + 'task:error' : (Color.DARK2, Color.BRIGHT_RED), + 'task:warning' : (Color.LIGHT0_HARD, Color.FADED_RED), +} + +META = { + 'pygments': { + 'styles' : SolarizedLightStyle().styles, + 'background': '#ffffcc', + 'overrides' : { + 'c' : '#586E75, italics', # base01 + 'cp' : '#859900', # magenta + 'cpf' : '#586e75', # base01 + 'ge' : '#93A1A1, italics', # base0 + 'gh' : '#CB4B16, bold', # base0 + 'gu' : '#CB4B16, underline', # base0 + 'gp' : '#93A1A1, bold', # blue + 'gs' : '#93A1A1, bold', # base0 + 'err' : '#93A1A1', # red + 'n' : '#93A1A1', # gruvbox: light4 + 'p' : '#93A1A1', # gruvbox: light4 + 'w' : '#93A1A1', # gruvbox: light4 + } + } +} +# fmt: on