Created
August 11, 2018 07:13
-
-
Save jamiedumont/519b74f753ea8727e764f863b7163130 to your computer and use it in GitHub Desktop.
Pop!_OS theme for Vim
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Author: Jamie Dumont <jamiedumont@icloud.com> | |
" Version: 0.1.0 | |
" License: MIT | |
" Theme constructed using the same format as vim-gotham, built by | |
" Andrea Leopardi - https://github.com/whatyouhide/vim-gotham | |
" Bootstrap =================================================================== | |
hi clear | |
if exists('syntax_on') | syntax reset | endif | |
set background=dark | |
let g:colors_name = 'pop_os' | |
" Helper functions ============================================================= | |
" Execute the 'highlight' command with a List of arguments. | |
function! s:Highlight(args) | |
exec 'highlight ' . join(a:args, ' ') | |
endfunction | |
function! s:AddGroundValues(accumulator, ground, color) | |
let new_list = a:accumulator | |
for [where, value] in items(a:color) | |
call add(new_list, where . a:ground . '=' . value) | |
endfor | |
return new_list | |
endfunction | |
function! s:Col(group, fg_name, ...) | |
" ... = optional bg_name | |
let pieces = [a:group] | |
if a:fg_name !=# '' | |
let pieces = s:AddGroundValues(pieces, 'fg', s:colors[a:fg_name]) | |
endif | |
if a:0 > 0 && a:1 !=# '' | |
let pieces = s:AddGroundValues(pieces, 'bg', s:colors[a:1]) | |
endif | |
call s:Clear(a:group) | |
call s:Highlight(pieces) | |
endfunction | |
function! s:Attr(group, attr) | |
let l:attrs = [a:group, 'term=' . a:attr, 'cterm=' . a:attr, 'gui=' . a:attr] | |
call s:Highlight(l:attrs) | |
endfunction | |
function! s:Clear(group) | |
exec 'highlight clear ' . a:group | |
endfunction | |
" Colors ====================================================================== | |
" Let's store all the colors in a dictionary. | |
let s:colors = {} | |
" Base colors. | |
let s:colors.base0 = { 'gui': '#0c1014', 'cterm': 0 } | |
let s:colors.base1 = { 'gui': '#11151c', 'cterm': 8 } | |
let s:colors.base2 = { 'gui': '#091f2e', 'cterm': 10 } | |
let s:colors.base3 = { 'gui': '#0a3749', 'cterm': 12 } | |
let s:colors.base4 = { 'gui': '#1e6479', 'cterm': 11 } | |
let s:colors.base5 = { 'gui': '#599cab', 'cterm': 14 } | |
let s:colors.base6 = { 'gui': '#99d1ce', 'cterm': 7 } | |
let s:colors.base7 = { 'gui': '#d3ebe9', 'cterm': 15 } | |
" Other colors. | |
let s:colors.red = { 'gui': '#c23127', 'cterm': 1 } | |
let s:colors.orange = { 'gui': '#d26937', 'cterm': 9 } | |
let s:colors.yellow = { 'gui': '#edb443', 'cterm': 3 } | |
let s:colors.magenta = { 'gui': '#888ca6', 'cterm': 13 } | |
let s:colors.violet = { 'gui': '#4e5166', 'cterm': 5 } | |
let s:colors.blue = { 'gui': '#195466', 'cterm': 4 } | |
let s:colors.cyan = { 'gui': '#33859E', 'cterm': 6 } | |
let s:colors.green = { 'gui': '#2aa889', 'cterm': 2 } | |
" Neovim :terminal colors. | |
let g:terminal_color_0 = get(s:colors.base0, 'gui') | |
let g:terminal_color_8 = g:terminal_color_0 | |
let g:terminal_color_1 = get(s:colors.red, 'gui') | |
let g:terminal_color_9 = g:terminal_color_1 | |
let g:terminal_color_2 = get(s:colors.green, 'gui') | |
let g:terminal_color_10 = g:terminal_color_2 | |
let g:terminal_color_3 = get(s:colors.yellow, 'gui') | |
let g:terminal_color_11 = g:terminal_color_3 | |
let g:terminal_color_4 = get(s:colors.blue, 'gui') | |
let g:terminal_color_12 = g:terminal_color_4 | |
let g:terminal_color_5 = get(s:colors.violet, 'gui') | |
let g:terminal_color_13 = g:terminal_color_5 | |
let g:terminal_color_6 = get(s:colors.cyan, 'gui') | |
let g:terminal_color_14 = g:terminal_color_6 | |
let g:terminal_color_7 = get(s:colors.base6, 'gui') | |
let g:terminal_color_15 = g:terminal_color_7 | |
" Native highlighting ========================================================== | |
let s:background = 'base0' | |
let s:linenr_background = 'base1' | |
" Everything starts here. | |
call s:Col('Normal', 'base6', s:background) | |
" Line, cursor and so on. | |
call s:Col('Cursor', 'base1', 'base6') | |
call s:Col('CursorLine', '', 'base1') | |
call s:Col('CursorColumn', '', 'base1') | |
" Sign column, line numbers. | |
call s:Col('LineNr', 'blue', s:linenr_background) | |
call s:Col('CursorLineNr', 'base5', s:linenr_background) | |
call s:Col('SignColumn', '', s:linenr_background) | |
call s:Col('ColorColumn', '', s:linenr_background) | |
" Visual selection. | |
call s:Col('Visual', '', 'base3') | |
" Easy-to-guess code elements. | |
call s:Col('Comment', 'blue') | |
call s:Col('String', 'green') | |
call s:Col('Number', 'orange') | |
call s:Col('Statement', 'base5') | |
call s:Col('Special', 'orange') | |
call s:Col('Identifier', 'base5') | |
" Constants, Ruby symbols. | |
call s:Col('Constant', 'magenta') | |
" Some HTML tags (<title>, some <h*>s) | |
call s:Col('Title', 'orange') | |
" <a> tags. | |
call s:Col('Underlined', 'yellow') | |
call s:Attr('Underlined', 'underline') | |
" Types, HTML attributes, Ruby constants (and class names). | |
call s:Col('Type', 'orange') | |
" Stuff like 'require' in Ruby. | |
call s:Col('PreProc', 'red') | |
" Tildes on the bottom of the page. | |
call s:Col('NonText', 'blue') | |
" Concealed stuff. | |
call s:Col('Conceal', 'cyan', s:background) | |
" TODO and similar tags. | |
call s:Col('Todo', 'magenta', s:background) | |
" The column separating vertical splits. | |
call s:Col('VertSplit', 'blue', s:linenr_background) | |
call s:Col('StatusLineNC', 'blue', 'base2') | |
" Matching parenthesis. | |
call s:Col('MatchParen', 'base6', 'orange') | |
" Special keys, e.g. some of the chars in 'listchars'. See ':h listchars'. | |
call s:Col('SpecialKey', 'base3') | |
" Folds. | |
call s:Col('Folded', 'base6', 'blue') | |
call s:Col('FoldColumn', 'base5', 'base3') | |
" Searching. | |
call s:Col('Search', 'base2', 'yellow') | |
call s:Attr('IncSearch', 'reverse') | |
" Popup menu. | |
call s:Col('Pmenu', 'base6', 'base2') | |
call s:Col('PmenuSel', 'base7', 'blue') | |
call s:Col('PmenuSbar', '', 'base2') | |
call s:Col('PmenuThumb', '', 'blue') | |
" Command line stuff. | |
call s:Col('ErrorMsg', 'red', 'base1') | |
call s:Col('Error', 'red', 'base1') | |
call s:Col('ModeMsg', 'blue') | |
call s:Col('WarningMsg', 'red') | |
" Wild menu. | |
" StatusLine determines the color of the non-active entries in the wild menu. | |
call s:Col('StatusLine', 'base5', 'base2') | |
call s:Col('WildMenu', 'base7', 'cyan') | |
" The 'Hit ENTER to continue prompt'. | |
call s:Col('Question', 'green') | |
" Tab line. | |
call s:Col('TabLineSel', 'base7', 'blue') " the selected tab | |
call s:Col('TabLine', 'base6', 'base2') " the non-selected tabs | |
call s:Col('TabLineFill', 'base0', 'base0') " the rest of the tab line | |
" Spelling. | |
call s:Col('SpellBad', 'base7', 'red') | |
call s:Col('SpellCap', 'base7', 'blue') | |
call s:Col('SpellLocal', 'yellow') | |
call s:Col('SpellRare', 'base7', 'violet') | |
" Diffing. | |
call s:Col('DiffAdd', 'base7', 'green') | |
call s:Col('DiffChange', 'base7', 'blue') | |
call s:Col('DiffDelete', 'base7', 'red') | |
call s:Col('DiffText', 'base7', 'cyan') | |
call s:Col('DiffAdded', 'green') | |
call s:Col('DiffChanged', 'blue') | |
call s:Col('DiffRemoved', 'red') | |
call s:Col('DiffSubname', 'blue') | |
" Directories (e.g. netrw). | |
call s:Col('Directory', 'cyan') | |
" Programming languages and filetypes ========================================== | |
" Ruby. | |
call s:Col('rubyDefine', 'blue') | |
call s:Col('rubyStringDelimiter', 'green') | |
" HTML (and often Markdown). | |
call s:Col('htmlArg', 'blue') | |
call s:Col('htmlItalic', 'magenta') | |
call s:Col('htmlBold', 'cyan', '') | |
" Python | |
call s:Col('pythonStatement', 'blue') | |
" Plugin ======================================================================= | |
" GitGutter | |
call s:Col('GitGutterAdd', 'green', s:linenr_background) | |
call s:Col('GitGutterChange', 'cyan', s:linenr_background) | |
call s:Col('GitGutterDelete', 'orange', s:linenr_background) | |
call s:Col('GitGutterChangeDelete', 'magenta', s:linenr_background) | |
" CtrlP | |
call s:Col('CtrlPNoEntries', 'base7', 'orange') " no entries | |
call s:Col('CtrlPMatch', 'green') " matching part | |
call s:Col('CtrlPPrtBase', 'blue') " '>>>' prompt | |
call s:Col('CtrlPPrtText', 'cyan') " text in the prompt | |
call s:Col('CtrlPPtrCursor', 'base7') " cursor in the prompt | |
" unite.vim | |
call s:Col('UniteGrep', 'base7', 'green') | |
let g:unite_source_grep_search_word_highlight = 'UniteGrep' | |
" ale https://github.com/w0rp/ale | |
call s:Col('ALEWarningSign', 'yellow', s:linenr_background) | |
call s:Col('ALEErrorSign', 'red', s:linenr_background) | |
" neomake https://github.com/neomake/neomake | |
call s:Col('NeomakeWarningSign', 'yellow', s:linenr_background) | |
call s:Col('NeomakeErrorSign', 'red', s:linenr_background) | |
call s:Col('NeomakeWarning', 'yellow') | |
call s:Col('NeomakeError', 'red') | |
" Cleanup ===================================================================== | |
unlet s:colors | |
unlet s:background | |
unlet s:linenr_background |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment