" Name: rakr vim colorscheme " Author: Ramzi Akremi " License: MIT " Global setup {{{ hi clear if exists('syntax_on') syntax reset endif if exists('g:colors_name') unlet g:colors_name endif let g:colors_name = 'rakr' "}}} if has('gui_running') || &t_Co == 88 || &t_Co == 256 " functions {{{ " returns an approximate grey index for the given grey level fun 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 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 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 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 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 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 color(r, g, b) " get the closest grey let l:gx = grey_number(a:r) let l:gy = grey_number(a:g) let l:gz = grey_number(a:b) " get the closest color let l:x = rgb_number(a:r) let l:y = rgb_number(a:g) let l:z = rgb_number(a:b) if l:gx == l:gy && l:gy == l:gz " there are two possibilities let l:dgr = grey_level(l:gx) - a:r let l:dgg = grey_level(l:gy) - a:g let l:dgb = grey_level(l:gz) - a:b let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb) let l:dr = rgb_level(l:gx) - a:r let l:dg = rgb_level(l:gy) - a:g let l:db = 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 grey_color(l:gx) else " use the color return rgb_color(l:x, l:y, l:z) endif else " only one possibility return rgb_color(l:x, l:y, l:z) endif endfun " returns the palette index to approximate the 'rrggbb' hex string fun 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 color(l:r, l:g, l:b) endfun " sets the highlighting for the given group fun X(group, fg, bg, attr) if a:fg != "" exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . rgb(a:fg) endif if a:bg != "" exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . rgb(a:bg) endif if a:attr != "" exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr endif endfun " }}} " solarized colors {{{ let s:basel3 = '002b36' let s:basel2 = '073642' let s:basel1 = '586e75' let s:basel0 = '657b83' let s:based0 = '839496' let s:based1 = '93a1a1' let s:based2 = 'eee8d5' let s:based3 = 'fdf6e3' let s:yellowl1 = 'b58900' let s:orangel1 = 'cb4b16' let s:redl1 = 'dc322f' let s:magental1 = 'd33682' let s:violetl1 = '6c71c4' let s:bluel1 = '268bd2' let s:cyanl1 = '2aa198' let s:greenl1 = '859900' let s:yellowd1 = 'b58900' let s:oranged1 = 'cb4b16' let s:redd1 = 'dc322f' let s:magentad1 = 'd33682' let s:violetd1 = '6c71c4' let s:blued1 = '268bd2' let s:cyand1 = '2aa198' let s:greend1 = '859900' "}}} " Flat colors {{{ let s:basel3 = '212f3e' let s:basel2 = '34495e' let s:basel1 = '7f8c8d' let s:basel0 = '95a5a6' let s:based0 = 'bdc3c7' let s:based1 = 'C7CBCF' let s:based2 = 'ecf0f1' let s:based3 = 'f7f7f7' let s:cyanl1 = '16a085' let s:cyand1 = '07c5ac' let s:greenl1 = '2ecc71' let s:greend1 = '27ae60' let s:bluel1 = '3498db' let s:blued1 = '2980b9' let s:violetl1 = '8e44ad' let s:violetd1 = '9b59b6' let s:yellowl1 = 'fec50a' let s:yellowd1 = 'FD9809' let s:orangel1 = 'f39c12' let s:oranged1 = 'd35400' let s:magental1 = '7A2B9D' let s:magentad1 = 'c8438c' let s:redl1 = 'e74c3c' let s:redd1 = 'c0392b' "}}} " Oceanic Next {{{ let s:basel3 = '141e23' let s:basel2 = '343d46' let s:basel1 = '4f5b66' let s:basel0 = '65737e' let s:based0 = 'bdc3c7' let s:based1 = 'C7CBCF' let s:based2 = 'ecf0f1' let s:based3 = 'f7f7f7' let s:cyanl1 = '16a085' let s:cyand1 = '07c5ac' let s:greenl1 = '2ecc71' let s:greend1 = '27ae60' let s:bluel1 = '3498db' let s:blued1 = '2980b9' let s:violetl1 = '8e44ad' let s:violetd1 = '9b59b6' let s:yellowl1 = 'fec50a' let s:yellowd1 = 'FD9809' let s:orangel1 = 'f39c12' let s:oranged1 = 'd35400' let s:magental1 = '7A2B9D' let s:magentad1 = 'c8438c' let s:redl1 = 'e74c3c' let s:redd1 = 'c0392b' "}}} " Flat contrast {{{ let s:based3 = '141e23' let s:based2 = '242d36' let s:based1 = '3f4b56' let s:based0 = '55636e' let s:basel0 = '6c7a89' let s:basel1 = '95a5a6' let s:basel2 = 'ececec' let s:basel3 = 'ffffff' let s:cyand1 = '16a085' let s:cyanl1 = '07c5ac' let s:greend1 = '019875' let s:greenl1 = '2ecc71' let s:bluel1 = '6bb9f0' let s:blued1 = '446cb3' let s:violetd1 = '8e44ad' let s:violetl1 = '9b59b6' let s:yellowl1 = 'f5d76e' let s:yellowd1 = 'f89406' let s:oranged1 = 'd35400' let s:orangel1 = 'f39c12' let s:magentad1 = '913d88' let s:magental1 = 'c8438c' let s:redd1 = 'cf000f' let s:redl1 = 'e74c3c' let s:pinkd1 = 'db0a5b' let s:pinkl1 = 'f62459' "}}} " Invert colors if background is dark {{{ if &background ==# 'dark' let s:temp03 = s:basel3 let s:temp02 = s:basel2 let s:temp01 = s:basel1 let s:temp00 = s:basel0 let s:basel3 = s:based3 let s:basel2 = s:based2 let s:basel1 = s:based1 let s:basel0 = s:based0 let s:based0 = s:temp00 let s:based1 = s:temp01 let s:based2 = s:temp02 let s:based3 = s:temp03 let s:temp = s:cyanl1 let s:cyanl1 = s:cyand1 let s:cyand1 = s:temp let s:temp = s:greenl1 let s:greenl1 = s:greend1 let s:greend1 = s:temp let s:temp = s:bluel1 let s:bluel1 = s:blued1 let s:blued1 = s:temp let s:temp = s:violetl1 let s:violetl1 = s:violetd1 let s:violetd1 = s:temp let s:temp = s:yellowl1 let s:yellowl1 = s:yellowd1 let s:yellowd1 = s:temp let s:temp = s:orangel1 let s:orangel1 = s:oranged1 let s:oranged1 = s:temp let s:temp = s:redl1 let s:redl1 = s:redd1 let s:redd1 = s:temp let s:temp = s:pinkl1 let s:pinkl1 = s:pinkd1 let s:pinkd1 = s:temp endif "}}} " Default Colors {{{ call X('Normal', s:based1, s:basel3, 'none') call X('Comment', s:basel0, 'none', 'italic') call X('Constant', s:redd1, 'none', 'none') call X('Identifier', s:blued1, 'none', 'none') call X('Function', s:blued1, 'none', 'none') call X('Statement', s:greend1, 'none', 'none') call X('PreProc', s:oranged1, 'none', 'none') call X('Type', s:magental1, 'none', 'none') call X('Special', s:redl1, 'none', 'none') call X('Underlined', s:violetd1, 'none', 'underline') call X('Ignore', 'none', 'none', 'none') call X('Error', s:yellowl1, s:redd1, 'bold') call X('Todo', s:magentad1, 'none', 'bold') call X('SpecialKey', s:based0, 'none', 'reverse') call X('NonText', s:based1, s:basel3, 'none') call X('StatusLine', s:based0, s:basel2, 'none') call X('StatusLineNC', s:basel1, s:based2, 'none') call X('Visual', s:bluel1, s:basel3, 'reverse') call X('Directory', s:based1, 'none', 'bold') call X('ErrorMsg', s:redd1, 'none', 'reverse') call X('IncSearch', s:pinkd1, 'none', 'reverse') call X('Search', s:yellowd1, 'none', 'reverse') call X('ModeMsg', s:bluel1, 'none', 'none') call X('MoreMsg', s:bluel1, 'none', 'none') call X('LineNr', s:basel0, s:basel2, 'none') call X('Question', s:cyanl1, 'none', 'bold') call X('Delimiter', s:redd1, 'none', 'none') call X('Title', s:based3, 'none', 'bold') call X('VertSplit', s:basel3, s:basel2, 'none') call X('WarningMsg', s:redl1, 'none', 'bold') call X('WildMenu', s:based2, s:basel2, 'reverse,bold') call X('Folded', s:based0, s:basel2, 'bold') call X('FoldColumn', s:based0, s:basel2, 'none') call X('DiffAdd', s:greend1, s:basel2, 'bold') call X('DiffChange', s:yellowd1, s:basel2, 'bold') call X('DiffDelete', s:redd1, s:basel2, 'bold') call X('DiffText', s:blued1, s:basel2, 'bold') call X('SignColumn', s:based0, 'none', 'none') call X('Conceal', s:bluel1, 'none', 'none') call X('SpellBad', s:redl1, 'none', 'underline') call X('SpellCap', s:violetl1, 'none', 'underline') call X('SpellRare', s:cyanl1, 'none', 'underline') call X('SpellLocal', s:yellowl1, 'none', 'underline') call X('PMenu', s:based0, s:basel2, 'none') call X('PMenuSel', s:basel1, s:based2, 'none') call X('PMenuSbar', s:based2, s:based0, 'none') call X('PMenuThumb', s:based0, s:basel2, 'none') call X('TabLine', s:based0, s:basel1, 'underline') call X('TabLineFill', s:based0, s:basel1, 'underline') call X('TabLineSel', s:basel1, s:based2, 'underline') call X('CursorLine', 'none', s:basel2, 'none') call X('CursorColumn', 'none', s:basel2, 'none') call X('Cursor', 'none', s:basel3, 'none') hi link lCursor Cursor call X('CursorLineNr', s:basel2, s:basel0, 'bold') call X('MatchParen', s:yellowl1, s:redl1, 'bold') " }}} " CSS/SCSS {{{ call X('cssTagName', s:blued1, 'none', 'bold') call X('cssAttrComma', s:based1, 'none', 'none') call X('cssBraces', s:based0, 'none', 'none') call X('cssDimensionProp', s:oranged1, 'none', 'none') call X('cssProp', s:oranged1, 'none', 'none') call X('cssAttr', s:pinkd1, 'none', 'none') call X('cssURL', s:magental1, 'none', 'underline') call X('cssColor', s:based1, 'none', 'none') call X('cssValueNumber', s:pinkd1, 'none', 'none') call X('cssValueLength', s:pinkd1, 'none', 'none') call X('cssUnitDecorators', s:based1, 'none', 'none') call X('cssPseudoClassId', s:magental1, 'none', 'none') call X('cssFunctionName', s:greenl1, 'none', 'none') call X('cssProp', s:orangel1, 'none', 'none') call X('sassClass', s:greend1, 'none', 'bold') call X('scssAmpersand', s:greenl1, 'none', 'bold') call X('scssAttribute', s:based2, 'none', 'none') call X('scssDefinition', s:based2, 'none', 'none') call X('sassFunction', s:magentad1, 'none', 'none') call X('scssFunction', s:magentad1, 'none', 'none') call X('sassFunctionName', s:magentad1, 'none', 'none') call X('scssFunctionName', s:magentad1, 'none', 'none') call X('sassInclude', s:blued1, 'none', 'bold') call X('scssInclude', s:blued1, 'none', 'bold') call X('sassMixinName', s:greend1, 'none', 'none') call X('scssMixinName', s:greend1, 'none', 'none') call X('scssMixinParams', s:based2, 'none', 'none') call X('scssSelectorName', s:redl1, 'none', 'none') call X('scssVariable', s:cyand1, 'none', 'none') "}}} " JavaScript (Better with pangloss/vim-javascript plugin) {{{ call X('jsStorageClass', s:pinkd1,'none', 'bold') call X('jsDocTags', s:basel0, 'none', 'bold') call X('jsDocType', s:basel0, 'none', 'none') call X('jsDocParam', s:basel0, 'none', 'none') call X('jsDocTypeNoParam', s:basel0, 'none', 'none') call X('jsFunction', s:pinkd1, 'none', 'bold') call X('jsFuncCall', s:based0, 'none', 'bold') call X('jsFuncBlock', s:based0, 'none', 'bold') call X('jsOperator', s:blued1, 'none', 'none') call X('jsFuncName', s:based1, 'none', 'bold') call X('jsBraces', s:basel1, 'none', 'none') call X('jsFuncBraces', s:basel1, 'none', 'bold') "}}} " Elixir {{{ call X('elixirArguments', s:blued1, 'none', 'none') call X('elixirAtom', s:pinkd1, 'none', 'none') call X('elixirAlias', s:based0, 'none', 'none') call X('elixirBlockDefinition', s:pinkd1,'none', 'bold') call X('elixirComment', s:basel0, 'none', 'italic') call X('elixirDefine', s:pinkd1, 'none', 'bold') call X('elixirPrivateDefine', s:pinkl1, 'none', 'bold') call X('elixirDocString', s:greenl1, 'none', 'none') call X('elixirFunctionDeclaration', s:based1, 'none', 'bold') call X('elixirInclude', s:greend1, 'none', 'bold') call X('elixirId' , s:based1, 'none', 'none') call X('elixirOperator', s:blued1, 'none', 'none') call X('elixirModuleDefine', s:pinkd1,'none', 'bold') call X('elixirString', s:redd1, 'none', 'none') call X('elixirStringDelimiter', s:redl1,'none', 'none') call X('elixirVariable', s:greend1, 'none', 'none') call X('eelixirDelimiter', s:magentad1, 'none', 'none') "}}} " HTML/XML {{{ call X('HTMLEndTag', s:basel0, 'none', 'bold') call X('HTMLTag', s:basel0, 'none', 'bold') call X('HTMLTagN', s:basel0, 'none', 'bold') call X('HTMLTagName', s:based0, 'none', 'none') call X('xmlTagName', s:based0, 'none', 'none') call X('HTMLArg', s:blued1, 'none', 'none') call X('HTMLLink', s:based3, 'none', 'underline') call X('HTMLString', s:pinkd1, 'none', 'none') "}}} " NERDTree {{{ call X('NERDTreeCWD', s:bluel1, 'none', 'bold') call X('NERDTreeFile', s:based2, 'none', 'none') call X('NERDTreeDirSlash', s:orangel1, 'none', 'none') call X('NERDTreeGitFlags', s:based2, 'none', 'none') call X('NERDTreeGitStatusDirDirty', s:magental1, 'none', 'bold') call X('NERDTreeGitStatusModified', s:orangel1, 'none', 'bold') call X('NERDTreeGitStatusUntracked', s:based2, 'none', 'bold') call X('NERDTreeOpenable', s:bluel1, 'none', 'none') call X('NERDTreeClosable', s:bluel1, 'none', 'none') call X('NERDTreeHelpTitle', s:based2, 'none', 'bold') call X('NERDTreeHelp', s:based2, 'none', 'none') call X('NERDTreeHelpCommand', s:blued1, 'none', 'none') call X('NERDTreeHelpKey', s:redd1, 'none', 'bold') call X('NERDTreeToggleOn', s:greend1, 'none', 'bold') call X('NERDTreeToggleOff', s:redd1, ' none', 'bold') " NERDTress File highlighting "function! NERDTreeHighlightFile(extension, fg, bg, guifg, guibg) "exec 'autocmd FileType nerdtree highlight ' . a:extension .' ctermbg='. a:bg .' ctermfg='. a:fg .' guibg=#'. a:guibg .' guifg=#'. a:guifg "exec 'autocmd FileType nerdtree syn match ' . a:extension .' #^\s\+.*'. a:extension .'$#' "endfunction "call NERDTreeHighlightFile('jade', 'green', 'none', s:greenl1, 'none') "call NERDTreeHighlightFile('md', 'blue', 'none', s:bluel1, 'none') "call NERDTreeHighlightFile('markdown', 'blue', 'none', s:bluel1, 'none') "call NERDTreeHighlightFile('config', 'yellow', 'none', s:yellowl1, 'none') "call NERDTreeHighlightFile('conf', 'yellow', 'none', s:yellowl1, 'none') "call NERDTreeHighlightFile('json', 'green', 'none', s:magental1, 'none') "call NERDTreeHighlightFile('yml', 'green', 'none', s:magental1, 'none') "call NERDTreeHighlightFile('xml', 'green', 'none', s:magental1, 'none') "call NERDTreeHighlightFile('html', 'green', 'none', s:greenl1, 'none') "call NERDTreeHighlightFile('css', 'cyan', 'none', s:cyand1, 'none') "call NERDTreeHighlightFile('sass', 'cyan', 'none', s:cyanl1, 'none') "call NERDTreeHighlightFile('scss', 'cyan', 'none', s:cyanl1, 'none') "call NERDTreeHighlightFile('coffee', 'Red', 'none', s:oranged1, 'none') "call NERDTreeHighlightFile('js', 'Red', 'none', s:orangel1, 'none') "call NERDTreeHighlightFile('rb', 'Red', 'none', s:redl1, 'none') "call NERDTreeHighlightFile('ru', 'Red', 'none', s:redd1, 'none') "call NERDTreeHighlightFile('ts', 'Blue', 'none', s:bluel1, 'none') "call NERDTreeHighlightFile('ds_store', 'Gray', 'none', s:based1, 'none') "call NERDTreeHighlightFile('gitconfig', 'black', 'none', s:based1, 'none') "call NERDTreeHighlightFile('gitignore', 'Gray', 'none', s:based1, 'none') "}}} " Ruby highlighting {{{ call X('rubyArrayDelimiter', s:basel0, 'none', 'none') call X('rubyBoolean', s:violetd1, 'none', 'bold') call X('rubySymbol', s:pinkd1, 'none', 'none') call X('rubyControl', s:pinkd1, 'none', 'bold') call X('rubyClass', s:blued1, 'none', 'bold') call X('rubyBlock', s:based1, 'none', 'none') call X('rubyDoBlock', s:based1, 'none', 'none') call X('rubyMethodBlock', s:based1, 'none', 'none') call X('rubyCurlyBlockDelimiter', s:based1, 'none', 'none') call X('rubyDefine', s:pinkd1, 'none', 'bold') call X('rubyConditionalExpression', s:based1, 'none', 'none') " }}} " tmux {{{ call X('tmuxCmds', s:based2, 'none', 'none') " }}} " Plug {{{ call X('PlugName', s:based2, 'none', 'bold') " }}} " vim syntax highlightling {{{ call X('helpHyperTextJump', s:magental1, 'none', 'underline') call X('helpURL', s:redl1, 'none', 'underline') call X('helpExample', s:based1, 'none', 'none') call X('helpHeadline', s:based3, 'none', 'bold') call X('helpSectionDelim', s:basel1, 'none', 'none') call X('vimBracket', s:redd1, 'none', 'none') call X('vimIsCommand', s:based2, 'none', 'none') call X('vimCommand', s:blued1, 'none', 'none') call X('vimCommandSep', s:blued1, 'none', 'none') call X('vimCommentString', s:basel1, 'none', 'underline,italic') call X('vimGroup', s:based1, 'none', 'none') call X('vimHiLink', s:based1, 'none', 'none') call X('vimHiGroup', s:based1, 'none', 'none') call X('vimString', s:greend1, 'none', 'none') call X('vimOper', s:greend1, 'none', 'none') call X('vimOperParen', s:greend1, 'none', 'none') call X('vimSyncMtchOpt', s:yellowd1, 'none', 'none') call X('vimFuncVar', s:blued1, 'none', 'none') call X('vimVar', s:blued1, 'none', 'none') call X('vimEnvVar', s:blued1, 'none', 'none') call X('vimComment', s:based0, 'none', 'italic') call X('vimLineComment', s:based0, 'none', 'italic') call X('vimCommentTitke', s:based0, 'none', 'bold,italic') call X('vimFunc', s:blued1, 'none', 'none') call X('vimUserFunc', s:blued1, 'none', 'none') call X('vimSet', s:based3, s:basel3, 'none') call X('vimSetEqual', s:based3, s:basel3, 'none') "}}} endif " delete functions {{{ delf X delf rgb delf color delf rgb_color delf rgb_level delf rgb_number delf grey_color delf grey_level delf grey_number " }}} " vim: set fdl=0 fdm=marker: