# Don't do anything if not running interactively. [[ -z "$PS1" ]] && return # Use vi as my text editor. export EDITOR=vi # Keep plenty of history. unset HISTFILESIZE HISTSIZE=1000000 # Ignore duplicate commands and whitespace in history. HISTCONTROL=ignoreboth # Keep the times of the commands in history. HISTTIMEFORMAT='%F %T ' # Add history entries directly. PROMPT_COMMAND="history -a; ${PROMPT_COMMAND}" # Don't check for mail all the time, it's irritating. unset MAILCHECK # Autocorrect fudged paths in cd calls. shopt -s cdspell &>/dev/null # Update columns and rows if window size changes. shopt -s checkwinsize &>/dev/null # Put multi-line commands onto one line of history. shopt -s cmdhist &>/dev/null # Autocorrect fudged paths during completion. shopt -s dirspell &>/dev/null # Include dotfiles in pattern matching. shopt -s dotglob &>/dev/null # Enable advanced pattern matching. shopt -s extglob &>/dev/null # Enable double-starring paths. shopt -s globstar &>/dev/null # Append rather than overwrite Bash history. shopt -s histappend &>/dev/null # Never beep at me. hash setterm &>/dev/null && setterm -bfreq 0 # Turn off annoying and useless flow control keys. hash stty &>/dev/null && stty -ixon # Use completion, if available. [[ -e /etc/bash_completion ]] && source /etc/bash_completion # SSH agent setup, if available. [[ -e "${HOME}/.ssh/agent" ]] && source "${HOME}/.ssh/agent" # If we're using an xterm, force 256 colors. [[ "$TERM" == xterm* ]] && TERM=xterm-256color # Figure out how many colors we have. hash tput && COLORS=$(tput colors) # If we have a color terminal, we'll use color for ls and grep. if [[ $COLORS -ge 8 ]]; then hash dircolors &>/dev/null && eval "$(dircolors -b)" if ls --help | grep -- --color &>/dev/null; then LS_OPTS="${LS_OPTS} --color=auto" fi if grep --help | grep -- --color &>/dev/null; then GREP_OPTS="${GREP_OPTS} --color=auto" fi fi # Set up more options for grep; exclude version control files. if ls --help | grep -- --exclude &>/dev/null; then for PATTERN in .git .gitignore .gitmodules; do GREP_OPTS="${GREP_OPTS} --exclude=${PATTERN}" done fi if grep --help | grep -- --exclude-dir &>/dev/null; then for PATTERN in .cvs .git .hg .svn; do GREP_OPTS="${GREP_OPTS} --exclude-dir=${PATTERN}" done fi # Uncolored bits of my prompt, we'll color them if appropriate shortly. PS1='[\u@\h:\w]\$' # Save some color codes based on our colour space. if [[ $COLORS -ge 256 ]]; then COLOR_ROOT='\[\e[38;5;9m\]' COLOR_USER='\[\e[38;5;10m\]' COLOR_UNDO='\[\e[0m\]' elif [[ $COLORS -ge 8 ]]; then COLOR_ROOT='\[\e[1;31m\]' COLOR_USER='\[\e[1;32m\]' COLOR_UNDO='\[\e[0m\]' else COLOR_ROOT= COLOR_USER= COLOR_UNDO= fi # Change prompt color depending on whether I'm root or not. if [[ $EUID -eq 0 ]]; then PS1=${COLOR_ROOT}${PS1}${COLOR_UNDO} else PS1=${COLOR_USER}${PS1}${COLOR_UNDO} fi # Add space suffice to prompt. PS1="${PS1} " # Set window titles in various terminals. case "$TERM" in screen*) PS1='\[\ek\h\e\\\]'${PS1};; xterm*) PS1='\[\e]0;\h\a\]'${PS1};; esac # Alias ls and grep with the options we've collected. alias ls="ls ${LS_OPTS}" alias grep="grep ${GREP_OPTS}" # Protect innocent MySQL databases from my stupidity. alias mysql='mysql --safe-updates' # I always do this, and I hate slow train. alias sl='ls'