From 8cee2197d73332d51a82b5f1a67aae185964688d Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Sun, 12 Jul 2009 16:08:22 +0200 Subject: move all zshrc stuff into .zshrc and use folding nothing else changed --- .zsh/rc/10colors | 44 --- .zsh/rc/10keybindings | 15 - .zsh/rc/10variables | 14 - .zsh/rc/15prompt | 54 ---- .zsh/rc/30functions | 209 ------------- .zsh/rc/50options | 52 ---- .zsh/rc/60aliases | 108 ------- .zsh/rc/70completion/10misc | 57 ---- .zsh/rc/70completion/10own_functions | 16 - .zsh/rc/99greetings | 15 - .zshrc | 570 ++++++++++++++++++++++++++++++++++- 11 files changed, 565 insertions(+), 589 deletions(-) delete mode 100644 .zsh/rc/10colors delete mode 100644 .zsh/rc/10keybindings delete mode 100644 .zsh/rc/10variables delete mode 100644 .zsh/rc/15prompt delete mode 100644 .zsh/rc/30functions delete mode 100644 .zsh/rc/50options delete mode 100644 .zsh/rc/60aliases delete mode 100644 .zsh/rc/70completion/10misc delete mode 100644 .zsh/rc/70completion/10own_functions delete mode 100644 .zsh/rc/99greetings diff --git a/.zsh/rc/10colors b/.zsh/rc/10colors deleted file mode 100644 index 667f319..0000000 --- a/.zsh/rc/10colors +++ /dev/null @@ -1,44 +0,0 @@ -#-------------------- -# Colors -#-------------------- -#use these in functions/shell scripts -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 purple='\e[0;35m' -export PURPLE='\e[1;35m' -export cyan='\e[0;36m' -export CYAN='\e[1;36m' -export NC='\e[0m' - -# these are for use in PROMPT -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%}' - -# colors in framebuffer! -if [ "$TERM" = "linux" ]; then - ${HOME}/bin/parse_xdefaults.sh - clear #for background artifacting -fi - -# some better colors for ls -eval "`dircolors -b`" - -# vim: set ft=zsh: diff --git a/.zsh/rc/10keybindings b/.zsh/rc/10keybindings deleted file mode 100644 index 0761957..0000000 --- a/.zsh/rc/10keybindings +++ /dev/null @@ -1,15 +0,0 @@ -#-------------------- -# 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 -# HOWTO make your own: -# bindkey '' (do this in a shell) -# for some actions run `bindkey` - -# vim: set ft=zsh: diff --git a/.zsh/rc/10variables b/.zsh/rc/10variables deleted file mode 100644 index ebdaae7..0000000 --- a/.zsh/rc/10variables +++ /dev/null @@ -1,14 +0,0 @@ -#----------------------- -# Variables -#----------------------- -#export CDPATH=.:$HOME -export OOO_FORCE_DESKTOP=gnome -export PATH=${HOME}/misc/scripts:${PATH} -export EDITOR=vim -export PAGER=vimpager -export LESSCHARSET="UTF-8" -export LESSOPEN='|/usr/bin/lesspipe.sh %s 2>&-' -export LESS='-F -i -n -w -g -M -R -P%t?f%f \ -:stdin .?pb%pb\%:?lbLine %lb:?bbByte %bb:-...' - -# vim: set ft=zsh: diff --git a/.zsh/rc/15prompt b/.zsh/rc/15prompt deleted file mode 100644 index a897e19..0000000 --- a/.zsh/rc/15prompt +++ /dev/null @@ -1,54 +0,0 @@ -#-------------------- -# Terminal title -#-------------------- -# also found somewhere -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|exec|-*)]} - printf '\ek%s\e\\' $CMD;; - esac - } -} - -prompt_eof_setup "$@" - -EXITCODE="%(?..(%?%1) )" - -# function to show the current git branch in prompt -parse_git_branch() { - git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' -} - -#-------------------- -# Prompt -#-------------------- -# necessary if you want to use functions in the prompt -# without this they wouldn't be run again -precmd () { -# this has to be on the edge or you have some spaces in the prompt -# if you have any workaround please tell -if [[ $UID != 0 ]]; then - local username_color=$fg_blue -else - local username_color=$fg_red -fi -local host_color=$fg_light_green -local path_color=$fg_light_blue -local gitbranch_color=$fg_purple -local exitcode_color=$fg_red -PROMPT="${username_color}$USERNAME${fg_no_colour}@${host_color}%m${fg_no_colour}\ -:${path_color}%~${fg_no_colour} ${gitbranch_color}$(parse_git_branch)${fg_no_colour} -${exitcode_color}$EXITCODE${fg_no_colour}> " -} - -## Spelling prompt -SPROMPT='zsh: correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) ' - -# vim: set ft=zsh: diff --git a/.zsh/rc/30functions b/.zsh/rc/30functions deleted file mode 100644 index 4345412..0000000 --- a/.zsh/rc/30functions +++ /dev/null @@ -1,209 +0,0 @@ -#-------------------- -# Functions -#-------------------- - -# always /etc/rc.d/blub is a bit too much work ;) -rc() { - sudo /etc/rc.d/$1 $2 -} - -# usefull if you have more machines and want to easily update the config here -update_zshrc() { - old_pwd="$PWD" - builtin cd "$HOME/.zsh" - wget http://flo.server-speed.net/stuff/dotfiles/zshrc -O $HOME/.zshrc - wget http://flo.server-speed.net/stuff/dotfiles/zsh/filelist -O /tmp/zsh_filelist - wget -B "http://flo.server-speed.net/stuff/dotfiles/zsh/" -i /tmp/zsh_filelist -x --cut-dirs=3 -nH - rm /tmp/zsh_fileslist - rm **/index.html - builtin cd "$old_pwd" - exec zsh -} - -# add current time to a file -mbk() { - mv -b "${1}" "$(echo $1 | sed "s/\./_`date +%Y-%m-%d_%T`./")" -} - -# easily make backups -bk() { - cp -b "${1}" "$(echo $1 | sed "s/\./_`date +%Y-%m-%d_%T`./")" -} - -# chpwd () => a function which is executed whenever the directory is changed -chpwd() { - ls -} - -# idea by Gigamo http://bbs.archlinux.org/viewtopic.php?pid=478094#p478094 -ls () { - /bin/ls -rhbtF --color=auto $@ && - echo "${PURPLE}Files: ${BLUE}$(/bin/ls -l $@ | grep -v "^[l|d|total]" | wc -l) ${GREEN}--- ${PURPLE}Directories: ${BLUE}$(/bin/ls -l $@ | grep "^d" | wc -l)${NC}" -} - -password() { - if [ -z "$1" ]; then - count=8 - else - count="$1" - fi - < /dev/urandom tr -dc A-Za-z0-9_ | head -c$count -} - -# 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 -} - -# from the grml zshrc iirc -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}'<" -} - -# let vim highlight any file for us and save it as html -2html() { - vim -n -c ':syntax on' -c ':so $VIMRUNTIME/syntax/2html.vim' -c ':wqa' $1 > /dev/null 2> /dev/null -} - -# download any package's PKGBUILD and go into that dir -yd(){ - pbget --aur $1 - builtin cd $1 -} - -# some script to make this damn agent work easier -if [ "x$DISPLAY" != "x" ]; then - source ${HOME}/bin/gpg-agent.sh -fi - -# yeah I know you shouldn't use it... -google(){ - firefox "http://www.google.com/search?&num=100&q=$*" & - disown firefox -} - -# swaps 2 files -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 -} - -# get your internal and external IPs -# also found somewhere on the net -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}') -} - -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 -} - -# short info to display when opening a new shell -short_ii() { - echo -e "\nUser ${RED}"${USER:-"N/A"}"$NC on "${RED}${HOST:-"N/A"}"$NC" - echo -e "\n${RED}Machine stats:$NC " ; uptime - echo -} - -# actually it converts any mp4 or flv to mp3... -youtube2mp3() { - for file in "$@" - do - if [ -f "${file}" ] ; then - title=$(echo ${file} | sed 's/\(.*\)\..*/\1/') - case $(file -b --mime-type "${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 -} - - -# vim: set ft=zsh: diff --git a/.zsh/rc/50options b/.zsh/rc/50options deleted file mode 100644 index 8e1a573..0000000 --- a/.zsh/rc/50options +++ /dev/null @@ -1,52 +0,0 @@ -#-------------------- -# History -#-------------------- -export HISTFILE=~/.zsh/histfile -# for some odd reason allocating RAM to save the histfile takes ages.. -export HISTSIZE=5000 -export SAVEHIST=$HISTSIZE - -#-------------------- -# Other ZSH options -#-------------------- -autoload colors -colors -# .. -> cd ../ -setopt autocd - -setopt correct_all - -# cd /etc/**/foo/blub searches ;) -setopt extendedglob - -# push cds to directory stack -setopt auto_pushd - -# don't push something twice -setopt pushd_ignore_dups - -# don't kill jobs when exiting shell -setopt no_hup - -# show us when some command didn't exit with 0 -setopt print_exit_value - -# makepkg -g > PKGBUILD -# zsh: file exists: PKGBUILD -# -# work saved ;) -setopt no_clobber - -setopt INC_APPEND_HISTORY -setopt SHARE_HISTORY -setopt EXTENDED_HISTORY -setopt HIST_REDUCE_BLANKS -setopt HIST_IGNORE_SPACE -setopt nohistverify -setopt prompt_subst -setopt HIST_FCNTL_LOCK - -# disable XON/XOFF flow control (^s/^q) -stty -ixon - -# vim: set ft=zsh: diff --git a/.zsh/rc/60aliases b/.zsh/rc/60aliases deleted file mode 100644 index 47a74bd..0000000 --- a/.zsh/rc/60aliases +++ /dev/null @@ -1,108 +0,0 @@ -#-------------------- -# Aliases -#-------------------- -# better ask before we loose data -alias rm='rm -Iv' -alias cp='cp -iv' -alias mv='mv -iv' - -# I don't like bytes -alias dum='du -kh --max-depth=2' -alias du='du -kh' -alias dus='du -skh' -#alias df='df -kTh' -alias df='pydf' - -# function to make ls look nice is below -alias ll='ls -l' -alias la='ls -a' -alias lla='ls -la' -alias lld='ls -ld' - -alias newpkgb=' cp $HOME/misc/aur/PKGBUILD.proto PKGBUILD' - -# well I got used to that name ;) -alias aurball='makepkg --source -f' -alias pkgbuild='makepkg -fc && aurball' -alias pushpkg='cp *.pkg.tar.gz *.src.tar.gz /mnt/mistral/srv/drop' - -alias sudo="sudo " #Sudo wont recognize aliases without this -alias s='sudo' -alias x='x -v' -alias xx='x -Rv' -alias u='upload.sh' -alias mtr='mtr -t' -alias wcl='wc -l' -alias mdstat='cat /proc/mdstat' -alias keymap='setxkbmap de -variant nodeadkeys' -alias hexdump='hexdump -C' - -alias pager='${PAGER}' -alias more='${PAGER}' -alias less='${PAGER}' -alias c='${PAGER}' -alias v='vim' -alias gv='gvim' -alias sc='sudo ${PAGER}' -alias sv='sudo vim' -alias sgv='sudo gvim' - -alias g='git' -alias gitk='giggle' -# python is too long to type... -alias q='python' - -alias ncmpc='ncmpc -c' -alias youtube='youtube-dl -b ' -alias rscp='rsync --partial --progress --rsh=ssh' - -alias mkdir='nocorrect mkdir' -alias wget='nocorrect noglob wget' - -# updating commands can be long... -alias yup='yaourt -Syu --aur' -alias yu='yaourt -Syu' - -# can't they make it use sudo on it's own like yaourt? -alias p='sudo powerpill' -alias pa='sudo powerpill -Syu' -alias py='sudo powerpill -S' -alias pacman='sudo pacman-color' - -alias su='su -' - -alias y='yaourt' -alias ys='yaourt -S' -alias ysb='yaourt -Sb' -alias ysi='yaourt -Si' -alias yr='yaourt -Rs' -alias yrc='yaourt -Rcs' -alias yrn='yaourt -Rns' -alias yqo='yaourt -Qo' - -# too long to remember -alias asciidoc_full='asciidoc -a icons -a toc' - -# other random aliases -alias ☠='pkill -9' -alias nocomment='egrep -v "^\s*(#|$)"' - -# global aliases work EVERYWHERE -# e.g. dmesg tt -# show last 20 lines of dmesg -alias -g gg='| grep --color' -alias -g eg='| egrep --color' -alias -g tt='| tail -n 20' -# I always hit y instead of | ... -alias -g vv='|' - -# who doesn't need pastebins? -alias -g sp="2>&1 | curl -F 'sprunge=<-' http://sprunge.us" -alias -g pp="2>&1 | wgetpaste -X " - -# e.g. "blub.txt" opens the file instead of showing command not found -alias -s txt=mousepad -alias -s jpg=gpicview -alias -s png=gpicview - -# vim: set ft=zsh: diff --git a/.zsh/rc/70completion/10misc b/.zsh/rc/70completion/10misc deleted file mode 100644 index 6e3c0c9..0000000 --- a/.zsh/rc/70completion/10misc +++ /dev/null @@ -1,57 +0,0 @@ -#-------------------- -# Completion stuff -#-------------------- -autoload -Uz compinit -compinit - -# correct 7etc/foo to /etc/foo -# if anyone has a working solution for /etc7foo please contact me -function _7slash { - if [[ $words[CURRENT] = 7(#b)(*)(#e) ]] - then - compadd -U -X 'Correct leading 7 to /' -f /$match[1] - fi -} - -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 - -# 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 - -# better completion for kill -zstyle ':completion:*:*:kill:*' command 'ps -u$USER -o pid,%cpu,tty,cputime,cmd' - -# bugged with zsh 4.3.10 for whatever reason -#zstyle ':completion:*' file-sort time -zstyle ':completion:*' file-sort name - -# remove / after dirnames -# e.g. ls foo/ -> ls foo -#zstyle ':completion:*' squeeze-slashes true -zstyle ':completion:*' squeeze-slashes false - -# if in foo/bar don't show bar when cd ../ -zstyle ':completion:*:cd:*' ignore-parents parent pwd - -# ignore case when completing -zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' - -# make some stuff look better -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' - -# vim: set ft=zsh: diff --git a/.zsh/rc/70completion/10own_functions b/.zsh/rc/70completion/10own_functions deleted file mode 100644 index fc6e446..0000000 --- a/.zsh/rc/70completion/10own_functions +++ /dev/null @@ -1,16 +0,0 @@ -# complete my little rc function (archlinux startscripts) -function _rc () { - case $CURRENT in - 2) compadd $(find /etc/rc.d/ -maxdepth 1 -type f -executable -printf '%f ');; - 3) compadd $(/etc/rc.d/$words[2] 2> /dev/null | grep -i usage | sed 's/.*{\(.*\)}/\1/; s/|/ /g');; - esac -} -compdef _rc rc - -# easier way to use sshfs ;) -function _ssh-mount () { - compadd $(cat ${HOME}/bin/ssh-mount.sh | egrep "Servers:.*" | sed "s#echo \-e \"\${green}Servers\:\$NC##g; s#\"\;##g; s#,##g") -} -compdef _ssh-mount ssh-mount.sh - -# vim: set ft=zsh: diff --git a/.zsh/rc/99greetings b/.zsh/rc/99greetings deleted file mode 100644 index 47cf822..0000000 --- a/.zsh/rc/99greetings +++ /dev/null @@ -1,15 +0,0 @@ -# machine dependent stuff -. $HOME/.private_stuff.zsh -#-------------------- -# Greetings -#-------------------- -#cat /etc/motd -#echo -e "${CYAN}Welcome to ZSH ${RED}${ZSH_VERSION}$NC" -sysinfo -# don't want to read the same every time I open a new shell -if [ -x /usr/bin/fortune ]; then - /usr/bin/fortune -s -fi -echo - -# vim: set ft=zsh: diff --git a/.zshrc b/.zshrc index 75c9aa7..4eb4118 100644 --- a/.zshrc +++ b/.zshrc @@ -7,11 +7,571 @@ stty -echo ZDOTDIR="$HOME/.zsh" -# Makes this file smaller ;) -for file in $ZDOTDIR/rc/**/* -do - . "$file" -done + +# Colors {{{ +#use these in functions/shell scripts +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 purple='\e[0;35m' +export PURPLE='\e[1;35m' +export cyan='\e[0;36m' +export CYAN='\e[1;36m' +export NC='\e[0m' + +# these are for use in PROMPT +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%}' + +# colors in framebuffer! +if [ "$TERM" = "linux" ]; then + ${HOME}/bin/parse_xdefaults.sh + clear #for background artifacting +fi + +# some better colors for ls +eval "`dircolors -b`" + +# }}} +# 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 +# HOWTO make your own: +# bindkey '' (do this in a shell) +# for some actions run `bindkey` +# }}} +# Variables {{{ +#export CDPATH=.:$HOME +export OOO_FORCE_DESKTOP=gnome +export PATH=${HOME}/misc/scripts:${PATH} +export EDITOR=vim +export PAGER=vimpager +export LESSCHARSET="UTF-8" +export LESSOPEN='|/usr/bin/lesspipe.sh %s 2>&-' +export LESS='-F -i -n -w -g -M -R -P%t?f%f \ +:stdin .?pb%pb\%:?lbLine %lb:?bbByte %bb:-...' + +# }}} +# Terminal title {{{ +# also found somewhere +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|exec|-*)]} + printf '\ek%s\e\\' $CMD;; + esac + } +} + +prompt_eof_setup "$@" + +EXITCODE="%(?..(%?%1) )" + +# function to show the current git branch in prompt +parse_git_branch() { + git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' +} +# }}} +# Prompt {{{ +# necessary if you want to use functions in the prompt +# without this they wouldn't be run again +precmd () { +# this has to be on the edge or you have some spaces in the prompt +# if you have any workaround please tell +if [[ $UID != 0 ]]; then + local username_color=$fg_blue +else + local username_color=$fg_red +fi +local host_color=$fg_light_green +local path_color=$fg_light_blue +local gitbranch_color=$fg_purple +local exitcode_color=$fg_red +PROMPT="${username_color}$USERNAME${fg_no_colour}@${host_color}%m${fg_no_colour}\ +:${path_color}%~${fg_no_colour} ${gitbranch_color}$(parse_git_branch)${fg_no_colour} +${exitcode_color}$EXITCODE${fg_no_colour}> " +} + +## Spelling prompt +SPROMPT='zsh: correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) ' + +# }}} +# Functions {{{ + +# always /etc/rc.d/blub is a bit too much work ;) +rc() { + sudo /etc/rc.d/$1 $2 +} + +# usefull if you have more machines and want to easily update the config here +update_zshrc() { + old_pwd="$PWD" + builtin cd "$HOME/.zsh" + wget http://flo.server-speed.net/stuff/dotfiles/zshrc -O $HOME/.zshrc + wget http://flo.server-speed.net/stuff/dotfiles/zsh/filelist -O /tmp/zsh_filelist + wget -B "http://flo.server-speed.net/stuff/dotfiles/zsh/" -i /tmp/zsh_filelist -x --cut-dirs=3 -nH + rm /tmp/zsh_fileslist + rm **/index.html + builtin cd "$old_pwd" + exec zsh +} + +# add current time to a file +mbk() { + mv -b "${1}" "$(echo $1 | sed "s/\./_`date +%Y-%m-%d_%T`./")" +} + +# easily make backups +bk() { + cp -b "${1}" "$(echo $1 | sed "s/\./_`date +%Y-%m-%d_%T`./")" +} + +# chpwd () => a function which is executed whenever the directory is changed +chpwd() { + ls +} + +# idea by Gigamo http://bbs.archlinux.org/viewtopic.php?pid=478094#p478094 +ls () { + /bin/ls -rhbtF --color=auto $@ && + echo "${PURPLE}Files: ${BLUE}$(/bin/ls -l $@ | grep -v "^[l|d|total]" | wc -l) ${GREEN}--- ${PURPLE}Directories: ${BLUE}$(/bin/ls -l $@ | grep "^d" | wc -l)${NC}" +} + +password() { + if [ -z "$1" ]; then + count=8 + else + count="$1" + fi + < /dev/urandom tr -dc A-Za-z0-9_ | head -c$count +} + +# 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 +} + +# from the grml zshrc iirc +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}'<" +} + +# let vim highlight any file for us and save it as html +2html() { + vim -n -c ':syntax on' -c ':so $VIMRUNTIME/syntax/2html.vim' -c ':wqa' $1 > /dev/null 2> /dev/null +} + +# download any package's PKGBUILD and go into that dir +yd(){ + pbget --aur $1 + builtin cd $1 +} + +# some script to make this damn agent work easier +if [ "x$DISPLAY" != "x" ]; then + source ${HOME}/bin/gpg-agent.sh +fi + +# yeah I know you shouldn't use it... +google(){ + firefox "http://www.google.com/search?&num=100&q=$*" & + disown firefox +} + +# swaps 2 files +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 +} + +# get your internal and external IPs +# also found somewhere on the net +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}') +} + +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 +} + +# short info to display when opening a new shell +short_ii() { + echo -e "\nUser ${RED}"${USER:-"N/A"}"$NC on "${RED}${HOST:-"N/A"}"$NC" + echo -e "\n${RED}Machine stats:$NC " ; uptime + echo +} + +# actually it converts any mp4 or flv to mp3... +youtube2mp3() { + for file in "$@" + do + if [ -f "${file}" ] ; then + title=$(echo ${file} | sed 's/\(.*\)\..*/\1/') + case $(file -b --mime-type "${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 +} + + +# }}} +# History {{{ +export HISTFILE=~/.zsh/histfile +# for some odd reason allocating RAM to save the histfile takes ages.. +export HISTSIZE=5000 +export SAVEHIST=$HISTSIZE +# }}} +# Other ZSH options {{{ +autoload colors +colors +# .. -> cd ../ +setopt autocd + +setopt correct_all + +# cd /etc/**/foo/blub searches ;) +setopt extendedglob + +# push cds to directory stack +setopt auto_pushd + +# don't push something twice +setopt pushd_ignore_dups + +# don't kill jobs when exiting shell +setopt no_hup + +# show us when some command didn't exit with 0 +setopt print_exit_value + +# makepkg -g > PKGBUILD +# zsh: file exists: PKGBUILD +# +# work saved ;) +setopt no_clobber + +setopt INC_APPEND_HISTORY +setopt SHARE_HISTORY +setopt EXTENDED_HISTORY +setopt HIST_REDUCE_BLANKS +setopt HIST_IGNORE_SPACE +setopt nohistverify +setopt prompt_subst +setopt HIST_FCNTL_LOCK + +# disable XON/XOFF flow control (^s/^q) +stty -ixon + +# }}} +# Aliases {{{ +# better ask before we loose data +alias rm='rm -Iv' +alias cp='cp -iv' +alias mv='mv -iv' + +# I don't like bytes +alias dum='du -kh --max-depth=2' +alias du='du -kh' +alias dus='du -skh' +#alias df='df -kTh' +alias df='pydf' + +# function to make ls look nice is below +alias ll='ls -l' +alias la='ls -a' +alias lla='ls -la' +alias lld='ls -ld' + +alias newpkgb=' cp $HOME/misc/aur/PKGBUILD.proto PKGBUILD' + +# well I got used to that name ;) +alias aurball='makepkg --source -f' +alias pkgbuild='makepkg -fc && aurball' +alias pushpkg='cp *.pkg.tar.gz *.src.tar.gz /mnt/mistral/srv/drop' + +alias sudo="sudo " #Sudo wont recognize aliases without this +alias s='sudo' +alias x='x -v' +alias xx='x -Rv' +alias u='upload.sh' +alias mtr='mtr -t' +alias wcl='wc -l' +alias mdstat='cat /proc/mdstat' +alias keymap='setxkbmap de -variant nodeadkeys' +alias hexdump='hexdump -C' + +alias pager='${PAGER}' +alias more='${PAGER}' +alias less='${PAGER}' +alias c='${PAGER}' +alias v='vim' +alias gv='gvim' +alias sc='sudo ${PAGER}' +alias sv='sudo vim' +alias sgv='sudo gvim' + +alias g='git' +alias gitk='giggle' +# python is too long to type... +alias q='python' + +alias ncmpc='ncmpc -c' +alias youtube='youtube-dl -b ' +alias rscp='rsync --partial --progress --rsh=ssh' + +alias mkdir='nocorrect mkdir' +alias wget='nocorrect noglob wget' + +# updating commands can be long... +alias yup='yaourt -Syu --aur' +alias yu='yaourt -Syu' + +# can't they make it use sudo on it's own like yaourt? +alias p='sudo powerpill' +alias pa='sudo powerpill -Syu' +alias py='sudo powerpill -S' +alias pacman='sudo pacman-color' + +alias su='su -' + +alias y='yaourt' +alias ys='yaourt -S' +alias ysb='yaourt -Sb' +alias ysi='yaourt -Si' +alias yr='yaourt -Rs' +alias yrc='yaourt -Rcs' +alias yrn='yaourt -Rns' +alias yqo='yaourt -Qo' + +# too long to remember +alias asciidoc_full='asciidoc -a icons -a toc' + +# other random aliases +alias ☠='pkill -9' +alias nocomment='egrep -v "^\s*(#|$)"' + +# global aliases work EVERYWHERE +# e.g. dmesg tt +# show last 20 lines of dmesg +alias -g gg='| grep --color' +alias -g eg='| egrep --color' +alias -g tt='| tail -n 20' +# I always hit y instead of | ... +alias -g vv='|' + +# who doesn't need pastebins? +alias -g sp="2>&1 | curl -F 'sprunge=<-' http://sprunge.us" +alias -g pp="2>&1 | wgetpaste -X " + +# e.g. "blub.txt" opens the file instead of showing command not found +alias -s txt=mousepad +alias -s jpg=gpicview +alias -s png=gpicview + +# }}} +# Completion stuff {{{ +autoload -Uz compinit +compinit + +# correct 7etc/foo to /etc/foo +# if anyone has a working solution for /etc7foo please contact me +function _7slash { + if [[ $words[CURRENT] = 7(#b)(*)(#e) ]] + then + compadd -U -X 'Correct leading 7 to /' -f /$match[1] + fi +} + +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 + +# 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 + +# better completion for kill +zstyle ':completion:*:*:kill:*' command 'ps -u$USER -o pid,%cpu,tty,cputime,cmd' + +# bugged with zsh 4.3.10 for whatever reason +#zstyle ':completion:*' file-sort time +zstyle ':completion:*' file-sort name + +# remove / after dirnames +# e.g. ls foo/ -> ls foo +#zstyle ':completion:*' squeeze-slashes true +zstyle ':completion:*' squeeze-slashes false + +# if in foo/bar don't show bar when cd ../ +zstyle ':completion:*:cd:*' ignore-parents parent pwd + +# ignore case when completing +zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' + +# make some stuff look better +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' + +# vim: set ft=zsh: +# complete my little rc function (archlinux startscripts) +function _rc () { + case $CURRENT in + 2) compadd $(find /etc/rc.d/ -maxdepth 1 -type f -executable -printf '%f ');; + 3) compadd $(/etc/rc.d/$words[2] 2> /dev/null | grep -i usage | sed 's/.*{\(.*\)}/\1/; s/|/ /g');; + esac +} +compdef _rc rc + +# easier way to use sshfs ;) +function _ssh-mount () { + compadd $(cat ${HOME}/bin/ssh-mount.sh | egrep "Servers:.*" | sed "s#echo \-e \"\${green}Servers\:\$NC##g; s#\"\;##g; s#,##g") +} +compdef _ssh-mount ssh-mount.sh + +# vim: set ft=zsh: +# machine dependent stuff +. $HOME/.private_stuff.zsh +# }}} +# Greetings {{{ +#cat /etc/motd +#echo -e "${CYAN}Welcome to ZSH ${RED}${ZSH_VERSION}$NC" +sysinfo +# don't want to read the same every time I open a new shell +if [ -x /usr/bin/fortune ]; then + /usr/bin/fortune -s +fi +echo + +# }}} # Show again stty echo + +# vim: set ft=zsh: -- cgit v1.2.3-24-g4f1b