From 2a133f4a39b120cf89755a6222760e1d6c4a45ce Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Tue, 13 Aug 2013 20:53:57 +0200 Subject: Initial commit of my ZSH configuration in vcsh --- .zprofile | 15 ++++ .zsh/.gitignore | 1 + .zsh/functions/add-to-list | 10 +++ .zsh/functions/add_to_list | 4 + .zsh/functions/chpwd_show_todo | 7 ++ .zsh/functions/chpwd_update_git_vars | 2 + .zsh/functions/env | 3 + .zsh/functions/get_cnt | 15 ++++ .zsh/functions/line | 8 ++ .zsh/functions/mailcount | 7 ++ .zsh/functions/precmd_maybe_festival | 15 ++++ .zsh/functions/precmd_update_git_vars | 6 ++ .zsh/functions/precmd_update_updates | 11 +++ .zsh/functions/preexec_update_vars | 16 ++++ .zsh/functions/prompt | 15 ++++ .zsh/functions/prompt_git_info | 23 ++++++ .zsh/functions/rprompt | 4 + .zsh/functions/update_current_git_vars | 30 ++++++++ .zsh/functions/venv | 15 ++++ .zsh/functions/welcome | 10 +++ .zshrc | 129 +++++++++++++++++++++++++++++++++ 21 files changed, 346 insertions(+) create mode 100644 .zprofile create mode 100644 .zsh/.gitignore create mode 100644 .zsh/functions/add-to-list create mode 100644 .zsh/functions/add_to_list create mode 100644 .zsh/functions/chpwd_show_todo create mode 100644 .zsh/functions/chpwd_update_git_vars create mode 100644 .zsh/functions/env create mode 100644 .zsh/functions/get_cnt create mode 100644 .zsh/functions/line create mode 100755 .zsh/functions/mailcount create mode 100644 .zsh/functions/precmd_maybe_festival create mode 100644 .zsh/functions/precmd_update_git_vars create mode 100644 .zsh/functions/precmd_update_updates create mode 100644 .zsh/functions/preexec_update_vars create mode 100644 .zsh/functions/prompt create mode 100644 .zsh/functions/prompt_git_info create mode 100644 .zsh/functions/rprompt create mode 100644 .zsh/functions/update_current_git_vars create mode 100644 .zsh/functions/venv create mode 100644 .zsh/functions/welcome create mode 100644 .zshrc diff --git a/.zprofile b/.zprofile new file mode 100644 index 0000000..4a74a84 --- /dev/null +++ b/.zprofile @@ -0,0 +1,15 @@ +export BROWSER=conkeror +export EDITOR="emacsclient -c -a emacs" + +PATH="$HOME/usr/bin:$PATH" +export PATH + +INFOPATH="$HOME/documents/info:$INFOPATH" +INFOPATH="$HOME/.emacs.d/vendor-lisp/org/doc:$INFOPATH" +INFOPATH="$INFOPATH:/usr/share/info" +INFOPATH="$INFOPATH:/usr/local/share/info" +export INFOPATH + +if [ -z "$SSH_AGENT_PID" ]; then + eval `ssh-agent` +fi diff --git a/.zsh/.gitignore b/.zsh/.gitignore new file mode 100644 index 0000000..b9fd690 --- /dev/null +++ b/.zsh/.gitignore @@ -0,0 +1 @@ +histfile diff --git a/.zsh/functions/add-to-list b/.zsh/functions/add-to-list new file mode 100644 index 0000000..18720e0 --- /dev/null +++ b/.zsh/functions/add-to-list @@ -0,0 +1,10 @@ +# -*- mode: sh; -*- +if [[ ! "${(P)${1}}" =~ (^|:)"$2"(:|$) ]]; then + if [ -n "$3" ]; then + # Append + typeset -g $1="${(P)${1}}:$2" + else + # Prepend + typeset -g $1="$2:${(P)${1}}" + fi +fi diff --git a/.zsh/functions/add_to_list b/.zsh/functions/add_to_list new file mode 100644 index 0000000..801e662 --- /dev/null +++ b/.zsh/functions/add_to_list @@ -0,0 +1,4 @@ +# -*- mode: sh; -*- +if [[ "${(P)${1}}" =~ (^|:)"$2"(:|$) ]]; then; else + typeset -g $1="${(P)${1}}:$2" +fi diff --git a/.zsh/functions/chpwd_show_todo b/.zsh/functions/chpwd_show_todo new file mode 100644 index 0000000..88ee853 --- /dev/null +++ b/.zsh/functions/chpwd_show_todo @@ -0,0 +1,7 @@ +# -*- mode: Shell-script -*- + +if [ -e ".toudou" ]; then + toudou +elif [ "$PWD" = "$HOME" ]; then + toudou list -g +fi diff --git a/.zsh/functions/chpwd_update_git_vars b/.zsh/functions/chpwd_update_git_vars new file mode 100644 index 0000000..0ef846a --- /dev/null +++ b/.zsh/functions/chpwd_update_git_vars @@ -0,0 +1,2 @@ +# -*- mode: shell-script -*- +update_current_git_vars diff --git a/.zsh/functions/env b/.zsh/functions/env new file mode 100644 index 0000000..a79fd5d --- /dev/null +++ b/.zsh/functions/env @@ -0,0 +1,3 @@ +# -*- mode: shell-script -*- + +/usr/bin/env "$@" | grep -v \^LESS_TERMCAP_ diff --git a/.zsh/functions/get_cnt b/.zsh/functions/get_cnt new file mode 100644 index 0000000..5fc3d4f --- /dev/null +++ b/.zsh/functions/get_cnt @@ -0,0 +1,15 @@ +# -*- mode: shell-script -*- + +if [ -n "$1" ]; then + if [ -e "$HOME/.local/share/$1.cnt" ]; then + cnt=$(/bin/cat "$HOME/.local/share/$1.cnt") + fi + + if [ -z "$cnt" ]; then + cnt=0 + fi + + echo $cnt +else + echo "No count name specified" >&2 +fi diff --git a/.zsh/functions/line b/.zsh/functions/line new file mode 100644 index 0000000..58f7aed --- /dev/null +++ b/.zsh/functions/line @@ -0,0 +1,8 @@ +# -*- mode: shell-script; eval: (git-auto-commit-mode 1) -*- + +let start=$(expr $1 + 1) +let width=$(expr $COLUMNS - $2) + +for i in {$start..$width}; do + echo -n \\x2d +done diff --git a/.zsh/functions/mailcount b/.zsh/functions/mailcount new file mode 100755 index 0000000..afe6736 --- /dev/null +++ b/.zsh/functions/mailcount @@ -0,0 +1,7 @@ +#!/bin/zsh + +local _new=`ls "$1"/inbox/new | wc -l` +local _unread=`ls "$1"/inbox/cur | egrep -v "S$" | wc -l` +let _count=$_new+$_unread + +echo -n $_count diff --git a/.zsh/functions/precmd_maybe_festival b/.zsh/functions/precmd_maybe_festival new file mode 100644 index 0000000..3f8baa3 --- /dev/null +++ b/.zsh/functions/precmd_maybe_festival @@ -0,0 +1,15 @@ +cmdstatus=$? + +if [ -n "$__COMMAND_EXECUTING" -a $__COMMAND_EXECUTING -gt 0 \ + -a -n "$__COMMAND_EXEC_TIME" ]; then + __COMMAND_EXECUTING=0 + duration=$(expr $(date +%s) - $__COMMAND_EXEC_TIME) + + if [ $duration -gt 30 ]; then + if [ $cmdstatus -eq 0 ]; then + echo "done" | festival --tts + else + echo "failed" | festival --tts + fi + fi +fi diff --git a/.zsh/functions/precmd_update_git_vars b/.zsh/functions/precmd_update_git_vars new file mode 100644 index 0000000..172456a --- /dev/null +++ b/.zsh/functions/precmd_update_git_vars @@ -0,0 +1,6 @@ +# -*- mode: shell-script -*- + +if [ -n "$__EXECUTED_GIT_COMMAND" ]; then + update_current_git_vars + unset __EXECUTED_GIT_COMMAND +fi diff --git a/.zsh/functions/precmd_update_updates b/.zsh/functions/precmd_update_updates new file mode 100644 index 0000000..639fd5c --- /dev/null +++ b/.zsh/functions/precmd_update_updates @@ -0,0 +1,11 @@ +# -*- mode: shell-script -*- + +if [ -n "$__EXECUTED_PACMAN_COMMAND" ]; then + update_pac_cnt + unset __EXECUTED_PACMAN_COMMAND +fi + +if [ -n "$__EXECUTED_COWER_COMMAND" ]; then + update_aur_cnt + unset __EXECUTED_COWER_COMMAND +fi diff --git a/.zsh/functions/preexec_update_vars b/.zsh/functions/preexec_update_vars new file mode 100644 index 0000000..f8c1b44 --- /dev/null +++ b/.zsh/functions/preexec_update_vars @@ -0,0 +1,16 @@ +# -*- mode: shell-script -*- + +case "$1" in + git*) + __EXECUTED_GIT_COMMAND=1 + ;; + cower*) + __EXECUTED_COWER_COMMAND=1 + ;; + *pacman*) + __EXECUTED_PACMAN_COMMAND=1 + ;; +esac + +__COMMAND_EXEC_TIME=$(date +%s) +__COMMAND_EXECUTING=1 diff --git a/.zsh/functions/prompt b/.zsh/functions/prompt new file mode 100644 index 0000000..6fe927b --- /dev/null +++ b/.zsh/functions/prompt @@ -0,0 +1,15 @@ +# -*- mode: shell-script; eval: (git-auto-commit-mode 1) -*- + +local pac_cnt=$(get_cnt updates) +local aur_cnt=$(get_cnt aur) +local hostname=$(hostname | cut -d . -f 1) + +if [ $pac_cnt -gt 0 -o $aur_cnt -gt 0 ]; then + printf "%s%d%s/%s%d%s:" \ + "%{${fg[cyan]}%}" $pac_cnt "%{${fg[default]}%}" \ + "%{${fg[cyan]}%}" $aur_cnt "%{${fg[default]}%}" +fi + +printf '%s%s%s:%s%s%s%s ' \ + "%{${fg[magenta]}%}" $hostname "%{${fg[default]}%}" \ + "%(?.%{${fg[green]}%}.%{${fg[red]}%})" "%~" "%{${fg[default]}%}" diff --git a/.zsh/functions/prompt_git_info b/.zsh/functions/prompt_git_info new file mode 100644 index 0000000..76d889a --- /dev/null +++ b/.zsh/functions/prompt_git_info @@ -0,0 +1,23 @@ +# -*- mode: shell-script -*- + +if [ -n "$__CURRENT_GIT_BRANCH" ]; then + local s="(" + s+="$__CURRENT_GIT_BRANCH" + case "$__CURRENT_GIT_BRANCH_STATUS" in + ahead) + s+="↑" + ;; + diverged) + s+="↕" + ;; + behind) + s+="↓" + ;; + esac + if [ -n "$__CURRENT_GIT_BRANCH_IS_DIRTY" ]; then + s+="⚡" + fi + s+=")" + + printf " %s%s" "%{${fg[yellow]}%}" $s +fi diff --git a/.zsh/functions/rprompt b/.zsh/functions/rprompt new file mode 100644 index 0000000..3392379 --- /dev/null +++ b/.zsh/functions/rprompt @@ -0,0 +1,4 @@ +# -*- mode: shell-script -*- + +local git_info="$(prompt_git_info)" +printf '%s%s' $git_info "%{${fg[default]}%}" diff --git a/.zsh/functions/update_current_git_vars b/.zsh/functions/update_current_git_vars new file mode 100644 index 0000000..71f37e7 --- /dev/null +++ b/.zsh/functions/update_current_git_vars @@ -0,0 +1,30 @@ +# -*- mode: Shell-script -*- +unset __CURRENT_GIT_BRANCH +unset __CURRENT_GIT_BRANCH_STATUS +unset __CURRENT_GIT_BRANCH_IS_DIRTY + +local st="$(git status 2>/dev/null)" +if [[ -n "$st" ]]; then + local -a arr + arr=(${(f)st}) + + if [[ $arr[1] =~ 'Not currently on any branch.' ]]; then + __CURRENT_GIT_BRANCH='no-branch' + else + __CURRENT_GIT_BRANCH="${arr[1][(w)4]}" + fi + + if [[ $arr[2] =~ 'Your branch is' ]]; then + if [[ $arr[2] =~ 'ahead' ]]; then + __CURRENT_GIT_BRANCH_STATUS='ahead' + elif [[ $arr[2] =~ 'devirged' ]]; then + __CURRENT_GIT_BRANCH_STATUS='diverged' + else + __CURRENT_GIT_BRANCH_STATUS='behind' + fi + fi + + if [[ ! $st =~ 'nothing to commit' ]]; then + __CURRENT_GIT_BRANCH_IS_DIRTY='1' + fi +fi diff --git a/.zsh/functions/venv b/.zsh/functions/venv new file mode 100644 index 0000000..03ec83d --- /dev/null +++ b/.zsh/functions/venv @@ -0,0 +1,15 @@ +# -*- mode: sh; -*- +if [ "${#}" -eq 1 ]; then + local venv_activate="$HOME/.virtualenv/$1/bin/activate" + + if [ -r "$venv_activate" ]; then + source $venv_activate + else + echo "$1 is not a know virtual environment" + fi +else + echo "Virtual environments: " + for itm in ~/.virtualenv/*; do + echo " $(basename $itm)" + done +fi diff --git a/.zsh/functions/welcome b/.zsh/functions/welcome new file mode 100644 index 0000000..bd6aacd --- /dev/null +++ b/.zsh/functions/welcome @@ -0,0 +1,10 @@ +# -*- mode: shell-script; eval: (git-auto-commit-mode 1) -*- + +echo " , _ _ _ |" +echo " /#\\ __ _ _ __ ___| |__ | (_)_ __ _ ___ __ |" +echo " /###\\ / _\` | '__/ __| '_ \\| | | '_ \\| | | \\ \\/ / |" +echo " /#####\\ | (_| | | | (__| | | | | | | | | |_| |> < |" +echo " /##,-,##\\ \\__,_|_| \\___|_| |_|_|_|_| |_|\\__,_/_/\\_\\ |" +echo " /##( )##\\ |" +echo " /#.-- --.#\\ A simple, lightweight linux distribution. |" +echo " /\` \`\\ |" diff --git a/.zshrc b/.zshrc new file mode 100644 index 0000000..e7f700b --- /dev/null +++ b/.zshrc @@ -0,0 +1,129 @@ +# -*- Mode: shell-script; -*- +autoload -Uz add-zsh-hook +autoload -Uz compinit +autoload -U colors +autoload -Uz vcs_info + +# Autoload zsh functions. +fpath=($HOME/.zsh/functions $fpath) +autoload -U $HOME/.zsh/functions/*(:t) + +# Setup variables +HISTFILE=$HOME/.zsh/histfile +HISTSIZE=1000 +SAVEHIST=1000 +LESSCMD="/usr/bin/less -FXRS" + +export LESS_TERMCAP_mb=$'\e[1;37m' +export LESS_TERMCAP_md=$'\e[1;37m' +export LESS_TERMCAP_me=$'\e[0m' +export LESS_TERMCAP_se=$'\e[0m' +export LESS_TERMCAP_so=$'\e[1;47;30m' +export LESS_TERMCAP_ue=$'\e[0m' +export LESS_TERMCAP_us=$'\e[0;36m' +export PAGER=$LESSCMD + +# Aliases +alias alpine="alpine -p ""{imap.gmail.com/ssl/user=tom.willemsen@archlinux.us}remote_pinerc""" +alias evolus-pencil="/usr/lib/evolus-pencil-svn/evolus-pencil.sh" +alias grep="grep --color=always" +alias less=$LESSCMD +alias ls="ls -F --color=always" +alias mysql="mysql --pager" + +# Suffix aliases +alias -s pdf="zathura" +alias -s xls="libreoffice" + +setopt AUTO_CD +setopt AUTO_PUSHD +setopt CORRECT +setopt EXTENDED_GLOB +setopt NOTIFY +setopt PROMPT_SUBST # Allow for functions in the prompt + +zstyle :compinstall filename '$HOME/.zshrc' + +# Enable auto-execution of functions +typeset -ga preexec_functions +typeset -ga precmd_functions +typeset -ga chpwd_functions + +add-zsh-hook precmd vcs_info + +zstyle ':vcs_info:*' actionformats '%B%F{1}%a%f%%b (%F{3}%s%f) %F{5}%r%f:%F{4}%b%f %F{2}%S%f' +zstyle ':vcs_info:*' enable bzr git hg svn +zstyle ':vcs_info:*' formats '(%F{3}%s%f) %F{5}%r%f:%F{4}%b%f %F{2}%S%f' +zstyle ':vcs_info:*' nvcsformats '%F{2}%~%f' +zstyle ':vcs_info:bzr:*' branchformat '%b' + +# Set the prompt. +PROMPT='${vcs_info_msg_0_} +%B%F{6}%m%b%f %B%(?.%F{2}+.%F{1}-)%b> ' + +# Set terminal name to current running application +case $TERM in + rxvt*) + precmd () { print -Pn "\e]0;%~\a" } + preexec () { print -Pn "\e]0;$1\a" } + ;; +esac + +export XDG_CACHE_HOME="$HOME/.cache" +export XDG_CONFIG_HOME="$HOME/.config" +export XDG_DATA_HOME="$HOME/.local/share" + +# Set terminal keys +bindkey "\e[1~" beginning-of-line +bindkey "\e[4~" end-of-line +bindkey "\e[5~" beginning-of-history +bindkey "\e[6~" end-of-history +bindkey "\e[3~" delete-char +bindkey "\e[2~" quoted-insert +bindkey "\e[5C" forward-word +bindkey "\e0c" emacs-forward-word +bindkey "\e[5D" backward-word +bindkey "\e0d" emacs-backward-word +bindkey "\e\e[C" forward-word +bindkey "\e\e[D" backward-word +## for rxvt +bindkey "\e[8~" end-of-line +bindkey "\e[7~" beginning-of-line +## for non RH/Debian xterm, can't hurt for RH/Debian xterm +bindkey "\e0H" beginning-of-line +bindkey "\e0F" end-of-line +## for freebsd console +bindkey "\e[H" beginning-of-line +bindkey "\e[F" end-of-line + +bindkey "^W" backward-delete-char + +source /usr/share/zsh/scripts/antigen/antigen.zsh +antigen bundle zsh-users/zsh-syntax-highlighting + +# Show syntax highlighting when we're not running in emacs +if [ -z $EMACS ]; then + # source $HOME/.zsh/syntax-highlighting/zsh-syntax-highlighting.zsh + + ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets) + + ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' + ZSH_HIGHLIGHT_STYLES[builtin]='fg=cyan' + ZSH_HIGHLIGHT_STYLES[function]='fg=blue' + ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue' + ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue' + ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=cyan' + ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=cyan' + ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=cyan' + ZSH_HIGHLIGHT_STYLES[assign]='fg=yellow' + + ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=red' + ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=yellow' + ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=green' + ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=cyan' + ZSH_HIGHLIGHT_STYLES[bracket-level-5]='fg=blue' + ZSH_HIGHLIGHT_STYLES[bracket-level-6]='fg=magenta' +fi + +compinit +colors # Initialize colors. -- cgit v1.2.3-54-g00ecf