summary refs log tree commit diff
diff options
context:
space:
mode:
l---------.config/nvim1
-rw-r--r--.vim/.ignore1
-rw-r--r--.vim/UltiSnips/all.snippets7
-rw-r--r--.vim/UltiSnips/markdown.snippets12
-rw-r--r--.vim/UltiSnips/tex.snippets16
-rw-r--r--.vim/after/ftplugin/c.vim88
-rw-r--r--.vim/after/ftplugin/clap_input.vim6
-rw-r--r--.vim/after/ftplugin/crontab.vim1
-rw-r--r--.vim/after/ftplugin/diff.vim33
-rw-r--r--.vim/after/ftplugin/gitrebase.vim8
-rw-r--r--.vim/after/ftplugin/go.vim77
-rw-r--r--.vim/after/ftplugin/gomod.vim1
-rw-r--r--.vim/after/ftplugin/gotmpl.vim1
-rw-r--r--.vim/after/ftplugin/i3.vim1
-rw-r--r--.vim/after/ftplugin/ledger.vim1
-rw-r--r--.vim/after/ftplugin/mail.vim20
-rw-r--r--.vim/after/ftplugin/make.vim2
-rw-r--r--.vim/after/ftplugin/markdown.vim27
-rw-r--r--.vim/after/ftplugin/python.vim4
-rw-r--r--.vim/after/ftplugin/rust.vim72
-rw-r--r--.vim/after/ftplugin/snippets.vim1
-rw-r--r--.vim/after/ftplugin/tex.vim23
-rw-r--r--.vim/after/ftplugin/toml.vim6
-rw-r--r--.vim/after/ftplugin/vim.vim1
-rw-r--r--.vim/after/ftplugin/yaml.vim2
-rw-r--r--.vim/after/plugin/line_bufferline.vim30
-rw-r--r--.vim/after/plugin/line_obsession.vim10
-rw-r--r--.vim/after/plugin/neomake.vim85
-rw-r--r--.vim/after/plugin/writing.vim92
-rw-r--r--.vim/autoload/alternate.vim8
-rw-r--r--.vim/autoload/daymode.vim27
-rw-r--r--.vim/autoload/fasd.vim18
-rw-r--r--.vim/autoload/fuzz.vim140
-rw-r--r--.vim/autoload/lightline/colorscheme/papercolor_dim.vim59
-rw-r--r--.vim/autoload/numbertoggle.vim17
-rw-r--r--.vim/autoload/popup.vim215
-rw-r--r--.vim/colors/misc.vim36
-rw-r--r--.vim/colors/nihoncolors.vim1258
-rw-r--r--.vim/doc/how-to-do-things.md9
-rw-r--r--.vim/ftdetect/h.vim1
-rw-r--r--.vim/ftdetect/journal.vim1
-rw-r--r--.vim/ftdetect/pixy.vim1
-rw-r--r--.vim/ftdetect/scarlet.vim1
-rw-r--r--.vim/ftplugin/markdown.lua2
-rw-r--r--.vim/general.vim71
-rw-r--r--.vim/init.lua106
-rw-r--r--.vim/init.vim422
-rw-r--r--.vim/init_veonim.vim34
-rw-r--r--.vim/lua/conf/diagnostic.lua21
-rw-r--r--.vim/lua/conf/telescope.lua75
-rw-r--r--.vim/lua/hardmode.lua38
-rw-r--r--.vim/lua/init.lua4
-rw-r--r--.vim/lua/line.lua146
-rw-r--r--.vim/lua/plugins.lua201
-rw-r--r--.vim/lua/plugins/_colorizer.lua8
-rw-r--r--.vim/lua/plugins/_completion.lua17
-rw-r--r--.vim/lua/plugins/_git-messenger.lua3
-rw-r--r--.vim/lua/plugins/_goyo.lua9
-rw-r--r--.vim/lua/plugins/_indent-guides.lua4
-rw-r--r--.vim/lua/plugins/_limelight.lua7
-rw-r--r--.vim/lua/plugins/_lsp.lua (renamed from .vim/lua/conf/lsp.lua)57
-rw-r--r--.vim/lua/plugins/_markdown.lua9
-rw-r--r--.vim/lua/plugins/_signify.lua6
-rw-r--r--.vim/lua/plugins/_telescope.lua99
-rw-r--r--.vim/lua/plugins/_treesitter.lua (renamed from .vim/lua/conf/treesitter.lua)2
-rw-r--r--.vim/lua/plugins/_ultisnips.lua4
-rw-r--r--.vim/lua/plugins/_vimtex.lua8
-rw-r--r--.vim/lua/split_term/init.lua46
-rw-r--r--.vim/lua/utils.lua35
-rw-r--r--.vim/plugin/fuzz.vim16
-rw-r--r--.vim/plugin/hard.vim65
-rw-r--r--.vim/plugin/line.vim174
-rw-r--r--.vim/plugin/packer_compiled.vim389
-rw-r--r--.vim/plugin/zettel.vim43
-rw-r--r--.vim/syntax/gotmpl.vim93
75 files changed, 2055 insertions, 2579 deletions
diff --git a/.config/nvim b/.config/nvim
new file mode 120000
index 0000000..815cbcc
--- /dev/null
+++ b/.config/nvim
@@ -0,0 +1 @@
+../.vim
\ No newline at end of file
diff --git a/.vim/.ignore b/.vim/.ignore
deleted file mode 100644
index 060f79b..0000000
--- a/.vim/.ignore
+++ /dev/null
@@ -1 +0,0 @@
-plugged/
diff --git a/.vim/UltiSnips/all.snippets b/.vim/UltiSnips/all.snippets
index f53e12b..0b9cf72 100644
--- a/.vim/UltiSnips/all.snippets
+++ b/.vim/UltiSnips/all.snippets
@@ -13,3 +13,10 @@ endsnippet
 snippet today "YYYY-MM-DD"
 `date +%Y-%m-%d`
 endsnippet
+
+snippet ok "✔"
+✔
+endsnippet
+snippet bad "✘"
+✘
+endsnippet
diff --git a/.vim/UltiSnips/markdown.snippets b/.vim/UltiSnips/markdown.snippets
index f0c48a5..34b1c40 100644
--- a/.vim/UltiSnips/markdown.snippets
+++ b/.vim/UltiSnips/markdown.snippets
@@ -25,3 +25,15 @@ ${2:${VISUAL}}
 </details>
 $0
 endsnippet
+
+snippet todo "todo: generic"
+* [ ] $0
+endsnippet
+
+snippet todoKV "todo: krankenversicherung"
+* [ ] $0
+				- [ ] überweisung
+				- [ ] beleg einreichen
+				- [ ] filings
+				- [ ] refund
+endsnippet
diff --git a/.vim/UltiSnips/tex.snippets b/.vim/UltiSnips/tex.snippets
index 38e9ef1..abaf5c6 100644
--- a/.vim/UltiSnips/tex.snippets
+++ b/.vim/UltiSnips/tex.snippets
@@ -4,33 +4,33 @@ $0
 \end{$1}
 endsnippet
 
-snippet $$ "Math" wA
+snippet $$ "math env $$" wA
 $${1}$ $0
 endsnippet
