.bashrc 7.93 KB
Newer Older
1 2
# .bashrc générique mis à votre disposition
# par les gentils membres actifs du Cr@ns
Vincent Le gallic's avatar
Vincent Le gallic committed
3
# Vous pouvez l'utiliser, le redistribuer, le modifier à votre convenance.
4
# Des questions, des suggestions : {nounou,ca}@lists.crans.org
5 6 7 8 9
# Licence : WTFPL

# Les sections commentées par #~# sont des features qui ne sont pas activées
# par défaut. Sentez-vous libre de les décommenter pour les utiliser. 

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
# Pour les shells non interactif (sous emacs, avec rcp, ...)
# on ne charge pas le .bashrc
[ -z "$PS1" -o "$TERM" = dumb ] && return

# Hack pour que $COLUMNS contienne le nombre de colonne du terminal
# Sinon, le prompt kikoo risque de déborder/être trop court
COLUMNS=$(tput cols)
shopt -s checkwinsize

# +-------------------------+
# | Customizations diverses |
# +-------------------------+

# Utilisation de lesspipe comme PAGER si il est présent
[[ -x /usr/bin/lesspipe ]] && eval "$(lesspipe)"

# Couleur pour certaines commandes (ls, …)
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
fi

# Bash-complétion
[ -f /etc/bash_completion ] && . /etc/bash_completion
# Placez vos fichiers de bash-complétion custom dans ~/.bash_completion.d/
# ils seront chargés par la ligne suivante
[ -d ~/.bash_completion.d/ ] && for f in ~/.bash_completion.d/*; do source $f; done


#~# # +-----+
#~# # | VCS |
#~# # +-----+
#~# 
#~# # Définition de fonction pour pouvoir afficher dans le prompt
#~# # des infos quand on est dans un dépôt versionné
#~# 
#~# get_vcs_info () {
#~#     # Donne les infos sur le dépôt VCS courant.
#~#     # priorité à git, puis darcs
50
#~#     local LBRANCH LTYPE BRANCH TYPE violet orange vert
51 52 53 54
#~#     violet="\[\e[35m\]"
#~#     orange="\[\e[33m\]"
#~#     vert="\[\e[32m\]"
#~#     nocolor="\[\e[0m\]"
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
#~#     declare -a TYPE
#~#     declare -a BRANCH
#~#     TYPE[0]="git"
#~#     TYPE[1]="mercurial"
#~#     TYPE[2]="darcs"
#~#     TYPE[3]="svn"
#~#     BRANCH[0]='git branch 2>/dev/null | sed -r "s/^[^*].*$//" | paste -s -d "" | sed -r "s/^[*] //"'
#~#     BRANCH[1]='hg branch 2>/dev/null'
#~#     BRANCH[2]="darcs show repo 2>/dev/null| egrep '^ *Cache' | sed 's@.*/\([^/]*\),.*@\1@'"
#~#     BRANCH[3]="svn info 2>/dev/null | head -n 6 | tail -n 1"
#~#     for i in $(seq 0 $((${#BRANCH[*]}-1))); do
#~#         LBRANCH=$(eval "${BRANCH[$i]}")
#~#         if [ -n "$LBRANCH" ]; then
#~#            LTYPE="${TYPE[$i]}"
#~#            break
70
#~#         fi
71 72
#~#     done
#~#     if [ -n "$LTYPE" ];
73
#~#     then
74 75 76 77 78
#~#         if [ "$color_prompt" = yes ]; then
#~#             VCS_info="${nocolor}${violet}(${nocolor}$LTYPE${violet})-${violet}[${vert}$LBRANCH${violet}]${nocolor}"
#~#         else
#~#             VCS_info="($LTYPE)-[$LBRANCH]"
#~#         fi
79
#~#         VCS_size=$((${#LTYPE}+${#LBRANCH}+5))
80 81 82 83 84 85
#~#     else
#~#         VCS_info=""
#~#         VCS_size=0
#~#     fi
#~# }

Vincent Le gallic's avatar
Vincent Le gallic committed
86 87 88 89 90 91 92 93 94 95
# Pour avoir le bon umask en fonction du dossier où on se trouve
# L'umask définit avec quel droits un fichier est créé.
# Quand on écrit dans un dossier et qu'on veut que, par défaut,
# d'autres personnes puissent modifier les fichiers, il faut changer l'umask.
# Rien de spécial n'arrivera si vous n'avez pas le fichier .umaskrc
function cd {
        builtin cd "$@"
        [ -f ~/.umaskrc ] &&  umask $(/usr/bin/awk 'BEGIN {pwd=ENVIRON["PWD"]; a=length(pwd); cmax=0} {if($1==pwd) {MASK=$2;exit}; c=length($1); if(c>a) {next}; if(substr(pwd,0,c)==$1 && c > cmax) {cmax=c; MASK=$2}} END {print MASK}' ~/.umaskrc) >/dev/null
}

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
### Attention à ce que vous éditez dans cette section ###
### v v v v v v v v v v ###
# +----------------------+
# | Génération du prompt |
# +----------------------+


# Génération de la ligne de "-"
function gen_minus_line
{
    local i

    MINUS_LINE=""
    SAVE_COLUMNS=$COLUMNS

    for ((i = COLUMNS-23; i>0; i--)); do
	MINUS_LINE=$MINUS_CHAR$MINUS_LINE
    done
}

