#! /bin/bash ################################################################################ # .bashrc -- my personal Bourne-Again shell (aka bash) configuration # see https://github.com/hcartiaux/dotfiles # # Copyright (c) 2010 Sebastien Varrette # https://varrette.gforge.uni.lu # Copyright (c) 2013 Hyacinthe Cartiaux # _ _ # | |__ __ _ ___| |__ _ __ ___ # | '_ \ / _` / __| '_ \| '__/ __| # _ | |_) | (_| \__ \ | | | | | (__ # (_) |_.__/ \__,_|___/_| |_|_| \___| # ################################################################################ # 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 . ################################################################################ # 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 # ---------------------------------------------------------------------- # Increase the history size HISTSIZE=10000 HISTFILESIZE=20000 # 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 [ "$( # `--------' ^ `------' `------' `--------'`--------------' # 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 the color prompt by default when interactive if [ -n "$PS1" ]; then __set_my_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