-snippet \[ "Math" iA
+snippet \[ "math block \[" iA
 \[
 	${1:${VISUAL}}
 .\] $0
 endsnippet
 
-snippet frac "Fraction" iA
+snippet frac "\\frac" iA
 \\frac{$1}{$2}$0
 endsnippet
 
 snippet fun "Function" wA
 f: \R \to \R
 endsnippet
-snippet sum "Sum" wA
+snippet sum "\sum_" wA
 \sum_{n=1}^{${1:\infty}} $0
 endsnippet
-snippet !> "Maps to" wA
+snippet !> "\mapsto" wA
 \mapsto
 endsnippet
-snippet -> "To" wA
+snippet -> "\to" wA
 \to
 endsnippet
 
-snippet latex "latex"
+snippet latex "\documentclass{report}"
 \documentclass{report}
 \usepackage[a4paper,margin=30truemm]{geometry}
 \usepackage{polyglossia}
@@ -50,7 +50,7 @@ $0
 \end{document}
 endsnippet
 
-snippet letter "letter"
+snippet brief "\documentclass{dinbrief}"
 \documentclass{dinbrief}
 \usepackage{graphicx}
 \usepackage[a4paper,margin=30truemm]{geometry}
diff --git a/.vim/after/ftplugin/c.vim b/.vim/after/ftplugin/c.vim
deleted file mode 100644
index 2d275a6..0000000
--- a/.vim/after/ftplugin/c.vim
+++ /dev/null
@@ -1,88 +0,0 @@
-" setlocal cindent
-
-" setlocal foldmethod=syntax
-" setlocal foldlevel=10
-
-if exists('g:loaded_nvim_treesitter')
-    set foldmethod=expr
-    set foldexpr=nvim_treesitter#foldexpr()
-endif
-
-if exists('g:loaded_gutentags')
-    let g:gutentags_enabled = 1
-endif
-
-let g:neoformat_enabled_c = []
-
-" toggle between header and implementation in c/cpp
-function! Alternate_c()
-    let file = expand('%')
-    if match(file, '\.c') > 0
-        exe ':e %<.h'
-    elseif match(file, '\.h') > 0
-        exe ':e %<.c'
-    endif
-endfunction
-
-nmap <Leader>a :call alternate#alternate()
-
-" source: https://github.com/igankevich/mesonic/blob/master/plugin/meson.vim
-function! MesonProjectDir()
-    let l:dir = getcwd()      " a starting directory to look for meson.build file
-    let l:project_dir = l:dir " the top-most directory with meson.build file
-    let l:nesting = 100       " maximal no. of subdirectories in a project
-
-    " find top-most directory with readable meson.build file
-    while fnamemodify(l:dir, ':p') !=# '/' && l:nesting > 0
-	    if filereadable(l:dir . '/' . 'meson.build')
-		    let l:project_dir = l:dir
-	    endif
-	    let l:dir = l:dir . '/..'
-	    let l:nesting = l:nesting - 1
-    endwhile
-
-    " why one needs to do it two times?
-    let l:project_dir = fnamemodify(l:project_dir, ':p')
-    let l:project_dir = fnamemodify(l:project_dir, ':p')
-    return l:project_dir
-endfunction
-
-if exists('g:loaded_neomake')
-    function! s:ninja_InitForJob(_jobinfo) dict
-	" set cwd to project dir
-	if !has_key(self, 'cwd')
-	    let self.cwd = MesonProjectDir()
-	endif
-	" generate new error format lines
-	" source: https://github.com/igankevich/mesonic/blob/master/compiler/meson.vim#L67
-	if !has_key(self, 'errorformat')
-	    let g:meson_error_format = [
-	    \ '%EMeson encountered an error in file ' . l:project_subdir . '%f\, line %l\, column %c:,%Z%m',
-	    \ '%Dninja: Entering directory `%f''',
-	    \ '%f:%l.%c-%[%^:]%#: %t%[%^:]%#: %m'
-	    \ ]
-	    let self.errorformat = join(g:meson_error_format, ',')
-	endif
-	return self
-    endfunction
-    function! s:ninja_postprocess(entry)
-	if empty(a:entry.type)
-	    let a:entry.type = 'E'
-	endif
-    endfunction
-    let g:neomake_c_ninja_maker = {
-    \ 'exe': 'ninja',
-    \ 'args': ['-C', 'build'],
-    \ 'append_file': 0,
-    \ 'postprocess': function('s:ninja_postprocess'),
-    \ 'InitForJob': function('s:ninja_InitForJob'),
-    \ }
-    let g:neomake_c_ninjaclean_maker = {
-    \ 'exe': 'ninja',
-    \ 'args': ['-C', 'build', 'clean'],
-    \ 'append_file': 0,
-    \ 'postprocess': function('s:ninja_postprocess'),
-    \ 'InitForJob': function('s:ninja_InitForJob'),
-    \ }
-    let g:neomake_c_enabled_makers = ['ninja']
-endif
diff --git a/.vim/after/ftplugin/clap_input.vim b/.vim/after/ftplugin/clap_input.vim
deleted file mode 100644
index 6579064..0000000
--- a/.vim/after/ftplugin/clap_input.vim
+++ /dev/null
@@ -1,6 +0,0 @@
-
-nnoremap <silent><buffer> q :<c-u>call clap#handler#exit()<CR>
-inoremap <silent><buffer> <C-n> <C-R>=clap#navigation#linewise('down')<CR>
-inoremap <silent><buffer> <C-p> <C-R>=clap#navigation#linewise('up')<CR>
-nnoremap <silent><buffer> <C-n> :<c-u> call clap#navigation#linewise('down')<CR>
-nnoremap <silent><buffer> <C-p> :<c-r> call clap#navigation#linewise('up')<CR>
diff --git a/.vim/after/ftplugin/crontab.vim b/.vim/after/ftplugin/crontab.vim
deleted file mode 100644
index 46faa33..0000000
--- a/.vim/after/ftplugin/crontab.vim
+++ /dev/null
@@ -1 +0,0 @@
-autocmd filetype crontab setlocal nobackup nowritebackup
diff --git a/.vim/after/ftplugin/diff.vim b/.vim/after/ftplugin/diff.vim
deleted file mode 100644
index 49974ec..0000000
--- a/.vim/after/ftplugin/diff.vim
+++ /dev/null
@@ -1,33 +0,0 @@
-" disable annoying plugins
-let b:coc_enabled = 0
-silent NeomakeDisable
-
-command! FindMergeMarker execute 'normal /^<<<<<<</<CR>'
-
-" shortcuts for 3-way merges
-command! DiffGetLocal :diffget LOCAL
-command! DiffGetRemote :diffget REMOTE
-" quicksave
-command! DiffSave :wqa
-
-cnoreabbrev fmm FindMergeMarker
-cnoreabbrev dgl DiffGetLocal
-cnoreabbrev dgr DiffGetRemote
-cnoreabbrev ds DiffSave
-
-
-let s:markers = {
-      \ 'ours': '^<<<<<<< ',
-      \ 'theirs': '^>>>>>>> ',
-      \ 'base': '^||||||| ',
-      \ 'delimiter': '^=======\r\?$',
-      \ }
-
-if &diff
-    " set custom ctags in diff mode
-
-    let _ft=&filetype
-    let g:vista_ctags_cmd = {
-    \ _ft: 'ctags --format=2 --excmd=pattern --fields=nksSaf --file-scope=yes --sort=no --append=no --output-format=json --fields=-PF -f-',
-    \ }
-endif
diff --git a/.vim/after/ftplugin/gitrebase.vim b/.vim/after/ftplugin/gitrebase.vim
deleted file mode 100644
index e97d225..0000000
--- a/.vim/after/ftplugin/gitrebase.vim
+++ /dev/null
@@ -1,8 +0,0 @@
-set keywordprg=:GitShow
-command! -nargs=1 -bar GitShow call s:git_show(<f-args>)
-
-function! s:git_show(commit) abort
-    let p = popup#new({ 'filetype': 'diff' })
-    let p.contents = systemlist("git show ".a:commit)
-    call p.open()
-endfunction
diff --git a/.vim/after/ftplugin/go.vim b/.vim/after/ftplugin/go.vim
deleted file mode 100644
index b5c0d44..0000000
--- a/.vim/after/ftplugin/go.vim
+++ /dev/null
@@ -1,77 +0,0 @@
-setlocal noexpandtab
-setlocal shiftwidth=8
-setlocal tabstop=8
-
-let g:go_echo_go_info = 0
-let g:go_auto_type_info = 0
-" let g:go_info_mode = 'gocode'
-" let g:go_auto_sameids = 1
-" let g:go_gocode_unimported_packages = 0
-" let g:go_list_type = 'quickfix'
-let g:go_template_autocreate = 0
-
-let g:go_mod_fmt_autosave = 1
-let g:go_fmt_autosave = 1
-let g:go_fmt_command = 'goimports'
-let g:go_fmt_fail_silently = 1
-let g:go_fmt_experimental = 1 " solves https://github.com/fatih/vim-go/issues/502
-
-" let g:go_term_enabled = 0
-" let g:go_term_mode = 'split'
-
-let g:go_metalinter_autosave = 0
-let g:go_metalinter_enabled = ['vet', 'golint', 'errcheck']
-let g:go_metalinter_autosave_enabled = ['vet', 'golint']
-let g:go_metalinter_deadline = '2s'
-
-" let g:go_highlight_functions = 1
-" let g:go_highlight_methods = 1
-" let g:go_highlight_fields = 1
-" let g:go_highlight_structs = 1
-" let g:go_highlight_interfaces = 1
-" let g:go_highlight_build_constraints = 1
-" let g:go_highlight_types = 1
-" let g:go_highlight_extra_types = 1
-" let g:go_highlight_operators = 1
-" let g:go_highlight_space_tab_error = 1
-" let g:go_highlight_array_whitespace_error = 1
-" let g:go_highlight_trailing_whitespace_error = 1
-
-function! Alternate_go()
-  call <Plug>(go-alternate-edit)
-endfunction
-
-" augroup go
-"   au!
-"   au VimEnter go call vista#RunForNearestMethodOrFunction()
-" augroup END
-
-if exists('g:loaded_neomake')
-  let g:neomake_go_build_maker = {
-  \ 'exe': 'go',
-  \ 'args': 'build',
-  \ 'append_file': 0,
-  \ }
-  " let g:neomake_go_golangci_lint_args = ['run', '--out-format=line-number', '--print-issued-lines=false']
-  let g:neomake_go_enabled_makers = ['go', 'golangci_lint']
-endif
-
-" https://github.com/fatih/dotfiles/blob/master/vimrc#L380
-" create a go doc comment based on the word under the cursor
-function! s:create_go_doc_comment()
-  norm "zyiw
-  execute ":put! z"
-  execute ":norm I// \<Esc>$"
-endfunction
-nnoremap <Leader>ui :<C-u>call <SID>create_go_doc_comment()<CR>
-
-" let b:deoplete_disable_auto_complete = 0
-" let g:neoformat_enabled_go = []
-"
-
-if exists('g:did_coc_loaded')
-  augroup CoC
-    au!
-    au BufWritePre * CocCommand editor.action.organizeImport
-  augroup END
-endif
diff --git a/.vim/after/ftplugin/gomod.vim b/.vim/after/ftplugin/gomod.vim
deleted file mode 100644
index 96369aa..0000000
--- a/.vim/after/ftplugin/gomod.vim
+++ /dev/null
@@ -1 +0,0 @@
-set commentstring=//\ %s
diff --git a/.vim/after/ftplugin/gotmpl.vim b/.vim/after/ftplugin/gotmpl.vim
deleted file mode 100644
index cf481c4..0000000
--- a/.vim/after/ftplugin/gotmpl.vim
+++ /dev/null
@@ -1 +0,0 @@
-set commentstring=<!--\ %s\ -->
diff --git a/.vim/after/ftplugin/i3.vim b/.vim/after/ftplugin/i3.vim
deleted file mode 100644
index 9c2e80a..0000000
--- a/.vim/after/ftplugin/i3.vim
+++ /dev/null
@@ -1 +0,0 @@
-set commentstring=#\ %s
diff --git a/.vim/after/ftplugin/ledger.vim b/.vim/after/ftplugin/ledger.vim
deleted file mode 100644
index 0aa29a3..0000000
--- a/.vim/after/ftplugin/ledger.vim
+++ /dev/null
@@ -1 +0,0 @@
-let g:ledger_bin = 'hledger'
diff --git a/.vim/after/ftplugin/mail.vim b/.vim/after/ftplugin/mail.vim
deleted file mode 100644
index cdfbfc6..0000000
--- a/.vim/after/ftplugin/mail.vim
+++ /dev/null
@@ -1,20 +0,0 @@
-" backup aerc mails to a draft directory
-let g:mail_draft_dir = $HOME.'/.aerc/drafts'
-
-function! SaveDraft()
-    if !isdirectory(g:mail_draft_dir)
-	call mkdir(g:mail_draft_dir, 'p')
-    endif
-    let draft = join([g:mail_draft_dir, systemlist('now')[0] . '_' .expand('%:t')], '/')
-    execute 'silent! write! '.draft
-endfunction
-
-augroup vim_mail
-    au!
-    au CursorHold * call SaveDraft()
-augroup END
-
-set commentstring=>\ %s
-set showtabline=0
-
-command! DraftSave call SaveDraft()
diff --git a/.vim/after/ftplugin/make.vim b/.vim/after/ftplugin/make.vim
deleted file mode 100644
index 840c87a..0000000
--- a/.vim/after/ftplugin/make.vim
+++ /dev/null
@@ -1,2 +0,0 @@
-" Disable tabs->spaces for Makefiles
-autocmd filetype make setlocal noexpandtab
diff --git a/.vim/after/ftplugin/markdown.vim b/.vim/after/ftplugin/markdown.vim
deleted file mode 100644
index 0d42ff0..0000000
--- a/.vim/after/ftplugin/markdown.vim
+++ /dev/null
@@ -1,27 +0,0 @@
-setlocal foldlevel=1
-
-if exists('g:loaded_lexima')
-  let g:lexima_enable_space_rules=0
-endif
-
-function! s:markdown_underline(bang)
-  call append(line('.'), substitute(getline('.'), '.', (a:bang ? '-' : '='), 'g'))
-endfunction
-command! -nargs=0 -bang Underline call s:markdown_underline(<bang>0)
-
-if exists('g:loaded_neomake')
-  let g:neomake_markdown_shiba_maker = {
-  \   'exe': 'shiba',
-  \   'args': ['--detach', '%:p'],
-  \   'append_file': 0,
-  \ }
-  let g:neomake_markdown_enabled_makers = []
-endif
-
-augroup Markdown
-  au!
-  " au FileType markdown NeomakeDisableBuffer
-
-  " Make vim-markdown-folding ignore frontmatter blocks
-  au BufNewFile,BufRead markdown syntax match Comment /\%^---\_.\{-}---$/
-augroup END
diff --git a/.vim/after/ftplugin/python.vim b/.vim/after/ftplugin/python.vim
deleted file mode 100644
index abdaca6..0000000
--- a/.vim/after/ftplugin/python.vim
+++ /dev/null
@@ -1,4 +0,0 @@
-let g:neomake_python_enabled_makers = []
-let g:neoformat_enabled_python = ["yapf"]
-let g:neoformat_python_maker_yapf_args = ["--style=pep8"]
-
diff --git a/.vim/after/ftplugin/rust.vim b/.vim/after/ftplugin/rust.vim
deleted file mode 100644
index 9bf2ca9..0000000
--- a/.vim/after/ftplugin/rust.vim
+++ /dev/null
@@ -1,72 +0,0 @@
-set tags='./rusty-tags.vi/'
-
-if exists('g:loaded_lexima')
-    call lexima#add_rule({'filetype': ['rust'], 'char': "'", 'at': '<\%# | &\%#'})
-endif
-
-let g:racer_cmd = $HOME.'/.cargo/bin/racer'
-
-" let g:gutentags_enabled = 0
-" let g:gutentags_define_advanced_commands = 1
-" let g:gutentags_ctags_executable_rust = 'rusty-tags'
-" let g:gutentags_ctags_extra_args = ['--omit-deps', 'vi']
-" let g:gutentags_ctags_tagfile = 'rusty-tags.vi'
-
-" when using standard ctags
-let g:tagbar_type_rust = {
-            \ 'ctagstype' : 'rust',
-            \ 'kinds' : [
-            \'T:types,type definitions',
-            \'f:functions,function definitions',
-            \'g:enum,enumeration names',
-            \'s:structure names',
-            \'m:modules,module names',
-            \'c:consts,static constants',
-            \'t:traits',
-            \'i:impls,trait implementations',
-            \]
-            \}
-
-" when using universal-ctags
-" let g:rust_use_custom_ctags_defs = 1  " if using rust.vim
-" let g:tagbar_type_rust = {
-"   \ 'ctagstype' : 'rust',
-"   \ 'kinds' : [
-"       \ 'n:modules',
-"       \ 's:structures:1',
-"       \ 'i:interfaces',
-"       \ 'c:implementations',
-"       \ 'f:functions:1',
-"       \ 'g:enumerations:1',
-"       \ 't:type aliases:1:0',
-"       \ 'v:constants:1:0',
-"       \ 'M:macros:1',
-"       \ 'm:fields:1:0',
-"       \ 'e:enum variants:1:0',
-"       \ 'P:methods:1',
-"   \ ],
-"   \ 'sro': '::',
-"   \ 'kind2scope' : {
-"       \ 'n': 'module',
-"       \ 's': 'struct',
-"       \ 'i': 'interface',
-"       \ 'c': 'implementation',
-"       \ 'f': 'function',
-"       \ 'g': 'enum',
-"       \ 't': 'typedef',
-"       \ 'v': 'variable',
-"       \ 'M': 'macro',
-"       \ 'm': 'field',
-"       \ 'e': 'enumerator',
-"       \ 'P': 'method',
-"   \ },
-" \ }
-
-let g:neomake_rust_enabled_makers = ['cargo']
-
-" augroup rust
-"     au!
-" augroup END
-
-" nmap <Leader>d <Plug>(rust-doc)
-" nmap <Leader>j <Plug>(rust-def)
diff --git a/.vim/after/ftplugin/snippets.vim b/.vim/after/ftplugin/snippets.vim
deleted file mode 100644
index cb39fa6..0000000
--- a/.vim/after/ftplugin/snippets.vim
+++ /dev/null
@@ -1 +0,0 @@
-set list
diff --git a/.vim/after/ftplugin/tex.vim b/.vim/after/ftplugin/tex.vim
deleted file mode 100644
index 88d4f11..0000000
--- a/.vim/after/ftplugin/tex.vim
+++ /dev/null
@@ -1,23 +0,0 @@
-
-nnoremap <leader>c :call vimtex#compiler#compile()<cr>
-" augroup Vimtex
-"     au!
-"     au BufWritePost * silent call vimtex#compiler#compile()
-" augroup END
-
-" if exists('g:loaded_neomake')
-"     let g:neomake_tex_tectonic_maker = {
-"     \ 'exe': 'tectonic',
-"     \ 'append_file': 1,
-"     \ 'errorformat':
-"     \     '%Eerror: something bad happened inside TeX; its output follows:,'.
-"     \     '%C^[=]+$,'.
-"     \     '%C(%f,'.
-"     \     '%C.*,'.
-"     \     '%C! %m,'.
-"     \     '%Cl.%l %s,'.
-"     \     '%C^[=]+$,'.
-"     \     '%-Zcaused by: %s,'
-"     \ }
-"     let g:neomake_tex_enabled_makers = ['tectonic']
-" endif
diff --git a/.vim/after/ftplugin/toml.vim b/.vim/after/ftplugin/toml.vim
deleted file mode 100644
index 03bf098..0000000
--- a/.vim/after/ftplugin/toml.vim
+++ /dev/null
@@ -1,6 +0,0 @@
-" let g:neoformat_toml_tomlfix = {
-"   \ 'exe': 'tomlfix',
-"   \ 'args': ['-w'],
-"   \ 'replace': 1,
-"   \ }
-" let g:neoformat_enabled_toml = ['tomlfix']
diff --git a/.vim/after/ftplugin/vim.vim b/.vim/after/ftplugin/vim.vim
deleted file mode 100644
index a6014c7..0000000
--- a/.vim/after/ftplugin/vim.vim
+++ /dev/null
@@ -1 +0,0 @@
-set foldmethod=marker
diff --git a/.vim/after/ftplugin/yaml.vim b/.vim/after/ftplugin/yaml.vim
deleted file mode 100644
index 2d09076..0000000
--- a/.vim/after/ftplugin/yaml.vim
+++ /dev/null
@@ -1,2 +0,0 @@
-" fix indent
-set et sts=2
diff --git a/.vim/after/plugin/line_bufferline.vim b/.vim/after/plugin/line_bufferline.vim
deleted file mode 100644
index 551790f..0000000
--- a/.vim/after/plugin/line_bufferline.vim
+++ /dev/null
@@ -1,30 +0,0 @@
-if !exists('g:loaded_bufferline')
-  finish
-endif
-
-if !exists('g:lightline.tabline.left')
-  let g:lightline.tabline.left = []
-endif
-let g:lightline.tabline.left += [['bufferline']]
-let g:lightline.component_expand.bufferline = 'LightLineBufferline'
-let g:lightline.component_type.bufferline = 'tabsel'
-
-function! LightLineBufferline()
-  call bufferline#refresh_status()
-  let l:buffers = [
-  \ g:bufferline_status_info.before,
-  \ g:bufferline_status_info.current,
-  \ g:bufferline_status_info.after
-  \ ]
-
-  function! s:fmt(key, val)
-    let limit = 25
-    if strlen(a:val) > limit
-      return trim(a:val)[:limit] . '..'
-    endif
-    return trim(a:val)
-  endfunction
-
-  call map(l:buffers, function('s:fmt'))
-  return l:buffers
-endfunction
diff --git a/.vim/after/plugin/line_obsession.vim b/.vim/after/plugin/line_obsession.vim
deleted file mode 100644
index c4f774f..0000000
--- a/.vim/after/plugin/line_obsession.vim
+++ /dev/null
@@ -1,10 +0,0 @@
-if !exists('g:loaded_obsession')
-  finish
-endif
-
-let g:lightline.component_function.obsession = 'LightLineSession'
-
-function! LightLineSession()
-  let l:indicator = ObsessionStatus('active', 'paused')
-  return l:indicator ? '[obs '.l:indicator.']' : ''
-endfunction
diff --git a/.vim/after/plugin/neomake.vim b/.vim/after/plugin/neomake.vim
deleted file mode 100644
index 1e30a72..0000000
--- a/.vim/after/plugin/neomake.vim
+++ /dev/null
@@ -1,85 +0,0 @@
-finish
-if !exists('g:loaded_neomake')
-  finish
-endif
-
-" Neomake
-cnoreabbrev neom Neomake
-cnoreabbrev nm Neomake
-call neomake#configure#automake('w')
-
-" \ 'BufWritePost': {'delay': 0},
-let g:neomake_error_sign = {'text': '✘', 'texthl': 'NeomakeErrorSign'}
-let g:neomake_warning_sign = {'text': '‼', 'texthl': 'NeomakeWarningSign'}
-let g:neomake_message_sign = {'text': '☛', 'texthl': 'NeomakeMessageSign'}
-let g:neomake_info_sign = {'text': 'i', 'texthl': 'NeomakeInfoSign'}
-
-" make diagnosis-nvim match
-call sign_define("LspDiagnosticsErrorSign", {"text" : copy(g:neomake_error_sign.text), "texthl" : copy(g:neomake_error_sign.texthl)})
-call sign_define("LspDiagnosticsWarningSign", {"text" : copy(g:neomake_warning_sign.text), "texthl" : copy(g:neomake_warning_sign.texthl)})
-call sign_define("LspDiagnosticsHintSign", {"text" : copy(g:neomake_message_sign.text), "texthl" : copy(g:neomake_message_sign.texthl)})
-call sign_define("LspDiagnosticsInformationSign", {"text" : copy(g:neomake_info_sign.text), "texthl" : copy(g:neomake_info_sign.texthl)})
-
-" let g:neomake_serialize = 1
-
-let g:neomake_highlight_columns = 1
-let g:neomake_highlight_lines = 1
-let g:neomake_open_list = 0
-
-" function! OnNeomakeJobFinished()
-"   let l:ctx = g:neomake_hook_context
-"   if l:ctx.jobinfo.exit_code != 0
-"     echoerr l:ctx.jobinfo.maker.name . ' failed'
-"   endif
-" endfunction
-augroup neomake_hooks
-  au!
-  " au User NeomakeJobFinished call OnNeomakeJobFinished()
-  au BufWritePost * Neomake
-augroup END
-
-" generic makers
-let g:neomake_makeclean_maker = { 'exe': 'make', 'args': ['clean'], 'errorformat': '%f:%l:%c: %m' }
-let g:neomake_make_maker = { 'exe': 'make', 'errorformat': '%f:%l:%c: %m' }
-
-nmap <leader>nm :Neomake<space>
-
-if exists('g:loaded_lightline')
-    if exists('g:lightline')
-        let g:lightline.component_function.neomake = 'LightLineNeomake'
-    else
-        let g:lightline = {'component_function': {'neomake': 'LightLineNeomake'}}
-    endif
-    function! LightLineNeomake()
-    let l:msg = neomake#statusline#get(bufnr('%'), {
-        \ 'format_status_disabled': '{{disabled_info}} %s',
-        \ 'format_status_enabled': '%s',
-        \ 'format_running': '… {{running_job_names}}',
-        \ 'format_loclist_ok': ' ✔',
-        \ 'format_loclist_issues': '%s',
-        \ 'format_loclist_unknown': '',
-        \ 'format_loclist_type_E': ' ✘ {{count}}',
-        \ 'format_loclist_type_W': ' ‼ {{count}}',
-        \ 'format_loclist_type_I': ' i {{count}}',
-        \ 'format_quickfix_type_E': '✘ {{count}}',
-        \ 'format_quickfix_type_W': '‼ {{count}}',
-        \ 'format_quickfix_type_I': 'i {{count}}',
-    \ })
-    return l:msg ? 'nm:'.l:msg : ''
-    endfunction
-endif
-
-" hightlights {{{
-hi SpellBad ctermfg=red guifg=red
-hi SpellCap ctermfg=yellow guifg=yellow
-
-hi link NeomakeErrorSign NeomakeError
-hi link NeomakeWarningSign NeomakeWarning
-hi link NeomakeMessageSign NeomakeMessage
-hi link NeomakeInfoSign NeomakeInfo
-
-hi link NeomakeVirtualtextError NeomakeError
-hi link NeomakeVirtualtextWarning NeomakeWarning
-hi link NeomakeVirtualtextMessage NeomakeMessage
-hi link NeomakeVirtualtextInfo NeomakeInfo
-" }}}
diff --git a/.vim/after/plugin/writing.vim b/.vim/after/plugin/writing.vim
deleted file mode 100644
index f84cc48..0000000
--- a/.vim/after/plugin/writing.vim
+++ /dev/null
@@ -1,92 +0,0 @@
-" Configuration for writing text in vim
-
-" Grammer checker
-let g:grammarous#languagetool_cmd = 'languagetool'
-
-" Minimal UX for concentration
-let g:goyo_width = 120
-let g:goyo_height = 90
-let g:goyo_linenr = 0
-nmap <F0> :Goyo<CR>
-
-let g:limelight_conceal_ctermfg = 'gray'
-let g:limelight_conceal_ctermbg = 'none'
-let g:limelight_conceal_guifg = 'gray'
-let g:limelight_conceal_guibg = 'none'
-
-let g:limelight_default_coefficient = 0.5
-let g:limelight_paragraph_span = 1
-let g:limelight_priority = -1
-
-" goyo enter/leave funcs {{{
-function! s:goyo_enter()
-    if has('gui_running') || has('gui_vimr')
-        " set linespace = 7
-    end
-    if executable('tmux') && strlen($TMUX)
-        silent !tmux set status off
-        silent !tmux list-panes -F '\#F' | grep -q Z || tmux resize-pane -Z
-    endif
-
-    " set noshowmode
-    " set noshowcmd
-    set scrolloff=999
-    Limelight
-
-    " make sure :q in the last buffer, in Goyo also quits vim
-    " let b:quitting = 0
-    " let b:quitting_bang = 0
-    " autocmd QuitPre <buffer> let b:quitting = 1
-    " cabbrev <buffer> q! let b:quitting_bang = 1 <bar> q!
-endfunction
-
-function! s:goyo_leave()
-    if has('gui_running') || has('gui_vimr')
-        " set linespace = 0
-    endif
-    if executable('tmux') && strlen($TMUX)
-        silent !tmux set status on
-        silent !tmux list-panes -F '\#F' | grep -q Z || tmux resize-pane -Z
-    endif
-
-    " set showmode
-    " set showcmd
-    set scrolloff=5
-    Limelight!
-
-    " make sure :q in the last buffer, in Goyo also quits vim
-    " if b:quitting && len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1
-    "     if b:quitting_bang
-    "       qa!
-    "     else
-    "       qa
-    "     endif
-    " endif
-
-    hi SignColumn guibg=none ctermbg=none
-endfunction
-" }}}
-
-" writing autocommands
-function! s:writing_mode_enter()
-    set textwidth=120
-    " ALEToggle
-    " Grammarous keymaps
-    if exists('g:loaded_grammarous')
-        nmap <leader>l :GrammarousCheck --lang=de
-        nmap <leader>gi <Plug>(grammarous-move-to-info-window)
-        nmap <leader>gr <Plug>(grammarous-remove-error)
-        nmap <leader>gd <Plug>(grammarous-disable-rule)
-        nmap <leader>gf <Plug>(grammarous-fixit)
-        nmap <leader>gn <Plug>(grammarous-move-to-next-error)
-        nmap <leader>gp <Plug>(grammarous-move-to-previous-error)
-    endif
-endfunction
-
-augroup Writing
-    au!
-    au FileType markdown,tex call <SID>writing_mode_enter()
-    " goyo autocommands
-    au User GoyoEnter nested call <SID>goyo_enter()
-    au User GoyoLeave nested call <SID>goyo_leave()
-augroup END
diff --git a/.vim/autoload/alternate.vim b/.vim/autoload/alternate.vim
deleted file mode 100644
index e179fce..0000000
--- a/.vim/autoload/alternate.vim
+++ /dev/null
@@ -1,8 +0,0 @@
-function! alternate#alternate()
-    let l:function_name = 'Alternate_' . &filetype
-    if exists('*' . l:function_name)
-        execute l:function_name
-    else
-        echo 'no alternate function defined for "' . &filetype . '"'
-    endif
-endfunction
diff --git a/.vim/autoload/daymode.vim b/.vim/autoload/daymode.vim
deleted file mode 100644
index b2c8cdb..0000000
--- a/.vim/autoload/daymode.vim
+++ /dev/null
@@ -1,27 +0,0 @@
-function! s:lightline_update(colors)
-    if exists('g:loaded_lightline')
-        try
-            let g:lightline.colorscheme = a:colors
-            call lightline#init()
-            call lightline#colorscheme()
-            call lightline#update()
-        catch
-        endtry
-    endif
-endfunction
-
-function! daymode#switch(bang)
-    if a:bang
-        set background=dark
-        execute 'colorscheme' get(g:, 'daymode_colorscheme_night', 'default')
-        call s:lightline_update(get(g:, 'daymode_lightline_colorscheme_night', 'PaperColor'))
-    else
-        set background=light
-        execute 'colorscheme' get(g:, 'daymode_colorscheme_day', 'default')
-        call s:lightline_update(get(g:, 'daymode_lightline_colorscheme_day', 'PaperColor'))
-    endif
-
-    " if exists("syntax_on")
-    "     syntax reset
-    " endif
-endfunction
diff --git a/.vim/autoload/fasd.vim b/.vim/autoload/fasd.vim
deleted file mode 100644
index 7ef53bd..0000000
--- a/.vim/autoload/fasd.vim
+++ /dev/null
@@ -1,18 +0,0 @@
-" not sure if I am using this 
-finish
-
-if exists('g:loaded_fasd')
-  finish
-endif
-let g:loaded_fasd = 1
-let g:fasd_path = '/home/robert/.dotfiles/zsh/.zplug/repos/sorin-ionescu/prezto/modules/fasd/external/fasd'
-
-function! fasd#run(args) abort
-  return system(g:fasd_path . ' -d -0 ' . a:args)
-endfunction
-
-function! fasd#cd(args) abort
-  execute 'tcd' . fasd#run(a:args)
-endfunction
-
-command! -nargs=1 J :call fasd#cd(<f-args>)
diff --git a/.vim/autoload/fuzz.vim b/.vim/autoload/fuzz.vim
deleted file mode 100644
index 39d02f1..0000000
--- a/.vim/autoload/fuzz.vim
+++ /dev/null
@@ -1,140 +0,0 @@
-function! s:prompt(str)
-  return a:str . g:fuzz_prompt . ' '
-endfunction
-
-function! s:fuzz(name, opts)
-  " call skim#run(skim#wrap(a:name, a:opts, 0))
-  call fzf#run(fzf#wrap(a:name, a:opts, 0))
-endfunction
-
-function! s:strip(str)
-  return substitute(a:str, '^\s*\|\s*$', '', 'g')
-endfunction
-
-function! s:open(cmd, target)
-  if stridx('edit', a:cmd) == 0 && fnamemodify(a:target, ':p') ==# expand('%:p')
-    return
-  endif
-  execute a:cmd fnameescape(a:target)
-endfunction
-
-
-" rg {{{
-function s:map_rg_output(line)
-  let parts = split(a:line, ':')
-  return {'filename': &acd ? fnamemodify(parts[0], ':p') : parts[0], 'lnum': parts[1], 'text': join(parts[2:], ':')}
-endfunction
-
-function s:rg_handler(lines)
-  if len(a:lines) < 1
-    return
-  endif
-  let first = map(filter(a:lines, 'len(v:val)'), 's:map_rg_output(v:val)')[0]
-  call s:open('edit', first.filename)
-  execute first.lnum
-  normal! zz
-endfunction
-
-function s:rg(prompt, ...)
-  if !executable('rg')
-    echoerr 'rg not found'
-    return
-  endif
-  if len(a:000) < 1 || len(a:000[0]) < 1
-    echoerr 'no arguments'
-    return
-  endif
-
-  call s:fuzz(!empty(a:prompt) ? tolower(a:prompt) : 'rg', {
-  \ 'source': 'rg --line-number --no-heading --color=always --smart-case '.join(a:000[0], ' '),
-  \ 'sink*': function('s:rg_handler'),
-  \ 'options': ['--prompt', s:prompt(!empty(a:prompt) ? a:prompt : 'Rg'),
-  \             '--ansi', '--multi']
-  \ })
-endfunction
-
-function! fuzz#rg(args) abort
-  call s:rg('', a:args)
-endfunction
-" }}}
-
-" files {{{
-function! fuzz#files() abort
-  call s:fuzz('files', {
-  \ 'options': ['--prompt', s:prompt('Fs')]
-  \ })
-endfunction
-" }}}
-
-" buffers {{{
-function! s:buffers_list()
-  function! s:buflisted()
-    return filter(range(1, bufnr('$')), 'buflisted(v:val) && getbufvar(v:val, "&filetype") != "qf"')
-  endfunction
-
-  function! s:format_buffer(b)
-    let name = bufname(a:b)
-    let name = empty(name) ? '[No Name]' : fnamemodify(name, ":p:~:.")
-    let flag = a:b == bufnr('')  ? '%' :
-            \ (a:b == bufnr('#') ? '#' : ' ')
-    let modified = getbufvar(a:b, '&modified') ? ' [+]' : ''
-    let readonly = getbufvar(a:b, '&modifiable') ? '' : ' [RO]'
-    let extra = join(filter([modified, readonly], '!empty(v:val)'), '')
-    return s:strip(printf("[%s] %s\t%s\t%s", a:b, flag, name, extra))
-  endfunction
-
-  return map(sort(s:buflisted()), 's:format_buffer(v:val)')
-endfunction
-
-function! s:buffers_handler(lines)
-  if len(a:lines) < 1
-    return
-  endif
-  let b = matchstr(a:lines[0], '\[\zs[0-9]*\ze\]')
-  execute 'buffer' b
-endfunction
-
-function! fuzz#buffers() abort
-  call s:fuzz('buffers', {
-  \ 'source': s:buffers_list(),
-  \ 'sink*': function('s:buffers_handler'),
-  \ 'options': ['--prompt', s:prompt('Buf')]
-  \ })
-endfunction
-" }}}
-
-" commands {{{
-function! s:command_handler(lines)
-  if len(a:lines) < 1
-    return
-  endif
-  call feedkeys(':'.a:lines[0])
-endfunction
-
-function! fuzz#commands() abort
-  call s:fuzz('commands', {
-  \ 'source': sort(getcompletion('', 'command')),
-  \ 'sink*': function('s:command_handler'),
-  \ 'options': ['--prompt', s:prompt('Cmd')]
-  \ })
-endfunction
-" }}}
-
-function! fuzz#cmdoptions(...) abort
-  let opts = sort(['files', 'buffers', 'commands', 'rg'])
-  return join(opts, "\n")
-endfunction
-
-function! fuzz#exec(cmd, ...) abort
-  if a:cmd == 'files'
-    call fuzz#files()
-  elseif a:cmd == 'buffers'
-    call fuzz#buffers()
-  elseif a:cmd == 'commands'
-    call fuzz#commands()
-  elseif a:cmd == 'rg'
-    call fuzz#rg(a:000)
-  else
-    echoerr 'Unknown command ' . a:cmd
-  endif
-endfunction
diff --git a/.vim/autoload/lightline/colorscheme/papercolor_dim.vim b/.vim/autoload/lightline/colorscheme/papercolor_dim.vim
deleted file mode 100644
index 0ba29f3..0000000
--- a/.vim/autoload/lightline/colorscheme/papercolor_dim.vim
+++ /dev/null
@@ -1,59 +0,0 @@
-" papercolor_dim : a less flashy statusline
-"
-" Adapted from the Papercolor_dark theme:
-" =============================================================================
-" Filename: autoload/lightline/colorscheme/PaperColor_dark.vim
-" Author: TKNGUE
-" License: MIT License
-" Last Change: 2015-07-27 06:01
-" =============================================================================
-
-" colors
-let s:color00 = '#1c1c1c'
-let s:color01 = '#af005f'
-let s:color02 = '#5faf00'
-let s:color03 = '#d7af5f'
-let s:color04 = '#5fafd7'
-let s:color05 = '#808080'
-let s:color06 = '#d7875f'
-let s:color07 = '#d0d0d0'
-let s:color08 = '#585858'
-let s:color09 = '#5faf5f'
-let s:color10 = '#afd700'
-let s:color11 = '#af87d7'
-let s:color12 = '#ffaf00'
-let s:color13 = '#ff5faf'
-let s:color14 = '#00afaf'
-let s:color15 = '#5f8787'
-let s:color16 = '#5fafd7'
-let s:color17 = '#d7af00'
-
-let s:black = '#1c1c1c'
-let s:grey_dim = '#3a3a3a'
-let s:grey_dimmer = '#262626'
-let s:white = '#d0d0d0'
-let s:white_dim = '#bdc0ba'
-
-" palette
-let s:p = {'command': {}, 'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
-
-let s:p.normal.left = [[ s:white, s:grey_dim ], [ s:white_dim, s:grey_dimmer ], [ s:white_dim, 'none' ]]
-let s:p.normal.right = [[ s:white, s:grey_dim ], [ s:white_dim, s:grey_dimmer ], [ s:white_dim, 'none' ]]
-let s:p.normal.middle = [[ s:white_dim, 'none' ]]
-let s:p.normal.error = [[ s:black, s:color01 ]]
-
-let s:p.inactive.right = [[ s:white_dim, s:grey_dim ], [ s:white_dim, s:grey_dim ]]
-let s:p.inactive.middle = [[ s:white_dim, s:grey_dim ]]
-let s:p.inactive.right = [[ s:white_dim, s:grey_dim ], [ s:white_dim, s:grey_dim ]]
-
-let s:p.insert.left = [[ s:black, s:color04 ], copy(s:p.normal.left[1]), copy(s:p.normal.left[2])]
-let s:p.replace.left = [[ s:black, s:color06 ], copy(s:p.normal.left[1]), copy(s:p.normal.left[2])]
-let s:p.visual.left = [[ s:black, s:color11 ], copy(s:p.normal.left[1]), copy(s:p.normal.left[2])]
-let s:p.command.left = [[ s:color03, s:grey_dim, 'italic' ], copy(s:p.normal.left[1]), copy(s:p.normal.left[2])]
-
-let s:p.tabline.tabsel = [[ s:white, s:color08 ]]
-let s:p.tabline.left = [[ s:white_dim, s:grey_dimmer ]]
-let s:p.tabline.middle = copy(s:p.normal.middle)
-let s:p.tabline.right = copy(s:p.normal.right)
-
-let g:lightline#colorscheme#papercolor_dim#palette = lightline#colorscheme#fill(s:p)
diff --git a/.vim/autoload/numbertoggle.vim b/.vim/autoload/numbertoggle.vim
deleted file mode 100644
index fe8ddcc..0000000
--- a/.vim/autoload/numbertoggle.vim
+++ /dev/null
@@ -1,17 +0,0 @@
-function! s:relative_linenumbers()
-  set number
-  set relativenumber
-endfunc
-
-function! s:absolute_linenumbers()
-  set number
-  set norelativenumber
-endfunc
-
-function! numbertoggle#switch()
-  if &relativenumber
-    call s:absolute_linenumbers()
-  else
-    call s:relative_linenumbers()
-  endif
-endfunc
diff --git a/.vim/autoload/popup.vim b/.vim/autoload/popup.vim
deleted file mode 100644
index e9f27d4..0000000
--- a/.vim/autoload/popup.vim
+++ /dev/null
@@ -1,215 +0,0 @@
-if !(has('nvim') && exists('*nvim_win_set_config'))
-    echoerr "floating window not supported"
-    finish
-endif
-
-if exists('g:nvim_popup_loaded')
-    finish
-endif
-let g:nvim_popup_loaded = 1
-
-let s:popup = {}
-
-function! s:popup__floating_win_opts(width, height) dict abort
-    let bottom_line = line('w0') + winheight(0) - 1
-    if self.opened_at[1] + a:height <= bottom_line
-        let vert = 'N'
-        let row = 1
-    else
-        let vert = 'S'
-        let row = 0
-    endif
-    if self.opened_at[2] + a:width <= &columns
-        let hor = 'W'
-        let col = 0
-    else
-        let hor = 'E'
-        let col = 1
-    endif
-    return {
-    \ 'style': 'minimal',
-    \ 'relative': 'cursor',
-    \ 'anchor': vert.hor,
-    \ 'row': row,
-    \ 'col': col,
-    \ 'width': a:width,
-    \ 'height': a:height,
-    \ }
-endfunction
-let s:popup.floating_win_opts = funcref('s:popup__floating_win_opts')
-
-function! s:popup__window_size() dict abort
-    let max_width = winwidth(0) / 2
-    let max_height = winheight(0) / 3
-    let width = 0
-    let height = 0
-    for line in self.contents
-	let lw = strdisplaywidth(line)
-	if lw > width
-	    if lw > max_width
-		let height += lw / popup_max_width + 1
-		let width = popup_max_width
-		continue
-	    endif
-	    let width = lw
-	endif
-        let height += 1
-    endfor
-    let width += 1
-
-    if height > max_height
-	let height = max_height
-    endif
-
-    return [width, height]
-endfunction
-let s:popup.window_size = funcref('s:popup__window_size')
-
-function! s:popup__get_winnr() dict abort
-    return win_id2win(self.win_id)
-endfunction
-let s:popup.get_winnr = funcref('s:popup__get_winnr')
-
-function! s:popup__get_opener_winnr() dict abort
-    let winnr = win_id2win(self.opener_winid)
-    if winnr != 0
-        return winnr
-    endif
-    let winnr = bufwinnr(self.opener_bufnr)
-    if winnr > 0
-        return winnr
-    endif
-    return 0
-endfunction
-let s:popup.get_opener_winnr = funcref('s:popup__get_opener_winnr')
-
-function! s:popup_open() dict abort
-    let self.opened_at = getpos('.')
-    let self.opener_bufnr = bufnr('%')
-    let self.opener_winid = win_getid()
-    let self.type = 'floating'
-
-    let [w, h] = self.window_size()
-
-    if self.type ==# 'floating'
-	let opts = self.floating_win_opts(w, h)
-	let win_id = nvim_open_win(self.opener_bufnr, v:true, opts)
-    endif
-
-    enew!
-    let popup_bufnr = bufnr('%')
-    setlocal
-        \ buftype=nofile bufhidden=hide nomodified nobuflisted noswapfile nonumber
-        \ nocursorline wrap nonumber norelativenumber signcolumn=no nofoldenable
-        \ nospell nolist nomodeline
-    if has_key(self.opts, 'filetype')
-	let &l:filetype = self.opts.filetype
-    endif
-
-    call setline(1, self.contents)
-    setlocal nomodified nomodifiable
-
-    if has('nvim')
-	setlocal winhl=Normal:NormalFloat,NormalNC:NormalFloat
-    endif
-
-    nnoremap <buffer><silent><nowait><Esc> :<C-u>call b:__popup.close()<CR>
-    nnoremap <buffer><silent><nowait>q :<C-u>call b:__popup.close()<CR>
-
-    let b:__popup = self
-    execute 'autocmd BufWipeout,BufLeave <buffer> call getbufvar(' . popup_bufnr . ', "__popup").close()'
-
-    if has_key(self.opts, 'enter') && !self.opts.enter
-	wincmd p
-    endif
-    
-    let self.bufnr = popup_bufnr
-    let self.win_id = win_id
-endfunction
-let s:popup.open = funcref('s:popup_open')
-
-function! s:popup__close() dict abort
-    if !has_key(self, 'bufnr')
-	return
-    endif
-
-    let winnr = self.get_winnr()
-    if winnr > 0
-	noautocmd execute winnr . 'wincmd c'
-    endif
-
-    unlet self.bufnr
-    unlet self.win_id
-endfunction
-let s:popup.close = funcref('s:popup__close')
-
-function! s:popup__scroll(map) dict abort
-    let winnr = self.get_winnr()
-    if winnr == 0
-        return
-    endif
-    execute winnr . 'wincmd w'
-    sandbox let input = eval('"\<'.a:map.'>"')
-    execute 'normal!' input
-    wincmd p
-endfunction
-let s:popup.scroll = funcref('s:popup__scroll')
-
-function! s:popup__update() dict abort
-    " Note: `:noautocmd` to prevent BufLeave autocmd event (#13)
-    " It should be ok because the cursor position is finally back to the first
-    " position.
-
-    let prev_winnr = winnr()
-
-    let popup_winnr = self.get_winnr()
-    if popup_winnr == 0
-        return
-    endif
-    let opener_winnr = self.get_opener_winnr()
-    if opener_winnr == 0
-        return
-    endif
-
-    if opener_winnr != prev_winnr
-        noautocmd execute opener_winnr . 'wincmd w'
-    endif
-
-    try
-        let [width, height] = self.window_size()
-
-        " Window must be configured in opener buffer since the window position
-        " is relative to cursor
-        if self.type ==# 'floating'
-            let id = win_getid(popup_winnr)
-            if id == 0
-                return
-            endif
-            let opts = self.floating_win_opts(width, height)
-            call nvim_win_set_config(id, opts)
-        endif
-
-        noautocmd execute popup_winnr . 'wincmd w'
-
-        if self.type ==# 'preview'
-            execute height . 'wincmd _'
-        endif
-
-        setlocal modifiable
-        silent %delete _
-        call setline(1, self.contents)
-        setlocal nomodified nomodifiable
-    finally
-        if winnr() != prev_winnr
-            noautocmd execute prev_winnr . 'wincmd w'
-        endif
-    endtry
-endfunction
-let s:popup.update = funcref('s:popup__update')
-
-function! popup#new(opts) abort
-    let p = deepcopy(s:popup)
-    let opts = { 'floating': v:true }
-    let p.opts = extend(opts, a:opts)
-    return p
-endfunction
diff --git a/.vim/colors/misc.vim b/.vim/colors/misc.vim
new file mode 100644
index 0000000..6583470
--- /dev/null
+++ b/.vim/colors/misc.vim
@@ -0,0 +1,36 @@
+" SignColumn should match background
+hi! clear SignColumn
+
+" nvim-treesitter/nvim-treesitter {{{
+hi! link TSPunctDelimiter Delimiter
+hi! link TSPunctBracket Delimiter
+hi! link TSPunctSpecial Special
+hi! link TSConstant Constant
+hi! link TSConstBuiltin Constant
+hi! link TSConstMacro Macro
+hi! link TSString String
+hi! link TSStringRegex String
+hi! link TSStringEscape SpecialChar
+hi! link TSCharacter Character
+hi! link TSNumber Number
+hi! link TSBoolean Boolean
+hi! link TSFloat Float
+hi! link TSFunction Function
+hi! link TSFuncBuiltin Function
+hi! link TSFuncMacro Macro
+hi! link TSParameter Identifier
+hi! link TSMethod Function
+hi! link TSField Typedef
+hi! link TSProperty Typedef
+hi! link TSConstructor Define
+hi! link TSConditional Conditional
+hi! link TSRepeat Repeat
+hi! link TSLabel Label
+hi! link TSOperator Operator
+hi! link TSKeyword Keyword
+hi! link TSException Exception
+hi! link TSType Type
+hi! link TSTypeBuiltin Type
+hi! link TSStructure Structure
+hi! link TSInclude Include
+" }}}
diff --git a/.vim/colors/nihoncolors.vim b/.vim/colors/nihoncolors.vim
new file mode 100644
index 0000000..51056b8
--- /dev/null
+++ b/.vim/colors/nihoncolors.vim
@@ -0,0 +1,1258 @@
+" Theme: nihoncolors
+" Author: robertgzr <r@gnzler.io>
+" License: MIT
+" Source: http://git.sr.ht/~robertgzr/nihoncolors/
+"
+" A lot of this is based on Nikyle Nguyen's PaperColor theme:
+" http://github.com/NLKNguyen/papercolor-theme
+
+hi clear
+syntax reset
+let g:colors_name = "nihoncolors"
+
+let s:transparent_background = 0
+if exists("g:nihoncolors_transparent_background")
+    let s:transparent_background = g:nihoncolors_transparent_background
+endif
+
+" palette
+let color00 = '#1c1c1c'
+let color01 = '#e03c8a'
+let color02 = '#90b44b'
+let color03 = '#caad5f'
+let color04 = '#58b2dc'
+let color05 = '#828282'
+let color06 = '#e3916e'
+let color07 = '#bdc0ba'
+let color08 = '#535953'
+let color09 = '#86c166'
+let color10 = '#ddd23b'
+let color11 = '#b28fce'
+let color12 = '#ffb11b'
+let color13 = '#66bab7'
+let color14 = '#77969a'
+let color15 = '#fffffb'
+
+" set color variables {{{
+
+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 "
+
+" we don't care about cterm
+fun! s:create_color_variables(color_name, rich_color)
+    let {'s:fg_' . a:color_name} = ' guifg=' . a:rich_color . ' '
+    let {'s:bg_' . a:color_name} = ' guibg=' . a:rich_color . ' '
+endfun
+
+call s:create_color_variables('background',   color00)
+call s:create_color_variables('foreground',   color07)
+call s:create_color_variables('nontext',      color08)
+call s:create_color_variables('negative',     color01)
+call s:create_color_variables('positive',     color02)
+call s:create_color_variables('highlight',    color15)
+call s:create_color_variables('comment',      color05)
+call s:create_color_variables('neutral',      color04)
+" TODO get rid of this
+call s:create_color_variables('navy',     color06) " storageclass
+call s:create_color_variables('olive',    color03) " string
+call s:create_color_variables('red',      color09) " import / try/catch
+call s:create_color_variables('pink',     color10) " statement, type
+call s:create_color_variables('purple',   color11) " if / conditional
+call s:create_color_variables('accent',   color12)
+call s:create_color_variables('orange',   color13) " number
+call s:create_color_variables('blue',     color14) " other keyword
+call s:create_color_variables('aqua',     color14)
+call s:create_color_variables('green',    color13)
+call s:create_color_variables('wine',     color11)
+
+call s:create_color_variables('cursor_fg', color00)
+call s:create_color_variables('cursor_bg', color15)
+
+call s:create_color_variables('cursorline',        color00)
+call s:create_color_variables('cursorcolumn',      color00)
+call s:create_color_variables('cursorlinenr_fg',   color13)
+call s:create_color_variables('cursorlinenr_bg',   color00)
+
+call s:create_color_variables('popupmenu_fg', color03)
+call s:create_color_variables('popupmenu_bg', color00)
+
+call s:create_color_variables('search_fg', color00)
+call s:create_color_variables('search_bg', color15)
+
+call s:create_color_variables('todo_fg', color05)
+call s:create_color_variables('todo_bg', color00)
+
+call s:create_color_variables('error_fg', color01)
+call s:create_color_variables('error_bg', color00)
+
+call s:create_color_variables('matchparen_fg', color00)
+call s:create_color_variables('matchparen_bg', color05)
+
+call s:create_color_variables('visual_fg', color08)
+call s:create_color_variables('visual_bg', color07)
+
+call s:create_color_variables('vertsplit_fg', color15)
+call s:create_color_variables('vertsplit_bg', color00)
+
+call s:create_color_variables('statusline_active_fg',     color15)
+call s:create_color_variables('statusline_active_bg',     color00)
+call s:create_color_variables('statusline_inactive_fg',   color07)
+call s:create_color_variables('statusline_inactive_bg',   color08)
+
+call s:create_color_variables('linenumber_fg', color08)
+call s:create_color_variables('linenumber_bg', color00)
+
+call s:create_color_variables('transparent',  'none')
+call s:create_color_variables('folded_fg', color11)
+call s:create_color_variables('folded_bg', color00)
+
+call s:create_color_variables('wildmenu_fg', color00)
+call s:create_color_variables('wildmenu_bg', color08)
+
+call s:create_color_variables('tabline_bg',          color00)
+call s:create_color_variables('tabline_active_fg',   color07)
+call s:create_color_variables('tabline_active_bg',   color00)
+call s:create_color_variables('tabline_inactive_fg', color07)
+call s:create_color_variables('tabline_inactive_bg', color08)
+
+call s:create_color_variables('buftabline_bg',            color00)
+call s:create_color_variables('buftabline_current_fg',    color07)
+call s:create_color_variables('buftabline_current_bg',    color05)
+call s:create_color_variables('buftabline_active_fg',     color07)
+call s:create_color_variables('buftabline_active_bg',     color12)
+call s:create_color_variables('buftabline_inactive_fg',   color07)
+call s:create_color_variables('buftabline_inactive_bg',   color00)
+
+call s:create_color_variables('diffadd_fg',      color02)
+call s:create_color_variables('diffadd_bg',      color00)
+call s:create_color_variables('diffdelete_fg',   color01)
+call s:create_color_variables('diffdelete_bg',   color00)
+call s:create_color_variables('difftext_fg',     color10)
+call s:create_color_variables('difftext_bg',     color00)
+call s:create_color_variables('diffchange_fg',   color04)
+call s:create_color_variables('diffchange_bg',   color00)
+
+call s:create_color_variables('spellbad',     color04)
+call s:create_color_variables('spellcap',     color05)
+call s:create_color_variables('spellrare',    color06)
+call s:create_color_variables('spelllocal',   color01)
+" }}}
+
+if s: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
+    set background=dark
+    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
+    " TODO check this out....
+    exec 'hi FoldColumn' . s:fg_folded_fg . s:bg_transparent . s:ft_none
+else
+    exec 'hi Normal' . s:fg_foreground . s:bg_background
+    set background=dark
+    exec 'hi EndOfBuffer' . s:fg_cursor_fg  . s:ft_none
+    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
+    " TODO here too ^
+    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
+    exec 'hi CursorLineNr' . s:fg_cursorlinenr_fg . s:bg_cursorlinenr_bg . s:ft_none
+    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:transparent_background
+      exec 'hi SignColumn' . s:bg_transparent . 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
+
+" --- end of Standard Group Highlighting }}}
+
+" --- Language Highlighting {{{
+
+" 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
+exec 'hi cFunction' . s:fg_blue
+" exec 'hi cFunction' . s:fg_foreground
+
+" 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
+" exec 'hi cppSTL' . s:fg_blue
+" highlight standard library
+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
+" DON'T highlight standard library
+" exec 'hi cppSTLconstant' . s:fg_foreground
+" exec 'hi cppSTLtype' . s:fg_foreground
+" exec 'hi cppSTLfunction' . s:fg_foreground
+" exec 'hi cppSTLios' . s:fg_foreground
+
+" 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 pythonBytesEscape' . s:fg_olive . s:ft_bold
+exec 'hi pythonDottedName' . s:fg_purple
+exec 'hi pythonStrFormat' . s:fg_foreground
+
+exec 'hi pythonBuiltinFunc' . s:fg_blue
+exec 'hi pythonBuiltinObj' . s:fg_red
+" exec 'hi pythonBuiltinFunc' . s:fg_foreground
+" exec 'hi pythonBuiltinObj' . s:fg_foreground
+
+" 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
+
+" TypeScript Highlighting
+exec 'hi typescriptDecorators' . s:fg_orange
+exec 'hi typescriptLabel' . s:fg_purple . s:ft_bold
+
+" @target https://github.com/pangloss/vim-javascript
+exec 'hi jsImport' . s:fg_pink . s:ft_bold
+exec 'hi jsExport' . s:fg_pink . s:ft_bold
+exec 'hi jsModuleAs' . s:fg_pink . s:ft_bold
+exec 'hi jsFrom' . s:fg_pink . s:ft_bold
+exec 'hi jsExportDefault' . s:fg_pink . s:ft_bold
+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
+
+" -- end of Language Highlighting }}}
+
+" --- Plugin Highlighting {{{
+
+" 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: 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
+
+" Plugin: Signify
+exec 'hi SignifyLineChange' . s:fg_diffchange_fg
+exec 'hi SignifySignChange' . s:fg_diffchange_fg
+exec 'hi SignifyLineAdd' . s:fg_diffadd_fg
+exec 'hi SignifySignAdd' . s:fg_diffadd_fg
+exec 'hi SignifyLineDelete' . s:fg_diffdelete_fg
+exec 'hi SignifySignDelete' . s:fg_diffdelete_fg
+
+" Plugin: Treesitter
+hi! link TSPunctDelimiter Delimiter
+hi! link TSPunctBracket Delimiter
+hi! link TSPunctSpecial Special
+hi! link TSConstant Constant
+hi! link TSConstBuiltin Constant
+hi! link TSConstMacro Macro
+hi! link TSString String
+hi! link TSStringRegex String
+hi! link TSStringEscape SpecialChar
+hi! link TSCharacter Character
+hi! link TSNumber Number
+hi! link TSBoolean Boolean
+hi! link TSFloat Float
+hi! link TSFunction Function
+hi! link TSFuncBuiltin Function
+hi! link TSFuncMacro Macro
+hi! link TSParameter Identifier
+hi! link TSMethod Function
+hi! link TSField Typedef
+hi! link TSProperty Typedef
+hi! link TSConstructor Define
+hi! link TSConditional Conditional
+hi! link TSRepeat Repeat
+hi! link TSLabel Label
+hi! link TSOperator Operator
+hi! link TSKeyword Keyword
+hi! link TSException Exception
+hi! link TSType Type
+hi! link TSTypeBuiltin Type
+hi! link TSStructure Structure
+hi! link TSInclude Include
+
+" -- end of Plugin Highlighting }}}
+
+" 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
+
+" Neovim terminal colors https://neovim.io/doc/user/nvim_terminal_emulator.html#nvim-terminal-emulator-configuration
+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
+
+" vim: fdm=marker ff=unix
diff --git a/.vim/doc/how-to-do-things.md b/.vim/doc/how-to-do-things.md
deleted file mode 100644
index a705d62..0000000
--- a/.vim/doc/how-to-do-things.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# vim : how to do things
-
-## navigation
-
-### open path under cursor?
-
-- `gf` _goto file_
-- `<c-w>f` _in new window_
-- `<c-w>gf` \_in new tab`
diff --git a/.vim/ftdetect/h.vim b/.vim/ftdetect/h.vim
deleted file mode 100644
index fe92579..0000000
--- a/.vim/ftdetect/h.vim
+++ /dev/null
@@ -1 +0,0 @@
-au BufNewFile,BufEnter *.h setlocal filetype=c
diff --git a/.vim/ftdetect/journal.vim b/.vim/ftdetect/journal.vim
deleted file mode 100644
index a636837..0000000
--- a/.vim/ftdetect/journal.vim
+++ /dev/null
@@ -1 +0,0 @@
-au BufNewFile,BufRead *.journal set filetype=ledger
diff --git a/.vim/ftdetect/pixy.vim b/.vim/ftdetect/pixy.vim
deleted file mode 100644
index 2ffb158..0000000
--- a/.vim/ftdetect/pixy.vim
+++ /dev/null
@@ -1 +0,0 @@
-au BufNewFile,BufRead *.pixy set filetype=pug noet
diff --git a/.vim/ftdetect/scarlet.vim b/.vim/ftdetect/scarlet.vim
deleted file mode 100644
index 40ed638..0000000
--- a/.vim/ftdetect/scarlet.vim
+++ /dev/null
@@ -1 +0,0 @@
-au BufNewFile,BufRead *.scarlet set filetype=stylus
diff --git a/.vim/ftplugin/markdown.lua b/.vim/ftplugin/markdown.lua
new file mode 100644
index 0000000..e4647b3
--- /dev/null
+++ b/.vim/ftplugin/markdown.lua
@@ -0,0 +1,2 @@
+
+require('utils').opt('w', 'foldlevel', 2)
diff --git a/.vim/general.vim b/.vim/general.vim
deleted file mode 100644
index 84bafbf..0000000
--- a/.vim/general.vim
+++ /dev/null
@@ -1,71 +0,0 @@
-" .vimrc#General settings
-set exrc
-set secure
-set title
-set noshowmode
-set autowrite
-set inccommand=split
-set noshowcmd
-" set autochdir " automatically sets cwd to the dir containing the file in the current buffer
-set hidden
-set notimeout
-set list
-set listchars+=trail:¬ " ,space:•
-set iskeyword-=-
-
-set encoding=utf-8 nobomb
-" set nocompatible
-set number
-let &showbreak='↪ '
-set visualbell
-set noerrorbells
-set hlsearch
-set smartcase
-set ignorecase
-set incsearch
-" set cmdheight=2
-set pumheight=10
-set lazyredraw
-set mouse=a
-set clipboard+=unnamedplus " share OSX clipboard
-set backspace=indent,eol,start " allow backspace in INSERT mode
-set signcolumn=yes
-set cursorline
-" set cursorcolumn
-set colorcolumn=80
-set updatetime=300
-set splitbelow
-set foldlevel=1
-set nofoldenable
-
-" For conceal markers.
-if has('conceal')
-    " set conceallevel=2 concealcursor=nv
-    set conceallevel=1 concealcursor=
-endif
-
-set backupdir=$XDG_CACHE_HOME
-set directory=$XDG_CACHE_HOME
-if exists('&undodir')
-    set undodir=$XDG_CACHE_HOME
-endif
-
-" pane divider chars
-set fillchars=fold:-,vert:\│
-
-"" colorscheme options
-if has("termguicolors")
-    set termguicolors
-endif
-
-filetype plugin indent on
-if has('syntax') && !exists('g:syntax_on')
-    syntax enable
-endif
-
-" some defaults
-" set ts=8 sts=0 et sw=4 sta
-set shiftround
-
-set diffopt+=algorithm:patience
-set path+=expand('%:h:p')
diff --git a/.vim/init.lua b/.vim/init.lua
new file mode 100644
index 0000000..419bf0b
--- /dev/null
+++ b/.vim/init.lua
@@ -0,0 +1,106 @@
+local cmd = vim.cmd
+local fn = vim.fn
+local g = vim.g
+local o = vim.o
+
+g.mapleader = ' ' -- <leader> key to <space>
+g.maplocalleader = '\\'
+
+require('plugins')
+require('hardmode')
+local u = require('utils')
+
+-- OPTIONS -- {{{
+cmd('set clipboard+=unnamedplus')
+u.opt('o', 'shiftround', true)
+u.opt('o', 'termguicolors', true)
+u.opt('o', 'incsearch', true)
+u.opt('o', 'inccommand', 'split')
+u.opt('o', 'smartcase', true)
+u.opt('o', 'hidden', true)
+u.opt('w', 'list', true)
+u.opt('w', 'number', true)
+u.opt('w', 'wrap', true)
+u.opt('o', 'scrolloff', 3)
+cmd('set listchars+=trail:¬')
+u.opt('o', 'showbreak', '↪ ')
+u.opt('b', 'textwidth', 80) -- TODO see if this is annoying
+u.opt('w', 'colorcolumn', '+1') -- depends on 'textwidth'
+u.opt('w', 'foldenable', true)
+u.opt('w', 'foldlevel', 0)
+u.opt('w', 'foldmethod', 'marker')
+u.opt('o', 'fillchars', 'fold:─')
+u.opt('o', 'complete', '.,w,b,u')
+u.opt('o', 'completeopt', 'menuone,noinsert,noselect,preview')
+cmd('set shortmess+=c')
+u.opt('w', 'statusline', '%!luaeval("statusline()")')
+u.opt('o', 'cmdheight', 1)
+u.opt('o', 'showmode', true)
+u.opt('o', 'showcmd', false)
+u.opt('o', 'laststatus', 2)
+u.opt('o', 'ruler', true)
+u.opt('o', 'mouse', 'a')
+u.opt('o', 'spell', false)
+u.opt('o', 'lazyredraw', true)
+u.opt('o', 'backspace', 'indent,eol,start')
+u.opt('o', 'undolevels', 1000)
+u.opt('o', 'updatetime', 300)
+u.opt('o', 'signcolumn', 'yes')
+-- }}}
+
+-- COLORS -- {{{
+g.nihoncolors_transparent_background = true
+cmd('colorscheme nihoncolors')
+-- }}}
+
+-- KEY BINDS -- {{{
+u.map('n', 'Q', ':quitall', { silent = false })
+u.map('n', 'gb', ':bnext<CR>')
+u.map('n', 'gB', ':bprevious<CR>')
+-- terminal
+u.map('t', '<ESC>', '<C-\\><C-n>')
+u.map('t', '<Leader>qq', '<C-\\><C-n>:bdelete!<CR>')
+-- completion
+u.map('i', '<C-n>', 'pumvisible() ? "\\<C-n>" : completion#trigger_completion()', { expr = true })
+u.map('i', '<C-p>', 'pumvisible() ? "\\<C-n>" : completion#trigger_completion()', { expr = true })
+u.map('i', '<C-j>', '<cmd>lua require("completion.source").nextCompletion()<CR>')
+u.map('i', '<C-k>', '<cmd>lua require("completion.source").prevCompletion()<CR>')
+-- }}}
+
+-- AUTO GROUPS -- {{{
+u.augroup('yank_highlight', {{'TextYankPost', '*', 'silent! lua require("vim.highlight").on_yank()'}})
+u.augroup('diagnostics', {{'CursorHold', '*', 'lua vim.lsp.diagnostic.show_line_diagnostics()'}})
+-- }}}
+
+-- USER COMMANDS -- {{{
+u.def('BalenaDiagnosticsFold', 'call balena_diagnostics_fold#apply()')
+u.def('SortLine', 'call setline(".", join(sort(split(getline("."), " ")), " "))')
+-- }}}
+
+-- STATUS LINE -- {{{
+vim.api.nvim_command('hi StatusLineInsert guifg=#00ffff guibg=None')
+vim.api.nvim_command('hi StatusLineCommand guifg=#ff3300 guibg=None')
+statusline = function()
+	local sl = ''
+	-- left
+	sl = sl .. statusline_color(vim.fn.mode())
+	sl = sl .. [[ ⢷ %<%F %-m %-r ]]
+	-- right
+	sl = sl .. [[ %=  %l:%v %y ]]
+	return sl
+end
+statusline_color = function(mode)
+	if mode == 'i' then
+		return '%#StatusLineInsert#'
+	elseif mode == 'c' then
+		return '%#StatusLineCommand#'
+	elseif mode == 'v' or mode == 'V' or mode == '' then
+		return '%#Visual#'
+	elseif mode == 'R' or mode == 'Rv' then
+		return '%1*'
+		-- return '%#Include#'
+	else
+		return '%1*'
+	end
+end
+-- }}}
diff --git a/.vim/init.vim b/.vim/init.vim
deleted file mode 100644
index 8ebf080..0000000
--- a/.vim/init.vim
+++ /dev/null
@@ -1,422 +0,0 @@
-" vim: ts=2:sw=2:et:tw=99
-
-let g:mapleader = ' ' " <leader> key to <space>
-let g:maplocalleader = '\'
-
-runtime general.vim
-" runtime plug.vim
-lua require'init'
-
-" hi CursorLine cterm=NONE ctermbg=darkred ctermfg=white guibg=darkred guifg=white
-" hi CursorLine cterm=NONE ctermbg=darkred ctermfg=white guibg=darkred guifg=white
-" nnoremap <Leader>cl :set cursorline!<CR>
-" nnoremap <Leader>cc :set cursorcolumn!<CR>
-
-" looks {{{
-let g:daymode = 0
-let g:daymode_colorscheme_day = 'ayu'
-let g:daymode_colorscheme_night = 'PaperColor'
-" let g:daymode_lightline_colorscheme_day = 'ayu_light'
-" let g:daymode_lightline_colorscheme_night = 'papercolor_dim'
-
-let g:ayucolor="light"
-let g:PaperColor_Theme_Options = {
-\   'theme': {
-\     'default.dark': {
-\       'allow_bold': 1,
-\       'allow_italic': 1,
-\       'transparent_background': 1,
-\     }
-\   }
-\ }
-colorscheme PaperColor
-
-augroup Colors
-  au!
-  au ColorScheme * runtime colors/PaperColor_ext.vim
-  " NOTE: this is necessary for to fix the guibg when transparent_background
-  " is enabled
-  au ColorScheme * hi! clear SignColumn
-  " TODO: this breaks colorizer highlighting
-  " au VimEnter * if exists('g:daymode') && g:daymode
-    " \ | call daymode#switch(0)
-    " \ | else
-    " \ | call daymode#switch(1)
-    " \ | endif
-augroup END
-
-" Make comments italic, no matter what the colorscheme does
-hi Comment gui=italic cterm=italic
-" Fix ugly looking grey when transparent_background=1
-hi SignColumn guibg=none ctermbg=none
-hi MatchParen gui=underline cterm=underline
-" }}}
-
-" key bindings {{{
-" speed
-noremap j gj
-noremap k gk
-" because this is annoying
-noreabbrev W w
-cnoreabbrev E e
-cnoreabbrev Q q
-nnoremap Q :q
-" Buffer commands
-nmap <silent> gb :bnext<CR>
-nmap <silent> gB :bprevious<CR>
-
-" quickfix jumping
-" nnoremap <leader>cn :cnext<CR>
-" nnoremap <leader>cp :cprevious<CR>
-
-" loclist jumping
-" nnoremap <leader>ln :lnext<CR>
-" nnoremap <leader>lp :lprevious<CR>
-
-" escape terminal mode with <esc>
-tnoremap <esc> <C-\><C-n>
-tnoremap <leader>qq <C-\><C-n>:bdelete!<CR>
-" delete and don't remember...
-" nnoremap s "_d
-" nnoremap ss "_dd
-" vnoremap s "_d
-
-" replace word under cursor
-nmap <silent> riw :%s/\<<C-r><C-w>\>/
-
-nmap <silent> ga <cmd>EasyAlign<cr>
-vmap <silent> <Enter> <cmd>EasyAlign<cr>
-" nmap <leader>gm <cmd>GitMessenger<cr>
-nmap <silent> gm <cmd>GitMessenger<cr>
-nmap <silent> <leader>v :Vista!!<CR>
-nmap <silent> <leader>nt :call numbertoggle#switch()<CR>
-nmap <silent> <leader>tn :rightbelow Tnew<CR>
-nmap <silent> gF :lua require'misc'.open_under_cursor()<CR>
-nmap <silent> gf :lua require'misc'.open_under_cursor('open')<CR>
-noremap <silent> gx :lua require'misc'.open_under_cursor('url-launcher')<CR>
-augroup netrw_maps
-  au!
-  au BufEnter * nnoremap <silent><buffer> gx :lua require'misc'.open_under_cursor('url-launcher')<CR>
-augroup END
-" }}}
-
-" alternate        -> plugin/alternate.vim
-" daymode          -> plugin/daymode.vim
-" fasd             -> plugin/fasd.vim
-" fuzzy            -> plugin/fuzz.vim
-" hardmode         -> plugin/hard.vim
-" numbertoggle     -> plugin/numbertoggle.vim
-" writing          -> after/plugin/writing.vim
-" filetype configs -> after/ftplugin
-" neomake          -> after/plugin/neomake.vim
-" lightline        -> plugin/line.vim
-
-" let g:netrw_browsex_viewer = 'url-launcher'
-
-" plugin config {{{
-"
-let g:easy_align_ignore_groups = []
-" obsession {{{2
-let g:session_extension = ".vim-session"
-let g:session_autosave = "no"
-let g:session_autoload = "no"
-let g:session_autosave_periodic = 5
-let g:session_command_aliases = 1
-" }}}2
-let g:echodoc_enable_at_startup = 1
-" matchtagalways {{{2
-let g:mta_use_matchparen_group = 1
-let g:mta_filetypes = {
-      \ 'html'  : 1,
-      \ 'xhtml' : 1,
-      \ 'xml'   : 1,
-      \ 'jinja' : 1,
-      \ 'vue'   : 1
-      \}
-" }}}2
-" emmet
-let g:user_emmet_leader_key = g:maplocalleader " followed by ,
-" let g:user_emmet_mode = 'a'
-" indentguides {{{2
-let g:indent_guides_enable_on_vim_startup = 1
-let g:indent_guides_start_level = 2
-let g:indent_guides_color_change_percent = 2
-let g:indent_guides_guide_size = 1
-" }}}2
-" indentline {{{2
-" let g:indentLine_char = '▏'
-" let g:indentLine_enabled = 1
-" let g:indentLine_conceallevel = 1
-" :set list lcs=tab:\▏\
-" }}}2
-" signify {{{2
-" let g:signify_sign_add = '▎'
-" let g:signify_sign_delete = '▎'
-" let g:signify_sign_delete_first_line = '▀'
-let g:signify_sign_change = '~'
-" let g:signify_sign_changedelete = g:signify_sign_change
-" let g:signify_sign_show_text = 0
-
-hi SignifySignChange guibg=NONE ctermbg=NONE
-hi SignifySignAdd guibg=NONE ctermbg=NONE
-hi SignifySignDelete guibg=NONE ctermbg=NONE
-
-" NOTE: it's not a good idea to start the bind with `h`
-" since that will interfere with cursor movement
-" nmap <silent> ]h <cmd>SignifyJumpToNextHunk<cr>
-" nmap <silent> [h <cmd>SignifyJumpToPrevHunk<cr>
-nmap <silent> ]h <plug>(signify-next-hunk)
-nmap <silent> [h <plug>(signify-prev-hunk)
-" }}}2
-
-let g:vue_disable_pre_processors = 1
-let g:vim_json_syntax_conceal = 1
-
-let g:qs_highlight_on_keys = ['f', 'F', 't', 'T'] " quickscope
-let g:utl_cfg_hdl_scm_http = 'silent !xdg-open %u'
-let g:sneak#label = 1
-
-" vista {{{2
-let g:vista_icon_indent = ['> ', '* ']
-let g:vista_default_executive = 'ctags'
-let g:vista_go_executive = 'nvim_lsp'
-let g:vista_rust_executive = 'nvim_lsp'
-let g:vista_ctags_cmd = {
-\ 'vimwiki': $HOME . '/.vim/vwtags.py markdown',
-\ }
-
-let g:vista#renderer#enable_icon = 0
-let g:vista#renderer#icons = {
-\    'func': "f",
-\    'function': "f",
-\    'functions': "fs",
-\    'var': "v",
-\    'variable': "v",
-\    'variables': "vs",
-\    'const': "c",
-\    'constant': "c",
-\    'method': "m",
-\    'package': "p",
-\    'packages': "ps",
-\    'enum': "e",
-\    'enumerator': "E",
-\    'module': "m",
-\    'modules': "ms",
-\    'type': "t",
-\    'typedef': "t",
-\    'types': "ts",
-\    'field': "fd",
-\    'fields': "fds",
-\    'macro': "mc",
-\    'macros': "mcs",
-\    'map': "mp",
-\    'class': "cl",
-\    'augroup': "au",
-\    'struct': "st",
-\    'union': "u",
-\    'member': "mb",
-\    'target': "ta",
-\    'property': "pr",
-\    'interface': "if",
-\    'namespace': "ns",
-\    'subroutine': "sr",
-\    'implementation': "im",
-\    'typeParameter': "tp",
-\    'default': "_"
-\ }
-" }}}2
-
-" vim-markdown {{{2
-let g:vim_markdown_folding_disabled = 1
-let g:vim_markdown_math = 1
-let g:vim_markdown_frontmatter = 1
-let g:vim_markdown_json_frontmatter = 1
-let g:vim_markdown_toml_frontmatter = 1
-let g:vim_markdown_folding_level = 2
-let g:vim_markdown_strikethrough = 1
-let g:vim_markdown_auto_insert_bullets = 1
-let g:vim_markdown_new_list_item_indent = 0
-" }}}2
-
-" let g:git_messenger_include_diff = v:false
-let g:git_messenger_always_into_popup = v:true
-let g:git_messenger_close_on_cursor_moved = v:true
-
-" Neoformat {{{2
-let g:neoformat_basic_format_align = 0
-let g:neoformat_basic_format_retab = 0
-let g:neoformat_basic_format_trim = 0
-let g:neoformat_only_msg_on_error = 1
-" }}}2
-
-" Clap {{{2
-" " let g:clap_insert_mode_only = v:true
-" let g:clap_popup_border  = 'sharp'
-" let g:clap_layout          = {}
-" " let g:clap_layout.relative = 'editor'
-" " let g:clap_layout.row      = '5%'
-" " let g:clap_layout.col      = '0%'
-" " let g:clap_layout.width    = '100%'
-" " let g:clap_layout.height   = '33%'
-" let g:clap_multi_selection_warning_silent = 1
-" let g:clap_selected_sign = { 'text': '* ', 'texthl': "WarningMsg", "linehl": "ClapSelected" }
-" nnoremap <silent> <leader>cc :Clap<CR>
-" nnoremap <silent> <leader>cg :Clap grep2<CR>
-" nnoremap <silent> <leader>cb :Clap buffers<CR>
-" nnoremap <silent> <leader>cf :Clap files<CR>
-" nnoremap <silent> <leader>cl :Clap quickfix<CR>
-" nnoremap <silent> <leader>ll :Clap loclist<CR>
-" }}}2
-
-let g:neoterm_size = 20
-let g:neoterm_autoinsert = 1
-
-let g:UltiSnipsExpandTrigger = "<cr>"
-" let g:UltiSnipsListSnippets = "<c-tab>"
-let g:UltiSnipsJumpForwardTrigger = "<c-n>"
-let g:UltiSnipsJumpBackwardTrigger = "<c-p>"
-
-let g:vimwiki_main = {}
-let g:vimwiki_main.path = '~/wiki/'
-let g:vimwiki_main.syntax = 'markdown'
-let g:vimwiki_main.ext = '.md'
-let g:vimwiki_main.name = 'wiki'
-let g:vimwiki_main.index = '_index'
-let g:vimwiki_list = [vimwiki_main]
-let g:vimwiki_folding = 'list'
-
-let g:tex_flavor = 'latex'
-let g:vimtex_compiler_enabled = 1
-let g:vimtex_compiler_method = 'tectonic'
-let g:vimtex_compiler_tectonic = {
-\ 'executable': 'tectonic',
-\ }
-let g:vimtex_view_method = 'zathura'
-" let g:vimtex_view_zathura_check_libsynctex = 0
-" let g:vimtex_view_use_temp_files = 1
-" let g:vimtex_view_forward_search_on_start = 0
-" }}}1
-
-" lua stuff {{{1
-set complete=.,w,b,u
-set completeopt=menuone,noinsert,noselect
-" set completeopt-=preview
-set shortmess+=c
-
-let g:completion_enable_auto_popup = 1
-let g:completion_enable_auto_signature = 1
-let g:completion_enable_auto_paren = 0
-let g:completion_confirm_key = "\<cr>"
-let g:completion_enable_snippet = 'UltiSnips'
-let g:completion_auto_change_source = 1
-let g:completion_chain_complete_list = [
-  \	  {'complete_items': ['lsp']},
-  \	  {'complete_items': ['snippet']},
-  \	  {'complete_items': ['buffers']},
-  \	  {'complete_items': ['path']},
-  \   {'complete_items': ['wiki']},
-  \   {'complete_items': ['ts']},
-  \ 	{'mode': 'file'},
-  \ ]
-
-inoremap <silent><expr> <c-n>
-  \ pumvisible() ? "\<c-n>" : completion#trigger_completion()
-inoremap <silent><expr> <c-p>
-  \ pumvisible() ? "\<c-p>" : completion#trigger_completion()
-imap <c-j> <cmd> lua require'completion.source'.nextCompletion()<CR>
-imap <c-k> <cmd> lua require'completion.source'.prevCompletion()<CR>
-
-augroup Compl
-  au!
-  au BufEnter * lua require'completion'.on_attach()
-augroup END
-" }}}1
-
-" gui extra config {{{
-" probably obsolete...
-if exists('veonim')
-  " set linespace=5
-  set guifont=Iosevka\ R:h17
-  runtime init_veonim.vim
-endif
-" }}}
-
-function! s:fmt() abort
-  if exists('g:nofmt') || exists('b:nofmt')
-    return
-  endif
-  try
-    undojoin
-    Neoformat
-  catch
-    " hmm
-    echo 'not formatted'
-  endtry
-endfunction
-
-augroup DoFmt
-  au!
-  au BufWritePre * :call <SID>fmt()
-augroup END
-
-" autogroups {{{
-augroup SpecialBuffers
-  au!
-  " au  FileType vista,fzf,skim set laststatus=0 noshowmode noruler
-        " \| au BufLeave <buffer> set laststatus=2 ruler
-  au FileType fzf,skim tnoremap <buffer><esc> <c-c>
-  au FileType gitmessengerpopup nmap <buffer><esc> <cmd>GitMessengerClose<cr>
-  au FileType vista nmap <buffer><space> :wincmd p<CR>
-  au FileType help,qf,vista nmap <silent><buffer>q <c-w><c-q>
-  " au FileType vimwiki call vista#sidebar#ToggleFocus()
-augroup END
-
-" augroup AutoSaveFolds
-"   autocmd!
-"   autocmd BufWinLeave * mkview
-"   autocmd BufWinEnter * silent loadview
-" augroup END
-
-augroup Init
-  au!
-  " au VimEnter * call vista#RunForNearestMethodOrFunction()
-  " au VimEnter * Vista!!
-
-  " vim was opened as diff tool, load the 'diff' ftplugin conf
-  au VimEnter * if &diff | runtime after/ftplugin/diff.vim | endif
-
-  au BufEnter,BufLeave,BufWritePost * rshada|wshada
-  " au FileType dirvish call fugitive#detect(@%)
-  au BufReadPost *
-	\ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit'
-	\ |   exe "normal! g`\""
-	\ | endif
-augroup END
-
-augroup YankHighlight
-  au!
-  au TextYankPost * silent! lua require'vim.highlight'.on_yank()
-augroup END
-
-augroup Diagnostic
-  au!
-  " au CursorHold * lua vim.lsp.util.show_line_diagnostics()
-augroup END
-" }}}
-
-command! SortLine call setline('.', join(sort(split(getline('.'), ' ')), " "))
-command! -bang DayMode call daymode#switch(<bang>0)
-command! NumberToggle call numbertoggle#switch()
-command! Alternate call alternate#alternate()
-command! InsertTS r!now
-command! BalenaDiagnosticsFold call balena_diagnostics_fold#apply()
-
-command! -range=% -nargs=0 Tab2Space execute '<line1>,<line2>s#^\t\+#\=repeat(" ", len(submatch(0))*' . &ts . ')'
-command! -range=% -nargs=0 Space2Tab execute '<line1>,<line2>s#^\( \{'.&ts.'\}\)\+#\=repeat("\t", len(submatch(0))/' . &ts . ')'
-
-" WARNING! roadwork ahead
-" lua << EOF
-" if vim.env.SNIPPETS then
-"   vim.snippet = require 'snippet'
-" end
-" EOF
diff --git a/.vim/init_veonim.vim b/.vim/init_veonim.vim
deleted file mode 100644
index 7cfa3a6..0000000
--- a/.vim/init_veonim.vim
+++ /dev/null
@@ -1,34 +0,0 @@
-" workspace functions
-nno <silent> ,f :Veonim files<cr>
-nno <silent> ,e :Veonim explorer<cr>
-nno <silent> ,b :Veonim buffers<cr>
-nno <silent> ,d :Veonim change-dir<cr>
-
-" searching text
-nno <silent> <space>fw :Veonim grep-word<cr>
-vno <silent> <space>fw :Veonim grep-selection<cr>
-nno <silent> <space>fa :Veonim grep<cr>
-nno <silent> <space>ff :Veonim grep-resume<cr>
-nno <silent> <space>fb :Veonim buffer-search<cr>
-
-" language server functions
-nno <silent> sr :Veonim rename<cr>
-nno <silent> sd :Veonim definition<cr>
-nno <silent> st :Veonim type-definition<cr>
-nno <silent> si :Veonim implementation<cr>
-nno <silent> sf :Veonim references<cr>
-nno <silent> sh :Veonim hover<cr>
-nno <silent> sl :Veonim symbols<cr>
-nno <silent> so :Veonim workspace-symbols<cr>
-nno <silent> sq :Veonim code-action<cr>
-nno <silent> sp :Veonim show-problem<cr>
-nno <silent> sk :Veonim highlight<cr>
-nno <silent> sK :Veonim highlight-clear<cr>
-nno <silent> <c-n> :Veonim next-problem<cr>
-nno <silent> <c-p> :Veonim prev-problem<cr>
-nno <silent> ,n :Veonim next-usage<cr>
-nno <silent> ,p :Veonim prev-usage<cr>
-nno <silent> <space>pt :Veonim problems-toggle<cr>
-nno <silent> <space>pf :Veonim problems-focus<cr>
-nno <silent> <d-o> :Veonim buffer-prev<cr>
-nno <silent> <d-i> :Veonim buffer-next<cr>
diff --git a/.vim/lua/conf/diagnostic.lua b/.vim/lua/conf/diagnostic.lua
index 4fd5047..fe80fff 100644
--- a/.vim/lua/conf/diagnostic.lua
+++ b/.vim/lua/conf/diagnostic.lua
@@ -1,9 +1,12 @@
 
-vim.g.diagnostic_enable_virtual_text = 1
-vim.g.diagnostic_trimmed_virtual_text = '40'
-vim.g.diagnostic_insert_delay = 1
-vim.api.nvim_command('nnoremap <silent> c[ <cmd>PrevDiagnosticCycle<cr>')
-vim.api.nvim_command('nnoremap <silent> c] <cmd>NextDiagnosticCycle<cr>')
+local g = vim.g
+local cmd = vim.api.nvim_command
+
+g.diagnostic_enable_virtual_text = 1
+g.diagnostic_trimmed_virtual_text = '40'
+g.diagnostic_insert_delay = 1
+cmd('nnoremap <silent> c[ <cmd>PrevDiagnosticCycle<cr>')
+cmd('nnoremap <silent> c] <cmd>NextDiagnosticCycle<cr>')
 
 
 vim.fn.sign_define("LspDiagnosticsErrorSign", {text="✘", texthl="LspDiagnosticsError"})
@@ -11,7 +14,7 @@ vim.fn.sign_define("LspDiagnosticsWarningSign", {text="‼", texthl="LspDiagnost
 vim.fn.sign_define("LspDiagnosticsInformationSign", {text="i", texthl="LspDiagnosticsInformation"})
 vim.fn.sign_define("LspDiagnosticsHintSign", {text="☛",texthl="LspDiagnosticsHint"})
 
-vim.api.nvim_command('highlight link LspDiagnosticsError Error')
-vim.api.nvim_command('highlight link LspDiagnosticsWarning WarningMsg')
-vim.api.nvim_command('highlight link LspDiagnosticsInformation Todo')
-vim.api.nvim_command('highlight link LspDiagnosticsHint Question')
+cmd('highlight link LspDiagnosticsError Error')
+cmd('highlight link LspDiagnosticsWarning WarningMsg')
+cmd('highlight link LspDiagnosticsInformation Todo')
+cmd('highlight link LspDiagnosticsHint Question')
diff --git a/.vim/lua/conf/telescope.lua b/.vim/lua/conf/telescope.lua
deleted file mode 100644
index e1145c2..0000000
--- a/.vim/lua/conf/telescope.lua
+++ /dev/null
@@ -1,75 +0,0 @@
--- config for telescope.nvim
-local telescope  = require('telescope')
-local finders    = require('telescope.finders')
-local pickers    = require('telescope.pickers')
-local previewers = require('telescope.previewers')
-local make_entry = require('telescope.make_entry')
-local sorters    = require('telescope.sorters')
-
-telescope.setup{
-	defaults = {
-		borderchars = {'─', '│', '─', '│', '┌', '┐', '┘', '└'},
-		winblend = 3,
-		layout_strategy = 'flex',
-	}
-}
-
-vim.api.nvim_set_keymap('n', ';f', "<cmd>lua require'telescope.builtin'.find_files{}<cr>",
-	{noremap=true, silent=true})
-vim.api.nvim_set_keymap('n', ';g', "<cmd>lua require'telescope.builtin'.live_grep{}<cr>",
-	{noremap=true, silent=true})
-vim.api.nvim_set_keymap('n', ';r', "<cmd>lua require'telescope.builtin'.lsp_references{}<cr>",
-	{noremap=true, silent=true})
-vim.api.nvim_set_keymap('n', ';q', "<cmd>lua require'telescope.builtin'.quickfix{}<cr>",
-	{noremap=true, silent=true})
-vim.api.nvim_set_keymap('n', ';l', "<cmd>lua require'telescope.builtin'.loclist{}<cr>",
-	{noremap=true, silent=true})
-vim.api.nvim_set_keymap('n', ';b', "<cmd>lua require'telescope.builtin'.buffers{}<cr>",
-	{noremap=true, silent=true})
--- vim.api.nvim_set_keymap('n', ';h', "<cmd>lua require'conf.telescope'.home{}<cr>",
--- 	{noremap=true, silent=true})
-vim.api.nvim_set_keymap('n', ';w', "<cmd>lua require'conf.telescope'.wiki{}<cr>",
-	{noremap=true, silent=true})
-
-local M = {}
-M.fzf = function(opts)
-	opts = opts or {}
-	if opts.cwd then
-		opts.cwd = vim.fn.expand(opts.cwd)
-	end
-	local cmd = {'fd', '--type', 'f', '--no-ignore', '--absolute-path'}
-	if opts.extensions then
-		for _, ext in ipairs(opts.extensions) do
-			table.insert(cmd, '--extension')
-			table.insert(cmd, ext)
-		end
-	end
-	if opts.exclude then
-		for _, excl in ipairs(opts.exclude) do
-			table.insert(cmd, '--exclude')
-			table.insert(cmd, excl)
-		end
-	end
-	pickers.new(opts, {
-		prompt = opts.prompt or "FZF",
-		finder = finders.new_oneshot_job(cmd, opts),
-		previewer = previewers.cat.new(opts),
-		sorter = sorters.get_fuzzy_file(),
-	}):find()
-end
-
-M.wiki = function()
-	return M.fzf {
-		prompt = 'WIKI',
-		cwd = '~/wiki',
-		extensions = {'md'},
-		exclude = {'_templates/*'}
-	}
-end
--- M.home = function()
--- 	return M.fzf {
--- 		prompt = 'HOME',
--- 		cwd = '~',
--- 	}
--- end
-return M
diff --git a/.vim/lua/hardmode.lua b/.vim/lua/hardmode.lua
new file mode 100644
index 0000000..ed7d4ac
--- /dev/null
+++ b/.vim/lua/hardmode.lua
@@ -0,0 +1,38 @@
+-- hard mode means we're not using the arrow keys!
+-- map them to more useful actions instead
+-- https://coderoncode.com/posts/vim-is-the-perfect-ide
+
+local cmd = vim.cmd
+local u   = require('utils')
+
+local bail = ':silent! echohl ErrorMsg | echo "HARD MODE: hjkl operation only" | echohl None<CR>'
+
+u.map('n', 'R<up>', ':resize +2<CR>')
+u.map('n', 'R<down>', ':resize -2<CR>')
+u.map('n', 'R<left>', ':vertical resize +2<CR>')
+u.map('n', 'R<right>', ':vertical resize +2<CR>')
+
+u.map('n', 'W<up>', ':wincmd k<CR>')
+u.map('n', 'W<down>', ':wincmd j<CR>')
+u.map('n', 'W<left>', ':wincmd h<CR>')
+u.map('n', 'W<right>', ':wincmd l<CR>')
+
+u.map('n', 'Wm<up>', ':wincmd K<CR>')
+u.map('n', 'Wm<down>', ':wincmd J<CR>')
+u.map('n', 'Wm<left>', ':wincmd H<CR>')
+u.map('n', 'Wm<right>', ':wincmd L<CR>')
+
+u.map('n', '<up>', bail)
+u.map('n', '<down>', bail)
+u.map('n', '<left>', bail)
+u.map('n', '<right>', bail)
+
+u.map('v', '<up>', bail)
+u.map('v', '<down>', bail)
+u.map('v', '<left>', bail)
+u.map('v', '<right>', bail)
+
+u.map('i', '<up>', '<esc>' .. bail)
+u.map('i', '<down>', '<esc>' .. bail)
+u.map('i', '<left>', '<esc>' .. bail)
+u.map('i', '<right>', '<esc>' .. bail)
diff --git a/.vim/lua/init.lua b/.vim/lua/init.lua
deleted file mode 100644
index 0397b28..0000000
--- a/.vim/lua/init.lua
+++ /dev/null
@@ -1,4 +0,0 @@
--- init lua
-
-require 'plugins'
-require 'conf.diagnostic'
diff --git a/.vim/lua/line.lua b/.vim/lua/line.lua
deleted file mode 100644
index 278782f..0000000
--- a/.vim/lua/line.lua
+++ /dev/null
@@ -1,146 +0,0 @@
--- statusline
-
-local gl  = require('galaxyline')
-local gls = gl.section
-local gcolors = require('galaxyline.colors')
-
-local colors = {
-  blue = '#5fafd7',
-  orange = '#d7875f',
-  purple = '#af87d7',
-  yellow = '#d7af5f',
-
-  black = '#1c1c1c',
-  grey_dim = '#3a3a3a',
-  grey_dimmer = '#262626',
-  white = '#d0d0d0',
-  white_dim = '#bdc0ba',
-}
-
-local style = {
-  left = {
-    sep = ' ',
-    sep_hl = {colors.white, colors.black},
-  },
-  right = {
-    hl = {colors.white,colors.grey_dimmer},
-    sep = ' ',
-    sep_hl = {colors.grey_dim, colors.grey_dimmer},
-  }
-}
-
-local empty_buffer = function()
-  if vim.fn.empty(vim.fn.expand('%:t')) ~= 1 then
-    return true
-  end
-    return false
-end
-
-local space = function() return ' ' end
-
-gls.left[1] = {
-  ViMode = {
-    provider = function()
-      local m = vim.fn.mode()
-      if m == 'n' then
-        gcolors.set_highlight('GalaxyViMode', {colors.white, colors.grey_dim, 'bold'})
-      elseif m == 'i' then
-        gcolors.set_highlight('GalaxyViMode', {colors.black, colors.blue, 'bold'})
-      elseif m == 'v' or m == 'V' or m == 'CTRL-V' then
-        gcolors.set_highlight('GalaxyViMode', {colors.black, colors.purple, 'bold'})
-      elseif m == 's' or m == 'S' or m == 'CTRL-S' then
-        gcolors.set_highlight('GalaxyViMode', {colors.black, '#ff0000', 'bold'})
-      elseif m == 'R' or m == 'Rc' or m == 'Rv' or m == 'Rx' then
-        gcolors.set_highlight('GalaxyViMode', {colors.black, colors.orange, 'bold'})
-      elseif m == 'c' then
-        gcolors.set_highlight('GalaxyViMode', {colors.yellow, colors.grey_dim, 'bold,italic'})
-      end
-      return '  ' .. m:gsub("^%l*$", string.upper) .. ' '
-    end,
-    separator = style.left.sep,
-    separator_highlight = style.left.sep_hl,
-  },
-}
-
-gls.left[2] = {
-  FileName = {
-    provider = function()
-      local file = vim.fn.expand('%:t')
-      if vim.fn.empty(file) == 1 then return '' end
-      if vim.bo.readonly then
-        return file .. ' '
-      end
-      if vim.o.modifiable then
-        if vim.bo.modified then
-          return file .. ' +'
-        end
-      end
-      return file .. ' '
-    end,
-    condition = empty_buffer,
-    highlight = {colors.white,colors.grey_dimmer},
-    separator = style.left.sep,
-    separator_highlight = style.left.sep_hl,
-  }
-}
-
--- ########################################################## --
-
-gls.right[1] = {
-  Indent = {
-    provider = function()
-      local res = vim.o.expandtab and '→' or '␣'
-      return res
-        .. ' '
-        .. 'ts=' .. vim.o.tabstop
-        .. ' '
-        .. 'sw=' .. vim.o.shiftwidth
-    end,
-    highlight = style.right.hl,
-  },
-}
-
-gls.right[2] = {
-  BufNum = {
-    icon = '% ',
-    provider = function()
-      local nbufs = #vim.fn.getbufinfo({buflisted = 1})
-      local res = vim.fn.bufnr('%') .. '(' .. nbufs .. ')'
-      if vim.fn.tabpagenr() > 1 then
-        res = res .. ':' .. vim.fn.tabpagenr()
-      end
-      return res
-    end,
-    highlight = style.right.hl,
-    separator = style.right.sep,
-    separator_highlight = style.right.sep_hl,
-  },
-}
-
-gls.right[3] = {
-  LineColumn = {
-    icon = ' ',
-    provider = 'LineColumn',
-    highlight = style.right.hl,
-    separator = style.right.sep,
-    separator_highlight = style.right.sep_hl,
-  },
-}
-
-gls.right[4] = {
-  LinePercent = {
-    provider = 'LinePercent',
-    highlight = style.right.hl,
-    separator = style.right.sep,
-    separator_highlight = style.right.sep_hl,
-  }
-}
-
-gls.right[5] = {
-  BufferType = {
-    provider = function() return '  ' .. vim.bo.filetype .. ' ' end,
-    highlight = {colors.white,colors.grey_dim,'bold'},
-    -- separator = style.right.sep,
-    -- separator_highlight = style.right.sep_hl,
-  }
-}
diff --git a/.vim/lua/plugins.lua b/.vim/lua/plugins.lua
index 0ccfb05..4830b4b 100644
--- a/.vim/lua/plugins.lua
+++ b/.vim/lua/plugins.lua
@@ -1,24 +1,27 @@
 -- load by calling `lua require('plugins')` from your init.vim
+local cmd = vim.cmd
+local g = vim.g
+local u = require('utils')
 
 function disable_distribution_plugins()
-  vim.g.loaded_gzip              = 1
-  vim.g.loaded_tar               = 1
-  vim.g.loaded_tarPlugin         = 1
-  vim.g.loaded_zip               = 1
-  vim.g.loaded_zipPlugin         = 1
-  vim.g.loaded_getscript         = 1
-  vim.g.loaded_getscriptPlugin   = 1
-  vim.g.loaded_vimball           = 1
-  vim.g.loaded_vimballPlugin     = 1
-  vim.g.loaded_matchit           = 1
-  -- vim.g.loaded_matchparen        = 1
-  vim.g.loaded_2html_plugin      = 1
-  vim.g.loaded_logiPat           = 1
-  vim.g.loaded_rrhelper          = 1
-  vim.g.loaded_netrw             = 1
-  vim.g.loaded_netrwPlugin       = 1
-  vim.g.loaded_netrwSettings     = 1
-  vim.g.loaded_netrwFileHandlers = 1
+	g.loaded_gzip              = 1
+	g.loaded_tar               = 1
+	g.loaded_tarPlugin         = 1
+	g.loaded_zip               = 1
+	g.loaded_zipPlugin         = 1
+	g.loaded_getscript         = 1
+	g.loaded_getscriptPlugin   = 1
+	g.loaded_vimball           = 1
+	g.loaded_vimballPlugin     = 1
+	g.loaded_matchit           = 1
+	-- g.loaded_matchparen        = 1
+	g.loaded_2html_plugin      = 1
+	g.loaded_logiPat           = 1
+	g.loaded_rrhelper          = 1
+	g.loaded_netrw             = 1
+	g.loaded_netrwPlugin       = 1
+	g.loaded_netrwSettings     = 1
+	g.loaded_netrwFileHandlers = 1
 end
 
 -- enable to bootstrap packer from ~/.local/share/nvim/site/pack/packer/opt/packer.nvim
@@ -31,112 +34,124 @@ return require'packer'.startup(function()
 	-- manage packer itself
 	use {'wbthomason/packer.nvim'}
 
-	use {'mhinz/vim-signify'}      -- git status in the sign column
+	-- git status in the sign column
+	use {'mhinz/vim-signify',
+		config = "require('plugins._signify')"
+	}
+
 	use {'tpope/vim-commentary'}   -- auto-comment using `gcc`
 	use {'cohama/lexima.vim'}      -- auto-close parens, brackets, etc.
 	use {'tpope/vim-surround'}     -- edit surroundings in pairs
-	-- use {'itchyny/lightline.vim'}  -- lightweight status bar
-	use {'glepnir/galaxyline.nvim',
-		branch = 'main',
-		config=function() require 'line' end}
-	use {'neomake/neomake'}        -- async job runner
-	use {'sbdchd/neoformat'}       -- async code formatter
+	-- use {'neomake/neomake'}        -- async job runner
+	-- use {'sbdchd/neoformat'}       -- async code formatter
 	use {'justinmk/vim-dirvish'}   -- folder browser
-	use {'justinmk/vim-sneak'}     -- powerful missing vim motions
-
-	use { 'neovim/nvim-lspconfig',
-		requires = {'nvim-lua/completion-nvim'}, -- , 'nvim-lua/diagnostic-nvim'},
-		config=function() require'conf.lsp' end}
+	use {'justinmk/vim-sneak',
+		config = "vim.g['sneak#label'] = true"
+	}
 
-	use { 'steelsojka/completion-buffers' }
-		-- config = function()
-		-- 	vim.api.nvim_command("autocmd BufEnter * require'completion'.on_attach()")
-		-- end}
+	use {'neovim/nvim-lspconfig',
+		requires = {
+			{'nvim-lua/completion-nvim',
+				requires = {'steelsojka/completion-buffers'},
+				config = "require('plugins._completion')"},
+			'kosayoda/nvim-lightbulb',
+		},
+		config = "require('plugins._lsp')"
+	}
 
-	use { 'nvim-treesitter/nvim-treesitter',
+	use {'nvim-treesitter/nvim-treesitter',
 		requires = {
 			'nvim-lua/completion-nvim',
 			'nvim-treesitter/completion-treesitter',
 			'nvim-treesitter/nvim-treesitter-refactor',
 		},
-		config=function() require'conf.treesitter' end}
-	
-	use { 'nvim-lua/telescope.nvim',
-		requires = {'nvim-lua/popup.nvim', 'nvim-lua/plenary.nvim'},
-		config=function() require'conf.telescope' end}
+		config = "require('plugins._treesitter')"
+	}
+
+	use {'nvim-telescope/telescope.nvim',
+		requires = {
+			'nvim-lua/popup.nvim',
+			'nvim-lua/plenary.nvim',
+			-- telescope plugins:
+			'nvim-telescope/telescope-fzf-writer.nvim',
+		},
+		config = "require('plugins._telescope')"
+	}
+
+	-- polyfill for some missing stuff
+	use {'tjdevries/astronauta.nvim'}
 
 	-- snippets
 	use {'SirVer/ultisnips',
-		requires = {'honza/vim-snippets'}}
-
-	-- interactive finder / dispatcher
-	-- use {'liuchengxu/vim-clap',
-	-- 	run = ':Clap install-binary!'}
+		requires = {'honza/vim-snippets'},
+		config = "require('plugins._ultisnips')"
+	}
 
-	use {'junegunn/vim-easy-align',
-		cmd = {'EasyAlign'}}
+	use {'junegunn/vim-easy-align'}
 
 	-- use {'tpope/vim-sleuth'}                -- detect indentation
-	use {'nathanaelkane/vim-indent-guides'} -- show indentation levels
+	use {'nathanaelkane/vim-indent-guides',
+		config = "require('plugins._indent-guides')"
+	}
+
 	use {'tpope/vim-repeat'}                -- extend '.' to plugins
-	use {'liuchengxu/vista.vim'}            -- sidebar populated by lsp, ctags, etc.
 	use {'sgur/vim-editorconfig'}           -- implements editorconfig in vimscript
-	-- use 'rhysd/conflict-marker.vim'
 	use {'michaeljsmith/vim-indent-object'} -- adds indentation text-objects
-	use {'kshenoy/vim-signature'}           -- toggle, display and navigate marks
-	-- highlight color codes
+	use {'kshenoy/vim-signature', disable = true}           -- toggle, display and navigate marks
 	use {'norcalli/nvim-colorizer.lua',
-		config=function()
-			require'colorizer'.setup(nil, {
-					name = true;
-					RRGGBB = true;
-					RRGGBBAA = false;
-					rgb_fn = true;
-					hsl_fn = true;
-					mode = 'background';
-				})
-		end}
-	use {'rhysd/git-messenger.vim'}         -- git-blame in a popup
-	use {'kassio/neoterm'}
+		config = "require('plugins._colorizer')"
+	}
+
+	use {'rhysd/git-messenger.vim',
+		config = "require('plugins._git-messenger')"
+	}
+
+	use {'rhysd/conflict-marker.vim', disable = true}
+	-- use {'liuchengxu/vista.vim'}            -- sidebar populated by lsp, ctags, etc.
+	use {'kassio/neoterm', disable = true}
 
 	-- languages
 	-- NOTE: these should only be loaded when they are required...
