# Environment variables export EDITOR="vim" export HISTSIZE="65536" export HISTFILESIZE="$HISTSIZE" export HISTCONTROL=ignoredups:ignorespace export LANG="en_US.UTF-8" export LANGUAGE="en_US" export LC_CTYPE="en_US.UTF-8" export LC_ALL="en_US.UTF-8" export LESS="-i -j.49 -M -R -z-2" export PAGER=less export DOTFILES="$HOME/.dotfiles" # Find out where Homebrew performs installations. If Homebrew is not installed # (e.g. running on Linux), assume /usr/local for our installations. if command -v brew &>/dev/null; then BREW_PREFIX=$(brew --prefix) else BREW_PREFIX=/usr/local fi # Prevent path_helper from messing with the PATH when starting tmux. # See: https://superuser.com/a/583502 if [ -f /etc/profile ]; then export PATH="" source /etc/profile fi # Add custom bin dirs to PATH if they exist and are not already in PATH. for p in $BREW_PREFIX/opt/coreutils/libexec/gnubin $DOTFILES/bin $HOME/bin; do if [ -d "$p" ] && [[ ":$PATH:" != *":$p:"* ]]; then PATH="$p:$PATH" fi done # If MANPATH is not yet defined, initialize it with the contents of `manpath`. if [ -z ${MANPATH+x} ]; then export MANPATH=$(manpath) fi # Prepend custom man directories to MANPATH if they exist, so that we get # correct man page entries when multiple versions of a command are available. for p in $BREW_PREFIX/share/man $BREW_PREFIX/opt/coreutils/libexec/gnuman; do if [ -d "$p" ] && [[ ":$MANPATH:" != *":$p:"* ]]; then MANPATH="$p:$MANPATH" fi done # Useful aliases if ls --group-directories-first >/dev/null 2>&1 then ls_dir_group="--group-directories-first" # GNU version else ls_dir_group="" # BSD version, doesn't support directory grouping fi alias g="git" alias ls="ls -hF --color=auto ${ls_dir_group}" alias la="ls -a" alias ll="ls -l" alias lla="ls -la" alias grep="grep --color=auto"; alias egrep="egrep --color=auto"; alias fgrep="fgrep --color=auto"; alias v="vim" alias vi="vim" alias path='echo $PATH | tr -s ":" "\n"' alias mpath='echo $MANPATH | tr -s ":" "\n"' # Shell options for option in cdspell checkwinsize globstar histappend nocaseglob do shopt -s "$option" 2> /dev/null done # Add git command completion source "$DOTFILES/resources/git-completion.bash" # combined mkdir and cd mkcd() { mkdir -p -- "$1" && cd -P -- "$1"; } # Change a color in the terminal's palette change_palette() ( IFS="" # $* should be joined without spaces if [ -n "$TMUX" ]; then # http://permalink.gmane.org/gmane.comp.terminal-emulators.tmux.user/1324 echo -ne "\033Ptmux;\033\033]$*\007\033\\" elif [ "${TERM%%-*}" = "screen" ]; then echo -ne "\033P\033]$*\007\033\\" else echo -ne "\033]$*\033\\" fi ) # Solarize the shell by adjusting: # - the terminal's color palette # - the ANSI color palette # - prompt string # - `ls` command output colors do_solarize_shell() { [ -z "$BACKGROUND" ] && export BACKGROUND="dark" if [ "$TERM_PROGRAM" = "Apple_Terminal" ]; then echo "tell application \"Terminal\" to set current settings of selected tab of front window to settings set \"solarized-$BACKGROUND\"" | osascript else # Solarized colors from http://ethanschoonover.com/solarized base03=002b36 base02=073642 base01=586e75 base00=657b83 base0=839496 base1=93a1a1 base2=eee8d5 base3=fdf6e3 red=dc322f orange=cb4b16 yellow=b58900 green=859900 cyan=2aa198 blue=268bd2 violet=6c71c4 magenta=d33682 # Customize the terminal's color palette & determine selector for # changing the ANSI color palette below cursor_color=$red if [ "$BACKGROUND" = "dark" ]; then bg_color=$base03 fg_color=$base1 else bg_color=$base2 fg_color=$base02 fi if [ -n "$ITERM_SESSION_ID" ]; then change_palette Pg $fg_color # Foreground change_palette Pi $fg_color # Bold change_palette Ph $bg_color # Background change_palette Pj $base01 # Selection change_palette Pk $base2 # Selected text change_palette Pl $cursor_color # Cursor change_palette Pm $cursor_color # Cursor text selector="P%s" a=a b=b c=c d=d e=e f=f else change_palette "10;#" $fg_color # Foreground change_palette "11;#" $bg_color # Background change_palette "12;#" $cursor_color # Cursor selector="4;%d;#" a=10 b=11 c=12 d=13 e=14 f=15 fi # Change the ANSI color palette # iTerm2: Pnrrggbb (http://iterm2.com/documentation-escape-codes.html) # other terminals: 4;n;#rrggbb # Pn or 4;n;# n rrggbb ANSI name change_palette $(printf $selector 0) $base02 # 0;30 black change_palette $(printf $selector 1) $red # 0;31 red change_palette $(printf $selector 2) $green # 0;32 green change_palette $(printf $selector 3) $yellow # 0;33 yellow change_palette $(printf $selector 4) $blue # 0;34 blue change_palette $(printf $selector 5) $magenta # 0;35 magenta change_palette $(printf $selector 6) $cyan # 0;36 cyan change_palette $(printf $selector 7) $base2 # 0;37 white change_palette $(printf $selector 8) $base03 # 1;30 bold black change_palette $(printf $selector 9) $orange # 1;31 bold red change_palette $(printf $selector $a) $base01 # 1;32 bold green change_palette $(printf $selector $b) $base00 # 1;33 bold yellow change_palette $(printf $selector $c) $base0 # 1;34 bold blue change_palette $(printf $selector $d) $violet # 1;35 bold magenta change_palette $(printf $selector $e) $base1 # 1;36 bold cyan change_palette $(printf $selector $f) $base3 # 1;37 bold white fi # Customize the prompt if [ $(id -u) -eq 0 ]; then __c="1;31" # orange user name for root elif [ -n "$SSH_CLIENT" ]; then __c="0;33" # yellow user name when connected via SSH else __c="0;36" # default user name color is cyan fi export PS1="[\[\033[${__c}m\]\u@\h \[\033[0;34m\]\w\[\033[0m\]]\n\$ " export PS2=". " # Customize colors for `ls` command ls_colors="$HOME/.dircolors/solarized-$BACKGROUND" if type dircolors &> /dev/null && [ -f $ls_colors ]; then eval "$(dircolors $ls_colors)" fi } # Quickly change between light and dark background light() { export BACKGROUND="light" && do_solarize_shell; } dark() { export BACKGROUND="dark" && do_solarize_shell; } # Print the solarized palette (for testing) solarized() { printf "\033[%sm%-7s %-s %2d\033[0m " "1;30" Base03 "1;30" 8 printf "\033[%sm%-7s %-s %2d\033[0m\n" "0;31" Red "0;31" 1 printf "\033[%sm%-7s %-s %2d\033[0m " "0;30" Base02 "0;30" 0 printf "\033[%sm%-7s %-s %2d\033[0m\n" "1;31" Orange "1;31" 9 printf "\033[%sm%-7s %-s %2d\033[0m " "1;32" Base01 "1;32" 10 printf "\033[%sm%-7s %-s %2d\033[0m\n" "0;33" Yellow "0;33" 3 printf "\033[%sm%-7s %-s %2d\033[0m " "1;33" Base00 "1;33" 11 printf "\033[%sm%-7s %-s %2d\033[0m\n" "0;32" Green "0;32" 2 printf "\033[%sm%-7s %-s %2d\033[0m " "1;34" Base0 "1;34" 12 printf "\033[%sm%-7s %-s %2d\033[0m\n" "0;36" Cyan "0;36" 6 printf "\033[%sm%-7s %-s %2d\033[0m " "1;36" Base1 "1;36" 14 printf "\033[%sm%-7s %-s %2d\033[0m\n" "0;34" Blue "0;34" 4 printf "\033[%sm%-7s %-s %2d\033[0m " "0;37" Base2 "0;37" 7 printf "\033[%sm%-7s %-s %2d\033[0m\n" "1;35" Violet "1;35" 13 printf "\033[%sm%-7s %-s %2d\033[0m " "1;37" Base3 "1;37" 15 printf "\033[%sm%-7s %-s %2d\033[0m\n" "0;35" Magenta "0;35" 5 } # Solarize the shell only if running interactively (makes FTP clients happy) [[ "$-" == *i* ]] && do_solarize_shell # ~/.bashrc.local can be used for local settings (not in repository) [ -f ~/.bashrc.local ] && . ~/.bashrc.local