-
Notifications
You must be signed in to change notification settings - Fork 0
/
.bash_profile
239 lines (189 loc) · 6.56 KB
/
.bash_profile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# ----------------------------------------------------------------------------
# SHELL OPTIONS
# ----------------------------------------------------------------------------
# bring in system bashrc
if [ -r /etc/bashrc ]; then
. /etc/bashrc
fi
# notify of bg job completion immediately
set -o notify
# shell opts. see bash(1) for details
shopt -s extglob >/dev/null 2>&1
shopt -s histappend >/dev/null 2>&1
shopt -s hostcomplete >/dev/null 2>&1
# default umask
umask 0022
# ----------------------------------------------------------------------------
# PATH
# ----------------------------------------------------------------------------
CDPATH=.:$HOME/Documents
# we want the various sbins on the path along with /usr/local/bin
PATH="/usr/local/bin:/usr/local/sbin:/usr/sbin:$PATH"
PATH="$PATH:$HOME/.composer/vendor/bin"
# put ~/bin first on PATH
if [ -d "$HOME/bin" ]; then
PATH="$HOME/bin:$PATH"
fi
# ----------------------------------------------------------------------------
# ENVIRONMENT CONFIGURATION
# ----------------------------------------------------------------------------
# enable en_US locale w/ utf-8 encodings if not already configured
: ${LANG:="en_US.UTF-8"}
: ${LANGUAGE:="en"}
: ${LC_CTYPE:="en_US.UTF-8"}
: ${LC_ALL:="en_US.UTF-8"}
export LANG LANGUAGE LC_CTYPE LC_ALL
# history stuff
HISTCONTROL=ignoreboth
if [ "$(uname)" != "Darwin" ]; then
HISTFILESIZE=100000
HISTSIZE=100000
fi
# this is important!
EDITOR=vim
export EDITOR
# pager
if [ -n "$(command -v less)" ]; then
PAGER="less -irSw"
MANPAGER="less -iRsw"
else
PAGER=more
MANPAGER="$PAGER"
fi
export PAGER MANPAGER
# ----------------------------------------------------------------------------
# PROMPT
# ----------------------------------------------------------------------------
# git prompt options
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWCOLORHINTS=true
GIT_PS1_SHOWSTASHSTATE=true
# root is red
if [ $(id -u) -eq 0 ]; then
COL=1
else
COL=24
fi
PS1='\[$(tput setaf ${COL})\]\h: \W\[$(tput setaf 3)\]$(__git_ps1 " (%s)")\[$(tput setaf ${COL})\] \342\226\270 \[$(tput sgr0)\]'
# CWD for tmux
PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'
# ----------------------------------------------------------------------------
# BASH COMPLETION
# ----------------------------------------------------------------------------
# use brew bash-completion when on OS X otherwhise use linux variant
if which brew > /dev/null && [ -f "$(brew --prefix)/etc/bash_completion" ]; then
source "$(brew --prefix)/etc/bash_completion";
elif [ -f /etc/bash_completion ]; then
source /etc/bash_completion;
fi;
# SSH auto-completion based on entries in known_hosts.
if [[ -e ~/.ssh/known_hosts ]]; then
complete -W "$(echo `cat ~/.ssh/known_hosts | cut -f 1 -d ' ' | sed -e s/,.*//g | uniq | grep -v "\["`;)" ssh
fi
# ----------------------------------------------------------------------
# COLORS
# ----------------------------------------------------------------------
# color grep and less
alias='grep --color=auto'
export LESS=-R
# Detect which 'ls' flavor is in use
if ls --color > /dev/null 2>&1; then # GNU 'ls'
colorflag="--color"
else # OS X 'ls'
colorflag="-G"
fi
# List files colorized in long format
alias ll="ls -lh ${colorflag}"
# List all files colorized
alias la="ls -lah ${colorflag}"
# Always use color output for `ls`
alias ls="command ls ${colorflag}"
export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:'
# man pages
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;37m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'
# grc
GRC=`which grc`
if [ "$TERM" != dumb ] && [ -n "$GRC" ]
then
alias colourify="$GRC -es --colour=auto"
alias configure='colourify ./configure'
for app in {diff,make,gcc,g++,mtr,netstat,traceroute,head,tail,dig,mount,ps,mtr,df}; do
alias "$app"='colourify '$app
done
fi
# ----------------------------------------------------------------------------
# FUNCTIONS & ALIASES
# ----------------------------------------------------------------------------
alias gd='git diff --color | sed -E "s/^([^-+ ]*)[-+ ]/\\1/"'
sysvnc() {
x11vnc -connect sysops-tv$1.intern:5500
}
# display external IP address
myip() {
echo $(dig +short myip.opendns.com @resolver1.opendns.com)
}
# set tmux pane title to short hostname on ssh
ssh() {
if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
tmux rename-window "$(echo $* | cut -d . -f 1)"
command ssh "$@"
tmux set-window-option automatic-rename "on" 1>/dev/null
else
command ssh "$@"
fi
}
# show all DNS infos
function digga() {
dig +nocmd "$1" any +multiline +noall +answer
}
# choose random line from file
function raffle() {
head -$((${RANDOM} % `wc -l < $1` + 1)) $1 | tail -1
}
# get random BOFH excuse
function bofh() {
telnet towel.blinkenlights.nl 666
}
# ping with timestamp
pingt() {
while :;do ping -n -w1 -W1 -c1 $1| grep -E "rtt|100%"| sed -e "s/^/`date` /g"; sleep 1; done
}
# ----------------------------------------------------------------------------
# OS X SPECIFIC STUFF
# ----------------------------------------------------------------------------
if [ "$(uname)" == "Darwin" ]; then
# check if host is up and announce through text-to-speech
hostup() {
if (( $# != 1 )); then
echo "Usage: hostup HOSTNAME"
else
until $(which ping) -W1 -c1 ${1} > /dev/null; do sleep 5; done && $(which say) "${1} is up"
fi
}
# OS X specific aliases
alias top='top -o cpu'
alias talk='cat - | while read cat; do say $cat; done'
# Homestead helper
function vm() {
cd ~/Homestead
command="$1"
if [ "$command" = "edit" ]; then
open ~/.homestead/homestead.yaml
else
if [ -z "$command" ]; then
command="ssh"
fi
eval "vagrant ${command}"
fi
cd -
}
else
alias pbcopy='xsel --clipboard --input'
fi
alias open=gvfs-open