-	-- use {'rhysd/vim-grammarous',       ft = {'markdown', 'latex', 'tex'}}
-	use {'lervag/vimtex',                 ft = {'latex', 'tex'}}
-	use {'plasticboy/vim-markdown',       ft = {'markdown'}}
-	use {'masukomi/vim-markdown-folding', ft = {'markdown'}}
-	-- easy html editing
-	use {'mattn/emmet-vim',               ft = {'html'}}
-	-- use {'valloric/matchtagalways',    ft = {'html', 'vue', 'xml'}} -- visually match HTML tags enclosing cursor location
-	-- use {'ledger/vim-ledger',             ft = {'ledger'},
-	-- 	requires = {
-	-- 		'tpope/vim-speeddating',   -- easy time/date incrementing
-	-- 		'vim-scripts/utl.vim'}}    -- follow links/urls
-	
+	-- use {'rhysd/vim-grammarous',
+	-- 	ft = {'markdown', 'latex', 'tex'}
+	-- }
+	use {'lervag/vimtex',
+		ft = {'latex', 'tex'},
+		config = "require('plugins._vimtex')"
+	}
+	use {'plasticboy/vim-markdown',
+		ft = {'markdown'},
+		config = "require('plugins._markdown')"
+	}
+	use {'masukomi/vim-markdown-folding',
+		ft = {'markdown'}
+	}
+	use {'jjo/vim-cue',
+		ft = {'cue'}
+	}
 	use {'gentoo/gentoo-syntax'}
