Skip to content

Added four new themes to the themes directory #1571

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions zulipterminal/cli/# Code Citations.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Code Citations

## License: Apache_2_0
https://github.com/zulip/zulip-terminal/tree/2d25ba97b9049e0b8fa5950e7d5c4eae96e5a4f9/zulipterminal/cli/run.py

```
def parse_zuliprc(zuliprc_str: str) -> Dict[str, SettingData]:
zuliprc_path = path.expanduser(zuliprc_str)
while not path.exists(zuliprc_path):
try:
fetch_zuliprc(zuliprc_path)
# Invalid user inputs (e.g. pressing arrow keys) may cause ValueError
```

17 changes: 16 additions & 1 deletion zulipterminal/config/themes.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,17 @@
from pygments.token import STANDARD_TYPES, _TokenType

from zulipterminal.config.color import Background, term16
from zulipterminal.themes import gruvbox_dark, gruvbox_light, zt_blue, zt_dark, zt_light
from zulipterminal.themes import (
gruvbox_dark,
gruvbox_dark_high_contrast,
gruvbox_dark_low_contrast,
gruvbox_light,
gruvbox_light_high_contrast,
gruvbox_light_low_contrast,
zt_blue,
zt_dark,
zt_light,
)


StyleSpec = Union[
Expand Down Expand Up @@ -96,6 +106,11 @@
"zt_dark": zt_dark,
"zt_light": zt_light,
"zt_blue": zt_blue,
"gruvbox_dark_high_contrast": gruvbox_dark_high_contrast,
"gruvbox_dark_low_contrast": gruvbox_dark_low_contrast,
"gruvbox_light_high_contrast": gruvbox_light_high_contrast,
"gruvbox_light_low_contrast": gruvbox_light_low_contrast,
# "sample": sample,
}

# These are older aliases to some of the above, for compatibility
Expand Down
36 changes: 27 additions & 9 deletions zulipterminal/themes/colors_gruvbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
For color reference see:
https://github.com/morhetz/gruvbox/blob/master/colors/gruvbox.vim
"""

from enum import Enum

from zulipterminal.config.color import color_properties
Expand All @@ -25,12 +26,27 @@ class GruvBoxColor(Enum):
# Only or primarily dark mode - grayscales
# - generally background
DARK0_HARD = 'black h234 #1d2021'
DARK0 = 'black h235 #282828'
DARK0_SOFT = 'black h236 #32302f'
DARK1 = 'black h237 #3c3836'
DARK2 = 'black h239 #504945'
DARK3 = 'black h241 #665c54'
DARK4 = 'black h243 #7c6f64'
# - generally foreground
LIGHT2 = 'white h250 #d5c4a1'
# - grays
GRAY_244 = 'dark_gray h244 #928374'
GRAY_245 = 'dark_gray h245 #928374'
LIGHT4 = 'light_gray h248 #bdae93'

# Only or primarily light version - grayscales
# - generally background
LIGHT0_HARD = 'white h230 #f9f5d7'
LIGHT0 = 'white h229 #fbf1c7'
LIGHT0_SOFT = 'white h228 #f2e5bc'
LIGHT1 = 'white h223 #ebdbb2'
LIGHT4_256 = 'light_gray h246 #a89984'

# Dark mode only - colors
BRIGHT_BLUE = 'light_blue h109 #83a598'
BRIGHT_GREEN = 'light_green h142 #b8bb26'
Expand All @@ -48,15 +64,17 @@ class GruvBoxColor(Enum):
FADED_RED = 'dark_red h88 #9d0006'
FADED_YELLOW = 'brown h136 #b57614'

# Only or primarily light version - grayscales
# - generally background
LIGHT0_HARD = 'white h230 #f9f5d7'
# - generally foreground
DARK2 = 'black h239 #504945'
# - grays
GRAY_245 = 'dark_gray h245 #928374'
DARK4 = 'black h243 #7c6f64'

# Additional colors
BRIGHT_PURPLE = 'light_magenta h175 #d3869b'
BRIGHT_AQUA = 'light_cyan h108 #8ec07c'
BRIGHT_ORANGE = 'light_red h208 #fe8019'
NEUTRAL_RED = 'dark_red h124 #cc241d'
NEUTRAL_GREEN = 'dark_green h106 #98971a'
NEUTRAL_AQUA = 'dark_cyan h72 #689d6a'
NEUTRAL_ORANGE = 'dark_red h166 #d65d0e'
FADED_PURPLE = 'dark_magenta h96 #8f3f71'
FADED_AQUA = 'dark_cyan h66 #427b58'
FADED_ORANGE = 'dark_red h130 #af3a03'

# fmt: on

Expand Down
158 changes: 74 additions & 84 deletions zulipterminal/themes/gruvbox_dark.py
Original file line number Diff line number Diff line change
@@ -1,100 +1,90 @@
"""
GRUVBOX DARK
------------

