# -*- mode: sh; -*- export PAGER="less" export EDITOR="emacsclient" export CLICOLOR=true export LESSGLOBALTAGS=global # # zsh variables # HISTFILE=~/.cache/zsh/history HISTSIZE=4000 SAVEHIST=3000 WORDCHARS='*?_-[]~=.&;!#$%^(){}<>' #If a command takes more than 5 seconds, give statistics REPORTTIME=5 TIMEFMT="%U user %S system %P cpu %*Es total" #Check for user logins watch=notme WATCHFMT="%n has %a %l from %M at %t" hosts=( server prefect alanpearce.co.uk home.alanpearce.co.uk ) users=(alan root toor) function linkAuthSock () { local linkSock=~/.ssh/ssh_auth_sock ln -sf $1 ~/.ssh/ssh_auth_sock export SSH_AUTH_SOCK=$linkSock } if [[ "$SSH_AUTH_SOCK" != "" ]] then if [[ -e ~/.ssh/ssh_auth_sock && ! -L ~/.ssh/ssh_auth_sock ]] then linkAuthSock $SSH_AUTH_SOCK fi fi LS_COLORS='no=00:fi=00:di=36:ln=35:pi=30;44:so=35;44:do=35;44:bd=33;44:cd=37;44:or=05;37;41:mi=05;37;41:ex=01;31:*.cmd=01;31:*.exe=01;31:*.com=01;31:*.bat=01;31:*.reg=01;31:*.app=01;31:*.txt=32:*.org=32:*.md=32:*.mkd=32:*.h=32:*.c=32:*.C=32:*.cc=32:*.cpp=32:*.cxx=32:*.objc=32:*.sh=32:*.csh=32:*.zsh=32:*.el=32:*.vim=32:*.java=32:*.pl=32:*.pm=32:*.py=32:*.rb=32:*.hs=32:*.php=32:*.htm=32:*.html=32:*.shtml=32:*.erb=32:*.haml=32:*.xml=32:*.rdf=32:*.css=32:*.sass=32:*.scss=32:*.less=32:*.js=32:*.coffee=32:*.man=32:*.0=32:*.1=32:*.2=32:*.3=32:*.4=32:*.5=32:*.6=32:*.7=32:*.8=32:*.9=32:*.l=32:*.n=32:*.p=32:*.pod=32:*.tex=32:*.bmp=33:*.cgm=33:*.dl=33:*.dvi=33:*.emf=33:*.eps=33:*.gif=33:*.jpeg=33:*.jpg=33:*.JPG=33:*.mng=33:*.pbm=33:*.pcx=33:*.pdf=33:*.pgm=33:*.png=33:*.ppm=33:*.pps=33:*.ppsx=33:*.ps=33:*.svg=33:*.svgz=33:*.tga=33:*.tif=33:*.tiff=33:*.xbm=33:*.xcf=33:*.xpm=33:*.xwd=33:*.xwd=33:*.yuv=33:*.aac=33:*.au=33:*.flac=33:*.mid=33:*.midi=33:*.mka=33:*.mp3=33:*.mpa=33:*.mpeg=33:*.mpg=33:*.ogg=33:*.ra=33:*.wav=33:*.anx=33:*.asf=33:*.avi=33:*.axv=33:*.flc=33:*.fli=33:*.flv=33:*.gl=33:*.m2v=33:*.m4v=33:*.mkv=33:*.mov=33:*.mp4=33:*.mp4v=33:*.mpeg=33:*.mpg=33:*.nuv=33:*.ogm=33:*.ogv=33:*.ogx=33:*.qt=33:*.rm=33:*.rmvb=33:*.swf=33:*.vob=33:*.wmv=33:*.doc=31:*.docx=31:*.rtf=31:*.dot=31:*.dotx=31:*.xls=31:*.xlsx=31:*.ppt=31:*.pptx=31:*.fla=31:*.psd=31:*.7z=1;35:*.apk=1;35:*.arj=1;35:*.bin=1;35:*.bz=1;35:*.bz2=1;35:*.cab=1;35:*.deb=1;35:*.dmg=1;35:*.gem=1;35:*.gz=1;35:*.iso=1;35:*.jar=1;35:*.msi=1;35:*.rar=1;35:*.rpm=1;35:*.tar=1;35:*.tbz=1;35:*.tbz2=1;35:*.tgz=1;35:*.tx=1;35:*.war=1;35:*.xpi=1;35:*.xz=1;35:*.z=1;35:*.Z=1;35:*.zip=1;35:*.ANSI-30-black=30:*.ANSI-01;30-brblack=01;30:*.ANSI-31-red=31:*.ANSI-01;31-brred=01;31:*.ANSI-32-green=32:*.ANSI-01;32-brgreen=01;32:*.ANSI-33-yellow=33:*.ANSI-01;33-bryellow=01;33:*.ANSI-34-blue=34:*.ANSI-01;34-brblue=01;34:*.ANSI-35-magenta=35:*.ANSI-01;35-brmagenta=01;35:*.ANSI-36-cyan=36:*.ANSI-01;36-brcyan=01;36:*.ANSI-37-white=37:*.ANSI-01;37-brwhite=01;37:*.log=01;34:*~=01;34:*#=01;34:*.bak=01;36:*.BAK=01;36:*.old=01;36:*.OLD=01;36:*.org_archive=01;36:*.off=01;36:*.OFF=01;36:*.dist=01;36:*.DIST=01;36:*.orig=01;36:*.ORIG=01;36:*.swp=01;36:*.swo=01;36:*,v=01;36:*.gpg=34:*.gpg=34:*.pgp=34:*.asc=34:*.3des=34:*.aes=34:*.enc=34:' #Ignore suffixes in completion fignore=( svbin ) # # Modules # autoload -Uz compinit bashcompinit autoload -U colors complist zrecompile zmv zargs zed autoload -Uz vcs_info autoload insert-files zle -N insert-files zmodload -i zsh/complist colors compinit -u -d .cache/zsh/compdump bashcompinit zstyle :compinstall filename '~/.zshrc' autoload -Uz _tmux_pane_words zle -C tmux-pane-words-prefix complete-word _generic zle -C tmux-pane-words-anywhere complete-word _generic zstyle ':completion:tmux-pane-words-(prefix|anywhere):*' completer _tmux_pane_words zstyle ':completion:tmux-pane-words-(prefix|anywhere):*' ignore-line current zstyle ':completion:tmux-pane-words-anywhere:*' matcher-list 'b:=* m:{A-Za-z}={a-zA-Z}' # Speed up completion by not going further than a full match zstyle ':completion:*' accept-exact '*(N)' zstyle ':completion:*:default' use-cache on zstyle ':completion:*:default' cache-path ~/.zsh/cache/compcache zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' '+m:{A-Z}={a-z}' zstyle ':completion:*' completer _oldlist _expand _force_rehash _complete _match zstyle ':completion:*' verbose yes zstyle ':completion:*:messages' format '%d' zstyle ':completion:*:warnings' format 'No matches for: %d' zstyle ':completion:*:descriptions' format '%U%B%d%b%u' zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b' zstyle ':completion:*' group-name '' # Complete all user processes zstyle ':completion:*:processes' command 'ps -au$USER' # Add colour to process lists zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31' zstyle ':completion:*:*:kill:*' menu yes select zstyle ':completion:*:kill:*' force-list always zstyle ':completion:*:*:killall:*' menu yes select zstyle ':completion:*:killall:*' force-list always # Complete unreadable log filenames #zstyle ':completion::complete:(most|tail)::' fake-files '/var/log/*:current' # Group manpages by section zstyle ':completion:*' separate-sections true # Users #zstyle '*' users $users zstyle '*' hosts $hosts zstyle ':completion:*:functions' ignored-patterns '_*' zstyle ':completion:*:cd:*' ignore-parents parent pwd #This works, but isn't the same as ls #zstyle ':completion:*:default' list-colors '' zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} zstyle ':vcs_info:*' enable git hg # Filename suffixes to ignore during completion (except after rm command) zstyle ':completion:*:*:(^rm):*:*files' ignored-patterns '*?.o' '*?.c~' '*?.old' '*?.pro' ## Prompt if [[ $TERM != 'dumb' ]] then autoload -U promptinit promptinit prompt pure RPROMPT= fi # Options # Changing directories setopt auto_cd # Completion setopt auto_list # List multiple choices on first tab unsetopt list_ambiguous # List ambiguous choices rather than completing common prefixes unsetopt list_beep # Don't try to beep here setopt list_types # Indicate file types # Expansion and globbing setopt extended_glob # Use #~^ as part of filename patterns unsetopt nomatch # History unsetopt hist_beep setopt hist_expire_dups_first setopt hist_fcntl_lock # Use standard locking on histfile setopt hist_find_no_dups setopt hist_ignore_space setopt hist_reduce_blanks setopt hist_verify setopt share_history setopt inc_append_history # Input/Output unsetopt clobber unsetopt flow_control setopt path_dirs # Search PATH even with slashes setopt print_exit_value # Job Control setopt auto_continue unsetopt nohup setopt long_list_jobs unsetopt notify # Scripts and functions unsetopt multi_func_def setopt multios # Zle unsetopt beep ############ # Keybinds # ############ #General bindkey "[1~" beginning-of-line bindkey "[4~" end-of-line bindkey "[5~" beginning-of-history bindkey "[6~" end-of-history bindkey "[2~" quoted-insert bindkey "[3~" delete-char bindkey '' backward-delete-char bindkey '^I' expand-or-complete-prefix bindkey '' reverse-menu-complete bindkey '' up-line-or-search bindkey '' down-line-or-search #urxvt bindkey '[3;5~' delete-word bindkey '' backward-word bindkey '' forward-word bindkey 'f' insert-files bindkey 'd' describe-key-briefly bindkey '\' tmux-pane-words-prefix bindkey '|' tmux-pane-words-anywhere # Aliases before functions alias getcflags='gcc -\#\#\# -march=native -E /usr/include/stdlib.h 2>&1 | grep "/usr/libexec/gcc/.*cc1"' alias grep='grep --color=auto' alias df='df -h' alias du='du -h' alias md='mkdir -p' alias rd='rmdir' for ((i = 1; i <= 5; i++)) do alias $i="head -n$i" alias -$i="tail -n$i" done alias .='source' ls='\ls' gnu_ls_options="-v --group-directories-first --color=auto" gnu_ls_isodate="--time-style=long-iso" bsd_ls_options="-p" bsd_ls_isodate="-D '%F %k:%M'" case $os in osx) if [[ -n $commands[gls] ]] then ls='\gls' ls_options=$gnu_ls_options ls_isodate=$gnu_ls_isodate else ls_options=$bsd_ls_options ls_isodate=$bsd_ls_isodate fi ;; freebsd) ls_options=$bsd_ls_options ls_isodate=$bsd_ls_isodate ;; gnu) ls_options=$gnu_ls_options ls_isodate=$gnu_ls_isodate ;; esac alias l="${ls} ${ls_options} -Bp" alias l1="${ls} ${ls_options} -1" alias ls="${ls} ${ls_options} -hF" alias la="${ls} ${ls_options} -hA" alias ll="${ls} ${ls_options} ${ls_isodate} -hl" alias lal="ll -A" alias lla="lal" alias llr="ll -t" alias gpp='g++' alias lsr="${ls} -tld *(m-2)" # mtime < -2days alias sf="app/console" alias pping="prettyping.sh" alias trans="transmission-remote transmission.home" alias bitcoin="bitcoind" alias su="smart_sudo " alias E="SUDO_EDITOR=\"emacsclient -c -a emacs\" sudoedit" alias wprop='xprop |awk '\'' /^WM_CLASS/{sub(/.* =/, "instance:"); sub(/,/, "\nclass:"); print} /^WM_NAME/{sub(/.* =/, "title:"); print} /^WM_WINDOW_ROLE/{sub(/.* =/, "role:"); print}'\''' alias et="emacsclient -t" alias -g ...='../..' #Suffix aliases alias -s log=less if [[ -e =hub ]]; then alias git="hub" if [[ -n $functions[_hub] ]];then compdef _hub hub fi fi if [[ -n $commands[composer.phar] && ! -n $commands[composer] ]]; then alias composer="composer.phar" fi # Functions magit () { emacsclient -e "(magit-status \"$PWD\")" > /dev/null } dired () { emacsclient -e "(dired \"${1:-$PWD}\")" > /dev/null } pid () { local i for i in /proc/<->/stat [[ "$(< $i)" = *\((${(j:|:)~@})\)* ]] && echo $i:h:t return 0 } _force_rehash() { (( CURRENT == 1 )) && rehash return 1 # Because we didn't really complete anything } portgrep() { sudo lsof -i :$1 -nP | egrep '(LISTEN|UDP|COMMAND)' } ipgrep() { sudo lsof -i @$1 -nP } smart_sudo () { if [[ -n $1 ]]; then \sudo $argv else #if no parameters were given, then assume we want a root shell \sudo -i -u toor fi } compdef _sudo smart_sudo smart_compile () { local zcompargs if [[ $1 = *zshrc* ]]; then zcompargs="-R" fi if [[ $EUID -ne 0 || $1 != *alan* ]]; then zrecompile -q -p $zcompargs $1 fi if [[ -n $2 ]]; then . $1 fi } emacs_change_focus () { emacsclient -n -e "(select-frame-set-input-focus (selected-frame))" > /dev/null } ec () { local frameNeeded frameNeeded=$(emacsclient -e '(> (if (daemonp) 2 1) (length (visible-frame-list)))') if [[ $? -ne 0 ]]; then print "Daemon not running" return 1 fi if [[ $frameNeeded == 't' ]]; then emacsclient -n -c "$@" && emacs_change_focus else emacs_change_focus if [[ $# -gt 0 ]]; then emacsclient -n "$@" fi fi } if [[ -e $ZDOTDIR/per-directory-history/per-directory-history.zsh ]] then HISTORY_BASE=~/.cache/zsh/dirhist source $ZDOTDIR/per-directory-history/per-directory-history.zsh bindkey '^G' send-break bindkey '^[^G' per-directory-history-toggle-history else echo "per-directory-history is missing" fi _FASD_DATA="$HOME/.cache/zsh/fasd-data" if [[ -e ~/.config/zsh/fasd.zsh ]] then source ~/.config/zsh/fasd.zsh else echo "fasd init file is missing." fi if [[ -e /etc/gibo/gibo-completion.zsh ]] then source /etc/gibo/gibo-completion.zsh fi case $os in freebsd) source $ZDOTDIR/freebsd.zsh ;; osx) source $ZDOTDIR/osx.zsh ;; esac