aboutsummaryrefslogtreecommitdiff
path: root/vim/.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim/.vim')
-rw-r--r--vim/.vim/after/ftplugin/html.vim4
-rw-r--r--vim/.vim/after/ftplugin/typescript.vim3
-rw-r--r--vim/.vim/colors/PaperColor.vim2238
-rw-r--r--vim/.vim/colors/ayu.vim268
-rw-r--r--vim/.vim/colors/firewatch.vim692
5 files changed, 3205 insertions, 0 deletions
diff --git a/vim/.vim/after/ftplugin/html.vim b/vim/.vim/after/ftplugin/html.vim
new file mode 100644
index 0000000..8c2d0c8
--- /dev/null
+++ b/vim/.vim/after/ftplugin/html.vim
@@ -0,0 +1,4 @@
+" Tab specific option
+set tabstop=2 "A tab is 8 spaces
+set shiftwidth=2 "An indent is 4 spaces
+set shiftround "Round indent to nearest shiftwidth multiple
diff --git a/vim/.vim/after/ftplugin/typescript.vim b/vim/.vim/after/ftplugin/typescript.vim
new file mode 100644
index 0000000..0b527fd
--- /dev/null
+++ b/vim/.vim/after/ftplugin/typescript.vim
@@ -0,0 +1,3 @@
+set expandtab
+set tabstop=2
+set shiftwidth=2
diff --git a/vim/.vim/colors/PaperColor.vim b/vim/.vim/colors/PaperColor.vim
new file mode 100644
index 0000000..e03886b
--- /dev/null
+++ b/vim/.vim/colors/PaperColor.vim
@@ -0,0 +1,2238 @@
+" Theme: PaperColor
+" Author: Nikyle Nguyen <NLKNguyen@MSN.com>
+" License: MIT
+" Source: http://github.com/NLKNguyen/papercolor-theme
+
+let s:version = '0.9.x'
+
+" Note on navigating this source code:
+" - Use folding feature to collapse/uncollapse blocks of marked code
+" zM to fold all markers in this file to see the structure of the source code
+" zR to unfold all recursively
+" za to toggle a fold
+" See: http://vim.wikia.com/wiki/Folding
+" - The main section is at the end where the functions are called in order.
+
+" Theme Repository: {{{
+
+let s:themes = {}
+
+" }}}
+
+fun! s:register_default_theme()
+ " Theme name should be lowercase
+ let s:themes['default'] = {
+ \ 'maintainer' : 'Nikyle Nguyen <me@Nikyle.com>',
+ \ 'source' : 'http://github.com/NLKNguyen/papercolor-theme',
+ \ 'description' : 'The original PaperColor Theme, inspired by Google Material Design',
+ \ 'options' : {
+ \ 'allow_bold': 1
+ \ }
+ \ }
+
+ " Theme can have 'light' and/or 'dark' color palette.
+ " Color values can be HEX and/or 256-color. Use empty string '' if not provided.
+ " Only color00 -> color15 are required. The rest are optional.
+ let s:themes['default'].light = {
+ \ 'NO_CONVERSION': 1,
+ \ 'TEST_256_COLOR_CONSISTENCY' : 1,
+ \ 'palette' : {
+ \ 'color00' : ['#eeeeee', '255'],
+ \ 'color01' : ['#af0000', '124'],
+ \ 'color02' : ['#008700', '28'],
+ \ 'color03' : ['#5f8700', '64'],
+ \ 'color04' : ['#0087af', '31'],
+ \ 'color05' : ['#878787', '102'],
+ \ 'color06' : ['#005f87', '24'],
+ \ 'color07' : ['#444444', '238'],
+ \ 'color08' : ['#bcbcbc', '250'],
+ \ 'color09' : ['#d70000', '160'],
+ \ 'color10' : ['#d70087', '162'],
+ \ 'color11' : ['#8700af', '91'],
+ \ 'color12' : ['#d75f00', '166'],
+ \ 'color13' : ['#d75f00', '166'],
+ \ 'color14' : ['#005faf', '25'],
+ \ 'color15' : ['#005f87', '24'],
+ \ 'color16' : ['#0087af', '31'],
+ \ 'color17' : ['#008700', '28'],
+ \ 'cursor_fg' : ['#eeeeee', '255'],
+ \ 'cursor_bg' : ['#005f87', '24'],
+ \ 'cursorline' : ['#e4e4e4', '254'],
+ \ 'cursorcolumn' : ['#e4e4e4', '254'],
+ \ 'cursorlinenr_fg' : ['#af5f00', '130'],
+ \ 'cursorlinenr_bg' : ['#eeeeee', '255'],
+ \ 'popupmenu_fg' : ['#444444', '238'],
+ \ 'popupmenu_bg' : ['#d0d0d0', '252'],
+ \ 'search_fg' : ['#444444', '238'],
+ \ 'search_bg' : ['#ffff5f', '227'],
+ \ 'linenumber_fg' : ['#b2b2b2', '249'],
+ \ 'linenumber_bg' : ['#eeeeee', '255'],
+ \ 'vertsplit_fg' : ['#005f87', '24'],
+ \ 'vertsplit_bg' : ['#eeeeee', '255'],
+ \ 'statusline_active_fg' : ['#e4e4e4', '254'],
+ \ 'statusline_active_bg' : ['#005f87', '24'],
+ \ 'statusline_inactive_fg' : ['#444444', '238'],
+ \ 'statusline_inactive_bg' : ['#d0d0d0', '252'],
+ \ 'todo_fg' : ['#00af5f', '35'],
+ \ 'todo_bg' : ['#eeeeee', '255'],
+ \ 'error_fg' : ['#af0000', '124'],
+ \ 'error_bg' : ['#ffd7ff', '225'],
+ \ 'matchparen_bg' : ['#c6c6c6', '251'],
+ \ 'matchparen_fg' : ['#005f87', '24'],
+ \ 'visual_fg' : ['#eeeeee', '255'],
+ \ 'visual_bg' : ['#0087af', '31'],
+ \ 'folded_fg' : ['#0087af', '31'],
+ \ 'folded_bg' : ['#afd7ff', '153'],
+ \ 'wildmenu_fg': ['#444444', '238'],
+ \ 'wildmenu_bg': ['#ffff00', '226'],
+ \ 'spellbad': ['#ffafd7', '218'],
+ \ 'spellcap': ['#ffffaf', '229'],
+ \ 'spellrare': ['#afff87', '156'],
+ \ 'spelllocal': ['#d7d7ff', '189'],
+ \ 'diffadd_fg': ['#008700', '28'],
+ \ 'diffadd_bg': ['#afffaf', '157'],
+ \ 'diffdelete_fg': ['#af0000', '124'],
+ \ 'diffdelete_bg': ['#ffd7ff', '225'],
+ \ 'difftext_fg': ['#0087af', '31'],
+ \ 'difftext_bg': ['#ffffd7', '230'],
+ \ 'diffchange_fg': ['#444444', '238'],
+ \ 'diffchange_bg': ['#ffd787', '222'],
+ \ 'tabline_bg': ['#005f87', '24'],
+ \ 'tabline_active_fg': ['#444444', '238'],
+ \ 'tabline_active_bg': ['#e4e4e4', '254'],
+ \ 'tabline_inactive_fg': ['#eeeeee', '255'],
+ \ 'tabline_inactive_bg': ['#0087af', '31'],
+ \ 'buftabline_bg': ['#005f87', '24'],
+ \ 'buftabline_current_fg': ['#444444', '238'],
+ \ 'buftabline_current_bg': ['#e4e4e4', '254'],
+ \ 'buftabline_active_fg': ['#eeeeee', '255'],
+ \ 'buftabline_active_bg': ['#005faf', '25'],
+ \ 'buftabline_inactive_fg': ['#eeeeee', '255'],
+ \ 'buftabline_inactive_bg': ['#0087af', '31']
+ \ }
+ \ }
+
+ " TODO: idea for subtheme options
+ " let s:themes['default'].light.subtheme = {
+ " \ 'alternative' : {
+ " \ 'options' : {
+ " \ 'transparent_background': 1
+ " \ },
+ " \ 'palette' : {
+ " \ }
+ " \ }
+ " \ }
+
+ let s:themes['default'].dark = {
+ \ 'NO_CONVERSION': 1,
+ \ 'TEST_256_COLOR_CONSISTENCY' : 1,
+ \ 'palette' : {
+ \ 'color00' : ['#1c1c1c', '234'],
+ \ 'color01' : ['#af005f', '125'],
+ \ 'color02' : ['#5faf00', '70'],
+ \ 'color03' : ['#d7af5f', '179'],
+ \ 'color04' : ['#5fafd7', '74'],
+ \ 'color05' : ['#808080', '244'],
+ \ 'color06' : ['#d7875f', '173'],
+ \ 'color07' : ['#d0d0d0', '252'],
+ \ 'color08' : ['#585858', '240'],
+ \ 'color09' : ['#5faf5f', '71'],
+ \ 'color10' : ['#afd700', '148'],
+ \ 'color11' : ['#af87d7', '140'],
+ \ 'color12' : ['#ffaf00', '214'],
+ \ 'color13' : ['#ff5faf', '205'],
+ \ 'color14' : ['#00afaf', '37'],
+ \ 'color15' : ['#5f8787', '66'],
+ \ 'color16' : ['#5fafd7', '74'],
+ \ 'color17' : ['#d7af00', '178'],
+ \ 'cursor_fg' : ['#1c1c1c', '234'],
+ \ 'cursor_bg' : ['#c6c6c6', '251'],
+ \ 'cursorline' : ['#303030', '236'],
+ \ 'cursorcolumn' : ['#303030', '236'],
+ \ 'cursorlinenr_fg' : ['#ffff00', '226'],
+ \ 'cursorlinenr_bg' : ['#1c1c1c', '234'],
+ \ 'popupmenu_fg' : ['#c6c6c6', '251'],
+ \ 'popupmenu_bg' : ['#303030', '236'],
+ \ 'search_fg' : ['#000000', '16'],
+ \ 'search_bg' : ['#00875f', '29'],
+ \ 'linenumber_fg' : ['#585858', '240'],
+ \ 'linenumber_bg' : ['#1c1c1c', '234'],
+ \ 'vertsplit_fg' : ['#5f8787', '66'],
+ \ 'vertsplit_bg' : ['#1c1c1c', '234'],
+ \ 'statusline_active_fg' : ['#1c1c1c', '234'],
+ \ 'statusline_active_bg' : ['#5f8787', '66'],
+ \ 'statusline_inactive_fg' : ['#bcbcbc', '250'],
+ \ 'statusline_inactive_bg' : ['#3a3a3a', '237'],
+ \ 'todo_fg' : ['#ff8700', '208'],
+ \ 'todo_bg' : ['#1c1c1c', '234'],
+ \ 'error_fg' : ['#af005f', '125'],
+ \ 'error_bg' : ['#5f0000', '52'],
+ \ 'matchparen_bg' : ['#4e4e4e', '239'],
+ \ 'matchparen_fg' : ['#c6c6c6', '251'],
+ \ 'visual_fg' : ['#000000', '16'],
+ \ 'visual_bg' : ['#8787af', '103'],
+ \ 'folded_fg' : ['#d787ff', '177'],
+ \ 'folded_bg' : ['#5f005f', '53'],
+ \ 'wildmenu_fg': ['#1c1c1c', '234'],
+ \ 'wildmenu_bg': ['#afd700', '148'],
+ \ 'spellbad': ['#5f0000', '52'],
+ \ 'spellcap': ['#5f005f', '53'],
+ \ 'spellrare': ['#005f00', '22'],
+ \ 'spelllocal': ['#00005f', '17'],
+ \ 'diffadd_fg': ['#87d700', '112'],
+ \ 'diffadd_bg': ['#005f00', '22'],
+ \ 'diffdelete_fg': ['#af005f', '125'],
+ \ 'diffdelete_bg': ['#5f0000', '52'],
+ \ 'difftext_fg': ['#5fffff', '87'],
+ \ 'difftext_bg': ['#008787', '30'],
+ \ 'diffchange_fg': ['#d0d0d0', '252'],
+ \ 'diffchange_bg': ['#005f5f', '23'],
+ \ 'tabline_bg': ['#262626', '235'],
+ \ 'tabline_active_fg': ['#121212', '233'],
+ \ 'tabline_active_bg': ['#00afaf', '37'],
+ \ 'tabline_inactive_fg': ['#bcbcbc', '250'],
+ \ 'tabline_inactive_bg': ['#585858', '240'],
+ \ 'buftabline_bg': ['#262626', '235'],
+ \ 'buftabline_current_fg': ['#121212', '233'],
+ \ 'buftabline_current_bg': ['#00afaf', '37'],
+ \ 'buftabline_active_fg': ['#00afaf', '37'],
+ \ 'buftabline_active_bg': ['#585858', '240'],
+ \ 'buftabline_inactive_fg': ['#bcbcbc', '250'],
+ \ 'buftabline_inactive_bg': ['#585858', '240']
+ \ }
+ \ }
+endfun
+
+" ============================ THEME REGISTER =================================
+
+" Acquire Theme Data: {{{
+
+" Brief:
+" Function to get theme information and store in variables for other
+" functions to use
+"
+" Require:
+" s:themes <dictionary> collection of all theme palettes
+"
+" Require Optionally:
+" {g:PaperColor_Theme_[s:theme_name]} <dictionary> user custom theme palette
+" g:PaperColor_Theme_Options <dictionary> user options
+"
+" Expose:
+" s:theme_name <string> the name of the selected theme
+" s:selected_theme <dictionary> the selected theme object (contains palette, etc.)
+" s:selected_variant <string> 'light' or 'dark'
+" s:palette <dictionary> the palette of selected theme
+" s:options <dictionary> user options
+fun! s:acquire_theme_data()
+
+ " Get theme name: {{{
+ let s:theme_name = 'default'
+
+ if exists("g:PaperColor_Theme") " Users expressed theme preference
+ let lowercase_theme_name = tolower(g:PaperColor_Theme)
+
+ if lowercase_theme_name !=? 'default'
+ let theme_identifier = 'PaperColor_' . lowercase_theme_name
+ let autoload_function = theme_identifier . '#register'
+
+ call {autoload_function}()
+
+ let theme_variable = 'g:' . theme_identifier
+
+ if exists(theme_variable)
+ let s:theme_name = lowercase_theme_name
+ let s:themes[s:theme_name] = {theme_variable}
+ endif
+
+ endif
+
+ endif
+ " }}}
+
+ if s:theme_name ==? 'default'
+ " Either no other theme is specified or they failed to load
+ " Defer loading default theme until now
+ call s:register_default_theme()
+ endif
+
+ let s:selected_theme = s:themes[s:theme_name]
+
+ " Get Theme Variant: either dark or light {{{
+ let s:selected_variant = 'dark'
+
+ let s:is_dark=(&background == 'dark')
+
+ if s:is_dark
+ if has_key(s:selected_theme, 'dark')
+ let s:selected_variant = 'dark'
+ else " in case the theme only provides the other variant
+ let s:selected_variant = 'light'
+ endif
+
+ else " is light background
+ if has_key(s:selected_theme, 'light')
+ let s:selected_variant = 'light'
+ else " in case the theme only provides the other variant
+ let s:selected_variant = 'dark'
+ endif
+ endif
+
+ let s:palette = s:selected_theme[s:selected_variant].palette
+
+ " Systematic User-Config Options: {{{
+ " Example config in .vimrc
+ " let g:PaperColor_Theme_Options = {
+ " \ 'theme': {
+ " \ 'default': {
+ " \ 'allow_bold': 1,
+ " \ 'allow_italic': 0,
+ " \ 'transparent_background': 1
+ " \ }
+ " \ },
+ " \ 'language': {
+ " \ 'python': {
+ " \ 'highlight_builtins' : 1
+ " \ },
+ " \ 'c': {
+ " \ 'highlight_builtins' : 1
+ " \ },
+ " \ 'cpp': {
+ " \ 'highlight_standard_library': 1
+ " \ }
+ " \ }
+ " \ }
+ "
+ let s:options = {}
+
+
+ if exists("g:PaperColor_Theme_Options")
+ let s:options = g:PaperColor_Theme_Options
+ endif
+ " }}}
+
+ " }}}
+endfun
+
+
+" }}}
+
+" Identify Color Mode: {{{
+
+fun! s:identify_color_mode()
+ let s:MODE_16_COLOR = 0
+ let s:MODE_256_COLOR = 1
+ let s:MODE_GUI_COLOR = 2
+
+ if has("gui_running") || has('termguicolors') && &termguicolors || has('nvim') && $NVIM_TUI_ENABLE_TRUE_COLOR
+ let s:mode = s:MODE_GUI_COLOR
+ elseif (&t_Co >= 256)
+ let s:mode = s:MODE_256_COLOR
+ else
+ let s:mode = s:MODE_16_COLOR
+ endif
+endfun
+
+" }}}
+
+" ============================ OPTION HANDLER =================================
+
+" Generate Them Option Variables: {{{
+
+
+fun! s:generate_theme_option_variables()
+ " 0. All possible theme option names must be registered here
+ let l:available_theme_options = [
+ \ 'allow_bold',
+ \ 'allow_italic',
+ \ 'transparent_background',
+ \ ]
+
+ " 1. Generate variables and set to default value
+ for l:option in l:available_theme_options
+ let s:{'themeOpt_' . l:option} = 0
+ endfor
+
+ let s:themeOpt_override = {} " special case, this has to be a dictionary
+
+ " 2. Reassign value to the above variables based on theme settings
+
+ " 2.1 In case the theme has top-level options
+ if has_key(s:selected_theme, 'options')
+ let l:theme_options = s:selected_theme['options']
+ for l:opt_name in keys(l:theme_options)
+ let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name]
+ " echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name}
+ endfor
+ endif
+
+ " 2.2 In case the theme has specific variant options
+ if has_key(s:selected_theme[s:selected_variant], 'options')
+ let l:theme_options = s:selected_theme[s:selected_variant]['options']
+ for l:opt_name in keys(l:theme_options)
+ let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name]
+ " echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name}
+ endfor
+ endif
+
+
+ " 3. Reassign value to the above variables which the user customizes
+ " Part of user-config options
+ let s:theme_options = {}
+ if has_key(s:options, 'theme')
+ let s:theme_options = s:options['theme']
+ endif
+
+ " 3.1 In case user sets for a theme without specifying which variant
+ if has_key(s:theme_options, s:theme_name)
+ let l:theme_options = s:theme_options[s:theme_name]
+ for l:opt_name in keys(l:theme_options)
+ let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name]
+ " echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name}
+ endfor
+ endif
+
+
+ " 3.2 In case user sets for a specific variant of a theme
+
+ " Create the string that the user might have set for this theme variant
+ " for example, 'default.dark'
+ let l:specific_theme_variant = s:theme_name . '.' . s:selected_variant
+
+ if has_key(s:theme_options, l:specific_theme_variant)
+ let l:theme_options = s:theme_options[l:specific_theme_variant]
+ for l:opt_name in keys(l:theme_options)
+ let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name]
+ " echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name}
+ endfor
+ endif
+
+endfun
+" }}}
+
+" Check If Theme Has Hint: {{{
+"
+" Brief:
+" Function to Check if the selected theme and variant has a hint
+"
+" Details:
+" A hint is a known key that has value 1
+" It is not part of theme design but is used for technical purposes
+"
+" Example:
+" If a theme has hint 'NO_CONVERSION', then we can assume that every
+" color value is a complete pair, so we don't have to check.
+
+fun! s:theme_has_hint(hint)
+ return has_key(s:selected_theme[s:selected_variant], a:hint) &&
+ \ s:selected_theme[s:selected_variant][a:hint] == 1
+endfun
+" }}}
+
+" Set Overriding Colors: {{{
+
+fun! s:set_overriding_colors()
+
+ if s:theme_has_hint('NO_CONVERSION')
+ " s:convert_colors will not do anything, so we take care of conversion
+ " for the overriding colors that need to be converted
+
+ if s:mode == s:MODE_GUI_COLOR
+ " if GUI color is not provided, convert from 256 color that must be available
+ if !empty(s:themeOpt_override)
+ call s:load_256_to_GUI_converter()
+ endif
+
+ for l:color in keys(s:themeOpt_override)
+ let l:value = s:themeOpt_override[l:color]
+ if l:value[0] == ''
+ let l:value[0] = s:to_HEX[l:value[1]]
+ endif
+ let s:palette[l:color] = l:value
+ endfor
+
+ elseif s:mode == s:MODE_256_COLOR
+ " if 256 color is not provided, convert from GUI color that must be available
+ if !empty(s:themeOpt_override)
+ call s:load_GUI_to_256_converter()
+ endif
+
+ for l:color in keys(s:themeOpt_override)
+ let l:value = s:themeOpt_override[l:color]
+ if l:value[1] == ''
+ let l:value[1] = s:to_256(l:value[0])
+ endif
+ let s:palette[l:color] = l:value
+ endfor
+ endif
+
+ else " simply set the colors and let s:convert_colors() take care of conversion
+
+ for l:color in keys(s:themeOpt_override)
+ let s:palette[l:color] = s:themeOpt_override[l:color]
+ endfor
+ endif
+
+endfun
+" }}}
+
+" Generate Language Option Variables: {{{
+
+" Brief:
+" Function to generate language option variables so that there is no need to
+" look up from the dictionary every time the option value is checked in the
+" function s:apply_syntax_highlightings()
+"
+" Require:
+" s:options <dictionary> user options
+"
+" Require Optionally:
+" g:PaperColor_Theme_Options <dictionary> user option config in .vimrc
+"
+" Expose:
+" s:langOpt_[LANGUAGE]__[OPTION] <any> variables for language options
+"
+" Example:
+" g:PaperColor_Theme_Options has something like this:
+" 'language': {
+" \ 'python': {
+" \ 'highlight_builtins': 1
+" \ }
+" }
+" The following variable will be generated:
+" s:langOpt_python__highlight_builtins = 1
+
+fun! s:generate_language_option_variables()
+ " 0. All possible theme option names must be registered here
+ let l:available_language_options = [
+ \ 'c__highlight_builtins',
+ \ 'cpp__highlight_standard_library',
+ \ 'python__highlight_builtins'
+ \ ]
+
+ " 1. Generate variables and set to default value
+ for l:option in l:available_language_options
+ let s:{'langOpt_' . l:option} = 0
+ endfor
+
+ " Part of user-config options
+ if has_key(s:options, 'language')
+ let l:language_options = s:options['language']
+ " echo l:language_options
+ for l:lang in keys(l:language_options)
+ let l:options = l:language_options[l:lang]
+ " echo l:lang
+ " echo l:options
+ for l:option in keys(l:options)
+ let s:{'langOpt_' . l:lang . '__' . l:option} = l:options[l:option]
+ " echo 's:langOpt_' . l:lang . '__' . l:option . ' = ' . l:options[l:option]
+ endfor
+ endfor
+
+ endif
+
+endfun
+" }}}
+
+" =========================== COLOR CONVERTER =================================
+
+fun! s:load_GUI_to_256_converter()
+ " GUI-color To 256-color: {{{
+ " Returns an approximate grey index for the given grey level
+ fun! s:grey_number(x)
+ if &t_Co == 88
+ if a:x < 23
+ return 0
+ elseif a:x < 69
+ return 1
+ elseif a:x < 103
+ return 2
+ elseif a:x < 127
+ return 3
+ elseif a:x < 150
+ return 4
+ elseif a:x < 173
+ return 5
+ elseif a:x < 196
+ return 6
+ elseif a:x < 219
+ return 7
+ elseif a:x < 243
+ return 8
+ else
+ return 9
+ endif
+ else
+ if a:x < 14
+ return 0
+ else
+ let l:n = (a:x - 8) / 10
+ let l:m = (a:x - 8) % 10
+ if l:m < 5
+ return l:n
+ else
+ return l:n + 1
+ endif
+ endif
+ endif
+ endfun
+
+ " Returns the actual grey level represented by the grey index
+ fun! s:grey_level(n)
+ if &t_Co == 88
+ if a:n == 0
+ return 0
+ elseif a:n == 1
+ return 46
+ elseif a:n == 2
+ return 92
+ elseif a:n == 3
+ return 115
+ elseif a:n == 4
+ return 139
+ elseif a:n == 5
+ return 162
+ elseif a:n == 6
+ return 185
+ elseif a:n == 7
+ return 208
+ elseif a:n == 8
+ return 231
+ else
+ return 255
+ endif
+ else
+ if a:n == 0
+ return 0
+ else
+ return 8 + (a:n * 10)
+ endif
+ endif
+ endfun
+
+ " Returns the palette index for the given grey index
+ fun! s:grey_colour(n)
+ if &t_Co == 88
+ if a:n == 0
+ return 16
+ elseif a:n == 9
+ return 79
+ else
+ return 79 + a:n
+ endif
+ else
+ if a:n == 0
+ return 16
+ elseif a:n == 25
+ return 231
+ else
+ return 231 + a:n
+ endif
+ endif
+ endfun
+
+ " Returns an approximate colour index for the given colour level
+ fun! s:rgb_number(x)
+ if &t_Co == 88
+ if a:x < 69
+ return 0
+ elseif a:x < 172
+ return 1
+ elseif a:x < 230
+ return 2
+ else
+ return 3
+ endif
+ else
+ if a:x < 75
+ return 0
+ else
+ let l:n = (a:x - 55) / 40
+ let l:m = (a:x - 55) % 40
+ if l:m < 20
+ return l:n
+ else
+ return l:n + 1
+ endif
+ endif
+ endif
+ endfun
+
+ " Returns the actual colour level for the given colour index
+ fun! s:rgb_level(n)
+ if &t_Co == 88
+ if a:n == 0
+ return 0
+ elseif a:n == 1
+ return 139
+ elseif a:n == 2
+ return 205
+ else
+ return 255
+ endif
+ else
+ if a:n == 0
+ return 0
+ else
+ return 55 + (a:n * 40)
+ endif
+ endif
+ endfun
+
+ " Returns the palette index for the given R/G/B colour indices
+ fun! s:rgb_colour(x, y, z)
+ if &t_Co == 88
+ return 16 + (a:x * 16) + (a:y * 4) + a:z
+ else
+ return 16 + (a:x * 36) + (a:y * 6) + a:z
+ endif
+ endfun
+
+ " Returns the palette index to approximate the given R/G/B colour levels
+ fun! s:colour(r, g, b)
+ " Get the closest grey
+ let l:gx = s:grey_number(a:r)
+ let l:gy = s:grey_number(a:g)
+ let l:gz = s:grey_number(a:b)
+
+ " Get the closest colour
+ let l:x = s:rgb_number(a:r)
+ let l:y = s:rgb_number(a:g)
+ let l:z = s:rgb_number(a:b)
+
+ if l:gx == l:gy && l:gy == l:gz
+ " There are two possibilities
+ let l:dgr = s:grey_level(l:gx) - a:r
+ let l:dgg = s:grey_level(l:gy) - a:g
+ let l:dgb = s:grey_level(l:gz) - a:b
+ let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
+ let l:dr = s:rgb_level(l:gx) - a:r
+ let l:dg = s:rgb_level(l:gy) - a:g
+ let l:db = s:rgb_level(l:gz) - a:b
+ let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)
+ if l:dgrey < l:drgb
+ " Use the grey
+ return s:grey_colour(l:gx)
+ else
+ " Use the colour
+ return s:rgb_colour(l:x, l:y, l:z)
+ endif
+ else
+ " Only one possibility
+ return s:rgb_colour(l:x, l:y, l:z)
+ endif
+ endfun
+
+ " Returns the palette index to approximate the '#rrggbb' hex string
+ fun! s:to_256(rgb)
+ let l:r = ("0x" . strpart(a:rgb, 1, 2)) + 0
+ let l:g = ("0x" . strpart(a:rgb, 3, 2)) + 0
+ let l:b = ("0x" . strpart(a:rgb, 5, 2)) + 0
+
+ return s:colour(l:r, l:g, l:b)
+ endfun
+
+
+
+ " }}}
+endfun
+
+fun! s:load_256_to_GUI_converter()
+" 256-color To GUI-color: {{{
+
+""" Xterm 256 color dictionary
+" See: http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html
+"
+let s:to_HEX = {
+ \ '00': '#000000', '01': '#800000', '02': '#008000', '03': '#808000', '04': '#000080',
+ \ '05': '#800080', '06': '#008080', '07': '#c0c0c0', '08': '#808080', '09': '#ff0000',
+ \ '10': '#00ff00', '11': '#ffff00', '12': '#0000ff', '13': '#ff00ff', '14': '#00ffff',
+ \ '15': '#ffffff', '16': '#000000', '17': '#00005f', '18': '#000087', '19': '#0000af',
+ \ '20': '#0000d7', '21': '#0000ff', '22': '#005f00', '23': '#005f5f', '24': '#005f87',
+ \ '25': '#005faf', '26': '#005fd7', '27': '#005fff', '28': '#008700', '29': '#00875f',
+ \ '30': '#008787', '31': '#0087af', '32': '#0087d7', '33': '#0087ff', '34': '#00af00',
+ \ '35': '#00af5f', '36': '#00af87', '37': '#00afaf', '38': '#00afd7', '39': '#00afff',
+ \ '40': '#00d700', '41': '#00d75f', '42': '#00d787', '43': '#00d7af', '44': '#00d7d7',
+ \ '45': '#00d7ff', '46': '#00ff00', '47': '#00ff5f', '48': '#00ff87', '49': '#00ffaf',
+ \ '50': '#00ffd7', '51': '#00ffff', '52': '#5f0000', '53': '#5f005f', '54': '#5f0087',
+ \ '55': '#5f00af', '56': '#5f00d7', '57': '#5f00ff', '58': '#5f5f00', '59': '#5f5f5f',
+ \ '60': '#5f5f87', '61': '#5f5faf', '62': '#5f5fd7', '63': '#5f5fff', '64': '#5f8700',
+ \ '65': '#5f875f', '66': '#5f8787', '67': '#5f87af', '68': '#5f87d7', '69': '#5f87ff',
+ \ '70': '#5faf00', '71': '#5faf5f', '72': '#5faf87', '73': '#5fafaf', '74': '#5fafd7',
+ \ '75': '#5fafff', '76': '#5fd700', '77': '#5fd75f', '78': '#5fd787', '79': '#5fd7af',
+ \ '80': '#5fd7d7', '81': '#5fd7ff', '82': '#5fff00', '83': '#5fff5f', '84': '#5fff87',
+ \ '85': '#5fffaf', '86': '#5fffd7', '87': '#5fffff', '88': '#870000', '89': '#87005f',
+ \ '90': '#870087', '91': '#8700af', '92': '#8700d7', '93': '#8700ff', '94': '#875f00',
+ \ '95': '#875f5f', '96': '#875f87', '97': '#875faf', '98': '#875fd7', '99': '#875fff',
+ \ '100': '#878700', '101': '#87875f', '102': '#878787', '103': '#8787af', '104': '#8787d7',
+ \ '105': '#8787ff', '106': '#87af00', '107': '#87af5f', '108': '#87af87', '109': '#87afaf',
+ \ '110': '#87afd7', '111': '#87afff', '112': '#87d700', '113': '#87d75f', '114': '#87d787',
+ \ '115': '#87d7af', '116': '#87d7d7', '117': '#87d7ff', '118': '#87ff00', '119': '#87ff5f',
+ \ '120': '#87ff87', '121': '#87ffaf', '122': '#87ffd7', '123': '#87ffff', '124': '#af0000',
+ \ '125': '#af005f', '126': '#af0087', '127': '#af00af', '128': '#af00d7', '129': '#af00ff',
+ \ '130': '#af5f00', '131': '#af5f5f', '132': '#af5f87', '133': '#af5faf', '134': '#af5fd7',
+ \ '135': '#af5fff', '136': '#af8700', '137': '#af875f', '138': '#af8787', '139': '#af87af',
+ \ '140': '#af87d7', '141': '#af87ff', '142': '#afaf00', '143': '#afaf5f', '144': '#afaf87',
+ \ '145': '#afafaf', '146': '#afafd7', '147': '#afafff', '148': '#afd700', '149': '#afd75f',
+ \ '150': '#afd787', '151': '#afd7af', '152': '#afd7d7', '153': '#afd7ff', '154': '#afff00',
+ \ '155': '#afff5f', '156': '#afff87', '157': '#afffaf', '158': '#afffd7', '159': '#afffff',
+ \ '160': '#d70000', '161': '#d7005f', '162': '#d70087', '163': '#d700af', '164': '#d700d7',
+ \ '165': '#d700ff', '166': '#d75f00', '167': '#d75f5f', '168': '#d75f87', '169': '#d75faf',
+ \ '170': '#d75fd7', '171': '#d75fff', '172': '#d78700', '173': '#d7875f', '174': '#d78787',
+ \ '175': '#d787af', '176': '#d787d7', '177': '#d787ff', '178': '#d7af00', '179': '#d7af5f',
+ \ '180': '#d7af87', '181': '#d7afaf', '182': '#d7afd7', '183': '#d7afff', '184': '#d7d700',
+ \ '185': '#d7d75f', '186': '#d7d787', '187': '#d7d7af', '188': '#d7d7d7', '189': '#d7d7ff',
+ \ '190': '#d7ff00', '191': '#d7ff5f', '192': '#d7ff87', '193': '#d7ffaf', '194': '#d7ffd7',
+ \ '195': '#d7ffff', '196': '#ff0000', '197': '#ff005f', '198': '#ff0087', '199': '#ff00af',
+ \ '200': '#ff00d7', '201': '#ff00ff', '202': '#ff5f00', '203': '#ff5f5f', '204': '#ff5f87',
+ \ '205': '#ff5faf', '206': '#ff5fd7', '207': '#ff5fff', '208': '#ff8700', '209': '#ff875f',
+ \ '210': '#ff8787', '211': '#ff87af', '212': '#ff87d7', '213': '#ff87ff', '214': '#ffaf00',
+ \ '215': '#ffaf5f', '216': '#ffaf87', '217': '#ffafaf', '218': '#ffafd7', '219': '#ffafff',
+ \ '220': '#ffd700', '221': '#ffd75f', '222': '#ffd787', '223': '#ffd7af', '224': '#ffd7d7',
+ \ '225': '#ffd7ff', '226': '#ffff00', '227': '#ffff5f', '228': '#ffff87', '229': '#ffffaf',
+ \ '230': '#ffffd7', '231': '#ffffff', '232': '#080808', '233': '#121212', '234': '#1c1c1c',
+ \ '235': '#262626', '236': '#303030', '237': '#3a3a3a', '238': '#444444', '239': '#4e4e4e',
+ \ '240': '#585858', '241': '#626262', '242': '#6c6c6c', '243': '#767676', '244': '#808080',
+ \ '245': '#8a8a8a', '246': '#949494', '247': '#9e9e9e', '248': '#a8a8a8', '249': '#b2b2b2',
+ \ '250': '#bcbcbc', '251': '#c6c6c6', '252': '#d0d0d0', '253': '#dadada', '254': '#e4e4e4',
+ \ '255': '#eeeeee' }
+
+" }}}
+endfun
+
+" ========================== ENVIRONMENT ADAPTER ==============================
+
+" Set Format Attributes: {{{
+
+fun! s:set_format_attributes()
+ " These are the default
+ if s:mode == s:MODE_GUI_COLOR
+ let s:ft_bold = " cterm=bold gui=bold "
+ let s:ft_none = " cterm=none gui=none "
+ let s:ft_reverse = " cterm=reverse gui=reverse "
+ let s:ft_italic = " cterm=italic gui=italic "
+ let s:ft_italic_bold = " cterm=italic,bold gui=italic,bold "
+ elseif s:mode == s:MODE_256_COLOR
+ let s:ft_bold = " cterm=bold "
+ let s:ft_none = " cterm=none "
+ let s:ft_reverse = " cterm=reverse "
+ let s:ft_italic = " cterm=italic "
+ let s:ft_italic_bold = " cterm=italic,bold "
+ else
+ let s:ft_bold = ""
+ let s:ft_none = " cterm=none "
+ let s:ft_reverse = " cterm=reverse "
+ let s:ft_italic = ""
+ let s:ft_italic_bold = ""
+ endif
+
+ " Unless instructed otherwise either by theme setting or user overriding
+
+ if s:themeOpt_allow_bold == 0
+ let s:ft_bold = ""
+ endif
+ if s:themeOpt_allow_italic == 0
+ let s:ft_italic = ""
+ let s:ft_italic_bold = s:ft_bold
+ endif
+
+endfun
+
+" }}}
+
+" Convert Colors If Needed: {{{
+fun! s:convert_colors()
+ if s:theme_has_hint('NO_CONVERSION')
+ return
+ endif
+
+ if s:mode == s:MODE_GUI_COLOR
+ " if GUI color is not provided, convert from 256 color that must be available
+ call s:load_256_to_GUI_converter()
+
+ for l:color in keys(s:palette)
+ let l:value = s:palette[l:color]
+ if l:value[0] == ''
+ let l:value[0] = s:to_HEX[l:value[1]]
+ endif
+ let s:palette[l:color] = l:value
+ endfor
+
+ elseif s:mode == s:MODE_256_COLOR
+ " if 256 color is not provided, convert from GUI color that must be available
+ call s:load_GUI_to_256_converter()
+
+ for l:color in keys(s:palette)
+ let l:value = s:palette[l:color]
+ if l:value[1] == ''
+ let l:value[1] = s:to_256(l:value[0])
+ endif
+ let s:palette[l:color] = l:value
+ endfor
+ endif
+ " otherwise use the terminal colors and none of the theme colors are used
+endfun
+
+" }}}
+
+" ============================ COLOR POPULARIZER ===============================
+
+" Set Color Variables: {{{
+fun! s:set_color_variables()
+
+ " Helper: {{{
+ " -------
+ " Function to dynamically generate variables that store the color strings
+ " for setting highlighting. Each color name will have 2 variables with prefix
+ " s:fg_ and s:bg_. For example:
+ " if a:color_name is 'Normal' and a:color_value is ['#000000', '0', 'Black'],
+ " the following 2 variables will be created:
+ " s:fg_Normal that stores the string ' guifg=#000000 '
+ " s:bg_Normal that stores the string ' guibg=#000000 '
+ " Depending on the color mode, ctermfg and ctermbg will be either 0 or Black
+ "
+ " Rationale:
+ " The whole purpose is for speed. We generate these ahead of time so that we
+ " don't have to do look up or do any if-branch when we set the highlightings.
+ "
+ " Furthermore, multiple function definitions for each mode actually reduces
+ " the need for multiple if-branches inside a single function. This is not
+ " pretty, but Vim Script is slow, so reducing if-branches in function that is
+ " often called helps speeding things up quite a bit. Think of this like macro.
+ "
+ " If you are familiar with the old code base (v0.9 and ealier), this way of
+ " generate variables dramatically reduces the loading speed.
+ " None of previous optimization tricks gets anywhere near this.
+ if s:mode == s:MODE_GUI_COLOR
+ fun! s:create_color_variables(color_name, rich_color, term_color)
+ let {'s:fg_' . a:color_name} = ' guifg=' . a:rich_color[0] . ' '
+ let {'s:bg_' . a:color_name} = ' guibg=' . a:rich_color[0] . ' '
+ endfun
+ elseif s:mode == s:MODE_256_COLOR
+ fun! s:create_color_variables(color_name, rich_color, term_color)
+ let {'s:fg_' . a:color_name} = ' ctermfg=' . a:rich_color[1] . ' '
+ let {'s:bg_' . a:color_name} = ' ctermbg=' . a:rich_color[1] . ' '
+ endfun
+ else
+ fun! s:create_color_variables(color_name, rich_color, term_color)
+ let {'s:fg_' . a:color_name} = ' ctermfg=' . a:term_color . ' '
+ let {'s:bg_' . a:color_name} = ' ctermbg=' . a:term_color . ' '
+ endfun
+ endif
+ " }}}
+
+ " Color value format: Array [<GUI COLOR/HEX >, <256-Base>, <16-Base>]
+ " 16-Base is terminal's native color palette that can be alternated through
+ " the terminal settings. The 16-color names are according to `:h cterm-colors`
+
+ " BASIC COLORS:
+ " color00-15 are required by all themes.
+ " These are also how the terminal color palette for the target theme should be.
+ " See README for theme design guideline
+ "
+ " An example format of the below variable's value: ['#262626', '234', 'Black']
+ " Where the 1st value is HEX color for GUI Vim, 2nd value is for 256-color terminal,
+ " and the color name on the right is for 16-color terminal (the actual terminal colors
+ " can be different from what the color names suggest). See :h cterm-colors
+ "
+ " Depending on the provided color palette and current Vim, the 1st and 2nd
+ " parameter might not exist, for example, on 16-color terminal, the variables below
+ " only store the color names to use the terminal color palette which is the only
+ " thing available therefore no need for GUI-color or 256-color.
+
+ let color00 = get(s:palette, 'color00')
+ let color01 = get(s:palette, 'color01')
+ let color02 = get(s:palette, 'color02')
+ let color03 = get(s:palette, 'color03')
+ let color04 = get(s:palette, 'color04')
+ let color05 = get(s:palette, 'color05')
+ let color06 = get(s:palette, 'color06')
+ let color07 = get(s:palette, 'color07')
+ let color08 = get(s:palette, 'color08')
+ let color09 = get(s:palette, 'color09')
+ let color10 = get(s:palette, 'color10')
+ let color11 = get(s:palette, 'color11')
+ let color12 = get(s:palette, 'color12')
+ let color13 = get(s:palette, 'color13')
+ let color14 = get(s:palette, 'color14')
+ let color15 = get(s:palette, 'color15')
+
+ call s:create_color_variables('background', color00 , 'Black')
+ call s:create_color_variables('negative', color01 , 'DarkRed')
+ call s:create_color_variables('positive', color02 , 'DarkGreen')
+ call s:create_color_variables('olive', color03 , 'DarkYellow') " string
+ call s:create_color_variables('neutral', color04 , 'DarkBlue')
+ call s:create_color_variables('comment', color05 , 'DarkMagenta')
+ call s:create_color_variables('navy', color06 , 'DarkCyan') " storageclass
+ call s:create_color_variables('foreground', color07 , 'LightGray')
+
+ call s:create_color_variables('nontext', color08 , 'DarkGray')
+ call s:create_color_variables('red', color09 , 'LightRed') " import / try/catch
+ call s:create_color_variables('pink', color10 , 'LightGreen') " statement, type
+ call s:create_color_variables('purple', color11 , 'LightYellow') " if / conditional
+ call s:create_color_variables('accent', color12 , 'LightBlue')
+ call s:create_color_variables('orange', color13 , 'LightMagenta') " number
+ call s:create_color_variables('blue', color14 , 'LightCyan') " other keyword
+ call s:create_color_variables('highlight', color15 , 'White')
+
+ " Note: special case for FoldColumn group. I want to get rid of this case.
+ call s:create_color_variables('transparent', [color00[0], 'none'], 'none')
+
+ " EXTENDED COLORS:
+ " From here on, all colors are optional and must have default values (3rd parameter of the
+ " `get` command) that point to the above basic colors in case the target theme doesn't
+ " provide the extended colors. The default values should be reasonably sensible.
+ " The terminal color must be provided also.
+
+ call s:create_color_variables('aqua', get(s:palette, 'color16', color14) , 'LightCyan')
+ call s:create_color_variables('green', get(s:palette, 'color17', color13) , 'LightMagenta')
+ call s:create_color_variables('wine', get(s:palette, 'color18', color11) , 'LightYellow')
+
+ " LineNumber: when set number
+ call s:create_color_variables('linenumber_fg', get(s:palette, 'linenumber_fg', color08) , 'DarkGray')
+ call s:create_color_variables('linenumber_bg', get(s:palette, 'linenumber_bg', color00) , 'Black')
+
+ " Vertical Split: when there are more than 1 window side by side, ex: <C-W><C-V>
+ call s:create_color_variables('vertsplit_fg', get(s:palette, 'vertsplit_fg', color15) , 'White')
+ call s:create_color_variables('vertsplit_bg', get(s:palette, 'vertsplit_bg', color00) , 'Black')
+
+ " Statusline: when set status=2
+ call s:create_color_variables('statusline_active_fg', get(s:palette, 'statusline_active_fg', color00) , 'Black')
+ call s:create_color_variables('statusline_active_bg', get(s:palette, 'statusline_active_bg', color15) , 'White')
+ call s:create_color_variables('statusline_inactive_fg', get(s:palette, 'statusline_inactive_fg', color07) , 'LightGray')
+ call s:create_color_variables('statusline_inactive_bg', get(s:palette, 'statusline_inactive_bg', color08) , 'DarkGray')
+
+
+ " Cursor: in normal mode
+ call s:create_color_variables('cursor_fg', get(s:palette, 'cursor_fg', color00) , 'Black')
+ call s:create_color_variables('cursor_bg', get(s:palette, 'cursor_bg', color07) , 'LightGray')
+
+ call s:create_color_variables('cursorline', get(s:palette, 'cursorline', color00) , 'Black')
+
+ " CursorColumn: when set cursorcolumn
+ call s:create_color_variables('cursorcolumn', get(s:palette, 'cursorcolumn', color00) , 'Black')
+
+ " CursorLine Number: when set cursorline number
+ call s:create_color_variables('cursorlinenr_fg', get(s:palette, 'cursorlinenr_fg', color13) , 'LightMagenta')
+ call s:create_color_variables('cursorlinenr_bg', get(s:palette, 'cursorlinenr_bg', color00) , 'Black')
+
+ " Popup Menu: when <C-X><C-N> for autocomplete
+ call s:create_color_variables('popupmenu_fg', get(s:palette, 'popupmenu_fg', color07) , 'LightGray')
+ call s:create_color_variables('popupmenu_bg', get(s:palette, 'popupmenu_bg', color08) , 'DarkGray') " TODO: double check this, might resolve an issue
+
+ " Search: ex: when * on a word
+ call s:create_color_variables('search_fg', get(s:palette, 'search_fg', color00) , 'Black')
+ call s:create_color_variables('search_bg', get(s:palette, 'search_bg', color15) , 'Yellow')
+
+ " Todo: ex: TODO
+ call s:create_color_variables('todo_fg', get(s:palette, 'todo_fg', color05) , 'LightYellow')
+ call s:create_color_variables('todo_bg', get(s:palette, 'todo_bg', color00) , 'Black')
+
+ " Error: ex: turn spell on and have invalid words
+ call s:create_color_variables('error_fg', get(s:palette, 'error_fg', color01) , 'DarkRed')
+ call s:create_color_variables('error_bg', get(s:palette, 'error_bg', color00) , 'Black')
+
+ " Match Parenthesis: selecting an opening/closing pair and the other one will be highlighted
+ call s:create_color_variables('matchparen_fg', get(s:palette, 'matchparen_fg', color00) , 'LightMagenta')
+ call s:create_color_variables('matchparen_bg', get(s:palette, 'matchparen_bg', color05) , 'Black')
+
+ " Visual:
+ call s:create_color_variables('visual_fg', get(s:palette, 'visual_fg', color08) , 'Black')
+ call s:create_color_variables('visual_bg', get(s:palette, 'visual_bg', color07) , 'White')
+
+ " Folded:
+ call s:create_color_variables('folded_fg', get(s:palette, 'folded_fg', color00) , 'Black')
+ call s:create_color_variables('folded_bg', get(s:palette, 'folded_bg', color05) , 'DarkYellow')
+
+ " WildMenu: Autocomplete command, ex: :color <tab><tab>
+ call s:create_color_variables('wildmenu_fg', get(s:palette, 'wildmenu_fg', color00) , 'Black')
+ call s:create_color_variables('wildmenu_bg', get(s:palette, 'wildmenu_bg', color06) , 'LightGray')
+
+ " Spelling: when spell on and there are spelling problems like this for example: papercolor. a vim color scheme
+ call s:create_color_variables('spellbad', get(s:palette, 'spellbad', color04) , 'DarkRed')
+ call s:create_color_variables('spellcap', get(s:palette, 'spellcap', color05) , 'DarkMagenta')
+ call s:create_color_variables('spellrare', get(s:palette, 'spellrare', color06) , 'DarkYellow')
+ call s:create_color_variables('spelllocal', get(s:palette, 'spelllocal', color01) , 'DarkBlue')
+
+ " Diff:
+ call s:create_color_variables('diffadd_fg', get(s:palette, 'diffadd_fg', color00) , 'Black')
+ call s:create_color_variables('diffadd_bg', get(s:palette, 'diffadd_bg', color02) , 'DarkGreen')
+
+ call s:create_color_variables('diffdelete_fg', get(s:palette, 'diffdelete_fg', color00) , 'Black')
+ call s:create_color_variables('diffdelete_bg', get(s:palette, 'diffdelete_bg', color04) , 'DarkRed')
+
+ call s:create_color_variables('difftext_fg', get(s:palette, 'difftext_fg', color00) , 'Black')
+ call s:create_color_variables('difftext_bg', get(s:palette, 'difftext_bg', color06) , 'DarkYellow')
+
+ call s:create_color_variables('diffchange_fg', get(s:palette, 'diffchange_fg', color00) , 'Black')
+ call s:create_color_variables('diffchange_bg', get(s:palette, 'diffchange_bg', color14) , 'LightYellow')
+
+ " Tabline: when having tabs, ex: :tabnew
+ call s:create_color_variables('tabline_bg', get(s:palette, 'tabline_bg', color00) , 'Black')
+ call s:create_color_variables('tabline_active_fg', get(s:palette, 'tabline_active_fg', color07) , 'LightGray')
+ call s:create_color_variables('tabline_active_bg', get(s:palette, 'tabline_active_bg', color00) , 'Black')
+ call s:create_color_variables('tabline_inactive_fg', get(s:palette, 'tabline_inactive_fg', color07) , 'Black')
+ call s:create_color_variables('tabline_inactive_bg', get(s:palette, 'tabline_inactive_bg', color08) , 'DarkMagenta')
+
+ " Plugin: BufTabLine https://github.com/ap/vim-buftabline
+ call s:create_color_variables('buftabline_bg', get(s:palette, 'buftabline_bg', color00) , 'Black')
+ call s:create_color_variables('buftabline_current_fg', get(s:palette, 'buftabline_current_fg', color07) , 'LightGray')
+ call s:create_color_variables('buftabline_current_bg', get(s:palette, 'buftabline_current_bg', color05) , 'DarkMagenta')
+ call s:create_color_variables('buftabline_active_fg', get(s:palette, 'buftabline_active_fg', color07) , 'LightGray')
+ call s:create_color_variables('buftabline_active_bg', get(s:palette, 'buftabline_active_bg', color12) , 'LightBlue')
+ call s:create_color_variables('buftabline_inactive_fg', get(s:palette, 'buftabline_inactive_fg', color07) , 'LightGray')
+ call s:create_color_variables('buftabline_inactive_bg', get(s:palette, 'buftabline_inactive_bg', color00) , 'Black')
+
+ " Neovim terminal colors https://neovim.io/doc/user/nvim_terminal_emulator.html#nvim-terminal-emulator-configuration
+ " TODO: Fix this
+ let g:terminal_color_0 = color00[0]
+ let g:terminal_color_1 = color01[0]
+ let g:terminal_color_2 = color02[0]
+ let g:terminal_color_3 = color03[0]
+ let g:terminal_color_4 = color04[0]
+ let g:terminal_color_5 = color05[0]
+ let g:terminal_color_6 = color06[0]
+ let g:terminal_color_7 = color07[0]
+ let g:terminal_color_8 = color08[0]
+ let g:terminal_color_9 = color09[0]
+ let g:terminal_color_10 = color10[0]
+ let g:terminal_color_11 = color11[0]
+ let g:terminal_color_12 = color12[0]
+ let g:terminal_color_13 = color13[0]
+ let g:terminal_color_14 = color14[0]
+ let g:terminal_color_15 = color15[0]
+
+ " Vim 8's :terminal buffer ANSI colors
+ if has('terminal')
+ let g:terminal_ansi_colors = [color00[0], color01[0], color02[0], color03[0],
+ \ color04[0], color05[0], color06[0], color07[0], color08[0], color09[0],
+ \ color10[0], color11[0], color12[0], color13[0], color14[0], color15[0]]
+ endif
+
+endfun
+" }}}
+
+" Apply Syntax Highlightings: {{{
+
+fun! s:apply_syntax_highlightings()
+
+ if s:themeOpt_transparent_background
+ exec 'hi Normal' . s:fg_foreground
+ " Switching between dark & light variant through `set background`
+ " NOTE: Handle background switching right after `Normal` group because of
+ " God-know-why reason. Not doing this way had caused issue before
+ if s:is_dark " DARK VARIANT
+ set background=dark
+ else " LIGHT VARIANT
+ set background=light
+ endif
+
+ exec 'hi NonText' . s:fg_nontext
+ exec 'hi LineNr' . s:fg_linenumber_fg
+ exec 'hi Conceal' . s:fg_linenumber_fg
+ exec 'hi VertSplit' . s:fg_vertsplit_fg . s:ft_none
+ exec 'hi FoldColumn' . s:fg_folded_fg . s:bg_transparent . s:ft_none
+ else
+ exec 'hi Normal' . s:fg_foreground . s:bg_background
+ " Switching between dark & light variant through `set background`
+ if s:is_dark " DARK VARIANT
+ set background=dark
+ exec 'hi EndOfBuffer' . s:fg_cursor_fg . s:ft_none
+ else " LIGHT VARIANT
+ set background=light
+ endif
+
+ exec 'hi NonText' . s:fg_nontext . s:bg_background
+ exec 'hi LineNr' . s:fg_linenumber_fg . s:bg_linenumber_bg
+ exec 'hi Conceal' . s:fg_linenumber_fg . s:bg_linenumber_bg
+ exec 'hi VertSplit' . s:fg_vertsplit_bg . s:bg_vertsplit_fg
+ exec 'hi FoldColumn' . s:fg_folded_fg . s:bg_background . s:ft_none
+ endif
+
+ exec 'hi Cursor' . s:fg_cursor_fg . s:bg_cursor_bg
+ exec 'hi SpecialKey' . s:fg_nontext
+ exec 'hi Search' . s:fg_search_fg . s:bg_search_bg
+ exec 'hi StatusLine' . s:fg_statusline_active_bg . s:bg_statusline_active_fg
+ exec 'hi StatusLineNC' . s:fg_statusline_inactive_bg . s:bg_statusline_inactive_fg
+ exec 'hi StatusLineTerm' . s:fg_statusline_active_bg . s:bg_statusline_active_fg
+ exec 'hi StatusLineTermNC' . s:fg_statusline_inactive_bg . s:bg_statusline_inactive_fg
+ exec 'hi Visual' . s:fg_visual_fg . s:bg_visual_bg
+ exec 'hi Directory' . s:fg_blue
+ exec 'hi ModeMsg' . s:fg_olive
+ exec 'hi MoreMsg' . s:fg_olive
+ exec 'hi Question' . s:fg_olive
+ exec 'hi WarningMsg' . s:fg_pink
+ exec 'hi MatchParen' . s:fg_matchparen_fg . s:bg_matchparen_bg
+ exec 'hi Folded' . s:fg_folded_fg . s:bg_folded_bg
+ exec 'hi WildMenu' . s:fg_wildmenu_fg . s:bg_wildmenu_bg . s:ft_bold
+
+ if version >= 700
+ exec 'hi CursorLine' . s:bg_cursorline . s:ft_none
+ if s:mode == s:MODE_16_COLOR
+ exec 'hi CursorLineNr' . s:fg_cursorlinenr_fg . s:bg_cursorlinenr_bg
+ else
+ exec 'hi CursorLineNr' . s:fg_cursorlinenr_fg . s:bg_cursorlinenr_bg . s:ft_none
+ endif
+ exec 'hi CursorColumn' . s:bg_cursorcolumn . s:ft_none
+ exec 'hi PMenu' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none
+ exec 'hi PMenuSel' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_reverse
+ if s:themeOpt_transparent_background
+ exec 'hi SignColumn' . s:fg_green . s:ft_none
+ else
+ exec 'hi SignColumn' . s:fg_green . s:bg_background . s:ft_none
+ endif
+ end
+ if version >= 703
+ exec 'hi ColorColumn' . s:bg_cursorcolumn . s:ft_none
+ end
+
+ exec 'hi TabLine' . s:fg_tabline_inactive_fg . s:bg_tabline_inactive_bg . s:ft_none
+ exec 'hi TabLineFill' . s:fg_tabline_bg . s:bg_tabline_bg . s:ft_none
+ exec 'hi TabLineSel' . s:fg_tabline_active_fg . s:bg_tabline_active_bg . s:ft_none
+
+ exec 'hi BufTabLineCurrent' . s:fg_buftabline_current_fg . s:bg_buftabline_current_bg . s:ft_none
+ exec 'hi BufTabLineActive' . s:fg_buftabline_active_fg . s:bg_buftabline_active_bg . s:ft_none
+ exec 'hi BufTabLineHidden' . s:fg_buftabline_inactive_fg . s:bg_buftabline_inactive_bg . s:ft_none
+ exec 'hi BufTabLineFill' . s:bg_buftabline_bg . s:ft_none
+
+ " Standard Group Highlighting:
+ exec 'hi Comment' . s:fg_comment . s:ft_italic
+
+ exec 'hi Constant' . s:fg_orange
+ exec 'hi String' . s:fg_olive
+ exec 'hi Character' . s:fg_olive
+ exec 'hi Number' . s:fg_orange
+ exec 'hi Boolean' . s:fg_green . s:ft_bold
+ exec 'hi Float' . s:fg_orange
+
+ exec 'hi Identifier' . s:fg_navy
+ exec 'hi Function' . s:fg_foreground
+
+ exec 'hi Statement' . s:fg_pink . s:ft_none
+ exec 'hi Conditional' . s:fg_purple . s:ft_bold
+ exec 'hi Repeat' . s:fg_purple . s:ft_bold
+ exec 'hi Label' . s:fg_blue
+ exec 'hi Operator' . s:fg_aqua . s:ft_none
+ exec 'hi Keyword' . s:fg_blue
+ exec 'hi Exception' . s:fg_red
+
+ exec 'hi PreProc' . s:fg_blue
+ exec 'hi Include' . s:fg_red
+ exec 'hi Define' . s:fg_blue
+ exec 'hi Macro' . s:fg_blue
+ exec 'hi PreCondit' . s:fg_aqua
+
+ exec 'hi Type' . s:fg_pink . s:ft_bold
+ exec 'hi StorageClass' . s:fg_navy . s:ft_bold
+ exec 'hi Structure' . s:fg_blue . s:ft_bold
+ exec 'hi Typedef' . s:fg_pink . s:ft_bold
+
+ exec 'hi Special' . s:fg_foreground
+ exec 'hi SpecialChar' . s:fg_foreground
+ exec 'hi Tag' . s:fg_green
+ exec 'hi Delimiter' . s:fg_aqua
+ exec 'hi SpecialComment' . s:fg_comment . s:ft_bold
+ exec 'hi Debug' . s:fg_orange
+
+ exec 'hi Error' . s:fg_error_fg . s:bg_error_bg
+ exec 'hi Todo' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold
+
+ exec 'hi Title' . s:fg_comment
+ exec 'hi Global' . s:fg_blue
+
+
+ " Extension {{{
+ " VimL Highlighting
+ exec 'hi vimCommand' . s:fg_pink
+ exec 'hi vimVar' . s:fg_navy
+ exec 'hi vimFuncKey' . s:fg_pink
+ exec 'hi vimFunction' . s:fg_blue . s:ft_bold
+ exec 'hi vimNotFunc' . s:fg_pink
+ exec 'hi vimMap' . s:fg_red
+ exec 'hi vimAutoEvent' . s:fg_aqua . s:ft_bold
+ exec 'hi vimMapModKey' . s:fg_aqua
+ exec 'hi vimFuncName' . s:fg_purple
+ exec 'hi vimIsCommand' . s:fg_foreground
+ exec 'hi vimFuncVar' . s:fg_aqua
+ exec 'hi vimLet' . s:fg_red
+ exec 'hi vimContinue' . s:fg_aqua
+ exec 'hi vimMapRhsExtend' . s:fg_foreground
+ exec 'hi vimCommentTitle' . s:fg_comment . s:ft_italic_bold
+ exec 'hi vimBracket' . s:fg_aqua
+ exec 'hi vimParenSep' . s:fg_aqua
+ exec 'hi vimNotation' . s:fg_aqua
+ exec 'hi vimOper' . s:fg_foreground
+ exec 'hi vimOperParen' . s:fg_foreground
+ exec 'hi vimSynType' . s:fg_purple
+ exec 'hi vimSynReg' . s:fg_pink . s:ft_none
+ exec 'hi vimSynRegion' . s:fg_foreground
+ exec 'hi vimSynMtchGrp' . s:fg_pink
+ exec 'hi vimSynNextgroup' . s:fg_pink
+ exec 'hi vimSynKeyRegion' . s:fg_green
+ exec 'hi vimSynRegOpt' . s:fg_blue
+ exec 'hi vimSynMtchOpt' . s:fg_blue
+ exec 'hi vimSynContains' . s:fg_pink
+ exec 'hi vimGroupName' . s:fg_foreground
+ exec 'hi vimGroupList' . s:fg_foreground
+ exec 'hi vimHiGroup' . s:fg_foreground
+ exec 'hi vimGroup' . s:fg_navy . s:ft_bold
+ exec 'hi vimOnlyOption' . s:fg_blue
+
+ " Makefile Highlighting
+ exec 'hi makeIdent' . s:fg_blue
+ exec 'hi makeSpecTarget' . s:fg_olive
+ exec 'hi makeTarget' . s:fg_red
+ exec 'hi makeStatement' . s:fg_aqua . s:ft_bold
+ exec 'hi makeCommands' . s:fg_foreground
+ exec 'hi makeSpecial' . s:fg_orange . s:ft_bold
+
+ " CMake Highlighting (Builtin)
+ exec 'hi cmakeStatement' . s:fg_blue
+ exec 'hi cmakeArguments' . s:fg_foreground
+ exec 'hi cmakeVariableValue' . s:fg_pink
+
+ " CMake Highlighting (Plugin: https://github.com/pboettch/vim-cmake-syntax)
+ exec 'hi cmakeCommand' . s:fg_blue
+ exec 'hi cmakeCommandConditional' . s:fg_purple . s:ft_bold
+ exec 'hi cmakeKWset' . s:fg_orange
+ exec 'hi cmakeKWvariable_watch' . s:fg_orange
+ exec 'hi cmakeKWif' . s:fg_orange
+ exec 'hi cmakeArguments' . s:fg_foreground
+ exec 'hi cmakeKWproject' . s:fg_pink
+ exec 'hi cmakeGeneratorExpressions' . s:fg_orange
+ exec 'hi cmakeGeneratorExpression' . s:fg_aqua
+ exec 'hi cmakeVariable' . s:fg_pink
+ exec 'hi cmakeProperty' . s:fg_aqua
+ exec 'hi cmakeKWforeach' . s:fg_aqua
+ exec 'hi cmakeKWunset' . s:fg_aqua
+ exec 'hi cmakeKWmacro' . s:fg_aqua
+ exec 'hi cmakeKWget_property' . s:fg_aqua
+ exec 'hi cmakeKWset_tests_properties' . s:fg_aqua
+ exec 'hi cmakeKWmessage' . s:fg_aqua
+ exec 'hi cmakeKWinstall_targets' . s:fg_orange
+ exec 'hi cmakeKWsource_group' . s:fg_orange
+ exec 'hi cmakeKWfind_package' . s:fg_aqua
+ exec 'hi cmakeKWstring' . s:fg_olive
+ exec 'hi cmakeKWinstall' . s:fg_aqua
+ exec 'hi cmakeKWtarget_sources' . s:fg_orange
+
+ " C Highlighting
+ exec 'hi cType' . s:fg_pink . s:ft_bold
+ exec 'hi cFormat' . s:fg_olive
+ exec 'hi cStorageClass' . s:fg_navy . s:ft_bold
+
+ exec 'hi cBoolean' . s:fg_green . s:ft_bold
+ exec 'hi cCharacter' . s:fg_olive
+ exec 'hi cConstant' . s:fg_green . s:ft_bold
+ exec 'hi cConditional' . s:fg_purple . s:ft_bold
+ exec 'hi cSpecial' . s:fg_olive . s:ft_bold
+ exec 'hi cDefine' . s:fg_blue
+ exec 'hi cNumber' . s:fg_orange
+ exec 'hi cPreCondit' . s:fg_aqua
+ exec 'hi cRepeat' . s:fg_purple . s:ft_bold
+ exec 'hi cLabel' . s:fg_aqua
+ " exec 'hi cAnsiFunction' . s:fg_aqua . s:ft_bold
+ " exec 'hi cAnsiName' . s:fg_pink
+ exec 'hi cDelimiter' . s:fg_blue
+ " exec 'hi cBraces' . s:fg_foreground
+ " exec 'hi cIdentifier' . s:fg_blue . s:bg_pink
+ " exec 'hi cSemiColon' . s:bg_blue
+ exec 'hi cOperator' . s:fg_aqua
+ " exec 'hi cStatement' . s:fg_pink
+ " exec 'hi cTodo' . s:fg_comment . s:ft_bold
+ " exec 'hi cStructure' . s:fg_blue . s:ft_bold
+ exec 'hi cCustomParen' . s:fg_foreground
+ " exec 'hi cCustomFunc' . s:fg_foreground
+ " exec 'hi cUserFunction' . s:fg_blue . s:ft_bold
+ exec 'hi cOctalZero' . s:fg_purple . s:ft_bold
+ if s:langOpt_c__highlight_builtins == 1
+ exec 'hi cFunction' . s:fg_blue
+ else
+ exec 'hi cFunction' . s:fg_foreground
+ endif
+
+ " CPP highlighting
+ exec 'hi cppBoolean' . s:fg_green . s:ft_bold
+ exec 'hi cppSTLnamespace' . s:fg_purple
+ exec 'hi cppSTLexception' . s:fg_pink
+ exec 'hi cppSTLfunctional' . s:fg_foreground . s:ft_bold
+ exec 'hi cppSTLiterator' . s:fg_foreground . s:ft_bold
+ exec 'hi cppExceptions' . s:fg_red
+ exec 'hi cppStatement' . s:fg_blue
+ exec 'hi cppStorageClass' . s:fg_navy . s:ft_bold
+ exec 'hi cppAccess' . s:fg_orange . s:ft_bold
+ if s:langOpt_cpp__highlight_standard_library == 1
+ exec 'hi cppSTLconstant' . s:fg_green . s:ft_bold
+ exec 'hi cppSTLtype' . s:fg_pink . s:ft_bold
+ exec 'hi cppSTLfunction' . s:fg_blue
+ exec 'hi cppSTLios' . s:fg_olive . s:ft_bold
+ else
+ exec 'hi cppSTLconstant' . s:fg_foreground
+ exec 'hi cppSTLtype' . s:fg_foreground
+ exec 'hi cppSTLfunction' . s:fg_foreground
+ exec 'hi cppSTLios' . s:fg_foreground
+ endif
+ " exec 'hi cppSTL' . s:fg_blue
+
+ " Rust highlighting
+ exec 'hi rustKeyword' . s:fg_pink
+ exec 'hi rustModPath' . s:fg_blue
+ exec 'hi rustModPathSep' . s:fg_blue
+ exec 'hi rustLifetime' . s:fg_purple
+ exec 'hi rustStructure' . s:fg_aqua . s:ft_bold
+ exec 'hi rustAttribute' . s:fg_aqua . s:ft_bold
+ exec 'hi rustPanic' . s:fg_olive . s:ft_bold
+ exec 'hi rustTrait' . s:fg_blue . s:ft_bold
+ exec 'hi rustEnum' . s:fg_green . s:ft_bold
+ exec 'hi rustEnumVariant' . s:fg_green
+ exec 'hi rustSelf' . s:fg_orange
+ exec 'hi rustSigil' . s:fg_aqua . s:ft_bold
+ exec 'hi rustOperator' . s:fg_aqua . s:ft_bold
+ exec 'hi rustMacro' . s:fg_olive . s:ft_bold
+ exec 'hi rustMacroVariable' . s:fg_olive
+ exec 'hi rustAssert' . s:fg_olive . s:ft_bold
+ exec 'hi rustConditional' . s:fg_purple . s:ft_bold
+
+ " Lex highlighting
+ exec 'hi lexCFunctions' . s:fg_foreground
+ exec 'hi lexAbbrv' . s:fg_purple
+ exec 'hi lexAbbrvRegExp' . s:fg_aqua
+ exec 'hi lexAbbrvComment' . s:fg_comment
+ exec 'hi lexBrace' . s:fg_navy
+ exec 'hi lexPat' . s:fg_aqua
+ exec 'hi lexPatComment' . s:fg_comment
+ exec 'hi lexPatTag' . s:fg_orange
+ " exec 'hi lexPatBlock' . s:fg_foreground . s:ft_bold
+ exec 'hi lexSlashQuote' . s:fg_foreground
+ exec 'hi lexSep' . s:fg_foreground
+ exec 'hi lexStartState' . s:fg_orange
+ exec 'hi lexPatTagZone' . s:fg_olive . s:ft_bold
+ exec 'hi lexMorePat' . s:fg_olive . s:ft_bold
+ exec 'hi lexOptions' . s:fg_olive . s:ft_bold
+ exec 'hi lexPatString' . s:fg_olive
+
+ " Yacc highlighting
+ exec 'hi yaccNonterminal' . s:fg_navy
+ exec 'hi yaccDelim' . s:fg_orange
+ exec 'hi yaccInitKey' . s:fg_aqua
+ exec 'hi yaccInit' . s:fg_navy
+ exec 'hi yaccKey' . s:fg_purple
+ exec 'hi yaccVar' . s:fg_aqua
+
+ " NASM highlighting
+ exec 'hi nasmStdInstruction' . s:fg_navy
+ exec 'hi nasmGen08Register' . s:fg_aqua
+ exec 'hi nasmGen16Register' . s:fg_aqua
+ exec 'hi nasmGen32Register' . s:fg_aqua
+ exec 'hi nasmGen64Register' . s:fg_aqua
+ exec 'hi nasmHexNumber' . s:fg_purple
+ exec 'hi nasmStorage' . s:fg_aqua . s:ft_bold
+ exec 'hi nasmLabel' . s:fg_pink
+ exec 'hi nasmDirective' . s:fg_blue . s:ft_bold
+ exec 'hi nasmLocalLabel' . s:fg_orange
+
+ " GAS highlighting
+ exec 'hi gasSymbol' . s:fg_pink
+ exec 'hi gasDirective' . s:fg_blue . s:ft_bold
+ exec 'hi gasOpcode_386_Base' . s:fg_navy
+ exec 'hi gasDecimalNumber' . s:fg_purple
+ exec 'hi gasSymbolRef' . s:fg_pink
+ exec 'hi gasRegisterX86' . s:fg_blue
+ exec 'hi gasOpcode_P6_Base' . s:fg_navy
+ exec 'hi gasDirectiveStore' . s:fg_foreground . s:ft_bold
+
+ " MIPS highlighting
+ exec 'hi mipsInstruction' . s:fg_pink
+ exec 'hi mipsRegister' . s:fg_navy
+ exec 'hi mipsLabel' . s:fg_aqua . s:ft_bold
+ exec 'hi mipsDirective' . s:fg_purple . s:ft_bold
+
+ " Shell/Bash highlighting
+ exec 'hi bashStatement' . s:fg_foreground . s:ft_bold
+ exec 'hi shDerefVar' . s:fg_aqua . s:ft_bold
+ exec 'hi shDerefSimple' . s:fg_aqua
+ exec 'hi shFunction' . s:fg_orange . s:ft_bold
+ exec 'hi shStatement' . s:fg_foreground
+ exec 'hi shLoop' . s:fg_purple . s:ft_bold
+ exec 'hi shQuote' . s:fg_olive
+ exec 'hi shCaseEsac' . s:fg_aqua . s:ft_bold
+ exec 'hi shSnglCase' . s:fg_purple . s:ft_none
+ exec 'hi shFunctionOne' . s:fg_navy
+ exec 'hi shCase' . s:fg_navy
+ exec 'hi shSetList' . s:fg_navy
+ " @see Dockerfile Highlighting section for more sh*
+
+ " PowerShell Highlighting
+ exec 'hi ps1Type' . s:fg_green . s:ft_bold
+ exec 'hi ps1Variable' . s:fg_navy
+ exec 'hi ps1Boolean' . s:fg_navy . s:ft_bold
+ exec 'hi ps1FunctionInvocation' . s:fg_pink
+ exec 'hi ps1FunctionDeclaration' . s:fg_pink
+ exec 'hi ps1Keyword' . s:fg_blue . s:ft_bold
+ exec 'hi ps1Exception' . s:fg_red
+ exec 'hi ps1Operator' . s:fg_aqua . s:ft_bold
+ exec 'hi ps1CommentDoc' . s:fg_purple
+ exec 'hi ps1CDocParam' . s:fg_orange
+
+ " HTML Highlighting
+ exec 'hi htmlTitle' . s:fg_green . s:ft_bold
+ exec 'hi htmlH1' . s:fg_green . s:ft_bold
+ exec 'hi htmlH2' . s:fg_aqua . s:ft_bold
+ exec 'hi htmlH3' . s:fg_purple . s:ft_bold
+ exec 'hi htmlH4' . s:fg_orange . s:ft_bold
+ exec 'hi htmlTag' . s:fg_comment
+ exec 'hi htmlTagName' . s:fg_wine
+ exec 'hi htmlArg' . s:fg_pink
+ exec 'hi htmlEndTag' . s:fg_comment
+ exec 'hi htmlString' . s:fg_blue
+ exec 'hi htmlScriptTag' . s:fg_comment
+ exec 'hi htmlBold' . s:fg_foreground . s:ft_bold
+ exec 'hi htmlItalic' . s:fg_comment . s:ft_italic
+ exec 'hi htmlBoldItalic' . s:fg_navy . s:ft_italic_bold
+ " exec 'hi htmlLink' . s:fg_blue . s:ft_bold
+ exec 'hi htmlTagN' . s:fg_wine . s:ft_bold
+ exec 'hi htmlSpecialTagName' . s:fg_wine
+ exec 'hi htmlComment' . s:fg_comment . s:ft_italic
+ exec 'hi htmlCommentPart' . s:fg_comment . s:ft_italic
+
+ " CSS Highlighting
+ exec 'hi cssIdentifier' . s:fg_pink
+ exec 'hi cssPositioningProp' . s:fg_foreground
+ exec 'hi cssNoise' . s:fg_foreground
+ exec 'hi cssBoxProp' . s:fg_foreground
+ exec 'hi cssTableAttr' . s:fg_purple
+ exec 'hi cssPositioningAttr' . s:fg_navy
+ exec 'hi cssValueLength' . s:fg_orange
+ exec 'hi cssFunctionName' . s:fg_blue
+ exec 'hi cssUnitDecorators' . s:fg_aqua
+ exec 'hi cssColor' . s:fg_blue . s:ft_bold
+ exec 'hi cssBraces' . s:fg_pink
+ exec 'hi cssBackgroundProp' . s:fg_foreground
+ exec 'hi cssTextProp' . s:fg_foreground
+ exec 'hi cssDimensionProp' . s:fg_foreground
+ exec 'hi cssClassName' . s:fg_pink
+
+ " Markdown Highlighting
+ exec 'hi markdownHeadingRule' . s:fg_pink . s:ft_bold
+ exec 'hi markdownH1' . s:fg_pink . s:ft_bold
+ exec 'hi markdownH2' . s:fg_orange . s:ft_bold
+ exec 'hi markdownBlockquote' . s:fg_pink
+ exec 'hi markdownCodeBlock' . s:fg_olive
+ exec 'hi markdownCode' . s:fg_olive
+ exec 'hi markdownLink' . s:fg_blue . s:ft_bold
+ exec 'hi markdownUrl' . s:fg_blue
+ exec 'hi markdownLinkText' . s:fg_pink
+ exec 'hi markdownLinkTextDelimiter' . s:fg_purple
+ exec 'hi markdownLinkDelimiter' . s:fg_purple
+ exec 'hi markdownCodeDelimiter' . s:fg_blue
+
+ exec 'hi mkdCode' . s:fg_olive
+ exec 'hi mkdLink' . s:fg_blue . s:ft_bold
+ exec 'hi mkdURL' . s:fg_comment
+ exec 'hi mkdString' . s:fg_foreground
+ exec 'hi mkdBlockQuote' . s:fg_pink
+ exec 'hi mkdLinkTitle' . s:fg_pink
+ exec 'hi mkdDelimiter' . s:fg_aqua
+ exec 'hi mkdRule' . s:fg_pink
+
+ " reStructuredText Highlighting
+ exec 'hi rstSections' . s:fg_pink . s:ft_bold
+ exec 'hi rstDelimiter' . s:fg_pink . s:ft_bold
+ exec 'hi rstExplicitMarkup' . s:fg_pink . s:ft_bold
+ exec 'hi rstDirective' . s:fg_blue
+ exec 'hi rstHyperlinkTarget' . s:fg_green
+ exec 'hi rstExDirective' . s:fg_foreground
+ exec 'hi rstInlineLiteral' . s:fg_olive
+ exec 'hi rstInterpretedTextOrHyperlinkReference' . s:fg_blue
+
+ " Python Highlighting
+ exec 'hi pythonImport' . s:fg_pink . s:ft_bold
+ exec 'hi pythonExceptions' . s:fg_red
+ exec 'hi pythonException' . s:fg_purple . s:ft_bold
+ exec 'hi pythonInclude' . s:fg_red
+ exec 'hi pythonStatement' . s:fg_pink
+ exec 'hi pythonConditional' . s:fg_purple . s:ft_bold
+ exec 'hi pythonRepeat' . s:fg_purple . s:ft_bold
+ exec 'hi pythonFunction' . s:fg_aqua . s:ft_bold
+ exec 'hi pythonPreCondit' . s:fg_purple
+ exec 'hi pythonExClass' . s:fg_orange
+ exec 'hi pythonOperator' . s:fg_purple . s:ft_bold
+ exec 'hi pythonBuiltin' . s:fg_foreground
+ exec 'hi pythonDecorator' . s:fg_orange
+
+ exec 'hi pythonString' . s:fg_olive
+ exec 'hi pythonEscape' . s:fg_olive . s:ft_bold
+ exec 'hi pythonStrFormatting' . s:fg_olive . s:ft_bold
+
+ exec 'hi pythonBoolean' . s:fg_green . s:ft_bold
+ exec 'hi pythonExClass' . s:fg_red
+ exec 'hi pythonBytesEscape' . s:fg_olive . s:ft_bold
+ exec 'hi pythonDottedName' . s:fg_purple
+ exec 'hi pythonStrFormat' . s:fg_foreground
+
+ if s:langOpt_python__highlight_builtins == 1
+ exec 'hi pythonBuiltinFunc' . s:fg_blue
+ exec 'hi pythonBuiltinObj' . s:fg_red
+ else
+ exec 'hi pythonBuiltinFunc' . s:fg_foreground
+ exec 'hi pythonBuiltinObj' . s:fg_foreground
+ endif
+
+ " Java Highlighting
+ exec 'hi javaExternal' . s:fg_pink
+ exec 'hi javaAnnotation' . s:fg_orange
+ exec 'hi javaTypedef' . s:fg_aqua
+ exec 'hi javaClassDecl' . s:fg_aqua . s:ft_bold
+ exec 'hi javaScopeDecl' . s:fg_blue . s:ft_bold
+ exec 'hi javaStorageClass' . s:fg_navy . s:ft_bold
+ exec 'hi javaBoolean' . s:fg_green . s:ft_bold
+ exec 'hi javaConstant' . s:fg_blue
+ exec 'hi javaCommentTitle' . s:fg_wine
+ exec 'hi javaDocTags' . s:fg_aqua
+ exec 'hi javaDocComment' . s:fg_comment
+ exec 'hi javaDocParam' . s:fg_foreground
+ exec 'hi javaStatement' . s:fg_pink
+
+ " JavaScript Highlighting
+ exec 'hi javaScriptBraces' . s:fg_blue
+ exec 'hi javaScriptParens' . s:fg_blue
+ exec 'hi javaScriptIdentifier' . s:fg_pink
+ exec 'hi javaScriptFunction' . s:fg_blue . s:ft_bold
+ exec 'hi javaScriptConditional' . s:fg_purple . s:ft_bold
+ exec 'hi javaScriptRepeat' . s:fg_purple . s:ft_bold
+ exec 'hi javaScriptBoolean' . s:fg_green . s:ft_bold
+ exec 'hi javaScriptNumber' . s:fg_orange
+ exec 'hi javaScriptMember' . s:fg_navy
+ exec 'hi javaScriptReserved' . s:fg_navy
+ exec 'hi javascriptNull' . s:fg_comment . s:ft_bold
+ exec 'hi javascriptGlobal' . s:fg_foreground
+ exec 'hi javascriptStatement' . s:fg_pink
+ exec 'hi javaScriptMessage' . s:fg_foreground
+ exec 'hi javaScriptMember' . s:fg_foreground
+
+ " @target https://github.com/pangloss/vim-javascript
+ exec 'hi jsFuncParens' . s:fg_blue
+ exec 'hi jsFuncBraces' . s:fg_blue
+ exec 'hi jsParens' . s:fg_blue
+ exec 'hi jsBraces' . s:fg_blue
+ exec 'hi jsNoise' . s:fg_blue
+
+ " Jsx Highlighting
+ " @target https://github.com/MaxMEllon/vim-jsx-pretty
+ exec 'hi jsxTagName' . s:fg_wine
+ exec 'hi jsxComponentName' . s:fg_wine
+ exec 'hi jsxAttrib' . s:fg_pink
+ exec 'hi jsxEqual' . s:fg_comment
+ exec 'hi jsxString' . s:fg_blue
+ exec 'hi jsxCloseTag' . s:fg_comment
+ exec 'hi jsxCloseString' . s:fg_comment
+ exec 'hi jsxDot' . s:fg_wine
+ exec 'hi jsxNamespace' . s:fg_wine
+ exec 'hi jsxPunct' . s:fg_comment
+
+ " Json Highlighting
+ " @target https://github.com/elzr/vim-json
+ exec 'hi jsonKeyword' . s:fg_blue
+ exec 'hi jsonString' . s:fg_olive
+ exec 'hi jsonQuote' . s:fg_comment
+ exec 'hi jsonNoise' . s:fg_foreground
+ exec 'hi jsonKeywordMatch' . s:fg_foreground
+ exec 'hi jsonBraces' . s:fg_foreground
+ exec 'hi jsonNumber' . s:fg_orange
+ exec 'hi jsonNull' . s:fg_purple . s:ft_bold
+ exec 'hi jsonBoolean' . s:fg_green . s:ft_bold
+ exec 'hi jsonCommentError' . s:fg_pink . s:bg_background
+
+ " Go Highlighting
+ exec 'hi goDirective' . s:fg_red
+ exec 'hi goDeclaration' . s:fg_blue . s:ft_bold
+ exec 'hi goStatement' . s:fg_pink
+ exec 'hi goConditional' . s:fg_purple . s:ft_bold
+ exec 'hi goConstants' . s:fg_orange
+ exec 'hi goFunction' . s:fg_orange
+ " exec 'hi goTodo' . s:fg_comment . s:ft_bold
+ exec 'hi goDeclType' . s:fg_blue
+ exec 'hi goBuiltins' . s:fg_purple
+
+ " Systemtap Highlighting
+ " exec 'hi stapBlock' . s:fg_comment . s:ft_none
+ exec 'hi stapComment' . s:fg_comment . s:ft_none
+ exec 'hi stapProbe' . s:fg_aqua . s:ft_bold
+ exec 'hi stapStat' . s:fg_navy . s:ft_bold
+ exec 'hi stapFunc' . s:fg_foreground
+ exec 'hi stapString' . s:fg_olive
+ exec 'hi stapTarget' . s:fg_navy
+ exec 'hi stapStatement' . s:fg_pink
+ exec 'hi stapType' . s:fg_pink . s:ft_bold
+ exec 'hi stapSharpBang' . s:fg_comment
+ exec 'hi stapDeclaration' . s:fg_pink
+ exec 'hi stapCMacro' . s:fg_blue
+
+ " DTrace Highlighting
+ exec 'hi dtraceProbe' . s:fg_blue
+ exec 'hi dtracePredicate' . s:fg_purple . s:ft_bold
+ exec 'hi dtraceComment' . s:fg_comment
+ exec 'hi dtraceFunction' . s:fg_foreground
+ exec 'hi dtraceAggregatingFunction' . s:fg_blue . s:ft_bold
+ exec 'hi dtraceStatement' . s:fg_navy . s:ft_bold
+ exec 'hi dtraceIdentifier' . s:fg_pink
+ exec 'hi dtraceOption' . s:fg_pink
+ exec 'hi dtraceConstant' . s:fg_orange
+ exec 'hi dtraceType' . s:fg_pink . s:ft_bold
+
+ " PlantUML Highlighting
+ exec 'hi plantumlPreProc' . s:fg_orange . s:ft_bold
+ exec 'hi plantumlDirectedOrVerticalArrowRL' . s:fg_pink
+ exec 'hi plantumlDirectedOrVerticalArrowLR' . s:fg_pink
+ exec 'hi plantumlString' . s:fg_olive
+ exec 'hi plantumlActivityThing' . s:fg_purple
+ exec 'hi plantumlText' . s:fg_navy
+ exec 'hi plantumlClassPublic' . s:fg_olive . s:ft_bold
+ exec 'hi plantumlClassPrivate' . s:fg_red
+ exec 'hi plantumlColonLine' . s:fg_orange
+ exec 'hi plantumlClass' . s:fg_navy
+ exec 'hi plantumlHorizontalArrow' . s:fg_pink
+ exec 'hi plantumlTypeKeyword' . s:fg_blue . s:ft_bold
+ exec 'hi plantumlKeyword' . s:fg_pink . s:ft_bold
+
+ exec 'hi plantumlType' . s:fg_blue . s:ft_bold
+ exec 'hi plantumlBlock' . s:fg_pink . s:ft_bold
+ exec 'hi plantumlPreposition' . s:fg_orange
+ exec 'hi plantumlLayout' . s:fg_blue . s:ft_bold
+ exec 'hi plantumlNote' . s:fg_orange
+ exec 'hi plantumlLifecycle' . s:fg_aqua
+ exec 'hi plantumlParticipant' . s:fg_foreground . s:ft_bold
+
+
+ " Haskell Highlighting
+ exec 'hi haskellType' . s:fg_aqua . s:ft_bold
+ exec 'hi haskellIdentifier' . s:fg_orange . s:ft_bold
+ exec 'hi haskellOperators' . s:fg_pink
+ exec 'hi haskellWhere' . s:fg_foreground . s:ft_bold
+ exec 'hi haskellDelimiter' . s:fg_aqua
+ exec 'hi haskellImportKeywords' . s:fg_pink
+ exec 'hi haskellStatement' . s:fg_purple . s:ft_bold
+
+
+ " SQL/MySQL Highlighting
+ exec 'hi sqlStatement' . s:fg_pink . s:ft_bold
+ exec 'hi sqlType' . s:fg_blue . s:ft_bold
+ exec 'hi sqlKeyword' . s:fg_pink
+ exec 'hi sqlOperator' . s:fg_aqua
+ exec 'hi sqlSpecial' . s:fg_green . s:ft_bold
+
+ exec 'hi mysqlVariable' . s:fg_olive . s:ft_bold
+ exec 'hi mysqlType' . s:fg_blue . s:ft_bold
+ exec 'hi mysqlKeyword' . s:fg_pink
+ exec 'hi mysqlOperator' . s:fg_aqua
+ exec 'hi mysqlSpecial' . s:fg_green . s:ft_bold
+
+
+ " Octave/MATLAB Highlighting
+ exec 'hi octaveVariable' . s:fg_foreground
+ exec 'hi octaveDelimiter' . s:fg_pink
+ exec 'hi octaveQueryVar' . s:fg_foreground
+ exec 'hi octaveSemicolon' . s:fg_purple
+ exec 'hi octaveFunction' . s:fg_navy
+ exec 'hi octaveSetVar' . s:fg_blue
+ exec 'hi octaveUserVar' . s:fg_foreground
+ exec 'hi octaveArithmeticOperator' . s:fg_aqua
+ exec 'hi octaveBeginKeyword' . s:fg_purple . s:ft_bold
+ exec 'hi octaveElseKeyword' . s:fg_purple . s:ft_bold
+ exec 'hi octaveEndKeyword' . s:fg_purple . s:ft_bold
+ exec 'hi octaveStatement' . s:fg_pink
+
+ " Ruby Highlighting
+ exec 'hi rubyModule' . s:fg_navy . s:ft_bold
+ exec 'hi rubyClass' . s:fg_pink . s:ft_bold
+ exec 'hi rubyPseudoVariable' . s:fg_comment . s:ft_bold
+ exec 'hi rubyKeyword' . s:fg_pink
+ exec 'hi rubyInstanceVariable' . s:fg_purple
+ exec 'hi rubyFunction' . s:fg_foreground . s:ft_bold
+ exec 'hi rubyDefine' . s:fg_pink
+ exec 'hi rubySymbol' . s:fg_aqua
+ exec 'hi rubyConstant' . s:fg_blue
+ exec 'hi rubyAccess' . s:fg_navy
+ exec 'hi rubyAttribute' . s:fg_green
+ exec 'hi rubyInclude' . s:fg_red
+ exec 'hi rubyLocalVariableOrMethod' . s:fg_orange
+ exec 'hi rubyCurlyBlock' . s:fg_foreground
+ exec 'hi rubyCurlyBlockDelimiter' . s:fg_aqua
+ exec 'hi rubyArrayDelimiter' . s:fg_aqua
+ exec 'hi rubyStringDelimiter' . s:fg_olive
+ exec 'hi rubyInterpolationDelimiter' . s:fg_orange
+ exec 'hi rubyConditional' . s:fg_purple . s:ft_bold
+ exec 'hi rubyRepeat' . s:fg_purple . s:ft_bold
+ exec 'hi rubyControl' . s:fg_purple . s:ft_bold
+ exec 'hi rubyException' . s:fg_purple . s:ft_bold
+ exec 'hi rubyExceptional' . s:fg_purple . s:ft_bold
+ exec 'hi rubyBoolean' . s:fg_green . s:ft_bold
+
+ " Fortran Highlighting
+ exec 'hi fortranUnitHeader' . s:fg_blue . s:ft_bold
+ exec 'hi fortranIntrinsic' . s:fg_blue . s:bg_background . s:ft_none
+ exec 'hi fortranType' . s:fg_pink . s:ft_bold
+ exec 'hi fortranTypeOb' . s:fg_pink . s:ft_bold
+ exec 'hi fortranStructure' . s:fg_aqua
+ exec 'hi fortranStorageClass' . s:fg_navy . s:ft_bold
+ exec 'hi fortranStorageClassR' . s:fg_navy . s:ft_bold
+ exec 'hi fortranKeyword' . s:fg_pink
+ exec 'hi fortranReadWrite' . s:fg_aqua . s:ft_bold
+ exec 'hi fortranIO' . s:fg_navy
+ exec 'hi fortranOperator' . s:fg_aqua . s:ft_bold
+ exec 'hi fortranCall' . s:fg_aqua . s:ft_bold
+ exec 'hi fortranContinueMark' . s:fg_green
+
+ " ALGOL Highlighting (Plugin: https://github.com/sterpe/vim-algol68)
+ exec 'hi algol68Statement' . s:fg_blue . s:ft_bold
+ exec 'hi algol68Operator' . s:fg_aqua . s:ft_bold
+ exec 'hi algol68PreProc' . s:fg_green
+ exec 'hi algol68Function' . s:fg_blue
+
+ " R Highlighting
+ exec 'hi rType' . s:fg_blue
+ exec 'hi rArrow' . s:fg_pink
+ exec 'hi rDollar' . s:fg_blue
+
+ " XXD Highlighting
+ exec 'hi xxdAddress' . s:fg_navy
+ exec 'hi xxdSep' . s:fg_pink
+ exec 'hi xxdAscii' . s:fg_pink
+ exec 'hi xxdDot' . s:fg_aqua
+
+ " PHP Highlighting
+ exec 'hi phpIdentifier' . s:fg_foreground
+ exec 'hi phpVarSelector' . s:fg_pink
+ exec 'hi phpKeyword' . s:fg_blue
+ exec 'hi phpRepeat' . s:fg_purple . s:ft_bold
+ exec 'hi phpConditional' . s:fg_purple . s:ft_bold
+ exec 'hi phpStatement' . s:fg_pink
+ exec 'hi phpAssignByRef' . s:fg_aqua . s:ft_bold
+ exec 'hi phpSpecialFunction' . s:fg_blue
+ exec 'hi phpFunctions' . s:fg_blue
+ exec 'hi phpComparison' . s:fg_aqua
+ exec 'hi phpBackslashSequences' . s:fg_olive . s:ft_bold
+ exec 'hi phpMemberSelector' . s:fg_blue
+ exec 'hi phpStorageClass' . s:fg_purple . s:ft_bold
+ exec 'hi phpDefine' . s:fg_navy
+ exec 'hi phpIntVar' . s:fg_navy . s:ft_bold
+
+ " Perl Highlighting
+ exec 'hi perlFiledescRead' . s:fg_green
+ exec 'hi perlMatchStartEnd' . s:fg_pink
+ exec 'hi perlStatementFlow' . s:fg_pink
+ exec 'hi perlStatementStorage' . s:fg_pink
+ exec 'hi perlFunction' . s:fg_pink . s:ft_bold
+ exec 'hi perlMethod' . s:fg_foreground
+ exec 'hi perlStatementFiledesc' . s:fg_orange
+ exec 'hi perlVarPlain' . s:fg_navy
+ exec 'hi perlSharpBang' . s:fg_comment
+ exec 'hi perlStatementInclude' . s:fg_aqua . s:ft_bold
+ exec 'hi perlStatementScalar' . s:fg_purple
+ exec 'hi perlSubName' . s:fg_aqua . s:ft_bold
+ exec 'hi perlSpecialString' . s:fg_olive . s:ft_bold
+
+ " Pascal Highlighting
+ exec 'hi pascalType' . s:fg_pink . s:ft_bold
+ exec 'hi pascalStatement' . s:fg_blue . s:ft_bold
+ exec 'hi pascalPredefined' . s:fg_pink
+ exec 'hi pascalFunction' . s:fg_foreground
+ exec 'hi pascalStruct' . s:fg_navy . s:ft_bold
+ exec 'hi pascalOperator' . s:fg_aqua . s:ft_bold
+ exec 'hi pascalPreProc' . s:fg_green
+ exec 'hi pascalAcces' . s:fg_navy . s:ft_bold
+
+ " Lua Highlighting
+ exec 'hi luaFunc' . s:fg_foreground
+ exec 'hi luaIn' . s:fg_blue . s:ft_bold
+ exec 'hi luaFunction' . s:fg_pink
+ exec 'hi luaStatement' . s:fg_blue
+ exec 'hi luaRepeat' . s:fg_blue . s:ft_bold
+ exec 'hi luaCondStart' . s:fg_purple . s:ft_bold
+ exec 'hi luaTable' . s:fg_aqua . s:ft_bold
+ exec 'hi luaConstant' . s:fg_green . s:ft_bold
+ exec 'hi luaElse' . s:fg_purple . s:ft_bold
+ exec 'hi luaCondElseif' . s:fg_purple . s:ft_bold
+ exec 'hi luaCond' . s:fg_purple . s:ft_bold
+ exec 'hi luaCondEnd' . s:fg_purple
+
+ " Clojure highlighting:
+ exec 'hi clojureConstant' . s:fg_blue
+ exec 'hi clojureBoolean' . s:fg_orange
+ exec 'hi clojureCharacter' . s:fg_olive
+ exec 'hi clojureKeyword' . s:fg_pink
+ exec 'hi clojureNumber' . s:fg_orange
+ exec 'hi clojureString' . s:fg_olive
+ exec 'hi clojureRegexp' . s:fg_purple
+ exec 'hi clojureRegexpEscape' . s:fg_pink
+ exec 'hi clojureParen' . s:fg_aqua
+ exec 'hi clojureVariable' . s:fg_olive
+ exec 'hi clojureCond' . s:fg_blue
+ exec 'hi clojureDefine' . s:fg_blue . s:ft_bold
+ exec 'hi clojureException' . s:fg_red
+ exec 'hi clojureFunc' . s:fg_navy
+ exec 'hi clojureMacro' . s:fg_blue
+ exec 'hi clojureRepeat' . s:fg_blue
+ exec 'hi clojureSpecial' . s:fg_blue . s:ft_bold
+ exec 'hi clojureQuote' . s:fg_blue
+ exec 'hi clojureUnquote' . s:fg_blue
+ exec 'hi clojureMeta' . s:fg_blue
+ exec 'hi clojureDeref' . s:fg_blue
+ exec 'hi clojureAnonArg' . s:fg_blue
+ exec 'hi clojureRepeat' . s:fg_blue
+ exec 'hi clojureDispatch' . s:fg_aqua
+
+ " Dockerfile Highlighting
+ " @target https://github.com/docker/docker/tree/master/contrib/syntax/vim
+ exec 'hi dockerfileKeyword' . s:fg_blue
+ exec 'hi shDerefVar' . s:fg_purple . s:ft_bold
+ exec 'hi shOperator' . s:fg_aqua
+ exec 'hi shOption' . s:fg_navy
+ exec 'hi shLine' . s:fg_foreground
+ exec 'hi shWrapLineOperator' . s:fg_pink
+
+ " NGINX Highlighting
+ " @target https://github.com/evanmiller/nginx-vim-syntax
+ exec 'hi ngxDirectiveBlock' . s:fg_pink . s:ft_bold
+ exec 'hi ngxDirective' . s:fg_blue . s:ft_none
+ exec 'hi ngxDirectiveImportant' . s:fg_blue . s:ft_bold
+ exec 'hi ngxString' . s:fg_olive
+ exec 'hi ngxVariableString' . s:fg_purple
+ exec 'hi ngxVariable' . s:fg_purple . s:ft_none
+
+ " Yaml Highlighting
+ exec 'hi yamlBlockMappingKey' . s:fg_blue
+ exec 'hi yamlKeyValueDelimiter' . s:fg_pink
+ exec 'hi yamlBlockCollectionItemStart' . s:fg_pink
+
+ " Qt QML Highlighting
+ exec 'hi qmlObjectLiteralType' . s:fg_pink
+ exec 'hi qmlReserved' . s:fg_purple
+ exec 'hi qmlBindingProperty' . s:fg_navy
+ exec 'hi qmlType' . s:fg_navy
+
+ " Dosini Highlighting
+ exec 'hi dosiniHeader' . s:fg_pink
+ exec 'hi dosiniLabel' . s:fg_blue
+
+ " Mail highlighting
+ exec 'hi mailHeaderKey' . s:fg_blue
+ exec 'hi mailHeaderEmail' . s:fg_purple
+ exec 'hi mailSubject' . s:fg_pink
+ exec 'hi mailHeader' . s:fg_comment
+ exec 'hi mailURL' . s:fg_aqua
+ exec 'hi mailEmail' . s:fg_purple
+ exec 'hi mailQuoted1' . s:fg_olive
+ exec 'hi mailQuoted2' . s:fg_navy
+
+ " XML Highlighting
+ exec 'hi xmlProcessingDelim' . s:fg_pink
+ exec 'hi xmlString' . s:fg_olive
+ exec 'hi xmlEqual' . s:fg_orange
+ exec 'hi xmlAttrib' . s:fg_navy
+ exec 'hi xmlAttribPunct' . s:fg_pink
+ exec 'hi xmlTag' . s:fg_blue
+ exec 'hi xmlTagName' . s:fg_blue
+ exec 'hi xmlEndTag' . s:fg_blue
+ exec 'hi xmlNamespace' . s:fg_orange
+
+ " Exlixir Highlighting
+ " @target https://github.com/elixir-lang/vim-elixir
+ exec 'hi elixirAlias' . s:fg_blue . s:ft_bold
+ exec 'hi elixirAtom' . s:fg_navy
+ exec 'hi elixirVariable' . s:fg_navy
+ exec 'hi elixirUnusedVariable' . s:fg_foreground . s:ft_bold
+ exec 'hi elixirInclude' . s:fg_purple
+ exec 'hi elixirStringDelimiter' . s:fg_olive
+ exec 'hi elixirKeyword' . s:fg_purple . s:ft_bold
+ exec 'hi elixirFunctionDeclaration' . s:fg_aqua . s:ft_bold
+ exec 'hi elixirBlockDefinition' . s:fg_pink
+ exec 'hi elixirDefine' . s:fg_pink
+ exec 'hi elixirStructDefine' . s:fg_pink
+ exec 'hi elixirPrivateDefine' . s:fg_pink
+ exec 'hi elixirModuleDefine' . s:fg_pink
+ exec 'hi elixirProtocolDefine' . s:fg_pink
+ exec 'hi elixirImplDefine' . s:fg_pink
+ exec 'hi elixirModuleDeclaration' . s:fg_aqua . s:ft_bold
+ exec 'hi elixirDocString' . s:fg_olive
+ exec 'hi elixirDocTest' . s:fg_green . s:ft_bold
+
+ " Erlang Highlighting
+ exec 'hi erlangBIF' . s:fg_purple . s:ft_bold
+ exec 'hi erlangBracket' . s:fg_pink
+ exec 'hi erlangLocalFuncCall' . s:fg_foreground
+ exec 'hi erlangVariable' . s:fg_foreground
+ exec 'hi erlangAtom' . s:fg_navy
+ exec 'hi erlangAttribute' . s:fg_blue . s:ft_bold
+ exec 'hi erlangRecordDef' . s:fg_blue . s:ft_bold
+ exec 'hi erlangRecord' . s:fg_blue
+ exec 'hi erlangRightArrow' . s:fg_blue . s:ft_bold
+ exec 'hi erlangStringModifier' . s:fg_olive . s:ft_bold
+ exec 'hi erlangInclude' . s:fg_blue . s:ft_bold
+ exec 'hi erlangKeyword' . s:fg_pink
+ exec 'hi erlangGlobalFuncCall' . s:fg_foreground
+
+ " Cucumber Highlighting
+ exec 'hi cucumberFeature' . s:fg_blue . s:ft_bold
+ exec 'hi cucumberBackground' . s:fg_pink . s:ft_bold
+ exec 'hi cucumberScenario' . s:fg_pink . s:ft_bold
+ exec 'hi cucumberGiven' . s:fg_orange
+ exec 'hi cucumberGivenAnd' . s:fg_blue
+ exec 'hi cucumberThen' . s:fg_orange
+ exec 'hi cucumberThenAnd' . s:fg_blue
+ exec 'hi cucumberWhen' . s:fg_purple . s:ft_bold
+ exec 'hi cucumberScenarioOutline' . s:fg_pink . s:ft_bold
+ exec 'hi cucumberExamples' . s:fg_aqua
+ exec 'hi cucumberTags' . s:fg_aqua
+ exec 'hi cucumberPlaceholder' . s:fg_aqua
+
+ " Ada Highlighting
+ exec 'hi adaInc' . s:fg_aqua . s:ft_bold
+ exec 'hi adaSpecial' . s:fg_aqua . s:ft_bold
+ exec 'hi adaKeyword' . s:fg_pink
+ exec 'hi adaBegin' . s:fg_pink
+ exec 'hi adaEnd' . s:fg_pink
+ exec 'hi adaTypedef' . s:fg_navy . s:ft_bold
+ exec 'hi adaAssignment' . s:fg_aqua . s:ft_bold
+ exec 'hi adaAttribute' . s:fg_green
+
+ " COBOL Highlighting
+ exec 'hi cobolMarker' . s:fg_comment . s:bg_cursorline
+ exec 'hi cobolLine' . s:fg_foreground
+ exec 'hi cobolReserved' . s:fg_blue
+ exec 'hi cobolDivision' . s:fg_pink . s:ft_bold
+ exec 'hi cobolDivisionName' . s:fg_pink . s:ft_bold
+ exec 'hi cobolSection' . s:fg_navy . s:ft_bold
+ exec 'hi cobolSectionName' . s:fg_navy . s:ft_bold
+ exec 'hi cobolParagraph' . s:fg_purple
+ exec 'hi cobolParagraphName' . s:fg_purple
+ exec 'hi cobolDeclA' . s:fg_purple
+ exec 'hi cobolDecl' . s:fg_green
+ exec 'hi cobolCALLs' . s:fg_aqua . s:ft_bold
+ exec 'hi cobolEXECs' . s:fg_aqua . s:ft_bold
+
+ " GNU sed highlighting
+ exec 'hi sedST' . s:fg_purple . s:ft_bold
+ exec 'hi sedFlag' . s:fg_purple . s:ft_bold
+ exec 'hi sedRegexp47' . s:fg_pink
+ exec 'hi sedRegexpMeta' . s:fg_blue . s:ft_bold
+ exec 'hi sedReplacement47' . s:fg_olive
+ exec 'hi sedReplaceMeta' . s:fg_orange . s:ft_bold
+ exec 'hi sedAddress' . s:fg_pink
+ exec 'hi sedFunction' . s:fg_aqua . s:ft_bold
+ exec 'hi sedBranch' . s:fg_green . s:ft_bold
+ exec 'hi sedLabel' . s:fg_green . s:ft_bold
+
+ " GNU awk highlighting
+ exec 'hi awkPatterns' . s:fg_pink . s:ft_bold
+ exec 'hi awkSearch' . s:fg_pink
+ exec 'hi awkRegExp' . s:fg_blue . s:ft_bold
+ exec 'hi awkCharClass' . s:fg_blue . s:ft_bold
+ exec 'hi awkFieldVars' . s:fg_green . s:ft_bold
+ exec 'hi awkStatement' . s:fg_blue . s:ft_bold
+ exec 'hi awkFunction' . s:fg_blue
+ exec 'hi awkVariables' . s:fg_green . s:ft_bold
+ exec 'hi awkArrayElement' . s:fg_orange
+ exec 'hi awkOperator' . s:fg_foreground
+ exec 'hi awkBoolLogic' . s:fg_foreground
+ exec 'hi awkExpression' . s:fg_foreground
+ exec 'hi awkSpecialPrintf' . s:fg_olive . s:ft_bold
+
+ " Elm highlighting
+ exec 'hi elmImport' . s:fg_navy
+ exec 'hi elmAlias' . s:fg_aqua
+ exec 'hi elmType' . s:fg_pink
+ exec 'hi elmOperator' . s:fg_aqua . s:ft_bold
+ exec 'hi elmBraces' . s:fg_aqua . s:ft_bold
+ exec 'hi elmTypedef' . s:fg_blue . s:ft_bold
+ exec 'hi elmTopLevelDecl' . s:fg_green . s:ft_bold
+
+ " Purescript highlighting
+ exec 'hi purescriptModuleKeyword' . s:fg_navy
+ exec 'hi purescriptImportKeyword' . s:fg_navy
+ exec 'hi purescriptModuleName' . s:fg_pink
+ exec 'hi purescriptOperator' . s:fg_aqua . s:ft_bold
+ exec 'hi purescriptType' . s:fg_pink
+ exec 'hi purescriptTypeVar' . s:fg_navy
+ exec 'hi purescriptStructure' . s:fg_blue . s:ft_bold
+ exec 'hi purescriptLet' . s:fg_blue . s:ft_bold
+ exec 'hi purescriptFunction' . s:fg_green . s:ft_bold
+ exec 'hi purescriptDelimiter' . s:fg_aqua . s:ft_bold
+ exec 'hi purescriptStatement' . s:fg_purple . s:ft_bold
+ exec 'hi purescriptConstructor' . s:fg_pink
+ exec 'hi purescriptWhere' . s:fg_purple . s:ft_bold
+
+ " F# highlighting
+ exec 'hi fsharpTypeName' . s:fg_pink
+ exec 'hi fsharpCoreClass' . s:fg_pink
+ exec 'hi fsharpType' . s:fg_pink
+ exec 'hi fsharpKeyword' . s:fg_blue . s:ft_bold
+ exec 'hi fsharpOperator' . s:fg_aqua . s:ft_bold
+ exec 'hi fsharpBoolean' . s:fg_green . s:ft_bold
+ exec 'hi fsharpFormat' . s:fg_foreground
+ exec 'hi fsharpLinq' . s:fg_blue
+ exec 'hi fsharpKeyChar' . s:fg_aqua . s:ft_bold
+ exec 'hi fsharpOption' . s:fg_orange
+ exec 'hi fsharpCoreMethod' . s:fg_purple
+ exec 'hi fsharpAttrib' . s:fg_orange
+ exec 'hi fsharpModifier' . s:fg_aqua
+ exec 'hi fsharpOpen' . s:fg_red
+
+ " ASN.1 highlighting
+ exec 'hi asnExternal' . s:fg_green . s:ft_bold
+ exec 'hi asnTagModifier' . s:fg_purple
+ exec 'hi asnBraces' . s:fg_aqua . s:ft_bold
+ exec 'hi asnDefinition' . s:fg_foreground
+ exec 'hi asnStructure' . s:fg_blue
+ exec 'hi asnType' . s:fg_pink
+ exec 'hi asnTypeInfo' . s:fg_aqua . s:ft_bold
+ exec 'hi asnFieldOption' . s:fg_purple
+
+ " }}}
+
+ " Plugin: Netrw
+ exec 'hi netrwVersion' . s:fg_red
+ exec 'hi netrwList' . s:fg_pink
+ exec 'hi netrwHidePat' . s:fg_olive
+ exec 'hi netrwQuickHelp' . s:fg_blue
+ exec 'hi netrwHelpCmd' . s:fg_blue
+ exec 'hi netrwDir' . s:fg_aqua . s:ft_bold
+ exec 'hi netrwClassify' . s:fg_pink
+ exec 'hi netrwExe' . s:fg_green
+ exec 'hi netrwSuffixes' . s:fg_comment
+ exec 'hi netrwTreeBar' . s:fg_linenumber_fg
+
+ " Plugin: NERDTree
+ exec 'hi NERDTreeUp' . s:fg_comment
+ exec 'hi NERDTreeHelpCommand' . s:fg_pink
+ exec 'hi NERDTreeHelpTitle' . s:fg_blue . s:ft_bold
+ exec 'hi NERDTreeHelpKey' . s:fg_pink
+ exec 'hi NERDTreeHelp' . s:fg_foreground
+ exec 'hi NERDTreeToggleOff' . s:fg_red
+ exec 'hi NERDTreeToggleOn' . s:fg_green
+ exec 'hi NERDTreeDir' . s:fg_blue . s:ft_bold
+ exec 'hi NERDTreeDirSlash' . s:fg_pink
+ exec 'hi NERDTreeFile' . s:fg_foreground
+ exec 'hi NERDTreeExecFile' . s:fg_green
+ exec 'hi NERDTreeOpenable' . s:fg_aqua . s:ft_bold
+ exec 'hi NERDTreeClosable' . s:fg_pink
+
+ " Plugin: Tagbar
+ exec 'hi TagbarHelpTitle' . s:fg_blue . s:ft_bold
+ exec 'hi TagbarHelp' . s:fg_foreground
+ exec 'hi TagbarKind' . s:fg_pink
+ exec 'hi TagbarSignature' . s:fg_aqua
+
+ " Plugin: Vimdiff
+ exec 'hi DiffAdd' . s:fg_diffadd_fg . s:bg_diffadd_bg . s:ft_none
+ exec 'hi DiffChange' . s:fg_diffchange_fg . s:bg_diffchange_bg . s:ft_none
+ exec 'hi DiffDelete' . s:fg_diffdelete_fg . s:bg_diffdelete_bg . s:ft_none
+ exec 'hi DiffText' . s:fg_difftext_fg . s:bg_difftext_bg . s:ft_none
+
+ " Plugin: AGit
+ exec 'hi agitHead' . s:fg_green . s:ft_bold
+ exec 'hi agitHeader' . s:fg_olive
+ exec 'hi agitStatAdded' . s:fg_diffadd_fg
+ exec 'hi agitStatRemoved' . s:fg_diffdelete_fg
+ exec 'hi agitDiffAdd' . s:fg_diffadd_fg
+ exec 'hi agitDiffRemove' . s:fg_diffdelete_fg
+ exec 'hi agitDiffHeader' . s:fg_pink
+ exec 'hi agitDiff' . s:fg_foreground
+ exec 'hi agitDiffIndex' . s:fg_purple
+ exec 'hi agitDiffFileName' . s:fg_aqua
+ exec 'hi agitLog' . s:fg_foreground
+ exec 'hi agitAuthorMark' . s:fg_olive
+ exec 'hi agitDateMark' . s:fg_comment
+ exec 'hi agitHeaderLabel' . s:fg_aqua
+ exec 'hi agitDate' . s:fg_aqua
+ exec 'hi agitTree' . s:fg_pink
+ exec 'hi agitRef' . s:fg_blue . s:ft_bold
+ exec 'hi agitRemote' . s:fg_purple . s:ft_bold
+ exec 'hi agitTag' . s:fg_orange . s:ft_bold
+
+ " Plugin: Spell Checking
+ exec 'hi SpellBad' . s:fg_foreground . s:bg_spellbad
+ exec 'hi SpellCap' . s:fg_foreground . s:bg_spellcap
+ exec 'hi SpellRare' . s:fg_foreground . s:bg_spellrare
+ exec 'hi SpellLocal' . s:fg_foreground . s:bg_spelllocal
+
+ " Plugin: Indent Guides
+ exec 'hi IndentGuidesOdd' . s:bg_background
+ exec 'hi IndentGuidesEven' . s:bg_cursorline
+
+ " Plugin: Startify
+ exec 'hi StartifyFile' . s:fg_blue . s:ft_bold
+ exec 'hi StartifyNumber' . s:fg_orange
+ exec 'hi StartifyHeader' . s:fg_comment
+ exec 'hi StartifySection' . s:fg_pink
+ exec 'hi StartifyPath' . s:fg_foreground
+ exec 'hi StartifySlash' . s:fg_navy
+ exec 'hi StartifyBracket' . s:fg_aqua
+ exec 'hi StartifySpecial' . s:fg_aqua
+
+ " Git commit message
+ exec 'hi gitcommitSummary' . s:fg_blue
+ exec 'hi gitcommitHeader' . s:fg_green . s:ft_bold
+ exec 'hi gitcommitSelectedType' . s:fg_blue
+ exec 'hi gitcommitSelectedFile' . s:fg_pink
+ exec 'hi gitcommitUntrackedFile' . s:fg_diffdelete_fg
+ exec 'hi gitcommitBranch' . s:fg_aqua . s:ft_bold
+ exec 'hi gitcommitDiscardedType' . s:fg_diffdelete_fg
+ exec 'hi gitcommitDiff' . s:fg_comment
+
+ exec 'hi diffFile' . s:fg_blue
+ exec 'hi diffSubname' . s:fg_comment
+ exec 'hi diffIndexLine' . s:fg_comment
+ exec 'hi diffAdded' . s:fg_diffadd_fg
+ exec 'hi diffRemoved' . s:fg_diffdelete_fg
+ exec 'hi diffLine' . s:fg_orange
+ exec 'hi diffBDiffer' . s:fg_orange
+ exec 'hi diffNewFile' . s:fg_comment
+
+endfun
+" }}}
+
+" ================================== MISC =====================================
+" Command to show theme information {{{
+fun! g:PaperColor()
+ echom 'PaperColor Theme Framework'
+ echom ' version ' . s:version
+ echom ' by Nikyle Nguyen et al.'
+ echom ' at https://github.com/NLKNguyen/papercolor-theme/'
+ echom ' '
+ echom 'Current theme: ' . s:theme_name
+ echom ' ' . s:selected_theme['description']
+ echom ' by ' . s:selected_theme['maintainer']
+ echom ' at ' . s:selected_theme['source']
+
+ " TODO: add diff display for theme color names between 'default' and current
+ " theme if it is a custom theme, i.e. child theme.
+endfun
+
+" @brief command alias for g:PaperColor()
+command! -nargs=0 PaperColor :call g:PaperColor()
+" }}}
+
+" =============================== MAIN ========================================
+
+hi clear
+syntax reset
+let g:colors_name = "PaperColor"
+
+call s:acquire_theme_data()
+call s:identify_color_mode()
+
+call s:generate_theme_option_variables()
+call s:generate_language_option_variables()
+
+call s:set_format_attributes()
+call s:set_overriding_colors()
+
+call s:convert_colors()
+call s:set_color_variables()
+
+call s:apply_syntax_highlightings()
+
+" =============================================================================
+" Cheers!
+" vim: fdm=marker ff=unix
diff --git a/vim/.vim/colors/ayu.vim b/vim/.vim/colors/ayu.vim
new file mode 100644
index 0000000..4e0273a
--- /dev/null
+++ b/vim/.vim/colors/ayu.vim
@@ -0,0 +1,268 @@
+" Initialisation:"{{{
+" ----------------------------------------------------------------------------
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+
+let s:style = get(g:, 'ayucolor', 'dark')
+let g:colors_name = "ayu"
+"}}}
+
+" Palettes:"{{{
+" ----------------------------------------------------------------------------
+
+let s:palette = {}
+
+let s:palette.bg = {'dark': "#0F1419", 'light': "#FAFAFA", 'mirage': "#212733"}
+
+let s:palette.comment = {'dark': "#5C6773", 'light': "#ABB0B6", 'mirage': "#5C6773"}
+let s:palette.markup = {'dark': "#F07178", 'light': "#F07178", 'mirage': "#F07178"}
+let s:palette.constant = {'dark': "#FFEE99", 'light': "#A37ACC", 'mirage': "#D4BFFF"}
+let s:palette.operator = {'dark': "#E7C547", 'light': "#E7C547", 'mirage': "#80D4FF"}
+let s:palette.tag = {'dark': "#36A3D9", 'light': "#36A3D9", 'mirage': "#5CCFE6"}
+let s:palette.regexp = {'dark': "#95E6CB", 'light': "#4CBF99", 'mirage': "#95E6CB"}
+let s:palette.string = {'dark': "#B8CC52", 'light': "#86B300", 'mirage': "#BBE67E"}
+let s:palette.function = {'dark': "#FFB454", 'light': "#F29718", 'mirage': "#FFD57F"}
+let s:palette.special = {'dark': "#E6B673", 'light': "#E6B673", 'mirage': "#FFC44C"}
+let s:palette.keyword = {'dark': "#FF7733", 'light': "#FF7733", 'mirage': "#FFAE57"}
+
+let s:palette.error = {'dark': "#FF3333", 'light': "#FF3333", 'mirage': "#FF3333"}
+let s:palette.accent = {'dark': "#F29718", 'light': "#FF6A00", 'mirage': "#FFCC66"}
+let s:palette.panel = {'dark': "#14191F", 'light': "#FFFFFF", 'mirage': "#272D38"}
+let s:palette.guide = {'dark': "#2D3640", 'light': "#D9D8D7", 'mirage': "#3D4751"}
+let s:palette.line = {'dark': "#151A1E", 'light': "#F3F3F3", 'mirage': "#242B38"}
+let s:palette.selection = {'dark': "#253340", 'light': "#F0EEE4", 'mirage': "#343F4C"}
+let s:palette.fg = {'dark': "#E6E1CF", 'light': "#5C6773", 'mirage': "#D9D7CE"}
+let s:palette.fg_idle = {'dark': "#3E4B59", 'light': "#828C99", 'mirage': "#607080"}
+
+"}}}
+
+" Highlighting Primitives:"{{{
+" ----------------------------------------------------------------------------
+
+function! s:build_prim(hi_elem, field)
+ let l:vname = "s:" . a:hi_elem . "_" . a:field " s:bg_gray
+ let l:gui_assign = "gui".a:hi_elem."=".s:palette[a:field][s:style] " guibg=...
+ exe "let " . l:vname . " = ' " . l:gui_assign . "'"
+endfunction
+
+let s:bg_none = ' guibg=NONE ctermbg=NONE'
+let s:fg_none = ' guifg=NONE ctermfg=NONE'
+for [key_name, d_value] in items(s:palette)
+ call s:build_prim('bg', key_name)
+ call s:build_prim('fg', key_name)
+endfor
+" }}}
+
+" Formatting Options:"{{{
+" ----------------------------------------------------------------------------
+let s:none = "NONE"
+let s:t_none = "NONE"
+let s:n = "NONE"
+let s:c = ",undercurl"
+let s:r = ",reverse"
+let s:s = ",standout"
+let s:b = ",bold"
+let s:u = ",underline"
+let s:i = ",italic"
+
+exe "let s:fmt_none = ' gui=NONE". " cterm=NONE". " term=NONE" ."'"
+exe "let s:fmt_bold = ' gui=NONE".s:b. " cterm=NONE".s:b. " term=NONE".s:b ."'"
+exe "let s:fmt_bldi = ' gui=NONE".s:b. " cterm=NONE".s:b. " term=NONE".s:b ."'"
+exe "let s:fmt_undr = ' gui=NONE".s:u. " cterm=NONE".s:u. " term=NONE".s:u ."'"
+exe "let s:fmt_undb = ' gui=NONE".s:u.s:b. " cterm=NONE".s:u.s:b. " term=NONE".s:u.s:b."'"
+exe "let s:fmt_undi = ' gui=NONE".s:u. " cterm=NONE".s:u. " term=NONE".s:u ."'"
+exe "let s:fmt_curl = ' gui=NONE".s:c. " cterm=NONE".s:c. " term=NONE".s:c ."'"
+exe "let s:fmt_ital = ' gui=NONE".s:i. " cterm=NONE".s:i. " term=NONE".s:i ."'"
+exe "let s:fmt_stnd = ' gui=NONE".s:s. " cterm=NONE".s:s. " term=NONE".s:s ."'"
+exe "let s:fmt_revr = ' gui=NONE".s:r. " cterm=NONE".s:r. " term=NONE".s:r ."'"
+exe "let s:fmt_revb = ' gui=NONE".s:r.s:b. " cterm=NONE".s:r.s:b. " term=NONE".s:r.s:b."'"
+"}}}
+
+
+" Vim Highlighting: (see :help highlight-groups)"{{{
+" ----------------------------------------------------------------------------
+exe "hi! Normal" .s:fg_fg .s:bg_bg .s:fmt_none
+exe "hi! ColorColumn" .s:fg_none .s:bg_line .s:fmt_none
+" Conceal, Cursor, CursorIM
+exe "hi! CursorColumn" .s:fg_none .s:bg_line .s:fmt_none
+exe "hi! CursorLine" .s:fg_none .s:bg_line .s:fmt_none
+exe "hi! CursorLineNr" .s:fg_accent .s:bg_line .s:fmt_none
+exe "hi! LineNr" .s:fg_guide .s:bg_none .s:fmt_none
+
+exe "hi! Directory" .s:fg_fg_idle .s:bg_none .s:fmt_none
+exe "hi! DiffAdd" .s:fg_string .s:bg_panel .s:fmt_none
+exe "hi! DiffChange" .s:fg_tag .s:bg_panel .s:fmt_none
+exe "hi! DiffText" .s:fg_fg .s:bg_panel .s:fmt_none
+exe "hi! ErrorMsg" .s:fg_fg .s:bg_error .s:fmt_stnd
+exe "hi! VertSplit" .s:fg_bg .s:bg_none .s:fmt_none
+exe "hi! Folded" .s:fg_fg_idle .s:bg_panel .s:fmt_none
+exe "hi! FoldColumn" .s:fg_none .s:bg_panel .s:fmt_none
+exe "hi! SignColumn" .s:fg_none .s:bg_panel .s:fmt_none
+" Incsearch"
+
+exe "hi! MatchParen" .s:fg_fg .s:bg_bg .s:fmt_undr
+exe "hi! ModeMsg" .s:fg_string .s:bg_none .s:fmt_none
+exe "hi! MoreMsg" .s:fg_string .s:bg_none .s:fmt_none
+exe "hi! NonText" .s:fg_guide .s:bg_none .s:fmt_none
+exe "hi! Pmenu" .s:fg_fg .s:bg_selection .s:fmt_none
+exe "hi! PmenuSel" .s:fg_fg .s:bg_selection .s:fmt_revr
+" PmenuSbar"
+" PmenuThumb"
+exe "hi! Question" .s:fg_string .s:bg_none .s:fmt_none
+exe "hi! Search" .s:fg_bg .s:bg_constant .s:fmt_none
+exe "hi! SpecialKey" .s:fg_selection .s:bg_none .s:fmt_none
+exe "hi! SpellCap" .s:fg_tag .s:bg_none .s:fmt_undr
+exe "hi! SpellLocal" .s:fg_keyword .s:bg_none .s:fmt_undr
+exe "hi! SpellBad" .s:fg_error .s:bg_none .s:fmt_undr
+exe "hi! SpellRare" .s:fg_regexp .s:bg_none .s:fmt_undr
+exe "hi! StatusLine" .s:fg_fg .s:bg_panel .s:fmt_none
+exe "hi! StatusLineNC" .s:fg_fg_idle .s:bg_panel .s:fmt_none
+exe "hi! WildMenu" .s:fg_bg .s:bg_markup .s:fmt_none
+exe "hi! TabLine" .s:fg_fg .s:bg_panel .s:fmt_revr
+" TabLineFill"
+" TabLineSel"
+exe "hi! Title" .s:fg_keyword .s:bg_none .s:fmt_none
+exe "hi! Visual" .s:fg_none .s:bg_selection .s:fmt_none
+" VisualNos"
+exe "hi! WarningMsg" .s:fg_error .s:bg_none .s:fmt_none
+
+" TODO LongLineWarning to use variables instead of hardcoding
+hi LongLineWarning guifg=NONE guibg=#371F1C gui=underline ctermfg=NONE ctermbg=NONE cterm=underline
+" WildMenu"
+
+"}}}
+
+" Generic Syntax Highlighting: (see :help group-name)"{{{
+" ----------------------------------------------------------------------------
+exe "hi! Comment" .s:fg_comment .s:bg_none .s:fmt_none
+
+exe "hi! Constant" .s:fg_constant .s:bg_none .s:fmt_none
+exe "hi! String" .s:fg_string .s:bg_none .s:fmt_none
+" Character"
+" Number"
+" Boolean"
+" Float"
+
+exe "hi! Identifier" .s:fg_tag .s:bg_none .s:fmt_none
+exe "hi! Function" .s:fg_function .s:bg_none .s:fmt_none
+
+exe "hi! Statement" .s:fg_keyword .s:bg_none .s:fmt_none
+" Conditional"
+" Repeat"
+" Label"
+exe "hi! Operator" .s:fg_operator .s:bg_none .s:fmt_none
+" Keyword"
+" Exception"
+
+exe "hi! PreProc" .s:fg_special .s:bg_none .s:fmt_none
+" Include"
+" Define"
+" Macro"
+" PreCondit"
+
+exe "hi! Type" .s:fg_tag .s:bg_none .s:fmt_none
+" StorageClass"
+exe "hi! Structure" .s:fg_special .s:bg_none .s:fmt_none
+" Typedef"
+
+exe "hi! Special" .s:fg_special .s:bg_none .s:fmt_none
+" SpecialChar"
+" Tag"
+" Delimiter"
+" SpecialComment"
+" Debug"
+"
+exe "hi! Underlined" .s:fg_tag .s:bg_none .s:fmt_undr
+
+exe "hi! Ignore" .s:fg_none .s:bg_none .s:fmt_none
+
+exe "hi! Error" .s:fg_fg .s:bg_error .s:fmt_none
+
+exe "hi! Todo" .s:fg_markup .s:bg_none .s:fmt_none
+
+" Quickfix window highlighting
+exe "hi! qfLineNr" .s:fg_keyword .s:bg_none .s:fmt_none
+" qfFileName"
+" qfLineNr"
+" qfError"
+
+exe "hi! Conceal" .s:fg_guide .s:bg_none .s:fmt_none
+exe "hi! CursorLineConceal" .s:fg_guide .s:bg_line .s:fmt_none
+
+
+" Terminal in NVIM
+" ---------
+if has("nvim")
+ let g:terminal_color_0 = s:palette.bg[s:style]
+ let g:terminal_color_1 = s:palette.markup[s:style]
+ let g:terminal_color_2 = s:palette.string[s:style]
+ let g:terminal_color_3 = s:palette.accent[s:style]
+ let g:terminal_color_4 = s:palette.tag[s:style]
+ let g:terminal_color_5 = s:palette.constant[s:style]
+ let g:terminal_color_6 = s:palette.regexp[s:style]
+ let g:terminal_color_7 = "#FFFFFF"
+ let g:terminal_color_8 = s:palette.fg_idle[s:style]
+ let g:terminal_color_9 = s:palette.error[s:style]
+ let g:terminal_color_10 = s:palette.string[s:style]
+ let g:terminal_color_11 = s:palette.accent[s:style]
+ let g:terminal_color_12 = s:palette.tag[s:style]
+ let g:terminal_color_13 = s:palette.constant[s:style]
+ let g:terminal_color_14 = s:palette.regexp[s:style]
+ let g:terminal_color_15 = s:palette.comment[s:style]
+ let g:terminal_color_background = g:terminal_color_0
+ let g:terminal_color_foreground = s:palette.fg[s:style]
+endif
+
+
+" NerdTree
+" ---------
+exe "hi! NERDTreeOpenable" .s:fg_fg_idle .s:bg_none .s:fmt_none
+exe "hi! NERDTreeClosable" .s:fg_accent .s:bg_none .s:fmt_none
+" exe "hi! NERDTreeBookmarksHeader" .s:fg_pink .s:bg_none .s:fmt_none
+" exe "hi! NERDTreeBookmarksLeader" .s:fg_bg .s:bg_none .s:fmt_none
+" exe "hi! NERDTreeBookmarkName" .s:fg_keyword .s:bg_none .s:fmt_none
+" exe "hi! NERDTreeCWD" .s:fg_pink .s:bg_none .s:fmt_none
+exe "hi! NERDTreeUp" .s:fg_fg_idle .s:bg_none .s:fmt_none
+exe "hi! NERDTreeDir" .s:fg_fg_idle .s:bg_none .s:fmt_none
+exe "hi! NERDTreeFile" .s:fg_fg_idle .s:bg_none .s:fmt_none
+exe "hi! NERDTreeDirSlash" .s:fg_guide .s:bg_none .s:fmt_none
+
+
+" GitGutter
+" ---------
+exe "hi! GitGutterAdd" .s:fg_string .s:bg_none .s:fmt_none
+exe "hi! GitGutterChange" .s:fg_tag .s:bg_none .s:fmt_none
+exe "hi! GitGutterDelete" .s:fg_markup .s:bg_none .s:fmt_none
+exe "hi! GitGutterChangeDelete" .s:fg_function .s:bg_none .s:fmt_none
+
+"}}}
+
+" Diff Syntax Highlighting:"{{{
+" ----------------------------------------------------------------------------
+" Diff
+" diffOldFile
+" diffNewFile
+" diffFile
+" diffOnly
+" diffIdentical
+" diffDiffer
+" diffBDiffer
+" diffIsA
+" diffNoEOL
+" diffCommon
+hi! link diffRemoved Constant
+" diffChanged
+hi! link diffAdded String
+" diffLine
+" diffSubname
+" diffComment
+
+"}}}
+"
+" This is needed for some reason: {{{
+
+let &background = s:style
+
+" }}}
diff --git a/vim/.vim/colors/firewatch.vim b/vim/.vim/colors/firewatch.vim
new file mode 100644
index 0000000..a5c61a4
--- /dev/null
+++ b/vim/.vim/colors/firewatch.vim
@@ -0,0 +1,692 @@
+" Name: Firewatch duotone vim colorscheme
+" Author: Ramzi Akremi
+" License: MIT
+" Version: 1.0.0
+
+" Global setup =============================================================={{{
+
+hi clear
+syntax reset
+"if exists('g:colors_name')
+ "unlet g:colors_name
+"endif
+let g:colors_name = 'two-firewatch'
+
+if !exists('g:two_firewatch_italics')
+ let g:two_firewatch_italics = 0
+endif
+
+if has('gui_running') || &t_Co == 88 || &t_Co == 256
+ " functions
+ " returns an approximate grey index for the given grey level
+
+ " Utility functions -------------------------------------------------------{{{
+ fun <SID>grey_number(x)
+ if &t_Co == 88
+ if a:x < 23
+ return 0
+ elseif a:x < 69
+ return 1
+ elseif a:x < 103
+ return 2
+ elseif a:x < 127
+ return 3
+ elseif a:x < 150
+ return 4
+ elseif a:x < 173
+ return 5
+ elseif a:x < 196
+ return 6
+ elseif a:x < 219
+ return 7
+ elseif a:x < 243
+ return 8
+ else
+ return 9
+ endif
+ else
+ if a:x < 14
+ return 0
+ else
+ let l:n = (a:x - 8) / 10
+ let l:m = (a:x - 8) % 10
+ if l:m < 5
+ return l:n
+ else
+ return l:n + 1
+ endif
+ endif
+ endif
+ endfun
+
+ " returns the actual grey level represented by the grey index
+ fun <SID>grey_level(n)
+ if &t_Co == 88
+ if a:n == 0
+ return 0
+ elseif a:n == 1
+ return 46
+ elseif a:n == 2
+ return 92
+ elseif a:n == 3
+ return 115
+ elseif a:n == 4
+ return 139
+ elseif a:n == 5
+ return 162
+ elseif a:n == 6
+ return 185
+ elseif a:n == 7
+ return 208
+ elseif a:n == 8
+ return 231
+ else
+ return 255
+ endif
+ else
+ if a:n == 0
+ return 0
+ else
+ return 8 + (a:n * 10)
+ endif
+ endif
+ endfun
+
+ " returns the palette index for the given grey index
+ fun <SID>grey_color(n)
+ if &t_Co == 88
+ if a:n == 0
+ return 16
+ elseif a:n == 9
+ return 79
+ else
+ return 79 + a:n
+ endif
+ else
+ if a:n == 0
+ return 16
+ elseif a:n == 25
+ return 231
+ else
+ return 231 + a:n
+ endif
+ endif
+ endfun
+
+ " returns an approximate color index for the given color level
+ fun <SID>rgb_number(x)
+ if &t_Co == 88
+ if a:x < 69
+ return 0
+ elseif a:x < 172
+ return 1
+ elseif a:x < 230
+ return 2
+ else
+ return 3
+ endif
+ else
+ if a:x < 75
+ return 0
+ else
+ let l:n = (a:x - 55) / 40
+ let l:m = (a:x - 55) % 40
+ if l:m < 20
+ return l:n
+ else
+ return l:n + 1
+ endif
+ endif
+ endif
+ endfun
+
+ " returns the actual color level for the given color index
+ fun <SID>rgb_level(n)
+ if &t_Co == 88
+ if a:n == 0
+ return 0
+ elseif a:n == 1
+ return 139
+ elseif a:n == 2
+ return 205
+ else
+ return 255
+ endif
+ else
+ if a:n == 0
+ return 0
+ else
+ return 55 + (a:n * 40)
+ endif
+ endif
+ endfun
+
+ " returns the palette index for the given R/G/B color indices
+ fun <SID>rgb_color(x, y, z)
+ if &t_Co == 88
+ return 16 + (a:x * 16) + (a:y * 4) + a:z
+ else
+ return 16 + (a:x * 36) + (a:y * 6) + a:z
+ endif
+ endfun
+
+ " returns the palette index to approximate the given R/G/B color levels
+ fun <SID>color(r, g, b)
+ " get the closest grey
+ let l:gx = <SID>grey_number(a:r)
+ let l:gy = <SID>grey_number(a:g)
+ let l:gz = <SID>grey_number(a:b)
+
+ " get the closest color
+ let l:x = <SID>rgb_number(a:r)
+ let l:y = <SID>rgb_number(a:g)
+ let l:z = <SID>rgb_number(a:b)
+
+ if l:gx == l:gy && l:gy == l:gz
+ " there are two possibilities
+ let l:dgr = <SID>grey_level(l:gx) - a:r
+ let l:dgg = <SID>grey_level(l:gy) - a:g
+ let l:dgb = <SID>grey_level(l:gz) - a:b
+ let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
+ let l:dr = <SID>rgb_level(l:gx) - a:r
+ let l:dg = <SID>rgb_level(l:gy) - a:g
+ let l:db = <SID>rgb_level(l:gz) - a:b
+ let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)
+ if l:dgrey < l:drgb
+ " use the grey
+ return <SID>grey_color(l:gx)
+ else
+ " use the color
+ return <SID>rgb_color(l:x, l:y, l:z)
+ endif
+ else
+ " only one possibility
+ return <SID>rgb_color(l:x, l:y, l:z)
+ endif
+ endfun
+
+ " returns the palette index to approximate the 'rrggbb' hex string
+ fun <SID>rgb(rgb)
+ let l:r = ('0x' . strpart(a:rgb, 0, 2)) + 0
+ let l:g = ('0x' . strpart(a:rgb, 2, 2)) + 0
+ let l:b = ('0x' . strpart(a:rgb, 4, 2)) + 0
+
+ return <SID>color(l:r, l:g, l:b)
+ endfun
+
+ " sets the highlighting for the given group
+ fun <SID>X(group, fg, bg, attr)
+ let l:attr = a:attr
+ if g:two_firewatch_italics == 0 && l:attr ==? 'italic'
+ let l:attr = 'none'
+ endif
+
+ if a:fg !=? ''
+ exec 'hi ' . a:group . ' guifg=#' . a:fg . ' ctermfg=' . <SID>rgb(a:fg)
+ endif
+ if a:bg !=? ''
+ exec 'hi ' . a:group . ' guibg=#' . a:bg . ' ctermbg=' . <SID>rgb(a:bg)
+ endif
+ if a:attr !=? ''
+ exec 'hi ' . a:group . ' gui=' . l:attr . ' cterm=' . l:attr
+ endif
+ endfun
+
+ "}}}
+
+ " Color definition --------------------------------------------------------{{{
+ if &background ==? 'light'
+ let s:uno_1 = '2d2006'
+ let s:uno_2 = '896724'
+ let s:uno_3 = 'B29762'
+ let s:uno_4 = 'B6ad9a'
+
+ let s:duo_1 = '065289'
+ let s:duo_2 = '718ecd'
+ let s:duo_3 = 'aeb3b7'
+
+ let s:syntax_color_renamed = '33a0ff'
+ let s:syntax_color_added = '43d08a'
+ let s:syntax_color_modified = 'e0c285'
+ let s:syntax_color_removed = 'e05252'
+
+ let s:syntax_fg = s:uno_2
+ let s:syntax_bg = 'FAF8F5'
+ let s:syntax_accent = '447EBB'
+ let s:syntax_gutter = 'EAE1D2'
+ let s:syntax_selection = 'E5DDCB'
+ let s:syntax_fold_bg = 'd1cec7'
+ let s:syntax_cursor_line = 'F3EFE7'
+ else
+ let s:uno_1 = 'd6e9ff'
+ let s:uno_2 = 'abb2bf'
+ let s:uno_3 = '6e88a6'
+ let s:uno_4 = '55606d'
+
+ let s:duo_1 = 'c8ae9d'
+ let s:duo_2 = 'e06c75'
+ let s:duo_3 = 'dd672c'
+
+ let s:syntax_color_renamed = '33a0ff'
+ let s:syntax_color_added = '43d08a'
+ let s:syntax_color_modified = 'e0c285'
+ let s:syntax_color_removed = 'e05252'
+
+ let s:syntax_fg = s:uno_2
+ let s:syntax_bg = '282c34'
+ let s:syntax_accent = '56b6c2'
+ let s:syntax_gutter = '636d83'
+ let s:syntax_selection = '3e4452'
+ let s:syntax_fold_bg = '5c6370'
+ let s:syntax_cursor_line = '2c323c'
+ endif
+
+ " neovim :terminal colors
+ let g:terminal_color_0 = "#282c34"
+ let g:terminal_color_8 = "#282c34"
+ let g:terminal_color_1 = "#e06c75"
+ let g:terminal_color_9 = "#e06c75"
+ let g:terminal_color_2 = "#98c379"
+ let g:terminal_color_10 = "#98c379"
+ let g:terminal_color_3 = "#e5c07b"
+ let g:terminal_color_11 = "#e5c07b"
+ let g:terminal_color_4 = "#61afef"
+ let g:terminal_color_12 = "#61afef"
+ let g:terminal_color_5 = "#c678dd"
+ let g:terminal_color_13 = "#c678dd"
+ let g:terminal_color_6 = "#56b6c2"
+ let g:terminal_color_14 = "#56b6c2"
+ let g:terminal_color_7 = "#dcdfe4"
+ let g:terminal_color_15 = "#dcdfe4"
+
+ "}}}
+
+ " Vim editor color --------------------------------------------------------{{{
+ call <sid>X('bold', '', '', 'bold')
+ call <sid>X('ColorColumn', '', s:syntax_cursor_line, '')
+ call <sid>X('Conceal', '', '', '')
+ call <sid>X('Cursor', s:syntax_bg, s:syntax_accent, '')
+ call <sid>X('CursorIM', '', '', '')
+ call <sid>X('CursorColumn', '', s:syntax_cursor_line, '')
+ call <sid>X('CursorLine', '', s:syntax_cursor_line, '')
+ call <sid>X('Directory', s:uno_1, '', '')
+ call <sid>X('ErrorMsg', s:syntax_color_removed, s:syntax_bg, 'none')
+ call <sid>X('VertSplit', s:syntax_fold_bg, '', 'none')
+ call <sid>X('Folded', s:syntax_bg, s:syntax_fold_bg, '')
+ call <sid>X('FoldColumn', s:uno_3, s:syntax_cursor_line, '')
+ call <sid>X('IncSearch', s:syntax_bg, s:uno_4, '')
+ call <sid>X('LineNr', s:syntax_fold_bg, '', '')
+ call <sid>X('CursorLineNr', s:uno_2, '', 'none')
+ call <sid>X('MatchParen', s:syntax_bg, s:syntax_accent, '')
+ call <sid>X('Italic', '', '', 'italic')
+ call <sid>X('ModeMsg', s:syntax_color_added, '', '')
+ call <sid>X('MoreMsg', s:syntax_fg, '', '')
+ call <sid>X('NonText', s:uno_4, '', '')
+ call <sid>X('PMenu', '', s:syntax_selection, '')
+ call <sid>X('PMenuSel', '', s:syntax_bg, '')
+ call <sid>X('PMenuSbar', '', s:syntax_bg, '')
+ call <sid>X('PMenuThumb', '', s:uno_1, '')
+ call <sid>X('Question', s:syntax_accent, '', '')
+ call <sid>X('Search', s:syntax_bg, s:uno_4, '')
+ call <sid>X('SpecialKey', s:syntax_fold_bg, '', '')
+ call <sid>X('StatusLine', s:syntax_fg, s:syntax_cursor_line, 'none')
+ call <sid>X('StatusLineNC', s:uno_4, '', '')
+ call <sid>X('TabLine', s:uno_4, '', '')
+ call <sid>X('TabLineFill', '', '', 'none')
+ call <sid>X('TabLineSel', s:syntax_fg, '', '')
+ call <sid>X('Title', s:duo_2, '', 'bold')
+ call <sid>X('Visual', '', s:syntax_selection, '')
+ call <sid>X('VisualNOS', '', s:syntax_selection, '')
+ call <sid>X('WarningMsg', s:syntax_accent, '', '')
+ call <sid>X('TooLong', s:syntax_accent, '', '')
+ call <sid>X('WildMenu', s:syntax_fg, s:uno_4, '')
+ call <sid>X('Normal', s:syntax_fg, s:syntax_bg, '')
+ call <sid>X('SignColumn', '', s:uno_4, '')
+ call <sid>X('Special', s:duo_2, '', '')
+ " }}}
+
+ " Standard syntax highlighting --------------------------------------------{{{
+ call <sid>X('Comment', s:uno_4, '', 'italic')
+ call <sid>X('Constant', s:duo_2, '', '')
+ call <sid>X('String', s:duo_1, '', '')
+ call <sid>X('Character', s:duo_2, '', '')
+ call <sid>X('Number', s:duo_2, '', '')
+ call <sid>X('Boolean', s:duo_2, '', '')
+ call <sid>X('Float', s:duo_2, '', '')
+ call <sid>X('Identifier', s:uno_3, '', 'none')
+ call <sid>X('Function', s:uno_2, '', '')
+ call <sid>X('Statement', s:duo_1, '', 'none')
+ call <sid>X('Conditional', s:syntax_accent, '', '')
+ call <sid>X('Repeat', s:duo_2, '', '')
+ call <sid>X('Label', s:uno_1, '', '')
+ call <sid>X('Operator', s:syntax_accent, '', 'none')
+ call <sid>X('Keyword', s:uno_1, '', '')
+ call <sid>X('Exception', s:uno_1, '', '')
+ call <sid>X('PreProc', s:uno_1, '', '')
+ "call <sid>X('Include', s:duo_2, '', '')
+ "call <sid>X('Define', s:duo_2, '', 'none')
+ "call <sid>X('Macro', s:uno_3, '', '')
+ "call <sid>X('PreCondit', 'ff0000', '', '')
+ call <sid>X('Type', s:duo_1, '', 'none')
+ call <sid>X('StorageClass', s:duo_2, '', '')
+ call <sid>X('Structure', s:uno_1, '', '')
+ call <sid>X('Typedef', s:uno_1, '', '')
+ call <sid>X('Special', s:uno_3, '', '')
+ call <sid>X('SpecialChar', '', '', '')
+ call <sid>X('Tag', '', '', '')
+ call <sid>X('Delimiter', s:uno_4, '', '')
+ call <sid>X('SpecialComment', '', '', '')
+ call <sid>X('Debug', '', '', '')
+ call <sid>X('Underlined', s:duo_1, '', 'underline')
+ call <sid>X('Ignore', '', '', '')
+ call <sid>X('Error', s:syntax_color_removed, s:syntax_bg, 'bold')
+ call <sid>X('Todo', s:syntax_color_added, s:syntax_bg, '')
+ " }}}
+
+ " Asciidoc highlighting ---------------------------------------------------{{{
+ call <sid>X('asciidocListingBlock', s:uno_2, '', '')
+ " }}}
+
+ " Cucumber highlighting ---------------------------------------------------{{{
+ call <sid>X('cucumberGiven', s:duo_2, '', '')
+ call <sid>X('cucumberWhen', s:duo_2, '', '')
+ call <sid>X('cucumberWhenAnd', s:duo_2, '', '')
+ call <sid>X('cucumberThen', s:duo_2, '', '')
+ call <sid>X('cucumberThenAnd', s:duo_2, '', '')
+ call <sid>X('cucumberUnparsed', s:duo_1, '', '')
+ call <sid>X('cucumberFeature', s:syntax_accent, '', 'bold')
+ call <sid>X('cucumberBackground', s:duo_2, '', 'bold')
+ call <sid>X('cucumberScenario', s:duo_2, '', 'bold')
+ call <sid>X('cucumberScenarioOutline', s:duo_2, '', 'bold')
+ call <sid>X('cucumberTags', s:uno_4, '', 'bold')
+ call <sid>X('cucumberDelimiter', s:uno_4, '', 'bold')
+ " }}}
+
+ " Diff highlighting -------------------------------------------------------{{{
+ call <sid>X('DiffAdd', s:syntax_color_added, s:syntax_selection, '')
+ call <sid>X('DiffChange', s:syntax_color_modified, s:syntax_selection, '')
+ call <sid>X('DiffDelete', s:syntax_color_removed, s:syntax_selection, '')
+ call <sid>X('DiffText', s:uno_2, s:syntax_selection, '')
+ call <sid>X('DiffAdded', s:duo_2, s:syntax_selection, '')
+ call <sid>X('DiffFile', s:syntax_accent, s:syntax_selection, '')
+ call <sid>X('DiffNewFile', s:duo_2, s:syntax_selection, '')
+ call <sid>X('DiffLine', s:uno_2, s:syntax_selection, '')
+ call <sid>X('DiffRemoved', s:syntax_accent, s:syntax_selection, '')
+ " }}}
+
+ " C/C++ and other languages like that -------------------------------------{{{
+ "call <sid>X('cCustomParen', s:uno_4, '', '')
+ " }}}
+
+ " CSS/Sass highlighting ---------------------------------------------------{{{
+ call <sid>X('cssAttrComma', s:duo_3, '', '')
+ call <sid>X('cssAttributeSelector', s:duo_2, '', '')
+ call <sid>X('cssBraces', s:uno_4, '', '')
+ call <sid>X('cssClassName', s:uno_1, '', '')
+ call <sid>X('cssClassNameDot', s:uno_1, '', '')
+ call <sid>X('cssDefinition', s:duo_3, '', '')
+ call <sid>X('cssFlexibleBoxAttr', s:duo_1, '', '')
+ call <sid>X('cssBorderAttr', s:duo_1, '', '')
+ call <sid>X('cssPositioningAttr', s:duo_1, '', '')
+ call <sid>X('cssTransitionAttr', s:duo_1, '', '')
+ call <sid>X('cssCommonAttr', s:duo_1, '', '')
+ call <sid>X('cssBoxAttr', s:duo_1, '', '')
+ call <sid>X('cssFontAttr', s:duo_1, '', '')
+ call <sid>X('cssTextAttr', s:duo_1, '', '')
+ call <sid>X('cssFontDescriptor', s:uno_1, '', '')
+ call <sid>X('cssFunctionName', s:uno_3, '', '')
+ call <sid>X('cssIdentifier', s:duo_1, '', '')
+ call <sid>X('cssImportant', s:duo_1, '', '')
+ call <sid>X('cssUnitDecorators', s:duo_2, '', '')
+ call <sid>X('cssInclude', s:uno_1, '', '')
+ call <sid>X('cssIncludeKeyword', s:duo_3, '', '')
+ call <sid>X('cssMediaType', s:uno_1, '', '')
+ call <sid>X('cssProp', s:uno_3, '', '')
+ call <sid>X('cssPseudoClassId', s:uno_1, '', '')
+ call <sid>X('cssSelectorOp', s:duo_3, '', '')
+ call <sid>X('cssSelectorOp2', s:duo_3, '', '')
+ call <sid>X('cssStringQ', s:duo_1, '', '')
+ call <sid>X('cssStringQQ', s:duo_1, '', '')
+ call <sid>X('cssTagName', s:uno_1, '', '')
+ call <sid>X('cssClassNameDot', s:uno_4, '', '')
+ call <sid>X('cssValueNumber', s:duo_1, '', '')
+
+ call <sid>X('sassAmpersand', s:syntax_accent, '', '')
+ call <sid>X('sassClass', s:uno_1, '', '')
+ call <sid>X('sassControl', s:duo_3, '', '')
+ call <sid>X('sassExtend', s:duo_3, '', '')
+ call <sid>X('sassFor', s:uno_1, '', '')
+ call <sid>X('sassProperty', s:uno_3, '', '')
+ call <sid>X('sassFunction', s:duo_1, '', '')
+ call <sid>X('sassId', s:duo_2, '', '')
+ call <sid>X('sassInclude', s:uno_1, '', '')
+ call <sid>X('sassMedia', s:duo_3, '', '')
+ call <sid>X('sassMediaOperators', s:uno_1, '', '')
+ call <sid>X('sassMixin', s:duo_3, '', '')
+ call <sid>X('sassMixinName', s:duo_2, '', '')
+ call <sid>X('sassMixing', s:duo_3, '', '')
+ call <sid>X('sassVariable', s:uno_2, '', '')
+ call <sid>X('sassVariableAssignment', s:uno_4, '', '')
+ " }}}
+
+ " Elixir highlighting------------------------------------------------------{{{
+ "call <sid>X('elixirAtom', s:syntax_accent, '', '')
+ "call <sid>X('elixirAlias', s:duo_1, '', '')
+ call <sid>X('elixirBlock', s:uno_3, '', '')
+ "call <sid>X('elixirBlockDefinition', s:duo_2, '', '')
+ "call <sid>X('elixirInclude', s:duo_2, '', '')
+ call <sid>X('elixirId', s:uno_2, '', '')
+ call <sid>X('elixirModuleDeclaration', s:uno_1, '', '')
+ "call <sid>X('elixirModuleDefine', s:duo_2, '', '')
+ "call <sid>X('elixirOperator', s:uno_3, '', '')
+ "call <sid>X('elixirSigil', s:uno_4, '', '')
+ "call <sid>X('elixirVariable', s:duo_2, '', '')
+ " }}}
+
+ " Go highlighting ---------------------------------------------------------{{{
+ call <sid>X('goDeclaration', s:duo_3, '', '')
+ " }}}
+
+ " Git and git related plugins highlighting --------------------------------{{{
+ call <sid>X('gitcommitComment', s:uno_4, '', '')
+ call <sid>X('gitcommitUnmerged', s:duo_2, '', '')
+ call <sid>X('gitcommitOnBranch', '', '', '')
+ call <sid>X('gitcommitBranch', s:duo_3, '', '')
+ call <sid>X('gitcommitDiscardedType', s:syntax_accent, '', '')
+ call <sid>X('gitcommitSelectedType', s:duo_2, '', '')
+ call <sid>X('gitcommitHeader', '', '', '')
+ call <sid>X('gitcommitUntrackedFile', s:duo_2, '', '')
+ call <sid>X('gitcommitDiscardedFile', s:syntax_accent, '', '')
+ call <sid>X('gitcommitSelectedFile', s:duo_2, '', '')
+ call <sid>X('gitcommitUnmergedFile', s:uno_1, '', '')
+ call <sid>X('gitcommitFile', '', '', '')
+ hi link gitcommitNoBranch gitcommitBranch
+ hi link gitcommitUntracked gitcommitComment
+ hi link gitcommitDiscarded gitcommitComment
+ hi link gitcommitSelected gitcommitComment
+ hi link gitcommitDiscardedArrow gitcommitDiscardedFile
+ hi link gitcommitSelectedArrow gitcommitSelectedFile
+ hi link gitcommitUnmergedArrow gitcommitUnmergedFile
+
+ call <sid>X('SignifySignAdd', s:duo_2, '', '')
+ call <sid>X('SignifySignChange', s:uno_1, '', '')
+ call <sid>X('SignifySignDelete', s:syntax_accent, '', '')
+ hi link GitGutterAdd SignifySignAdd
+ hi link GitGutterChange SignifySignChange
+ hi link GitGutterDelete SignifySignDelete
+ call <sid>X('diffAdded', s:duo_2, '', '')
+ call <sid>X('diffRemoved', s:syntax_accent, '', '')
+ " }}}
+
+ " HTML highlighting -------------------------------------------------------{{{
+ call <sid>X('htmlArg', s:uno_2, '', '')
+ call <sid>X('htmlTagName', s:uno_1, '', '')
+ call <sid>X('htmlSpecialTagName', s:uno_1, '', '')
+ call <sid>X('htmlTag', s:uno_3, '', '')
+
+ call <sid>X('liquidDelimiter', s:uno_4, '', '')
+ call <sid>X('liquidKeyword', s:uno_3, '', '')
+ " }}}
+
+ " JavaScript highlighting -------------------------------------------------{{{
+ call <sid>X('coffeeString', s:duo_2, '', '')
+
+ call <sid>X('javaScriptBraces', s:uno_3, '', '')
+ call <sid>X('javaScriptFunction', s:duo_3, '', '')
+ call <sid>X('javaScriptIdentifier', s:duo_3, '', '')
+ call <sid>X('javaScriptNull', s:uno_1, '', '')
+ call <sid>X('javaScriptNumber', s:uno_1, '', '')
+ call <sid>X('javaScriptRequire', s:duo_2, '', '')
+ call <sid>X('javaScriptReserved', s:duo_3, '', '')
+ " https://github.com/pangloss/vim-javascript
+ call <sid>X('jsArrowFunction', s:duo_3, '', '')
+ call <sid>X('jsClassKeywords', s:duo_3, '', '')
+ call <sid>X('jsDocParam', s:duo_2, '', '')
+ call <sid>X('jsDocTags', s:duo_3, '', '')
+ call <sid>X('jsFuncCall', s:uno_1, '', '')
+ call <sid>X('jsFunction', s:duo_3, '', '')
+ call <sid>X('jsGlobalObjects', s:uno_1, '', '')
+ call <sid>X('jsModuleWords', s:duo_3, '', '')
+ call <sid>X('jsModules', s:duo_3, '', '')
+ call <sid>X('jsNoise', s:uno_3, '', '')
+ call <sid>X('jsNull', s:uno_1, '', '')
+ call <sid>X('jsOperator', s:duo_2, '', '')
+ call <sid>X('jsObjectBraces', s:uno_3, '', '')
+ call <sid>X('jsBrackets', s:uno_3, '', '')
+ call <sid>X('jsParens', s:uno_3, '', '')
+ call <sid>X('jsStorageClass', s:duo_1, '', '')
+ call <sid>X('jsTemplateBraces', s:syntax_accent, '', '')
+ call <sid>X('jsTemplateVar', s:duo_2, '', '')
+ call <sid>X('jsThis', s:syntax_accent, '', '')
+ call <sid>X('jsUndefined', s:uno_1, '', '')
+ " https://github.com/othree/yajs.vim
+ call <sid>X('javascriptArrowFunc', s:duo_3, '', '')
+ call <sid>X('javascriptClassExtends', s:duo_3, '', '')
+ call <sid>X('javascriptClassKeyword', s:duo_3, '', '')
+ call <sid>X('javascriptDocNotation', s:duo_3, '', '')
+ call <sid>X('javascriptDocParamName', s:duo_2, '', '')
+ call <sid>X('javascriptDocTags', s:duo_3, '', '')
+ call <sid>X('javascriptEndColons', s:uno_3, '', '')
+ call <sid>X('javascriptExport', s:duo_3, '', '')
+ call <sid>X('javascriptFuncArg', s:uno_1, '', '')
+ call <sid>X('javascriptFuncKeyword', s:duo_3, '', '')
+ call <sid>X('javascriptIdentifier', s:syntax_accent, '', '')
+ call <sid>X('javascriptImport', s:duo_3, '', '')
+ call <sid>X('javascriptObjectLabel', s:uno_1, '', '')
+ call <sid>X('javascriptOpSymbol', s:duo_2, '', '')
+ call <sid>X('javascriptOpSymbols', s:duo_2, '', '')
+ call <sid>X('javascriptPropertyName', s:duo_2, '', '')
+ call <sid>X('javascriptTemplateSB', s:syntax_accent, '', '')
+ call <sid>X('javascriptVariable', s:duo_3, '', '')
+ " }}}
+
+ " JSON highlighting -------------------------------------------------------{{{
+ call <sid>X('jsonCommentError', s:uno_1, '', '' )
+ call <sid>X('jsonKeyword', s:duo_2, '', '' )
+ call <sid>X('jsonQuote', s:uno_3, '', '' )
+ call <sid>X('jsonMissingCommaError', s:syntax_accent, '', 'reverse' )
+ call <sid>X('jsonNoQuotesError', s:syntax_accent, '', 'reverse' )
+ call <sid>X('jsonNumError', s:syntax_accent, '', 'reverse' )
+ call <sid>X('jsonString', s:duo_1, '', '' )
+ call <sid>X('jsonStringSQError', s:syntax_accent, '', 'reverse' )
+ call <sid>X('jsonSemicolonError', s:syntax_accent, '', 'reverse' )
+ " }}}
+
+ " Markdown highlighting ---------------------------------------------------{{{
+ call <sid>X('markdownUrl', s:duo_3, '', '')
+ call <sid>X('markdownCode', s:duo_1, '', '')
+ call <sid>X('markdownHeadingDelimiter', s:duo_3, '', '')
+ call <sid>X('markdownListMarker', s:duo_3, '', '')
+
+ call <sid>X('mkdCode', s:duo_1, '', '')
+ call <sid>X('mkdDelimiter', s:uno_3, '', '')
+ call <sid>X('mkdLink', s:duo_1, '', '')
+ call <sid>X('mkdLinkDef', s:duo_1, '', '')
+ call <sid>X('mkdLinkDefTarget', s:duo_1, '', 'underline')
+ call <sid>X('mkdURL', s:duo_1, '', 'underline')
+
+ call <sid>X('htmlBold', s:uno_2, '', 'bold')
+ call <sid>X('htmlItalic', s:uno_2, '', 'italic')
+ " }}}
+
+ " NERDTree highlighting ---------------------------------------------------{{{
+ call <sid>X('NERDTreeExecFile', s:duo_1, '', '')
+ " }}}
+
+ " Ruby highlighting -------------------------------------------------------{{{
+ call <sid>X('rubyBlock', s:uno_2, '', '')
+ call <sid>X('rubyBlockParameter', s:uno_2, '', '')
+ call <sid>X('rubyBlockParameterList', s:uno_3, '', '')
+ call <sid>X('rubyCapitalizedMethod', s:duo_2, '', '')
+ call <sid>X('rubyClass', s:duo_2, '', '')
+ call <sid>X('rubyConstant', s:uno_3, '', '')
+ call <sid>X('rubyControl', s:duo_2, '', '')
+ call <sid>X('rubyConditionalModifier', s:syntax_accent, '', '')
+ call <sid>X('rubyCurlyBlockDelimiter', s:uno_4, '', '')
+ call <sid>X('rubyDefine', s:duo_2, '', '')
+ call <sid>X('rubyEscape', s:syntax_accent, '', '')
+ call <sid>X('rubyFunction', s:uno_1, '', '')
+ call <sid>X('rubyGlobalVariable', s:syntax_accent, '', '')
+ call <sid>X('rubyInclude', s:duo_2, '', '')
+ call <sid>X('rubyIncluderubyGlobalVariable', s:syntax_accent, '', '')
+ call <sid>X('rubyInstanceVariable', s:syntax_accent, '', '')
+ call <sid>X('rubyInterpolation', s:duo_2, '', '')
+ call <sid>X('rubyInterpolationDelimiter', s:uno_4, '', '')
+ call <sid>X('rubyModule', s:duo_2, '', '')
+ call <sid>X('rubyRegexp', s:duo_1, '', '')
+ call <sid>X('rubyRegexpDelimiter', s:uno_4, '', '')
+ call <sid>X('rubyStringDelimiter', s:duo_3, '', '')
+ call <sid>X('rubySymbol', s:duo_1, '', '')
+ " }}}
+
+ " Spelling highlighting ---------------------------------------------------{{{
+ call <sid>X('SpellBad', '', s:syntax_bg, 'undercurl')
+ call <sid>X('SpellLocal', '', s:syntax_bg, 'undercurl')
+ call <sid>X('SpellCap', '', s:syntax_bg, 'undercurl')
+ call <sid>X('SpellRare', '', s:syntax_bg, 'undercurl')
+ " }}}
+
+ " Vim highlighting --------------------------------------------------------{{{
+ "call <sid>X('vimCommentTitle', s:uno_4, '', 'bold')
+ call <sid>X('vimCommand', s:uno_1, '', '')
+ call <sid>X('vimVar', s:duo_2, '', '')
+ call <sid>X('vimEnvVar', s:duo_3, '', '')
+
+ " Vim Help highlights
+ call <sid>X('helpHyperTextJump', s:duo_1, '', '')
+ call <sid>X('helpSpecial', s:duo_2, '', '')
+
+ " }}}
+
+ " XML highlighting --------------------------------------------------------{{{
+ call <sid>X('xmlAttrib', s:uno_1, '', '')
+ call <sid>X('xmlEndTag', s:syntax_accent, '', '')
+ call <sid>X('xmlTag', s:syntax_accent, '', '')
+ call <sid>X('xmlTagName', s:syntax_accent, '', '')
+ " }}}
+
+ " YAML highlighting -------------------------------------------------------{{{
+ call <sid>X('yamlKey', s:duo_2, '', '')
+ call <sid>X('yamlOperator', s:uno_4, '', '')
+
+ call <sid>X('liquidDelimiter', s:uno_4, '', '')
+ call <sid>X('liquidKeyword', s:uno_3, '', '')
+ " }}}
+
+" Delete functions =========================================================={{{
+ delf <SID>X
+ delf <SID>rgb
+ delf <SID>color
+ delf <SID>rgb_color
+ delf <SID>rgb_level
+ delf <SID>rgb_number
+ delf <SID>grey_color
+ delf <SID>grey_level
+ delf <SID>grey_number
+"}}}
+
+endif
+"}}}
+
+
+" vim: set fdl=0 fdm=marker: