#! /bin/false if [ -e /etc/zsh/zshenv ]; then . /etc/zsh/zshenv fi HOSTNAME="`hostname`" SYSTEM="`uname -s`" ARCH="`uname -m`" case "$TERM" in linux) # Linux console bindkey '\e[1~' beginning-of-line # Home bindkey '\e[4~' end-of-line # End bindkey '\e[3~' delete-char # Del bindkey '\e[2~' overwrite-mode # Insert ;; screen) # The textmode window manager # In Linux console bindkey '\e[1~' beginning-of-line # Home bindkey '\e[4~' end-of-line # End bindkey '\e[3~' delete-char # Del bindkey '\e[2~' overwrite-mode # Insert bindkey '\e[7~' beginning-of-line # home bindkey '\e[8~' end-of-line # end # In rxvt bindkey '\eOc' forward-word # ctrl cursor right bindkey '\eOd' backward-word # ctrl cursor left bindkey '\e[3~' backward-delete-char # This should not be necessary! ;; rxvt) bindkey '\e[7~' beginning-of-line # home bindkey '\e[8~' end-of-line # end bindkey '\eOc' forward-word # ctrl cursor right bindkey '\eOd' backward-word # ctrl cursor left bindkey '\e[3~' backward-delete-char # This should not be necessary! bindkey '\e[2~' overwrite-mode # Insert ;; xterm*) bindkey '\e[H' beginning-of-line # Home bindkey '\e[F' end-of-line # End bindkey '\e[3~' delete-char # Del bindkey '\e[2~' overwrite-mode # Insert bindkey "^[[5C" forward-word # ctrl cursor right bindkey "^[[5D" backward-word # ctrl cursor left ;; sun) bindkey '\e[214z' beginning-of-line # Home bindkey '\e[220z' end-of-line # End bindkey '^J' delete-char # Del bindkey '^H' backward-delete-char # Backspace bindkey '\e[247z' overwrite-mode # Insert ;; esac ####################################################################### ####################################################################### # SETUP ENVIRONMENT AND OPTIONS ####################################################################### ####################################################################### setopt \ extendedglob \ list_types \ nocorrect \ list_ambiguous \ bash_auto_list \ list_packed \ interactive_comments \ nohup \ autocd \ CHECK_JOBS \ BG_NICE \ APPEND_HISTORY \ INC_APPEND_HISTORY \ HIST_IGNORE_DUPS \ EXTENDED_GLOB \ HIST_FIND_NO_DUPS \ HIST_IGNORE_SPACE \ # init colors: setopt PROMPTSUBST autoload colors zsh/terminfo if [[ "$terminfo[colors]" -ge 8 ]]; then colors fi for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do eval PR_$color='%{$fg[${(L)color}]%}' (( count = $count + 1 )) done PR_BOLD="%{$terminfo[bold]%}" PR_NO_COLOUR="%{$terminfo[sgr0]%}" # in 'foo bar | baz' make a second ^W not eat 'bar |', but only '|' # this has the disadvantage that in 'bar|baz' it eats all of it. typeset WORDCHARS='|'$WORDCHARS HISTFILE=~/.zsh_history HISTSIZE=500000 SAVEHIST=500000 TIMEFMT="$fg[magenta]%J %U user %S sys %P cpu %*E total %M kB max$terminfo[sgr0]" REPORTTIME=5 watch=(notme) # watch for everybody but me LOGCHECK=300 # check every 5 min for login/logout activity WATCHFMT='%n %a %l from %m at %t.' [ -x /usr/bin/lesspipe ] && eval `lesspipe` unset LANG export DEBEMAIL="weasel@debian.org" ####################################################################### ####################################################################### # SETUP PATHS ####################################################################### ####################################################################### fpath=( "$HOME/.zshfunc" "$fpath[@]" ) export FPATH # Only unique entries please. typeset -U fpath path=( "$HOME/bin" "$HOME/local/bin" ) if [ -e "$HOME/.ccache" ] || ! [ -L "$HOME/.ccache" ]; then path+=( /usr/lib/ccache ) fi path+=( /usr/local/bin /usr/bin /usr/local/CAME/bin /bin /usr/bin/X11 /usr/games /sw/bin /usr/lib/nagios/plugins "$path[@]" ) if [ "`id -u`" = "0" ] || ! [ -x /usr/bin/id ] ; then PATH="/usr/local/sbin:/usr/sbin:/sbin:${PATH}" path=( /usr/local/sbin /usr/sbin /sbin "$path[@]" ) fi export PATH # Only unique entries please. typeset -U path # Remove entries that don't exist on this system. Just for sanity's # sake more than anything. path=( ${^path}(N-/) ) #MANPATH="/usr/share/man:/usr/local/share/man:/usr/local/man:$MANPATH" #if [ -d $HOME/local/share/man ] ; then # MANPATH="${HOME}/local/share/man:${MANPATH}" #fi # FUNCTIONS ########### # Now that FPATH is set correctly, do autoloaded functions. # autoload all functions in $FPATH - that is, all files in # each component of the array $fpath. If there are none, feed the list # it prints into /dev/null. for paths in "$fpath[@]" do autoload -U "$paths"/*(N:t) >/dev/null done unset paths # we want colorful listings zmodload -i zsh/complist zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} hosts="" for f in "$HOME/.ssh/known_hosts" "$HOME/.ssh/known_hosts2" "/etc/ssh/ssh_known_hosts"; do if [ -e "$f" ]; then hosts=($hosts ${${${${(f)"$(<"$f")"}:#[0-9]*}%%\ *}%%,*}) fi done if [ -n "$hosts" ]; then zstyle ':completion:*:hosts' hosts $hosts fi autoload -U compinit compinit compdef _ssh ssha=ssh compdef _ssh ssh-co-dotfiles=ssh # make tabbing in a-r paths work: # mkdir -p test/test1/test2/test3 && chmod a-r test/test1 # ls -l test/test1/test2/ zstyle ':completion:*' accept-exact-dirs true insert-comment() { BUFFER="#$BUFFER" zle accept-line } zle -N insert-comment bindkey "^[#" insert-comment ####################################################################### ####################################################################### # SETUP ALIASES ####################################################################### ####################################################################### if [ "$SYSTEM" = "Linux" ] ; then eval `dircolors` LS_COLORS="$LS_COLORS""*.divx=01;35:*.pdf=01;35:*.ps=01;35:*.eps=01;35" # ls in buster (Debian 10) and later by default quotes its filenames if they contain spaces or other weird things. Disable. export QUOTING_STYLE=literal alias ls='ls --color=auto -F' alias grep='grep --color' alias Grep='grep --color' alias grpe='grep --color' fi alias cp='cp -i' alias mv='mv -i' alias l='ls -l' alias mmv='noglob mmv' alias zinterdiff='interdiff -z' alias 221='pstops "2:0L@.7(21cm,0)+1L@.7(21cm,14.85cm)"' alias rot13='tr a-zA-Z n-za-mN-ZA-M' alias 64216='perl -MMIME::Base64 -e "print unpack(\"H*\", decode_base64(<>)),\"\n\""' alias 16264='perl -MMIME::Base64 -e "\$l=<>; chomp \$l; print encode_base64(pack(\"H*\", \$l)),\"\n\""' alias vnc='xtightvncviewer -encodings "tight copyrect" -compresslevel 9 -quality 4' alias hs-mplayer='mplayer -ao alsa:device=hw=1' alias cal='ncal -M -b' alias defaultfixed='echo -n -e "\033]50;fixed\007"' alias default='echo -n -e "\033]50;-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-15\007"' alias hide='echo -n -e "\033]50;nil2\007"' alias tiny='echo -n -e "\033]50;-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso8859-15\007"' alias small='echo -n -e "\033]50;-misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-15\007"' alias medium='echo -n -e "\033]50;-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-15\007"' alias large='echo -n -e "\033]50;-misc-fixed-medium-r-normal--15-140-75-75-c-90-iso8859-15\007"' alias huge='echo -n -e "\033]50;-misc-fixed-medium-r-normal--20-200-75-75-c-100-iso8859-15\007"' alias cls='printf "\033c"' ! [[ -x /usr/bin/traceroute ]] && [[ -x /usr/sbin/traceroute ]] && alias traceroute=/usr/sbin/traceroute ! [[ -x /bin/ss ]] && [[ -x /sbin/ss ]] && alias ss=/sbin/ss if [ -x /usr/bin/recode ]; then alias unix2dos='recode lat1..ibmpc' alias dos2unix='recode ibmpc..lat1' fi if [ -x /usr/bin/base64 ]; then alias base64-encode=base64 alias base64-decode='base64 -d' else alias base64-encode='perl -MMIME::Base64 -e "print encode_base64(<>)"' alias base64-decode='perl -MMIME::Base64 -e "print decode_base64(<>)"' fi alias pdflatex='pdflatex -halt-on-error' case $TERM in xterm*|rxvt*) function update-title() { print -n "\033]0;$1\007" } function build-and-update-title() { local location cmd title location="$(print -P $1)" cmd="${2:-}" if [ -z "$cmd" ]; then title="$location" else title="$cmd [$location]" title=`echo $title | tr '\n' ' '` fi update-title "$title" } ;; screen*) if [ -n "${TMUX:-}" ] && [ -x /usr/bin/tmux ] ; then function update-title() { print -n "\033]0;$1\007" } function build-and-update-title() { local location cmd title location="$(print -P $1)" cmd="${2:-}" if [ -z "$cmd" ]; then title="$location" tmux rename-window "$title" else tmux setw automatic-rename on > /dev/null title="$location:$cmd" fi update-title "$title" } elif [ -x /usr/bin/screen ] || [ -x /usr/local/bin/screen ]; then function update-title() { screen -X title "<$1>" } function build-and-update-title() { local location cmd title location="$(print -P "%~")" cmd="${2:-}" if [ -z "$cmd" ]; then title="$location" else title="$location:$cmd" fi update-title "$title" } else function build-and-update-title() { } fi ;; *) function build-and-update-title() { } ;; esac function precmd() { vcs_info build-and-update-title "$TITLE" }; function preexec() { build-and-update-title "$TITLE" "$1" }; # gather version control information for inclusion in a prompt # we will only be using one variable, so let the code know now. autoload -Uz vcs_info && vcs_info zstyle ':vcs_info:*' max-exports 1 zstyle ':vcs_info:*' disable cdv darcs mtn tla hg zstyle ':vcs_info:*' use-prompt-escapes zstyle ':vcs_info:*' use_simple function init-prompt() { if [ -e /etc/debian_chroot ]; then debian_chroot=$(cat /etc/debian_chroot) fi # change vcs_info formats for the prompt if [[ "$TERM" == dumb ]] ; then zstyle ':vcs_info:*' actionformats "(%s%)-[%b|%a] " zstyle ':vcs_info:*' formats "(%s%)-[%b] " else # these are the same, just with a lot of colours: zstyle ':vcs_info:*' actionformats "${PR_YELLOW}[${PR_CYAN}%s${PR_YELLOW}|${PR_GREEN}%b${PR_YELLOW}|${PR_RED}%a${PR_YELLOW}]${PR_NO_COLOUR} " zstyle ':vcs_info:*' formats "${PR_YELLOW}[${PR_CYAN}%s${PR_YELLOW}|${PR_GREEN}%b${PR_YELLOW}]${PR_NO_COLOUR} " zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b${PR_RED}:${YELLOW}%r" fi local exitcodeprompt exitcodeprompt='%0(?..${PR_RED}e%?${PR_NO_COLOUR}:)' if [ "`id -u`" = "0" -o ! -x /usr/bin/id ] ; then export PROMPT="${exitcodeprompt}"'${debian_chroot:+[$debian_chroot] }${VCS_INFO_message_0_}%n@%m:%~# ' export TITLE="%n@%m: %~" else export PROMPT="${exitcodeprompt}"'${debian_chroot:+[$debian_chroot] }${VCS_INFO_message_0_}%n@%m:%~$ ' export TITLE="%n@%m: %~" fi } safe-restore-ssh-agent-socket init-prompt # improve vim setup if possible [ -d "$HOME/.vim/plugin" ] || mkdir -v -p "$HOME/.vim/plugin" ( cd "$HOME/.vim/plugin" for p in detectindent minibufexpl taglist; do ! [ -e "$p.vim" ] && [ -e /usr/share/vim-scripts/plugin/"$p".vim ] && ln -v -s /usr/share/vim-scripts/plugin/"$p".vim done ) [ -e $HOME/.zshrc-local ] && . $HOME/.zshrc-local [ -e $HOME/.pal ] && [ -e /usr/bin/pal ] && pal -r 5-10 unset zle_bracketed_paste true