# /etc/zsh/zshrc ou ~/.zshrc
# Fichier de configuration principal de zsh
# Formation Debian GNU/Linux par Alexis de Lattre
# http://www.via.ecp.fr/~alexis/formation-linux/

# 1. Les alias

# Prompt
#. ~/.zshprompt
#setprompt
#
. ~/.profile

#  Gestion du ls : couleur + touche pas aux accents
alias ls='ls --classify --tabsize=0 --literal --color=auto --show-control-chars --human-readable'

# Completition pour killall
zstyle '*:processes-names' command 'ps -e -o comm='

# Gestion du grep : couleur
alias grep='grep --color=auto'

# Demande confirmation avant d'écraser un fichier
alias cp='cp -v --interactive'
alias mv='mv -v --interactive'
alias rm='rm -v --interactive'

# Raccourcis pour 'ls'
alias ll='ls -l'
alias la='ls -a'
alias lla='ls -la'

# Quelques alias pratiques
alias c='clear'
alias less='less --quiet'
alias s='cd ..'
alias h='cd ~'
alias df='df --human-readable'
alias du='du -s --human-readable'
alias free='free -m'
#alias grep='grep --ignore-case --color=auto'
alias lns='ln -s -v'
#alias updateadb='sudo updatedb'
alias updateadb="sudo updatedb --prunepaths='/tmp /var/tmp /media /Data/dist0 /Data/dist1'"
alias reboot='sudo reboot'
alias halt='sudo halt'
alias lsg='ls | grep'
alias lag='ls -a | grep'
alias llg='ls -l | grep'
alias llag='ls -la | grep'
alias lsgi='ls | grep -i'
alias lagi='ls -a | grep -i'
alias llgi='ls -l | grep -i'
alias llagi='ls -la | grep -i'
alias md='mkdir'
alias rd='rmdir'
alias rf='rm -rf'
alias rmf='rm -rf'
alias tarj='tar xjpf'
alias tarz='tar xzf'
alias sudorm='sudo rm -iv'
alias rmsudo='sudo rm -i'
alias su='su -'

# Lecteurs et périphériques
alias mpg123='mpg123 -C'
alias mplayerdvd='mplayer -dvd-device /dev/sr0 dvd://1'
alias gmplayerdvd='gmplayer -dvd-device /dev/sr0 dvd://1'
alias mplayercd='mplayer -cdrom-device /dev/sr0 cdda://'
alias vlcnc='vlc -I ncurses -f'
alias vlcqt='vlc -I qt4 -f'
alias vlc='vlc -I ncurses -f'
alias vlcdvd='vlc -I ncurses -f dvd:///dev/sr0'
alias vlccd='vlc -I ncurses -f cdda:///dev/sr0'
alias cdplay='cdplay -v -d /dev/sr0'
alias cdstop='cdstop -d /dev/sr0'
alias cdpause='cdpause -d /dev/sr0'
alias cdeject='cdeject -d /dev/sr0'
alias cdclose='cdeject -d /dev/sr0'
alias cdshuffle='cdshuffle -d /dev/sr0'
alias mocp='mocp -T black_theme'

# Autres
alias d='date +%A\ %d\ %B\ %Y,\ %Hh\ %Mm\ et\ %Ss'
alias claws='claws-mail'
alias alpine='alpine -passfile ~/.alpine-passfile'
alias alpineS='screen -S alpine'
alias alpineR='screen -R alpine'
alias screenSalpine='screen -S alpine'
alias screenRalpine='screen -R alpine'
#alias password-gorilla='/opt/password-gorilla/tclkit-linux-x86 /opt/password-gorilla/gorilla-1.4.kit'
#alias gorilla='/opt/password-gorilla/tclkit-linux-x86 /opt/password-gorilla/gorilla-1.4.kit'
alias blaster='mp3blaster'
alias ketchupd='ketchup -fG --archive /Data/Linux/Kernel/ketchup 2.6'
alias surf='surf -u http://www.scroogle.org/scraper.html'
alias gksuem='gksu --sudo-mode emelfm2'
alias gksu='gksu --sudo-mode'
alias em='emelfm2'
alias xsexit='xscreensaver-command -exit'
alias ifconfiggnet='ifconfig | grep inet'
alias fehbgscale='feh --bg-scale'
alias fehbgcenter='feh --bg-center'
alias fehbgfill='feh --bg-fill'
alias fehbgmax='feh --bg-max'
alias mixer='alsamixer'
alias ncftp-lam='ncftp --bookmark lamarelle'
alias ncftp-lam.org='ncftp --bookmark lamarelle.org'
alias streamtuner2='/opt/streamtuner2/st2.py'
alias smmail='/opt/seamonkey-v2-pkg/seamonkey -P "SeaMonkey2_fs" -mail'

# Mount
alias dlinux0-deb='sudo mount -v -t reiserfs /dev/sda2 $dlinux0'
alias dlinux0-debh='sudo mount -v -t reiserfs /dev/sda7 $dlinux0'
alias dlinux0-sid='sudo mount -v -t reiserfs /dev/sda12 $dlinux0'
alias dlinux0-slack='sudo mount -v -t reiserfs /dev/sda13 $dlinux0'
alias dlinux0-mageia='sudo mount -v -t reiserfs /dev/sda15 $dlinux0'
alias dlinux0-lfsh='sudo mount -v -t reiserfs /dev/sda11 $dlinux0'
alias dlinux0-lfs='sudo mount -v -t reiserfs /dev/sda10 $dlinux0'
alias dlinux0-deb='sudo mount -v -t reiserfs /dev/sda2 $dlinux0'
alias dlinux1-debh='sudo mount -v -t reiserfs /dev/sda7 $dlinux1'
alias dlinux1-sid='sudo mount -v -t reiserfs /dev/sda12 $dlinux1'
alias dlinux1-slack='sudo mount -v -t reiserfs /dev/sda13 $dlinux1'
alias dlinux1-lfsh='sudo mount -v -t reiserfs /dev/sda11 $dlinux1'
alias dlinux1-lfs='sudo mount -v -t reiserfs /dev/sda10 $dlinux1'
alias dlinux1-mageia='sudo mount -v -t reiserfs /dev/sda15 $dlinux1'
alias cdlinux0='cd /media/phil/dlinux0'
alias cdlinux1='cd /media/phil/dlinux1'
alias dbsd='sudo mount -v -r -t ufs -o ufstype=ufs2 /dev/sda1 /media/freebsd'
alias dfreebsdusr='sudo mount -v -r -t ufs -o ufstype=ufs2 /dev/sda20 /media/freebsdusr'
alias dfreebsdroot='sudo mount -v -r -t ufs -o ufstype=ufs2 /dev/sda1 /media/freebsdroot'
alias udfreebsdusr='sudo umount -v /media/freebsdusr'
alias udfreebsdroot='sudo umount -v /media/freebsdroot'
alias udlinux0='sudo umount -v $dlinux0'
alias udlinux1='sudo umount -v $dlinux1'
#alias disquette='mount -v /media/phil/disquette'
#alias udisquette='umount -v /media/phil/disquette'
alias mcdrom='mount -v /media/phil/cdrom'
alias umcdrom='umount -v /media/phil/cdrom'
alias mountext2='sudo mount -v -t ext2'
alias mountfat='sudo mount -v -t vfat'
alias cddisque0='cd /media/phil/disque0'
alias cddisque1='cd /media/phil/disque1'
alias cddisque2='cd /media/phil/disque2'
alias cdlinux0='cd /media/phil/dlinux0'
alias cdlinux1='cd /media/phil/dlinux1'

# Émulateurs de terminal
#alias $TERM='aterm -transparent -fg white +sb'
alias xterm='uxterm -bg black -fg grey95'
alias uxterm='uxterm -bg black -fg grey95'

#alias k3b='/opt/kde4/bin/k3b'
#alias k3bsetup='/opt/kde4/bin/k3bsetup'
#alias dragon='/opt/kde4/bin/dragon'
#alias gwenview='/opt/kde4/bin/gwenview'
#alias kmix='/opt/kde4/bin/kmix'
#alias kscd='/opt/kde4/bin/kscd'
#alias ksnapshot='/opt/kde4/bin/ksnapshot'
#alias kruler='/opt/kde4/bin/kruler'

# 2. Prompt et Définition des touches

# exemple : ma touche HOME, cf man termcap, est codifiee K1 (upper left
# key on keyboard) dans le /etc/termcap. En me referant a l'entree
# correspondant a mon terminal (par exemple 'linux') dans ce fichier, je
# lis : K1=\E[1~, c'est la sequence de caracteres qui sera envoyee au
# shell. La commande bindkey dit simplement au shell : a chaque fois que
# tu rencontres telle sequence de caractere, tu dois faire telle action.
# La liste des actions est disponible dans "man zshzle".

# Correspondance touches-fonction
bindkey '^A'    beginning-of-line       # Home
bindkey '^E'    end-of-line             # End
bindkey '^D'    delete-char             # Del
bindkey '^[[3~' delete-char             # Del
bindkey '^[[2~' overwrite-mode          # Insert
bindkey '^[[5~' history-search-backward # PgUp
bindkey '^[[6~' history-search-forward  # PgDn

# Prompt couleur (la couleur n'est pas la même pour le root et
# pour les simples utilisateurs)

###"if [ "`id -u`" -eq 0 ]; then
  ####export PS1="%{^[[36;1m%}%T%{^[[0m%} %{^[[34;1m%}%n%{^[[0m^[[33;1m%}@%{^[[37;1m%}%m %{^[[32;1m%}%~%{^[[0m^[[33;1m%}%#%{^[[0m%} "
####else
  ####export PS1="%{^[[37;1m%}%T%{^[[0m%} %{^[[32;1m%}%n%{^[[0m^[[33;1m%}@%{^[[37;1m%}%m %{^[[33;1m%}%~%{^[[0m^[[32;1m%}%#%{^[[0m%} "
####fi

if [ "`id -u`" -eq 0 ]; then
  export PS1="%{^[[36;1m%}%T%{^[[0m%} %{^[[34;1m%}%n%{^[[0m^[[33;1m%}@%{^[[37;1m%}%m %{^[[32;1m%}%~%{^[[0m^[[33;1m%}%#%{^[[0m%} "
else
  export PS1="%{^[[37;1m%}%T%{^[[0m%} %{^[[32;1m%}%n%{^[[0m^[[33;1m%}@%{^[[37;1m%}%m %{^[[33;1m%}%~%{^[[0m^[[32;1m%}%#%{^[[0m%} "
fi

# Console linux, dans un screen ou un rxvt
if [ "$TERM" = "linux" -o "$TERM" = "screen" -o "$TERM" = "rxvt" ]
then
  # Correspondance touches-fonction spécifique
  bindkey '^[[1~' beginning-of-line       # Home
  bindkey '^[[4~' end-of-line             # End
fi

# xterm
if [ "$TERM" = "xterm" ]
then
  # Correspondance touches-fonction spécifique
  bindkey '^[[H'  beginning-of-line       # Home
  bindkey '^[[F'  end-of-line             # End
fi

# gnome-terminal
#if [ "$COLORTERM" = "gnome-terminal" ]
#then
  # Correspondance touches-fonction spécifique
 # bindkey '^[OH'  beginning-of-line       # Home
 # bindkey '^[OF'  end-of-line             # End
#fi

