#----------------------------------------------------# # File: ~/.zshrc # # Version: 0.3.5 # # Author: Florian "Bluewind" Pritz # #----------------------------------------------------# #-------------------- # History #-------------------- export HISTFILE=~/.zsh/histfile export HISTSIZE=4000 export SAVEHIST=4000 #-------------------- # Keybindings #-------------------- bindkey -e bindkey '\e[1~' beginning-of-line bindkey '\e[4~' end-of-line bindkey '\e[3~' delete-char bindkey '\e[2~' overwrite-mode bindkey "^[[7~" beginning-of-line # Pos1 bindkey "^[[8~" end-of-line # End eval "`dircolors -b`" #-------------------- # Completion stuff #-------------------- autoload -Uz compinit compinit # Functions for completition function _7slash { if [[ $words[CURRENT] = 7(#b)(*)(#e) ]] then compadd -U -X 'Correct leading 7 to /' -f /$match[1] fi } function _rc () { case $CURRENT in 2) compadd $(find /etc/rc.d/ -type f -executable -printf '%f ');; 3) compadd start stop restart reload;; esac } function _ssh-mount () { compadd $(cat ${HOME}/bin/ssh-mount.sh | egrep "Servers:.*" | sed "s#echo \-e \"\${green}Servers\:\$NC##g; s#\"\;##g; s#,##g") } zstyle :compinstall filename '$HOME/.zshrc' # cache results because yaourt is slow zstyle ':completion:*' use-cache on zstyle ':completion:*' cache-path $HOME/.zsh/cache zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} zstyle ':completion:*' completer _complete _match _approximate _7slash zstyle ':completion:*:match:*' original only # add completition to rc function compdef _rc rc compdef _ssh-mount ssh-mount.sh # allow more mistypes if longer command zstyle -e ':completion:*:approximate:*' \ max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3))numeric)' # ignore completion for commands we don't have zstyle ':completion:*:functions' ignored-patterns '_*' # show menu when tabbing zstyle ':completion:*' menu yes select zstyle ':completion:*' file-sort time zstyle ':completion:*' squeeze-slashes true #if in foo/bar don't show bar when cd ../ zstyle ':completion:*:cd:*' ignore-parents parent pwd # ignore case zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' zstyle ':completion:*:descriptions' format $'%{\e[0;31m%}completing %B%d%b%{\e[0m%}' zstyle ':completion:*:warnings' format $'%{\e[0;31m%}No matches for:%{\e[0m%} %d' #-------------------- # Other ZSH options #-------------------- autoload colors colors setopt autocd setopt correct_all setopt extendedglob setopt auto_pushd setopt pushd_ignore_dups setopt no_hup setopt print_exit_value setopt SHARE_HISTORY setopt NO_clobber setopt APPEND_HISTORY setopt EXTENDED_HISTORY setopt HIST_REDUCE_BLANKS setopt HIST_IGNORE_SPACE #----------------------- # Variables #----------------------- #export CDPATH=.:$HOME export OOO_FORCE_DESKTOP=gnome export PATH=${PATH}:${HOME}/misc/scripts:${HOME}/bin export EDITOR=vim #export PAGER="/usr/share/vim/macros/less.sh" export PAGER=vimpager #export LESSCHARSET="UTF-8" #export LESSOPEN='|/usr/bin/lesspipe.sh %s 2>&-' #export LESS='-i -c -N -w -g -M -R -P%t?f%f \ #:stdin .?pb%pb\%:?lbLine %lb:?bbByte %bb:-...' #-------------------- # Colors #-------------------- export red='\e[0;31m' export RED='\e[1;31m' export green='\e[0;32m' export GREEN='\e[1;32m' export blue='\e[0;34m' export BLUE='\e[1;34m' export cyan='\e[0;36m' export CYAN='\e[1;36m' export NC='\e[0m' fg_green=$'%{\e[0;32m%}' fg_blue=$'%{\e[0;34m%}' fg_cyan=$'%{\e[0;36m%}' fg_red=$'%{\e[0;31m%}' fg_brown=$'%{\e[0;33m%}' fg_purple=$'%{\e[0;35m%}' fg_light_gray=$'%{\e[0;37m%}' fg_dark_gray=$'%{\e[1;30m%}' fg_light_blue=$'%{\e[1;34m%}' fg_light_green=$'%{\e[1;32m%}' fg_light_cyan=$'%{\e[1;36m%}' fg_light_red=$'%{\e[1;31m%}' fg_light_purple=$'%{\e[1;35m%}' fg_no_colour=$'%{\e[0m%}' fg_white=$'%{\e[1;37m%}' fg_black=$'%{\e[0;30m%}' #-------------------- # Terminal title #-------------------- prompt_eof_setup() { # preexec() is run after you press enter on your command but before the command is run. preexec() { # define screen/terminal title with the current command (http://aperiodic.net/phil/prompt/) case $TERM in rxvt-unicode*) printf '\33]2;%s\007' $1 ;; screen*) local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} printf '\ek%s\e\\' $CMD;; esac } } prompt_eof_setup "$@" #-------------------- # Prompt #-------------------- #PS1="[${fg_cyan}%*${fg_no_colour}] - ${fg_light_red}$USERNAME${fg_no_colour} ${fg_light_blue}%~${fg_no_colour} > " PS1="${fg_light_red}$USERNAME${fg_no_colour}@${fg_light_green}%m${fg_no_colour} - ${fg_light_blue}%~${fg_no_colour} [${fg_cyan}%*${fg_no_colour}] > " ## Spelling prompt SPROMPT='zsh: correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) ' #-------------------- # Aliases #-------------------- alias rm='rm -Iv' alias cp='cp -iv' alias mv='mv -iv' alias dum='du -kh --max-depth=2' alias du='du -kh' alias dus='du -skh' alias df='df -kTh' alias ls='ls -lhbtF --color=auto' alias ll='ls -lhbtF --color=auto' alias la='ls -lahbtF --color=auto' alias newpkgb=' cp $HOME/misc/aur/PKGBUILD.proto PKGBUILD' alias aurball='makepkg --source -f' alias u='upload.sh' alias mtr='mtr -t' alias wcl='wc -l' alias pager='${PAGER}' alias c='${PAGER}' alias sc='sudo ${PAGER}' alias v='vim' alias sv='sudo vim' alias s='sudo' alias pacman='pacman-color' alias ncmpc='ncmpc -c' alias yup='yaourt -Syu --aur' alias yu='yaourt -Syu' alias x='extract' alias more='less' alias youtube='youtube-dl -b ' alias p='sudo powerpill' alias pa='sudo powerpill -Syu' alias py='sudo powerpill -S' alias su='su -' alias ysi='yaourt -Si' alias yqo='yaourt -Qo' alias y='yaourt' alias ys='yaourt -S' alias ad='arson -D' alias yr='yaourt -Rs' alias yrn='yaourt -Rns' alias asciidoc_full='asciidoc -a icons -a toc' alias -g gg='| grep --color' alias -g eg='| egrep --color' alias -g tt='| tail -n 20' alias -g vv='|' #alias -g pp="2>&1 | curl -F 'sprunge=<-' http://sprunge.us" alias -g pp="2>&1 | wgetpaste -X " alias -s txt=leafpad alias -s jpg=gpicview alias -s png=gpicview # source stuff that depends on the machine source ~/.private_stuff.zsh #-------------------- # Functions #-------------------- rc () { sudo /etc/rc.d/$1 $2 } update_zshrc () { wget http://flo.server-speed.net/stuff/dotfiles/zshrc -O ${HOME}/.zshrc } bk() { cp -b ${1} ${1}_`date +%Y-%m-%d_%T` } # jump between directories # Copyright 2005 Nikolai Weibull # notice: option AUTO_PUSHD has to be set d(){ emulate -L zsh autoload -U colors local color=$fg_bold[blue] integer i=0 dirs -p | while read dir; do local num="${$(printf "%-4d " $i)/ /.}" printf " %s $color%s$reset_color\n" $num $dir (( i++ )) done integer dir=-1 read -r 'dir?Jump to directory: ' || return (( dir == -1 )) && return if (( dir < 0 || dir >= i )); then echo d: no such directory stack entry: $dir return 1 fi cd ~$dir } hglob() { echo -e " / directories . plain files @ symbolic links = sockets p named pipes (FIFOs) * executable plain files (0100) % device files (character or block special) %b block special files %c character special files r owner-readable files (0400) w owner-writable files (0200) x owner-executable files (0100) A group-readable files (0040) I group-writable files (0020) E group-executable files (0010) R world-readable files (0004) W world-writable files (0002) X world-executable files (0001) s setuid files (04000) S setgid files (02000) t files with the sticky bit (01000) print *(m-1) # Dateien, die vor bis zu einem Tag modifiziert wurden. print *(a1) # Dateien, auf die vor einem Tag zugegriffen wurde. print *(@) # Nur Links print *(Lk+50) # Dateien die ueber 50 Kilobytes grosz sind print *(Lk-50) # Dateien die kleiner als 50 Kilobytes sind print **/*.c # Alle *.c - Dateien unterhalb von \$PWD print **/*.c~file.c # Alle *.c - Dateien, aber nicht 'file.c' print (foo|bar).* # Alle Dateien mit 'foo' und / oder 'bar' am Anfang print *~*.* # Nur Dateien ohne '.' in Namen chmod 644 *(.^x) # make all non-executable files publically readable print -l *(.c|.h) # Nur Dateien mit dem Suffix '.c' und / oder '.h' print **/*(g:users:) # Alle Dateien/Verzeichnisse der Gruppe >users< echo /proc/*/cwd(:h:t:s/self//) # Analog zu >ps ax | awk '{print $1}'<" } 2html() { vim -n -c ':syntax on' -c ':so $VIMRUNTIME/syntax/2html.vim' -c ':wqa' $1 > /dev/null 2> /dev/null } yd (){ mkdir $1 cd $1 yaourt -G $1 } source ${HOME}/bin/gpg-agent.sh google(){ firefox "http://www.google.com/search?&num=100&q=$*" & disown firefox } leaf(){ leafpad $* & disown leaf } function swap() { if [ "$1" = "" ] || [ "$2" = "" ] || [ "$1" = "-h" ]; then echo -e "${blue}Usage:$NC swap "; echo -e "Swaps files"; return 1 fi if [ -f $1 ] && [ -f $2 ]; then local TMPFILE=tmp.$$ mv "$1" $TMPFILE mv "$2" "$1" mv $TMPFILE "$2" else echo -e "${RED}Error:$NC One or more files don't exist" return 1 fi } function my_ip() { MY_IP=$(/sbin/ifconfig eth0 | awk '/inet/ { print $2 } ' | \ sed -e s/addr://) MY_ISP=$(curl www.wieistmeineip.de | awk '(/[0-9]?[0-9]?[0-9]\.[0-9]?[0-9]?[0-9]\.[0-9]?[0-9]?[0-9]\.[0-9]?[0-9]?[0-9]/) {print}' | awk 'gsub(/[>||<]/," ")' | awk '{print $3}') } function ii() { echo -e "\nUser ${RED}"${USER:-"N/A"}"$NC on "${RED}${HOST:-"N/A"}"$NC" echo -e "\n${RED}Additionnal information:$NC " ; uname -a echo -e "\n${RED}Users logged on:$NC " ; w -h echo -e "\n${RED}Current date:$NC " ; date echo -e "\n${RED}Machine stats:$NC " ; uptime echo -e "\n${RED}Memory stats:$NC " ; free my_ip 2>&- ; echo -e "\n${RED}Local IP Address:$NC" ; echo ${MY_IP:-"N/A"} echo -e "\n${RED}ISP Address:$NC" ; echo ${MY_ISP:-"N/A"} echo } function short_ii() { echo -e "\nUser ${RED}"${USER:-"N/A"}"$NC on "${RED}${HOST:-"N/A"}"$NC" echo -e "\n${RED}Current date:$NC " ; date echo -e "\n${RED}Machine stats:$NC " ; uptime echo } function repeat() { if [ "$1" = "" ] || [ "$2" = "" ] || [ "$1" = "-h" ]; then echo -e "${blue}Usage:$NC repeat "; echo -e "Repeats a command"; return 1 fi local i max max=$1; shift; for ((i=1; i <= max ; i++)); do eval "$@"; done } # in the aur as extract #extract () { # if [ "$1" = "" ] || [ "$1" = "-h" ]; then # echo -e "${blue}Usage:$NC x "; # echo -e "Extracts "; # return 1 # fi # for file in "$@" # do # if [ -f ${file} ] ; then # case ${file} in # *.tar.bz2) tar xjf ${file} ;; # *.tar.gz) tar xzf ${file} ;; # *.tbz2) tar xjf ${file} ;; # *.tgz) tar xzf ${file} ;; # *) # case $(file -bi ${file}) in # application/x-bzip2) bunzip2 ${file} ;; # application/rar) unrar x ${file} ;; # application/x-gzip) gunzip ${file} ;; # application/x-tar) tar xf ${file} ;; # application/zip) unzip ${file} ;; # application/x-compressed) uncompress ${file} ;; # application/x-7z-compressed) 7z x ${file} ;; # *) echo -e "${RED}Error:$NC No rule how to extract \"${file}\" ($(file -bi ${file}))" ;; # esac # ;; # esac # else # echo -e "${RED}Error:$NC \"${file}\" doesn't exist" # fi # done #} youtube2mp3 () { for file in "$@" do if [ -f ${file} ] ; then title=$(echo ${file} | sed 's/\(.*\)\..*/\1/') case $(file -bi ${file}) in video/mp4) faad "${file}" && lame "${title}.wav" "${title}.mp3" && rm "${title}.wav" ;; video/x-flv) ffmpeg -i "${file}" -vn -acodec copy "${title}.mp3" ;; *) echo -e "${RED}Error:$NC No rule how to convert \"${file}\"" ;; esac else echo -e "${RED}Error:$NC \"${file}\" doesn't exist" fi done } #-------------------- # Greetings #-------------------- cat /etc/motd echo -e "${CYAN}Welcome to ZSH ${RED}${ZSH_VERSION}$NC" short_ii if [ -x /usr/bin/fortune ]; then /usr/bin/fortune -s fi echo ""