-
Notifications
You must be signed in to change notification settings - Fork 1
/
.bashrc
147 lines (128 loc) · 4.16 KB
/
.bashrc
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
# shellcheck shell=bash
# vim :set ts=2 sw=2 sts=2 et :
# ~/.bashrc: executed by bash(1) for non-login shells.
# path to the local dotfiles repository
if [ -d "$HOME/.dotfiles" ]; then
export DOTFILES="$HOME/.dotfiles"
else
echo "could not find ~/.dotfiles directory"
return
fi
# enable colour support
export TERM="xterm-256color"
# set platform name so that we can run scripts based on the OS
unamestr=$(uname)
if [[ "$unamestr" == 'Linux' ]]; then
platform='linux'
if [[ -d "/run/WSL" ]]; then
platform_wsl='true'
elif grep -q Microsoft /proc/version; then
platform_wsl='true'
else
platform_wsl='false'
fi
elif [[ "$unamestr" == 'Darwin' ]]; then
# shellcheck disable=SC2034
platform='macos'
# shellcheck disable=SC2034
platform_wsl='false'
fi
unset unamestr
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return ;;
esac
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
if [[ "$platform" == "linux" ]]; then
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
fi
# all of our bash files
declare -a config_files path_files completion_files
# shellcheck disable=SC2206
config_files=($DOTFILES/*/*.bash)
# empty the list if we have no matches
# shellcheck disable=SC2128
if [ "$config_files" = "$DOTFILES/*/*.bash" ]; then
config_files=()
path_files=()
completion_files=()
else
# path files
# shellcheck disable=SC2206
path_files=($DOTFILES/*/path.bash)
# shellcheck disable=SC2128
if [ "$path_files" = "$DOTFILES/*/path.bash" ]; then
path_files=()
fi
# remove path_files from config_files
for file in "${path_files[@]}"; do
config_files=("${config_files[@]/$file/}")
done
# completion files
# shellcheck disable=SC2206
completion_files=($DOTFILES/*/completion.bash)
# shellcheck disable=SC2128
if [ "$completion_files" = "$DOTFILES/*/completion.bash" ]; then
completion_files=()
fi
# remove completion_files from config_files
for file in "${completion_files[@]}"; do
config_files=("${config_files[@]/$file/}")
done
# remove empty items in config_files
declare -a clean_config_files
for i in "${!config_files[@]}"; do
if [ "${config_files[i]}" != "" ]; then
clean_config_files+=("${config_files[i]}")
fi
done
config_files=("${clean_config_files[@]}")
unset clean_config_files
fi
# load the path files and remove from config_files
for file in "${path_files[@]}"; do
# shellcheck disable=SC1090
source "$file"
done
# load everything but the path and completion files
for file in "${config_files[@]}"; do
# shellcheck disable=SC1090
source "$file"
done
# load default bash completion on Ubuntu
if [[ "$platform" == "linux" ]]; then
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
fi
# load every completion after autocomplete loads
for file in "${completion_files[@]}"; do
# shellcheck disable=SC1090
source "$file"
done
unset config_files platform platform_wsl completion_files path_files
# Prevent install scripts and my Ansible roles from altering my profile script
# as these are already loaded in the config files.
# /nvm.sh $NVM_DIR/bash_completion
# [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# eval "$(pyenv init -)"
# use .localrc for secret
# shellcheck disable=SC1090
[ -f ~/.localrc ] && . ~/.localrc