-	use {'jjo/vim-cue'}
 
 	-- multi-language support with lazy loading
 	-- NOTE: put language specific plugs before this to avoid conflicsts
 	use {'sheerun/vim-polyglot'}
 		
 	-- minimal ux
-	use {'junegunn/goyo.vim',         cmd = 'Goyo'}      -- hide ui clutter
-	use {'junegunn/limelight.vim',    cmd = 'Limelight'} -- dims colors
-	-- use 'equalsraf/neovim-gui-shim'
-
-	-- colorschemes
-	use {'NLKNguyen/papercolor-theme'}
-	-- use {'cideM/yui'}
-	use {'ayu-theme/ayu-vim'}
-	-- use {'rktjmp/lush.nvim',
-	-- 	config=function() require'conf.colors' end}
-
-	use {'dstein64/vim-startuptime'}
+	use {'junegunn/goyo.vim',
+		cmd = 'Goyo',
+		config = "require('plugins._goyo')"
+	}
+	use {'junegunn/limelight.vim',
+		cmd = 'Limelight',
+		config = "require('plugins._limelight')"
+	}
+
+	use {'rktjmp/lush.nvim',
+		disable = true,
+		config="require('plugins._lush')"}
+
+	-- vim config debugging
+	use {'dstein64/vim-startuptime', disable = true}
 
 	-- local