For syntax highlighting, this theme uses the solarized dark 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
ZT DARK
-------
This theme uses the default color scheme.
For further details on themefiles look at the theme contribution guide.
"""

from pygments.styles.solarized import SolarizedDarkStyle
from pygments.styles.material import MaterialStyle

from zulipterminal.config.color import Background
from zulipterminal.themes.colors_gruvbox import DefaultBoldColor as Color
from zulipterminal.config.color import DefaultBoldColor as Color


# fmt: off

STYLES = {
# style_name : foreground background
None : (Color.LIGHT2, Background.COLOR),
'selected' : (Color.DARK0_HARD, Color.NEUTRAL_BLUE),
'msg_selected' : (Color.DARK0_HARD, Color.NEUTRAL_BLUE),
'header' : (Color.NEUTRAL_BLUE, Color.BRIGHT_BLUE),
'general_narrow' : (Color.DARK0_HARD, Color.BRIGHT_BLUE),
'general_bar' : (Color.LIGHT2, Background.COLOR),
'msg_sender' : (Color.NEUTRAL_YELLOW__BOLD, Background.COLOR),
'unread' : (Color.NEUTRAL_PURPLE, Background.COLOR),
'user_active' : (Color.BRIGHT_GREEN, Background.COLOR),
'user_idle' : (Color.NEUTRAL_YELLOW, Background.COLOR),
'user_offline' : (Color.LIGHT2, Background.COLOR),
'user_inactive' : (Color.LIGHT2, Background.COLOR),
'user_bot' : (Color.LIGHT2, Background.COLOR),
'title' : (Color.LIGHT2__BOLD, Background.COLOR),
'column_title' : (Color.LIGHT2__BOLD, Background.COLOR),
'time' : (Color.BRIGHT_BLUE, Background.COLOR),
'bar' : (Color.LIGHT2, Color.GRAY_244),
'msg_emoji' : (Color.NEUTRAL_PURPLE, Background.COLOR),
'reaction' : (Color.NEUTRAL_PURPLE__BOLD, Background.COLOR),
'reaction_mine' : (Color.DARK0_HARD, Color.NEUTRAL_PURPLE),
'msg_heading' : (Color.DARK0_HARD__BOLD, Color.BRIGHT_GREEN),
'msg_math' : (Color.DARK0_HARD, Color.GRAY_244),
'msg_mention' : (Color.BRIGHT_RED__BOLD, Background.COLOR),
'msg_link' : (Color.BRIGHT_BLUE, Background.COLOR),
'msg_link_index' : (Color.BRIGHT_BLUE__BOLD, Background.COLOR),
'msg_quote' : (Color.NEUTRAL_YELLOW, Background.COLOR),
'msg_bold' : (Color.LIGHT2__BOLD, Background.COLOR),
'msg_time' : (Color.DARK0_HARD, Color.LIGHT2),
'footer' : (Color.DARK0_HARD, Color.LIGHT4),
'footer_contrast' : (Color.LIGHT2, Background.COLOR),
'starred' : (Color.BRIGHT_RED__BOLD, Background.COLOR),
'unread_count' : (Color.NEUTRAL_YELLOW, Background.COLOR),
'starred_count' : (Color.LIGHT4, Background.COLOR),
'table_head' : (Color.LIGHT2__BOLD, Background.COLOR),
'filter_results' : (Color.DARK0_HARD, Color.BRIGHT_GREEN),
'edit_topic' : (Color.DARK0_HARD, Color.GRAY_244),
'edit_tag' : (Color.DARK0_HARD, Color.GRAY_244),
'edit_author' : (Color.NEUTRAL_YELLOW, Background.COLOR),
'edit_time' : (Color.BRIGHT_BLUE, Background.COLOR),
'current_user' : (Color.LIGHT2, Background.COLOR),
'muted' : (Color.BRIGHT_BLUE, Background.COLOR),
'popup_border' : (Color.LIGHT2, Background.COLOR),
'popup_category' : (Color.BRIGHT_BLUE__BOLD, Background.COLOR),
'popup_contrast' : (Color.DARK0_HARD, Color.GRAY_244),
'popup_important' : (Color.BRIGHT_RED__BOLD, Background.COLOR),
'widget_disabled' : (Color.GRAY_244, Background.COLOR),
'area:help' : (Color.DARK0_HARD, Color.BRIGHT_GREEN),
'area:msg' : (Color.DARK0_HARD, Color.NEUTRAL_PURPLE),
'area:stream' : (Color.DARK0_HARD, Color.BRIGHT_BLUE),
'area:error' : (Color.DARK0_HARD, Color.BRIGHT_RED),
'area:user' : (Color.DARK0_HARD, Color.BRIGHT_YELLOW),
'search_error' : (Color.BRIGHT_RED, Background.COLOR),
'task:success' : (Color.DARK0_HARD, Color.BRIGHT_GREEN),
'task:error' : (Color.DARK0_HARD, Color.BRIGHT_RED),
'task:warning' : (Color.DARK0_HARD, Color.NEUTRAL_PURPLE),
'ui_code' : (Color.DARK0_HARD, Color.LIGHT2),
# style_name : foreground background
None : (Color.WHITE, Background.COLOR),
'selected' : (Color.WHITE, Color.DARK_BLUE),
'msg_selected' : (Color.WHITE, Color.DARK_BLUE),
'header' : (Color.DARK_CYAN, Color.DARK_BLUE),
'general_narrow' : (Color.WHITE, Color.DARK_BLUE),
'general_bar' : (Color.WHITE, Background.COLOR),
'msg_sender' : (Color.YELLOW__BOLD, Background.COLOR),
'unread' : (Color.DARK_BLUE, Background.COLOR),
'user_active' : (Color.LIGHT_GREEN, Background.COLOR),
'user_idle' : (Color.YELLOW, Background.COLOR),
'user_offline' : (Color.WHITE, Background.COLOR),
'user_inactive' : (Color.WHITE, Background.COLOR),
'user_bot' : (Color.WHITE, Background.COLOR),
'title' : (Color.WHITE__BOLD, Background.COLOR),
'column_title' : (Color.WHITE__BOLD, Background.COLOR),
'time' : (Color.LIGHT_BLUE, Background.COLOR),
'bar' : (Color.WHITE, Color.DARK_GRAY),
'msg_emoji' : (Color.LIGHT_MAGENTA, Background.COLOR),
'reaction' : (Color.LIGHT_MAGENTA__BOLD, Background.COLOR),
'reaction_mine' : (Color.BLACK, Color.LIGHT_MAGENTA),
'msg_heading' : (Color.LIGHT_CYAN__BOLD, Color.DARK_MAGENTA),
'msg_math' : (Color.LIGHT_GRAY, Color.DARK_GRAY),
'msg_mention' : (Color.LIGHT_RED__BOLD, Background.COLOR),
'msg_link' : (Color.LIGHT_BLUE, Background.COLOR),
'msg_link_index' : (Color.LIGHT_BLUE__BOLD, Background.COLOR),
'msg_quote' : (Color.BROWN, Background.COLOR),
'msg_bold' : (Color.WHITE__BOLD, Background.COLOR),
'msg_time' : (Color.BLACK, Color.WHITE),
'footer' : (Color.BLACK, Color.LIGHT_GRAY),
'footer_contrast' : (Color.WHITE, Background.COLOR),
'starred' : (Color.LIGHT_RED__BOLD, Background.COLOR),
'unread_count' : (Color.YELLOW, Background.COLOR),
'starred_count' : (Color.LIGHT_GRAY, Background.COLOR),
'table_head' : (Color.WHITE__BOLD, Background.COLOR),
'filter_results' : (Color.WHITE, Color.DARK_GREEN),
'edit_topic' : (Color.WHITE, Color.DARK_GRAY),
'edit_tag' : (Color.WHITE, Color.DARK_GRAY),
'edit_author' : (Color.YELLOW, Background.COLOR),
'edit_time' : (Color.LIGHT_BLUE, Background.COLOR),
'current_user' : (Color.WHITE, Background.COLOR),
'muted' : (Color.LIGHT_BLUE, Background.COLOR),
'popup_border' : (Color.WHITE, Background.COLOR),
'popup_category' : (Color.LIGHT_BLUE__BOLD, Background.COLOR),
'popup_contrast' : (Color.WHITE, Color.DARK_GRAY),
'popup_important' : (Color.LIGHT_RED__BOLD, Background.COLOR),
'widget_disabled' : (Color.DARK_GRAY, Background.COLOR),
'area:help' : (Color.WHITE, Color.DARK_GREEN),
'area:msg' : (Color.WHITE, Color.BROWN),
'area:stream' : (Color.WHITE, Color.DARK_CYAN),
'area:error' : (Color.WHITE, Color.DARK_RED),
'area:user' : (Color.WHITE, Color.DARK_BLUE),
'search_error' : (Color.LIGHT_RED, Background.COLOR),
'task:success' : (Color.WHITE, Color.DARK_GREEN),
'task:error' : (Color.WHITE, Color.DARK_RED),
'task:warning' : (Color.WHITE, Color.BROWN),
'ui_code' : (Color.BLACK, Color.WHITE),
}

META = {
'background': Color.DARK0_HARD,
'background': Color.BLACK,
'pygments': {
'styles' : SolarizedDarkStyle().styles,
'background': 'h236',
'styles' : MaterialStyle().styles,
'background': 'h235',
'overrides' : {
'c' : '#586e75, italics', # base01
'cp' : '#d33682', # magenta
'cpf' : '#586e75', # base01
'ge' : '#839496, italics', # base0
'gh' : '#839496, bold', # base0
'gu' : '#839496, underline', # base0
'gp' : '#268bd2, bold', # blue
'gs' : '#839496, bold', # base0
'err' : '#dc322f', # red
'n' : '#bdae93', # gruvbox: light4
'p' : '#bdae93', # gruvbox: light4
'w' : '#bdae93', # gruvbox: light4
'kn' : MaterialStyle().cyan + ', italics',
'sd' : MaterialStyle().faded + ', italics',
'ow' : MaterialStyle().cyan + ', italics',
'c' : MaterialStyle().faded + ', italics',
'n' : MaterialStyle().paleblue,
'no' : MaterialStyle().paleblue,
'nx' : MaterialStyle().paleblue,
'w' : MaterialStyle().paleblue, # inline/plain-codeblock
}
}
}
Expand Down
101 changes: 101 additions & 0 deletions zulipterminal/themes/gruvbox_dark_high_contrast.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
"""
GRUVBOX DARK HIGH CONTRAST
--------------------------

