7af578f732ed

move
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Fri, 13 Apr 2012 15:23:33 -0400
parents 611c23c4a554
children 64b2b125f519
branches/tags (none)
files .ackrc .ctags .gitconfig .hgrc .offlineimaprc .pentadactylrc .urlview .zshrc ackrc bin/bootstrap.sh ctags gitconfig hgrc offlinimaprc pentadactylrc urlview vim/.vimrc vim/vimrc zshrc

Changes

--- a/.ackrc	Fri Apr 13 15:13:59 2012 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
---smart-case
---type-set
-log=.log
---type-set
-django=.py,.html
---type-set
-less=.less
---type-set
-vim=.vim
---type-set
-puppet=.pp
---type-set
-fe=.html,.js,.less
---type-set
-fea=.html,.js,.less,.css
---type-set
-docs=.markdown,.md,.mdown,.rst
---ignore-dir=public/media/cache
---ignore-dir=public/static/cache
---ignore-dir=build/html
---ignore-dir=docs/build
---ignore-dir=migrations
--- a/.ctags	Fri Apr 13 15:13:59 2012 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
---python-kinds=cfm
---javascript-kinds=cm
---fields=-s
-
---languages=-html
-
---exclude=flowplayer
---exclude=*.min.js
---exclude=jquery.*.js
---exclude=jquery-*.js
---exclude=.hg
---exclude=.ropeproject
---exclude=libs
---exclude=build
---exclude=dist
---exclude=user-data
---exclude=venv
---exclude=static-cache
---exclude=closure-library
-
---langmap=Lisp:+.clj
--- a/.gitconfig	Fri Apr 13 15:13:59 2012 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-[user]
-    name = Steve Losh
-    email = steve@stevelosh.com
-
-[core]
-    pager = cat
-    editor = vim
-    excludesfile = /Users/sjl/.gitignore
-
-[alias]
-    l   = log -16 --color=always --all --topo-order --pretty='format:%Cgreen%h%Creset %s%Cred%d%Creset %C(black bold)(by %an)%Creset'
-    ll  = log     --color=always --all --topo-order --pretty='format:%Cgreen%h%Creset %s%Cred%d%Creset %C(black bold)(by %an)%Creset'
-    gl  = log -10 --color=always --all --graph --topo-order --pretty='format:%Cgreen%h%Creset %s %C(black bold)(by %an)%Creset%C(yellow bold)%d%Creset%n'
-    gll = log     --color=always --all --graph --topo-order --pretty='format:%Cgreen%h%Creset %s %C(black bold)(by %an)%Creset%C(yellow bold)%d%Creset%n'
-
-    pull = pull --ff-only
-    merge = merge --no-ff
-    up = merge --ff-only
-
-    ci = commit
-    cm = commit -m
-
-    d = diff
-    di = diff --cached
-
-    co = checkout
-    id = rev-parse
-
-    stat = status
-    st = status
-
-    unstage = reset HEAD
-    uns = reset HEAD
-
-    currentbranch = !git branch --contains HEAD | grep '*' | tr -s ' ' | cut -d ' ' -f2
-    fo = fetch origin
-    fu = fetch upstream
-    po = push origin
-    lo = pull origin
-    mo = !git merge --no-ff origin/`git currentbranch`
-    uo = !git merge --ff-only origin/`git currentbranch`
-
-    addremove = !git add . && git add -u
-    addrem = !git addremove
-
-[push]
-    default = current
-
-[color]
-    branch = auto
-    diff = auto
-    interactive = auto
-    status = auto
-
-[difftool "Kaleidoscope"]
-    cmd = ksdiff-wrapper git \"$LOCAL\" \"$REMOTE\"
-
-[difftool]
-    prompt = false
-
-[diff]
-    tool = Kaleidoscope
-
-[merge]
-    tool = threesome
-
-[mergetool "threesome"]
-    cmd = "mvim -f $BASE $LOCAL $REMOTE $MERGED -c 'ThreesomeInit'"
-    trustExitCode = true
-[web]
-    browser = open
--- a/.hgrc	Fri Apr 13 15:13:59 2012 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,266 +0,0 @@
-[ui]
-username = Steve Losh <steve@stevelosh.com>
-editor = vim
-commitsubrepos = False
-ignore = ~/.hgignore
-
-[extensions]
-transplant = 
-graphlog =
-record = 
-bookmarks = 
-rebase = 
-purge = 
-mq = 
-patchbomb =
-extdiff = 
-color = 
-parentrevspec =
-schemes = 
-progress =
-fetch =
-prompt   = ~/lib/dotfiles/mercurial/hg-prompt/prompt.py
-histedit = ~/lib/dotfiles/mercurial/histedit/hg_histedit.py
-hggit    = ~/.hg-git/hggit
-
-[progress]
-delay = 1.0
-
-[web]
-cacerts = /etc/hg-dummy-cert.pem
-
-[schemes]
-webf = ssh://sjl@sjl.webfactional.com/repos/
-bbs = ssh://hg@bitbucket.org/
-bbss = ssh://hg@bitbucket.org/sjl/
-bbsd = ssh://hg@bitbucket.org/dwaiter/
-gh = git://github.com/
-ghs = git+ssh://git@github.com/
-cb = ssh://hg@codebasehq.com/
-cbdw = ssh://hg@codebasehq.com/dwaiter/
-cbsl = ssh://hg@codebasehq.com/stevelosh/
-dwd = ssh://hg@bitbucket.org/dwaiter/
-nyh = ssh://sjl@gotham.nyhacker.org/
-dl = ssh://hg@hg.dwaiter.com:38038/
-mirr = ssh://hg@dwaiter.com:38038/mirror/
-gc = https://code.google.com/p/
-
-[diff]
-git = True
-unified = 5
-
-[extdiff]
-cmd.vd = mvim
-opts.vd = -c 'set lines=70' -c 'set columns=240' -f '+next' '+execute "DirDiff" argv(0) argv(1)'
-cmd.ksdiff = /usr/local/bin/ksdiff-wrapper
-opts.ksdiff = hg
-cmd.dd = diffuse
-opts.dd = 
-
-[merge-tools]
-threesome.executable = mvim
-threesome.args = -f $base $local $other $output -c 'ThreesomeInit'
-threesome.premerge = keep
-threesome.priority = 1
-
-keepthat.executable = sh
-keepthat.args = -c 'cp "$local" "$output.original" && cp "$other" "$output"'
-keepthat.premerge = True
-
-keepthis.executable = sh
-keepthis.args = -c 'cp "$other" "$output.incoming" && cp "$local" "$output"'
-keepthis.premerge = True
-
-[email]
-method = smtp
-from = Steve Losh <steve@stevelosh.com>
-
-[smtp]
-host = smtp.gmail.com
-port = 587
-username = steve@stevelosh.com
-tls = True
-
-[color]
-status.modified = cyan
-status.added = green
-status.removed = red
-status.deleted = yellow bold underline
-status.unknown = magenta bold underline
-status.ignored = black bold
-diff.diffline = none
-diff.extended = cyan
-diff.file_a = red
-diff.file_b = green
-diff.hunk = yellow bold
-diff.deleted = red
-diff.inserted = green
-diff.changed = white
-diff.trailingwhitespace = white_background
-
-[bookmarks]
-track.current = True
-
-[defaults]
-rebase = --keepbranches
-addremove = --similarity 100
-
-[alias]
-# Nudge: just push the current branch.
-nudge = push --branch .
-
-# Some useful little aliases.
-st = status -SC
-? = summary
-fdiff = diff -U 10000000000000
-qfdiff = qdiff -U 10000000000000
-
-# Push the qparent revision (mnemonic: q push parent).
-qpp = push -r qparent
-
-# Merge with default.
-md = merge default
-
-# Commit message shortcuts.
-cm = commit -m
-cus = commit -m 'Update subrepository state.'
-cuf = commit -m 'Update fixtures.' -I '**fixtures**.json'
-cmm = commit -m 'Merge.'
-cws = commit -m 'Whitespace.'
-
-# Merge shortcuts.
-mergelocal = !$HG --config ui.merge=internal:local merge $@
-mergeother = !$HG --config ui.merge=internal:other merge $@
-mergefail = !$HG --config ui.merge=internal:fail merge $@
-
-# Shortcuts to resolve merge conflicts by taking one side or the other.
-takelocal = !"$HG" revert --rev 'p1()' $@ && "$HG" resolve -m $@
-takeother = !"$HG" revert --rev 'p2()' $@ && "$HG" resolve -m $@
-
-# Diff.
-d = diff -p --color=auto
-
-# Run a colored diff and pipe it to less.
-dl = !"$HG" diff -p --color=always | less -R
-
-# Kaleidoscope
-# Mnemonics: "kaleidoscope diff" and "kaleidoscope show"
-kd = !/opt/local/bin/hg ksdiff $@
-ks = !/opt/local/bin/hg ksdiff -c $@
-
-# Log shortcuts --------------------------------------------------------------------
-#
-# Each of these can be used with -v to add a bit more info.
-
-# Datelog: short, pretty hg log with dates.
-dlog = log --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.dlog
-_ = dlog -l15
-__ = _ -l100000000
-o_ = outgoing -n --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.dlog
-i_ = incoming -n --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.dlog
-
-# Shortlog: short, pretty hg log.
-slog = log --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.slog
-. = slog -l15
-.. = . -l100000000
-o. = outgoing -n --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.slog
-i. = incoming -n --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.slog
-
-# Short graphlog: short, pretty hg log with a graph.
-sglog = glog --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.sglog
-, = sglog -l7
-,, = , -l100000000
-o, = outgoing --graph --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.sglog
-i, = incoming --graph --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.sglog
-
-
-# hg n .     -- show a summary of rev . without diff.
-# hg show .  -- show a summary of rev . with diff.
-nlog = log --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.nlog
-n = nlog -vr
-show = nlog --color=always -vpr
-
-# Simple glog command that doesn't look bad and doesn't require my CLI templates.
-gl = glog -l10 --template='\033[0;33m{rev}\033[0m {desc|firstline|strip} \033[0;35m{branches}\033[0m \033[0;33m{tags}\033[0m\n\033[1;30m({date|age} by {author|person})\033[0m\n\n'
-
-# Make a new repo with some sensible defaults.
-mkrepo = !$HG init $1 && cd $1 && \
-          echo 'syntax: glob'  > .hgignore && \
-          echo ''             >> .hgignore && \
-          echo '.DS_Store'    >> .hgignore && \
-          echo '*.pyc'        >> .hgignore && \
-          echo '*.swp'        >> .hgignore && \
-          echo '*.swo'        >> .hgignore && \
-          echo '*.un~'        >> .hgignore && \
-          echo '.ropeproject' >> .hgignore && \
-          echo 'tags'         >> .hgignore && \
-          echo "[paths]\n" >> .hg/hgrc
-
-# Empty the current MQ patch.
-qempty = !$HG qrefresh -X `$HG root`
-
-# Commit under any applied MQ patches, and go back to where you were after doing so.
-# `hg ciunder` will use `$EDITOR` to get the commit message
-# `hg cmunder 'message'` takes it on the command line
-ciunder = !HG_CUR_PATCH=`$HG qtop --color=never` && \
-           $HG qnew temp-for-under && \
-           $HG qpop -a && \
-           $HG qpush --move temp-for-under && \
-           $HG qrefresh -e && \
-           $HG qfinish temp-for-under && \
-           $HG qpush $HG_CUR_PATCH
-cmunder = !HG_CUR_PATCH=`$HG qtop --color=never` && \
-           $HG qnew temp-for-under && \
-           $HG qpop -a && \
-           $HG qpush --move temp-for-under && \
-           $HG qrefresh -m "$@" && \
-           $HG qfinish temp-for-under && \
-           $HG qpush $HG_CUR_PATCH
-
-# Edit the current repo's hgrc file.
-erc = !$EDITOR `$HG root`/.hg/hgrc
-
-# Simple bug/todo tracking
-# Idea from Justin: http://gist.github.com/464871
-# Install t first: http://bitbucket.org/sjl/t/
-bug = !~/lib/t/t.py --task-dir="`$HG root`" --list=BUGS $@
-todo = !~/lib/t/t.py --task-dir="`$HG root`" --list=TODO $@
-
-# Easily add ignore patterns to .hgignore and commit.
-ignore = ![ -n "$@" ] && echo '$@' >> `$HG root`/.hgignore && \
-          $HG commit `$HG root`/.hgignore -Am 'Add "$@" to .hgignore.'
-
-# Show in MacVim
-vshow = !$HG show $@ | mvim -c ':AnsiEsc' -c 'setlocal buftype=nofile' -
-
-# Ack for non-ignored files
-ack = !$HG locate "set:not ignored()" | xargs ack $@
-grep-wdir = !$HG locate "set:not ignored()" | xargs grep $@
-
-# Run hg commands on all subrepos at once.
-subs  = !"$HG" debugsub | grep '^path' | cut -d' ' -f2 | xargs    -n1  -I SUB $HG -R "`$HG root`/SUB" $@
-psubs = !"$HG" debugsub | grep '^path' | cut -d' ' -f2 | parallel -j10 -I SUB $HG -R "`$HG root`/SUB" $@
-
-# Run shell commands on all subrepos at once.
-subscmd  = !"$HG" debugsub | grep '^path' | cut -d' ' -f2 | xargs    -n1  -I SUB sh -c "cd `$HG root`/SUB && $@"
-psubscmd = !"$HG" debugsub | grep '^path' | cut -d' ' -f2 | parallel -j10 -I SUB sh -c "cd `$HG root`/SUB && $@"
-
-# Run a command on a subrepo:
-#
-#     hg sub SUBREPO_REGEX ...command and arguments...
-#
-# The SUBREPO_REGEX should be a regex that will let grep match one and only one of
-# the subrepos in .hgsub.  For example:
-#
-#     $ cat .hgsub
-#     bundled/foo = ...
-#     bundled/bar = ...
-#
-#     $ hg sub fo root
-#     .../bundled/foo
-#     $ hg sub ar status -m
-#     M lol.py
-sub = !grep = "`$HG root`/.hgsub" | cut -d' ' -f1 | grep "$1" | tr -d '\n ' | xargs -0 -I SUB $HG -R SUB $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20
-
-# Local settings
-%include ~/.hgrc_local
--- a/.offlineimaprc	Fri Apr 13 15:13:59 2012 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-[general]
-ui = TTY.TTYUI
-accounts = SteveLosh
-pythonfile=~/.mutt/offlineimap.py
-
-[Account SteveLosh]
-localrepository = SteveLosh-Local
-remoterepository = SteveLosh-Remote
-
-[Repository SteveLosh-Local]
-type = Maildir
-localfolders = ~/.mail/steve-stevelosh.com
-
-[Repository SteveLosh-Remote]
-type = Gmail
-remoteuser = steve@stevelosh.com
-remotepasseval = get_keychain_pass(account="steve@stevelosh.com", server="imap.gmail.com")
-realdelete = no
-nametrans = lambda folder: re.sub('.*Drafts$', 'drafts',
-                           re.sub('.*Sent Mail$', 'sent',
-                           re.sub('.*Starred$', 'flagged',
-                           re.sub('.*Trash$', 'trash',
-                           re.sub('.*All Mail$', 'archive',
-                           folder)))))
-folderfilter = lambda folder: folder not in ['[Gmail]/Trash',
-                                             'Nagios',
-                                             'Flask',
-                                             '[Gmail]/Important',
-                                             '[Gmail]/Spam',
-                                             ]
--- a/.pentadactylrc	Fri Apr 13 15:13:59 2012 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-"1.0b3 (created: 2010/11/06 12:31:35)
-
-highlight Hint       font-size: 14px; background: rgba(210,1,133,0.8) !important; border: 2px solid rgb(165,1,105); padding: 4px; border-radius: 3px; font-weight: bold; margin-left: -25px; color: white; font-family: Helvetica; line-height:1em;
-highlight HintActive background: rgba(145,197,43,0.8)    !important;
-highlight HintElem   background: rgba(255, 209, 20, 0.7) !important;
-highlight StatusLine -moz-appearance: none !important; font-weight: bold; background: transparent !important; border: 0px !important; min-height: 22px !important; text-shadow: none !important; font: normal 16px/1 'Menlo' !important; padding: 3px 0px 3px 5px !important;
-highlight CmdLine    padding: 1px !important; font: normal 16px 'Menlo' !important;
-highlight CmdOutput  font: normal 14px 'Menlo' !important;
-highlight CompItem   font: normal 14px 'Menlo' !important;
-
-highlight Find   background: #d6c149; color: #000;
-
-set runtimepath=/Users/sjl/.pentadactyl
-set editor='/usr/local/bin/mvim -f +<line> <file>'
-set followhints=1
-set showtabline=multitab
-set showstatuslinks=command
-
-set mapleader=','
-
-" FASTER PLEASE
-nnoremap j 3j
-nnoremap k 3k
-
-" Go to the second input field.
-" Useful for skipping over search fields, etc.
-nnoremap gI 2gi
-
-" I never use marks, but always use quickmarks.
-nnoremap "'" go
-nnoremap '"' gn
-
-" Switch tabs with parens
-nnoremap ) :tn<CR>
-nnoremap ( :tp<CR>
-
-" Finally I can overwrite the stupid fucking Firebug toggling correctly.
-" nnoremap <c-f> <f12>
-" nnoremap <c-g> <s-f12>
-
-" Console toggle
-nnoremap <c-g> <m-a-k><esc>
-inoremap <c-g> <esc><m-a-k><esc>
-
-" Inspect element toggle
-nnoremap <c-f> <m-a-i>
-inoremap <c-f> <esc><m-a-i>
-
-" Shift is hard.
-nnoremap ; :
-
-" YES YES YES REMOVE THE IDIOCY
-nnoremap <bs> <nop>
-
-" Highlight all search matches, not just the first.
-set hlfind
-
-" Clear search highlighting and normal highlighting.
-nnoremap <Leader><space> <esc>:noh<CR>
-
-" Shut up.
-javascript dactyl.beep = function() { return false; }
--- a/.urlview	Fri Apr 13 15:13:59 2012 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-COMMAND open %s
--- a/.zshrc	Fri Apr 13 15:13:59 2012 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-export ZSH="$HOME/lib/oh-my-zsh"
-export ZSH_THEME="prose"
-export DISABLE_AUTO_UPDATE="true"
-export OH_MY_ZSH_DEBUG="true"
-plugins=(command-coloring pip fabric lein redis-cli vagrant)
-
-#test -f "$HOME/src/hgd/hd" && export OH_MY_ZSH_HG="$HOME/src/hgd/hd" || export OH_MY_ZSH_HG='hg'
-
-source $ZSH/oh-my-zsh.sh
-
-
-# Custom options -------------------------------------------------------------
-unsetopt promptcr
-
-# Useful aliases -------------------------------------------------------------
-alias j='z'
-alias fab='fab -i ~/.ssh/stevelosh'
-alias oldgcc='export CC=/usr/bin/gcc-4.0'
-alias tm='tmux -u2'
-alias c='clear'
-alias bp='bpython'
-
-export DISABLE_AUTO_TITLE="true"
-
-# Environment variables ------------------------------------------------------
-export EDITOR='vim'
-export PATH="$HOME/.gem/ruby/1.8/bin:${PATH}"
-export PATH="$HOME/bin:${PATH}"
-export PATH="$HOME/lib/dotfiles/bin:${PATH}"
-export PATH="$HOME/bin:/usr/local/bin:/usr/local/sbin:/opt/local/bin:$PATH"
-export PATH="/opt/subversion/bin:${PATH}"
-export PATH="/usr/local/Cellar/ruby/1.9.2-p290/bin:${PATH}"
-export GREP_OPTIONS='--color=auto'
-export HISTSIZE=1000
-export HISTFILESIZE=1000
-export HISTCONTROL=erasedups
-export COMMAND_MODE=unix2003
-export RUBYOPT=rubygems
-export CLASSPATH="$CLASSPATH:/usr/local/Cellar/clojure-contrib/1.2.0/clojure-contrib.jar"
-
-# Python variables -----------------------------------------------------------
-export PIP_DOWNLOAD_CACHE="$HOME/.pip/cache"
-export PYTHONSTARTUP="$HOME/.pythonrc.py"
-export WORKON_HOME="${HOME}/lib/virtualenvs"
-export PATH="${PATH}:/Developer/usr/bin/"
-export PATH="${PATH}:/usr/local/share/python/"
-export PATH="${PATH}:$HOME/.lein/bin"
-export PYTHONPATH="$PYTHONPATH:/usr/local/Cellar/python/2.7.1/lib/python2.7/site-packages"
-export PYTHONPATH="$PYTHONPATH:/usr/local/lib/python2.7.1/site-packages"
-export PYTHONPATH="$PYTHONPATH:/usr/local/lib/python2.7/site-packages"
-export PYTHONPATH="$PYTHONPATH:/usr/local/lib/python2.6/site-packages"
-export VEW_PATH="$HOME/lib/python/virtualenvwrapper/virtualenvwrapper.sh"
-export PYTHONPATH="$HOME/lib/python/see:$PYTHONPATH"
-export NODE_PATH="$NODE_PATH:/usr/local/lib/node:/usr/local/lib/node_modules"
-
-# Mercurial variables --------------------------------------------------------
-export PATH="$HOME/lib/hg/hg-stable:$PATH"
-export PYTHONPATH="$HOME/lib/hg/hg-stable:$PYTHONPATH"
-
-# Extra ----------------------------------------------------------------------
-source `brew --prefix`/etc/profile.d/z.sh
-
-# Pre-Prompt Command ---------------------------------------------------------
-function precmd () {
-    z --add "$(pwd -P)"
-}
-
-# Local Settings -------------------------------------------------------------
-if [[ -s $HOME/.zshrc_local ]] ; then source $HOME/.zshrc_local ; fi
-
-# Emacs... -------------------------------------------------------------------
-alias e='emacsclient -nc .'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ackrc	Fri Apr 13 15:23:33 2012 -0400
@@ -0,0 +1,22 @@
+--smart-case
+--type-set
+log=.log
+--type-set
+django=.py,.html
+--type-set
+less=.less
+--type-set
+vim=.vim
+--type-set
+puppet=.pp
+--type-set
+fe=.html,.js,.less
+--type-set
+fea=.html,.js,.less,.css
+--type-set
+docs=.markdown,.md,.mdown,.rst
+--ignore-dir=public/media/cache
+--ignore-dir=public/static/cache
+--ignore-dir=build/html
+--ignore-dir=docs/build
+--ignore-dir=migrations
--- a/bin/bootstrap.sh	Fri Apr 13 15:13:59 2012 -0400
+++ b/bin/bootstrap.sh	Fri Apr 13 15:23:33 2012 -0400
@@ -4,6 +4,8 @@
 
 set -e
 
+echo "prerequisites: python git pip dulwich"
+
 function ensure_link {
     test -L "$HOME/$2" || ln -s "$HOME/$1" "$HOME/$2"
 }
@@ -13,8 +15,8 @@
 mkdir -p ~/bin
 mkdir -p ~/src
 
-test -d ~/.hg-git/        || clone "bb://durin42/hg-git/" "$HOME/.hg-git"
-test -d ~/.hg-git/dulwich || git clone "git://github.com/jelmer/dulwich.git" "$HOME/lib/dulwich"
+test -d ~/.hg-git/    || hg clone "bb://durin42/hg-git/" "$HOME/.hg-git"
+test -d ~/lib/dulwich || git clone "git://github.com/jelmer/dulwich.git" "$HOME/lib/dulwich"
 ensure_link "lib/dulwich" "lib/hg/hg-stable/dulwich"
 
 test -d ~/lib/dotfiles || hg clone http://bitbucket.org/sjl/dotfiles ~/lib/dotfiles
@@ -28,9 +30,14 @@
 ensure_link "lib/dotfiles/ackrc"          ".ackrc"
 ensure_link "lib/dotfiles/zsh"            "lib/oh-my-zsh/custom"
 ensure_link "lib/dotfiles/zshrc"          ".zshrc"
+ensure_link "lib/dotfiles/weechat"        ".weechat"
+ensure_link "lib/dotfiles/urlview"        ".urlview"
+ensure_link "lib/dotfiles/pentadactylrc"  ".pentadactylrc"
+ensure_link "lib/dotfiles/offlineimaprc"  ".offlineimaprc"
+ensure_link "lib/dotfiles/mutt"           ".mutt"
+ensure_link "lib/dotfiles/dotjs"          ".js"
+ensure_link "lib/dotfiles/dotcss"         ".css"
+ensure_link "lib/dotfiles/hgignore"       ".hgignore"
+ensure_link "lib/dotfiles/ctags"          ".ctags"
 
-hg clone "bb://sjl/hg-prompt/"       "$HOME/lib/dotfiles/mercurial/hg-prompt"
-hg clone "bb://ccaughie/hgcollapse/" "$HOME/lib/dotfiles/mercurial/hgcollapse"
-hg clone "bb://durin42/histedit/"    "$HOME/lib/dotfiles/mercurial/histedit"
-
-
+echo completed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ctags	Fri Apr 13 15:23:33 2012 -0400
@@ -0,0 +1,21 @@
+--python-kinds=cfm
+--javascript-kinds=cm
+--fields=-s
+
+--languages=-html
+
+--exclude=flowplayer
+--exclude=*.min.js
+--exclude=jquery.*.js
+--exclude=jquery-*.js
+--exclude=.hg
+--exclude=.ropeproject
+--exclude=libs
+--exclude=build
+--exclude=dist
+--exclude=user-data
+--exclude=venv
+--exclude=static-cache
+--exclude=closure-library
+
+--langmap=Lisp:+.clj
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gitconfig	Fri Apr 13 15:23:33 2012 -0400
@@ -0,0 +1,71 @@
+[user]
+    name = Steve Losh
+    email = steve@stevelosh.com
+
+[core]
+    pager = cat
+    editor = vim
+    excludesfile = /Users/sjl/.gitignore
+
+[alias]
+    l   = log -16 --color=always --all --topo-order --pretty='format:%Cgreen%h%Creset %s%Cred%d%Creset %C(black bold)(by %an)%Creset'
+    ll  = log     --color=always --all --topo-order --pretty='format:%Cgreen%h%Creset %s%Cred%d%Creset %C(black bold)(by %an)%Creset'
+    gl  = log -10 --color=always --all --graph --topo-order --pretty='format:%Cgreen%h%Creset %s %C(black bold)(by %an)%Creset%C(yellow bold)%d%Creset%n'
+    gll = log     --color=always --all --graph --topo-order --pretty='format:%Cgreen%h%Creset %s %C(black bold)(by %an)%Creset%C(yellow bold)%d%Creset%n'
+
+    pull = pull --ff-only
+    merge = merge --no-ff
+    up = merge --ff-only
+
+    ci = commit
+    cm = commit -m
+
+    d = diff
+    di = diff --cached
+
+    co = checkout
+    id = rev-parse
+
+    stat = status
+    st = status
+
+    unstage = reset HEAD
+    uns = reset HEAD
+
+    currentbranch = !git branch --contains HEAD | grep '*' | tr -s ' ' | cut -d ' ' -f2
+    fo = fetch origin
+    fu = fetch upstream
+    po = push origin
+    lo = pull origin
+    mo = !git merge --no-ff origin/`git currentbranch`
+    uo = !git merge --ff-only origin/`git currentbranch`
+
+    addremove = !git add . && git add -u
+    addrem = !git addremove
+
+[push]
+    default = current
+
+[color]
+    branch = auto
+    diff = auto
+    interactive = auto
+    status = auto
+
+[difftool "Kaleidoscope"]
+    cmd = ksdiff-wrapper git \"$LOCAL\" \"$REMOTE\"
+
+[difftool]
+    prompt = false
+
+[diff]
+    tool = Kaleidoscope
+
+[merge]
+    tool = threesome
+
+[mergetool "threesome"]
+    cmd = "mvim -f $BASE $LOCAL $REMOTE $MERGED -c 'ThreesomeInit'"
+    trustExitCode = true
+[web]
+    browser = open
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgrc	Fri Apr 13 15:23:33 2012 -0400
@@ -0,0 +1,266 @@
+[ui]
+username = Steve Losh <steve@stevelosh.com>
+editor = vim
+commitsubrepos = False
+ignore = ~/.hgignore
+
+[extensions]
+transplant = 
+graphlog =
+record = 
+bookmarks = 
+rebase = 
+purge = 
+mq = 
+patchbomb =
+extdiff = 
+color = 
+parentrevspec =
+schemes = 
+progress =
+fetch =
+prompt   = ~/lib/dotfiles/mercurial/hg-prompt/prompt.py
+histedit = ~/lib/dotfiles/mercurial/histedit/hg_histedit.py
+hggit    = ~/.hg-git/hggit
+
+[progress]
+delay = 1.0
+
+[web]
+cacerts = /etc/hg-dummy-cert.pem
+
+[schemes]
+webf = ssh://sjl@sjl.webfactional.com/repos/
+bbs = ssh://hg@bitbucket.org/
+bbss = ssh://hg@bitbucket.org/sjl/
+bbsd = ssh://hg@bitbucket.org/dwaiter/
+gh = git://github.com/
+ghs = git+ssh://git@github.com/
+cb = ssh://hg@codebasehq.com/
+cbdw = ssh://hg@codebasehq.com/dwaiter/
+cbsl = ssh://hg@codebasehq.com/stevelosh/
+dwd = ssh://hg@bitbucket.org/dwaiter/
+nyh = ssh://sjl@gotham.nyhacker.org/
+dl = ssh://hg@hg.dwaiter.com:38038/
+mirr = ssh://hg@dwaiter.com:38038/mirror/
+gc = https://code.google.com/p/
+
+[diff]
+git = True
+unified = 5
+
+[extdiff]
+cmd.vd = mvim
+opts.vd = -c 'set lines=70' -c 'set columns=240' -f '+next' '+execute "DirDiff" argv(0) argv(1)'
+cmd.ksdiff = /usr/local/bin/ksdiff-wrapper
+opts.ksdiff = hg
+cmd.dd = diffuse
+opts.dd = 
+
+[merge-tools]
+threesome.executable = mvim
+threesome.args = -f $base $local $other $output -c 'ThreesomeInit'
+threesome.premerge = keep
+threesome.priority = 1
+
+keepthat.executable = sh
+keepthat.args = -c 'cp "$local" "$output.original" && cp "$other" "$output"'
+keepthat.premerge = True
+
+keepthis.executable = sh
+keepthis.args = -c 'cp "$other" "$output.incoming" && cp "$local" "$output"'
+keepthis.premerge = True
+
+[email]
+method = smtp
+from = Steve Losh <steve@stevelosh.com>
+
+[smtp]
+host = smtp.gmail.com
+port = 587
+username = steve@stevelosh.com
+tls = True
+
+[color]
+status.modified = cyan
+status.added = green
+status.removed = red
+status.deleted = yellow bold underline
+status.unknown = magenta bold underline
+status.ignored = black bold
+diff.diffline = none
+diff.extended = cyan
+diff.file_a = red
+diff.file_b = green
+diff.hunk = yellow bold
+diff.deleted = red
+diff.inserted = green
+diff.changed = white
+diff.trailingwhitespace = white_background
+
+[bookmarks]
+track.current = True
+
+[defaults]
+rebase = --keepbranches
+addremove = --similarity 100
+
+[alias]
+# Nudge: just push the current branch.
+nudge = push --branch .
+
+# Some useful little aliases.
+st = status -SC
+? = summary
+fdiff = diff -U 10000000000000
+qfdiff = qdiff -U 10000000000000
+
+# Push the qparent revision (mnemonic: q push parent).
+qpp = push -r qparent
+
+# Merge with default.
+md = merge default
+
+# Commit message shortcuts.
+cm = commit -m
+cus = commit -m 'Update subrepository state.'
+cuf = commit -m 'Update fixtures.' -I '**fixtures**.json'
+cmm = commit -m 'Merge.'
+cws = commit -m 'Whitespace.'
+
+# Merge shortcuts.
+mergelocal = !$HG --config ui.merge=internal:local merge $@
+mergeother = !$HG --config ui.merge=internal:other merge $@
+mergefail = !$HG --config ui.merge=internal:fail merge $@
+
+# Shortcuts to resolve merge conflicts by taking one side or the other.
+takelocal = !"$HG" revert --rev 'p1()' $@ && "$HG" resolve -m $@
+takeother = !"$HG" revert --rev 'p2()' $@ && "$HG" resolve -m $@
+
+# Diff.
+d = diff -p --color=auto
+
+# Run a colored diff and pipe it to less.
+dl = !"$HG" diff -p --color=always | less -R
+
+# Kaleidoscope
+# Mnemonics: "kaleidoscope diff" and "kaleidoscope show"
+kd = !/opt/local/bin/hg ksdiff $@
+ks = !/opt/local/bin/hg ksdiff -c $@
+
+# Log shortcuts --------------------------------------------------------------------
+#
+# Each of these can be used with -v to add a bit more info.
+
+# Datelog: short, pretty hg log with dates.
+dlog = log --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.dlog
+_ = dlog -l15
+__ = _ -l100000000
+o_ = outgoing -n --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.dlog
+i_ = incoming -n --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.dlog
+
+# Shortlog: short, pretty hg log.
+slog = log --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.slog
+. = slog -l15
+.. = . -l100000000
+o. = outgoing -n --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.slog
+i. = incoming -n --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.slog
+
+# Short graphlog: short, pretty hg log with a graph.
+sglog = glog --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.sglog
+, = sglog -l7
+,, = , -l100000000
+o, = outgoing --graph --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.sglog
+i, = incoming --graph --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.sglog
+
+
+# hg n .     -- show a summary of rev . without diff.
+# hg show .  -- show a summary of rev . with diff.
+nlog = log --style=$HOME/lib/dotfiles/mercurial/templates/map-cmdline.nlog
+n = nlog -vr
+show = nlog --color=always -vpr
+
+# Simple glog command that doesn't look bad and doesn't require my CLI templates.
+gl = glog -l10 --template='\033[0;33m{rev}\033[0m {desc|firstline|strip} \033[0;35m{branches}\033[0m \033[0;33m{tags}\033[0m\n\033[1;30m({date|age} by {author|person})\033[0m\n\n'
+
+# Make a new repo with some sensible defaults.
+mkrepo = !$HG init $1 && cd $1 && \
+          echo 'syntax: glob'  > .hgignore && \
+          echo ''             >> .hgignore && \
+          echo '.DS_Store'    >> .hgignore && \
+          echo '*.pyc'        >> .hgignore && \
+          echo '*.swp'        >> .hgignore && \
+          echo '*.swo'        >> .hgignore && \
+          echo '*.un~'        >> .hgignore && \
+          echo '.ropeproject' >> .hgignore && \
+          echo 'tags'         >> .hgignore && \
+          echo "[paths]\n" >> .hg/hgrc
+
+# Empty the current MQ patch.
+qempty = !$HG qrefresh -X `$HG root`
+
+# Commit under any applied MQ patches, and go back to where you were after doing so.
+# `hg ciunder` will use `$EDITOR` to get the commit message
+# `hg cmunder 'message'` takes it on the command line
+ciunder = !HG_CUR_PATCH=`$HG qtop --color=never` && \
+           $HG qnew temp-for-under && \
+           $HG qpop -a && \
+           $HG qpush --move temp-for-under && \
+           $HG qrefresh -e && \
+           $HG qfinish temp-for-under && \
+           $HG qpush $HG_CUR_PATCH
+cmunder = !HG_CUR_PATCH=`$HG qtop --color=never` && \
+           $HG qnew temp-for-under && \
+           $HG qpop -a && \
+           $HG qpush --move temp-for-under && \
+           $HG qrefresh -m "$@" && \
+           $HG qfinish temp-for-under && \
+           $HG qpush $HG_CUR_PATCH
+
+# Edit the current repo's hgrc file.
+erc = !$EDITOR `$HG root`/.hg/hgrc
+
+# Simple bug/todo tracking
+# Idea from Justin: http://gist.github.com/464871
+# Install t first: http://bitbucket.org/sjl/t/
+bug = !~/lib/t/t.py --task-dir="`$HG root`" --list=BUGS $@
+todo = !~/lib/t/t.py --task-dir="`$HG root`" --list=TODO $@
+
+# Easily add ignore patterns to .hgignore and commit.
+ignore = ![ -n "$@" ] && echo '$@' >> `$HG root`/.hgignore && \
+          $HG commit `$HG root`/.hgignore -Am 'Add "$@" to .hgignore.'
+
+# Show in MacVim
+vshow = !$HG show $@ | mvim -c ':AnsiEsc' -c 'setlocal buftype=nofile' -
+
+# Ack for non-ignored files
+ack = !$HG locate "set:not ignored()" | xargs ack $@
+grep-wdir = !$HG locate "set:not ignored()" | xargs grep $@
+
+# Run hg commands on all subrepos at once.
+subs  = !"$HG" debugsub | grep '^path' | cut -d' ' -f2 | xargs    -n1  -I SUB $HG -R "`$HG root`/SUB" $@
+psubs = !"$HG" debugsub | grep '^path' | cut -d' ' -f2 | parallel -j10 -I SUB $HG -R "`$HG root`/SUB" $@
+
+# Run shell commands on all subrepos at once.
+subscmd  = !"$HG" debugsub | grep '^path' | cut -d' ' -f2 | xargs    -n1  -I SUB sh -c "cd `$HG root`/SUB && $@"
+psubscmd = !"$HG" debugsub | grep '^path' | cut -d' ' -f2 | parallel -j10 -I SUB sh -c "cd `$HG root`/SUB && $@"
+
+# Run a command on a subrepo:
+#
+#     hg sub SUBREPO_REGEX ...command and arguments...
+#
+# The SUBREPO_REGEX should be a regex that will let grep match one and only one of
+# the subrepos in .hgsub.  For example:
+#
+#     $ cat .hgsub
+#     bundled/foo = ...
+#     bundled/bar = ...
+#
+#     $ hg sub fo root
+#     .../bundled/foo
+#     $ hg sub ar status -m
+#     M lol.py
+sub = !grep = "`$HG root`/.hgsub" | cut -d' ' -f1 | grep "$1" | tr -d '\n ' | xargs -0 -I SUB $HG -R SUB $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20
+
+# Local settings
+%include ~/.hgrc_local
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/offlinimaprc	Fri Apr 13 15:23:33 2012 -0400
@@ -0,0 +1,30 @@
+[general]
+ui = TTY.TTYUI
+accounts = SteveLosh
+pythonfile=~/.mutt/offlineimap.py
+
+[Account SteveLosh]
+localrepository = SteveLosh-Local
+remoterepository = SteveLosh-Remote
+
+[Repository SteveLosh-Local]
+type = Maildir
+localfolders = ~/.mail/steve-stevelosh.com
+
+[Repository SteveLosh-Remote]
+type = Gmail
+remoteuser = steve@stevelosh.com
+remotepasseval = get_keychain_pass(account="steve@stevelosh.com", server="imap.gmail.com")
+realdelete = no
+nametrans = lambda folder: re.sub('.*Drafts$', 'drafts',
+                           re.sub('.*Sent Mail$', 'sent',
+                           re.sub('.*Starred$', 'flagged',
+                           re.sub('.*Trash$', 'trash',
+                           re.sub('.*All Mail$', 'archive',
+                           folder)))))
+folderfilter = lambda folder: folder not in ['[Gmail]/Trash',
+                                             'Nagios',
+                                             'Flask',
+                                             '[Gmail]/Important',
+                                             '[Gmail]/Spam',
+                                             ]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pentadactylrc	Fri Apr 13 15:23:33 2012 -0400
@@ -0,0 +1,62 @@
+"1.0b3 (created: 2010/11/06 12:31:35)
+
+highlight Hint       font-size: 14px; background: rgba(210,1,133,0.8) !important; border: 2px solid rgb(165,1,105); padding: 4px; border-radius: 3px; font-weight: bold; margin-left: -25px; color: white; font-family: Helvetica; line-height:1em;
+highlight HintActive background: rgba(145,197,43,0.8)    !important;
+highlight HintElem   background: rgba(255, 209, 20, 0.7) !important;
+highlight StatusLine -moz-appearance: none !important; font-weight: bold; background: transparent !important; border: 0px !important; min-height: 22px !important; text-shadow: none !important; font: normal 16px/1 'Menlo' !important; padding: 3px 0px 3px 5px !important;
+highlight CmdLine    padding: 1px !important; font: normal 16px 'Menlo' !important;
+highlight CmdOutput  font: normal 14px 'Menlo' !important;
+highlight CompItem   font: normal 14px 'Menlo' !important;
+
+highlight Find   background: #d6c149; color: #000;
+
+set runtimepath=/Users/sjl/.pentadactyl
+set editor='/usr/local/bin/mvim -f +<line> <file>'
+set followhints=1
+set showtabline=multitab
+set showstatuslinks=command
+
+set mapleader=','
+
+" FASTER PLEASE
+nnoremap j 3j
+nnoremap k 3k
+
+" Go to the second input field.
+" Useful for skipping over search fields, etc.
+nnoremap gI 2gi
+
+" I never use marks, but always use quickmarks.
+nnoremap "'" go
+nnoremap '"' gn
+
+" Switch tabs with parens
+nnoremap ) :tn<CR>
+nnoremap ( :tp<CR>
+
+" Finally I can overwrite the stupid fucking Firebug toggling correctly.
+" nnoremap <c-f> <f12>
+" nnoremap <c-g> <s-f12>
+
+" Console toggle
+nnoremap <c-g> <m-a-k><esc>
+inoremap <c-g> <esc><m-a-k><esc>
+
+" Inspect element toggle
+nnoremap <c-f> <m-a-i>
+inoremap <c-f> <esc><m-a-i>
+
+" Shift is hard.
+nnoremap ; :
+
+" YES YES YES REMOVE THE IDIOCY
+nnoremap <bs> <nop>
+
+" Highlight all search matches, not just the first.
+set hlfind
+
+" Clear search highlighting and normal highlighting.
+nnoremap <Leader><space> <esc>:noh<CR>
+
+" Shut up.
+javascript dactyl.beep = function() { return false; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/urlview	Fri Apr 13 15:23:33 2012 -0400
@@ -0,0 +1,1 @@
+COMMAND open %s
--- a/vim/.vimrc	Fri Apr 13 15:13:59 2012 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1668 +0,0 @@
-" .vimrc
-" Author: Steve Losh <steve@stevelosh.com>
-" Source: http://bitbucket.org/sjl/dotfiles/src/tip/vim/
-"
-" This file changes a lot.  I'll try to document pieces of it whenever I have
-" a few minutes to kill.
-
-" Preamble ---------------------------------------------------------------- {{{
-
-filetype off
-call pathogen#runtime_append_all_bundles()
-filetype plugin indent on
-set nocompatible
-
-" }}}
-" Basic options ----------------------------------------------------------- {{{
-
-set encoding=utf-8
-set modelines=0
-set autoindent
-set showmode
-set showcmd
-set hidden
-set visualbell
-set ttyfast
-set ruler
-set backspace=indent,eol,start
-set nonumber
-set norelativenumber
-set laststatus=2
-set history=1000
-set undofile
-set undoreload=10000
-set list
-set listchars=tab:▸\ ,eol:¬,extends:❯,precedes:❮
-set shell=/bin/bash
-set lazyredraw
-set matchtime=3
-set showbreak=↪
-set splitbelow
-set splitright
-set fillchars=diff:⣿,vert:│
-set autowrite
-set shiftround
-set autoread
-set title
-set linebreak
-set dictionary=/usr/share/dict/words
-set spellfile=~/.vim/custom-dictionary.utf-8.add
-set colorcolumn=+1
-
-" Time out on key codes but not mappings.
-" Basically this makes terminal Vim work sanely.
-set notimeout
-set ttimeout
-set ttimeoutlen=10
-
-" Make Vim able to edit crontab files again.
-set backupskip=/tmp/*,/private/tmp/*"
-
-" Better Completion
-set completeopt=longest,menuone,preview
-
-" Save when losing focus
-au FocusLost * :silent! wall
-
-" Resize splits when the window is resized
-au VimResized * :wincmd =
-
-" Cursorline {{{
-" Only show cursorline in the current window and in normal mode.
-
-augroup cline
-    au!
-    au WinLeave * set nocursorline
-    au WinEnter * set cursorline
-    au InsertEnter * set nocursorline
-    au InsertLeave * set cursorline
-augroup END
-
-" }}}
-" cpoptions+=J, dammit {{{
-
-" Something occasionally removes this.  If I manage to find it I'm going to
-" comment out the line and replace all its characters with 'FUCK'.
-augroup twospace
-    au!
-    au BufRead * :set cpoptions+=J
-augroup END
-
-" }}}
-" Trailing whitespace {{{
-" Only shown when not in insert mode so I don't go insane.
-
-augroup trailing
-    au!
-    au InsertEnter * :set listchars-=trail:⌴
-    au InsertLeave * :set listchars+=trail:⌴
-augroup END
-
-" }}}
-" Wildmenu completion {{{
-
-set wildmenu
-set wildmode=list:longest
-
-set wildignore+=.hg,.git,.svn                    " Version control
-set wildignore+=*.aux,*.out,*.toc                " LaTeX intermediate files
-set wildignore+=*.jpg,*.bmp,*.gif,*.png,*.jpeg   " binary images
-set wildignore+=*.o,*.obj,*.exe,*.dll,*.manifest " compiled object files
-set wildignore+=*.spl                            " compiled spelling word lists
-set wildignore+=*.sw?                            " Vim swap files
-set wildignore+=*.DS_Store                       " OSX bullshit
-
-set wildignore+=*.luac                           " Lua byte code
-
-set wildignore+=migrations                       " Django migrations
-set wildignore+=*.pyc                            " Python byte code
-
-set wildignore+=*.orig                           " Merge resolution files
-
-" Clojure/Leiningen
-set wildignore+=classes
-set wildignore+=lib
-
-" }}}
-" Line Return {{{
-
-" Make sure Vim returns to the same line when you reopen a file.
-" Thanks, Amit
-augroup line_return
-    au!
-    au BufReadPost *
-        \ if line("'\"") > 0 && line("'\"") <= line("$") |
-        \     execute 'normal! g`"zvzz' |
-        \ endif
-augroup END
-
-" }}}
-" Tabs, spaces, wrapping {{{
-
-set tabstop=8
-set shiftwidth=4
-set softtabstop=4
-set expandtab
-set wrap
-set textwidth=80
-set formatoptions=qrn1
-set colorcolumn=+1
-
-" }}}
-" Backups {{{
-
-set undodir=~/.vim/tmp/undo//     " undo files
-set backupdir=~/.vim/tmp/backup// " backups
-set directory=~/.vim/tmp/swap//   " swap files
-set backup                        " enable backups
-set noswapfile                    " It's 2012, Vim.
-
-" }}}
-" Leader {{{
-
-let mapleader = ","
-let maplocalleader = "\\"
-
-" }}}
-" Color scheme {{{
-
-syntax on
-set background=dark
-let g:badwolf_html_link_underline = 0
-colorscheme badwolf
-
-" Highlight VCS conflict markers
-match ErrorMsg '^\(<\|=\|>\)\{7\}\([^=].\+\)\?$'
-
-" }}}
-
-" }}}
-" Abbreviations ----------------------------------------------------------- {{{
-
-function! EatChar(pat)
-    let c = nr2char(getchar(0))
-    return (c =~ a:pat) ? '' : c
-endfunction
-
-function! MakeSpacelessIabbrev(from, to)
-    execute "iabbrev <silent> ".a:from." ".a:to."<C-R>=EatChar('\\s')<CR>"
-endfunction
-
-call MakeSpacelessIabbrev('sl/',  'http://stevelosh.com/')
-call MakeSpacelessIabbrev('bb/',  'http://bitbucket.org/')
-call MakeSpacelessIabbrev('bbs/', 'http://bitbucket.org/sjl/')
-call MakeSpacelessIabbrev('gh/',  'http://github.com/')
-call MakeSpacelessIabbrev('ghs/', 'http://github.com/sjl/')
-
-iabbrev ldis ಠ_ಠ
-iabbrev lsad ಥ_ಥ
-iabbrev lhap ಥ‿ಥ
-
-iabbrev sl@ steve@stevelosh.com
-iabbrev vrcf `~/.vimrc` file
-
-inoremap <c-l>a <c-k>a*
-inoremap <c-l>b <c-k>b*
-inoremap <c-l>g <c-k>g*
-inoremap <c-l>d <c-k>d*
-inoremap <c-l>e <c-k>e*
-inoremap <c-l>l <c-k>l*
-inoremap <c-l>y <c-k>y*
-inoremap <c-l>h <c-k>h*
-inoremap <c-l>m <c-k>m*
-inoremap <c-l>r <c-k>r*
-inoremap <c-l>p <c-k>p*
-inoremap <c-l>f <c-k>f*
-
-" }}}
-" Convenience mappings ---------------------------------------------------- {{{
-
-" Fuck you, help key.
-noremap  <F1> :set invfullscreen<CR>
-inoremap <F1> <ESC>:set invfullscreen<CR>a
-
-" Stop it, hash key.
-inoremap # X<BS>#
-
-" Kill window
-nnoremap K :q<cr>
-
-" Unfuck my screen
-nnoremap <leader>u :syntax sync fromstart<cr>:redraw!<cr>
-
-" System clipboard interaction
-" From https://github.com/henrik/dotfiles/blob/master/vim/config/mappings.vim
-noremap <leader>y "*y
-noremap <leader>p :set paste<CR>"*p<CR>:set nopaste<CR>
-noremap <leader>P :set paste<CR>"*P<CR>:set nopaste<CR>
-
-" I constantly hit "u" in visual mode when I mean to "y". Use "gu" for those rare occasions.
-" From https://github.com/henrik/dotfiles/blob/master/vim/config/mappings.vim
-vnoremap u <nop>
-vnoremap gu u
-
-" For some reason ctags refuses to ignore Python variables, so I'll just hack
-" the tags file with sed and strip them out myself.
-"
-" Sigh.
-nnoremap <leader><cr> :silent !/usr/local/bin/ctags -R . && sed -i .bak -E -e '/^[^	]+	[^	]+.py	.+v$/d' tags<cr>:redraw!<cr>
-
-" Highlight Group(s)
-nnoremap <F8> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<'
-                        \ . synIDattr(synID(line("."),col("."),0),"name") . "> lo<"
-                        \ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR>
-
-" Clean trailing whitespace
-nnoremap <leader>w mz:%s/\s\+$//<cr>:let @/=''<cr>`z
-
-" Send visual selection to gist.github.com as a private, filetyped Gist
-" Requires the gist command line too (brew install gist)
-" vnoremap <leader>G :w !gist -p -t %:e \| pbcopy<cr>
-" vnoremap <leader>UG :w !gist -p \| pbcopy<cr>
-
-" Send visual selection to paste.stevelosh.com
-vnoremap <c-p> :w !curl -sF 'sprunge=<-' 'http://paste.stevelosh.com' \| tr -d '\n ' \| pbcopy && open `pbpaste`<cr>
-
-" Make backspace work sanely in visual mode
-vnoremap <bs> x
-
-" Select entire buffer
-vnoremap vaa ggvGg_
-vnoremap Vaa ggVG
-
-" Change case
-inoremap <C-u> <esc>gUiwea
-
-" Emacs bindings in command line mode
-cnoremap <c-a> <home>
-cnoremap <c-e> <end>
-
-" Diffoff
-nnoremap <leader>D :diffoff!<cr>
-
-" Formatting, TextMate-style
-nnoremap Q gqip
-vnoremap Q gq
-
-" Easier linewise reselection
-nnoremap <leader>V V`]
-
-" Keep the cursor in place while joining limes
-nnoremap J mzJ`z
-
-" Split line (sister to [J]oin lines)
-" The normal use of S is covered by cc, so don't worry about shadowing it.
-nnoremap S i<cr><esc><right>mwgk:silent! s/\v +$//<cr>:noh<cr>`w
-
-" HTML tag closing
-inoremap <C-_> <Space><BS><Esc>:call InsertCloseTag()<cr>a
-
-" Less chording
-nnoremap ; :
-
-" Cmdheight switching
-nnoremap <leader>1 :set cmdheight=1<cr>
-nnoremap <leader>2 :set cmdheight=2<cr>
-
-" Source
-vnoremap <leader>S y:execute @@<cr>:echo 'Sourced selection.'<cr>
-nnoremap <leader>S ^vg_y:execute @@<cr>:echo 'Sourced line.'<cr>
-
-" Marks and Quotes
-noremap ' `
-noremap æ '
-noremap ` <C-^>
-
-" Select (charwise) the contents of the current line, excluding indentation.
-" Great for pasting Python lines into REPLs.
-nnoremap vv ^vg_
-
-" Sudo to write
-cnoremap w!! w !sudo tee % >/dev/null
-
-" Typos
-command! -bang E e<bang>
-command! -bang Q q<bang>
-command! -bang W w<bang>
-command! -bang QA qa<bang>
-command! -bang Qa qa<bang>
-command! -bang Wa wa<bang>
-command! -bang WA wa<bang>
-command! -bang Wq wq<bang>
-command! -bang WQ wq<bang>
-
-" I suck at typing.
-nnoremap <localleader>= ==
-vnoremap - =
-
-" Toggle paste
-set pastetoggle=<F6>
-
-" Toggle [i]nvisible characters
-nnoremap <leader>i :set list!<cr>
-
-" Drag Lines {{{
-
-" <m-j> and <m-k> to drag lines in any mode
-noremap ∆ :m+<CR>
-noremap ˚ :m-2<CR>
-inoremap ∆ <Esc>:m+<CR>
-inoremap ˚ <Esc>:m-2<CR>
-vnoremap ∆ :m'>+<CR>gv
-vnoremap ˚ :m-2<CR>gv
-
-" }}}
-" Easy filetype switching {{{
-
-nnoremap _md :set ft=markdown<CR>
-nnoremap _hd :set ft=htmldjango<CR>
-nnoremap _jt :set ft=htmljinja<CR>
-nnoremap _js :set ft=javascript<CR>
-nnoremap _cw :set ft=confluencewiki<CR>
-nnoremap _pd :set ft=python.django<CR>
-nnoremap _d  :set ft=diff<CR>
-
-" }}}
-" Insert Mode Completion {{{
-
-inoremap <c-l><c-l> <c-x><c-l>
-inoremap <c-f> <c-x><c-f>
-inoremap <c-]> <c-x><c-]>
-
-" }}}
-" Quick editing {{{
-
-nnoremap <leader>ev :vsplit $MYVIMRC<cr>
-nnoremap <leader>es :vsplit ~/.vim/snippets/<cr>
-nnoremap <leader>ed :vsplit ~/.vim/custom-dictionary.utf-8.add<cr>
-nnoremap <leader>eo :vsplit ~/Dropbox/Org<cr>4j
-nnoremap <leader>eh :vsplit ~/.hgrc<cr>
-nnoremap <leader>ep :vsplit ~/.pentadactylrc<cr>
-nnoremap <leader>em :vsplit ~/.mutt/muttrc<cr>
-nnoremap <leader>ez :vsplit ~/lib/dotfiles/zsh<cr>4j
-nnoremap <leader>ek :vsplit ~/lib/dotfiles/keymando/keymandorc.rb<cr>
-nnoremap <leader>et :vsplit ~/.tmux.conf<cr>
-
-" }}}
-
-" }}}
-" Searching and movement -------------------------------------------------- {{{
-
-" Use sane regexes.
-nnoremap / /\v
-vnoremap / /\v
-
-set ignorecase
-set smartcase
-set incsearch
-set showmatch
-set hlsearch
-set gdefault
-
-set scrolloff=3
-set sidescroll=1
-set sidescrolloff=10
-
-set virtualedit+=block
-
-noremap <leader><space> :noh<cr>:call clearmatches()<cr>
-
-runtime macros/matchit.vim
-map <tab> %
-
-" Made D behave
-nnoremap D d$
-
-" Don't move on *
-nnoremap * *<c-o>
-
-" Keep search matches in the middle of the window.
-nnoremap n nzzzv
-nnoremap N Nzzzv
-
-" Same when jumping around
-nnoremap g; g;zz
-nnoremap g, g,zz
-
-" Easier to type, and I never use the default behavior.
-noremap H ^
-noremap L $
-vnoremap L g_
-
-" Heresy
-inoremap <c-a> <esc>I
-inoremap <c-e> <esc>A
-
-" Open a Quickfix window for the last search.
-nnoremap <silent> <leader>? :execute 'vimgrep /'.@/.'/g %'<CR>:copen<CR>
-
-" Ack for the last search.
-nnoremap <silent> <leader>/ :execute "Ack! '" . substitute(substitute(substitute(@/, "\\\\<", "\\\\b", ""), "\\\\>", "\\\\b", ""), "\\\\v", "", "") . "'"<CR>
-
-" Fix linewise visual selection of various text objects
-nnoremap VV V
-nnoremap Vit vitVkoj
-nnoremap Vat vatV
-nnoremap Vab vabV
-nnoremap VaB vaBV
-
-" Toggle "keep current line in the center of the screen" mode
-nnoremap <leader>C :let &scrolloff=999-&scrolloff<cr>
-
-" Directional Keys {{{
-
-" It's 2012.
-noremap j gj
-noremap k gk
-noremap gj j
-noremap gk k
-
-" Easy buffer navigation
-noremap <C-h> <C-w>h
-noremap <C-j> <C-w>j
-noremap <C-k> <C-w>k
-noremap <C-l> <C-w>l
-
-noremap <leader>v <C-w>v
-
-" }}}
-" Highlight word {{{
-
-nnoremap <silent> <leader>hh :execute 'match InterestingWord1 /\<<c-r><c-w>\>/'<cr>
-nnoremap <silent> <leader>h1 :execute 'match InterestingWord1 /\<<c-r><c-w>\>/'<cr>
-nnoremap <silent> <leader>h2 :execute '2match InterestingWord2 /\<<c-r><c-w>\>/'<cr>
-nnoremap <silent> <leader>h3 :execute '3match InterestingWord3 /\<<c-r><c-w>\>/'<cr>
-
-" }}}
-" Visual Mode */# from Scrooloose {{{
-
-function! s:VSetSearch()
-  let temp = @@
-  norm! gvy
-  let @/ = '\V' . substitute(escape(@@, '\'), '\n', '\\n', 'g')
-  let @@ = temp
-endfunction
-
-vnoremap * :<C-u>call <SID>VSetSearch()<CR>//<CR><c-o>
-vnoremap # :<C-u>call <SID>VSetSearch()<CR>??<CR><c-o>
-
-" }}}
-" List navigation {{{
-
-nnoremap <left>  :cprev<cr>zvzz
-nnoremap <right> :cnext<cr>zvzz
-nnoremap <up>    :lprev<cr>zvzz
-nnoremap <down>  :lnext<cr>zvzz
-
-" }}}
-
-" }}}
-" Folding ----------------------------------------------------------------- {{{
-
-set foldlevelstart=0
-
-" Space to toggle folds.
-nnoremap <Space> za
-vnoremap <Space> za
-
-" Make zO recursively open whatever top level fold we're in, no matter where the
-" cursor happens to be.
-nnoremap zO zCzO
-
-function! MyFoldText() " {{{
-    let line = getline(v:foldstart)
-
-    let nucolwidth = &fdc + &number * &numberwidth
-    let windowwidth = winwidth(0) - nucolwidth - 3
-    let foldedlinecount = v:foldend - v:foldstart
-
-    " expand tabs into spaces
-    let onetab = strpart('          ', 0, &tabstop)
-    let line = substitute(line, '\t', onetab, 'g')
-
-    let line = strpart(line, 0, windowwidth - 2 -len(foldedlinecount))
-    let fillcharcount = windowwidth - len(line) - len(foldedlinecount)
-    return line . '…' . repeat(" ",fillcharcount) . foldedlinecount . '…' . ' '
-endfunction " }}}
-set foldtext=MyFoldText()
-
-" }}}
-" Filetype-specific ------------------------------------------------------- {{{
-
-" C {{{
-
-augroup ft_c
-    au!
-    au FileType c setlocal foldmethod=syntax
-augroup END
-
-" }}}
-" Clojure {{{
-
-let g:slimv_leader = '\'
-let g:slimv_keybindings = 2
-
-augroup ft_clojure
-    au!
-
-    au FileType clojure call TurnOnClojureFolding()
-    au FileType clojure compiler clojure
-    au FileType clojure setlocal report=100000
-
-    au BufWinEnter            SLIMV.REPL setlocal nolist
-    au BufNewFile,BufReadPost SLIMV.REPL setlocal nowrap foldlevel=99
-    au BufNewFile,BufReadPost SLIMV.REPL nnoremap <buffer> A GA
-    au BufNewFile,BufReadPost SLIMV.REPL nnoremap <buffer> <localleader>R :emenu REPL.<Tab>
-
-    " Fix the eval mappings.
-    au FileType clojure nnoremap <buffer> <localleader>ef :<c-u>call SlimvEvalExp()<cr>
-    au FileType clojure nnoremap <buffer> <localleader>ee :<c-u>call SlimvEvalDefun()<cr>
-
-    " And the inspect mapping.
-    au FileType clojure nmap <buffer> \i \di
-
-    " Indent top-level form.
-    au FileType clojure nmap <buffer> <localleader>= v((((((((((((=%
-augroup END
-
-" }}}
-" Clojurescript {{{
-
-augroup ft_clojurescript
-    au!
-
-    au BufNewFile,BufRead *.cljs set filetype=clojurescript
-    au FileType clojurescript call TurnOnClojureFolding()
-
-    " Indent top-level form.
-    au FileType clojurescript nmap <buffer> <localleader>= v((((((((((((=%
-augroup END
-
-" }}}
-" Confluence {{{
-
-augroup ft_c
-    au!
-
-    au BufRead,BufNewFile *.confluencewiki setlocal filetype=confluencewiki
-
-    " Wiki pages should be soft-wrapped.
-    au FileType confluencewiki setlocal wrap linebreak nolist
-augroup END
-
-" }}}
-" Cram {{{
-
-let cram_fold=1
-
-augroup ft_cram
-    au!
-
-    au BufNewFile,BufRead *.t set filetype=cram
-    au Syntax cram setlocal foldlevel=1
-augroup END
-
-" }}}
-" CSS and LessCSS {{{
-
-augroup ft_css
-    au!
-
-    au BufNewFile,BufRead *.less setlocal filetype=less
-
-    au Filetype less,css setlocal foldmethod=marker
-    au Filetype less,css setlocal foldmarker={,}
-    au Filetype less,css setlocal omnifunc=csscomplete#CompleteCSS
-    au Filetype less,css setlocal iskeyword+=-
-
-    " Use <leader>S to sort properties.  Turns this:
-    "
-    "     p {
-    "         width: 200px;
-    "         height: 100px;
-    "         background: red;
-    "
-    "         ...
-    "     }
-    "
-    " into this:
-
-    "     p {
-    "         background: red;
-    "         height: 100px;
-    "         width: 200px;
-    "
-    "         ...
-    "     }
-    au BufNewFile,BufRead *.less,*.css nnoremap <buffer> <localleader>S ?{<CR>jV/\v^\s*\}?$<CR>k:sort<CR>:noh<CR>
-
-    " Make {<cr> insert a pair of brackets in such a way that the cursor is correctly
-    " positioned inside of them AND the following code doesn't get unfolded.
-    au BufNewFile,BufRead *.less,*.css inoremap <buffer> {<cr> {}<left><cr><space><space><space><space>.<cr><esc>kA<bs>
-augroup END
-
-" }}}
-" Django {{{
-
-augroup ft_django
-    au!
-
-    au BufNewFile,BufRead urls.py           setlocal nowrap
-    au BufNewFile,BufRead urls.py           normal! zR
-    au BufNewFile,BufRead dashboard.py      normal! zR
-    au BufNewFile,BufRead local_settings.py normal! zR
-
-    au BufNewFile,BufRead admin.py     setlocal filetype=python.django
-    au BufNewFile,BufRead urls.py      setlocal filetype=python.django
-    au BufNewFile,BufRead models.py    setlocal filetype=python.django
-    au BufNewFile,BufRead views.py     setlocal filetype=python.django
-    au BufNewFile,BufRead settings.py  setlocal filetype=python.django
-    au BufNewFile,BufRead settings.py  setlocal foldmethod=marker
-    au BufNewFile,BufRead forms.py     setlocal filetype=python.django
-    au BufNewFile,BufRead common_settings.py  setlocal filetype=python.django
-    au BufNewFile,BufRead common_settings.py  setlocal foldmethod=marker
-augroup END
-
-" }}}
-" Firefox {{{
-
-augroup ft_firefox
-    au!
-    au BufRead,BufNewFile ~/Library/Caches/*.html setlocal buftype=nofile
-augroup END
-
-" }}}
-" Fish {{{
-
-augroup ft_fish
-    au!
-
-    au BufNewFile,BufRead *.fish setlocal filetype=fish
-augroup END
-
-" }}}
-" Haskell {{{
-
-augroup ft_haskell
-    au!
-    au BufEnter *.hs compiler ghc
-augroup END
-
-" }}}
-" HTML and HTMLDjango {{{
-
-let g:html_indent_tags = ['p', 'li']
-
-augroup ft_html
-    au!
-
-    au BufNewFile,BufRead *.html setlocal filetype=htmldjango
-    au FileType html,jinja,htmldjango setlocal foldmethod=manual
-
-    " Use <localleader>f to fold the current tag.
-    au FileType html,jinja,htmldjango nnoremap <buffer> <localleader>f Vatzf
-
-    " Use <localleader>t to fold the current templatetag.
-    au FileType html,jinja,htmldjango nmap <buffer> <localleader>t viikojozf
-
-    " Smarter pasting
-    au FileType html,jinja,htmldjango nnoremap <buffer> p :<C-U>YRPaste 'p'<CR>v`]=`]
-    au FileType html,jinja,htmldjango nnoremap <buffer> P :<C-U>YRPaste 'P'<CR>v`]=`]
-    au FileType html,jinja,htmldjango nnoremap <buffer> π :<C-U>YRPaste 'p'<CR>
-    au FileType html,jinja,htmldjango nnoremap <buffer> ∏ :<C-U>YRPaste 'P'<CR>
-
-    " Indent tag
-    au FileType html,jinja,htmldjango nnoremap <buffer> <localleader>= Vat=
-
-    " Django tags
-    au FileType jinja,htmldjango inoremap <buffer> <c-t> {%<space><space>%}<left><left><left>
-
-    " Django variables
-    au FileType jinja,htmldjango inoremap <buffer> <c-f> {{<space><space>}}<left><left><left>
-augroup END
-
-" }}}
-" Java {{{
-
-augroup ft_java
-    au!
-
-    au FileType java setlocal foldmethod=marker
-    au FileType java setlocal foldmarker={,}
-augroup END
-
-" }}}
-" Javascript {{{
-
-augroup ft_javascript
-    au!
-
-    au FileType javascript setlocal foldmethod=marker
-    au FileType javascript setlocal foldmarker={,}
-
-    " Make {<cr> insert a pair of brackets in such a way that the cursor is correctly
-    " positioned inside of them AND the following code doesn't get unfolded.
-    au Filetype javascript inoremap <buffer> {<cr> {}<left><cr><space><space><space><space>.<cr><esc>kA<bs>
-augroup END
-
-" }}}
-" Lisp {{{
-
-augroup ft_lisp
-    au!
-    au FileType lisp call TurnOnLispFolding()
-augroup END
-
-" }}}
-" Mail {{{
-
-augroup ft_mail
-    au!
-
-    au Filetype mail setlocal spell
-augroup END
-
-" }}}
-" Markdown {{{
-
-augroup ft_markdown
-    au!
-
-    au BufNewFile,BufRead *.m*down setlocal filetype=markdown
-
-    " Use <localleader>1/2/3 to add headings.
-    au Filetype markdown nnoremap <buffer> <localleader>1 yypVr=
-    au Filetype markdown nnoremap <buffer> <localleader>2 yypVr-
-    au Filetype markdown nnoremap <buffer> <localleader>3 I### <ESC>
-augroup END
-
-" }}}
-" Nginx {{{
-
-augroup ft_nginx
-    au!
-
-    au BufRead,BufNewFile /etc/nginx/conf/*                      set ft=nginx
-    au BufRead,BufNewFile /etc/nginx/sites-available/*           set ft=nginx
-    au BufRead,BufNewFile /usr/local/etc/nginx/sites-available/* set ft=nginx
-    au BufRead,BufNewFile vhost.nginx                            set ft=nginx
-
-    au FileType nginx setlocal foldmethod=marker foldmarker={,}
-augroup END
-
-" }}}
-" OrgMode {{{
-
-augroup ft_org
-    au!
-
-    au Filetype org nmap <buffer> Q vahjgq
-    au Filetype org setlocal nolist
-augroup END
-
-" }}}
-" Pentadactyl {{{
-
-augroup ft_pentadactyl
-    au!
-    au BufNewFile,BufRead .pentadactylrc set filetype=pentadactyl
-    au BufNewFile,BufRead ~/Library/Caches/TemporaryItems/pentadactyl-*.tmp set nolist wrap linebreak columns=100 colorcolumn=0
-augroup END
-
-" }}}
-" Puppet {{{
-
-augroup ft_puppet
-    au!
-
-    au Filetype puppet setlocal foldmethod=marker
-    au Filetype puppet setlocal foldmarker={,}
-augroup END
-
-" }}}
-" Python {{{
-
-augroup ft_python
-    au!
-
-    " au FileType python setlocal omnifunc=pythoncomplete#Complete
-    au FileType python setlocal define=^\s*\\(def\\\\|class\\)
-    au FileType python compiler nose
-    au FileType man nnoremap <buffer> <cr> :q<cr>
-
-    " Jesus tapdancing Christ, built-in Python syntax, you couldn't let me
-    " override this in a normal way, could you?
-    au FileType python if exists("python_space_error_highlight") | unlet python_space_error_highlight | endif
-
-    " Jesus, Python.  Five characters of punctuation for a damn string?
-    au FileType python inoremap <buffer> <c-g> _(u'')<left><left>
-
-    au FileType python inoremap <buffer> <c-b> """"""<left><left><left>
-augroup END
-
-" }}}
-" QuickFix {{{
-
-augroup ft_quickfix
-    au!
-    au Filetype qf setlocal colorcolumn=0 nolist nocursorline nowrap tw=0
-augroup END
-
-" }}}
-" ReStructuredText {{{
-
-augroup ft_rest
-    au!
-
-    au Filetype rst nnoremap <buffer> <localleader>1 yypVr=
-    au Filetype rst nnoremap <buffer> <localleader>2 yypVr-
-    au Filetype rst nnoremap <buffer> <localleader>3 yypVr~
-    au Filetype rst nnoremap <buffer> <localleader>4 yypVr`
-augroup END
-
-" }}}
-" Ruby {{{
-
-augroup ft_ruby
-    au!
-    au Filetype ruby setlocal foldmethod=syntax
-augroup END
-
-" }}}
-" Vagrant {{{
-
-augroup ft_vagrant
-    au!
-    au BufRead,BufNewFile Vagrantfile set ft=ruby
-augroup END
-
-" }}}
-" Vim {{{
-
-augroup ft_vim
-    au!
-
-    au FileType vim setlocal foldmethod=marker
-    au FileType help setlocal textwidth=78
-    au BufWinEnter *.txt if &ft == 'help' | wincmd L | endif
-augroup END
-
-" }}}
-
-" }}}
-" Plugin settings --------------------------------------------------------- {{{
-
-" Ack {{{
-
-nnoremap <leader>a :Ack!<space>
-
-" }}}
-" Autoclose {{{
-
-nmap <Leader>x <Plug>ToggleAutoCloseMappings
-
-" }}}
-" Clam {{{
-
-nnoremap ! :Clam<space>
-vnoremap ! :ClamVisual<space>
-let g:clam_autoreturn = 1
-let g:clam_debug = 1
-
-" }}}
-" Commentary {{{
-
-nmap <leader>c <Plug>CommentaryLine
-xmap <leader>c <Plug>Commentary
-
-augroup plugin_commentary
-    au!
-    au FileType htmldjango setlocal commentstring={#\ %s\ #}
-    au FileType clojurescript setlocal commentstring=;\ %s
-augroup END
-
-" }}}
-" Ctrl-P {{{
-
-let g:ctrlp_dont_split = 'NERD_tree_2'
-let g:ctrlp_jump_to_buffer = 0
-let g:ctrlp_map = '<leader>,'
-let g:ctrlp_working_path_mode = 0
-let g:ctrlp_match_window_reversed = 1
-let g:ctrlp_split_window = 0
-let g:ctrlp_max_height = 20
-let g:ctrlp_extensions = ['tag']
-
-let g:ctrlp_prompt_mappings = {
-\ 'PrtSelectMove("j")':   ['<c-j>', '<down>', '<s-tab>'],
-\ 'PrtSelectMove("k")':   ['<c-k>', '<up>', '<tab>'],
-\ 'PrtHistory(-1)':       ['<c-n>'],
-\ 'PrtHistory(1)':        ['<c-p>'],
-\ 'ToggleFocus()':        ['<c-tab>'],
-\ }
-
-let ctrlp_filter_greps = "".
-    \ "egrep -iv '\\.(" .
-    \ "jar|class|swp|swo|log|so|o|pyc|jpe?g|png|gif|mo|po" .
-    \ ")$' | " .
-    \ "egrep -v '^(\\./)?(" .
-    \ "deploy/|lib/|classes/|libs/|deploy/vendor/|.git/|.hg/|.svn/|.*migrations/" .
-    \ ")'"
-
-let my_ctrlp_user_command = "" .
-    \ "find %s '(' -type f -or -type l ')' -maxdepth 15 -not -path '*/\\.*/*' | " .
-    \ ctrlp_filter_greps
-
-let my_ctrlp_git_command = "" .
-    \ "cd %s && git ls-files | " .
-    \ ctrlp_filter_greps
-
-let g:ctrlp_user_command = ['.git/', my_ctrlp_git_command, my_ctrlp_user_command]
-
-nnoremap <leader>. :CtrlPTag<cr>
-
-" }}}
-" Easymotion {{{
-
-let g:EasyMotion_do_mapping = 0
-
-nnoremap <silent> <Leader>f      :call EasyMotion#F(0, 0)<CR>
-onoremap <silent> <Leader>f      :call EasyMotion#F(0, 0)<CR>
-vnoremap <silent> <Leader>f :<C-U>call EasyMotion#F(1, 0)<CR>
-
-nnoremap <silent> <Leader>F      :call EasyMotion#F(0, 1)<CR>
-onoremap <silent> <Leader>F      :call EasyMotion#F(0, 1)<CR>
-vnoremap <silent> <Leader>F :<C-U>call EasyMotion#F(1, 1)<CR>
-
-onoremap <silent> <Leader>t      :call EasyMotion#T(0, 0)<CR>
-onoremap <silent> <Leader>T      :call EasyMotion#T(0, 1)<CR>
-
-" }}}
-" Fugitive {{{
-
-nnoremap <leader>gd :Gdiff<cr>
-nnoremap <leader>gs :Gstatus<cr>
-nnoremap <leader>gw :Gwrite<cr>
-nnoremap <leader>ga :Gadd<cr>
-nnoremap <leader>gb :Gblame<cr>
-nnoremap <leader>gco :Gcheckout<cr>
-nnoremap <leader>gci :Gcommit<cr>
-nnoremap <leader>gm :Gmove<cr>
-nnoremap <leader>gr :Gremove<cr>
-nnoremap <leader>gl :Shell git gl -18<cr>:wincmd \|<cr>
-
-augroup ft_fugitive
-    au!
-
-    au BufNewFile,BufRead .git/index setlocal nolist
-augroup END
-
-" "Hub"
-nnoremap <leader>H :Gbrowse<cr>
-vnoremap <leader>H :Gbrowse<cr>
-
-" }}}
-" Gundo {{{
-
-nnoremap <F5> :GundoToggle<CR>
-
-let g:gundo_debug = 1
-let g:gundo_preview_bottom = 1
-let g:gundo_tree_statusline = "Gundo"
-let g:gundo_preview_statusline = "Gundo Preview"
-
-" }}}
-" Haskellmode {{{
-
-let g:haddock_browser = "open"
-let g:haddock_browser_callformat = "%s %s"
-let g:ghc = "/usr/local/bin/ghc"
-
-" }}}
-" HTML5 {{{
-
-let g:event_handler_attributes_complete = 0
-let g:rdfa_attributes_complete = 0
-let g:microdata_attributes_complete = 0
-let g:atia_attributes_complete = 0
-
-" }}}
-" Linediff {{{
-
-vnoremap <leader>l :Linediff<cr>
-nnoremap <leader>L :LinediffReset<cr>
-
-" }}}
-" Lisp (built-in) {{{
-
-let g:lisp_rainbow = 1
-
-" }}}
-" Makegreen {{{
-
-nnoremap \| :call MakeGreen('')<cr>
-
-" }}}
-" NERD Tree {{{
-
-noremap  <F2> :NERDTreeToggle<cr>
-inoremap <F2> <esc>:NERDTreeToggle<cr>
-
-augroup ps_nerdtree
-    au!
-
-    au Filetype nerdtree setlocal nolist
-    au Filetype nerdtree nnoremap <buffer> K :q<cr>
-augroup END
-
-let NERDTreeHighlightCursorline = 1
-let NERDTreeIgnore = ['.vim$', '\~$', '.*\.pyc$', 'pip-log\.txt$', 'whoosh_index',
-                    \ 'xapian_index', '.*.pid', 'monitor.py', '.*-fixtures-.*.json',
-                    \ '.*\.o$', 'db.db', 'tags.bak']
-
-let NERDTreeMinimalUI = 1
-let NERDTreeDirArrows = 1
-
-" }}}
-" OrgMode {{{
-
-let g:org_plugins = ['ShowHide', '|', 'Navigator', 'EditStructure', '|', 'Todo', 'Date', 'Misc']
-
-let g:org_todo_keywords = ['TODO', '|', 'DONE']
-
-let g:org_debug = 1
-
-" }}}
-" Powerline {{{
-
-let g:Powerline_symbols = 'fancy'
-let g:Powerline_cache_enabled = 1
-" let g:Powerline_colorscheme = 'badwolf'
-
-" }}}
-" Python-Mode {{{
-
-let g:pymode_doc = 1
-let g:pymode_doc_key = '<localleader>ds'
-let g:pydoc = 'pydoc'
-let g:pymode_syntax = 1
-let g:pymode_syntax_all = 0
-let g:pymode_syntax_builtin_objs = 1
-let g:pymode_syntax_print_as_function = 0
-let g:pymode_syntax_space_errors = 0
-let g:pymode_run = 0
-let g:pymode_lint = 0
-let g:pymode_breakpoint = 0
-let g:pymode_utils_whitespaces = 0
-let g:pymode_virtualenv = 0
-let g:pymode_folding = 0
-
-let g:pymode_options_indent = 0
-let g:pymode_options_fold = 0
-let g:pymode_options_other = 0
-
-let g:pymode_rope = 1
-let g:pymode_rope_global_prefix = "<localleader>R"
-let g:pymode_rope_local_prefix = "<localleader>r"
-let g:pymode_rope_auto_project = 1
-let g:pymode_rope_enable_autoimport = 0
-let g:pymode_rope_autoimport_generate = 1
-let g:pymode_rope_autoimport_underlineds = 0
-let g:pymode_rope_codeassist_maxfixes = 10
-let g:pymode_rope_sorted_completions = 1
-let g:pymode_rope_extended_complete = 1
-let g:pymode_rope_autoimport_modules = ["os", "shutil", "datetime"]
-let g:pymode_rope_confirm_saving = 1
-let g:pymode_rope_vim_completion = 1
-let g:pymode_rope_guess_project = 1
-let g:pymode_rope_goto_def_newwin = 0
-let g:pymode_rope_always_show_complete_menu = 0
-
-" }}}
-" Scratch {{{
-
-command! ScratchToggle call ScratchToggle()
-
-function! ScratchToggle()
-    if exists("w:is_scratch_window")
-        unlet w:is_scratch_window
-        exec "q"
-    else
-        exec "normal! :Sscratch\<cr>\<C-W>J:resize 13\<cr>"
-        let w:is_scratch_window = 1
-    endif
-endfunction
-
-nnoremap <silent> <leader><tab> :ScratchToggle<cr>
-
-" }}}
-" SLIMV {{{
-
-let g:slimv_repl_name = 'SLIMV.REPL'
-let g:slimv_repl_split = 4
-let g:slimv_repl_syntax = 0
-let g:slimv_repl_wrap = 0
-
-" Use a swank command that works, and doesn't require new app windows.
-let g:slimv_swank_clojure = '!dtach -n /tmp/dtach-swank.sock -r winch lein swank'
-
-" }}}}
-" Sparkup {{{
-
-let g:sparkupNextMapping = '<c-s>'
-
-"}}}
-" Supertab {{{
-
-let g:SuperTabDefaultCompletionType = "<c-n>"
-let g:SuperTabLongestHighlight = 1
-
-"}}}
-" Syntastic {{{
-
-let g:syntastic_enable_signs = 1
-let g:syntastic_check_on_open = 1
-let g:syntastic_disabled_filetypes = ['html', 'rst']
-let g:syntastic_stl_format = '[%E{%e Errors}%B{, }%W{%w Warnings}]'
-let g:syntastic_jsl_conf = '$HOME/.vim/jsl.conf'
-
-" }}}
-" Threesome {{{
-
-let g:threesome_leader = "-"
-
-let g:threesome_initial_mode = "grid"
-
-let g:threesome_initial_layout_grid = 1
-let g:threesome_initial_layout_loupe = 0
-let g:threesome_initial_layout_compare = 0
-let g:threesome_initial_layout_path = 0
-
-let g:threesome_initial_diff_grid = 1
-let g:threesome_initial_diff_loupe = 0
-let g:threesome_initial_diff_compare = 0
-let g:threesome_initial_diff_path = 0
-
-let g:threesome_initial_scrollbind_grid = 0
-let g:threesome_initial_scrollbind_loupe = 0
-let g:threesome_initial_scrollbind_compare = 0
-let g:threesome_initial_scrollbind_path = 0
-
-let g:threesome_wrap = "nowrap"
-
-" }}}
-" tslime {{{
-
-let g:tslime_ensure_trailing_newlines = 1
-let g:tslime_normal_mapping = '<localleader>t'
-let g:tslime_visual_mapping = '<localleader>t'
-let g:tslime_vars_mapping = '<localleader>T'
-
-" }}}
-" VimClojure {{{
-
-let vimclojure#HighlightBuiltins = 1
-let vimclojure#ParenRainbow = 1
-let vimclojure#WantNailgun = 0
-
-" }}}
-" YankRing {{{
-
-function! YRRunAfterMaps()
-    nnoremap Y :<C-U>YRYankCount 'y$'<CR>
-    omap <expr> L YRMapsExpression("", "$")
-    omap <expr> H YRMapsExpression("", "^")
-endfunction
-
-" }}}
-
-" }}}
-" Text objects ------------------------------------------------------------ {{{
-
-" Shortcut for [] {{{
-
-onoremap ir i[
-onoremap ar a[
-vnoremap ir i[
-vnoremap ar a[
-
-" }}}
-" Next and Last {{{
-
-" Motion for "next/last object". For example, "din(" would go to the next "()"
-" pair and delete its contents.
-
-onoremap an :<c-u>call <SID>NextTextObject('a', 'f')<cr>
-xnoremap an :<c-u>call <SID>NextTextObject('a', 'f')<cr>
-onoremap in :<c-u>call <SID>NextTextObject('i', 'f')<cr>
-xnoremap in :<c-u>call <SID>NextTextObject('i', 'f')<cr>
-
-onoremap al :<c-u>call <SID>NextTextObject('a', 'F')<cr>
-xnoremap al :<c-u>call <SID>NextTextObject('a', 'F')<cr>
-onoremap il :<c-u>call <SID>NextTextObject('i', 'F')<cr>
-xnoremap il :<c-u>call <SID>NextTextObject('i', 'F')<cr>
-
-function! s:NextTextObject(motion, dir)
-  let c = nr2char(getchar())
-
-  if c ==# "b"
-      let c = "("
-  elseif c ==# "B"
-      let c = "{"
-  elseif c ==# "r"
-      let c = "["
-  endif
-
-  exe "normal! ".a:dir.c."v".a:motion.c
-endfunction
-
-" }}}
-" Numbers {{{
-
-" Motion for numbers.  Great for CSS.  Lets you do things like this:
-"
-" margin-top: 200px; -> daN -> margin-top: px;
-"              ^                          ^
-" TODO: Handle floats.
-
-onoremap N :<c-u>call <SID>NumberTextObject(0)<cr>
-xnoremap N :<c-u>call <SID>NumberTextObject(0)<cr>
-onoremap aN :<c-u>call <SID>NumberTextObject(1)<cr>
-xnoremap aN :<c-u>call <SID>NumberTextObject(1)<cr>
-onoremap iN :<c-u>call <SID>NumberTextObject(1)<cr>
-xnoremap iN :<c-u>call <SID>NumberTextObject(1)<cr>
-
-function! s:NumberTextObject(whole)
-    normal! v
-
-    while getline('.')[col('.')] =~# '\v[0-9]'
-        normal! l
-    endwhile
-
-    if a:whole
-        normal! o
-
-        while col('.') > 1 && getline('.')[col('.') - 2] =~# '\v[0-9]'
-            normal! h
-        endwhile
-    endif
-endfunction
-
-" }}}
-
-" }}}
-" Mini-plugins ------------------------------------------------------------ {{{
-" Stuff that should probably be broken out into plugins, but hasn't proved to be
-" worth the time to do so just yet.
-
-" Synstack {{{
-
-" Show the stack of syntax hilighting classes affecting whatever is under the
-" cursor.
-function! SynStack()
-  echo join(map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")'), " > ")
-endfunc
-
-nnoremap <F7> :call SynStack()<CR>
-
-" }}}
-" Diffwhite Toggle {{{
-
-set diffopt-=iwhite
-let g:diffwhitespaceon = 1
-function! ToggleDiffWhitespace()
-    if g:diffwhitespaceon
-        set diffopt-=iwhite
-        let g:diffwhitespaceon = 0
-    else
-        set diffopt+=iwhite
-        let g:diffwhitespaceon = 1
-    endif
-    diffupdate
-endfunc
-
-nnoremap <leader>dw :call ToggleDiffWhitespace()<CR>
-
-" }}}
-" Error Toggles {{{
-
-command! ErrorsToggle call ErrorsToggle()
-function! ErrorsToggle() " {{{
-  if exists("w:is_error_window")
-    unlet w:is_error_window
-    exec "q"
-  else
-    exec "Errors"
-    lopen
-    let w:is_error_window = 1
-  endif
-endfunction " }}}
-
-command! -bang -nargs=? QFixToggle call QFixToggle(<bang>0)
-function! QFixToggle(forced) " {{{
-  if exists("g:qfix_win") && a:forced == 0
-    cclose
-    unlet g:qfix_win
-  else
-    copen 10
-    let g:qfix_win = bufnr("$")
-  endif
-endfunction " }}}
-
-nmap <silent> <f3> :ErrorsToggle<cr>
-nmap <silent> <f4> :QFixToggle<cr>
-
-" }}}
-" Fake Paredit {{{
-
-" TODO: Make this stuff not suck.
-nnoremap <leader>> xEp
-nnoremap <leader>< xgEp
-
-" }}}
-" Nyan! {{{
-
-function! NyanMe() " {{{
-    hi NyanFur             guifg=#BBBBBB
-    hi NyanPoptartEdge     guifg=#ffd0ac
-    hi NyanPoptartFrosting guifg=#fd3699 guibg=#fe98ff
-    hi NyanRainbow1        guifg=#6831f8
-    hi NyanRainbow2        guifg=#0099fc
-    hi NyanRainbow3        guifg=#3cfa04
-    hi NyanRainbow4        guifg=#fdfe00
-    hi NyanRainbow5        guifg=#fc9d00
-    hi NyanRainbow6        guifg=#fe0000
-
-
-    echohl NyanRainbow1
-    echon "≈"
-    echohl NyanRainbow2
-    echon "≋"
-    echohl NyanRainbow3
-    echon "≈"
-    echohl NyanRainbow4
-    echon "≋"
-    echohl NyanRainbow5
-    echon "≈"
-    echohl NyanRainbow6
-    echon "≋"
-    echohl NyanRainbow1
-    echon "≈"
-    echohl NyanRainbow2
-    echon "≋"
-    echohl NyanRainbow3
-    echon "≈"
-    echohl NyanRainbow4
-    echon "≋"
-    echohl NyanRainbow5
-    echon "≈"
-    echohl NyanRainbow6
-    echon "≋"
-    echohl None
-    echo ""
-
-    echohl NyanRainbow1
-    echon "≈"
-    echohl NyanRainbow2
-    echon "≋"
-    echohl NyanRainbow3
-    echon "≈"
-    echohl NyanRainbow4
-    echon "≋"
-    echohl NyanRainbow5
-    echon "≈"
-    echohl NyanRainbow6
-    echon "≋"
-    echohl NyanRainbow1
-    echon "≈"
-    echohl NyanRainbow2
-    echon "≋"
-    echohl NyanRainbow3
-    echon "≈"
-    echohl NyanRainbow4
-    echon "≋"
-    echohl NyanRainbow5
-    echon "≈"
-    echohl NyanRainbow6
-    echon "≋"
-    echohl NyanFur
-    echon "╰"
-    echohl NyanPoptartEdge
-    echon "⟨"
-    echohl NyanPoptartFrosting
-    echon "⣮⣯⡿"
-    echohl NyanPoptartEdge
-    echon "⟩"
-    echohl NyanFur
-    echon "⩾^ω^⩽"
-    echohl None
-    echo ""
-
-    echohl NyanRainbow1
-    echon "≈"
-    echohl NyanRainbow2
-    echon "≋"
-    echohl NyanRainbow3
-    echon "≈"
-    echohl NyanRainbow4
-    echon "≋"
-    echohl NyanRainbow5
-    echon "≈"
-    echohl NyanRainbow6
-    echon "≋"
-    echohl NyanRainbow1
-    echon "≈"
-    echohl NyanRainbow2
-    echon "≋"
-    echohl NyanRainbow3
-    echon "≈"
-    echohl NyanRainbow4
-    echon "≋"
-    echohl NyanRainbow5
-    echon "≈"
-    echohl NyanRainbow6
-    echon "≋"
-    echohl None
-    echon " "
-    echohl NyanFur
-    echon "”   ‟"
-    echohl None
-
-    sleep 1
-    redraw
-    echo " "
-    echo " "
-    echo "Noms?"
-    redraw
-endfunction " }}}
-command! NyanMe call NyanMe()
-
-" }}}
-" Hg {{{
-
-function! s:HgDiff() " {{{
-    diffthis
-
-    let fn = expand('%:p')
-    let ft = &ft
-
-    wincmd v
-    edit __hgdiff_orig__
-
-    setlocal buftype=nofile
-
-    normal ggdG
-    execute "silent r!hg cat --rev . " . fn
-    normal ggdd
-
-    execute "setlocal ft=" . ft
-
-    diffthis
-    diffupdate
-endfunction " }}}
-command! -nargs=0 HgDiff call s:HgDiff()
-nnoremap <leader>hd :HgDiff<cr>
-
-function! s:HgBlame() " {{{
-    let fn = expand('%:p')
-
-    wincmd v
-    wincmd h
-    edit __hgblame__
-    vertical resize 28
-
-    setlocal scrollbind winfixwidth nolist nowrap nonumber buftype=nofile ft=none
-
-    normal ggdG
-    execute "silent r!hg blame -undq " . fn
-    normal ggdd
-    execute ':%s/\v:.*$//'
-
-    wincmd l
-    setlocal scrollbind
-    syncbind
-endfunction " }}}
-command! -nargs=0 HgBlame call s:HgBlame()
-nnoremap <leader>hb :HgBlame<cr>
-
-" }}}
-" Ack motions {{{
-
-" Motions to Ack for things.  Works with pretty much everything, including:
-"
-"   w, W, e, E, b, B, t*, f*, i*, a*, and custom text objects
-"
-" Awesome.
-"
-" Note: If the text covered by a motion contains a newline it won't work.  Ack
-" searches line-by-line.
-
-nnoremap <silent> <leader>A :set opfunc=<SID>AckMotion<CR>g@
-xnoremap <silent> <leader>A :<C-U>call <SID>AckMotion(visualmode())<CR>
-
-function! s:CopyMotionForType(type)
-    if a:type ==# 'v'
-        silent execute "normal! `<" . a:type . "`>y"
-    elseif a:type ==# 'char'
-        silent execute "normal! `[v`]y"
-    endif
-endfunction
-
-function! s:AckMotion(type) abort
-    let reg_save = @@
-
-    call s:CopyMotionForType(a:type)
-
-    execute "normal! :Ack! --literal " . shellescape(@@) . "\<cr>"
-
-    let @@ = reg_save
-endfunction
-
-" }}}
-" Indent Guides {{{
-
-let g:indentguides_state = 0
-function! IndentGuides() " {{{
-    if g:indentguides_state
-        let g:indentguides_state = 0
-        2match None
-    else
-        let g:indentguides_state = 1
-        execute '2match IndentGuides /\%(\_^\s*\)\@<=\%(\%'.(0*&sw+1).'v\|\%'.(1*&sw+1).'v\|\%'.(2*&sw+1).'v\|\%'.(3*&sw+1).'v\|\%'.(4*&sw+1).'v\|\%'.(5*&sw+1).'v\|\%'.(6*&sw+1).'v\|\%'.(7*&sw+1).'v\)\s/'
-    endif
-endfunction " }}}
-hi def IndentGuides guibg=#303030
-nnoremap <leader>I :call IndentGuides()<cr>
-
-" }}}
-" Block Colors {{{
-
-let g:blockcolor_state = 0
-function! BlockColor() " {{{
-    if g:blockcolor_state
-        let g:blockcolor_state = 0
-        call matchdelete(77881)
-        call matchdelete(77882)
-        call matchdelete(77883)
-        call matchdelete(77884)
-        call matchdelete(77885)
-    else
-        let g:blockcolor_state = 1
-        call matchadd("BlockColor1", '^ \{4}.*', 1, 77881)
-        call matchadd("BlockColor2", '^ \{8}.*', 2, 77882)
-        call matchadd("BlockColor3", '^ \{12}.*', 3, 77883)
-        call matchadd("BlockColor4", '^ \{16}.*', 4, 77884)
-        call matchadd("BlockColor5", '^ \{20}.*', 5, 77885)
-    endif
-endfunction " }}}
-" Default highlights {{{
-hi def BlockColor1 guibg=#222222
-hi def BlockColor2 guibg=#2a2a2a
-hi def BlockColor3 guibg=#353535
-hi def BlockColor4 guibg=#3d3d3d
-hi def BlockColor5 guibg=#444444
-" }}}
-nnoremap <leader>B :call BlockColor()<cr>
-
-" }}}
-
-" }}}
-" Environments (GUI/Console) ---------------------------------------------- {{{
-
-if has('gui_running')
-    " GUI Vim
-
-    set guifont=Menlo\ Regular\ for\ Powerline:h12
-
-    " Remove all the UI cruft
-    set go-=T
-    set go-=l
-    set go-=L
-    set go-=r
-    set go-=R
-
-    highlight SpellBad term=underline gui=undercurl guisp=Orange
-
-    " Different cursors for different modes.
-    set guicursor=n-c:block-Cursor-blinkon0
-    set guicursor+=v:block-vCursor-blinkon0
-    set guicursor+=i-ci:ver20-iCursor
-
-    if has("gui_macvim")
-        " Full screen means FULL screen
-        set fuoptions=maxvert,maxhorz
-
-        " Use the normal HIG movements, except for M-Up/Down
-        let macvim_skip_cmd_opt_movement = 1
-        no   <D-Left>       <Home>
-        no!  <D-Left>       <Home>
-        no   <M-Left>       <C-Left>
-        no!  <M-Left>       <C-Left>
-
-        no   <D-Right>      <End>
-        no!  <D-Right>      <End>
-        no   <M-Right>      <C-Right>
-        no!  <M-Right>      <C-Right>
-
-        no   <D-Up>         <C-Home>
-        ino  <D-Up>         <C-Home>
-        imap <M-Up>         <C-o>{
-
-        no   <D-Down>       <C-End>
-        ino  <D-Down>       <C-End>
-        imap <M-Down>       <C-o>}
-
-        imap <M-BS>         <C-w>
-        inoremap <D-BS>     <esc>my0c`y
-    else
-        " Non-MacVim GUI, like Gvim
-    end
-else
-    " Console Vim
-    " For me, this means iTerm2, possibly through tmux
-
-    " Mouse support
-    set mouse=a
-endif
-
-" }}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vim/vimrc	Fri Apr 13 15:23:33 2012 -0400
@@ -0,0 +1,1668 @@
+" .vimrc
+" Author: Steve Losh <steve@stevelosh.com>
+" Source: http://bitbucket.org/sjl/dotfiles/src/tip/vim/
+"
+" This file changes a lot.  I'll try to document pieces of it whenever I have
+" a few minutes to kill.
+
+" Preamble ---------------------------------------------------------------- {{{
+
+filetype off
+call pathogen#runtime_append_all_bundles()
+filetype plugin indent on
+set nocompatible
+
+" }}}
+" Basic options ----------------------------------------------------------- {{{
+
+set encoding=utf-8
+set modelines=0
+set autoindent
+set showmode
+set showcmd
+set hidden
+set visualbell
+set ttyfast
+set ruler
+set backspace=indent,eol,start
+set nonumber
+set norelativenumber
+set laststatus=2
+set history=1000
+set undofile
+set undoreload=10000
+set list
+set listchars=tab:▸\ ,eol:¬,extends:❯,precedes:❮
+set shell=/bin/bash
+set lazyredraw
+set matchtime=3
+set showbreak=↪
+set splitbelow
+set splitright
+set fillchars=diff:⣿,vert:│
+set autowrite
+set shiftround
+set autoread
+set title
+set linebreak
+set dictionary=/usr/share/dict/words
+set spellfile=~/.vim/custom-dictionary.utf-8.add
+set colorcolumn=+1
+
+" Time out on key codes but not mappings.
+" Basically this makes terminal Vim work sanely.
+set notimeout
+set ttimeout
+set ttimeoutlen=10
+
+" Make Vim able to edit crontab files again.
+set backupskip=/tmp/*,/private/tmp/*"
+
+" Better Completion
+set completeopt=longest,menuone,preview
+
+" Save when losing focus
+au FocusLost * :silent! wall
+
+" Resize splits when the window is resized
+au VimResized * :wincmd =
+
+" Cursorline {{{
+" Only show cursorline in the current window and in normal mode.
+
+augroup cline
+    au!
+    au WinLeave * set nocursorline
+    au WinEnter * set cursorline
+    au InsertEnter * set nocursorline
+    au InsertLeave * set cursorline
+augroup END
+
+" }}}
+" cpoptions+=J, dammit {{{
+
+" Something occasionally removes this.  If I manage to find it I'm going to
+" comment out the line and replace all its characters with 'FUCK'.
+augroup twospace
+    au!
+    au BufRead * :set cpoptions+=J
+augroup END
+
+" }}}
+" Trailing whitespace {{{
+" Only shown when not in insert mode so I don't go insane.
+
+augroup trailing
+    au!
+    au InsertEnter * :set listchars-=trail:⌴
+    au InsertLeave * :set listchars+=trail:⌴
+augroup END
+
+" }}}
+" Wildmenu completion {{{
+
+set wildmenu
+set wildmode=list:longest
+
+set wildignore+=.hg,.git,.svn                    " Version control
+set wildignore+=*.aux,*.out,*.toc                " LaTeX intermediate files
+set wildignore+=*.jpg,*.bmp,*.gif,*.png,*.jpeg   " binary images
+set wildignore+=*.o,*.obj,*.exe,*.dll,*.manifest " compiled object files
+set wildignore+=*.spl                            " compiled spelling word lists
+set wildignore+=*.sw?                            " Vim swap files
+set wildignore+=*.DS_Store                       " OSX bullshit
+
+set wildignore+=*.luac                           " Lua byte code
+
+set wildignore+=migrations                       " Django migrations
+set wildignore+=*.pyc                            " Python byte code
+
+set wildignore+=*.orig                           " Merge resolution files
+
+" Clojure/Leiningen
+set wildignore+=classes
+set wildignore+=lib
+
+" }}}
+" Line Return {{{
+
+" Make sure Vim returns to the same line when you reopen a file.
+" Thanks, Amit
+augroup line_return
+    au!
+    au BufReadPost *
+        \ if line("'\"") > 0 && line("'\"") <= line("$") |
+        \     execute 'normal! g`"zvzz' |
+        \ endif
+augroup END
+
+" }}}
+" Tabs, spaces, wrapping {{{
+
+set tabstop=8
+set shiftwidth=4
+set softtabstop=4
+set expandtab
+set wrap
+set textwidth=80
+set formatoptions=qrn1
+set colorcolumn=+1
+
+" }}}
+" Backups {{{
+
+set undodir=~/.vim/tmp/undo//     " undo files
+set backupdir=~/.vim/tmp/backup// " backups
+set directory=~/.vim/tmp/swap//   " swap files
+set backup                        " enable backups
+set noswapfile                    " It's 2012, Vim.
+
+" }}}
+" Leader {{{
+
+let mapleader = ","
+let maplocalleader = "\\"
+
+" }}}
+" Color scheme {{{
+
+syntax on
+set background=dark
+let g:badwolf_html_link_underline = 0
+colorscheme badwolf
+
+" Highlight VCS conflict markers
+match ErrorMsg '^\(<\|=\|>\)\{7\}\([^=].\+\)\?$'
+
+" }}}
+
+" }}}
+" Abbreviations ----------------------------------------------------------- {{{
+
+function! EatChar(pat)
+    let c = nr2char(getchar(0))
+    return (c =~ a:pat) ? '' : c
+endfunction
+
+function! MakeSpacelessIabbrev(from, to)
+    execute "iabbrev <silent> ".a:from." ".a:to."<C-R>=EatChar('\\s')<CR>"
+endfunction
+
+call MakeSpacelessIabbrev('sl/',  'http://stevelosh.com/')
+call MakeSpacelessIabbrev('bb/',  'http://bitbucket.org/')
+call MakeSpacelessIabbrev('bbs/', 'http://bitbucket.org/sjl/')
+call MakeSpacelessIabbrev('gh/',  'http://github.com/')
+call MakeSpacelessIabbrev('ghs/', 'http://github.com/sjl/')
+
+iabbrev ldis ಠ_ಠ
+iabbrev lsad ಥ_ಥ
+iabbrev lhap ಥ‿ಥ
+
+iabbrev sl@ steve@stevelosh.com
+iabbrev vrcf `~/.vimrc` file
+
+inoremap <c-l>a <c-k>a*
+inoremap <c-l>b <c-k>b*
+inoremap <c-l>g <c-k>g*
+inoremap <c-l>d <c-k>d*
+inoremap <c-l>e <c-k>e*
+inoremap <c-l>l <c-k>l*
+inoremap <c-l>y <c-k>y*
+inoremap <c-l>h <c-k>h*
+inoremap <c-l>m <c-k>m*
+inoremap <c-l>r <c-k>r*
+inoremap <c-l>p <c-k>p*
+inoremap <c-l>f <c-k>f*
+
+" }}}
+" Convenience mappings ---------------------------------------------------- {{{
+
+" Fuck you, help key.
+noremap  <F1> :set invfullscreen<CR>
+inoremap <F1> <ESC>:set invfullscreen<CR>a
+
+" Stop it, hash key.
+inoremap # X<BS>#
+
+" Kill window
+nnoremap K :q<cr>
+
+" Unfuck my screen
+nnoremap <leader>u :syntax sync fromstart<cr>:redraw!<cr>
+
+" System clipboard interaction
+" From https://github.com/henrik/dotfiles/blob/master/vim/config/mappings.vim
+noremap <leader>y "*y
+noremap <leader>p :set paste<CR>"*p<CR>:set nopaste<CR>
+noremap <leader>P :set paste<CR>"*P<CR>:set nopaste<CR>
+
+" I constantly hit "u" in visual mode when I mean to "y". Use "gu" for those rare occasions.
+" From https://github.com/henrik/dotfiles/blob/master/vim/config/mappings.vim
+vnoremap u <nop>
+vnoremap gu u
+
+" For some reason ctags refuses to ignore Python variables, so I'll just hack
+" the tags file with sed and strip them out myself.
+"
+" Sigh.
+nnoremap <leader><cr> :silent !/usr/local/bin/ctags -R . && sed -i .bak -E -e '/^[^	]+	[^	]+.py	.+v$/d' tags<cr>:redraw!<cr>
+
+" Highlight Group(s)
+nnoremap <F8> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<'
+                        \ . synIDattr(synID(line("."),col("."),0),"name") . "> lo<"
+                        \ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR>
+
+" Clean trailing whitespace
+nnoremap <leader>w mz:%s/\s\+$//<cr>:let @/=''<cr>`z
+
+" Send visual selection to gist.github.com as a private, filetyped Gist
+" Requires the gist command line too (brew install gist)
+" vnoremap <leader>G :w !gist -p -t %:e \| pbcopy<cr>
+" vnoremap <leader>UG :w !gist -p \| pbcopy<cr>
+
+" Send visual selection to paste.stevelosh.com
+vnoremap <c-p> :w !curl -sF 'sprunge=<-' 'http://paste.stevelosh.com' \| tr -d '\n ' \| pbcopy && open `pbpaste`<cr>
+
+" Make backspace work sanely in visual mode
+vnoremap <bs> x
+
+" Select entire buffer
+vnoremap vaa ggvGg_
+vnoremap Vaa ggVG
+
+" Change case
+inoremap <C-u> <esc>gUiwea
+
+" Emacs bindings in command line mode
+cnoremap <c-a> <home>
+cnoremap <c-e> <end>
+
+" Diffoff
+nnoremap <leader>D :diffoff!<cr>
+
+" Formatting, TextMate-style
+nnoremap Q gqip
+vnoremap Q gq
+
+" Easier linewise reselection
+nnoremap <leader>V V`]
+
+" Keep the cursor in place while joining limes
+nnoremap J mzJ`z
+
+" Split line (sister to [J]oin lines)
+" The normal use of S is covered by cc, so don't worry about shadowing it.
+nnoremap S i<cr><esc><right>mwgk:silent! s/\v +$//<cr>:noh<cr>`w
+
+" HTML tag closing
+inoremap <C-_> <Space><BS><Esc>:call InsertCloseTag()<cr>a
+
+" Less chording
+nnoremap ; :
+
+" Cmdheight switching
+nnoremap <leader>1 :set cmdheight=1<cr>
+nnoremap <leader>2 :set cmdheight=2<cr>
+
+" Source
+vnoremap <leader>S y:execute @@<cr>:echo 'Sourced selection.'<cr>
+nnoremap <leader>S ^vg_y:execute @@<cr>:echo 'Sourced line.'<cr>
+
+" Marks and Quotes
+noremap ' `
+noremap æ '
+noremap ` <C-^>
+
+" Select (charwise) the contents of the current line, excluding indentation.
+" Great for pasting Python lines into REPLs.
+nnoremap vv ^vg_
+
+" Sudo to write
+cnoremap w!! w !sudo tee % >/dev/null
+
+" Typos
+command! -bang E e<bang>
+command! -bang Q q<bang>
+command! -bang W w<bang>
+command! -bang QA qa<bang>
+command! -bang Qa qa<bang>
+command! -bang Wa wa<bang>
+command! -bang WA wa<bang>
+command! -bang Wq wq<bang>
+command! -bang WQ wq<bang>
+
+" I suck at typing.
+nnoremap <localleader>= ==
+vnoremap - =
+
+" Toggle paste
+set pastetoggle=<F6>
+
+" Toggle [i]nvisible characters
+nnoremap <leader>i :set list!<cr>
+
+" Drag Lines {{{
+
+" <m-j> and <m-k> to drag lines in any mode
+noremap ∆ :m+<CR>
+noremap ˚ :m-2<CR>
+inoremap ∆ <Esc>:m+<CR>
+inoremap ˚ <Esc>:m-2<CR>
+vnoremap ∆ :m'>+<CR>gv
+vnoremap ˚ :m-2<CR>gv
+
+" }}}
+" Easy filetype switching {{{
+
+nnoremap _md :set ft=markdown<CR>
+nnoremap _hd :set ft=htmldjango<CR>
+nnoremap _jt :set ft=htmljinja<CR>
+nnoremap _js :set ft=javascript<CR>
+nnoremap _cw :set ft=confluencewiki<CR>
+nnoremap _pd :set ft=python.django<CR>
+nnoremap _d  :set ft=diff<CR>
+
+" }}}
+" Insert Mode Completion {{{
+
+inoremap <c-l><c-l> <c-x><c-l>
+inoremap <c-f> <c-x><c-f>
+inoremap <c-]> <c-x><c-]>
+
+" }}}
+" Quick editing {{{
+
+nnoremap <leader>ev :vsplit $MYVIMRC<cr>
+nnoremap <leader>es :vsplit ~/.vim/snippets/<cr>
+nnoremap <leader>ed :vsplit ~/.vim/custom-dictionary.utf-8.add<cr>
+nnoremap <leader>eo :vsplit ~/Dropbox/Org<cr>4j
+nnoremap <leader>eh :vsplit ~/.hgrc<cr>
+nnoremap <leader>ep :vsplit ~/.pentadactylrc<cr>
+nnoremap <leader>em :vsplit ~/.mutt/muttrc<cr>
+nnoremap <leader>ez :vsplit ~/lib/dotfiles/zsh<cr>4j
+nnoremap <leader>ek :vsplit ~/lib/dotfiles/keymando/keymandorc.rb<cr>
+nnoremap <leader>et :vsplit ~/.tmux.conf<cr>
+
+" }}}
+
+" }}}
+" Searching and movement -------------------------------------------------- {{{
+
+" Use sane regexes.
+nnoremap / /\v
+vnoremap / /\v
+
+set ignorecase
+set smartcase
+set incsearch
+set showmatch
+set hlsearch
+set gdefault
+
+set scrolloff=3
+set sidescroll=1
+set sidescrolloff=10
+
+set virtualedit+=block
+
+noremap <leader><space> :noh<cr>:call clearmatches()<cr>
+
+runtime macros/matchit.vim
+map <tab> %
+
+" Made D behave
+nnoremap D d$
+
+" Don't move on *
+nnoremap * *<c-o>
+
+" Keep search matches in the middle of the window.
+nnoremap n nzzzv
+nnoremap N Nzzzv
+
+" Same when jumping around
+nnoremap g; g;zz
+nnoremap g, g,zz
+
+" Easier to type, and I never use the default behavior.
+noremap H ^
+noremap L $
+vnoremap L g_
+
+" Heresy
+inoremap <c-a> <esc>I
+inoremap <c-e> <esc>A
+
+" Open a Quickfix window for the last search.
+nnoremap <silent> <leader>? :execute 'vimgrep /'.@/.'/g %'<CR>:copen<CR>
+
+" Ack for the last search.
+nnoremap <silent> <leader>/ :execute "Ack! '" . substitute(substitute(substitute(@/, "\\\\<", "\\\\b", ""), "\\\\>", "\\\\b", ""), "\\\\v", "", "") . "'"<CR>
+
+" Fix linewise visual selection of various text objects
+nnoremap VV V
+nnoremap Vit vitVkoj
+nnoremap Vat vatV
+nnoremap Vab vabV
+nnoremap VaB vaBV
+
+" Toggle "keep current line in the center of the screen" mode
+nnoremap <leader>C :let &scrolloff=999-&scrolloff<cr>
+
+" Directional Keys {{{
+
+" It's 2012.
+noremap j gj
+noremap k gk
+noremap gj j
+noremap gk k
+
+" Easy buffer navigation
+noremap <C-h> <C-w>h
+noremap <C-j> <C-w>j
+noremap <C-k> <C-w>k
+noremap <C-l> <C-w>l
+
+noremap <leader>v <C-w>v
+
+" }}}
+" Highlight word {{{
+
+nnoremap <silent> <leader>hh :execute 'match InterestingWord1 /\<<c-r><c-w>\>/'<cr>
+nnoremap <silent> <leader>h1 :execute 'match InterestingWord1 /\<<c-r><c-w>\>/'<cr>
+nnoremap <silent> <leader>h2 :execute '2match InterestingWord2 /\<<c-r><c-w>\>/'<cr>
+nnoremap <silent> <leader>h3 :execute '3match InterestingWord3 /\<<c-r><c-w>\>/'<cr>
+
+" }}}
+" Visual Mode */# from Scrooloose {{{
+
+function! s:VSetSearch()
+  let temp = @@
+  norm! gvy
+  let @/ = '\V' . substitute(escape(@@, '\'), '\n', '\\n', 'g')
+  let @@ = temp
+endfunction
+
+vnoremap * :<C-u>call <SID>VSetSearch()<CR>//<CR><c-o>
+vnoremap # :<C-u>call <SID>VSetSearch()<CR>??<CR><c-o>
+
+" }}}
+" List navigation {{{
+
+nnoremap <left>  :cprev<cr>zvzz
+nnoremap <right> :cnext<cr>zvzz
+nnoremap <up>    :lprev<cr>zvzz
+nnoremap <down>  :lnext<cr>zvzz
+
+" }}}
+
+" }}}
+" Folding ----------------------------------------------------------------- {{{
+
+set foldlevelstart=0
+
+" Space to toggle folds.
+nnoremap <Space> za
+vnoremap <Space> za
+
+" Make zO recursively open whatever top level fold we're in, no matter where the
+" cursor happens to be.
+nnoremap zO zCzO
+
+function! MyFoldText() " {{{
+    let line = getline(v:foldstart)
+
+    let nucolwidth = &fdc + &number * &numberwidth
+    let windowwidth = winwidth(0) - nucolwidth - 3
+    let foldedlinecount = v:foldend - v:foldstart
+
+    " expand tabs into spaces
+    let onetab = strpart('          ', 0, &tabstop)
+    let line = substitute(line, '\t', onetab, 'g')
+
+    let line = strpart(line, 0, windowwidth - 2 -len(foldedlinecount))
+    let fillcharcount = windowwidth - len(line) - len(foldedlinecount)
+    return line . '…' . repeat(" ",fillcharcount) . foldedlinecount . '…' . ' '
+endfunction " }}}
+set foldtext=MyFoldText()
+
+" }}}
+" Filetype-specific ------------------------------------------------------- {{{
+
+" C {{{
+
+augroup ft_c
+    au!
+    au FileType c setlocal foldmethod=syntax
+augroup END
+
+" }}}
+" Clojure {{{
+
+let g:slimv_leader = '\'
+let g:slimv_keybindings = 2
+
+augroup ft_clojure
+    au!
+
+    au FileType clojure call TurnOnClojureFolding()
+    au FileType clojure compiler clojure
+    au FileType clojure setlocal report=100000
+
+    au BufWinEnter            SLIMV.REPL setlocal nolist
+    au BufNewFile,BufReadPost SLIMV.REPL setlocal nowrap foldlevel=99
+    au BufNewFile,BufReadPost SLIMV.REPL nnoremap <buffer> A GA
+    au BufNewFile,BufReadPost SLIMV.REPL nnoremap <buffer> <localleader>R :emenu REPL.<Tab>
+
+    " Fix the eval mappings.
+    au FileType clojure nnoremap <buffer> <localleader>ef :<c-u>call SlimvEvalExp()<cr>
+    au FileType clojure nnoremap <buffer> <localleader>ee :<c-u>call SlimvEvalDefun()<cr>
+
+    " And the inspect mapping.
+    au FileType clojure nmap <buffer> \i \di
+
+    " Indent top-level form.
+    au FileType clojure nmap <buffer> <localleader>= v((((((((((((=%
+augroup END
+
+" }}}
+" Clojurescript {{{
+
+augroup ft_clojurescript
+    au!
+
+    au BufNewFile,BufRead *.cljs set filetype=clojurescript
+    au FileType clojurescript call TurnOnClojureFolding()
+
+    " Indent top-level form.
+    au FileType clojurescript nmap <buffer> <localleader>= v((((((((((((=%
+augroup END
+
+" }}}
+" Confluence {{{
+
+augroup ft_c
+    au!
+
+    au BufRead,BufNewFile *.confluencewiki setlocal filetype=confluencewiki
+
+    " Wiki pages should be soft-wrapped.
+    au FileType confluencewiki setlocal wrap linebreak nolist
+augroup END
+
+" }}}
+" Cram {{{
+
+let cram_fold=1
+
+augroup ft_cram
+    au!
+
+    au BufNewFile,BufRead *.t set filetype=cram
+    au Syntax cram setlocal foldlevel=1
+augroup END
+
+" }}}
+" CSS and LessCSS {{{
+
+augroup ft_css
+    au!
+
+    au BufNewFile,BufRead *.less setlocal filetype=less
+
+    au Filetype less,css setlocal foldmethod=marker
+    au Filetype less,css setlocal foldmarker={,}
+    au Filetype less,css setlocal omnifunc=csscomplete#CompleteCSS
+    au Filetype less,css setlocal iskeyword+=-
+
+    " Use <leader>S to sort properties.  Turns this:
+    "
+    "     p {
+    "         width: 200px;
+    "         height: 100px;
+    "         background: red;
+    "
+    "         ...
+    "     }
+    "
+    " into this:
+
+    "     p {
+    "         background: red;
+    "         height: 100px;
+    "         width: 200px;
+    "
+    "         ...
+    "     }
+    au BufNewFile,BufRead *.less,*.css nnoremap <buffer> <localleader>S ?{<CR>jV/\v^\s*\}?$<CR>k:sort<CR>:noh<CR>
+
+    " Make {<cr> insert a pair of brackets in such a way that the cursor is correctly
+    " positioned inside of them AND the following code doesn't get unfolded.
+    au BufNewFile,BufRead *.less,*.css inoremap <buffer> {<cr> {}<left><cr><space><space><space><space>.<cr><esc>kA<bs>
+augroup END
+
+" }}}
+" Django {{{
+
+augroup ft_django
+    au!
+
+    au BufNewFile,BufRead urls.py           setlocal nowrap
+    au BufNewFile,BufRead urls.py           normal! zR
+    au BufNewFile,BufRead dashboard.py      normal! zR
+    au BufNewFile,BufRead local_settings.py normal! zR
+
+    au BufNewFile,BufRead admin.py     setlocal filetype=python.django
+    au BufNewFile,BufRead urls.py      setlocal filetype=python.django
+    au BufNewFile,BufRead models.py    setlocal filetype=python.django
+    au BufNewFile,BufRead views.py     setlocal filetype=python.django
+    au BufNewFile,BufRead settings.py  setlocal filetype=python.django
+    au BufNewFile,BufRead settings.py  setlocal foldmethod=marker
+    au BufNewFile,BufRead forms.py     setlocal filetype=python.django
+    au BufNewFile,BufRead common_settings.py  setlocal filetype=python.django
+    au BufNewFile,BufRead common_settings.py  setlocal foldmethod=marker
+augroup END
+
+" }}}
+" Firefox {{{
+
+augroup ft_firefox
+    au!
+    au BufRead,BufNewFile ~/Library/Caches/*.html setlocal buftype=nofile
+augroup END
+
+" }}}
+" Fish {{{
+
+augroup ft_fish
+    au!
+
+    au BufNewFile,BufRead *.fish setlocal filetype=fish
+augroup END
+
+" }}}
+" Haskell {{{
+
+augroup ft_haskell
+    au!
+    au BufEnter *.hs compiler ghc
+augroup END
+
+" }}}
+" HTML and HTMLDjango {{{
+
+let g:html_indent_tags = ['p', 'li']
+
+augroup ft_html
+    au!
+
+    au BufNewFile,BufRead *.html setlocal filetype=htmldjango
+    au FileType html,jinja,htmldjango setlocal foldmethod=manual
+
+    " Use <localleader>f to fold the current tag.
+    au FileType html,jinja,htmldjango nnoremap <buffer> <localleader>f Vatzf
+
+    " Use <localleader>t to fold the current templatetag.
+    au FileType html,jinja,htmldjango nmap <buffer> <localleader>t viikojozf
+
+    " Smarter pasting
+    au FileType html,jinja,htmldjango nnoremap <buffer> p :<C-U>YRPaste 'p'<CR>v`]=`]
+    au FileType html,jinja,htmldjango nnoremap <buffer> P :<C-U>YRPaste 'P'<CR>v`]=`]
+    au FileType html,jinja,htmldjango nnoremap <buffer> π :<C-U>YRPaste 'p'<CR>
+    au FileType html,jinja,htmldjango nnoremap <buffer> ∏ :<C-U>YRPaste 'P'<CR>
+
+    " Indent tag
+    au FileType html,jinja,htmldjango nnoremap <buffer> <localleader>= Vat=
+
+    " Django tags
+    au FileType jinja,htmldjango inoremap <buffer> <c-t> {%<space><space>%}<left><left><left>
+
+    " Django variables
+    au FileType jinja,htmldjango inoremap <buffer> <c-f> {{<space><space>}}<left><left><left>
+augroup END
+
+" }}}
+" Java {{{
+
+augroup ft_java
+    au!
+
+    au FileType java setlocal foldmethod=marker
+    au FileType java setlocal foldmarker={,}
+augroup END
+
+" }}}
+" Javascript {{{
+
+augroup ft_javascript
+    au!
+
+    au FileType javascript setlocal foldmethod=marker
+    au FileType javascript setlocal foldmarker={,}
+
+    " Make {<cr> insert a pair of brackets in such a way that the cursor is correctly
+    " positioned inside of them AND the following code doesn't get unfolded.
+    au Filetype javascript inoremap <buffer> {<cr> {}<left><cr><space><space><space><space>.<cr><esc>kA<bs>
+augroup END
+
+" }}}
+" Lisp {{{
+
+augroup ft_lisp
+    au!
+    au FileType lisp call TurnOnLispFolding()
+augroup END
+
+" }}}
+" Mail {{{
+
+augroup ft_mail
+    au!
+
+    au Filetype mail setlocal spell
+augroup END
+
+" }}}
+" Markdown {{{
+
+augroup ft_markdown
+    au!
+
+    au BufNewFile,BufRead *.m*down setlocal filetype=markdown
+
+    " Use <localleader>1/2/3 to add headings.
+    au Filetype markdown nnoremap <buffer> <localleader>1 yypVr=
+    au Filetype markdown nnoremap <buffer> <localleader>2 yypVr-
+    au Filetype markdown nnoremap <buffer> <localleader>3 I### <ESC>
+augroup END
+
+" }}}
+" Nginx {{{
+
+augroup ft_nginx
+    au!
+
+    au BufRead,BufNewFile /etc/nginx/conf/*                      set ft=nginx
+    au BufRead,BufNewFile /etc/nginx/sites-available/*           set ft=nginx
+    au BufRead,BufNewFile /usr/local/etc/nginx/sites-available/* set ft=nginx
+    au BufRead,BufNewFile vhost.nginx                            set ft=nginx
+
+    au FileType nginx setlocal foldmethod=marker foldmarker={,}
+augroup END
+
+" }}}
+" OrgMode {{{
+
+augroup ft_org
+    au!
+
+    au Filetype org nmap <buffer> Q vahjgq
+    au Filetype org setlocal nolist
+augroup END
+
+" }}}
+" Pentadactyl {{{
+
+augroup ft_pentadactyl
+    au!
+    au BufNewFile,BufRead .pentadactylrc set filetype=pentadactyl
+    au BufNewFile,BufRead ~/Library/Caches/TemporaryItems/pentadactyl-*.tmp set nolist wrap linebreak columns=100 colorcolumn=0
+augroup END
+
+" }}}
+" Puppet {{{
+
+augroup ft_puppet
+    au!
+
+    au Filetype puppet setlocal foldmethod=marker
+    au Filetype puppet setlocal foldmarker={,}
+augroup END
+
+" }}}
+" Python {{{
+
+augroup ft_python
+    au!
+
+    " au FileType python setlocal omnifunc=pythoncomplete#Complete
+    au FileType python setlocal define=^\s*\\(def\\\\|class\\)
+    au FileType python compiler nose
+    au FileType man nnoremap <buffer> <cr> :q<cr>
+
+    " Jesus tapdancing Christ, built-in Python syntax, you couldn't let me
+    " override this in a normal way, could you?
+    au FileType python if exists("python_space_error_highlight") | unlet python_space_error_highlight | endif
+
+    " Jesus, Python.  Five characters of punctuation for a damn string?
+    au FileType python inoremap <buffer> <c-g> _(u'')<left><left>
+
+    au FileType python inoremap <buffer> <c-b> """"""<left><left><left>
+augroup END
+
+" }}}
+" QuickFix {{{
+
+augroup ft_quickfix
+    au!
+    au Filetype qf setlocal colorcolumn=0 nolist nocursorline nowrap tw=0
+augroup END
+
+" }}}
+" ReStructuredText {{{
+
+augroup ft_rest
+    au!
+
+    au Filetype rst nnoremap <buffer> <localleader>1 yypVr=
+    au Filetype rst nnoremap <buffer> <localleader>2 yypVr-
+    au Filetype rst nnoremap <buffer> <localleader>3 yypVr~
+    au Filetype rst nnoremap <buffer> <localleader>4 yypVr`
+augroup END
+
+" }}}
+" Ruby {{{
+
+augroup ft_ruby
+    au!
+    au Filetype ruby setlocal foldmethod=syntax
+augroup END
+
+" }}}
+" Vagrant {{{
+
+augroup ft_vagrant
+    au!
+    au BufRead,BufNewFile Vagrantfile set ft=ruby
+augroup END
+
+" }}}
+" Vim {{{
+
+augroup ft_vim
+    au!
+
+    au FileType vim setlocal foldmethod=marker
+    au FileType help setlocal textwidth=78
+    au BufWinEnter *.txt if &ft == 'help' | wincmd L | endif
+augroup END
+
+" }}}
+
+" }}}
+" Plugin settings --------------------------------------------------------- {{{
+
+" Ack {{{
+
+nnoremap <leader>a :Ack!<space>
+
+" }}}
+" Autoclose {{{
+
+nmap <Leader>x <Plug>ToggleAutoCloseMappings
+
+" }}}
+" Clam {{{
+
+nnoremap ! :Clam<space>
+vnoremap ! :ClamVisual<space>
+let g:clam_autoreturn = 1
+let g:clam_debug = 1
+
+" }}}
+" Commentary {{{
+
+nmap <leader>c <Plug>CommentaryLine
+xmap <leader>c <Plug>Commentary
+
+augroup plugin_commentary
+    au!
+    au FileType htmldjango setlocal commentstring={#\ %s\ #}
+    au FileType clojurescript setlocal commentstring=;\ %s
+augroup END
+
+" }}}
+" Ctrl-P {{{
+
+let g:ctrlp_dont_split = 'NERD_tree_2'
+let g:ctrlp_jump_to_buffer = 0
+let g:ctrlp_map = '<leader>,'
+let g:ctrlp_working_path_mode = 0
+let g:ctrlp_match_window_reversed = 1
+let g:ctrlp_split_window = 0
+let g:ctrlp_max_height = 20
+let g:ctrlp_extensions = ['tag']
+
+let g:ctrlp_prompt_mappings = {
+\ 'PrtSelectMove("j")':   ['<c-j>', '<down>', '<s-tab>'],
+\ 'PrtSelectMove("k")':   ['<c-k>', '<up>', '<tab>'],
+\ 'PrtHistory(-1)':       ['<c-n>'],
+\ 'PrtHistory(1)':        ['<c-p>'],
+\ 'ToggleFocus()':        ['<c-tab>'],
+\ }
+
+let ctrlp_filter_greps = "".
+    \ "egrep -iv '\\.(" .
+    \ "jar|class|swp|swo|log|so|o|pyc|jpe?g|png|gif|mo|po" .
+    \ ")$' | " .
+    \ "egrep -v '^(\\./)?(" .
+    \ "deploy/|lib/|classes/|libs/|deploy/vendor/|.git/|.hg/|.svn/|.*migrations/" .
+    \ ")'"
+
+let my_ctrlp_user_command = "" .
+    \ "find %s '(' -type f -or -type l ')' -maxdepth 15 -not -path '*/\\.*/*' | " .
+    \ ctrlp_filter_greps
+
+let my_ctrlp_git_command = "" .
+    \ "cd %s && git ls-files | " .
+    \ ctrlp_filter_greps
+
+let g:ctrlp_user_command = ['.git/', my_ctrlp_git_command, my_ctrlp_user_command]
+
+nnoremap <leader>. :CtrlPTag<cr>
+
+" }}}
+" Easymotion {{{
+
+let g:EasyMotion_do_mapping = 0
+
+nnoremap <silent> <Leader>f      :call EasyMotion#F(0, 0)<CR>
+onoremap <silent> <Leader>f      :call EasyMotion#F(0, 0)<CR>
+vnoremap <silent> <Leader>f :<C-U>call EasyMotion#F(1, 0)<CR>
+
+nnoremap <silent> <Leader>F      :call EasyMotion#F(0, 1)<CR>
+onoremap <silent> <Leader>F      :call EasyMotion#F(0, 1)<CR>
+vnoremap <silent> <Leader>F :<C-U>call EasyMotion#F(1, 1)<CR>
+
+onoremap <silent> <Leader>t      :call EasyMotion#T(0, 0)<CR>
+onoremap <silent> <Leader>T      :call EasyMotion#T(0, 1)<CR>
+
+" }}}
+" Fugitive {{{
+
+nnoremap <leader>gd :Gdiff<cr>
+nnoremap <leader>gs :Gstatus<cr>
+nnoremap <leader>gw :Gwrite<cr>
+nnoremap <leader>ga :Gadd<cr>
+nnoremap <leader>gb :Gblame<cr>
+nnoremap <leader>gco :Gcheckout<cr>
+nnoremap <leader>gci :Gcommit<cr>
+nnoremap <leader>gm :Gmove<cr>
+nnoremap <leader>gr :Gremove<cr>
+nnoremap <leader>gl :Shell git gl -18<cr>:wincmd \|<cr>
+
+augroup ft_fugitive
+    au!
+
+    au BufNewFile,BufRead .git/index setlocal nolist
+augroup END
+
+" "Hub"
+nnoremap <leader>H :Gbrowse<cr>
+vnoremap <leader>H :Gbrowse<cr>
+
+" }}}
+" Gundo {{{
+
+nnoremap <F5> :GundoToggle<CR>
+
+let g:gundo_debug = 1
+let g:gundo_preview_bottom = 1
+let g:gundo_tree_statusline = "Gundo"
+let g:gundo_preview_statusline = "Gundo Preview"
+
+" }}}
+" Haskellmode {{{
+
+let g:haddock_browser = "open"
+let g:haddock_browser_callformat = "%s %s"
+let g:ghc = "/usr/local/bin/ghc"
+
+" }}}
+" HTML5 {{{
+
+let g:event_handler_attributes_complete = 0
+let g:rdfa_attributes_complete = 0
+let g:microdata_attributes_complete = 0
+let g:atia_attributes_complete = 0
+
+" }}}
+" Linediff {{{
+
+vnoremap <leader>l :Linediff<cr>
+nnoremap <leader>L :LinediffReset<cr>
+
+" }}}
+" Lisp (built-in) {{{
+
+let g:lisp_rainbow = 1
+
+" }}}
+" Makegreen {{{
+
+nnoremap \| :call MakeGreen('')<cr>
+
+" }}}
+" NERD Tree {{{
+
+noremap  <F2> :NERDTreeToggle<cr>
+inoremap <F2> <esc>:NERDTreeToggle<cr>
+
+augroup ps_nerdtree
+    au!
+
+    au Filetype nerdtree setlocal nolist
+    au Filetype nerdtree nnoremap <buffer> K :q<cr>
+augroup END
+
+let NERDTreeHighlightCursorline = 1
+let NERDTreeIgnore = ['.vim$', '\~$', '.*\.pyc$', 'pip-log\.txt$', 'whoosh_index',
+                    \ 'xapian_index', '.*.pid', 'monitor.py', '.*-fixtures-.*.json',
+                    \ '.*\.o$', 'db.db', 'tags.bak']
+
+let NERDTreeMinimalUI = 1
+let NERDTreeDirArrows = 1
+
+" }}}
+" OrgMode {{{
+
+let g:org_plugins = ['ShowHide', '|', 'Navigator', 'EditStructure', '|', 'Todo', 'Date', 'Misc']
+
+let g:org_todo_keywords = ['TODO', '|', 'DONE']
+
+let g:org_debug = 1
+
+" }}}
+" Powerline {{{
+
+let g:Powerline_symbols = 'fancy'
+let g:Powerline_cache_enabled = 1
+" let g:Powerline_colorscheme = 'badwolf'
+
+" }}}
+" Python-Mode {{{
+
+let g:pymode_doc = 1
+let g:pymode_doc_key = '<localleader>ds'
+let g:pydoc = 'pydoc'
+let g:pymode_syntax = 1
+let g:pymode_syntax_all = 0
+let g:pymode_syntax_builtin_objs = 1
+let g:pymode_syntax_print_as_function = 0
+let g:pymode_syntax_space_errors = 0
+let g:pymode_run = 0
+let g:pymode_lint = 0
+let g:pymode_breakpoint = 0
+let g:pymode_utils_whitespaces = 0
+let g:pymode_virtualenv = 0
+let g:pymode_folding = 0
+
+let g:pymode_options_indent = 0
+let g:pymode_options_fold = 0
+let g:pymode_options_other = 0
+
+let g:pymode_rope = 1
+let g:pymode_rope_global_prefix = "<localleader>R"
+let g:pymode_rope_local_prefix = "<localleader>r"
+let g:pymode_rope_auto_project = 1
+let g:pymode_rope_enable_autoimport = 0
+let g:pymode_rope_autoimport_generate = 1
+let g:pymode_rope_autoimport_underlineds = 0
+let g:pymode_rope_codeassist_maxfixes = 10
+let g:pymode_rope_sorted_completions = 1
+let g:pymode_rope_extended_complete = 1
+let g:pymode_rope_autoimport_modules = ["os", "shutil", "datetime"]
+let g:pymode_rope_confirm_saving = 1
+let g:pymode_rope_vim_completion = 1
+let g:pymode_rope_guess_project = 1
+let g:pymode_rope_goto_def_newwin = 0
+let g:pymode_rope_always_show_complete_menu = 0
+
+" }}}
+" Scratch {{{
+
+command! ScratchToggle call ScratchToggle()
+
+function! ScratchToggle()
+    if exists("w:is_scratch_window")
+        unlet w:is_scratch_window
+        exec "q"
+    else
+        exec "normal! :Sscratch\<cr>\<C-W>J:resize 13\<cr>"
+        let w:is_scratch_window = 1
+    endif
+endfunction
+
+nnoremap <silent> <leader><tab> :ScratchToggle<cr>
+
+" }}}
+" SLIMV {{{
+
+let g:slimv_repl_name = 'SLIMV.REPL'
+let g:slimv_repl_split = 4
+let g:slimv_repl_syntax = 0
+let g:slimv_repl_wrap = 0
+
+" Use a swank command that works, and doesn't require new app windows.
+let g:slimv_swank_clojure = '!dtach -n /tmp/dtach-swank.sock -r winch lein swank'
+
+" }}}}
+" Sparkup {{{
+
+let g:sparkupNextMapping = '<c-s>'
+
+"}}}
+" Supertab {{{
+
+let g:SuperTabDefaultCompletionType = "<c-n>"
+let g:SuperTabLongestHighlight = 1
+
+"}}}
+" Syntastic {{{
+
+let g:syntastic_enable_signs = 1
+let g:syntastic_check_on_open = 1
+let g:syntastic_disabled_filetypes = ['html', 'rst']
+let g:syntastic_stl_format = '[%E{%e Errors}%B{, }%W{%w Warnings}]'
+let g:syntastic_jsl_conf = '$HOME/.vim/jsl.conf'
+
+" }}}
+" Threesome {{{
+
+let g:threesome_leader = "-"
+
+let g:threesome_initial_mode = "grid"
+
+let g:threesome_initial_layout_grid = 1
+let g:threesome_initial_layout_loupe = 0
+let g:threesome_initial_layout_compare = 0
+let g:threesome_initial_layout_path = 0
+
+let g:threesome_initial_diff_grid = 1
+let g:threesome_initial_diff_loupe = 0
+let g:threesome_initial_diff_compare = 0
+let g:threesome_initial_diff_path = 0
+
+let g:threesome_initial_scrollbind_grid = 0
+let g:threesome_initial_scrollbind_loupe = 0
+let g:threesome_initial_scrollbind_compare = 0
+let g:threesome_initial_scrollbind_path = 0
+
+let g:threesome_wrap = "nowrap"
+
+" }}}
+" tslime {{{
+
+let g:tslime_ensure_trailing_newlines = 1
+let g:tslime_normal_mapping = '<localleader>t'
+let g:tslime_visual_mapping = '<localleader>t'
+let g:tslime_vars_mapping = '<localleader>T'
+
+" }}}
+" VimClojure {{{
+
+let vimclojure#HighlightBuiltins = 1
+let vimclojure#ParenRainbow = 1
+let vimclojure#WantNailgun = 0
+
+" }}}
+" YankRing {{{
+
+function! YRRunAfterMaps()
+    nnoremap Y :<C-U>YRYankCount 'y$'<CR>
+    omap <expr> L YRMapsExpression("", "$")
+    omap <expr> H YRMapsExpression("", "^")
+endfunction
+
+" }}}
+
+" }}}
+" Text objects ------------------------------------------------------------ {{{
+
+" Shortcut for [] {{{
+
+onoremap ir i[
+onoremap ar a[
+vnoremap ir i[
+vnoremap ar a[
+
+" }}}
+" Next and Last {{{
+
+" Motion for "next/last object". For example, "din(" would go to the next "()"
+" pair and delete its contents.
+
+onoremap an :<c-u>call <SID>NextTextObject('a', 'f')<cr>
+xnoremap an :<c-u>call <SID>NextTextObject('a', 'f')<cr>
+onoremap in :<c-u>call <SID>NextTextObject('i', 'f')<cr>
+xnoremap in :<c-u>call <SID>NextTextObject('i', 'f')<cr>
+
+onoremap al :<c-u>call <SID>NextTextObject('a', 'F')<cr>
+xnoremap al :<c-u>call <SID>NextTextObject('a', 'F')<cr>
+onoremap il :<c-u>call <SID>NextTextObject('i', 'F')<cr>
+xnoremap il :<c-u>call <SID>NextTextObject('i', 'F')<cr>
+
+function! s:NextTextObject(motion, dir)
+  let c = nr2char(getchar())
+
+  if c ==# "b"
+      let c = "("
+  elseif c ==# "B"
+      let c = "{"
+  elseif c ==# "r"
+      let c = "["
+  endif
+
+  exe "normal! ".a:dir.c."v".a:motion.c
+endfunction
+
+" }}}
+" Numbers {{{
+
+" Motion for numbers.  Great for CSS.  Lets you do things like this:
+"
+" margin-top: 200px; -> daN -> margin-top: px;
+"              ^                          ^
+" TODO: Handle floats.
+
+onoremap N :<c-u>call <SID>NumberTextObject(0)<cr>
+xnoremap N :<c-u>call <SID>NumberTextObject(0)<cr>
+onoremap aN :<c-u>call <SID>NumberTextObject(1)<cr>
+xnoremap aN :<c-u>call <SID>NumberTextObject(1)<cr>
+onoremap iN :<c-u>call <SID>NumberTextObject(1)<cr>
+xnoremap iN :<c-u>call <SID>NumberTextObject(1)<cr>
+
+function! s:NumberTextObject(whole)
+    normal! v
+
+    while getline('.')[col('.')] =~# '\v[0-9]'
+        normal! l
+    endwhile
+
+    if a:whole
+        normal! o
+
+        while col('.') > 1 && getline('.')[col('.') - 2] =~# '\v[0-9]'
+            normal! h
+        endwhile
+    endif
+endfunction
+
+" }}}
+
+" }}}
+" Mini-plugins ------------------------------------------------------------ {{{
+" Stuff that should probably be broken out into plugins, but hasn't proved to be
+" worth the time to do so just yet.
+
+" Synstack {{{
+
+" Show the stack of syntax hilighting classes affecting whatever is under the
+" cursor.
+function! SynStack()
+  echo join(map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")'), " > ")
+endfunc
+
+nnoremap <F7> :call SynStack()<CR>
+
+" }}}
+" Diffwhite Toggle {{{
+
+set diffopt-=iwhite
+let g:diffwhitespaceon = 1
+function! ToggleDiffWhitespace()
+    if g:diffwhitespaceon
+        set diffopt-=iwhite
+        let g:diffwhitespaceon = 0
+    else
+        set diffopt+=iwhite
+        let g:diffwhitespaceon = 1
+    endif
+    diffupdate
+endfunc
+
+nnoremap <leader>dw :call ToggleDiffWhitespace()<CR>
+
+" }}}
+" Error Toggles {{{
+
+command! ErrorsToggle call ErrorsToggle()
+function! ErrorsToggle() " {{{
+  if exists("w:is_error_window")
+    unlet w:is_error_window
+    exec "q"
+  else
+    exec "Errors"
+    lopen
+    let w:is_error_window = 1
+  endif
+endfunction " }}}
+
+command! -bang -nargs=? QFixToggle call QFixToggle(<bang>0)
+function! QFixToggle(forced) " {{{
+  if exists("g:qfix_win") && a:forced == 0
+    cclose
+    unlet g:qfix_win
+  else
+    copen 10
+    let g:qfix_win = bufnr("$")
+  endif
+endfunction " }}}
+
+nmap <silent> <f3> :ErrorsToggle<cr>
+nmap <silent> <f4> :QFixToggle<cr>
+
+" }}}
+" Fake Paredit {{{
+
+" TODO: Make this stuff not suck.
+nnoremap <leader>> xEp
+nnoremap <leader>< xgEp
+
+" }}}
+" Nyan! {{{
+
+function! NyanMe() " {{{
+    hi NyanFur             guifg=#BBBBBB
+    hi NyanPoptartEdge     guifg=#ffd0ac
+    hi NyanPoptartFrosting guifg=#fd3699 guibg=#fe98ff
+    hi NyanRainbow1        guifg=#6831f8
+    hi NyanRainbow2        guifg=#0099fc
+    hi NyanRainbow3        guifg=#3cfa04
+    hi NyanRainbow4        guifg=#fdfe00
+    hi NyanRainbow5        guifg=#fc9d00
+    hi NyanRainbow6        guifg=#fe0000
+
+
+    echohl NyanRainbow1
+    echon "≈"
+    echohl NyanRainbow2
+    echon "≋"
+    echohl NyanRainbow3
+    echon "≈"
+    echohl NyanRainbow4
+    echon "≋"
+    echohl NyanRainbow5
+    echon "≈"
+    echohl NyanRainbow6
+    echon "≋"
+    echohl NyanRainbow1
+    echon "≈"
+    echohl NyanRainbow2
+    echon "≋"
+    echohl NyanRainbow3
+    echon "≈"
+    echohl NyanRainbow4
+    echon "≋"
+    echohl NyanRainbow5
+    echon "≈"
+    echohl NyanRainbow6
+    echon "≋"
+    echohl None
+    echo ""
+
+    echohl NyanRainbow1
+    echon "≈"
+    echohl NyanRainbow2
+    echon "≋"
+    echohl NyanRainbow3
+    echon "≈"
+    echohl NyanRainbow4
+    echon "≋"
+    echohl NyanRainbow5
+    echon "≈"
+    echohl NyanRainbow6
+    echon "≋"
+    echohl NyanRainbow1
+    echon "≈"
+    echohl NyanRainbow2
+    echon "≋"
+    echohl NyanRainbow3
+    echon "≈"
+    echohl NyanRainbow4
+    echon "≋"
+    echohl NyanRainbow5
+    echon "≈"
+    echohl NyanRainbow6
+    echon "≋"
+    echohl NyanFur
+    echon "╰"
+    echohl NyanPoptartEdge
+    echon "⟨"
+    echohl NyanPoptartFrosting
+    echon "⣮⣯⡿"
+    echohl NyanPoptartEdge
+    echon "⟩"
+    echohl NyanFur
+    echon "⩾^ω^⩽"
+    echohl None
+    echo ""
+
+    echohl NyanRainbow1
+    echon "≈"
+    echohl NyanRainbow2
+    echon "≋"
+    echohl NyanRainbow3
+    echon "≈"
+    echohl NyanRainbow4
+    echon "≋"
+    echohl NyanRainbow5
+    echon "≈"
+    echohl NyanRainbow6
+    echon "≋"
+    echohl NyanRainbow1
+    echon "≈"
+    echohl NyanRainbow2
+    echon "≋"
+    echohl NyanRainbow3
+    echon "≈"
+    echohl NyanRainbow4
+    echon "≋"
+    echohl NyanRainbow5
+    echon "≈"
+    echohl NyanRainbow6
+    echon "≋"
+    echohl None
+    echon " "
+    echohl NyanFur
+    echon "”   ‟"
+    echohl None
+
+    sleep 1
+    redraw
+    echo " "
+    echo " "
+    echo "Noms?"
+    redraw
+endfunction " }}}
+command! NyanMe call NyanMe()
+
+" }}}
+" Hg {{{
+
+function! s:HgDiff() " {{{
+    diffthis
+
+    let fn = expand('%:p')
+    let ft = &ft
+
+    wincmd v
+    edit __hgdiff_orig__
+
+    setlocal buftype=nofile
+
+    normal ggdG
+    execute "silent r!hg cat --rev . " . fn
+    normal ggdd
+
+    execute "setlocal ft=" . ft
+
+    diffthis
+    diffupdate
+endfunction " }}}
+command! -nargs=0 HgDiff call s:HgDiff()
+nnoremap <leader>hd :HgDiff<cr>
+
+function! s:HgBlame() " {{{
+    let fn = expand('%:p')
+
+    wincmd v
+    wincmd h
+    edit __hgblame__
+    vertical resize 28
+
+    setlocal scrollbind winfixwidth nolist nowrap nonumber buftype=nofile ft=none
+
+    normal ggdG
+    execute "silent r!hg blame -undq " . fn
+    normal ggdd
+    execute ':%s/\v:.*$//'
+
+    wincmd l
+    setlocal scrollbind
+    syncbind
+endfunction " }}}
+command! -nargs=0 HgBlame call s:HgBlame()
+nnoremap <leader>hb :HgBlame<cr>
+
+" }}}
+" Ack motions {{{
+
+" Motions to Ack for things.  Works with pretty much everything, including:
+"
+"   w, W, e, E, b, B, t*, f*, i*, a*, and custom text objects
+"
+" Awesome.
+"
+" Note: If the text covered by a motion contains a newline it won't work.  Ack
+" searches line-by-line.
+
+nnoremap <silent> <leader>A :set opfunc=<SID>AckMotion<CR>g@
+xnoremap <silent> <leader>A :<C-U>call <SID>AckMotion(visualmode())<CR>
+
+function! s:CopyMotionForType(type)
+    if a:type ==# 'v'
+        silent execute "normal! `<" . a:type . "`>y"
+    elseif a:type ==# 'char'
+        silent execute "normal! `[v`]y"
+    endif
+endfunction
+
+function! s:AckMotion(type) abort
+    let reg_save = @@
+
+    call s:CopyMotionForType(a:type)
+
+    execute "normal! :Ack! --literal " . shellescape(@@) . "\<cr>"
+
+    let @@ = reg_save
+endfunction
+
+" }}}
+" Indent Guides {{{
+
+let g:indentguides_state = 0
+function! IndentGuides() " {{{
+    if g:indentguides_state
+        let g:indentguides_state = 0
+        2match None
+    else
+        let g:indentguides_state = 1
+        execute '2match IndentGuides /\%(\_^\s*\)\@<=\%(\%'.(0*&sw+1).'v\|\%'.(1*&sw+1).'v\|\%'.(2*&sw+1).'v\|\%'.(3*&sw+1).'v\|\%'.(4*&sw+1).'v\|\%'.(5*&sw+1).'v\|\%'.(6*&sw+1).'v\|\%'.(7*&sw+1).'v\)\s/'
+    endif
+endfunction " }}}
+hi def IndentGuides guibg=#303030
+nnoremap <leader>I :call IndentGuides()<cr>
+
+" }}}
+" Block Colors {{{
+
+let g:blockcolor_state = 0
+function! BlockColor() " {{{
+    if g:blockcolor_state
+        let g:blockcolor_state = 0
+        call matchdelete(77881)
+        call matchdelete(77882)
+        call matchdelete(77883)
+        call matchdelete(77884)
+        call matchdelete(77885)
+    else
+        let g:blockcolor_state = 1
+        call matchadd("BlockColor1", '^ \{4}.*', 1, 77881)
+        call matchadd("BlockColor2", '^ \{8}.*', 2, 77882)
+        call matchadd("BlockColor3", '^ \{12}.*', 3, 77883)
+        call matchadd("BlockColor4", '^ \{16}.*', 4, 77884)
+        call matchadd("BlockColor5", '^ \{20}.*', 5, 77885)
+    endif
+endfunction " }}}
+" Default highlights {{{
+hi def BlockColor1 guibg=#222222
+hi def BlockColor2 guibg=#2a2a2a
+hi def BlockColor3 guibg=#353535
+hi def BlockColor4 guibg=#3d3d3d
+hi def BlockColor5 guibg=#444444
+" }}}
+nnoremap <leader>B :call BlockColor()<cr>
+
+" }}}
+
+" }}}
+" Environments (GUI/Console) ---------------------------------------------- {{{
+
+if has('gui_running')
+    " GUI Vim
+
+    set guifont=Menlo\ Regular\ for\ Powerline:h12
+
+    " Remove all the UI cruft
+    set go-=T
+    set go-=l
+    set go-=L
+    set go-=r
+    set go-=R
+
+    highlight SpellBad term=underline gui=undercurl guisp=Orange
+
+    " Different cursors for different modes.
+    set guicursor=n-c:block-Cursor-blinkon0
+    set guicursor+=v:block-vCursor-blinkon0
+    set guicursor+=i-ci:ver20-iCursor
+
+    if has("gui_macvim")
+        " Full screen means FULL screen
+        set fuoptions=maxvert,maxhorz
+
+        " Use the normal HIG movements, except for M-Up/Down
+        let macvim_skip_cmd_opt_movement = 1
+        no   <D-Left>       <Home>
+        no!  <D-Left>       <Home>
+        no   <M-Left>       <C-Left>
+        no!  <M-Left>       <C-Left>
+
+        no   <D-Right>      <End>
+        no!  <D-Right>      <End>
+        no   <M-Right>      <C-Right>
+        no!  <M-Right>      <C-Right>
+
+        no   <D-Up>         <C-Home>
+        ino  <D-Up>         <C-Home>
+        imap <M-Up>         <C-o>{
+
+        no   <D-Down>       <C-End>
+        ino  <D-Down>       <C-End>
+        imap <M-Down>       <C-o>}
+
+        imap <M-BS>         <C-w>
+        inoremap <D-BS>     <esc>my0c`y
+    else
+        " Non-MacVim GUI, like Gvim
+    end
+else
+    " Console Vim
+    " For me, this means iTerm2, possibly through tmux
+
+    " Mouse support
+    set mouse=a
+endif
+
+" }}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/zshrc	Fri Apr 13 15:23:33 2012 -0400
@@ -0,0 +1,72 @@
+export ZSH="$HOME/lib/oh-my-zsh"
+export ZSH_THEME="prose"
+export DISABLE_AUTO_UPDATE="true"
+export OH_MY_ZSH_DEBUG="true"
+plugins=(command-coloring pip fabric lein redis-cli vagrant)
+
+#test -f "$HOME/src/hgd/hd" && export OH_MY_ZSH_HG="$HOME/src/hgd/hd" || export OH_MY_ZSH_HG='hg'
+
+source $ZSH/oh-my-zsh.sh
+
+
+# Custom options -------------------------------------------------------------
+unsetopt promptcr
+
+# Useful aliases -------------------------------------------------------------
+alias j='z'
+alias fab='fab -i ~/.ssh/stevelosh'
+alias oldgcc='export CC=/usr/bin/gcc-4.0'
+alias tm='tmux -u2'
+alias c='clear'
+alias bp='bpython'
+
+export DISABLE_AUTO_TITLE="true"
+
+# Environment variables ------------------------------------------------------
+export EDITOR='vim'
+export PATH="$HOME/.gem/ruby/1.8/bin:${PATH}"
+export PATH="$HOME/bin:${PATH}"
+export PATH="$HOME/lib/dotfiles/bin:${PATH}"
+export PATH="$HOME/bin:/usr/local/bin:/usr/local/sbin:/opt/local/bin:$PATH"
+export PATH="/opt/subversion/bin:${PATH}"
+export PATH="/usr/local/Cellar/ruby/1.9.2-p290/bin:${PATH}"
+export GREP_OPTIONS='--color=auto'
+export HISTSIZE=1000
+export HISTFILESIZE=1000
+export HISTCONTROL=erasedups
+export COMMAND_MODE=unix2003
+export RUBYOPT=rubygems
+export CLASSPATH="$CLASSPATH:/usr/local/Cellar/clojure-contrib/1.2.0/clojure-contrib.jar"
+
+# Python variables -----------------------------------------------------------
+export PIP_DOWNLOAD_CACHE="$HOME/.pip/cache"
+export PYTHONSTARTUP="$HOME/.pythonrc.py"
+export WORKON_HOME="${HOME}/lib/virtualenvs"
+export PATH="${PATH}:/Developer/usr/bin/"
+export PATH="${PATH}:/usr/local/share/python/"
+export PATH="${PATH}:$HOME/.lein/bin"
+export PYTHONPATH="$PYTHONPATH:/usr/local/Cellar/python/2.7.1/lib/python2.7/site-packages"
+export PYTHONPATH="$PYTHONPATH:/usr/local/lib/python2.7.1/site-packages"
+export PYTHONPATH="$PYTHONPATH:/usr/local/lib/python2.7/site-packages"
+export PYTHONPATH="$PYTHONPATH:/usr/local/lib/python2.6/site-packages"
+export VEW_PATH="$HOME/lib/python/virtualenvwrapper/virtualenvwrapper.sh"
+export PYTHONPATH="$HOME/lib/python/see:$PYTHONPATH"
+export NODE_PATH="$NODE_PATH:/usr/local/lib/node:/usr/local/lib/node_modules"
+
+# Mercurial variables --------------------------------------------------------
+export PATH="$HOME/lib/hg/hg-stable:$PATH"
+export PYTHONPATH="$HOME/lib/hg/hg-stable:$PYTHONPATH"
+
+# Extra ----------------------------------------------------------------------
+source `brew --prefix`/etc/profile.d/z.sh
+
+# Pre-Prompt Command ---------------------------------------------------------
+function precmd () {
+    z --add "$(pwd -P)"
+}
+
+# Local Settings -------------------------------------------------------------
+if [[ -s $HOME/.zshrc_local ]] ; then source $HOME/.zshrc_local ; fi
+
+# Emacs... -------------------------------------------------------------------
+alias e='emacsclient -nc .'