/dotfiles

dotfiles: bash, git, osx, etc.

Primary LanguageShellMIT LicenseMIT

Dotfiles (Adapted from Nicolas Gallagher’s)

My OS X dotfiles.

How to install

The installation step requires the XCode Command Line Tools and may overwrite existing dotfiles in your HOME directory.

$ bash -c "$(curl -fsSL raw.github.com/Wilto/dotfiles/master/bin/dotfiles)"

N.B. If you wish to fork this project and maintain your own dotfiles, you must substitute my username for your own in the above command and the 2 variables found at the top of the bin/dotfiles script.

How to update

You should run the update when:

  • You make a change to ~/.dotfiles/git/gitconfig (the only file that is copied rather than symlinked).
  • You want to pull changes from the remote repository.
  • You want to update Homebrew formulae and Node packages.

Run the dotfiles command:

$ dotfiles

Options:

-h, --help Help
-l, --list List of additional applications to install
--no-packages Suppress package updates
--no-sync Suppress pulling from the remote repository

Features

Automatic software installation

Homebrew formulae:

Node packages:

N.B. If your pre-existing Homebrew installation is not in /usr/local then you must prepend your custom installation's bin to the PATH in .bash_profile.local:

# Add `brew` command's custom location to PATH
PATH="/opt/acme/bin:$PATH"

Custom OS X defaults

Custom OS X settings can be applied during the dotfiles process. They can also be applied independently by running the following command:

$ osxdefaults

Bootable backup-drive script

These dotfiles include a script that will incrementally back up your data to an external, bootable clone of your computer's internal drive. First, make sure that the value of DST in the bin/backup script matches the name of your backup-drive. Then run the following command:

$ backup

For more information on how to setup your backup-drive, please read the preparatory steps in this post on creating a Mac OS X bootable backup drive.

Custom bash prompt

I use a custom bash prompt based on the Solarized color palette and influenced by @gf3's and @cowboy's custom prompts. For best results, you should install iTerm2 and import Solarized Dark.itermcolors.

When your current working directory is a Git repository, the prompt will display the checked-out branch's name (and failing that, the commit SHA that HEAD is pointing to). The state of the working tree is reflected in the following way:

+ Uncommitted changes in the index
! Unstaged changes
? Untracked files
$ Stashed files

Further details are in the bash_prompt file.

Screenshot:

Also, because I would constantly find myself working on gh-pages despite having it right there in my prompt, I added a little color hinting on the current branch. While I was at it, I set any branch with “stable” in the name in an extra scary shade of red.

Local and private configurations

Any special-case Vim directives local to a machine should be stored in a .vimrc.local file on that machine. The directives will then be automatically imported into your master .vimrc.

Any private and custom commands should be stored in a ~/.bash_profile.local file. Any commands included in this file will not be under version control or committed to a public repository. If ~/.bash_profile.local exists, it will be sourced for inclusion in bash_profile.

Here is an example ~/.bash_profile.local:

# PATH exports
PATH=$PATH:~/.gem/ruby/1.8/bin
export PATH

# Git credentials
# Not under version control to prevent people from
# accidentally committing with your details
GIT_AUTHOR_NAME="Muscles McTouchdown"
GIT_AUTHOR_EMAIL="muscles@example.com"
GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"
GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"
# Set the credentials (modifies ~/.gitconfig)
git config --global user.name "$GIT_AUTHOR_NAME"
git config --global user.email "$GIT_AUTHOR_EMAIL"

The git/gitconfig file is copied to ~/.gitconfig, so any private git configuration specified in ~/.bash_profile.local will not be committed to your dotfiles repository.

Acknowledgements

Inspiration and code was taken from many sources, including: