610 lines
12 KiB
Bash
610 lines
12 KiB
Bash
shopt -s checkwinsize #Pour pas s'écrire dessus
|
|
shopt -s histappend
|
|
shopt -s autocd #No more cd xx
|
|
##shopt -s autocd #Like zsh
|
|
PROMPT_COMMAND='history -a'
|
|
|
|
|
|
alias dvorak='setxkbmap dvorak; setxkbmap -option compose:ralt'
|
|
dvorak
|
|
alias qwertz='setxkbmap ch,fr'
|
|
|
|
|
|
#For autocompletions
|
|
|
|
#function have() { return 1; } #Some files use have: suppress warnings (yeah: 2>.. )
|
|
#function _completion_loader() { return 1; }
|
|
#cd /usr/share/bash-completion/completions
|
|
#for i in *; do source ./$i; done
|
|
#unset have
|
|
#unset _completion_loader
|
|
|
|
complete -cf sudo
|
|
complete -cf man
|
|
|
|
|
|
#####ON DEFINIT LES COULEURS
|
|
red='\033[31m'
|
|
RED='\033[31m\033[01m'
|
|
YELLOW='\033[33m'
|
|
GREEN='\033[32m'
|
|
blue='\033[34m'
|
|
BLUE='\033[34m'
|
|
cyan='\033[36m'
|
|
CYAN='\033[36m'
|
|
magenta='\033[35m'
|
|
DFT='\033[0m'
|
|
white='\033[37m'
|
|
|
|
|
|
#####ON DÉFINIT LE TITRE DE LA FENETRE PAR LE REP EN COURS
|
|
case "$TERM" in
|
|
xterm*|rxvt*)
|
|
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
|
|
#####LA COULEUR DU SHELL
|
|
#PS1="$RED\u$DFT$white@$magenta\h $DFT>>$CYAN\w $DFT"
|
|
#PS1="\u@\h >>\w "
|
|
#PS1="\[$RED\u$DFT$white@$magenta\h $DFT>>$CYAN\w $DFT\]"
|
|
#PS1="\[$RED\]\u\[$DFT$white\]@\[$magenta\]\h \[$DFT\]>>\[$CYAN\]\w \[$DFT\]"
|
|
#PROMPT_COMMAND='history -a;echo -en "\033[m\033[38;5;2m"$(( `sed -nu "s/MemFree:[\t ]\+\([0-9]\+\) kB/\1/p" /proc/meminfo`/1024))"\033[38;5;22m/"$((`sed -nu "s/MemTotal:[\t ]\+\([0-9]\+\) kB/\1/Ip" /proc/meminfo`/1024 ))MB"\t\033[m\033[38;5;55m$(< /proc/loadavg)\033[m"'
|
|
|
|
#if [ "$HOSTNAME" == "chuck" ]; then
|
|
# MY_HOST_COL='[31m' #ugly !
|
|
#else
|
|
# MY_HOST_COL='[34m'
|
|
#fi
|
|
|
|
#PS1='\[\e[0;36m\]\t \[\e[1;30m\][\[\e$MY_HOST_COL\]\u@\H\[\e[1;30m\]\[\e[0;32m\]\[\e[1;30m\]] \[\e[1;37m\]\w\[\e[0;37m\] \n$ '
|
|
source ~/.bash_ps1
|
|
|
|
#PS1='\[\e[0;36m\] \T \[\e[1;30m\][\[\e$MY_HOST_COL\]\u@\H\[\e[1;30m\]\[\e[0;32m\]\[\e[1;30m\]] \[\e[1;37m\]\w\[\e[0;37m\] \n$ '
|
|
|
|
|
|
|
|
###############
|
|
#### ALIAS ####
|
|
###############
|
|
# {{{
|
|
alias ..='cd ..'
|
|
alias vf='cd'
|
|
alias xs='cd'
|
|
|
|
alias rm='rm -i'
|
|
alias cp='cp -i'
|
|
|
|
alias mv='mv -i'
|
|
alias vm='mv -i'
|
|
|
|
alias df='dfc'
|
|
alias free='freec'
|
|
alias shred='shred -n 35 -z -u -v -f'
|
|
|
|
if [ "$TERM" != "dumb" ]; then
|
|
eval "`dircolors -b`"
|
|
alias ls='ls --color=auto'
|
|
fi
|
|
alias sl='ls'
|
|
alias la='ls -lah'
|
|
|
|
|
|
|
|
alias sudp='sudo' #fuck tpyos :p
|
|
alias sudpo='sudo'
|
|
|
|
alias halt='sudo poweroff'
|
|
|
|
#alias pacman='pacman-color'
|
|
alias pacmacn='pacman'
|
|
# '[r]emove [o]rphans' - recursively remove ALL orphaned packages
|
|
alias pacro="/usr/bin/pacman -Qtdq > /dev/null && sudo /usr/bin/pacman -Rns \$(/usr/bin/pacman -Qtdq | sed -e ':a;N;\$!ba;s/\n/ /g')"
|
|
|
|
alias grep='grep --color'
|
|
|
|
alias b+='xbacklight -inc 10% -steps 1 -time 0'
|
|
alias b-='xbacklight -dec 10% -steps 1 -time 0'
|
|
|
|
alias svim='sudo vim'
|
|
alias bim='vim'
|
|
alias vi='vim'
|
|
alias VIM='vim'
|
|
alias ivm='vim'
|
|
|
|
alias gl='git log --graph --abbrev-commit --pretty=oneline --decorate'
|
|
alias gitst='git status'
|
|
alias git_mail='git send-email --annotate --compose origin'
|
|
alias poule='git pull'
|
|
alias gs='git status'
|
|
alias gci='git commit'
|
|
alias push='git push'
|
|
|
|
alias makew='make'
|
|
alias mkae='make'
|
|
alias amek='make'
|
|
|
|
alias BSI2='cd ~/Documents/Studies/BSI2*/'
|
|
BSI3_PATH='/home/frank/Documents/Studies/BSI3 - 2013-2014/'
|
|
alias BSI3='cd "$BSI3_PATH"'
|
|
|
|
OCTOPUS=~/.my_utils/octopus.sh
|
|
alias dual='$OCTOPUS monitor dual'
|
|
alias laptop='$OCTOPUS monitor laptop'
|
|
alias programming='$OCTOPUS monitor programming'
|
|
alias extern='$OCTOPUS monitor extern'
|
|
alias clone='$OCTOPUS monitor clone'
|
|
|
|
alias volup='$OCTOPUS volume up'
|
|
alias voldown='$OCTOPUS volume down'
|
|
alias volmute='$OCTOPUS volume mute'
|
|
|
|
alias suspend='$OCTOPUS suspend'
|
|
|
|
alias mfilms='cd /dev/shm && mkdir films && sshfs frank@vi-di.fr:/media/ films/'
|
|
alias muni='cd /dev/shm && mkdir uni && sshfs villaro0@pc69240:/user/l1/2011/villaro0/ uni/'
|
|
|
|
alias upgrub='sudo grub-mkconfig -o /boot/grub/grub.cfg'
|
|
|
|
alias upkey='gpg --keyserver subkeys.pgp.net --send-key 6F36914A'
|
|
alias shm='cd /dev/shm'
|
|
|
|
alias ip6='ip -6'
|
|
alias disk-usage-analyser='baobab'
|
|
alias o='octave --quiet'
|
|
alias R='R --quiet'
|
|
alias cdu='cdu -idh'
|
|
alias dus='du -sh * | sort -h'
|
|
alias im='profanity'
|
|
alias eclipseJEE='/home/frank/Programmation/J2EE/eclipse/eclipse'
|
|
alias mst='mvn install -DskipTests'
|
|
alias arc='tig'
|
|
alias ccat='pygmentize -g' #python-fragments
|
|
# }}}
|
|
|
|
|
|
###############
|
|
## FONCTIONS ##
|
|
###############
|
|
# {{{
|
|
|
|
function toGVA {
|
|
wget http://frank.villaro-dixon.eu/TPG/ -q -O -
|
|
echo ""
|
|
}
|
|
|
|
function fuck {
|
|
killall -9 "$1"
|
|
echo "fucking $1" killed
|
|
}
|
|
|
|
function cd #{{{
|
|
{
|
|
MY_LAST=`pwd`
|
|
if [ $# -eq 0 ]; then
|
|
builtin cd ~ && cons_set > /dev/null && ls
|
|
else
|
|
builtin cd "$*" && cons_set > /dev/null && ls
|
|
fi
|
|
}
|
|
#}}}
|
|
|
|
function back {
|
|
cd $MY_LAST
|
|
}
|
|
|
|
function pdfsearch #{{{
|
|
{
|
|
for pdf in `find ./ -name "*.pdf"`; do
|
|
pdftotext $pdf - | grep --color --with-filename --label="$pdf" "$1";
|
|
done
|
|
}
|
|
#}}}
|
|
|
|
function man { #{{{
|
|
env LESS_TERMCAP_mb=$'\E[01;31m' \
|
|
LESS_TERMCAP_md=$'\E[01;38;5;74m' \
|
|
LESS_TERMCAP_me=$'\E[0m' \
|
|
LESS_TERMCAP_se=$'\E[0m' \
|
|
LESS_TERMCAP_so=$'\E[38;5;246m' \
|
|
LESS_TERMCAP_ue=$'\E[0m' \
|
|
LESS_TERMCAP_us=$'\E[04;38;5;146m' \
|
|
man "$@"
|
|
} #}}}
|
|
|
|
alias ssh='my_ssh'
|
|
function my_ssh #{{{
|
|
{
|
|
ssh-add -l | grep id_rsa.auth > /dev/null
|
|
if [ $? -eq 1 ]; then
|
|
echo -e "$RED Please enter ssh passphrase ;) $DFT"
|
|
ssh-add ~/.ssh/id_rsa.auth
|
|
fi;
|
|
/usr/bin/ssh "$@"
|
|
}
|
|
# }}}
|
|
|
|
alias scp='my_scp'
|
|
function my_scp #{{{
|
|
{
|
|
ssh-add -l | grep id_rsa.auth > /dev/null
|
|
if [ $? -eq 1 ]; then
|
|
echo -e "$RED Please enter ssh passphrase ;) $DFT"
|
|
ssh-add ~/.ssh/id_rsa.auth
|
|
fi;
|
|
/usr/bin/scp "$@"
|
|
}
|
|
# }}}
|
|
|
|
function logs #{{{
|
|
{
|
|
tail -f $1 | ccze -A
|
|
} # }}}
|
|
|
|
function mkcd #{{{
|
|
{
|
|
mkdir -p "$@"
|
|
cd "$@"
|
|
}
|
|
# }}}
|
|
|
|
function extract #{{{
|
|
{
|
|
local e=0 i c
|
|
for i; do
|
|
if [ -f $i && -r $i ]; then
|
|
c=
|
|
case $i in
|
|
*.tar.bz2) c='tar xjf' ;;
|
|
*.tar.gz) c='tar xzf' ;;
|
|
*.bz2) c='bunzip2' ;;
|
|
*.gz) c='gunzip' ;;
|
|
*.tar) c='tar xf' ;;
|
|
*.tbz2) c='tar xjf' ;;
|
|
*.tgz) c='tar xzf' ;;
|
|
*.7z) c='7z x' ;;
|
|
*.Z) c='uncompress' ;;
|
|
*.exe) c='cabextract' ;;
|
|
*.rar) c='unrar x' ;;
|
|
*.xz) c='unxz' ;;
|
|
*.zip) c='unzip' ;;
|
|
*) echo "$0: cannot extract \`$i': Unrecognized file extension" >&2; e=1 ;;
|
|
esac
|
|
[ $c ] && command $c "$i"
|
|
else
|
|
echo "$0: cannot extract \`$i': File is unreadable" >&2; e=2
|
|
fi
|
|
done
|
|
return $e
|
|
}
|
|
# }}}
|
|
|
|
function study #{{{
|
|
{
|
|
if [ -z $1 ]; then
|
|
STUDY_PATH=''
|
|
else
|
|
if [ -d "$BSI3_PATH$1" ]; then
|
|
STUDY_PATH="$1"
|
|
else
|
|
STUDY_PATH=''
|
|
fi
|
|
fi
|
|
|
|
builtin cd "$BSI3_PATH$STUDY_PATH"
|
|
if [ -e calendar ]; then
|
|
echo -e "$RED WORK TO DO SOON:$BLUE"
|
|
calendar -A10
|
|
echo -e "$DFT"
|
|
fi
|
|
ls
|
|
} #}}}
|
|
|
|
_StudyCompletion()
|
|
{ # {{{
|
|
local cur # Pointer to current completion word.
|
|
|
|
COMPREPLY=() # Array variable storing the possible completions.
|
|
cur=${COMP_WORDS[COMP_CWORD]}
|
|
|
|
_STUDY_ACTUAL_DIR=`pwd`
|
|
builtin cd "$BSI3_PATH"
|
|
ALL_POSSIBLE_WORDS=(*)
|
|
builtin cd "$_STUDY_ACTUAL_DIR"
|
|
|
|
for i in ${ALL_POSSIBLE_WORDS[@]}; do
|
|
# echo ">>>$i"
|
|
WORD=$(echo $i | grep "^$cur" | tr -d ' ') #ugly
|
|
if [ $WORD ]; then
|
|
COMPREPLY+=("$WORD");
|
|
fi;
|
|
done
|
|
|
|
return 0
|
|
} # }}}
|
|
complete -F _StudyCompletion -o filenames study
|
|
|
|
|
|
RO_ROOT_DIRECTORY=/dev/shm/ro_$USER
|
|
ro()
|
|
{ # {{{
|
|
if [ ! -d $RO_ROOT_DIRECTORY ]; then
|
|
mkdir $RO_ROOT_DIRECTORY
|
|
fi
|
|
|
|
if [ -z $1 ]; then
|
|
my_root_set=`cat $RO_ROOT_DIRECTORY/default 2>/dev/null`
|
|
else
|
|
my_root_set=`cat $RO_ROOT_DIRECTORY/$1 2>/dev/null`
|
|
fi;
|
|
|
|
if [ -n "$my_root_set" ]; then
|
|
cd $my_root_set;
|
|
else
|
|
if [ -z $1 ]; then
|
|
echo -e "root for flag $1 not set.\nSet-it with roset $1"
|
|
else
|
|
echo "root not set ! set it with roset !";
|
|
fi
|
|
fi;
|
|
} # }}}
|
|
roset()
|
|
{ # {{{
|
|
if [ ! -d $RO_ROOT_DIRECTORY ]; then
|
|
mkdir $RO_ROOT_DIRECTORY
|
|
fi
|
|
|
|
if [ -z $1 ]; then
|
|
pwd > $RO_ROOT_DIRECTORY/default
|
|
else
|
|
pwd > $RO_ROOT_DIRECTORY/$1
|
|
fi
|
|
} # }}}
|
|
_RoRosetCompletion()
|
|
{ # {{{
|
|
local cur # Pointer to current completion word.
|
|
|
|
COMPREPLY=() # Array variable storing the possible completions.
|
|
cur=${COMP_WORDS[COMP_CWORD]}
|
|
|
|
_ROSET_ACTUAL_DIR=`pwd`
|
|
builtin cd $RO_ROOT_DIRECTORY
|
|
ALL_POSSIBLE_WORDS=(*)
|
|
builtin cd $_ROSET_ACTUAL_DIR
|
|
|
|
# echo "Cur: >>$cur<<"
|
|
|
|
for i in ${ALL_POSSIBLE_WORDS[@]}; do
|
|
# echo ">>>$i"
|
|
WORD=$(echo $i | grep "^$cur" | tr -d ' ') #ugly
|
|
if [ $WORD ]; then
|
|
# echo "blah!: >>$WORD<<"
|
|
COMPREPLY+=("$WORD");
|
|
fi;
|
|
done
|
|
|
|
return 0
|
|
} # }}}
|
|
complete -F _RoRosetCompletion -o filenames ro roset
|
|
|
|
function calc #{{{
|
|
{
|
|
echo "scale=3;$@" | bc -l
|
|
} #}}}
|
|
|
|
function xournal { #{{{
|
|
if [ -e "$1".xoj ]; then
|
|
/usr/bin/xournal "$1".xoj
|
|
else
|
|
/usr/bin/xournal "$1"
|
|
fi
|
|
} #}}}
|
|
|
|
function mutt { #{{{
|
|
if [ $# -eq 0 ]; then
|
|
if [ "$(pidof mutt)" ]; then
|
|
/usr/bin/mutt -R
|
|
else
|
|
/usr/bin/mutt
|
|
fi;
|
|
else
|
|
/usr/bin/mutt $@
|
|
fi;
|
|
} #}}}
|
|
|
|
function up2frank
|
|
{ #{{{
|
|
if [ ! $# -eq 1 ]; then
|
|
echo "usage: up2frank FILE"
|
|
return
|
|
else
|
|
file=$(echo $1 | sed 's/ /_/g')
|
|
scp "$1" "frank@vi-di.fr:public_html/upload/$file" > /dev/null
|
|
echo "https://frank.villaro-dixon.eu/upload/$file"
|
|
fi;
|
|
} #}}}
|
|
|
|
function rfc
|
|
{ #{{{
|
|
|
|
firefox http://www.ietf.org/rfc/rfc$1.txt
|
|
|
|
} #}}}
|
|
|
|
function tobed
|
|
{ #{{{
|
|
if [ $? -eq 0 ]; then #want to sleep now
|
|
tstmp=`date +%s`
|
|
tstmp=$(($tstmp+1000)) #16 min to fall asleep
|
|
tomorrow=$(($tstmp + 82800))
|
|
cycles=0;
|
|
one_cycle=5580 #93 min
|
|
while true; do
|
|
tstmp=$(($tstmp + $one_cycle))
|
|
((cycles++))
|
|
hour=`echo $tstmp | date --date=@$tstmp +%-H`
|
|
if [[ $hour -gt 4 && $hour -lt 12 ]]; then
|
|
min=`echo $tstmp | date --date=@$tstmp +%M`
|
|
stime=`echo "scale=1; $one_cycle * $cycles / 3600" | bc`
|
|
|
|
if [ $cycles -lt 5 ]; then #Not quite right: btw 7 and 9 hours -> 5/6 cycles
|
|
echo -ne $RED
|
|
elif [ $cycles -lt 6 ]; then
|
|
echo -ne $YELLOW
|
|
else
|
|
echo -ne $GREEN
|
|
fi
|
|
echo -e "$cycles cycles ($stime h)\t\tGet up: [$hour:$min]"
|
|
echo -ne $DFT
|
|
fi
|
|
|
|
if [[ $tstmp -gt $tomorrow && $cycles -gt 6 ]]; then
|
|
break;
|
|
fi
|
|
done;
|
|
fi
|
|
} #}}}
|
|
|
|
function bpm
|
|
{
|
|
read n
|
|
start=`date +%s`
|
|
beats=0
|
|
while true; do
|
|
read n
|
|
((beats++))
|
|
actual=`date +%s`
|
|
diff=`echo "scale=1; $beats / (($actual - $start) / 60)" | bc`
|
|
echo $diff bpm
|
|
done
|
|
}
|
|
|
|
function op
|
|
{
|
|
file="$1"
|
|
ext=${file##*\.}
|
|
echo file is "$ext"
|
|
case $ext in
|
|
"pdf")
|
|
echo "toto"
|
|
evince "$1"
|
|
;;
|
|
"zip")
|
|
file-roller "$1"
|
|
;;
|
|
"latex"|"tex")
|
|
vim "$1"
|
|
;;
|
|
"java")
|
|
vim "$1"
|
|
;;
|
|
"uxf")
|
|
umlet "$1"
|
|
;;
|
|
*)
|
|
xdg-open "$1"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function vim
|
|
{
|
|
#Pour Ctrl-S sur vim
|
|
local STTYOPTS="$(stty --save)"
|
|
stty stop '' -ixoff
|
|
command vim "$@"
|
|
stty "$STTYOPTS"
|
|
}
|
|
|
|
|
|
#CONS(OLE) function, a pretty useful functions that keeps track of
|
|
# the lasts whereabouts (in terms of folders) of the terminal
|
|
CONS_ROOT_DIRECTORY=/dev/shm/cons_$USER
|
|
function cons
|
|
{
|
|
if [ ! -d $CONS_ROOT_DIRECTORY ]; then
|
|
mkdir $CONS_ROOT_DIRECTORY
|
|
fi;
|
|
|
|
if [ $# -eq 0 ]; then
|
|
for f in $CONS_ROOT_DIRECTORY/*; do
|
|
echo -e "`echo $f|rev|cut -d/ -f1|rev` >>\n\t`cat $f`"
|
|
#XXX basename
|
|
done
|
|
elif [ $# -eq 1 ]; then
|
|
if [ -e $CONS_ROOT_DIRECTORY/$1 ]; then
|
|
cd $(cat $CONS_ROOT_DIRECTORY/$1)
|
|
else
|
|
echo $1 does not exist
|
|
fi;
|
|
fi;
|
|
}
|
|
|
|
function cons_set
|
|
{
|
|
TTY=$(tty)
|
|
|
|
if [ ! -d $CONS_ROOT_DIRECTORY ]; then
|
|
mkdir $CONS_ROOT_DIRECTORY
|
|
fi;
|
|
|
|
TTYNO=`echo $TTY | cut -d/ -f 4`
|
|
pwd > $CONS_ROOT_DIRECTORY/$TTYNO
|
|
}
|
|
|
|
#cttc: Copy To my Tty Cwd
|
|
# cttc TTY_NO FILE
|
|
function cttc
|
|
{
|
|
if [ $# -eq 2 ]; then
|
|
cwd=`cat $CONS_ROOT_DIRECTORY/$1`
|
|
cp -r "$2" "$cwd"
|
|
else
|
|
echo "cons to see terminals - cttc TERM FILE"
|
|
fi
|
|
}
|
|
|
|
# }}}
|
|
|
|
SSHAGENT=/usr/bin/ssh-agent
|
|
SSHAGENTARGS="-s"
|
|
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
|
|
eval `$SSHAGENT $SSHAGENTARGS`
|
|
trap "kill $SSH_AGENT_PID" 0
|
|
fi
|
|
|
|
###############
|
|
### EXPORTS ###
|
|
###############
|
|
# {{{
|
|
export EDITOR="vim"
|
|
|
|
GPG_TTY=`tty`
|
|
export GPG_TTY
|
|
export GPGKEY=016106A6AF223DBE
|
|
|
|
export PYTHONPATH=/usr/local/lib/python2.7/dist-packages
|
|
###export CC=clang
|
|
#export OMPI_MPICC=clang++
|
|
|
|
export DEVKITPRO=/opt/devkitpro
|
|
export DEVKITARM=$DEVKITPRO/devkitARM
|
|
export PATH=$PATH:$DEVKITARM/bin
|
|
export MANPATH=$MANPATH:$DEVKITARM/man
|
|
|
|
|
|
export PATH=$PATH:~/Programmation/dotfiles/Utils
|
|
|
|
export HISTCONTROL=erasedups
|
|
export HISTSIZE=999999
|
|
# }}}
|
|
export PATH="$HOME/opt/cross/bin:$PATH"
|
|
export PATH="/home/frank/.gem/ruby/2.0.0/bin/:$PATH"
|
|
|
|
#Launch startx when login
|
|
[[ -z $DISPLAY && $XDG_VTNR -le 4 && -z $SSH_CLIENT ]] && exec startx
|
|
|
|
calendar -f ~/calendar
|