-	-- use {'~/devel/projects/nihon-theme/vim'}
-	-- use {'~/devel/projects/vim-orgdown'}
-	use {'~/.vim/devel/obsidian.nvim'}
-	use {'~/.vim/devel/vim-github-link'}
+	use {'~/devel/upstream/github.com/knsh14/vim-github-link'}
 end)
diff --git a/.vim/lua/plugins/_colorizer.lua b/.vim/lua/plugins/_colorizer.lua
new file mode 100644
index 0000000..7b6f678
--- /dev/null
+++ b/.vim/lua/plugins/_colorizer.lua
@@ -0,0 +1,8 @@
+require('colorizer').setup(nil, {
+  name = true;
+  RRGGBB = true;
+  RRGGBBAA = false;
+  rgb_fn = true;
+  hsl_fn = true;
+  mode = 'background';
+})
diff --git a/.vim/lua/plugins/_completion.lua b/.vim/lua/plugins/_completion.lua
new file mode 100644
index 0000000..8a4a92e
--- /dev/null
+++ b/.vim/lua/plugins/_completion.lua
@@ -0,0 +1,17 @@
+local g = vim.g
+local u = require('utils')
+
+g.completion_enable_auto_popup = true
+g.completion_enable_auto_signature = true
+g.completion_enable_auto_paren = false
+g.completion_confirm_key = '<tab>'
+g.completion_enable_snippet = 'UltiSnips'
+g.completion_auto_change_source = true
+g.completion_chain_complete_list = {
+	{complete_items = {'lsp', 'snippet', 'buffers', 'ts', 'path'}},
+	{mode = 'file'},
+}
+
+u.augroup('completion', {
+	{'BufEnter', '*', 'lua require("completion").on_attach()'},
+})
diff --git a/.vim/lua/plugins/_git-messenger.lua b/.vim/lua/plugins/_git-messenger.lua
new file mode 100644
index 0000000..ea1c271
--- /dev/null
+++ b/.vim/lua/plugins/_git-messenger.lua
@@ -0,0 +1,3 @@
+-- vim.g.git_messenger_include_diff = false
+vim.g.git_messenger_always_into_popup = true
+vim.g.git_messenger_close_on_cursor_moved = true
diff --git a/.vim/lua/plugins/_goyo.lua b/.vim/lua/plugins/_goyo.lua
new file mode 100644
index 0000000..e18d2ba
--- /dev/null
+++ b/.vim/lua/plugins/_goyo.lua
@@ -0,0 +1,9 @@
+vim.g.goyo_width = 120
+vim.g.goyo_height = 90
+vim.g.goyo_linenr = false
+require('utils').augroup('goyo_hooks', {
+  {'User', 'GoyoEnter', 'set laststatus=0 scrolloff=999'},
+  {'User', 'GoyoEnter', 'Limelight'},
+  {'User', 'GoyoLeave', 'set laststatus=2 scrolloff=5'},
+  {'User', 'GoyoLeave', 'Limelight!'},
+})
diff --git a/.vim/lua/plugins/_indent-guides.lua b/.vim/lua/plugins/_indent-guides.lua
new file mode 100644
index 0000000..eb3c4aa
--- /dev/null
+++ b/.vim/lua/plugins/_indent-guides.lua
@@ -0,0 +1,4 @@
+vim.g.indent_guides_enable_on_vim_startup = false
+vim.g.indent_guides_start_level = 2
+vim.g.indent_guides_color_change_percent = 2
+vim.g.indent_guides_guide_size = 1
diff --git a/.vim/lua/plugins/_limelight.lua b/.vim/lua/plugins/_limelight.lua
new file mode 100644
index 0000000..b77fdfc
--- /dev/null
+++ b/.vim/lua/plugins/_limelight.lua
@@ -0,0 +1,7 @@
+vim.g.limelight_conceal_ctermfg = 'gray'
+vim.g.limelight_conceal_ctermbg = 'none'
+vim.g.limelight_conceal_guifg = '#828282'
+vim.g.limelight_conceal_guibg = 'none'
+vim.g.limelight_default_coefficient = 0.5
+vim.g.limelight_paragraph_span = 1
+vim.g.limelight_priority = -1
diff --git a/.vim/lua/conf/lsp.lua b/.vim/lua/plugins/_lsp.lua
index 4249de5..9d98aca 100644
--- a/.vim/lua/conf/lsp.lua
+++ b/.vim/lua/plugins/_lsp.lua
@@ -1,21 +1,33 @@
 -- lsp config
 