For syntax highlighting, this theme uses the solarized dark 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 SolarizedDarkStyle

from zulipterminal.config.color import Background
from zulipterminal.themes.colors_gruvbox import DefaultBoldColor as Color


# fmt: off

STYLES = {
# style_name : foreground background
None : (Color.LIGHT2, Background.COLOR),
'selected' : (Color.DARK0_HARD, Color.NEUTRAL_BLUE),
'msg_selected' : (Color.DARK0_HARD, Color.NEUTRAL_BLUE),
'header' : (Color.NEUTRAL_BLUE, Color.BRIGHT_BLUE),
'general_narrow' : (Color.DARK0_HARD, Color.BRIGHT_BLUE),
'general_bar' : (Color.LIGHT2, Background.COLOR),
'msg_sender' : (Color.NEUTRAL_YELLOW__BOLD, Background.COLOR),
'unread' : (Color.NEUTRAL_PURPLE, Background.COLOR),
'user_active' : (Color.BRIGHT_GREEN, Background.COLOR),
'user_idle' : (Color.NEUTRAL_YELLOW, Background.COLOR),
'user_offline' : (Color.LIGHT2, Background.COLOR),
'user_inactive' : (Color.LIGHT2, Background.COLOR),
'user_bot' : (Color.LIGHT2, Background.COLOR),
'title' : (Color.LIGHT2__BOLD, Background.COLOR),
'column_title' : (Color.LIGHT2__BOLD, Background.COLOR),
'time' : (Color.BRIGHT_BLUE, Background.COLOR),
'bar' : (Color.LIGHT2, Color.GRAY_244),
'msg_emoji' : (Color.NEUTRAL_PURPLE, Background.COLOR),
'reaction' : (Color.NEUTRAL_PURPLE__BOLD, Background.COLOR),
'reaction_mine' : (Color.DARK0_HARD, Color.NEUTRAL_PURPLE),
'msg_heading' : (Color.DARK0_HARD__BOLD, Color.BRIGHT_GREEN),
'msg_math' : (Color.DARK0_HARD, Color.GRAY_244),
'msg_mention' : (Color.BRIGHT_RED__BOLD, Background.COLOR),
'msg_link' : (Color.BRIGHT_BLUE, Background.COLOR),
'msg_link_index' : (Color.BRIGHT_BLUE__BOLD, Background.COLOR),
'msg_quote' : (Color.NEUTRAL_YELLOW, Background.COLOR),
'msg_bold' : (Color.LIGHT2__BOLD, Background.COLOR),
'msg_time' : (Color.DARK0_HARD, Color.LIGHT2),
'footer' : (Color.DARK0_HARD, Color.LIGHT4),
'footer_contrast' : (Color.LIGHT2, Background.COLOR),
'starred' : (Color.BRIGHT_RED__BOLD, Background.COLOR),
'unread_count' : (Color.NEUTRAL_YELLOW, Background.COLOR),
'starred_count' : (Color.LIGHT4, Background.COLOR),
'table_head' : (Color.LIGHT2__BOLD, Background.COLOR),
'filter_results' : (Color.DARK0_HARD, Color.BRIGHT_GREEN),
'edit_topic' : (Color.DARK0_HARD, Color.GRAY_244),
'edit_tag' : (Color.DARK0_HARD, Color.GRAY_244),
'edit_author' : (Color.NEUTRAL_YELLOW, Background.COLOR),
'edit_time' : (Color.BRIGHT_BLUE, Background.COLOR),
'current_user' : (Color.LIGHT2, Background.COLOR),
'muted' : (Color.BRIGHT_BLUE, Background.COLOR),
'popup_border' : (Color.LIGHT2, Background.COLOR),
'popup_category' : (Color.BRIGHT_BLUE__BOLD, Background.COLOR),
'popup_contrast' : (Color.DARK0_HARD, Color.GRAY_244),
'popup_important' : (Color.BRIGHT_RED__BOLD, Background.COLOR),
'widget_disabled' : (Color.GRAY_244, Background.COLOR),
'area:help' : (Color.DARK0_HARD, Color.BRIGHT_GREEN),
'area:msg' : (Color.DARK0_HARD, Color.NEUTRAL_PURPLE),
'area:stream' : (Color.DARK0_HARD, Color.BRIGHT_BLUE),
'area:error' : (Color.DARK0_HARD, Color.BRIGHT_RED),
'area:user' : (Color.DARK0_HARD, Color.BRIGHT_YELLOW),
'search_error' : (Color.BRIGHT_RED, Background.COLOR),
'task:success' : (Color.DARK0_HARD, Color.BRIGHT_GREEN),
'task:error' : (Color.DARK0_HARD, Color.BRIGHT_RED),
'task:warning' : (Color.DARK0_HARD, Color.NEUTRAL_PURPLE),
'ui_code' : (Color.DARK0_HARD, Color.LIGHT2),
}

META = {
'background': Color.DARK0_HARD,
'pygments': {
'styles' : SolarizedDarkStyle().styles,
'background': 'h236',
'overrides' : {
'c' : '#586e75, italics', # base01
'cp' : '#d33682', # magenta
'cpf' : '#586e75', # base01
'ge' : '#839496, italics', # base0
'gh' : '#839496, bold', # base0
'gu' : '#839496, underline', # base0
'gp' : '#268bd2, bold', # blue
'gs' : '#839496, bold', # base0
'err' : '#dc322f', # red
'n' : '#bdae93', # gruvbox: light4
'p' : '#bdae93', # gruvbox: light4
'w' : '#bdae93', # gruvbox: light4
}
}
}
# fmt: on
Loading
Loading