-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbashrc
executable file
·275 lines (239 loc) · 9.68 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
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
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
#! /bin/bash
################################################################################
# .bashrc -- my personal Bourne-Again shell (aka bash) configuration
# see https://github.com/hcartiaux/dotfiles
#
# Copyright (c) 2010 Sebastien Varrette <[email protected]>
# https://varrette.gforge.uni.lu
# Copyright (c) 2013 Hyacinthe Cartiaux <[email protected]>
# _ _
# | |__ __ _ ___| |__ _ __ ___
# | '_ \ / _` / __| '_ \| '__/ __|
# _ | |_) | (_| \__ \ | | | | | (__
# (_) |_.__/ \__,_|___/_| |_|_| \___|
#
################################################################################
# This file is NOT part of GNU bash
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <http://www.gnu.org/licenses/>.
################################################################################
# Resources:
# - https://github.com/Falkor/dotfiles/blob/master/bash/.bashrc
# - http://bitbucket.org/dmpayton/dotfiles/src/tip/.bashrc
# - https://github.com/rtomayko/dotfiles/blob/rtomayko/.bashrc
# -------------------------------------------------------------------
# USER SHELL ENVIRONMENT
# -------------------------------------------------------------------
# Source bash_environment
if [ -f ~/.bash_environment ]; then
. ~/.bash_environment
fi
# Eventually load you private settings (not exposed here)
test -f ~/.bash_private &&
. ~/.bash_private
# MOTD
test -n "$INTERACTIVE" -a -n "$LOGIN" && (
uname -npsr
uptime
)
# ----------------------------------------------------------------------
# SHELL OPTIONS
# ----------------------------------------------------------------------
# bring in system bashrc
test -r /etc/bashrc &&
. /etc/bashrc
# bring in git prompt
. ~/.git-prompt.sh
# shell opts. see bash(1) for details
shopt -s cdspell >/dev/null 2>&1 # correct minor errors in the spelling
# of a directory in a cd command
shopt -s extglob >/dev/null 2>&1 # extended pattern matching
shopt -s hostcomplete >/dev/null 2>&1 # perform hostname completion
# on '@'
shopt -s direxpand >/dev/null 2>&1 # replaces variables on filename completion
shopt -s cdable_vars >/dev/null 2>&1
#shopt -s no_empty_cmd_completion >/dev/null 2>&1
shopt -u mailwarn >/dev/null 2>&1
# default umask
umask 0022
# ----------------------------------------------------------------------
# BASH COMPLETION
# ----------------------------------------------------------------------
bash=${BASH_VERSION%.*}
bmajor=${bash%.*}
bminor=${bash#*.}
test -n "$PS1" && test $bmajor -gt 1 && (
# search for a bash_completion file to source
for f in /usr/local/etc/bash_completion \
/opt/local/etc/bash_completion \
/etc/bash_completion; do
test -f $f && . $f && break
done
)
unset bash bmajor bminor
# ----------------------------------------------------------------------
# BASH HISTORY
# ----------------------------------------------------------------------
# Append to HISTFILE instead of overwriting
shopt -s histappend
# Increase the history size
HISTSIZE=10000
HISTFILESIZE=20000
# Lines which begin with a space character are not saved in the history list.
HISTCONTROL=ignorespace
# Add date and time to the history
HISTTIMEFORMAT="[%d/%m/%Y %H:%M:%S] "
# ----------------------------------------------------------------------
# VERSION CONTROL SYSTEM - SVN and GIT
# ----------------------------------------------------------------------
## display the current subversion revision (to be used later in the prompt)
__svn_ps1() {
(
local svnversion
svnversion=$(svnversion | sed -e "s/[:M]//g")
# Continue if $svnversion is numerical
let $svnversion
if [[ $? -eq "0" ]]; then
printf " (svn:%s)" "$(svnversion)"
fi
) 2>/dev/null
}
# render __git_ps1 even better so as to show activity in a git repository
export GIT_PS1_SHOWDIRTYSTATE=1
# ----------------------------------------------------------------------
# PROMPT
# ----------------------------------------------------------------------
# Define some colors to use in the prompt
RESET_COLOR="\[\e[0m\]"
BOLD_COLOR="\[\e[1m\]"
WHITE="\[\e[0;37m\]"
RED="\[\e[0;31m\]"
GREEN="\[\e[0;32m\]"
BLUE="\[\e[34;1m\]"
YELLOW="\[\e[0;33m\]"
LIGHT_CYAN="\[\e[36;1m\]"
CYAN_UNDERLINE="\[\e[4;36m\]"
# Configure user color and prompt type depending on whoami
if [ "$LOGNAME" = "root" ]; then
COLOR_USER="${RED}"
P="#"
else
COLOR_USER="${WHITE}"
P="$"
fi
# get virtualization information
XENTYPE=""
if [ -f "/sys/hypervisor/uuid" ]; then
if [ "$(</sys/hypervisor/uuid)" == "00000000-0000-0000-0000-000000000000" ]; then
XENTYPE=",Dom0"
else
XENTYPE=",DomU"
fi
fi
# Test the PS1_EXTRA variable
if [ -z "${PS1_EXTRA}" -a -f "/proc/cmdline" ]; then
# Here PS1_EXTRA is not set and/or empty, check additionally if it has not
# been set via kernel comment
kernel_ps1_extra="$(grep PS1_EXTRA /proc/cmdline)"
if [ -n "${kernel_ps1_extra}" ]; then
PS1_EXTRA=$(sed -e "s/.*PS1_EXTRA=\"\?\([^ ^\t^\"]\+\)\"\?.*/\1/g" /proc/cmdline)
fi
fi
PS1_EXTRAINFO="${BOLD_COLOR}${DOMAIN}${XENTYPE}${RESET_COLOR}"
if [ -n "${PS1_EXTRA}" ]; then
PS1_EXTRAINFO="${PS1_EXTRAINFO},${YELLOW}${PS1_EXTRA}${RESET_COLOR}"
fi
# Test if we are in a screen session
if [ "${SHLVL}" -ge "2" ]; then
PS1_SCREEN='\[\033k\033\\\]'
fi
# This function is called from a subshell in $PS1, to provide the colorized
# exit status of the last run command.
# Exit status 130 is also considered as good as it corresponds to a CTRL-D
__colorized_exit_status() {
printf -- "\$(status=\$? ; if [[ \$status = 0 || \$status = 130 ]]; then \
echo -e '\[\e[01;32m\]'\$status; \
else \
echo -e '\[\e[01;31m\]'\$status; fi)"
}
###########
# my prompt; the format is as follows:
#
# [hh:mm:ss]:$?:username@hostname(domain[,xentype][,extrainfo])[OAR job info] workingdir(svn/git status) $>
# `--------' ^ `------' `------' `--------'`--------------'
# cyan | root:red cyan light green
# | underline blue (absent if not relevant)
# exit code of
# the previous command
#
# The git/svn status part is quite interesting: if you are in a directory under
# version control, you have the following information in the prompt:
# - under GIT: current branch name, followed by a '*' if the repository has
# uncommitted changes, followed by a '+' if some elements were
# 'git add'ed but not commited.
# - under SVN: show (svn:XX[M]) where XX is the current revision number,
# followed by 'M' if the repository has uncommitted changes
#
# `domain` reflect the current domain of the machine that run the prompt
# (guessed from hostname -f)
# `xentype` is DOM0 or domU depending if the machine is a Xen dom0 or domU
# Finally, is the environment variable PS1_EXTRA is set (or passed to the
# kernel), then its content is displayed here.
#
# This prompt is perfect for terminal with black background, in my case the
# Vizor color set (see http://visor.binaryage.com/) or iTerm2
__set_my_prompt() {
PS1="${PS1_SCREEN}$(__colorized_exit_status) ${LIGHT_CYAN}\t${RESET_COLOR} ${COLOR_USER}\u${RESET_COLOR}@${CYAN_UNDERLINE}\h${RESET_COLOR}(${PS1_EXTRAINFO})${RED}\$(__slurm_ps1_remaining_time)\$(__oar_ps1_remaining_time)${RESET_COLOR}${GREEN}\$(__git_ps1 \" (%s)\")\$(__svn_ps1)${RESET_COLOR} ${BLUE}\W${RESET_COLOR} ${P} "
}
__set_training_prompt() {
PS1="$(__colorized_exit_status)${RESET_COLOR} \h${job_info} ${BLUE}\W${RESET_COLOR}${GREEN}\$(__git_ps1 \" (%s)\")${RESET_COLOR} \$ "
}
# Set the color prompt by default when interactive
if [ -n "$PS1" ]; then
__set_training_prompt
export PS1
fi
# ----------------------------------------------------------------------
# DIRCOLORS
# ----------------------------------------------------------------------
# Colored output from ls is nice
export CLICOLOR=1
# if the dircolors utility is available, set that up to
dircolors="$(type -P gdircolors dircolors | head -1)"
test -n "$dircolors" && (
COLORS=/etc/DIR_COLORS
test -e "/etc/DIR_COLORS.$TERM" && COLORS="/etc/DIR_COLORS.$TERM"
test -e "$HOME/.dircolors" && COLORS="$HOME/.dircolors"
test ! -e "$COLORS" && COLORS=
eval "$($dircolors --sh $COLORS)"
)
unset dircolors
# ----------------------------------------------------------------------
# ALIASES
# ----------------------------------------------------------------------
# Source bash_aliases
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# ----------------------------------------------------------------------
# HPC clusters support
# ----------------------------------------------------------------------
# OAR integration
if [ -f ~/.bash_oar ]; then
. ~/.bash_oar
fi
# Slurm integration
if [ -f ~/.bash_slurm ]; then
. ~/.bash_slurm
fi