Folders For .bashrc And .vimrc

I used to have .bashrc file with around 400 lines. With ASCII boxes, it was kind of manageable, but it was rather a bunch of little snippets that lack cohesion. So I took inspiration from the various configuration directories (config.d/) of packages like apache and put each snippet into a little file into ~/.config/bash/. Then in my .bashrc, I just source all those little snippets. Since the globbing gives them in alphabetical order, I can use the number to give the snippets an order.


My .bashrc now just looks like this:

for file in "$HOME/.config/bash"/*.sh
        source "$file"

There are quite some snippets in that folder:

$ ls ~/.config/bash  


I then did the same for my .vimrc which is composed of even more snippets. All in all, I ended up with some 38 files that were all in my .vimrc before. The new .vimrc just sources all the other files:

for rcfile in split(globpath("~/.vim/rc", "*.vim"), '\n')
    execute('source '.rcfile)

Then the ~/.vim/rc/ folder contains lots of snippets:

$ ls ~/.vim/rc/
00-nocompatible.vim  10-listchars.vim            10-SCCompile.vim
10-abbrev.vim        10-markdown.vim             10-scrolloff.vim
10-astyle.vim        10-mathmode.vim             10-sort.vim
10-boxes.vim         10-modeline.vim             10-syntax.vim
10-colorcolumn.vim   10-more_colors.vim          10-tabwidth.vim
10-colorscheme.vim   10-nerdtree.vim             10-utf8.vim
10-filetype.vim      10-nomousehide.vim          10-windows_size.vim
10-fold.vim          10-number.vim               10-wrap.vim
10-hidden.vim        10-pathogen.vim             10-Y.vim
10-jk.vim            10-rainbow_parentheses.vim  20-trailing_space.vim
10-line_wrap.vim     10-ruler.vim

Compilation into single file

For faster startup times, I now compile all those files into a single .bashrc with this:

_build/.bashrc: $(wildcard bashrc/*.sh)
    echo '# Generated from ~/Branches/dotfiles/. Do not edit manually.' > $@
    echo "# $$(date --rfc-3339=seconds)" >> $@
    echo >> $@
    grep -hvP '^(\s*#|$$)' $^ >> $@

With that, I have to compile the configuration files after I edit something. However, the first start of Bash or Vim will not load some 30 files, which takes a few seconds.