set background=dark
if exists('syntax_on')
  syntax reset
endif
let g:colors_name='fresh'

if has('gui_running') || &t_Co == 256
  "" Colors {{{
  let s:color_map = {
    \   '0': '#000000',   '1': '#800000',   '2': '#008000',   '3': '#808000',
    \   '4': '#000080',   '5': '#800080',   '6': '#008080',   '7': '#c0c0c0',
    \   '8': '#808080',   '9': '#ff0000',  '10': '#00ff00',  '11': '#ffff00',
    \  '12': '#0000ff',  '13': '#ff00ff',  '14': '#00ffff',  '15': '#ffffff',
    \  '16': '#000000',  '17': '#00005f',  '18': '#000087',  '19': '#0000af',
    \  '20': '#0000df',  '21': '#0000ff',  '22': '#005f00',  '23': '#005f5f',
    \  '24': '#005f87',  '25': '#005faf',  '26': '#005fdf',  '27': '#005fff',
    \  '28': '#008700',  '29': '#00875f',  '30': '#008787',  '31': '#0087af',
    \  '32': '#0087df',  '33': '#0087ff',  '34': '#00af00',  '35': '#00af5f',
    \  '36': '#00af87',  '37': '#00afaf',  '38': '#00afdf',  '39': '#00afff',
    \  '40': '#00df00',  '41': '#00df5f',  '42': '#00df87',  '43': '#00dfaf',
    \  '44': '#00dfdf',  '45': '#00dfff',  '46': '#00ff00',  '47': '#00ff5f',
    \  '48': '#00ff87',  '49': '#00ffaf',  '50': '#00ffdf',  '51': '#00ffff',
    \  '52': '#5f0000',  '53': '#5f005f',  '54': '#5f0087',  '55': '#5f00af',
    \  '56': '#5f00df',  '57': '#5f00ff',  '58': '#5f5f00',  '59': '#5f5f5f',
    \  '60': '#5f5f87',  '61': '#5f5faf',  '62': '#5f5fdf',  '63': '#5f5fff',
    \  '64': '#5f8700',  '65': '#5f875f',  '66': '#5f8787',  '67': '#5f87af',
    \  '68': '#5f87df',  '69': '#5f87ff',  '70': '#5faf00',  '71': '#5faf5f',
    \  '72': '#5faf87',  '73': '#5fafaf',  '74': '#5fafdf',  '75': '#5fafff',
    \  '76': '#5fdf00',  '77': '#5fdf5f',  '78': '#5fdf87',  '79': '#5fdfaf',
    \  '80': '#5fdfdf',  '81': '#5fdfff',  '82': '#5fff00',  '83': '#5fff5f',
    \  '84': '#5fff87',  '85': '#5fffaf',  '86': '#5fffdf',  '87': '#5fffff',
    \  '88': '#870000',  '89': '#87005f',  '90': '#870087',  '91': '#8700af',
    \  '92': '#8700df',  '93': '#8700ff',  '94': '#875f00',  '95': '#875f5f',
    \  '96': '#875f87',  '97': '#875faf',  '98': '#875fdf',  '99': '#875fff',
    \ '100': '#878700', '101': '#87875f', '102': '#878787', '103': '#8787af',
    \ '104': '#8787df', '105': '#8787ff', '106': '#87af00', '107': '#87af5f',
    \ '108': '#87af87', '109': '#87afaf', '110': '#87afdf', '111': '#87afff',
    \ '112': '#87df00', '113': '#87df5f', '114': '#87df87', '115': '#87dfaf',
    \ '116': '#87dfdf', '117': '#87dfff', '118': '#87ff00', '119': '#87ff5f',
    \ '120': '#87ff87', '121': '#87ffaf', '122': '#87ffdf', '123': '#87ffff',
    \ '124': '#af0000', '125': '#af005f', '126': '#af0087', '127': '#af00af',
    \ '128': '#af00df', '129': '#af00ff', '130': '#af5f00', '131': '#af5f5f',
    \ '132': '#af5f87', '133': '#af5faf', '134': '#af5fdf', '135': '#af5fff',
    \ '136': '#af8700', '137': '#af875f', '138': '#af8787', '139': '#af87af',
    \ '140': '#af87df', '141': '#af87ff', '142': '#afaf00', '143': '#afaf5f',
    \ '144': '#afaf87', '145': '#afafaf', '146': '#afafdf', '147': '#afafff',
    \ '148': '#afdf00', '149': '#afdf5f', '150': '#afdf87', '151': '#afdfaf',
    \ '152': '#afdfdf', '153': '#afdfff', '154': '#afff00', '155': '#afff5f',
    \ '156': '#afff87', '157': '#afffaf', '158': '#afffdf', '159': '#afffff',
    \ '160': '#df0000', '161': '#df005f', '162': '#df0087', '163': '#df00af',
    \ '164': '#df00df', '165': '#df00ff', '166': '#df5f00', '167': '#df5f5f',
    \ '168': '#df5f87', '169': '#df5faf', '170': '#df5fdf', '171': '#df5fff',
    \ '172': '#df8700', '173': '#df875f', '174': '#df8787', '175': '#df87af',
    \ '176': '#df87df', '177': '#df87ff', '178': '#dfaf00', '179': '#dfaf5f',
    \ '180': '#dfaf87', '181': '#dfafaf', '182': '#dfafdf', '183': '#dfafff',
    \ '184': '#dfdf00', '185': '#dfdf5f', '186': '#dfdf87', '187': '#dfdfaf',
    \ '188': '#dfdfdf', '189': '#dfdfff', '190': '#dfff00', '191': '#dfff5f',
    \ '192': '#dfff87', '193': '#dfffaf', '194': '#dfffdf', '195': '#dfffff',
    \ '196': '#ff0000', '197': '#ff005f', '198': '#ff0087', '199': '#ff00af',
    \ '200': '#ff00df', '201': '#ff00ff', '202': '#ff5f00', '203': '#ff5f5f',
    \ '204': '#ff5f87', '205': '#ff5faf', '206': '#ff5fdf', '207': '#ff5fff',
    \ '208': '#ff8700', '209': '#ff875f', '210': '#ff8787', '211': '#ff87af',
    \ '212': '#ff87df', '213': '#ff87ff', '214': '#ffaf00', '215': '#ffaf5f',
    \ '216': '#ffaf87', '217': '#ffafaf', '218': '#ffafdf', '219': '#ffafff',
    \ '220': '#ffdf00', '221': '#ffdf5f', '222': '#ffdf87', '223': '#ffdfaf',
    \ '224': '#ffdfdf', '225': '#ffdfff', '226': '#ffff00', '227': '#ffff5f',
    \ '228': '#ffff87', '229': '#ffffaf', '230': '#ffffdf', '231': '#ffffff',
    \ '232': '#080808', '233': '#121212', '234': '#1c1c1c', '235': '#262626',
    \ '236': '#303030', '237': '#3a3a3a', '238': '#444444', '239': '#4e4e4e',
    \ '240': '#585858', '241': '#606060', '242': '#666666', '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',
  \ }
  "" }}}

  "" Functions {{{
  function! s:hi(group, fg, bg, attr)
    exec 'hi clear '.a:group
    if a:fg !=# ''
      exec 'hi '.a:group.' ctermfg='.a:fg.' guifg='s:color_map[a:fg]
    endif
    if a:bg !=# ''
      exec 'hi '.a:group.' ctermbg='.a:bg.' guibg='.s:color_map[a:bg]
    endif
    if a:attr !=# ''
      exec 'hi '.a:group.' cterm='.a:attr.' gui='.a:attr
    endif
  endfunction
  "" }}}

  "" Highlight Groups {{{
  call s:hi('ColorColumn', '', '', '')
  call s:hi('Conceal', '', '', '')
  call s:hi('Cursor', '', '', 'reverse')
  call s:hi('CursorIM', '', '', '')
  call s:hi('CursorColumn', '235', '', '')
  call s:hi('CursorLine', '', '', '')
  call s:hi('Directory', '', '', '')
  call s:hi('DiffAdd', '2', '', '')
  call s:hi('DiffChange', '3', '', '')
  call s:hi('DiffDelete', '1', '', '')
  call s:hi('DiffText', '3', '', '')
  call s:hi('ErrorMsg', '1', '', '')
  call s:hi('VertSplit', '235', '235', '')
  call s:hi('Folded', '8', '233', '')
  call s:hi('FoldColumn', '', '', '')
  call s:hi('SignColumn', '', '233', '')
  call s:hi('IncSearch', '', '', 'reverse')
  call s:hi('LineNr', '240', '233', '')
  call s:hi('CursorLineNr', '34', '233', '')
  call s:hi('MatchParen', '', '', '')
  call s:hi('ModeMsg', '', '', '')
  call s:hi('MoreMsg', '12', '', '')
  call s:hi('NonText', '', '', '')
  call s:hi('Normal', '7', '232', '')
  call s:hi('Pmenu', '', '235', '')
  call s:hi('PmenuSel', '', '', 'reverse')
  call s:hi('PmenuSbar', '', '', '')
  call s:hi('PmenuThumb', '', '', '')
  call s:hi('Question', '69', '', '')
  call s:hi('Search', '11', '', '')
  call s:hi('SpecialKey', '238', '', '')
  call s:hi('SpellBad', '166', '', '')
  call s:hi('SpellCap', '132', '', '')
  call s:hi('SpellLocal', '5', '', '')
  call s:hi('SpellRare', '3', '', '')
  call s:hi('StatusLine', '15', '233', '')
  call s:hi('StatusLineNC', '', '235', '')
  call s:hi('TabLine', '246', '235', 'bold')
  call s:hi('TabLineFill', '', '235', '')
  call s:hi('TabLineSel', '248', '', 'bold')
  call s:hi('Title', '', '', 'bold')
  call s:hi('Visual', '', '235', '')
  call s:hi('VisualNOS', '', '', '')
  call s:hi('WarningMsg', '92', '', '')
  call s:hi('WildMenu', '22', '148', 'bold')
  call s:hi('Menu', '', '', '')
  call s:hi('Scrollbar', '', '', '')
  call s:hi('Tooltip', '', '', '')
  "" }}}

  "" Syntax Groups {{{
  call s:hi('Comment', '8', '', '')

  call s:hi('Constant', '168', '', '')
  call s:hi('String', '173', '', '')
  call s:hi('Character', '221', '', '')
  call s:hi('Number', '162', '', '')
  call s:hi('Boolean', '162', '', '')
  call s:hi('Float', '162', '', '')

  call s:hi('Identifier', '60', '', '')
  call s:hi('Function', '71', '', '')

  call s:hi('Statement', '30', '', '')
  call s:hi('Conditional', '69', '', '')
  call s:hi('Repeat', '69', '', '')
  call s:hi('Label', '69', '', '')
  call s:hi('Operator', '166', '', '')
  call s:hi('Keyword', '72', '', '')
  call s:hi('Exception', '69', '', '')

  call s:hi('PreProc', '102', '', '')
  call s:hi('Include', '65', '', '')
  call s:hi('Define', '102', '', '')
  call s:hi('Macro', '102', '', '')
  call s:hi('PreCondit', '61', '', '')

  call s:hi('Type', '75', '', '')
  call s:hi('StorageClass', '66', '', '')
  call s:hi('Structure', '69', '', '')
  call s:hi('Typedef', '75', '', '')

  call s:hi('Special', '179', '', '')
  call s:hi('SpecialChar', '179', '', '')
  call s:hi('Tag', '', '', '')
  call s:hi('Delimiter', '179', '', '')
  call s:hi('SpecialComment', '246', '', '')
  call s:hi('Debug', '179', '', '')

  call s:hi('Underlined', '38', '', 'underline')
  call s:hi('Ignore', '', '', '')
  call s:hi('Error', '1', '', '')
  call s:hi('Todo', '202', '', 'bold')
  "" }}}

  "" Terminal Groups {{{
  call s:hi('debugBreakpoint', '1', '', 'reverse')
  call s:hi('debugPC', '25', '', 'reverse')
  ""}}}

  "" Custom Groups {{{
  call s:hi('Block', '', '', '')
  call s:hi('Note', '40', '', 'bold')
  call s:hi('Important', '220', '', 'bold')
  call s:hi('Research', '202', '', 'bold')

  call s:hi('ALEError', '160', '', '')
  call s:hi('ALEWarning', '129', '', '')
  call s:hi('ALEErrorSign', '160', '233', 'bold')
  call s:hi('ALEWarningSign', '129', '233', 'bold')

  call s:hi('SyntasticErrorSign', '160', '233', 'bold')
  call s:hi('SyntasticWarningSign', '129', '233', 'bold')
  call s:hi('SyntasticErrorLine', '', '', '')
  call s:hi('SyntasticWarningLine', '', '', '')
  call s:hi('SyntasticError', '160', '', '')
  call s:hi('SyntasticWarning', '129', '', '')
  "" }}}
endif