-local lsp     = require 'lspconfig'
-local util    = require 'lspconfig.util'
+local lsp     = require('lspconfig')
+local util    = require('lspconfig.util')
+local u       = require('utils')
 
-local function my_attach(client)
+-- https://github.com/kosayoda/nvim-lightbulb
+require('nvim-lightbulb').update_lightbulb {
+	sign = {
+		enabled = true,
+		priority = 10,
+	},
+	float = {
+		enabled = true,
+		text = '󱉵',
+		win_opts = {},
+	},
+}
+
+local my_attach = function(client)
 	-- attach completion
 	require 'completion'.on_attach(client)
 
-	-- do lsp mappings
-	vim.fn.nvim_buf_set_keymap(0, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<cr>',
-		{noremap=true, silent=true})
-	vim.fn.nvim_buf_set_keymap(0, 'n', '<c-]>', '<cmd>lua vim.lsp.buf.definition()<cr>',
-		{noremap=true, silent=true})
-	vim.fn.nvim_buf_set_keymap(0, 'n', 'grr', '<cmd>lua vim.lsp.buf.rename()<cr>',
-		{noremap=true, silent=true})
-	vim.fn.nvim_buf_set_keymap(0, 'i', '<c-h>', '<cmd>lua vim.lsp.buf.signature_help()<cr>',
-		{noremap=true, silent=true})
+	-- lsp mappings
+	u.map('n', 'K',     '<cmd>lua vim.lsp.buf.hover()<cr>')
+	u.map(0, 'n', '<c-]>', '<cmd>lua vim.lsp.buf.definition()<cr>')
+	u.map(0, 'n', 'grr',   '<cmd>lua vim.lsp.buf.rename()<cr>')
+	u.map(0, 'i', '<c-h>', '<cmd>lua vim.lsp.buf.signature_help()<cr>')
+	u.map(0, 'n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<cr>')
+	u.map(0, 'n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<cr>')
 
 	-- nnoremap <silent> gD <cmd> lua vim.lsp.buf.declaration()<CR>
 	-- nnoremap <silent> gd <cmd> lua vim.lsp.buf.definition()<CR>
