aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md16
-rw-r--r--autoload/color.vim269
-rw-r--r--colors/doom-one.vim459
-rw-r--r--static/demo.pngbin0 -> 238277 bytes
4 files changed, 744 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..496ec02
--- /dev/null
+++ b/README.md
@@ -0,0 +1,16 @@
+
+# doom-one.vim
+
+> Come join the dark side
+
+This colorscheme is ported from [doom-one](https://github.com/hlissner/emacs-doom-themes/blob/master/themes/doom-one-theme.el).
+
+## Install
+
+```vim
+Plug 'romgrk/doom-one.vim'
+```
+
+## Screenshot
+
+![theme](./static/demo.png)
diff --git a/autoload/color.vim b/autoload/color.vim
new file mode 100644
index 0000000..b5e0e8f
--- /dev/null
+++ b/autoload/color.vim
@@ -0,0 +1,269 @@
+" File: color.vim
+" Author: romgrk
+" Date: 15 Mar 2016
+" Description: vimscript RGB/HSL color parsing
+" This is mostly a transcript from a javascript color parsing module.
+" !::exe [so %]
+" ================================================================================
+" Definitions: {{{1
+" In function names:
+" • “Hex” refers to hexadecimal color format e.g. #599eff
+" • “RGB” refers to an array of numbers [r, g, b]
+" where r,g,b ∈ [0, 255]
+" • “HSL” refers to an array of floats [h, s, l]
+" where h,s,l ∈ [0, 1.0]
+" }}}1
+" ================================================================================
+" Color-format patterns:
+" {{{1
+
+let s:patterns = {}
+
+" 6 hex-numbers, optionnal #-prefix
+let s:patterns['hex'] = '\v#?(\x{2})(\x{2})(\x{2})'
+
+" short version is strict: starting # mandatory
+let s:patterns['shortHex'] = '\v#(\x{1})(\x{1})(\x{1})'
+
+" Disabled
+"let s:patterns['rgb'] = '\vrgb\s*\((\d+)\s*,(\d+)\s*,(\d+)\s*)\s*'
+"let s:patterns['rgba'] = '\vrgba\s*\((\d+)\s*,(\d+)\s*,(\d+)\s*,(\d+)\s*)\s*'
+
+" }}}1
+" ================================================================================
+" Functions:
+" {{{1
+
+" @params String string The string to test
+" @returns Boolean [0 or 1] if string matches: rrggbb OR #rrggbb OR #rgb
+fu! color#Test (string)
+ for key in keys(s:patterns)
+ if a:string =~# s:patterns[key]
+ return 1
+ end
+ endfor
+ return 0
+endfu
+
+" @params (r, g, b)
+" @params ([r, g, b])
+" @returns String A RGB color
+fu! color#RGBtoHex (...)
+ let [r, g, b] = ( a:0==1 ? a:1 : a:000 )
+ let num = printf('%02x', float2nr(r)) . ''
+ \ . printf('%02x', float2nr(g)) . ''
+ \ . printf('%02x', float2nr(b)) . ''
+ return '#' . num
+endfu
+
+" @param {String|Number} color The color to parse
+fu! color#HexToRGB (color)
+ if type(a:color) == 2
+ let color = printf('%x', a:color)
+ else
+ let color = a:color | end
+
+ let matches = matchlist(color, s:patterns['hex'])
+ let factor = 0x1
+
+ if empty(matches)
+ let matches = matchlist(color, s:patterns['shortHex'])
+ let factor = 0x10
+ end
+
+ if len(matches) < 4
+ throw 'Couldnt parse ' . string(color) . ' ' . string(matches)
+ end
+
+ let r = str2nr(matches[1], 16) * factor
+ let g = str2nr(matches[2], 16) * factor
+ let b = str2nr(matches[3], 16) * factor
+
+ return [r, g, b]
+endfu
+
+
+" Converts an HSL color value to RGB. Conversion formula
+" adapted from http://en.wikipedia.org/wiki/HSL_color_space.
+" Assumes h, s, and l are contained in the set [0, 1] and
+" returns r, g, and b in the set [0, 255].
+" @param Number h OR @param Array [h, s, l]
+" @param Number s
+" @param Number l
+" @returns Array [r, g, b] The RGB representation
+fu! color#HSLtoRGB(...) " (h, s, l)
+ let [h, s, l] = ( a:0==1 ? a:1 : a:000 )
+
+ if (s == 0.0) " achromatic
+ let r = l
+ let g = l
+ let b = l
+ else
+ let q = l < 0.5 ? l * (1 + s) : l + s - l * s
+ let p = 2 * l - q
+ let r = color#Hue2RGB(p, q, h + 0.33333)
+ let g = color#Hue2RGB(p, q, h)
+ let b = color#Hue2RGB(p, q, h - 0.33333)
+ end
+
+ return [r * 255.0, g * 255.0, b * 255.0]
+endfu
+
+
+" @param Number r OR @param Array [r, g, b]
+" @param Number g
+" @param Number b
+" @returns Array [h, s, l] The HSL representation
+fu! color#RGBtoHSL(...)
+ let [r, g, b] = ( a:0==1 ? a:1 : a:000 )
+ let max = max([r, g, b])
+ let min = min([r, g, b])
+
+ let r = str2float(r)
+ let g = str2float(g)
+ let b = str2float(b)
+ let max = str2float(max)
+ let min = str2float(min)
+
+ let max = max / 255
+ let min = min / 255
+ let r = r / 255
+ let g = g / 255
+ let b = b / 255
+ let h = str2float(0)
+ let s = str2float(0)
+ let l = (max + min) / 2
+
+ if (max == min)
+ let h = 0 " achromatic
+ let s = 0 " achromatic
+ else
+ let d = max - min
+ let s = (l > 0.5 ? d / (2 - max - min)
+ \ : d / (max + min) )
+ if (max == r)
+ let h = (g - b) / d + (g < b ? 6 : 0)
+ end
+ if (max == g)
+ let h = (b - r) / d + 2
+ end
+ if (max == b)
+ let h = (r - g) / d + 4
+ end
+ let h = h / 6
+ end
+
+ return [h, s, l]
+endfu
+
+fu! color#Hue2RGB(...) " (p, q, t)
+ let [p, q, t] = ( a:0==1 ? a:1 : a:000 )
+
+ if(t < 0) | let t += 1 | end
+ if(t > 1) | let t -= 1 | end
+
+ if(t < 1.0/6) | return (p + (q - p) * 6.0 * t) | end
+ if(t < 1.0/2) | return (q) | end
+ if(t < 2.0/3) | return (p + (q - p) * (2.0/3 - t) * 6.0) | end
+
+ return p
+endfu
+
+" }}}1
+" ================================================================================
+" Composed functions:
+" {{{1
+
+fu! color#HexToHSL (color)
+ let [r, g, b] = color#HexToRGB(a:color)
+ return color#RGBtoHSL(r, g, b)
+endfu
+
+fu! color#HSLtoHex (...)
+ let [h, s, l] = ( a:0==1 ? a:1 : a:000 )
+ let [r, g, b] = color#HSLtoRGB(h, s, l)
+ return color#RGBtoHex(r, g, b)
+endfu
+
+" @params String color The color
+" @params {Number|String|Float} [amount=5] The percentage of light
+fu! color#Lighten(color, ...)
+ let amount = a:0 ?
+ \(type(a:1) < 2 ?
+ \str2float(a:1) : a:1 )
+ \: 5.0
+
+ if(amount < 1.0)
+ let amount = 1.0 + amount
+ else
+ let amount = 1.0 + (amount / 100.0)
+ end
+
+ let rgb = color#HexToRGB(a:color)
+ let rgb = map(rgb, 'v:val * amount')
+ let rgb = map(rgb, 'v:val > 255.0 ? 255.0 : v:val')
+ let rgb = map(rgb, 'float2nr(v:val)')
+ let hex = color#RGBtoHex(rgb)
+ return hex
+endfu
+
+" @params String color The color
+" @params {Number|String|Float} [amount=5] The percentage of darkness
+fu! color#Darken(color, ...)
+ let amount = a:0 ?
+ \(type(a:1) < 2 ?
+ \str2float(a:1) : a:1 )
+ \: 5.0
+
+ if(amount < 1.0)
+ let amount = 1.0 - amount
+ else
+ let amount = 1.0 - (amount / 100.0)
+ end
+
+ if(amount < 0.0)
+ let amount = 0.0 | end
+
+
+ let rgb = color#HexToRGB(a:color)
+ let rgb = map(rgb, 'v:val * amount')
+ let rgb = map(rgb, 'v:val > 255.0 ? 255.0 : v:val')
+ let rgb = map(rgb, 'float2nr(v:val)')
+ let hex = color#RGBtoHex(rgb)
+ return hex
+endfu
+
+function! color#Decrease (...)
+ if &background == 'light'
+ return call(function('color#Lighten'), a:000)
+ end
+ return call(function('color#Darken'), a:000)
+endfunc
+
+function! color#Increase (...)
+ if &background == 'light'
+ return call(function('color#Darken'), a:000)
+ end
+ return call(function('color#Lighten'), a:000)
+endfunc
+
+function! color#Mix (a, b, ...)
+ let amount = a:0 ? a:1 : 0.5
+
+ let ca = color#HexToRGB(a:a)
+ let cb = color#HexToRGB(a:b)
+
+ let r = s:interpolate(ca[0], cb[0], amount)
+ let g = s:interpolate(ca[1], cb[1], amount)
+ let b = s:interpolate(ca[2], cb[2], amount)
+
+ return color#RGBtoHex([r, g, b])
+endfunc
+
+function! s:interpolate (start, end, amount)
+ let diff = a:end - a:start
+ return a:start + (diff * a:amount)
+endfunc
+
+" }}}1
+
diff --git a/colors/doom-one.vim b/colors/doom-one.vim
new file mode 100644
index 0000000..52fb42f
--- /dev/null
+++ b/colors/doom-one.vim
@@ -0,0 +1,459 @@
+" !::exe [So]
+
+if &bg != 'dark'
+ set background=dark
+end
+
+let colors_name = 'doom-one'
+
+" Highlighting function {{{
+function! s:_ (name, ...)
+ let fg = ''
+ let bg = ''
+ let attr = ''
+
+ if type(a:1) == 3
+ let fg = get(a:1, 0, '')
+ let bg = get(a:1, 1, '')
+ let attr = get(a:1, 2, '')
+ else
+ let fg = get(a:000, 0, '')
+ let bg = get(a:000, 1, '')
+ let attr = get(a:000, 2, '')
+ end
+
+ let cmd = 'hi! ' . a:name
+ if !empty(fg)
+ let cmd .= ' guifg=' . fg
+ end
+ if !empty(bg)
+ let cmd .= ' guibg=' . bg
+ end
+ if !empty(attr)
+ let cmd .= ' gui=' . attr
+ end
+ execute cmd
+endfunc
+
+" }}}
+" Colors {{{
+
+let s:base0 = '#1B2229'
+let s:base1 = '#1c1f24'
+let s:base2 = '#202328'
+let s:base3 = '#23272e'
+let s:base4 = '#3f444a'
+let s:base5 = '#5B6268'
+let s:base6 = '#73797e'
+let s:base7 = '#9ca0a4'
+let s:base8 = '#b1b1b1'
+
+let s:grey = s:base4
+let s:red = '#ff6c6b'
+let s:orange = '#da8548'
+let s:green = '#98be65'
+let s:teal = '#4db5bd'
+let s:yellow = '#ECBE7B'
+let s:blue = '#51afef'
+let s:dark_blue = '#2257A0'
+let s:magenta = '#c678dd'
+let s:violet = '#a9a1e1'
+let s:cyan = '#46D9FF'
+let s:dark_cyan = '#5699AF'
+let s:white = '#efefef'
+
+let s:bg = '#282c34'
+let s:bg_alt = '#21242b'
+let s:bg_highlight = '#2E323C'
+let s:bg_popup = '#3E4556'
+let s:bg_widget = s:bg
+let s:bg_statusline = s:bg_popup
+let s:bg_visual = color#Lighten(s:base4, 0.3)
+let s:bg_selection = s:dark_blue
+
+let s:fg = '#bbc2cf'
+let s:fg_alt = '#5B6268'
+let s:fg_widget = s:fg
+let s:fg_conceal = s:base4
+let s:fg_subtle = s:base7
+
+
+
+let s:highlight = s:blue
+let s:highlight_color = s:base0
+
+let s:tag = '#678CFA'
+
+" PREVIOUS {{{
+
+" let s:black0 = '#000000'
+" let s:black1 = '#24292e'
+" let s:black2 = '#4c4c4c'
+" let s:white = '#f4fbfe'
+
+" let s:darkyellow = '#c59000'
+" let s:yellow = '#eab700'
+" let s:brightyellow = '#ffe914'
+
+" let s:gh_link = '#0366d6'
+
+" let s:gh_grey = '#8f9aa9'
+" let s:gh_red = '#DB524E'
+" let s:gh_orange = '#e98642'
+" let s:gh_blue0 = '#0d33a5'
+" let s:gh_blue1 = '#2076d8'
+" let s:gh_purple = '#6f42c1'
+
+" let s:gh_search = '#FFEEB9'
+" let s:gh_search_dark = '#EDB34D'
+
+let s:diff_info_fg = s:blue
+let s:diff_info_bg0 = color#Mix('#D8EEFD', s:bg, 0.6)
+let s:diff_info_bg1 = color#Mix('#D8EEFD', s:bg, 0.8)
+
+let s:diff_add_fg = s:green
+let s:diff_add_fg0 = color#Mix(s:green, s:fg, 0.4)
+let s:diff_add_bg0 = color#Mix('#acf2bd', s:bg, 0.4)
+let s:diff_add_bg1 = color#Mix('#acf2bd', s:bg, 0.6)
+let s:diff_add_bg2 = color#Mix('#acf2bd', s:bg, 0.8)
+
+let s:gh_danger_fg = s:red
+let s:gh_danger_fg0 = color#Mix(s:red, s:fg, 0.6)
+let s:gh_danger_bg0 = color#Mix('#ffdce0', s:bg, 0.6)
+let s:gh_danger_bg1 = color#Mix('#ffdce0', s:bg, 0.8)
+let s:gh_danger_bg2 = color#Mix('#ffdce0', s:bg, 0.9)
+
+" }}}
+
+" }}}
+" General UI {{{
+
+call s:_('Normal', s:fg, s:bg)
+call s:_('EndOfBuffer', s:fg, s:bg)
+call s:_('NormalPopup', s:fg, s:bg_popup)
+call s:_('NormalPopover', s:fg, s:bg_popup)
+
+call s:_('Cursor', '', s:base0, 'reverse')
+call s:_('SecondaryCursor', '', s:highlight, 'none')
+
+call s:_('Folded', s:base7, s:bg_highlight, 'none')
+call s:_('FoldColumn', s:fg_alt, s:bg_widget, '')
+call s:_('SignColumn', '', s:bg_widget, '')
+call s:_('ColorColumn', '', s:bg_widget, '')
+
+call s:_('CursorLine', '', s:bg_highlight)
+call s:_('CursorColumn', '', s:bg_highlight)
+call s:_('CursorLineNr', s:highlight, s:bg_highlight, 'none')
+call s:_('LineNr', s:base4, s:bg_widget, 'none')
+
+call s:_('IndentGuidesEven', s:base4, '', '')
+call s:_('IndentGuidesOdd', s:base4, '', '')
+
+call s:_('TermCursor', s:fg, 'none', 'reverse')
+call s:_('TermCursorNC', s:fg_alt, 'none', 'reverse')
+call s:_('TermNormal', s:fg, s:bg, '')
+hi! link TermNormalNC TermNormal
+
+
+call s:_('Visual', '', s:bg_visual)
+call s:_('VisualBold', '', s:bg_visual, 'bold')
+
+call s:_('WildMenu', s:fg, s:bg_selection)
+
+call s:_('StatusLine', s:base8, s:bg_statusline, 'none')
+call s:_('StatusLineNC', s:base6, s:bg_statusline, 'none')
+call s:_('StatusLinePart', s:base6, s:bg_statusline, 'bold')
+call s:_('StatusLinePartNC', s:base6, s:bg_statusline, 'bold')
+
+call s:_('Separator', s:fg_alt, 'none')
+call s:_('VertSplit', s:base4, s:bg, 'none')
+
+call s:_('Pmenu', s:fg, s:bg_popup)
+call s:_('PmenuSel', s:highlight_color, s:highlight)
+call s:_('PmenuSelBold', s:highlight_color, s:highlight, 'bold')
+call s:_('PmenuSbar', '', s:bg_alt)
+call s:_('PmenuThumb', '#666660', '#666660')
+
+if exists('&pumblend')
+ set pumblend=20
+end
+
+let s:bg_current = s:bg
+let s:bg_visible = s:bg
+let s:bg_other = s:base1
+
+call s:_('TabLine', s:base7, s:bg_alt, 'bold')
+call s:_('TabLineSel', s:blue, s:bg_current, 'bold')
+call s:_('TabLineFill', 'none', s:bg_other, 'bold')
+
+call s:_('BufferCurrent', s:blue, s:bg_current, 'bold')
+call s:_('BufferVisible', s:base8, s:bg_visible, 'bold')
+call s:_('Buffer', s:base6, s:bg_other, 'bold')
+call s:_('BufferCurrentMod', s:yellow, s:bg_current, 'bold')
+call s:_('BufferVisibleMod', s:yellow, s:bg_visible, 'bold')
+call s:_('BufferMod', s:yellow, s:bg_other, 'bold')
+call s:_('BufferSignCurrent', s:fg_widget, s:bg_current, 'none')
+call s:_('BufferSignVisible', s:fg_widget, s:bg_visible, 'none')
+call s:_('BufferSign', s:fg_widget, s:bg_other, 'none')
+call s:_('BufferPart', s:diff_info_fg, s:diff_info_bg0, 'bold')
+
+" }}}
+" Search, Highlight, Conceal, Messages {{{
+
+call s:_('Search', s:highlight_color, s:highlight, 'none')
+call s:_('IncSearch', s:highlight_color, s:highlight, 'none')
+call s:_('IncSearchCursor', '', '', 'reverse')
+
+call s:_('Conceal', s:fg_conceal, 'none', '')
+call s:_('SpecialKey', '#333333', 'none', '')
+call s:_('NonText', s:fg_alt, '', 'bold')
+call s:_('MatchParen', s:red, 'none', 'bold')
+call s:_('Whitespace', s:fg_subtle, '', '')
+
+
+call s:_('Highlight', '', color#Darken(s:highlight, 0.5), 'none')
+call s:_('HighlightSubtle', '', color#Darken(s:highlight, 0.5), 'none')
+
+call s:_('Question', s:green, '', 'bold')
+
+call s:_('File', s:fg, '', 'bold')
+call s:_('Directory', s:yellow, '', 'bold')
+call s:_('Section', s:magenta, '', 'bold')
+call s:_('Title', s:violet, '', 'bold')
+
+call s:_('Bold', '', '', 'bold')
+
+" Text levels {{{
+
+let s:text_colors = {
+\ 'Normal': s:fg,
+\ 'Info': s:blue,
+\ 'Success': s:green,
+\ 'Warning': s:yellow,
+\ 'Debug': s:yellow,
+\ 'Error': s:red,
+\ 'Special': s:magenta,
+\}
+for key in keys(s:text_colors)
+ call s:_('Text' . key, s:text_colors[key], '', '')
+ call s:_('Bold' . key, s:text_colors[key], '', 'bold')
+endfor
+
+" }}}
+
+hi! link Msg TextSuccess
+hi! link MoreMsg TextInfo
+hi! link WarningMsg TextWarning
+hi! link ErrorMsg TextError
+hi! link Error TextError
+hi! link ModeMsg TextSpecial
+
+
+" }}}
+" Main Syntax {{{1
+
+call s:_('Tag', s:tag, '', 'underline')
+call s:_('Link', s:tag, '', 'underline')
+call s:_('URL', s:tag, '', 'underline')
+
+call s:_('Comment', s:base6, '', '')
+call s:_('CommentBold', s:base6, '', 'bold')
+call s:_('SpecialComment', s:base7, '', 'bold')
+hi! link CommentLabel CommentBold
+hi! link CommentSection CommentBold
+hi! link Noise Comment
+
+call s:_('Global', s:magenta, '', 'none')
+call s:_('PreProc', s:magenta, '', 'none')
+call s:_('Macro', s:magenta, '', 'bold')
+call s:_('Define', s:magenta, '', 'bold')
+call s:_('PreCondit', s:magenta, '', 'bold')
+call s:_('Include', s:magenta, '', 'bold')
+
+call s:_('Repeat', s:blue, '', '')
+call s:_('Keyword', s:blue, '', '')
+call s:_('Statement', s:blue, '', 'none')
+call s:_('Label', s:blue, '', '')
+
+call s:_('Operator', s:blue, '', '')
+
+call s:_('Constant', s:violet, '', 'none')
+
+call s:_('Number', s:orange, '', 'none')
+call s:_('Float', s:orange, '', 'none')
+call s:_('Boolean', s:orange, '', 'none')
+call s:_('Enum', s:orange, '', 'none')
+
+call s:_('Delimiter', s:blue, '', 'none')
+call s:_('DelimiterAlt', s:base8, '', 'none')
+call s:_('SpecialChar', s:base8, '', 'bold')
+
+call s:_('String', s:green, '', 'none')
+call s:_('StringDelimiter', s:green, '', 'none')
+
+call s:_('Character', s:green, '', 'bold')
+
+
+call s:_('Special', s:violet, '', 'none')
+call s:_('SpecialBold', s:violet, '', 'bold')
+
+
+call s:_('Identifier', color#Lighten(s:magenta, 0.4), '', 'none')
+call s:_('Argument', color#Lighten(s:magenta, 0.4), '', 'none')
+call s:_('Variable', color#Lighten(s:magenta, 0.4), '', 'none')
+
+call s:_('Function', s:yellow, '', 'none')
+call s:_('Method', s:yellow, '', 'bold')
+
+call s:_('Symbol', s:magenta, '', 'none')
+call s:_('Control', s:magenta, '', 'none')
+call s:_('PredefinedIdentifier', s:magenta, '', 'none')
+call s:_('Predefined', s:magenta, '', 'none')
+
+call s:_('StaticFunc', s:cyan, '', 'none')
+call s:_('Property', s:magenta, '', 'none')
+
+
+call s:_('Type', s:yellow, '', 'none')
+call s:_('StorageClass', s:blue, '', 'none')
+call s:_('Class', s:blue, '', 'none')
+call s:_('Structure', s:blue, '', 'none')
+call s:_('Typedef', s:blue, '', 'none')
+
+call s:_('Regexp', '#dd0093', 'none', 'none')
+call s:_('RegexpSpecial', '#a40073', 'none', 'none')
+call s:_('RegexpDelimiter', '#540063', 'none', 'bold')
+call s:_('RegexpKey', '#5f0041', 'none', 'bold')
+
+" }}}
+" Diff {{{
+
+call s:_('diffLine', s:base8, s:diff_info_bg1, 'none')
+call s:_('diffSubName', s:base8, s:diff_info_bg1, 'none')
+
+hi! clear DiffAdd
+hi! clear DiffChange
+hi! clear DiffText
+hi! clear DiffDelete
+
+call s:_('DiffAdd', '', s:diff_add_bg2, 'none')
+call s:_('DiffChange', '', s:diff_add_bg2, 'none')
+call s:_('DiffText', '', s:diff_add_bg0, 'none')
+call s:_('DiffDelete', '', s:gh_danger_bg1, 'none')
+
+call s:_('DiffAdded', s:diff_add_fg0, s:diff_add_bg2, 'none')
+call s:_('DiffModified', s:fg, s:diff_info_bg0, 'none')
+call s:_('DiffRemoved', s:gh_danger_fg0, s:gh_danger_bg2, 'none')
+
+call s:_('DiffAddedGutter', s:diff_add_fg, 'none', 'bold')
+call s:_('DiffModifiedGutter', s:diff_info_fg, 'none', 'bold')
+call s:_('DiffRemovedGutter', s:gh_danger_fg, 'none', 'bold')
+
+call s:_('DiffAddedGutterLineNr', 'none', 'none')
+call s:_('DiffModifiedGutterLineNr', 'none', 'none')
+call s:_('DiffRemovedGutterLineNr', 'none', 'none')
+
+" }}}
+" Additionnal/Common groups {{{1
+
+call s:_('DbgCurrent', '#DEEBFE', '#345FA8', '')
+call s:_('DbgBreakPt', '', '#4F0037', '')
+
+" Jumping around {{{
+
+call s:_('JumpTarget', s:red, '', 'bold')
+
+hi! link EasyMotionTargetDefault JumpTarget
+hi! link Sneak JumpTarget
+hi! link SneakPluginTarget JumpTarget
+hi! link SneakStreakTarget JumpTarget
+hi! link SneakStreakMask EasyMotionShadeDefault
+
+" }}}
+
+" Languages/Others {{{1
+
+" Help {{{2
+
+hi! link helpURL URL
+
+" PHP {{{2
+
+hi! link phpFunctions Function
+hi! link phpSuperglobal Identifier
+hi! link phpQuoteSingle StringDelimiter
+hi! link phpQuoteDouble StringDelimiter
+hi! link phpBoolean Constant
+hi! link phpNull Constant
+hi! link phpArrayPair Operator
+hi! link phpOperator Normal
+hi! link phpRelation Normal
+hi! link phpVarSelector Identifier
+
+" Python {{{2
+
+hi! link pythonOperator Operator
+
+" Ruby {{{2
+
+hi! link rubyRegexpDelimiter RegexpDelimiter
+hi! link rubyRegexp Regexp
+hi! link rubyRegexpSpecial RegexpSpecial
+hi! link rubyPredefinedIdentifier PredefinedIdentifier
+
+hi! link rubyClass Class
+hi! link rubyIdentifier Identifier
+hi! link rubyInstanceVariable InstanceVariable
+hi! link rubySymbol Symbol
+hi! link rubyControl Control
+
+hi! link rubySharpBang Comment
+hi! link rubyConstant Type
+hi! link rubyFunction Function
+
+hi! link rubyGlobalVariable rubyInstanceVariable
+hi! link rubyModule rubyClass
+
+hi! link rubyString String
+hi! link rubyStringDelimiter StringDelimiter
+hi! link rubyInterpolationDelimiter Identifier
+
+
+" Erlang {{{2
+
+hi! link erlangAtom rubySymbol
+hi! link erlangBIF rubyPredefinedIdentifier
+hi! link erlangFunction rubyPredefinedIdentifier
+hi! link erlangDirective Statement
+hi! link erlangNode Identifier
+
+" CoffeeScript {{{2
+
+hi! link coffeeRegExp rubyRegexp
+
+" Lua & Moonscript' {{{2
+
+hi! link luaOperator Conditional
+
+hi! link moonObject Type
+hi! link moonSpecialOp StringDelimiter
+hi! link moonSpecialVar Identifier
+hi! link moonObjAssign StorageClass
+hi! link moonObjAssign StorageClass
+hi! link moonConstant Global
+
+" Objective-C/Cocoa {{{2
+
+hi! link objcClass Type
+hi! link cocoaClass objcClass
+hi! link objcSubclass objcClass
+hi! link objcSuperclass objcClass
+hi! link objcDirective rubyClass
+hi! link cocoaFunction Function
+hi! link objcMethodName Identifier
+hi! link objcMethodArg Normal
+hi! link objcMessageName Identifier
+
+" 1}}}
+
+" 1}}}
diff --git a/static/demo.png b/static/demo.png
new file mode 100644
index 0000000..c5ebc26
--- /dev/null
+++ b/static/demo.png
Binary files differ