# Don't put duplicate lines in the history export HISTCONTROL=ignoreboth:erasedups # Set history length HISTFILESIZE=1000000000 HISTSIZE=1000000 # Append to the history file, don't overwrite it shopt -s histappend # Check the window size after each command and, if necessary, update the values of LINES and COLUMNS shopt -s checkwinsize # Autocorrect typos in path names when using `cd` shopt -s cdspell # Save all lines of a multiple-line command in the same history entry (allows easy re-editing of multi-line commands) shopt -s cmdhist # Do not autocomplete when accidentally pressing Tab on an empty line. (It takes forever and yields "Display all 15 gazillion possibilites?") shopt -s no_empty_cmd_completion # Do not overwrite files when redirecting using ">". Note that you can still override this with ">|" set -o noclobber # Enable some Bash 4 features when possible: # * `autocd`, e.g. `**/qux` will enter `./foo/bar/baz/qux` # * Recursive globbing, e.g. `echo **/*.txt` for option in autocd globstar; do shopt -s "$option" 2> /dev/null done # Locale export LC_ALL=en_US.UTF-8 export LANG="en_US" # Prepend $PATH without duplicates function _prepend_path() { if ! $( echo "$PATH" | tr ":" "\n" | grep -qx "$1" ) ; then PATH="$1:$PATH" fi } # Construct $PATH PATH='/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin' [ -d /usr/texbin ] && _prepend_path "/usr/texbin" [ -d /usr/local/sbin ] && _prepend_path "/usr/local/sbin" [ -d /usr/local/bin ] && _prepend_path "/usr/local/bin" [ -d /usr/local/share/npm/bin ] && _prepend_path "/usr/local/share/npm/bin" [ -d /usr/local/opt/ruby/bin ] && _prepend_path "/usr/local/opt/ruby/bin" [ -d /usr/local/share/python ] && _prepend_path "/usr/local/share/python" command -v brew >/dev/null 2>&1 && _prepend_path "$(brew --prefix coreutils)/libexec/gnubin" [ -d ~/dotfiles/bin ] && _prepend_path "$HOME/dotfiles/bin" [ -d ~/bin ] && _prepend_path "$HOME/bin" export PATH # Colors RED="$(tput setaf 1)" GREEN="$(tput setaf 2)" YELLOW="$(tput setaf 3)" BLUE="$(tput setaf 4)" MAGENTA="$(tput setaf 5)" CYAN="$(tput setaf 6)" WHITE="$(tput setaf 7)" GRAY="$(tput setaf 8)" BOLD="$(tput bold)" UNDERLINE="$(tput sgr 0 1)" INVERT="$(tput sgr 1 0)" NOCOLOR="$(tput sgr0)" # vim is default editor export EDITOR=`which vim` # Load prompt and aliases for file in ~/dotfiles/includes/bash_{prompt,aliases,functions,git}.bash; do [ -r "$file" ] && source "$file" done unset file # If possible, add tab completion for many commands [ -f /etc/bash_completion ] && source /etc/bash_completion # Bash completion (installed via Homebrew; source after `brew` is added to PATH) command -v brew >/dev/null 2>&1 && [ -r "$(brew --prefix)/etc/bash_completion" ] && source "$(brew --prefix)/etc/bash_completion" # Add tab completion for SSH hostnames based on ~/.ssh/config, ignoring wildcards function _ssh_reload_autocomplete() { [ -e "~/.ssh/config" ] && complete -o "default" -o "nospace" -W "$(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2)" scp sftp ssh } _ssh_reload_autocomplete # Grunt completion command -v grunt >/dev/null 2>&1 && eval "$(grunt --completion=bash)" # Tamia generator completion function _tamia_autocomplete() { # List of subgenerators local available=$(for file in /usr/local/share/npm/lib/node_modules/generator-tamia/*/index.js; do echo $file | cut -d / -f 9; done) # The word fragment local word=${COMP_WORDS[COMP_CWORD]} # Don’t attempt to filter w/`grep` if `$word` is empty local filtered=$(if [ -z "$word" ]; then echo "$available"; else echo "$available" | grep $word; fi) COMPREPLY=($filtered) } command -v yo >/dev/null 2>&1 && complete -F _tamia_autocomplete tm # Tell ls to be colourful export CLICOLOR=1 # Tell grep to highlight matches export GREP_OPTIONS='--color=auto' # Make less the default pager, and specify some useful defaults. less_options=( # If the entire text fits on one screen, just show it and quit. (Be more # like "cat" and less like "more".) --quit-if-one-screen # Do not clear the screen first. --no-init # Like "smartcase" in Vim: ignore case unless the search pattern is mixed. --ignore-case # Do not automatically wrap long lines. --chop-long-lines # Allow ANSI colour escapes, but no other escapes. --RAW-CONTROL-CHARS # Do not ring the bell when trying to scroll past the end of the buffer. --quiet # Do not complain when we are on a dumb terminal. --dumb ); export LESS="${less_options[*]}" unset less_options export PAGER='less' # Load extra (private) settings [ -f ~/.bashlocal ] && source ~/.bashlocal