From 07f03b97d9c29347067a5e18972b8f7597fd778d Mon Sep 17 00:00:00 2001 From: Ambrose Chua Date: Sat, 7 Nov 2020 12:00:52 +0800 Subject: [PATCH] Improve colorscheme for Kitty --- .config/kitty/colorscheme.conf | 2 +- .config/kitty/colorscheme.dark.conf | 32 ++-- .config/kitty/colorscheme.generate.py | 170 ++++++++++++++---- .config/kitty/colorscheme.greyscale-dark.conf | 22 +++ .../kitty/colorscheme.greyscale-light.conf | 22 +++ .config/kitty/colorscheme.light.conf | 32 ++-- .config/kitty/colorscheme.template.conf | 26 --- .config/kitty/colorscheme.variables.conf | 90 ---------- .config/kitty/fontawesome.generate.py | 20 ++- .config/kitty/kitty.conf | 10 +- .config/nvim/colors/solarized.vim | 4 + .zshrc | 31 ++-- 12 files changed, 246 insertions(+), 215 deletions(-) create mode 100644 .config/kitty/colorscheme.greyscale-dark.conf create mode 100644 .config/kitty/colorscheme.greyscale-light.conf delete mode 100644 .config/kitty/colorscheme.template.conf delete mode 100644 .config/kitty/colorscheme.variables.conf mode change 100644 => 100755 .config/kitty/fontawesome.generate.py diff --git a/.config/kitty/colorscheme.conf b/.config/kitty/colorscheme.conf index 5584fd1..4b491bc 120000 --- a/.config/kitty/colorscheme.conf +++ b/.config/kitty/colorscheme.conf @@ -1 +1 @@ -colorscheme.dark.conf \ No newline at end of file +colorscheme.greyscale-dark.conf \ No newline at end of file diff --git a/.config/kitty/colorscheme.dark.conf b/.config/kitty/colorscheme.dark.conf index 9ade5fe..12f4fb3 100644 --- a/.config/kitty/colorscheme.dark.conf +++ b/.config/kitty/colorscheme.dark.conf @@ -1,26 +1,22 @@ -cursor #a3a3a3 - -cursor_text_color background - -foreground #999999 -background #202020 - -selection_foreground #a3a3a3 -selection_background #606060 - -color0 #2d2d2d +cursor_text_color #073642 +cursor #839496 +foreground #839496 +background #002b36 +selection_foreground #93a1a1 +selection_background #073642 +color0 #073642 color1 #dc322f color2 #859900 color3 #b58900 color4 #268bd2 color5 #d33682 color6 #2aa198 -color7 #f0f0f0 +color7 #eee8d5 +color8 #002b36 color9 #cb4b16 -color8 #202020 -color10 #606060 -color11 #6d6d6D -color12 #999999 +color10 #586e75 +color11 #657b83 +color12 #839496 color13 #6c71c4 -color14 #a3a3a3 -color15 #ffffff +color14 #93a1a1 +color15 #fdf6e3 diff --git a/.config/kitty/colorscheme.generate.py b/.config/kitty/colorscheme.generate.py index e149781..259b009 100755 --- a/.config/kitty/colorscheme.generate.py +++ b/.config/kitty/colorscheme.generate.py @@ -1,42 +1,136 @@ #!/usr/bin/env python -def parse_line(line): - cleaned = line.strip() - split = cleaned.split(maxsplit=1) - if not split: - return None, None - if len(split) < 2: - return split[0], None - return split +import sys +import re -def parse_variables(section): - parsed = {} - with open("colorscheme.variables.conf", "r") as f: - current_section = None - for line in f: - key, value = parse_line(line) - if key == "!": - current_section = value + +COLORSCHEMES = { + "dark": { + "theme": "solarized", + "palette": "solarized", + "cursor_text_color": "{base02}", + "cursor": "{base0}", + "foreground": "{base0}", + "background": "{base03}", + "selection_foreground": "{base1}", + "selection_background": "{base02}", + }, + "light": { + "theme": "solarized", + "palette": "solarized", + "cursor_text_color": "{base2}", + "cursor": "{base00}", + "foreground": "{base00}", + "background": "{base3}", + "selection_foreground": "{base01}", + "selection_background": "{base2}", + }, + "greyscale-dark": { + "theme": "solarized", + "palette": "solarized-greyscale", + "cursor_text_color": "{base02}", + "cursor": "{base0}", + "foreground": "{base0}", + "background": "{base03}", + "selection_foreground": "{base1}", + "selection_background": "{base02}", + }, + "greyscale-light": { + "theme": "solarized", + "palette": "solarized-greyscale", + "cursor_text_color": "{base2}", + "cursor": "{base00}", + "foreground": "{base00}", + "background": "{base3}", + "selection_foreground": "{base01}", + "selection_background": "{base2}", + }, +} + +THEMES = { + "solarized": { + "color0": "{base02}", + "color1": "{red}", + "color2": "{green}", + "color3": "{yellow}", + "color4": "{blue}", + "color5": "{magenta}", + "color6": "{cyan}", + "color7": "{base2}", + "color8": "{base03}", + "color9": "{orange}", + "color10": "{base01}", + "color11": "{base00}", + "color12": "{base0}", + "color13": "{violet}", + "color14": "{base1}", + "color15": "{base3}", + }, +} + +TABLE_HEADER = """ +" SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B sRGB HSB +" --------- ------- ---- ------- ----------- ---------- ----------- ----------- +""".strip().split( + "\n" +) + + +def read_table(f): + match_window = [] + # Read until we find the table header + for line in f: + line = line.strip() + match_window.append(line) + if len(match_window) <= len(TABLE_HEADER): + continue + match_window.pop(0) + if match_window == TABLE_HEADER: + break + # Read table + for line in f: + parts = [p for p in re.split("[ \"']+", line) if len(p) > 0] + if len(parts) < 3: + break + yield (parts[0], parts[1]) + + +def read_palette(filename): + palette = {} + with open(filename, "r") as f: + for name, value in read_table(f): + palette[name] = value + return palette + + +PALETTES = { + "solarized": read_palette("../../.config/nvim/colors/solarized.vim"), + "solarized-greyscale": { + **read_palette("../../.config/nvim/colors/solarized.vim"), + **{ + "base03": "#202020", + "base02": "#2d2d2d", + "base01": "#606060", + "base00": "#6d6d6d", + "base0": "#969696", + "base1": "#a0a0a0", + "base2": "#eaeaea", + "base3": "#f9f9f9", + }, + }, +} + + +for name, scheme in COLORSCHEMES.items(): + theme = THEMES[scheme["theme"]] + palette = PALETTES[scheme["palette"]] + + with open(f"colorscheme.{name}.conf", "w") as f: + for name, value in scheme.items(): + if name in ("theme", "palette"): continue - if current_section == section: - parsed[key] = value - del parsed[None] - return parsed - -common = parse_variables("Common") -for scheme in ("Dark", "Light"): - variables = parse_variables(scheme) - - with open("colorscheme.template.conf", "r") as f: - template = f.read() - - rewritten = template - for key, value in variables.items(): - rewritten = rewritten.replace(key, value) - for key, value in common.items(): - rewritten = rewritten.replace(key, value) - - save_as = "colorscheme.{}.conf".format(scheme.lower()) - with open(save_as, "w") as f: - f.write(rewritten) - + s = f"{name} {value.format(**palette)}\n" + f.write(s) + for name, value in theme.items(): + s = f"{name} {value.format(**palette)}\n" + f.write(s) diff --git a/.config/kitty/colorscheme.greyscale-dark.conf b/.config/kitty/colorscheme.greyscale-dark.conf new file mode 100644 index 0000000..73ab73c --- /dev/null +++ b/.config/kitty/colorscheme.greyscale-dark.conf @@ -0,0 +1,22 @@ +cursor_text_color #2d2d2d +cursor #969696 +foreground #969696 +background #202020 +selection_foreground #a0a0a0 +selection_background #2d2d2d +color0 #2d2d2d +color1 #dc322f +color2 #859900 +color3 #b58900 +color4 #268bd2 +color5 #d33682 +color6 #2aa198 +color7 #eaeaea +color8 #202020 +color9 #cb4b16 +color10 #606060 +color11 #6d6d6d +color12 #969696 +color13 #6c71c4 +color14 #a0a0a0 +color15 #f9f9f9 diff --git a/.config/kitty/colorscheme.greyscale-light.conf b/.config/kitty/colorscheme.greyscale-light.conf new file mode 100644 index 0000000..d46f6f5 --- /dev/null +++ b/.config/kitty/colorscheme.greyscale-light.conf @@ -0,0 +1,22 @@ +cursor_text_color #eaeaea +cursor #6d6d6d +foreground #6d6d6d +background #f9f9f9 +selection_foreground #606060 +selection_background #eaeaea +color0 #2d2d2d +color1 #dc322f +color2 #859900 +color3 #b58900 +color4 #268bd2 +color5 #d33682 +color6 #2aa198 +color7 #eaeaea +color8 #202020 +color9 #cb4b16 +color10 #606060 +color11 #6d6d6d +color12 #969696 +color13 #6c71c4 +color14 #a0a0a0 +color15 #f9f9f9 diff --git a/.config/kitty/colorscheme.light.conf b/.config/kitty/colorscheme.light.conf index ef76740..1907457 100644 --- a/.config/kitty/colorscheme.light.conf +++ b/.config/kitty/colorscheme.light.conf @@ -1,26 +1,22 @@ -cursor #606060 - -cursor_text_color background - -foreground #6d6d6d -background #dfdfdf - -selection_foreground #606060 -selection_background #9d9d9d - -color0 #2d2d2d +cursor_text_color #eee8d5 +cursor #657b83 +foreground #657b83 +background #fdf6e3 +selection_foreground #586e75 +selection_background #eee8d5 +color0 #073642 color1 #dc322f color2 #859900 color3 #b58900 color4 #268bd2 color5 #d33682 color6 #2aa198 -color7 #f0f0f0 +color7 #eee8d5 +color8 #002b36 color9 #cb4b16 -color8 #202020 -color10 #606060 -color11 #6d6d6D -color12 #999999 +color10 #586e75 +color11 #657b83 +color12 #839496 color13 #6c71c4 -color14 #a3a3a3 -color15 #ffffff +color14 #93a1a1 +color15 #fdf6e3 diff --git a/.config/kitty/colorscheme.template.conf b/.config/kitty/colorscheme.template.conf deleted file mode 100644 index c154fe3..0000000 --- a/.config/kitty/colorscheme.template.conf +++ /dev/null @@ -1,26 +0,0 @@ -cursor S_base1 - -cursor_text_color background - -foreground S_base0 -background S_base03 - -selection_foreground S_base1 -selection_background S_base01 - -color0 S_base02 -color1 S_red -color2 S_green -color3 S_yellow -color4 S_blue -color5 S_magenta -color6 S_cyan -color7 S_base2 -color9 S_orange -color8 S_base03 -color10 S_base01 -color11 S_base00 -color12 S_base0 -color13 S_violet -color14 S_base1 -color15 S_base3 diff --git a/.config/kitty/colorscheme.variables.conf b/.config/kitty/colorscheme.variables.conf deleted file mode 100644 index 0e1787b..0000000 --- a/.config/kitty/colorscheme.variables.conf +++ /dev/null @@ -1,90 +0,0 @@ - -! Common - -S_yellow #b58900 -S_orange #cb4b16 -S_red #dc322f -S_magenta #d33682 -S_violet #6c71c4 -S_blue #268bd2 -S_cyan #2aa198 -S_green #859900 - -! Dark - -S_base03 #353535 ! 0x15 -S_base03 #202020 -S_base02 #424242 -S_base02 #2d2d2d -S_base01 #757575 -S_base01 #606060 -S_base00 #828282 -S_base00 #6d6d6D -S_base0 #969696 ! 0x3 -S_base0 #999999 -S_base1 #a0a0a0 -S_base1 #a3a3a3 -S_base2 #ededed -S_base2 #f0f0f0 -S_base3 #fcfcfc -S_base3 #ffffff - -! Light-Alt - -S_base03 #fcfcfc ! 0x3 -S_base03 #f9f9f9 -S_base02 #ededed -S_base02 #eaeaea -S_base01 #a0a0a0 -S_base01 #9d9d9d -S_base00 #969696 -S_base00 #939393 -S_base0 #828282 ! 0x15 -S_base0 #6d6d6d -S_base1 #757575 -S_base1 #606060 -S_base2 #424242 -S_base2 #2d2d2d -S_base3 #353535 -S_base3 #202020 - -! Light - -S_base03 #fcfcfc ! 0x1d -S_base03 #dfdfdf -S_base02 #ededed -S_base02 #eaeaea -S_base01 #a0a0a0 -S_base01 #9d9d9d -S_base00 #969696 -S_base00 #939393 -S_base0 #828282 ! 0x15 -S_base0 #6d6d6d -S_base1 #757575 -S_base1 #606060 -S_base2 #424242 -S_base2 #2d2d2d -S_base3 #353535 -S_base3 #202020 - -! Solarized-Dark - -S_base03 #002b36 -S_base02 #073642 -S_base01 #586e75 -S_base00 #657b83 -S_base0 #839496 -S_base1 #93a1a1 -S_base2 #eee8d5 -S_base3 #fdf6e3 - -! Solarized-Light - -S_base03 #fdf6e3 -S_base02 #eee8d5 -S_base01 #93a1a1 -S_base00 #839496 -S_base0 #657b83 -S_base1 #586e75 -S_base2 #073642 -S_base3 #002b36 diff --git a/.config/kitty/fontawesome.generate.py b/.config/kitty/fontawesome.generate.py old mode 100644 new mode 100755 index d1eb444..19f53cb --- a/.config/kitty/fontawesome.generate.py +++ b/.config/kitty/fontawesome.generate.py @@ -1,29 +1,31 @@ +#!/usr/bin/env python + import json import sys if len(sys.argv) == 1: - print('Usage: {} fontawesome_icons.json'.format(sys.argv[0])) + print("Usage: {} fontawesome_icons.json".format(sys.argv[0])) sys.exit(1) -with open(sys.argv[1], 'r') as f: +with open(sys.argv[1], "r") as f: obj = json.load(f) points = [] points_brands = [] for icon, data in obj.items(): - styles = data['styles'] - u = data['unicode'] - ufmt = 'U+{}'.format(u.upper()) + styles = data["styles"] + u = data["unicode"] + ufmt = "U+{}".format(u.upper()) if "brands" in styles: points_brands.append(ufmt) continue points.append(ufmt) -pointsfmt = ','.join(points) -configline = 'symbol_map {} Font Awesome 5 Pro'.format(pointsfmt) +pointsfmt = ",".join(points) +configline = "symbol_map {} Font Awesome 5 Pro".format(pointsfmt) -pointsfmt_brands = ','.join(points_brands) -configline_brands = 'symbol_map {} Font Awesome 5 Brands'.format(pointsfmt_brands) +pointsfmt_brands = ",".join(points_brands) +configline_brands = "symbol_map {} Font Awesome 5 Brands".format(pointsfmt_brands) print(configline) print(configline_brands) diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf index 492f797..aa96e8b 100644 --- a/.config/kitty/kitty.conf +++ b/.config/kitty/kitty.conf @@ -8,7 +8,7 @@ # font_family IBM Plex Mono # font_family Source Code Pro -font_family Fira Code Retina +font_family Fira Code bold_font Fira Code Bold # bold_font auto italic_font IBM Plex Mono Italic @@ -32,7 +32,7 @@ font_size 11.0 #: Font size (in pts) -adjust_line_height 115% +adjust_line_height 130% # adjust_column_width 0 #: Change the size of each character cell kitty renders. You can use @@ -974,11 +974,11 @@ macos_show_window_title_in window #: You can change the font size for all top-level kitty OS windows at #: a time or only the current one. -# map kitty_mod+equal change_font_size all +2.0 +map kitty_mod+f>plus change_font_size all +2.0 # map cmd+plus change_font_size all +2.0 -# map kitty_mod+minus change_font_size all -2.0 +map kitty_mod+f>minus change_font_size all -2.0 # map cmd+minus change_font_size all -2.0 -# map kitty_mod+backspace change_font_size all 0 +map kitty_mod+f>backspace change_font_size all 0 # map cmd+0 change_font_size all 0 #: To setup shortcuts for specific font sizes:: diff --git a/.config/nvim/colors/solarized.vim b/.config/nvim/colors/solarized.vim index 31dbed0..b819d87 100644 --- a/.config/nvim/colors/solarized.vim +++ b/.config/nvim/colors/solarized.vim @@ -138,6 +138,7 @@ let s:terms_italic=[ \"rxvt", \"gnome-terminal", + \"xterm-kitty", \"iTerm.app" \] " For reference only, terminals are known to be incomptible. @@ -150,6 +151,9 @@ if has("gui_running") else let s:terminal_italic=0 " terminals will be guilty until proven compatible for term in s:terms_italic + if $TERM =~ term + let s:terminal_italic=1 + endif if $TERM_PROGRAM =~ term let s:terminal_italic=1 endif diff --git a/.zshrc b/.zshrc index 3f14d4d..18ef0a1 100644 --- a/.zshrc +++ b/.zshrc @@ -31,8 +31,8 @@ if [[ -f "$HOME/.deno" ]]; then export DENO_INSTALL="$HOME/.deno" export PATH="$DENO_INSTALL/bin:$PATH" fi -if [[ -f "$HOME/.gem/ruby/2.6.0/bin" ]]; then - export PATH="$HOME/.gem/ruby/2.6.0/bin:$PATH" +if [[ -f "$(which go 2>/dev/null)" ]]; then + export PATH="$(ruby -e 'puts Gem.user_dir')/bin:$PATH" fi if [[ -f "$(which go 2>/dev/null)" ]]; then export PATH="$(go env GOPATH)/bin:$PATH" @@ -67,7 +67,9 @@ case "$(uname -s)" in esac if [[ $PLATFORM == macos ]]; then - export PATH="$HOME/Library/Python/3.8/bin:$PATH" + export PATH="$HOME/Library/Python/3.9/bin:$PATH" + export PATH="$HOME/Library/Python/3.10/bin:$PATH" # LOL + # On Linux, scripts are installed into $HOME/.local/bin fi setup_term_integration() {} @@ -130,7 +132,7 @@ format_vcs_info() { echo "$text" fi } -if [[ $FAST != "true" ]]; then +if [[ $FAST != true ]]; then setup_prompt_vcs fi # prompt: return code @@ -198,7 +200,8 @@ setup_prompt_colors() { PROMPT_COLOR_BLUE=4 PROMPT_COLOR_CYAN=6 PROMPT_COLOR_GREEN=2 - if [[ "$LIGHT" == "true" ]]; then + PROMPT_COLOR_ALWAYS_BASE3=$PROMPT_COLOR_BASE3 + if [[ $LIGHT == true ]]; then PROMPT_COLOR_TEMP03=$PROMPT_COLOR_TEMP03 PROMPT_COLOR_TEMP02=$PROMPT_COLOR_TEMP02 PROMPT_COLOR_TEMP01=$PROMPT_COLOR_TEMP01 @@ -222,12 +225,12 @@ setup_prompt() { PROMPT_FMT_ITALIC=$(tput sitm) PROMPT_FMT_RESET=$(tput sgr 0) - PROMPT_USER=$'%{'"$PROMPT_FMT_ITALIC"$'%}%F{'"$PROMPT_COLOR_BASE3"$'}%(!.%K{'"$PROMPT_COLOR_ORANGE"$'}.%K{'"$PROMPT_COLOR_BLUE"$'}) %n'"$PROMPT_USER_MACHINE"$' %k%f%{'"$PROMPT_FMT_RESET"$'%}' - PROMPT_HISTORY=$'%F{'"$PROMPT_COLOR_BASE01"$'}%{'"$PROMPT_FMT_ITALIC"$'%} %h %{'"$PROMPT_FMT_RESET"$'%}%f' + PROMPT_USER=$'%{'"$PROMPT_FMT_ITALIC"$'%}%F{'"$PROMPT_COLOR_ALWAYS_BASE3"$'}%(!.%K{'"$PROMPT_COLOR_ORANGE"$'}.%K{'"$PROMPT_COLOR_BLUE"$'}) %n'"$PROMPT_USER_MACHINE"$' %k%f%{'"$PROMPT_FMT_RESET"$'%}' + PROMPT_HISTORY=$'%F{'"$PROMPT_COLOR_BASE01"$'} %h %f' PROMPT_ERROR_PREV=$'$(format_return_code_prev $?)' PROMPT_VCS=$'%K{'$PROMPT_COLOR_BASE03$'}$(format_vcs_info $vcs_info_msg_0_)%k' PROMPT_DIRECTORY=$'%K{'$PROMPT_COLOR_BASE02$'} %2~ %k' - PROMPT_VI=$'%F{'"$PROMPT_COLOR_BASE3"$'}%{'"$PROMPT_FMT_ITALIC"$'%}$zle_vi_mode_%{'"$PROMPT_FMT_RESET"$'%}%f' + PROMPT_VI=$'%F{'"$PROMPT_COLOR_ALWAYS_BASE3"$'}%{'"$PROMPT_FMT_ITALIC"$'%}$zle_vi_mode_%{'"$PROMPT_FMT_RESET"$'%}%f' RPROMPT="$PROMPT_HISTORY$PROMPT_USER" PROMPT="$PROMPT_VI$PROMPT_VCS$PROMPT_DIRECTORY " } @@ -268,15 +271,23 @@ fi # helper scripts function theme { + case "$2" in + g) + KITTY_VARIATION=greyscale- + ;; + *) + KITTY_VARIATION= + ;; + esac case "$1" in light) ITERM_PROFILE=Light - KITTY_THEME=light + KITTY_THEME=${KITTY_VARIATION}light export LIGHT=true ;; dark) ITERM_PROFILE=Default - KITTY_THEME=dark + KITTY_THEME=${KITTY_VARIATION}dark export LIGHT=false ;; esac