diff --git a/.gitmodules b/.gitmodules
index 15eafc1..b52d7d2 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,6 +1,9 @@
[submodule "vim/.vim/bundle/slime"]
path = vim/.vim/bundle/slime
- url = http://github.com/jpalardy/vim-slime
+ url = https://github.com/jpalardy/vim-slime
[submodule "vim/.vim/bundle/filetype-nix"]
path = vim/.vim/bundle/filetype-nix
url = https://github.com/LnL7/vim-nix
+[submodule "vim/.vim/bundle/sleuth"]
+ path = vim/.vim/bundle/sleuth
+ url = https://github.com/tpope/vim-sleuth
diff --git a/vim/.vim/bundle/sleuth b/vim/.vim/bundle/sleuth
new file mode 160000
index 0000000..2826bc1
--- /dev/null
+++ b/vim/.vim/bundle/sleuth
@@ -0,0 +1 @@
+Subproject commit 2826bc17ef1820f68dfe6e43574a567e3c67a56d
diff --git a/vim/.vim/bundle/sleuth/CONTRIBUTING.markdown b/vim/.vim/bundle/sleuth/CONTRIBUTING.markdown
deleted file mode 100644
index b3f0095..0000000
--- a/vim/.vim/bundle/sleuth/CONTRIBUTING.markdown
+++ /dev/null
@@ -1 +0,0 @@
-See the [contribution guidelines for pathogen.vim](https://github.com/tpope/vim-pathogen/blob/master/CONTRIBUTING.markdown).
diff --git a/vim/.vim/bundle/sleuth/README.markdown b/vim/.vim/bundle/sleuth/README.markdown
deleted file mode 100644
index b76d16a..0000000
--- a/vim/.vim/bundle/sleuth/README.markdown
+++ /dev/null
@@ -1,48 +0,0 @@
-# sleuth.vim
-
-This plugin automatically adjusts `'shiftwidth'` and `'expandtab'`
-heuristically based on the current file, or, in the case the current file is
-new, blank, or otherwise insufficient, by looking at other files of the same
-type in the current and parent directories. In lieu of adjusting
-`'softtabstop'`, `'smarttab'` is enabled.
-
-Compare to [DetectIndent][]. I wrote this because I wanted something fully
-automatic. My goal is that by installing this plugin, you can remove all
-indenting related configuration from your vimrc.
-
-[DetectIndent]: http://www.vim.org/scripts/script.php?script_id=1171
-
-## Installation
-
-If you don't have a preferred installation method, I recommend
-installing [pathogen.vim](https://github.com/tpope/vim-pathogen), and
-then simply copy and paste:
-
- cd ~/.vim/bundle
- git clone git://github.com/tpope/vim-sleuth.git
-
-## Notes
-
-* Searching for other files of the same type continues up the directory
- hierarchy until a match is found. This means, for example, the indent for
- the first file in a brand new Ruby project might very well be derived from
- your `.irbrc`. I consider this a feature.
-* If your file is consistently indented with hard tabs, `'shiftwidth'` will be
- set to your `'tabstop'`. Otherwise, a `'tabstop'` of 8 is enforced.
-* The algorithm is rolled from scratch, fairly simplistic, and only lightly
- battle tested. It's probably not (yet) as good as [DetectIndent][].
- Let me know what it fails on for you.
-
-## Self-Promotion
-
-Like sleuth.vim? Follow the repository on
-[GitHub](https://github.com/tpope/vim-sleuth) and vote for it on
-[vim.org](http://www.vim.org/scripts/script.php?script_id=4375). And if
-you're feeling especially charitable, follow [tpope](http://tpo.pe/) on
-[Twitter](http://twitter.com/tpope) and
-[GitHub](https://github.com/tpope).
-
-## License
-
-Copyright © Tim Pope. Distributed under the same terms as Vim itself.
-See `:help license`.
diff --git a/vim/.vim/bundle/sleuth/doc/sleuth.txt b/vim/.vim/bundle/sleuth/doc/sleuth.txt
deleted file mode 100644
index d79a7fe..0000000
--- a/vim/.vim/bundle/sleuth/doc/sleuth.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-*sleuth.txt* Heuristically set buffer options
-
-Author: Tim Pope
-Repo: https://github.com/tpope/vim-sleuth
-License: Same terms as Vim itself (see |license|)
-
-This plugin is only available if 'compatible' is not set.
-
-SUMMARY *sleuth*
-
-This plugin automatically adjusts 'shiftwidth' and 'expandtab' heuristically
-based on the current file, or, in the case the current file is new, blank, or
-otherwise insufficient, by looking at other files of the same type in the
-current and parent directories. In lieu of adjusting 'softtabstop',
-'smarttab' is enabled.
-
- vim:tw=78:et:ft=help:norl:
diff --git a/vim/.vim/bundle/sleuth/plugin/sleuth.vim b/vim/.vim/bundle/sleuth/plugin/sleuth.vim
deleted file mode 100644
index 560135e..0000000
--- a/vim/.vim/bundle/sleuth/plugin/sleuth.vim
+++ /dev/null
@@ -1,171 +0,0 @@
-" sleuth.vim - Heuristically set buffer options
-" Maintainer: Tim Pope
-" Version: 1.1
-" GetLatestVimScripts: 4375 1 :AutoInstall: sleuth.vim
-
-if exists("g:loaded_sleuth") || v:version < 700 || &cp
- finish
-endif
-let g:loaded_sleuth = 1
-
-function! s:guess(lines) abort
- let options = {}
- let heuristics = {'spaces': 0, 'hard': 0, 'soft': 0}
- let ccomment = 0
- let podcomment = 0
- let triplequote = 0
- let backtick = 0
-
- for line in a:lines
-
- if line =~# '^\s*$'
- continue
- endif
-
- if line =~# '^\s*/\*'
- let ccomment = 1
- endif
- if ccomment
- if line =~# '\*/'
- let ccomment = 0
- endif
- continue
- endif
-
- if line =~# '^=\w'
- let podcomment = 1
- endif
- if podcomment
- if line =~# '^=\%(end\|cut\)\>'
- let podcomment = 0
- endif
- continue
- endif
-
- if triplequote
- if line =~# '^[^"]*"""[^"]*$'
- let triplequote = 0
- endif
- continue
- elseif line =~# '^[^"]*"""[^"]*$'
- let triplequote = 1
- endif
-
- if backtick
- if line =~# '^[^`]*`[^`]*$'
- let backtick = 0
- endif
- continue
- elseif line =~# '^[^`]*`[^`]*$'
- let backtick = 1
- endif
-
- let softtab = repeat(' ', 8)
- if line =~# '^\t'
- let heuristics.hard += 1
- elseif line =~# '^' . softtab
- let heuristics.soft += 1
- endif
- if line =~# '^ '
- let heuristics.spaces += 1
- endif
- let indent = len(matchstr(substitute(line, '\t', softtab, 'g'), '^ *'))
- if indent > 1 && get(options, 'shiftwidth', 99) > indent
- let options.shiftwidth = indent
- endif
-
- endfor
-
- if heuristics.hard && !heuristics.spaces
- return {'expandtab': 0, 'shiftwidth': &tabstop}
- elseif heuristics.soft != heuristics.hard
- let options.expandtab = heuristics.soft > heuristics.hard
- if heuristics.hard
- let options.tabstop = 8
- endif
- endif
-
- return options
-endfunction
-
-function! s:patterns_for(type) abort
- if a:type ==# ''
- return []
- endif
- if !exists('s:patterns')
- redir => capture
- silent autocmd BufRead
- redir END
- let patterns = {
- \ 'c': ['*.c'],
- \ 'html': ['*.html'],
- \ 'sh': ['*.sh'],
- \ }
- let setfpattern = '\s\+\%(setf\%[iletype]\s\+\|set\%[local]\s\+\%(ft\|filetype\)=\|call SetFileTypeSH(["'']\%(ba\|k\)\=\%(sh\)\@=\)'
- for line in split(capture, "\n")
- let match = matchlist(line, '^\s*\(\S\+\)\='.setfpattern.'\(\w\+\)')
- if !empty(match)
- call extend(patterns, {match[2]: []}, 'keep')
- call extend(patterns[match[2]], [match[1] ==# '' ? last : match[1]])
- endif
- let last = matchstr(line, '\S.*')
- endfor
- let s:patterns = patterns
- endif
- return copy(get(s:patterns, a:type, []))
-endfunction
-
-function! s:apply_if_ready(options) abort
- if !has_key(a:options, 'expandtab') || !has_key(a:options, 'shiftwidth')
- return 0
- else
- for [option, value] in items(a:options)
- call setbufvar('', '&'.option, value)
- endfor
- return 1
- endif
-endfunction
-
-function! s:detect() abort
- if &modifiable == 0
- return
- endif
-
- let options = s:guess(getline(1, 1024))
- if s:apply_if_ready(options)
- return
- endif
- let patterns = s:patterns_for(&filetype)
- call filter(patterns, 'v:val !~# "/"')
- let dir = expand('%:p:h')
- while isdirectory(dir) && dir !=# fnamemodify(dir, ':h')
- for pattern in patterns
- for neighbor in split(glob(dir.'/'.pattern), "\n")[0:7]
- if neighbor !=# expand('%:p') && filereadable(neighbor)
- call extend(options, s:guess(readfile(neighbor, '', 256)), 'keep')
- endif
- if s:apply_if_ready(options)
- let b:sleuth_culprit = neighbor
- return
- endif
- endfor
- endfor
- let dir = fnamemodify(dir, ':h')
- endwhile
- if has_key(options, 'shiftwidth')
- return s:apply_if_ready(extend({'expandtab': 1}, options))
- endif
-endfunction
-
-setglobal smarttab
-
-if !exists('g:did_indent_on')
- filetype indent on
-endif
-
-augroup sleuth
- autocmd!
- autocmd FileType * call s:detect()
-augroup END
-
-" vim:set et sw=2: