# Return immediately if non-interactive (makes FTP clients happy) [[ "$-" == *i* ]] || return ############################################################################## # Customize environment ############################################################################## export EDITOR="vim" 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 LESSHISTFILE=/dev/null export PAGER=less # Find out where Homebrew performs installations. If Homebrew is not # installed (e.g. running on Linux), assume /usr/local for our # installations. prefix=/usr/local if command -v brew &>/dev/null; then prefix=$(brew --prefix) fi # Prevent path_helper from messing with the PATH when starting tmux. # See: https://superuser.com/a/583502 if [ "$(uname)" == "Darwin" ]; then PATH="" source /etc/profile fi # Add custom bin dirs to PATH if they exist and are not already in PATH. while read bindir; do if [ -d "$bindir" ] && [[ ":$PATH:" != *":$bindir:"* ]]; then PATH="$bindir:$PATH" fi done </dev/null)" fi } __ps1_jobs() { local job_count=$(jobs | wc -l) if [ ${job_count} -gt 0 ]; then printf "${1:-%s}" "bg:${job_count}" fi } ############################################################################## # Customize shell aliases ############################################################################## # Make `ls` group directories first if supported. if ls --group-directories-first &>/dev/null; then alias ls="ls -hF --group-directories-first --color=auto" # GNU else alias ls="ls -hF -G" # BSD fi # Force `ls` to use color output (e.g. for piping into `less`). if ls --color=auto &>/dev/null; then alias lsc="ls --color=always" # GNU else alias lsc="/usr/bin/env CLICOLOR_FORCE=1 ls" # BSD fi alias la="ls -a" alias ll="ls -l" alias llc="lsc -l" alias lla="ls -la" alias llac="lsc -la" alias grep="grep --color=auto"; alias egrep="egrep --color=auto"; alias fgrep="fgrep --color=auto"; alias path='echo $PATH | tr -s ":" "\n"' alias mpath='echo $MANPATH | tr -s ":" "\n"' alias timer='echo "Timer started. Stop with Ctrl-D." && date && time cat && date' # A few options to get public IP address on command line. The dig solution # below using the OpenDNS resolver doesn't work when connected to # ExpressVPN because all DNS requests are handled by the ExpressVPN DNS # servers and the OpenDNS DNS resolver is blocked. alias myip="curl https://ifconfig.co" #alias myip="curl https://ifconfig.me" #alias myip="dig +short myip.opendns.com @resolver1.opendns.com" alias light='_update_colors light' alias dark='_update_colors dark' _send_osc() { local OSC=$'\e]' ST=$'\e\\' if [ -n "$TMUX" ]; then OSC=$'\ePtmux;\e\e]' ST=$'\e\e\\\e\\'; fi echo -n "$OSC$1$ST" } _update_colors() { export BACKGROUND="$1" local cursor=$Red_RGB fg=$Base1_RGB bg=$Base03_RGB if [ $BACKGROUND = light ]; then fg=$Base01_RGB; bg=$Base3_RGB; fi local n rgb comment if [ -n "$ITERM_SESSION_ID" ] then # iTerm2 while read n rgb comment; do _send_osc "P$n$rgb"; done </dev/null && [ -f $ls_colors ]; then eval "$(dircolors $ls_colors)" fi } ############################################################################## # Add shell functions ############################################################################## tree() { command tree --dirsfirst -FI '.git|Spotlight-V100|.fseventsd' "$@"; } ltree() { tree -C "$@" | less -R; } # Combined mkdir and cd mkcd() { mkdir -p -- "$1" && cd -P -- "$1"; } # Colorized `man` man() { local rst=$(tput sgr0) local standout=$(tput -S <<<$(echo -e "setaf $Base03\nsetab $Cyan")) local bold=$(tput -S <<<$(echo -e "setaf $Yellow")) local underline=$(tput -S <<<$(echo -e "setaf $Base3\nsmul")) if [ $BACKGROUND = light ]; then standout=$(tput -S <<<$(echo -e "setaf $Base3\nsetab $Cyan")) bold=$(tput -S <<<$(echo -e "setaf $Blue")) underline=$(tput -S <<<$(echo -e "setaf $Base02\nsmul")) fi LESS_TERMCAP_so=$standout \ LESS_TERMCAP_md=$bold \ LESS_TERMCAP_us=$underline \ LESS_TERMCAP_se=$rst \ LESS_TERMCAP_me=$rst \ LESS_TERMCAP_ue=$rst \ GROFF_NO_SGR=1 \ command man "$@" } solarized() { local name rst=$(tput sgr0) for name in Red Orange Yellow Green Cyan Blue Violet Magenta Base{0{3..0},{0..3}} do local name_rgb=${name}_RGB local i=${!name} rgb=${!name_rgb} local fg=$(tput setaf $i) bg=$(tput setab $i) printf "$bg%6s$rst $fg#$rgb %2d $name$rst\n" '' $i done } # Print all 256 colors colortest() { local i j rst=$(tput sgr0) for i in $(seq 0 15); do for j in $(seq 0 15); do local n=$(( 16 * $i + $j )) printf "$(tput setab $n) %3d " $n done echo $rst done } ############################################################################## # Run external cusomizations ############################################################################## stty -ixon # disable ctrl-s and ctrl-q _update_colors "${BACKGROUND:-dark}" # Enable available completion helpers if [ -d /usr/local/etc/bash_completion.d ]; then for completion in /usr/local/etc/bash_completion.d/*; do source "$completion" done unset completion fi # Source a local bashrc if available if [ -f "$HOME/.bashrc.local" ]; then source "$HOME/.bashrc.local" fi