# Génération du prompt après chaque commande
function prompt_command
{
    # Attention aux hacks pour que la couleur (et sa taille)
    #  soient évaluées au moment de l'affichage du prompt
    local pwd cyan violet jaune rouge vert bleu ERR DATE PROMPT DIR POST_DIR
    (( SAVE_COLUMNS == COLUMNS )) || gen_minus_line
123

Vincent Le gallic's avatar
Vincent Le gallic committed
124 125
#~#     #dépend de la section VCS
#~#     get_vcs_info
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
    
    cyan='\[\e[1;36m\]'
    violet='\[\e[1;35m\]'
    jaune='\[\e[1;33m\]'
    rouge='\[\e[1;31m\]'
    vert='\[\e[1;32m\]'
    bleu='\[\e[1;34m\]'
    nocolor='\[\e[0m\]'
    
    pwd=${PWD/#$HOME/'~'}
    if (( ${#pwd} + ${VCS_size} + 27 > COLUMNS )); then
 	    if (( COLUMNS >= 33 )); then
	        DIR='..'${pwd:${#pwd}+${VCS_size}+30-COLUMNS}
            POST_DIR='${MINUS_LINE:0:4-${#?}}'
	    else
	        DIR=$pwd
            POST_DIR=$MINUS_CHAR
	    fi
    else
	    DIR=$pwd
        POST_DIR='${MINUS_LINE:'${#pwd}+${VCS_size}+1'+${#?}}'
    fi
148 149 150 151 152 153 154 155 156 157 158 159 160
    if [ "$color_prompt" = yes ]; then
        DIR="< ${jaune}"$DIR"${cyan} >"
        ERR='[ \[\e[1;$((31+($?==0)*6))m\]$?'${cyan}' ]'$MINUS_CHAR
        DATE="( ${violet}\D{%H:%M:%S}${cyan} )"
        PROMPT="${rouge}\u${vert}@${bleu}\h ${vert}\$ ${nocolor}"
        PS1=$TITLE${cyan}$MINUS_CHAR$DATE$MINUS_CHAR$DIR$MINUS_CHAR$VCS_info${cyan}$POST_DIR$ERR'\n'$PROMPT
    else
        DIR="< "$DIR" >"
        ERR='[ $? ]'$MINUS_CHAR
        DATE="( \D{%H:%M:%S} )"
        PROMPT="\u@\h \$ "
        PS1=$TITLE$MINUS_CHAR$DATE$MINUS_CHAR$DIR$MINUS_CHAR$VCS_info$POST_DIR$ERR'\n'$PROMPT
    fi
161 162
}

163 164 165 166 167 168 169 170
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # support de la couleur
    color_prompt=yes
else
    # pas de support de la couleur
    color_prompt=no
fi

171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
# On change le titre de la fenêtre dynamiquement si on est sous X
if [[ $TERM = "xterm" ]]; then
    TITLE='\[\e];\u@\h:\w\a\]'
else
    TITLE=''
fi

# On regénére le prompt après chaque commande
PROMPT_COMMAND=prompt_command

# +-------------------+
# | Messages au début |
# +-------------------+

if [[ $(uname) == Linux && ( $(locale charmap) == UTF-8 && $TERM != screen ) ]]; then
    MINUS_CHAR=
    gen_minus_line
    date=$(/bin/date +"%R, %A %d %B %Y")
    redate=${date//é/e}
    redate=${redate//û/u}
191 192
    if [ "$color_prompt" = yes ]; then
        echo -e "\e[1;36m┬─${redate//?/─}──┬${MINUS_LINE:${#date}-18}\n\
193 194
\e[1;37m$date\e[1;31m \e[1;36m │\n\
└─${redate//?/─}──┘\e[0m\n"
195 196 197 198 199
    else
        echo -e "┬─${redate//?/─}──┬${MINUS_LINE:${#date}-18}\n\
$date\n\
└─${redate//?/─}──┘\n"
    fi
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
    unset date
else
    MINUS_CHAR=-
    gen_minus_line
fi
### ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ###
### Attention à ce que vous avez édité dans cette section ###


# +---------------------------------------+
# | Gestion de l'historique des commandes |
# +---------------------------------------+

# On ne sauve pas les lignes dupliquées qui se suivent dans l'historique
# ainsi que les commandes qui commencent par une espace
export HISTCONTROL=ignoreboth

# Nombre de lignes d'historique à garder
export HISTSIZE=5000

# la même chose dans le fichier d'historique
export HISTFILESIZE=5000

223
# Mémoriser le timestamp d'exécution de la commande
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
export HISTTIMEFORMAT='%F %T - '

# pour sauvegarder les commandes de plusieurs lignes (\ ) en une seule
shopt -s cmdhist
# pour enregistrer tout de suite les commandes dans l'historique
# et non pas à la fermeture du shell
shopt -s histappend


# +---------------+
# | Environnement |
# +---------------+

# Pour éviter un troll, aucune ligne de cette section n'est décommentée.
# Choisissez la vôtre.
#~# export EDITOR='/usr/bin/nano'
#~# export EDITOR='/usr/bin/vim'
#~# export EDITOR='/usr/bin/emacs'
#~# export EDITOR='/usr/bin/jed'

# Ajouter ~/bin, /sbin et /usr/sbin à son PATH
PATH=~/bin:$PATH:/sbin:/usr/sbin

# Chargement des alias
if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# Fichier locaux (utile quand on clone sa config sur plusieurs machines)
[[ -f ~/.bashrc.local ]] && . ~/.bashrc.local

if [ -f ~/.bash_aliases_local ]; then
    . ~/.bash_aliases_local
fi