#!/usr/bin/env zsh
#
# System variables
#
if [[ $defpath == "" && -d ~/bin ]]
then
defpath=($path)
path=(
$defpath
~/bin
)
fi
if [[ ! -d ~/.zsh/cache ]]
then
mkdir -p ~/.zsh/cache
fi
myfuncs=( ~alan/dotfiles/zsh/functions/*(/) )
fpath=(
$myfuncs
~alan/dotfiles/zsh/completion/
$fpath
)
export PATH
export PAGER="less"
export CLICOLOR=true
#
# zsh variables
#
HISTFILE=~/.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
lethalrocks.uk.to
alphapulsar.uk.to
st.alphapulsar.uk.to
a.st.alphapulsar.uk.to
st
)
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
if [[ "$OSTYPE" == *gnu* ]]
then
eval `dircolors -b` #exports LSCOLORS
ls_options="-v --group-directories-first --color=auto"
ls_isodate="--time-style=long-iso"
elif [[ "$OSTYPE" == freebsd* ]]
then
freebsd=1
ls_options="-p"
ls_isodate="-D '%F %k:%M'"
fi
#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 .zsh/cache/compdump
bashcompinit
zstyle :compinstall filename '/home/alan/.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 = "putty" ]];then
prompt_char="›"
else
prompt_char=">"
fi
PS1="%B%~%(!.%{$fg[red]%}.%{$fg[green]%})$prompt_char%f%b "
# 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 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 #
############
#KiTTY
bindkey "OD" backward-word
bindkey "OC" forward-word
#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 '[Z' reverse-menu-complete
bindkey '[A' up-line-or-search
bindkey '[B' down-line-or-search
#urxvt
bindkey '[3;5~' delete-word
bindkey '[1;5D' backward-word
bindkey '[1;5C' 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'
alias .='source'
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 trans="transmission-remote transmission.home"
alias bitcoin="bitcoind"
alias namecoin="~alan/applications/namecoin/src/namecoind"
alias su="smart_sudo "
alias e="$EDITOR"
alias E="SUDO_EDITOR=\emacsclient -c -a emacs\" sudoedit"
alias aticonfig="DISPLAY=:0 \aticonfig"
alias wprop='xprop |awk '\''
/^WM_CLASS/{sub(/.* =/, "instance:"); sub(/,/, "\nclass:"); print}
/^WM_NAME/{sub(/.* =/, "title:"); print}'\'''
alias -g ...='../..'
#Suffix aliases
alias -s log=less
if [[ -e =hub ]]; then
alias git="hub"
fi
# Functions
precmd () {
[[ -t 1 ]] || return
case $TERM in
*xterm*|rxvt|putty|(dt|k|E)term|screen*) print -Pn "\e]2;%~\a"
;;
esac
}
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
}
_FASD_DATA="$HOME/.zsh/fasd-data"
autoload -U fasd
source ~/.zsh/cache/fasd-init-zsh
alias e="f -e $EDITOR"
zsh/zshrc (view raw)