@@ -40,12 +52,27 @@ lsp.gopls.setup{
 }
 
 lsp.sumneko_lua.setup{
-	cmd = { 'lua-language-server' };
 	on_attach = my_attach;
+	cmd = { 'lua-language-server' };
+	settings = {
+		Lua = {
+			runtime = {
+				version = 'LuaJIT',
+			},
+			diagnostics = {
+				globals = {'vim'},
+			},
+			workspace = {
+				library = {
+					[vim.fn.expand('$VIMRUNTIME/lua')] = true,
+					[vim.fn.expand('$VIMRUNTIME/lua/vim/lsp')] = true,
+				}
+			}
+		}
+	},
 }
 
 lsp.rust_analyzer.setup{
-	cmd = { 'env', 'CARGO_TARGET_DIR=/tmp', 'rust-analyzer' },
 	on_attach = my_attach,
-
+	cmd = { 'env', 'CARGO_TARGET_DIR=/tmp', 'rust-analyzer' },
 }
diff --git a/.vim/lua/plugins/_markdown.lua b/.vim/lua/plugins/_markdown.lua
new file mode 100644
index 0000000..c773d50
--- /dev/null
+++ b/.vim/lua/plugins/_markdown.lua
@@ -0,0 +1,9 @@
+g.vim_markdown_folding_disabled = true
+g.vim_markdown_math = true
+g.vim_markdown_frontmatter = true
+g.vim_markdown_json_frontmatter = true
+g.vim_markdown_toml_frontmatter = true
+g.vim_markdown_folding_level = 2
+g.vim_markdown_strikethrough = true
+g.vim_markdown_auto_insert_bullets = true
+g.vim_markdown_new_list_item_indent = false
diff --git a/.vim/lua/plugins/_signify.lua b/.vim/lua/plugins/_signify.lua
new file mode 100644
index 0000000..a91ecb6
--- /dev/null
+++ b/.vim/lua/plugins/_signify.lua
@@ -0,0 +1,6 @@
+vim.g.signify_sign_change = '~'
+require('utils').map('n', ']h', '<plug>(signify-next-hunk)', {silent=false})
+require('utils').map('n', '[h', '<plug>(signify-prev-hunk)')
+vim.cmd('hi SignifySignChange guibg=NONE ctermbg=NONE')
+vim.cmd('hi SignifySignAdd guibg=NONE ctermbg=NONE')
+vim.cmd('hi SignifySignDelete guibg=NONE ctermbg=NONE')
diff --git a/.vim/lua/plugins/_telescope.lua b/.vim/lua/plugins/_telescope.lua
new file mode 100644
index 0000000..d4f9b89
--- /dev/null
+++ b/.vim/lua/plugins/_telescope.lua
@@ -0,0 +1,99 @@
+-- telescope.nvim et al config
+
+local u = require('utils')
+
+local M = {}
+
+-- TELESCOPE config -- {{{
+require('telescope').setup{
+	defaults = {
+		-- vimgrep_arguments = {
+      -- 'rg',
+      -- '--color=never',
+      -- '--no-heading',
+      -- '--with-filename',
+      -- '--line-number',
+      -- '--column',
+      -- '--smart-case'
+    -- },
+
+		prompt_prefix = ' >',
+		borderchars = {'─', '│', '─', '│', '┌', '┐', '┘', '└'},
+		winblend = 0,
+		preview_cutoff = 120,
+
+		layout_strategy = 'flex',
+		
+		file_previewer   = require('telescope.previewers').vim_buffer_cat_new,
+		grep_previewer   = require('telescope.previewers').vim_buffer_vimgrep_new,
+		qflist_previewer = require('telescope.previewers').vim_buffer_qflist_new,
+
+		extensions = {
+			fzf_writer = {
+				use_highlighter = true,
+				minimum_grep_characters = 4,
+				shorten_path = true,
+			}
+		}
+	}
+}
+-- }}}
+
+-- LOCAL finders -- {{{
+M.wrap = function(opts)
+	opts = opts or {}
+	my_opts = require('telescope.themes').get_dropdown({ width = 110 })
+	return vim.tbl_deep_extend("force", my_opts, opts)
+end
+
+M.live_grep = function()
+	require('telescope').extensions.fzf_writer.staged_grep(M.wrap())
+end
+
+M.repo_search = function()
+	require('telescope').extensions.fzf_writer.files(M.wrap({
+		previewer = false,
+		cwd = require('lspconfig.util').root_pattern('.git')(vim.fn.expand('%:p')),
+	}))
+end
+
+M.wiki = function()
+	require('telescope').extensions.fzf_writer.files(M.wrap({
+		previewer = false,
+		cwd = '~/wiki/',
+	}))
+end
+
+M.devel = function()
+	require('telescope').extensions.fzf_writer.files(M.wrap({
+		previewer = false,
+		cwd = '~/devel/',
+	}))
+end
+-- }}}
+
+-- MAPPINGS -- {{{
+
+u.map('n', ';g', "<cmd>lua require('plugins._telescope').live_grep()<cr>")
+u.map('n', ';r', "<cmd>lua require('plugins._telescope').repo_search()<cr>")
+-- u.map('n', ';w', "<cmd>lua require('plugins._telescope').wiki()<cr>")
+u.map('n', ';d', "<cmd>lua require('plugins._telescope').devel()<cr>")
+
+local mapbuiltin = function(key, fn, previewer)
+	opts = (not previewer and '{ previewer = false }') or '{}'
+	u.map('n', key, "<cmd>lua require('telescope.builtin')."..fn.."(require('plugins._telescope').wrap("..opts.."))<cr>")
+end
+
+mapbuiltin(';f', 'fd', true)
+mapbuiltin(';q', 'quickfix')
+mapbuiltin(';l', 'loclist')
+mapbuiltin(';b', 'buffers')
+mapbuiltin(';t', 'tags')
+mapbuiltin(';lr', 'lsp_references')
+mapbuiltin(';la', 'lsp_code_actions')
+mapbuiltin(';lw', 'lsp_workspace_symbols')
+mapbuiltin(';c', 'command_history')
+
+-- }}}
+
+return M
diff --git a/.vim/lua/conf/treesitter.lua b/.vim/lua/plugins/_treesitter.lua
index fed55e1..ef24286 100644
--- a/.vim/lua/conf/treesitter.lua
+++ b/.vim/lua/plugins/_treesitter.lua
@@ -1,5 +1,5 @@
 
