.bashrc 6.88 KB
Newer Older
1
2
3
# .bashrc générique mis à votre disposition
# par les gentils membres actifs du Cr@ns
# Vous pouvez l'utilisez, 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
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
# 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
#~#     local BRANCH TYPE violet orange vert
#~#     violet="\[\e[35m\]"
#~#     orange="\[\e[33m\]"
#~#     vert="\[\e[32m\]"
#~#     nocolor="\[\e[0m\]"
#~#     BRANCH=$(git branch 2>/dev/null | sed -r "s/^[^*].*$//" | paste -s -d '' | sed -r "s/^[*] //")
#~#     if [ -n "$BRANCH" ];
#~#     then
#~#         TYPE="git"
#~#     else
#~#         BRANCH=$(darcs show repo 2>/dev/null| egrep '^ *Cache' | sed 's@.*/\([^/]*\),.*@\1@')
#~#         if [ -n "$BRANCH" ];
#~#         then
#~#             TYPE="darcs"
#~#         fi
#~#     fi
#~#     if [ -n "$TYPE" ];
#~#     then
#~#         VCS_info="${nocolor}${violet}(${nocolor}$TYPE${violet})-${violet}[${vert}$BRANCH${violet}]${nocolor}"
#~#         VCS_size=$((${#TYPE}+${#BRANCH}+5))
#~#     else
#~#         VCS_info=""
#~#         VCS_size=0
#~#     fi
#~# }

Vincent Le gallic's avatar
Vincent Le gallic committed
76
77
78
79
80
81
82
83
84
85
# 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
}

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
### 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
113

Vincent Le gallic's avatar
Vincent Le gallic committed
114
115
#~#     #dépend de la section VCS
#~#     get_vcs_info
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
    
    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
    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
}

# 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}
    echo -e "\e[1;36m┬─${redate//?/─}──┬${MINUS_LINE:${#date}-18}\n\
\e[1;37m$date\e[1;31m \e[1;36m │\n\
└─${redate//?/─}──┘\e[0m\n"
    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

191
# Mémoriser le timestamp d'exécution de la commande
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
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