diff --git a/dotfiles/.vim/colors.vim b/dotfiles/.vim/colors.vim
new file mode 100644
index 00000000..bff86730
--- /dev/null
+++ b/dotfiles/.vim/colors.vim
@@ -0,0 +1,287 @@
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+"
+" New Start: A modern Arch workflow built with an emphasis on functionality.
+" Copyright (C) 2017 Donovan Glover
+"
+" base16-vim: Base16 for Vim
+" Copyright (C) 2012 Chris Kempson
+" https://github.com/chriskempson/base16-vim
+"
+" This program is free software: you can redistribute it and/or modify
+" it under the terms of the GNU General Public License as published by
+" the Free Software Foundation, either version 3 of the License, or
+" (at your option) any later version.
+"
+" This program is distributed in the hope that it will be useful,
+" but WITHOUT ANY WARRANTY; without even the implied warranty of
+" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+" GNU General Public License for more details.
+"
+" You should have received a copy of the GNU General Public License
+" along with this program. If not, see .
+"
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+" This is a modified version of Chris Kempson's base16-vim that removes a lot of
+" the settings you don't need when using your terminal's colors as the color scheme.
+
+" Main colors
+let s:cterm00 = "00"
+let s:cterm03 = "08"
+let s:cterm05 = "07"
+let s:cterm07 = "15"
+let s:cterm08 = "01"
+let s:cterm0A = "03"
+let s:cterm0B = "02"
+let s:cterm0C = "06"
+let s:cterm0D = "04"
+let s:cterm0E = "05"
+" Extra colors
+let s:cterm01 = "18" " 10 without 256 colors
+let s:cterm02 = "19" " 11
+let s:cterm04 = "20" " 12
+let s:cterm06 = "21" " 13
+let s:cterm09 = "16" " 09
+let s:cterm0F = "17" " 14
+
+" Highlighting function
+fun hi(group, ctermfg, ctermbg, attr)
+ if a:ctermfg != ""
+ exec "hi " . a:group . " ctermfg=" . a:ctermfg
+ endif
+ if a:ctermbg != ""
+ exec "hi " . a:group . " ctermbg=" . a:ctermbg
+ endif
+ if a:attr != ""
+ exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
+ endif
+endfun
+
+" Vim editor colors
+call hi("Normal", s:cterm05, s:cterm00, "")
+call hi("Bold", "", "", "bold")
+call hi("Debug", s:cterm08, "", "")
+call hi("Directory", s:cterm0D, "", "")
+call hi("Error", s:cterm00, s:cterm08, "")
+call hi("ErrorMsg", s:cterm08, s:cterm00, "")
+call hi("Exception", s:cterm08, "", "")
+call hi("FoldColumn", s:cterm0C, s:cterm01, "")
+call hi("Folded", s:cterm03, s:cterm01, "")
+call hi("IncSearch", s:cterm01, s:cterm09, "none")
+call hi("Italic", "", "", "none")
+call hi("Macro", s:cterm08, "", "")
+call hi("MatchParen", "", s:cterm03, "")
+call hi("ModeMsg", s:cterm0B, "", "")
+call hi("MoreMsg", s:cterm0B, "", "")
+call hi("Question", s:cterm0D, "", "")
+call hi("Search", s:cterm03, s:cterm0A, "")
+call hi("Substitute", s:cterm03, s:cterm0A, "none")
+call hi("SpecialKey", s:cterm03, "", "")
+call hi("TooLong", s:cterm08, "", "")
+call hi("Underlined", s:cterm08, "", "")
+call hi("Visual", "", s:cterm02, "")
+call hi("VisualNOS", s:cterm08, "", "")
+call hi("WarningMsg", s:cterm08, "", "")
+call hi("WildMenu", s:cterm08, "", "")
+call hi("Title", s:cterm0D, "", "none")
+call hi("Conceal", s:cterm0D, s:cterm00, "")
+call hi("Cursor", s:cterm00, s:cterm05, "")
+call hi("NonText", s:cterm03, "", "")
+call hi("LineNr", s:cterm03, s:cterm01, "")
+call hi("SignColumn", s:cterm03, s:cterm01, "")
+call hi("StatusLine", s:cterm04, s:cterm02, "none")
+call hi("StatusLineNC", s:cterm03, s:cterm01, "none")
+call hi("VertSplit", s:cterm02, s:cterm02, "none")
+call hi("ColorColumn", "", s:cterm01, "none")
+call hi("CursorColumn", "", s:cterm01, "none")
+call hi("CursorLine", "", s:cterm01, "none")
+call hi("CursorLineNr", s:cterm04, s:cterm01, "")
+call hi("QuickFixLine", "", s:cterm01, "none")
+call hi("PMenu", s:cterm05, s:cterm01, "none")
+call hi("PMenuSel", s:cterm01, s:cterm05, "")
+call hi("TabLine", s:cterm03, s:cterm01, "none")
+call hi("TabLineFill", s:cterm03, s:cterm01, "none")
+call hi("TabLineSel", s:cterm0B, s:cterm01, "none")
+
+" Standard syntax highlighting
+call hi("Boolean", s:cterm09, "", "")
+call hi("Character", s:cterm08, "", "")
+call hi("Comment", s:cterm03, "", "")
+call hi("Conditional", s:cterm0E, "", "")
+call hi("Constant", s:cterm09, "", "")
+call hi("Define", s:cterm0E, "", "none")
+call hi("Delimiter", s:cterm0F, "", "")
+call hi("Float", s:cterm09, "", "")
+call hi("Function", s:cterm0D, "", "")
+call hi("Identifier", s:cterm08, "", "none")
+call hi("Include", s:cterm0D, "", "")
+call hi("Keyword", s:cterm0E, "", "")
+call hi("Label", s:cterm0A, "", "")
+call hi("Number", s:cterm09, "", "")
+call hi("Operator", s:cterm05, "", "none")
+call hi("PreProc", s:cterm0A, "", "")
+call hi("Repeat", s:cterm0A, "", "")
+call hi("Special", s:cterm0C, "", "")
+call hi("SpecialChar", s:cterm0F, "", "")
+call hi("Statement", s:cterm08, "", "")
+call hi("StorageClass", s:cterm0A, "", "")
+call hi("String", s:cterm0B, "", "")
+call hi("Structure", s:cterm0E, "", "")
+call hi("Tag", s:cterm0A, "", "")
+call hi("Todo", s:cterm0A, s:cterm01, "")
+call hi("Type", s:cterm0A, "", "none")
+call hi("Typedef", s:cterm0A, "", "")
+
+" C highlighting
+call hi("cOperator", s:cterm0C, "", "")
+call hi("cPreCondit", s:cterm0E, "", "")
+
+" C# highlighting
+call hi("csClass", s:cterm0A, "", "")
+call hi("csAttribute", s:cterm0A, "", "")
+call hi("csModifier", s:cterm0E, "", "")
+call hi("csType", s:cterm08, "", "")
+call hi("csUnspecifiedStatement", s:cterm0D, "", "")
+call hi("csContextualStatement", s:cterm0E, "", "")
+call hi("csNewDecleration", s:cterm08, "", "")
+
+" CSS highlighting
+call hi("cssBraces", s:cterm05, "", "")
+call hi("cssClassName", s:cterm0E, "", "")
+call hi("cssColor", s:cterm0C, "", "")
+
+" Diff highlighting
+call hi("DiffAdd", s:cterm0B, s:cterm01, "")
+call hi("DiffChange", s:cterm03, s:cterm01, "")
+call hi("DiffDelete", s:cterm08, s:cterm01, "")
+call hi("DiffText", s:cterm0D, s:cterm01, "")
+call hi("DiffAdded", s:cterm0B, s:cterm00, "")
+call hi("DiffFile", s:cterm08, s:cterm00, "")
+call hi("DiffNewFile", s:cterm0B, s:cterm00, "")
+call hi("DiffLine", s:cterm0D, s:cterm00, "")
+call hi("DiffRemoved", s:cterm08, s:cterm00, "")
+
+" Git highlighting
+call hi("gitcommitOverflow", s:cterm08, "", "")
+call hi("gitcommitSummary", s:cterm0B, "", "")
+call hi("gitcommitComment", s:cterm03, "", "")
+call hi("gitcommitUntracked", s:cterm03, "", "")
+call hi("gitcommitDiscarded", s:cterm03, "", "")
+call hi("gitcommitSelected", s:cterm03, "", "")
+call hi("gitcommitHeader", s:cterm0E, "", "")
+call hi("gitcommitSelectedType", s:cterm0D, "", "")
+call hi("gitcommitUnmergedType", s:cterm0D, "", "")
+call hi("gitcommitDiscardedType", s:cterm0D, "", "")
+call hi("gitcommitBranch", s:cterm09, "", "bold")
+call hi("gitcommitUntrackedFile", s:cterm0A, "", "")
+call hi("gitcommitUnmergedFile", s:cterm08, "", "bold")
+call hi("gitcommitDiscardedFile", s:cterm08, "", "bold")
+call hi("gitcommitSelectedFile", s:cterm0B, "", "bold")
+
+" GitGutter highlighting
+call hi("GitGutterAdd", s:cterm0B, s:cterm01, "")
+call hi("GitGutterChange", s:cterm0D, s:cterm01, "")
+call hi("GitGutterDelete", s:cterm08, s:cterm01, "")
+call hi("GitGutterChangeDelete", s:cterm0E, s:cterm01, "")
+
+" HTML highlighting
+call hi("htmlBold", s:cterm0A, "", "")
+call hi("htmlItalic", s:cterm0E, "", "")
+call hi("htmlEndTag", s:cterm05, "", "")
+call hi("htmlTag", s:cterm05, "", "")
+
+" JavaScript highlighting
+call hi("javaScript", s:cterm05, "", "")
+call hi("javaScriptBraces", s:cterm05, "", "")
+call hi("javaScriptNumber", s:cterm09, "", "")
+" pangloss/vim-javascript highlighting
+call hi("jsOperator", s:cterm0D, "", "")
+call hi("jsStatement", s:cterm0E, "", "")
+call hi("jsReturn", s:cterm0E, "", "")
+call hi("jsThis", s:cterm08, "", "")
+call hi("jsClassDefinition", s:cterm0A, "", "")
+call hi("jsFunction", s:cterm0E, "", "")
+call hi("jsFuncName", s:cterm0D, "", "")
+call hi("jsFuncCall", s:cterm0D, "", "")
+call hi("jsClassFuncName", s:cterm0D, "", "")
+call hi("jsClassMethodType", s:cterm0E, "", "")
+call hi("jsRegexpString", s:cterm0C, "", "")
+call hi("jsGlobalObjects", s:cterm0A, "", "")
+call hi("jsGlobalNodeObjects", s:cterm0A, "", "")
+call hi("jsExceptions", s:cterm0A, "", "")
+call hi("jsBuiltins", s:cterm0A, "", "")
+
+" Mail highlighting
+call hi("mailQuoted1", s:cterm0A, "", "")
+call hi("mailQuoted2", s:cterm0B, "", "")
+call hi("mailQuoted3", s:cterm0E, "", "")
+call hi("mailQuoted4", s:cterm0C, "", "")
+call hi("mailQuoted5", s:cterm0D, "", "")
+call hi("mailQuoted6", s:cterm0A, "", "")
+call hi("mailURL", s:cterm0D, "", "")
+call hi("mailEmail", s:cterm0D, "", "")
+
+" Markdown highlighting
+call hi("markdownCode", s:cterm0B, "", "")
+call hi("markdownError", s:cterm05, s:cterm00, "")
+call hi("markdownCodeBlock", s:cterm0B, "", "")
+call hi("markdownHeadingDelimiter", s:cterm0D, "", "")
+
+" NERDTree highlighting
+call hi("NERDTreeDirSlash", s:cterm0D, "", "")
+call hi("NERDTreeExecFile", s:cterm05, "", "")
+
+" PHP highlighting
+call hi("phpMemberSelector", s:cterm05, "", "")
+call hi("phpComparison", s:cterm05, "", "")
+call hi("phpParent", s:cterm05, "", "")
+
+" Python highlighting
+call hi("pythonOperator", s:cterm0E, "", "")
+call hi("pythonRepeat", s:cterm0E, "", "")
+call hi("pythonInclude", s:cterm0E, "", "")
+call hi("pythonStatement", s:cterm0E, "", "")
+
+" Ruby highlighting
+call hi("rubyAttribute", s:cterm0D, "", "")
+call hi("rubyConstant", s:cterm0A, "", "")
+call hi("rubyInterpolationDelimiter", s:cterm0F, "", "")
+call hi("rubyRegexp", s:cterm0C, "", "")
+call hi("rubySymbol", s:cterm0B, "", "")
+call hi("rubyStringDelimiter", s:cterm0B, "", "")
+
+" SASS highlighting
+call hi("sassidChar", s:cterm08, "", "")
+call hi("sassClassChar", s:cterm09, "", "")
+call hi("sassInclude", s:cterm0E, "", "")
+call hi("sassMixing", s:cterm0E, "", "")
+call hi("sassMixinName", s:cterm0D, "", "")
+
+" Signify highlighting
+call hi("SignifySignAdd", s:cterm0B, s:cterm01, "")
+call hi("SignifySignChange", s:cterm0D, s:cterm01, "")
+call hi("SignifySignDelete", s:cterm08, s:cterm01, "")
+
+" Spelling highlighting
+call hi("SpellBad", "", s:cterm00, "undercurl")
+call hi("SpellLocal", "", s:cterm00, "undercurl")
+call hi("SpellCap", "", s:cterm00, "undercurl")
+call hi("SpellRare", "", s:cterm00, "undercurl")
+
+" Startify highlighting
+call hi("StartifyBracket", s:cterm03, "", "")
+call hi("StartifyFile", s:cterm07, "", "")
+call hi("StartifyFooter", s:cterm03, "", "")
+call hi("StartifyHeader", s:cterm0B, "", "")
+call hi("StartifyNumber", s:cterm09, "", "")
+call hi("StartifyPath", s:cterm03, "", "")
+call hi("StartifySection", s:cterm0E, "", "")
+call hi("StartifySelect", s:cterm0C, "", "")
+call hi("StartifySlash", s:cterm03, "", "")
+call hi("StartifySpecial", s:cterm03, "", "")
+
+" Remove functions
+delf hi
+
+" Remove color variables
+unlet s:cterm00 s:cterm01 s:cterm02 s:cterm03 s:cterm04 s:cterm05 s:cterm06 s:cterm07 s:cterm08 s:cterm09 s:cterm0A s:cterm0B s:cterm0C s:cterm0D s:cterm0E s:cterm0F
diff --git a/dotfiles/.vim/config.vim b/dotfiles/.vim/config.vim
new file mode 100644
index 00000000..8d0854cf
--- /dev/null
+++ b/dotfiles/.vim/config.vim
@@ -0,0 +1,39 @@
+filetype plugin indent on " Attempt to determine the file type of extensionless files
+syntax enable " Turn syntax highlighting on
+
+set nocompatible " Use vim defaults (i.e. ignore vi compatibility)
+set backspace=indent,eol,start " Make the backspace key function as you would expect
+set encoding=utf-8 " Always show files as utf-8
+set fileencoding=utf-8 " Ensure that we always save files as utf-8
+
+set autoindent " Automatically indent new lines
+set ignorecase " By default use case-insensitive search (combine with smartcase)
+set smartcase " Make search case-sensitive when using capital letters
+set showcmd " Always show the current keybinding being executed
+set spell " Enable spell check by default
+
+set incsearch " Automatically move to text as you search for it
+set wildmenu " Show a menu of the different options when you tab in command mode
+set display+=lastline " Show as much of a long line as possible
+set laststatus=0 " Disable the status line (removes filename and increases working space)
+
+set history=100 " Only keep the last 100 commands
+set tabpagemax=50 " Set the maximum number of tabs to be opened in any window to 50
+set viminfo^=! " Use viminfo to store workspace and other data automatically
+set sessionoptions-=options " When you explicitly save a workspace, save the entire environment
+
+set t_Co=256 " Tell vim that we want to use 256 colors
+set scrolloff=1 " The minimal number of rows to show when scrolling up/down
+set sidescrolloff=5 " The minimal number of columns to show when scrolling left/right
+
+set undofile " Keep track of undos even after you close a file
+set undodir=~/.vim/undo " Save the undo history here (not that the directory must exist)
+set undolevels=1000 " We can undo this many times
+set undoreload=10000 " The maximum number of lines to keep in the undo file
+
+set tabstop=4 " Show a tab character as 4 spaces
+set softtabstop=0 " Edit soft tabs as if they're regular spaces
+set shiftwidth=4 " Make autoindent appear as 4 spaces
+
+set expandtab " When using , replace the tab character with 4 spaces
+set smarttab " Always indent based on column number to align things easier
diff --git a/dotfiles/.vim/ctags.vim b/dotfiles/.vim/ctags.vim
new file mode 100644
index 00000000..a84114a6
--- /dev/null
+++ b/dotfiles/.vim/ctags.vim
@@ -0,0 +1,55 @@
+" Add elixir support to ctags
+let g:tagbar_type_elixir = {
+ \ 'ctagstype' : 'elixir',
+ \ 'kinds' : [
+ \ 'f:functions',
+ \ 'functions:functions',
+ \ 'c:callbacks',
+ \ 'd:delegates',
+ \ 'e:exceptions',
+ \ 'i:implementations',
+ \ 'a:macros',
+ \ 'o:operators',
+ \ 'm:modules',
+ \ 'p:protocols',
+ \ 'r:records',
+ \ 't:tests'
+ \ ]
+\ }
+
+" Add rust support to 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',
+ \]
+\}
+
+" Add crystal support to ctags
+let g:tagbar_type_crystal = {
+ \'ctagstype': 'crystal',
+ \'ctagsbin': 'crystalctags',
+ \'kinds': [
+ \'c:classes',
+ \'m:modules',
+ \'d:defs',
+ \'x:macros',
+ \'l:libs',
+ \'s:sruct or unions',
+ \'f:fun'
+ \],
+ \'sro': '.',
+ \'kind2scope': {
+ \'c': 'namespace',
+ \'m': 'namespace',
+ \'l': 'namespace',
+ \'s': 'namespace'
+ \},
+\}
diff --git a/dotfiles/.vim/keybindings.vim b/dotfiles/.vim/keybindings.vim
new file mode 100644
index 00000000..7e8829a2
--- /dev/null
+++ b/dotfiles/.vim/keybindings.vim
@@ -0,0 +1,63 @@
+" Change the global leader to the space bar
+let mapleader = ' '
+
+" Easily switch between buffers
+nnoremap gn :bn
+nnoremap gp :bp
+nnoremap gd :bd
+" ================== Top row
+"nnoremap
+nnoremap q :Files
+nnoremap w :Commits
+nnoremap e :set nu!
+nnoremap r :call matchadd('OverLength', '\%101v', 100)
+nnoremap t :OverCommandLine%s/
+"nnoremap y
+nnoremap u w
+nnoremap i
+nnoremap o
+nnoremap p
+" Easily show all git diffs
+nnoremap [ :GFiles?
+" Easily show all git files
+nnoremap ] :GFiles
+" Easily go through all the commits for a specific file
+nnoremap \ :BCommits
+" ================== Middle row
+nnoremap a :NERDTreeToggle
+"nnoremap s
+nnoremap d :TagbarToggle
+nnoremap f :VimFiler
+nnoremap g :set hlsearch!
+nnoremap h :Buffers
+" Easily jump between lines in all open files
+nnoremap j :Lines
+" Easily jump between lines in the same file
+nnoremap