-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path.bash_profile
250 lines (214 loc) · 6.53 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
240
241
242
243
244
245
246
247
248
249
250
#!/usr/bin/env bash
#
# ~/.bash_profile
#
##
# ADD `~/bin` TO THE `$PATH`.
##
export PATH="$HOME/bin:$PATH";
# shellcheck source=$HOME/bin/nerd-fonts/i_all.sh disable=1091
. "$HOME/bin/nerd-fonts/i_all.sh";
##
# LOAD THE SHELL DOTFILES, AND THEN SOME:
# ~/.path CAN BE USED TO EXTEND `$PATH`.
# ~/.extra CAN BE USED FOR OTHER SETTINGS YOU DON'T WANT TO COMMIT.
##
for file in ~/dotfiles/.{path,bash_prompt,exports,aliases,functions,extra,profile,personal}; do
# shellcheck disable=1090
[ -r "$file" ] && [ -f "$file" ] && . "$file";
done;
unset file;
##
# CASE-INSENSITIVE GLOBBING (USED IN PATHNAME EXPANSION).
##
shopt -s nocaseglob;
##
# APPEND TO THE BASH HISTORY FILE, RATHER THAN OVERWRITING IT.
##
shopt -s histappend;
##
# AUTOCORRECT TYPOS IN PATH NAMES WHEN USING `cd`.
##
shopt -s cdspell;
##
# 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;
##
# ADD TAB COMPLETION FOR MANY BASH COMMANDS.
##
if which brew &> /dev/null && [ -r "$(brew --prefix)/etc/profile.d/bash_completion.sh" ]; then
# Ensure existing Homebrew v1 completions continue to work
BASH_COMPLETION_COMPAT_DIR="$(brew --prefix)/etc/bash_completion.d";
export BASH_COMPLETION_COMPAT_DIR;
# shellcheck source=/dev/null
source "$(brew --prefix)/etc/profile.d/bash_completion.sh";
elif [ -f /etc/bash_completion ]; then
#shellcheck disable=1091
source /etc/bash_completion;
fi;
##
# ENABLE TAB COMPLETION FOR `g` BY MARKING IT AS AN ALIAS FOR `git`.
##
if type _git &> /dev/null; then
complete -o default -o nospace -F _git g;
fi;
##
# ADD TAB COMPLETION FOR SSH HOSTNAMES BASED ON ~/.ssh/config, IGNORING WILDCARDS.
##
function __completeSSHHosts {
COMPREPLY=()
local currentWord=${COMP_WORDS[COMP_CWORD]}
completeHosts=$(
< "$HOME/.ssh/config" \
grep --extended-regexp "^Host +([^* ]+ +)*[^* ]+ *$" | \
tr -s " " | \
sed -E "s/^Host +//"
)
local completeHosts
# COMPREPLY=( $(compgen -W "$completeHosts" -- "$currentWord") )
mapfile -t COMPREPLY < <(compgen -W "$completeHosts" -- "$currentWord")
return 0
}
complete -F __completeSSHHosts ssh
# _complete_ssh_hosts ()
# {
# COMPREPLY=()
# cur="${COMP_WORDS[COMP_CWORD]}"
# comp_ssh_hosts=$(cmd < ~/.ssh/known_hosts 2>/dev/null | \
# cut -f 1 -d ' ' | \
# sed -e s/,.*//g | \
# grep -v ^# | \
# uniq | \
# grep -v "\[" ;
# cmd < ~/.ssh/config 2>/dev/null | \
# grep "^Host " | \
# awk '{print $2}'
# )
# mapfile -t COMPREPLY < <(compgen -W "${comp_ssh_hosts}" -- "${cur}")
# return 0
# }
# complete -F _complete_ssh_hosts ssh
##
# ADD TAB COMPLETION FOR `defaults read|write nsglobaldomain`
# YOU COULD JUST USE `-g` INSTEAD, BUT I LIKE BEING EXPLICIT.
##
complete -W "NSGlobalDomain" defaults;
##
# ADD `killall` TAB COMPLETION FOR COMMON APPS.
##
complete -o "nospace" -W "Contacts Calendar Dock Finder Mail Safari iTunes SystemUIServer Terminal" killall;
################################################################################
#
# GOOGLE CLOUD PLATFORM
#
################################################################################
##
# THE NEXT LINE UPDATES $PATH FOR THE GOOGLE CLOUD SDK.
##
if [ -f "$(brew --prefix)/Caskroom/google-cloud-sdk/path.bash.inc" ]; then
# shellcheck disable=SC1090,SC1091
. "$(brew --prefix)/Caskroom/google-cloud-sdk/path.bash.inc";
fi
##
# THE NEXT LINE ENABLES SHELL COMMAND COMPLETION FOR `gcloud`.
##
if [ -f "$(brew --prefix)/Caskroom/google-cloud-sdk/completion.bash.inc" ]; then
# shellcheck disable=SC1090,SC1091
. "$(brew --prefix)/Caskroom/google-cloud-sdk/completion.bash.inc";
fi
################################################################################
#
# NVM
#
################################################################################
export NVM_DIR="$HOME/.nvm"
# shellcheck disable=1090
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
# shellcheck disable=1090
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
##
# Change Title Name Of Tab In Terminal.
##
#function title {
# echo -ne "\033]0;\"$*\"\007"
#}
##
# Check For A `.nvmrc` File When Entering A Directory, Then
# Automatically Activate The Required Version Of NodeJS. If The
# Required Version Is Not Currently Installed, It Will Download,
# Install & Activate The Correct Version For You.
##
cd () {
builtin cd "$@" && chNodeVersion;
}
pushd () {
builtin pushd "$@" && chNodeVersion;
}
popd () {
builtin popd "$@" && chNodeVersion;
}
chNodeVersion() {
local NODE_VERSION
NODE_VERSION="$(nvm version)"
local NVMRC_PATH
NVMRC_PATH="$(nvm_find_nvmrc)"
if [ -n "$NVMRC_PATH" ]; then
local NVMRC_NODE_VERSION
NVMRC_NODE_VERSION=$(nvm version "$(cat "${NVMRC_PATH}")")
if [ "$NVMRC_NODE_VERSION" = "N/A" ]; then
echo -e "—[ WARNING ]— Required version NodeJS is not currently installed. Downloading Now!";
nvm install
elif [ "$NVMRC_NODE_VERSION" != "$NODE_VERSION" ]; then
nvm use
fi
elif [ "$NODE_VERSION" != "$(nvm version default)" ]; then
nvm use default
fi
}
chNodeVersion;
################################################################################
#
# TRAVIS CI
#
################################################################################
##
# ADDED BY TRAVIS GEM.
##
#[ -f /Users/bbentley/.travis/travis.sh ] && source /Users/bbentley/.travis/travis.sh
################################################################################
#
# iTerm
#
################################################################################
##
# THIS WILL SET YOUR WINDOW TITLE.
##
#export PROMPT_COMMAND='echo -ne "\033]0;${PWD##*/}\007"'
##
# iTerm SHELL INTEGRATION.
##
# shellcheck disable=1090
test -e "$HOME/.iterm2_shell_integration.bash" && . "$HOME/.iterm2_shell_integration.bash"
##
# SET CUSTOM iTerm2 USER VARIABLES.
##
function iterm2_print_user_vars() {
iterm2_set_user_var badge "$(dir_badges)"
}
##
# CUSTOM BADGES ON A DIRECTORY-BY-DIRECTOY BASIS, DEFINED IN `~/dotfiles/.badges`.
##
function dir_badges() {
while read -r directory badge || [[ -n "$directory" ]]
do
if [[ "$PWD" == $directory* ]]; then
echo "$badge"
break
fi
done < ~/dotfiles/.badges
}