diff --git a/dotfiles/.vimrc b/dotfiles/.vimrc
new file mode 100644
index 00000000..cc96f3ac
--- /dev/null
+++ b/dotfiles/.vimrc
@@ -0,0 +1,133 @@
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+"
+" New Start: A modern Arch workflow built with an emphasis on functionality.
+" Copyright (C) 2017 Donovan Glover
+"
+" 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 .
+"
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+" =================================== Plugins ===================================
+
+call plug#begin('~/.vim/plugged') " Use vim-plug as our package manager of choice
+ Plug 'osyo-manga/vim-over' " Automatically highlight find and replace
+ Plug 'jiangmiao/auto-pairs' " Close brackets and other pairs automatically
+ Plug 'sukima/xmledit' " Automatically close tags when writing html
+ Plug 'chriskempson/base16-vim' " Add base16 color schemes
+ Plug 'francoiscabrol/ranger.vim' " Use ranger in vim
+ Plug 'vim-syntastic/syntastic' " Automatically check language syntax for errors
+ Plug 'maksimr/vim-jsbeautify' " Make it easier to work with foreign code
+ Plug 'lervag/vimtex' " Make editing LaTeX a breeze
+ Plug 'dbeniamine/todo.txt-vim' " Easily manage any part of your todo.txt
+call plug#end() " Start the plugins
+
+" =================================== Configuration ===================================
+
+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 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 " Never show the status line
+
+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 term=xterm-256color " Explicitly tell vim that our terminal supports 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
+
+" =================================== Plugin-Specific ===================================
+
+let base16colorspace=256 " Tell base16 to use 256 colors
+source ~/.vimrc_background " Load the same base16 theme used in the shell
+
+set statusline+=%#warningmsg# " Add warning message color
+set statusline+=%{SyntasticStatuslineFlag()} " Add the warning message
+set statusline+=%* " Add the background color
+
+let g:syntastic_always_populate_loc_list = 1 " Always show errors at the bottom
+let g:syntastic_auto_loc_list = 1 " Open the error window automatically
+let g:syntastic_check_on_open = 1 " Automatically check files when they're opened
+let g:syntastic_check_on_wq = 0 " Don't check files before exiting
+
+let g:ranger_map_keys = 0 " Remove the default ranger.vim keybindings
+
+" =================================== Custom Keybindings ===================================
+
+" Change the global leader to the space bar
+let mapleader = ' '
+
+" Easily open any file in a new tab with ranger
+map f :RangerNewTab
+
+" Toggle between highlighting all the search results
+map g :set hlsearch!
+
+" Find and replace with automatic highlighting and inline changes
+map t :OverCommandLine%s/
+
+" Insert a line above without leaving keybindings mode
+map m O
+
+" Insert a line below without leaving keybindings mode
+map n o
+
+" Save the current buffer
+map j :w
+
+" Close the current buffer
+map k :q
+
+" Toggle wrap
+map w :set wrap!
+
+" Toggle line numbers
+map e :set nu!
+
+" Easily switch between soft tabs and hard tabs
+map v :set expandtab!
+
+" Bind the right beautify function based on what file is open
+autocmd FileType javascript map b :call JsBeautify()
+autocmd FileType json map b :call JsonBeautify()
+autocmd FileType jsx map b :call JsxBeautify()
+autocmd FileType html map b :call HtmlBeautify()
+autocmd FileType css map b :call CSSBeautify()