# Gestion de la couleur pour 'ls' (exportation de LS_COLORS)
if [ -x /bin/dircolors ]
then
  if [ -r ~/.dir_colors ]
  then
    eval "`dircolors ~/.dir_colors`"
  elif [ -r /etc/dir_colors ]
  then
    eval "`dircolors /etc/dir_colors`"
  else
    eval "`dircolors`"
  fi
fi

#
# 3. Options de zsh (cf 'man zshoptions')
#

# Je ne veux JAMAIS de beeps
unsetopt beep
unsetopt hist_beep
unsetopt list_beep
# >| doit être utilisés pour pouvoir écraser un fichier déjà existant ;
# le fichier ne sera pas écrasé avec '>'
unsetopt clobber
# Ctrl+D est équivalent à 'logout'
unsetopt ignore_eof
# Affiche le code de sortie si différent de '0'
setopt print_exit_value
# Demande confirmation pour 'rm *'
unsetopt rm_star_silent
# Correction orthographique des commandes
# Désactivé car, contrairement à ce que dit le "man", il essaye de
# corriger les commandes avant de les hasher
#setopt correct
# Si on utilise des jokers dans une liste d'arguments, retire les jokers
# qui ne correspondent à rien au lieu de donner une erreur
setopt nullglob

# Schémas de complétion

# - Schéma A :
# 1ère tabulation : complète jusqu'au bout de la partie commune
# 2ème tabulation : propose une liste de choix
# 3ème tabulation : complète avec le 1er item de la liste
# 4ème tabulation : complète avec le 2ème item de la liste, etc...
# -> c'est le schéma de complétion par défaut de zsh.

# Schéma B :
# 1ère tabulation : propose une liste de choix et complète avec le 1er item
#                   de la liste
# 2ème tabulation : complète avec le 2ème item de la liste, etc...
# Si vous voulez ce schéma, décommentez la ligne suivante :
#setopt menu_complete

# Schéma C :
# 1ère tabulation : complète jusqu'au bout de la partie commune et
#                   propose une liste de choix
# 2ème tabulation : complète avec le 1er item de la liste
# 3ème tabulation : complète avec le 2ème item de la liste, etc...
# Ce schéma est le meilleur à mon goût !
# Si vous voulez ce schéma, décommentez la ligne suivante :
unsetopt list_ambiguous
# (Merci à Youri van Rietschoten de m'avoir donné l'info !)

# Options de complétion
# Quand le dernier caractère d'une complétion est '/' et que l'on
# tape 'espace' après, le '/' est effaçé
setopt auto_remove_slash
# Ne fait pas de complétion sur les fichiers et répertoires cachés
#unsetopt glob_dots

# Traite les liens symboliques comme il faut
setopt chase_links

# Quand l'utilisateur commence sa commande par '!' pour faire de la
# complétion historique, il n'exécute pas la commande immédiatement
# mais il écrit la commande dans le prompt
setopt hist_verify
# Si la commande est invalide mais correspond au nom d'un sous-répertoire
# exécuter 'cd sous-répertoire'
setopt auto_cd
# L'exécution de "cd" met le répertoire d'où l'on vient sur la pile
setopt auto_pushd
# Ignore les doublons dans la pile
setopt pushd_ignore_dups
# N'affiche pas la pile après un "pushd" ou "popd"
setopt pushd_silent
# "pushd" sans argument = "pushd $HOME"
setopt pushd_to_home

# Les jobs qui tournent en tâche de fond sont nicés à '0'
unsetopt bg_nice
# N'envoie pas de "HUP" aux jobs qui tourent quand le shell se ferme
unsetopt hup

#
# 4. Paramètres de l'historique des commandes
#

# Nombre d'entrées dans l'historique
export HISTORY=1000
export SAVEHIST=1000
# Fichier où est stocké l'historique
export HISTFILE=$HOME/.history

#
# 5. Complétion des options des commandes
#

zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}'
zstyle ':completion:*' max-errors 3 numeric
zstyle ':completion:*' use-compctl false

# Pas d'avertissement au sujet d'"insecure directories":
autoload -U compinit
compinit