-require 'nvim-treesitter.configs'.setup {
+require('nvim-treesitter.configs').setup {
 	ensure_installed = { "c", "c_sharp", "javascript", "lua", "bash" },
 	highlight = {
 		enable = false,
diff --git a/.vim/lua/plugins/_ultisnips.lua b/.vim/lua/plugins/_ultisnips.lua
new file mode 100644
index 0000000..f2a6f6e
--- /dev/null
+++ b/.vim/lua/plugins/_ultisnips.lua
@@ -0,0 +1,4 @@
+-- vim.g.UltiSnipsListSnippets = "<c-tab>"
+vim.g.UltiSnipsExpandTrigger = "<Tab>"
+vim.g.UltiSnipsJumpForwardTrigger = "<c-n>"
+vim.g.UltiSnipsJumpBackwardTrigger = "<c-p>"
diff --git a/.vim/lua/plugins/_vimtex.lua b/.vim/lua/plugins/_vimtex.lua
new file mode 100644
index 0000000..2a3d550
--- /dev/null
+++ b/.vim/lua/plugins/_vimtex.lua
@@ -0,0 +1,8 @@
+vim.g.tex_flavor = 'latex'
+vim.g.vimtex_compiler_enabled = 1
+vim.g.vimtex_compiler_method = 'tectonic'
+vim.g.vimtex_compiler_tectonic = "{'executable': 'tectonic'}"
+vim.g.vimtex_view_method = 'zathura'
+-- vim.g.vimtex_view_zathura_check_libsynctex = false
+-- vim.g.vimtex_view_use_temp_files = true
+-- vim.g.vimtex_view_forward_search_on_start = false
diff --git a/.vim/lua/split_term/init.lua b/.vim/lua/split_term/init.lua
deleted file mode 100644
index 7dcb044..0000000
--- a/.vim/lua/split_term/init.lua
+++ /dev/null
@@ -1,46 +0,0 @@
-local spt = {}
-
-function spt:create()
-    self = {
-        height = 80,
-        buf_nr = nil,
-        win_id = nil,
-        visible = false,
-    }
-end
-
-function spt:show()
-    vim.eval('botright new')
-    if self.buf_nr then
-        vim.eval('buffer ' .. self.buf_nr)
-    else
-        vim.termopen(self.exec, { detach=0 })
-        self.buf_nr = vim.bufnr('%')
-    end
-end
-
-function spt:open()
-end
-
-function spt:hide()
-end
-
-function spt:close()
-    local force = true
-    vim.api.nvim_win_close(self.win_id, force)
-    self.buf_nr = nil
-    self.win_id = nil
-end
-
-function spt_toggle()
-    if spt.win_id then
-        if spt.visible then
-            spt:hide()
-        else
-            spt:show()
-        end
-    else
-        spt:create()
-        spt:show()
-    end
-end
diff --git a/.vim/lua/utils.lua b/.vim/lua/utils.lua
new file mode 100644
index 0000000..ab7793f
--- /dev/null
+++ b/.vim/lua/utils.lua
@@ -0,0 +1,35 @@
+-- utils.lua
+
+local M = {}
+
+-- crutch until https://github.com/neovim/neovim/pull/13479
+M.opt = function(scope, key, val)
+	local scopes = {o = vim.o, b = vim.bo, w = vim.wo}
+	if not ( scope and key and val ) then return end
+	scopes[scope][key] = val
+	if scope ~= 'o' then scopes['o'][key] = val end
+end
+
+M.map = function(mode, lhs, rhs, opts)
+	if not ( mode and lhs and rhs ) then return end
+	local o = {noremap = true, silent = true}
+	if opts then o = vim.tbl_extend('force', o, opts) end
+	vim.api.nvim_set_keymap(mode, lhs, rhs, o)
+end
+
+M.augroup = function(name, autocmds)
+	if not ( name and autocmds ) then return end
+	vim.cmd('augroup ' .. name)
+	vim.cmd('autocmd!')
+	for _, au in ipairs(autocmds) do
+		vim.cmd('autocmd ' .. table.concat(au, ' '))
+	end
+	vim.cmd('augroup END')
+end
+
+M.def = function(name, cmd, ...)
+	local opts = table.concat((... or {}), ' ')
+	vim.cmd('command! ' .. opts .. ' ' .. name .. ' ' .. cmd)
+end
+
+return M
diff --git a/.vim/plugin/fuzz.vim b/.vim/plugin/fuzz.vim
deleted file mode 100644
index 0e1cb55..0000000
--- a/.vim/plugin/fuzz.vim
+++ /dev/null
@@ -1,16 +0,0 @@
-" skip this, we have vim-clap now!!!
-finish
-
-if exists('g:loaded_fuzz')
-  finish
-endif
-let g:loaded_fuzz = 1
-let g:fuzz_prompt = '❯'
-
-nmap <silent> ff :call fuzz#files()<CR>
-nmap <silent> fb :call fuzz#buffers()<CR>
-nmap <silent> fc :call fuzz#commands()<CR>
-nmap <silent> fr :Rg<space>
-
-command! -nargs=* -complete=custom,fuzz#cmdoptions Fuzz :call fuzz#exec(<f-args>)
-command! -nargs=* Rg :call fuzz#rg(<f-args>)
diff --git a/.vim/plugin/hard.vim b/.vim/plugin/hard.vim
deleted file mode 100644
index 6f82e37..0000000
--- a/.vim/plugin/hard.vim
+++ /dev/null
@@ -1,65 +0,0 @@
-" hardmode == not using arrow keys
-
-function! s:bail()
-    let l:msg = 'E0X: Use hjkl'
-    echohl ErrorMsg | echo l:msg | echohl None
-endfunction
-
-function! s:enable_hardmode(bang)
-  if !a:bang
-    try
-      " map arrow keys to more useful actions
-      " https://coderoncode.com/posts/vim-is-the-perfect-ide
-      nmap R<up> :resize +2<CR>
-      nmap R<down> :resize -2<CR>
-      nmap R<left> :vertical resize +2<CR>
-      nmap R<right> :vertical resize +2<CR>
-
-      nmap W<up> :wincmd k<CR>
-      nmap W<down> :wincmd j<CR>
-      nmap W<left> :wincmd h<CR>
-      nmap W<right> :wincmd l<CR>
-
-      nmap Wm<up> :wincmd K<CR>
-      nmap Wm<down> :wincmd J<CR>
-      nmap Wm<left> :wincmd H<CR>
-      nmap Wm<right> :wincmd L<CR>
-
-      " or bail on them altogether
-      nmap <up> :call <SID>bail()<CR>
-      nmap <down> :call <SID>bail()<CR>
-      nmap <left> :call <SID>bail()<CR>
-      nmap <right> :call <SID>bail()<CR>
-
-      vmap <up> :call <SID>bail()<CR>
-      vmap <down> :call <SID>bail()<CR>
-      vmap <left> :call <SID>bail()<CR>
-      vmap <right> :call <SID>bail()<CR>
-
-      imap <up> <esc>:call <SID>bail()<CR>
-      imap <down> <esc>:call <SID>bail()<CR>
-      imap <left> <esc>:call <SID>bail()<CR>
-      imap <right> <esc>:call <SID>bail()<CR>
-    catch
-    endtry
-  else
-    try
-      nunmap <up>
-      nunmap <down>
-      nunmap <left>
-      nunmap <right>
-      vunmap <up>
-      vunmap <down>
-      vunmap <left>
-      vunmap <right>
-      iunmap <up>
-      iunmap <down>
-      iunmap <left>
-      iunmap <right>
-    catch
-    endtry
-  endif
-endfunction
-
-call s:enable_hardmode(0)
-command! -bang Hardmode call s:enable_hardmode(<bang>0)
diff --git a/.vim/plugin/line.vim b/.vim/plugin/line.vim
deleted file mode 100644
index eed5224..0000000
--- a/.vim/plugin/line.vim
+++ /dev/null
@@ -1,174 +0,0 @@
-finish
-
-let g:lightline = {}
-
-let g:lightline.enable = { 'statusline': 1, 'tabline': 0 }
-
-let g:lightline.mode_map = {
-\   'n' : 'N',
-\   'i' : 'I',
-\   'R' : 'R',
-\   'v' : 'V',
-\   'V' : 'V-LINE',
-\   "\<C-v>": 'V-BLOCK',
-\   'c' : '>',
-\   's' : 'SELECT',
-\   'S' : 'S-LINE',
-\   "\<C-s>": 'S-BLOCK',
-\   't': 'T',
-\ }
-
-let g:lightline.active = {
-\   'left': [
-\       ['mode', 'paste'],
-\       ['filename', 'vista'],
-\       ['neomake', 'ctags', 'obsession'],
-\   ],
-\   'right': [
-\       ['filetype', 'fileencoding', 'fileformat'],
-\       ['indent', 'bufnum', 'lineinfo', 'percent'],
-\   ],
-\ }
-
-set showtabline=0
-let g:bufferline_echo = 0
-let g:bufferline_show_bufnr = 0
-" let g:bufferline_separator = ' '
-let g:bufferline_active_buffer_left = ''
-let g:bufferline_active_buffer_right = ''
-" let g:bufferline_unamed_buffer = '[no name]'
-let g:bufferline_fname_mod = ':t:s?^$?[no name]?'
-let g:lightline.tabline = {
-\   'right': [
-\       ['tabs'],
-\       ['porcelain'],
-\   ],
-\ }
-let g:lightline.tab = {
-\   'active': ['tabnum'],
-\   'inactive': ['tabnum'],
-\ }
-
-let g:lightline.component = {
-\   'lineinfo': ' %l:%v',
-\   'filetype': "%{winwidth(0) > 70 ? (strlen(&filetype) ? &filetype : 'no ft') : ''}",
-\   'dir': "%{substitute(expand('%:p:h'), $HOME, '~', '')}",
-\ }
-
-let g:lightline.component_function = {
-\   'filename': 'LightLineFilename',
-\   'bufnum': 'LightLineBufnum',
-\   'fileformat': 'LightLineFileformat',
-\   'fileencoding': 'LightLineFileencoding',
-\   'mode': 'LightLineMode',
-\   'vista': 'LightLineVista',
-\   'o': 'LightLineO',
-\   'porcelain': 'LightLinePorcelain',
-\   'indent': 'LightLineIndent',
-\ }
-
-" \ 'separator': { 'left': "\ue0b8", 'right': "\ue0be" },
-" \ 'subseparator': { 'left': "\ue0b9", 'right': "\ue0b9" },
-" \ 'tabline_separator': { 'left': "\ue0bc", 'right': "\ue0ba" },
-" \ 'tabline_subseparator': { 'left': "\ue0bb", 'right': "\ue0bb" },
-" \
-
-let g:lightline.component_expand = {}
-let g:lightline.component_type = {}
-
-
-" Modified {{{
-hi ModifiedColor ctermfg=196 guifg=#ff0000 gui=bold
-function! LightLineModified()
-  return &modified ? '+' : &modifiable ? '' : '-'
-endfunction
-" }}}
-
-" Readonly {{{
-function! LightLineReadonly()
-  return &filetype !~? 'help\|vimfiler\|gundo' && &readonly ? '' : ''
-endfunction
-" }}}
-
-" Filename {{{
-function! LightLineFilename()
-  return ('' !=? LightLineReadonly() ? LightLineReadonly() . ' ' : '') .
-       \ (&filetype ==# 'vimfiler' ? vimfiler#get_status_string() :
-       \  &filetype ==# 'unite' ? unite#get_status_string() :
-       \  &filetype ==# 'vimshell' ? vimshell#get_status_string() :
-       \ '' !=? expand('%:t') ? expand('%:t') : '[No Name]') .
-       \ ('' !=? LightLineModified() ? ' ' . LightLineModified() : '')
-endfunction
-" }}}
-
-" Bufnum {{{
-function! LightLineBufnum()
-  let l:nbufs = len(getbufinfo({'buflisted':1}))
-  return '% '. bufnr('%') . '('.l:nbufs.')' . (tabpagenr() != 1 ? ':'. tabpagenr() : '')
-endfunction
-" }}}
-
-" Fileformat {{{
-function! LightLineFileformat()
-  if (&fileformat == 'unix')
-    return ''
-  endif
-  return winwidth(0) > 70 ? &fileformat : ''
-endfunction
-" }}}
-
-" Fileencoding {{{
-function! LightLineFileencoding()
-  if (&fileencoding == 'utf-8')
-    return ''
-  endif
-  return winwidth(0) > 70 ? (strlen(&fileencoding) ? &fileencoding : &encoding) : ''
-endfunction
-" }}}
-
-" Mode {{{
-function! LightLineMode()
-  return winwidth(0) > 60 ? (
-          \ expand('%:t') ==# '__Tagbar__' ? 'Tagbar':
-          \ &filetype ==# 'vimfiler' ? 'VimFiler' :
-          \ &filetype ==# 'vimshell' ? 'VimShell' :
-          \ &filetype ==# 'dirvish' ? 'DIRVISH' :
-          \ lightline#mode() )
-          \ : ''
-endfunction
-" }}}
-
-" Indent {{{
-function! LightLineIndent()
-  return '' .
-       \ (&expandtab == 1 ? '␣' : '→') . ' ' .
-       \ 'ts=' . &tabstop .
-       \ ' ' .
-       \ 'sw=' . &shiftwidth
-endfunction
-" }}}
-
-" Vista {{{
-function! LightLineVista()
-  let l:sym = get(b:, 'vista_nearest_method_or_function', '')
-  return empty(l:sym) ? '' : g:vista#renderer#icons.function . ' ' . l:sym
-endfunction
-" }}}
-
-" Porcelain {{{
-function! LightLinePorcelain()
-  if &buftype !=# 'terminal'
-    let gitinfo = system('porcelain -no-color -path=' . expand('%:h'))
-    return (v:shell_error ? '' : gitinfo)
-  endif
-endfunction
-" }}}
-
-function! LightLineO()
-  let l:circ_empty="\u25CB"
-  let l:circ_quart="\u25D4"
-  let l:circ_half="\u25D1"
-  let l:circ_threequart="\u25D5"
-  let l:circ_full="\u25CF"
-  return ('' != LightLineModified() ? l:circ_full : l:circ_empty)
-endfunction
diff --git a/.vim/plugin/packer_compiled.vim b/.vim/plugin/packer_compiled.vim
index a40dddd..a663292 100644
--- a/.vim/plugin/packer_compiled.vim
+++ b/.vim/plugin/packer_compiled.vim
@@ -1,211 +1,252 @@
 " Automatically generated packer.nvim plugin loader code
 
-if !has('nvim')
+if !has('nvim-0.5')
+  echohl WarningMsg
+  echom "Invalid Neovim version for packer.nvim!"
+  echohl None
   finish
 endif
 
+packadd packer.nvim
+
+try
+
 lua << END
-local plugins = {
-  ["emmet-vim"] = {
-    loaded = false,
-    only_sequence = false,
-    only_setup = false,
-    path = "/home/robert/.local/share/nvim/site/pack/packer/opt/emmet-vim"
+local package_path_str = "/tmp/robert/.cache/nvim/packer_hererocks/2.0.5/share/lua/5.1/?.lua;/tmp/robert/.cache/nvim/packer_hererocks/2.0.5/share/lua/5.1/?/init.lua;/tmp/robert/.cache/nvim/packer_hererocks/2.0.5/lib/luarocks/rocks-5.1/?.lua;/tmp/robert/.cache/nvim/packer_hererocks/2.0.5/lib/luarocks/rocks-5.1/?/init.lua"
+local install_cpath_pattern = "/tmp/robert/.cache/nvim/packer_hererocks/2.0.5/lib/lua/5.1/?.so"
+if not string.find(package.path, package_path_str, 1, true) then
+  package.path = package.path .. ';' .. package_path_str
+end
+
+if not string.find(package.cpath, install_cpath_pattern, 1, true) then
+  package.cpath = package.cpath .. ';' .. install_cpath_pattern
+end
+
+local function try_loadstring(s, component, name)
+  local success, result = pcall(loadstring(s))
+  if not success then
+    print('Error running ' .. component .. ' for ' .. name)
+    error(result)
+  end
+  return result
+end
+
+_G.packer_plugins = {
+  ["astronauta.nvim"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/astronauta.nvim"
+  },
+  ["completion-buffers"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/completion-buffers"
+  },
+  ["completion-nvim"] = {
+    config = { "require('plugins._completion')" },
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/completion-nvim"
+  },
+  ["completion-treesitter"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/completion-treesitter"
+  },
+  ["gentoo-syntax"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/gentoo-syntax"
+  },
+  ["git-messenger.vim"] = {
+    config = { "require('plugins._git-messenger')" },
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/git-messenger.vim"
   },
   ["goyo.vim"] = {
     commands = { "Goyo" },
+    config = { "require('plugins._goyo')" },
     loaded = false,
-    only_sequence = false,
-    only_setup = false,
+    needs_bufread = false,
     path = "/home/robert/.local/share/nvim/site/pack/packer/opt/goyo.vim"
   },
+  ["lexima.vim"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/lexima.vim"
+  },
   ["limelight.vim"] = {
     commands = { "Limelight" },
+    config = { "require('plugins._limelight')" },
     loaded = false,
-    only_sequence = false,
-    only_setup = false,
+    needs_bufread = false,
     path = "/home/robert/.local/share/nvim/site/pack/packer/opt/limelight.vim"
   },
-  ["vim-easy-align"] = {
-    commands = { "EasyAlign" },
+  ["nvim-colorizer.lua"] = {
+    config = { "require('plugins._colorizer')" },
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/nvim-colorizer.lua"
+  },
+  ["nvim-lightbulb"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/nvim-lightbulb"
+  },
+  ["nvim-lspconfig"] = {
+    config = { "require('plugins._lsp')" },
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/nvim-lspconfig"
+  },
+  ["nvim-treesitter"] = {
+    config = { "require('plugins._treesitter')" },
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/nvim-treesitter"
+  },
+  ["nvim-treesitter-refactor"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/nvim-treesitter-refactor"
+  },
+  ["packer.nvim"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/packer.nvim"
+  },
+  ["plenary.nvim"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/plenary.nvim"
+  },
+  ["popup.nvim"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/popup.nvim"
+  },
+  ["telescope-fzf-writer.nvim"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/telescope-fzf-writer.nvim"
+  },
+  ["telescope.nvim"] = {
+    config = { "require('plugins._telescope')" },
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/telescope.nvim"
+  },
+  ultisnips = {
+    config = { "require('plugins._ultisnips')" },
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/ultisnips"
+  },
+  ["vim-commentary"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-commentary"
+  },
+  ["vim-cue"] = {
     loaded = false,
-    only_sequence = false,
-    only_setup = false,
-    path = "/home/robert/.local/share/nvim/site/pack/packer/opt/vim-easy-align"
+    needs_bufread = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/opt/vim-cue"
+  },
+  ["vim-dirvish"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-dirvish"
+  },
+  ["vim-easy-align"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-easy-align"
+  },
+  ["vim-editorconfig"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-editorconfig"
+  },
+  ["vim-github-link"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-github-link"
+  },
+  ["vim-indent-guides"] = {
+    config = { "require('plugins._indent-guides')" },
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-indent-guides"
+  },
+  ["vim-indent-object"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-indent-object"
   },
   ["vim-markdown"] = {
+    config = { "require('plugins._markdown')" },
     loaded = false,
-    only_sequence = false,
-    only_setup = false,
+    needs_bufread = true,
     path = "/home/robert/.local/share/nvim/site/pack/packer/opt/vim-markdown"
   },
   ["vim-markdown-folding"] = {
     loaded = false,
-    only_sequence = false,
-    only_setup = false,
+    needs_bufread = true,
     path = "/home/robert/.local/share/nvim/site/pack/packer/opt/vim-markdown-folding"
   },
+  ["vim-polyglot"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-polyglot"
+  },
+  ["vim-repeat"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-repeat"
+  },
+  ["vim-signify"] = {
+    config = { "require('plugins._signify')" },
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-signify"
+  },
+  ["vim-sneak"] = {
+    config = { "vim.g['sneak#label'] = true" },
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-sneak"
+  },
+  ["vim-snippets"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-snippets"
+  },
+  ["vim-surround"] = {
+    loaded = true,
+    path = "/home/robert/.local/share/nvim/site/pack/packer/start/vim-surround"
+  },
   vimtex = {
+    config = { "require('plugins._vimtex')" },
     loaded = false,
-    only_sequence = false,
-    only_setup = false,
+    needs_bufread = true,
     path = "/home/robert/.local/share/nvim/site/pack/packer/opt/vimtex"
   }
 }
 
-local function handle_bufread(names)
-  for _, name in ipairs(names) do
-    local path = plugins[name].path
-    for _, dir in ipairs({ 'ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin' }) do
-      if #vim.fn.finddir(dir, path) > 0 then
-        vim.cmd('doautocmd BufRead')
-        return
-      end
-    end
-  end
-end
-
-_packer_load = nil
-
-local function handle_after(name, before)
-  local plugin = plugins[name]
-  plugin.load_after[before] = nil
-  if next(plugin.load_after) == nil then
-    _packer_load({name}, {})
-  end
-end
-
-_packer_load = function(names, cause)
-  local some_unloaded = false
-  for _, name in ipairs(names) do
-    if not plugins[name].loaded then
-      some_unloaded = true
-      break
-    end
-  end
-
-  if not some_unloaded then return end
-
-  local fmt = string.format
-  local del_cmds = {}
-  local del_maps = {}
-  for _, name in ipairs(names) do
-    if plugins[name].commands then
-      for _, cmd in ipairs(plugins[name].commands) do
-        del_cmds[cmd] = true
-      end
-    end
-
-    if plugins[name].keys then
-      for _, key in ipairs(plugins[name].keys) do
-        del_maps[key] = true
-      end
-    end
-  end
-
-  for cmd, _ in pairs(del_cmds) do
-    vim.cmd('silent! delcommand ' .. cmd)
-  end
-
-  for key, _ in pairs(del_maps) do
-    vim.cmd(fmt('silent! %sunmap %s', key[1], key[2]))
-  end
-
-  for _, name in ipairs(names) do
-    if not plugins[name].loaded then
-      vim.cmd('packadd ' .. name)
-      if plugins[name].config then
-        for _i, config_line in ipairs(plugins[name].config) do
-          loadstring(config_line)()
-        end
-      end
-
-      if plugins[name].after then
-        for _, after_name in ipairs(plugins[name].after) do
-          handle_after(after_name, name)
-          vim.cmd('redraw')
-        end
-      end
-
-      plugins[name].loaded = true
-    end
-  end
-
-  handle_bufread(names)
-
-  if cause.cmd then
-    local lines = cause.l1 == cause.l2 and '' or (cause.l1 .. ',' .. cause.l2)
-    vim.cmd(fmt('%s%s%s %s', lines, cause.cmd, cause.bang, cause.args))
-  elseif cause.keys then
-    local keys = cause.keys
-    local extra = ''
-    while true do
-      local c = vim.fn.getchar(0)
-      if c == 0 then break end
-      extra = extra .. vim.fn.nr2char(c)
-    end
-
-    if cause.prefix then
-      local prefix = vim.v.count and vim.v.count or ''
-      prefix = prefix .. '"' .. vim.v.register .. cause.prefix
-      if vim.fn.mode('full') == 'no' then
-        if vim.v.operator == 'c' then
-          prefix = '' .. prefix
-        end
-
-        prefix = prefix .. vim.v.operator
-      end
-
-      vim.fn.feedkeys(prefix, 'n')
-    end
-
-    -- NOTE: I'm not sure if the below substitution is correct; it might correspond to the literal
-    -- characters \<Plug> rather than the special <Plug> key.
-    vim.fn.feedkeys(string.gsub(string.gsub(cause.keys, '^<Plug>', '\\<Plug>') .. extra, '<[cC][rR]>', '\r'))
-  elseif cause.event then
-    vim.cmd(fmt('doautocmd <nomodeline> %s', cause.event))
-  elseif cause.ft then
-    vim.cmd(fmt('doautocmd <nomodeline> %s FileType %s', 'filetypeplugin', cause.ft))
-    vim.cmd(fmt('doautocmd <nomodeline> %s FileType %s', 'filetypeindent', cause.ft))
-  end
-end
-
--- Runtimepath customization
-
--- Pre-load configuration
--- Post-load configuration
--- Config for: nvim-treesitter
-loadstring("\27LJ\1\2/\0\0\2\0\2\0\0044\0\0\0%\1\1\0>\0\2\1G\0\1\0\20conf.treesitter\frequire\0")()
+-- Config for: telescope.nvim
+require('plugins._telescope')
+-- Config for: completion-nvim
+require('plugins._completion')
 -- Config for: nvim-colorizer.lua
-loadstring("\27LJ\1\2z\0\0\3\0\4\0\b4\0\0\0%\1\1\0>\0\2\0027\0\2\0)\1\0\0003\2\3\0>\0\3\1G\0\1\0\1\0\6\vrgb_fn\2\tname\2\rRRGGBBAA\1\vhsl_fn\2\tmode\15background\vRRGGBB\2\nsetup\14colorizer\frequire\0")()
--- Config for: galaxyline.nvim
-loadstring("\27LJ\1\2$\0\0\2\0\2\0\0044\0\0\0%\1\1\0>\0\2\1G\0\1\0\tline\frequire\0")()
+require('plugins._colorizer')
+-- Config for: nvim-treesitter
+require('plugins._treesitter')
+-- Config for: vim-indent-guides
+require('plugins._indent-guides')
+-- Config for: vim-signify
+require('plugins._signify')
+-- Config for: git-messenger.vim
+require('plugins._git-messenger')
+-- Config for: vim-sneak
+vim.g['sneak#label'] = true
+-- Config for: ultisnips
+require('plugins._ultisnips')
 -- Config for: nvim-lspconfig
-loadstring("\27LJ\1\2(\0\0\2\0\2\0\0044\0\0\0%\1\1\0>\0\2\1G\0\1\0\rconf.lsp\frequire\0")()
--- Config for: telescope.nvim
-loadstring("\27LJ\1\2.\0\0\2\0\2\0\0044\0\0\0%\1\1\0>\0\2\1G\0\1\0\19conf.telescope\frequire\0")()
--- Conditional loads
--- Load plugins in order defined by `after`
+require('plugins._lsp')
+
+-- Command lazy-loads
+vim.cmd [[command! -nargs=* -range -bang -complete=file Limelight lua require("packer.load")({'limelight.vim'}, { cmd = "Limelight", l1 = <line1>, l2 = <line2>, bang = <q-bang>, args = <q-args> }, _G.packer_plugins)]]
+vim.cmd [[command! -nargs=* -range -bang -complete=file Goyo lua require("packer.load")({'goyo.vim'}, { cmd = "Goyo", l1 = <line1>, l2 = <line2>, bang = <q-bang>, args = <q-args> }, _G.packer_plugins)]]
+
+vim.cmd [[augroup packer_load_aucmds]]
+vim.cmd [[au!]]
+  -- Filetype lazy-loads
+vim.cmd [[au FileType markdown ++once lua require("packer.load")({'vim-markdown-folding', 'vim-markdown'}, { ft = "markdown" }, _G.packer_plugins)]]
+vim.cmd [[au FileType cue ++once lua require("packer.load")({'vim-cue'}, { ft = "cue" }, _G.packer_plugins)]]
+vim.cmd [[au FileType latex ++once lua require("packer.load")({'vimtex'}, { ft = "latex" }, _G.packer_plugins)]]
+vim.cmd [[au FileType tex ++once lua require("packer.load")({'vimtex'}, { ft = "tex" }, _G.packer_plugins)]]
+vim.cmd("augroup END")
+vim.cmd [[augroup filetypedetect]]
+vim.cmd [[source /home/robert/.local/share/nvim/site/pack/packer/opt/vimtex/ftdetect/tex.vim]]
+vim.cmd [[source /home/robert/.local/share/nvim/site/pack/packer/opt/vim-markdown/ftdetect/markdown.vim]]
+vim.cmd [[source /home/robert/.local/share/nvim/site/pack/packer/opt/vim-cue/ftdetect/cue.vim]]
+vim.cmd("augroup END")
 END
 
-function! s:load(names, cause) abort
-call luaeval('_packer_load(_A[1], _A[2])', [a:names, a:cause])
-endfunction
-
-
-" Command lazy-loads
-command! -nargs=* -range -bang -complete=file Goyo call s:load(['goyo.vim'], { "cmd": "Goyo", "l1": <line1>, "l2": <line2>, "bang": <q-bang>, "args": <q-args> })
-command! -nargs=* -range -bang -complete=file Limelight call s:load(['limelight.vim'], { "cmd": "Limelight", "l1": <line1>, "l2": <line2>, "bang": <q-bang>, "args": <q-args> })
-command! -nargs=* -range -bang -complete=file EasyAlign call s:load(['vim-easy-align'], { "cmd": "EasyAlign", "l1": <line1>, "l2": <line2>, "bang": <q-bang>, "args": <q-args> })
-
-" Keymap lazy-loads
-
-augroup packer_load_aucmds
-  au!
-  " Filetype lazy-loads
-  au FileType markdown ++once call s:load(['vim-markdown', 'vim-markdown-folding'], { "ft": "markdown" })
-  au FileType html ++once call s:load(['emmet-vim'], { "ft": "html" })
-  au FileType latex ++once call s:load(['vimtex'], { "ft": "latex" })
-  au FileType tex ++once call s:load(['vimtex'], { "ft": "tex" })
-  " Event lazy-loads
-augroup END
+catch
+  echohl ErrorMsg
+  echom "Error in packer_compiled: " .. v:exception
+  echom "Please check your config for correctness"
+  echohl None
+endtry
diff --git a/.vim/plugin/zettel.vim b/.vim/plugin/zettel.vim
deleted file mode 100644
index 948bb91..0000000
--- a/.vim/plugin/zettel.vim
+++ /dev/null
@@ -1,43 +0,0 @@
-" markdown extended for bullet journaling and personal wiki-keeping
-
-if exists('g:loaded_zettel')
-	finish
-endif
-let g:loaded_zettel = 1
-
-if !exists('g:zettel_root')
-	let g:zettel_root = expand($HOME.'/wiki')
-endif
-
-if !exists('g:zettel_create_on_empty')
-	let g:zettel_create_on_emtpy = 1
-endif
-
-if v:progname =~ 'vimdiff'
-	let g:zettel_create_on_empty = 0
-endif
-
-function! <SID>make_new_zettel()
-	let l:pastebackup = &paste
-	set nopaste
-
-	0 put ='---'
-	read !yq n date $(date -Iseconds) | yq w - title "%:t:r"
-	put ='---'
-	call feedkeys('Go', 'n')
-
-	if pastebackup == 0
-		set nopaste
-	endif
-endfunction
-
-command! -nargs=0 NewZettel call <SID>make_new_zettel()
-
-augroup NewZettel
-	au!
-	au BufNewFile *.md
-		\ if expand('%:p') =~# fnameescape(g:zettel_root).'/.*.md' |
-		\ 	call <SID>make_new_zettel() |
-		\ endif
-augroup END
-
diff --git a/.vim/syntax/gotmpl.vim b/.vim/syntax/gotmpl.vim
deleted file mode 100644
index b4bf6b9..0000000
--- a/.vim/syntax/gotmpl.vim
+++ /dev/null
@@ -1,93 +0,0 @@
-" Copyright 2011 The Go Authors. All rights reserved.
-" Use of this source code is governed by a BSD-style
-" license that can be found in the LICENSE file.
-"
-" gotexttmpl.vim: Vim syntax file for Go templates.
-
-" Quit when a (custom) syntax file was already loaded
-if exists("b:current_syntax")
-  finish
-endif
-
-if !exists("g:main_syntax")
-  let g:main_syntax = 'html'
-endif
-
-runtime! syntax/html.vim
-
-" syn case match
-
-" Go escapes
-syn match       goEscapeOctal       display contained "\\[0-7]\{3}"
-syn match       goEscapeC           display contained +\\[abfnrtv\\'"]+
-syn match       goEscapeX           display contained "\\x\x\{2}"
-syn match       goEscapeU           display contained "\\u\x\{4}"
-syn match       goEscapeBigU        display contained "\\U\x\{8}"
-syn match       goEscapeError       display contained +\\[^0-7xuUabfnrtv\\'"]+
-
-hi def link     goEscapeOctal       goSpecialString
-hi def link     goEscapeC           goSpecialString
-hi def link     goEscapeX           goSpecialString
-hi def link     goEscapeU           goSpecialString
-hi def link     goEscapeBigU        goSpecialString
-hi def link     goSpecialString     Special
-hi def link     goEscapeError       Error
-
-" Strings and their contents
-syn cluster     goStringGroup       contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU,goEscapeError
-syn region      goString            contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup
-syn region      goRawString         contained start=+`+ end=+`+
-
-hi def link     goString            String
-hi def link     goRawString         String
-
-" Characters; their contents
-syn cluster     goCharacterGroup    contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU
-syn region      goCharacter         contained start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@goCharacterGroup
-
-hi def link     goCharacter         Character
-
-" Integers
-syn match       goDecimalInt        contained "\<\d\+\([Ee]\d\+\)\?\>"
-syn match       goHexadecimalInt    contained "\<0x\x\+\>"
-syn match       goOctalInt          contained "\<0\o\+\>"
-syn match       goOctalError        contained "\<0\o*[89]\d*\>"
-syn cluster     goInt               contains=goDecimalInt,goHexadecimalInt,goOctalInt
-" Floating point
-syn match       goFloat             contained "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>"
-syn match       goFloat             contained "\<\.\d\+\([Ee][-+]\d\+\)\?\>"
-syn match       goFloat             contained "\<\d\+[Ee][-+]\d\+\>"
-" Imaginary literals
-syn match       goImaginary         contained "\<\d\+i\>"
-syn match       goImaginary         contained "\<\d\+\.\d*\([Ee][-+]\d\+\)\?i\>"
-syn match       goImaginary         contained "\<\.\d\+\([Ee][-+]\d\+\)\?i\>"
-syn match       goImaginary         contained "\<\d\+[Ee][-+]\d\+i\>"
-
-hi def link     goInt        Number
-hi def link     goFloat      Number
-hi def link     goImaginary  Number
-
-" Token groups
-syn cluster     gotplLiteral     contains=goString,goRawString,goCharacter,@goInt,goFloat,goImaginary
-syn keyword     gotplControl     contained   if else end range with template
-syn keyword     gotplFunctions   contained   and html index js len not or print printf println urlquery eq ne lt le gt ge
-syn match       gotplVariable    contained   /\$[a-zA-Z0-9_]*\>/
-syn match       goTplIdentifier  contained   /\.[^\s}]+\>/
-
-hi def link     gotplControl        Keyword
-hi def link     gotplFunctions      Function
-hi def link     goTplVariable       Special
-
-syn region gotplAction start="{{" end="}}" contains=@gotplLiteral,gotplControl,gotplFunctions,gotplVariable,goTplIdentifier display
-syn region gotplAction start="\[\[" end="\]\]" contains=@gotplLiteral,gotplControl,gotplFunctions,gotplVariable display
-syn region goTplComment start="{{\(- \)\?/\*" end="\*/\( -\)\?}}" display
-syn region goTplComment start="\[\[\(- \)\?/\*" end="\*/\( -\)\?\]\]" display
-
-hi def link gotplAction PreProc
-hi def link goTplComment Comment
-
-syn cluster htmlPreproc add=gotplAction,goTplComment
-
-let b:current_syntax = "gotmpl"
-
-" vim: sw=2 ts=2 et