aboutsummaryrefslogtreecommitdiff
path: root/zsh
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2012-06-04 23:46:47 +1200
committerTom Ryder <tom@sanctum.geek.nz>2012-06-04 23:46:47 +1200
commit4530d63af43a6781ce5965eb967c922b1e71a9b2 (patch)
treea76a9ecd60500b09036d4a2568fc5a18cb40d5d0 /zsh
parente5c44686c056e4ef7b937b308f77f7717fbdbd6a (diff)
downloaddotfiles-4530d63af43a6781ce5965eb967c922b1e71a9b2.tar.gz
Refactor bashrc config for parity with new zshrc
I'm trying out Zshrc for a bit for a future Arabesque article. I've started by just trying to get rough feature parity with my Bash configuration. I've had some moderate success though it's taken quite some time.
Diffstat (limited to 'zsh')
-rw-r--r--zsh/zshenv13
-rw-r--r--zsh/zshrc124
2 files changed, 137 insertions, 0 deletions
diff --git a/zsh/zshenv b/zsh/zshenv
new file mode 100644
index 00000000..a25472a0
--- /dev/null
+++ b/zsh/zshenv
@@ -0,0 +1,13 @@
+# Add ~/bin to the path if it exists.
+if [[ -d "$HOME/bin" ]]; then
+ PATH="$HOME/bin:$PATH"
+fi
+
+# Add machine-specific local file if it exists.
+if [[ -e "$HOME/.zshenv_local" ]]; then
+ . "$HOME/.zshenv_local"
+fi
+
+# None of this UTF8 drawing characters nonsense.
+export NCURSES_NO_UTF8_ACS=1
+
diff --git a/zsh/zshrc b/zsh/zshrc
new file mode 100644
index 00000000..aa2c8217
--- /dev/null
+++ b/zsh/zshrc
@@ -0,0 +1,124 @@
+# Use emacs keybindings for shell.
+bindkey -e
+
+# Use vi as my text editor.
+export EDITOR=vi
+
+# Keep plenty of history.
+HISTFILE=~/.zsh_history
+HISTSIZE=1000000
+SAVEHIST=1000000
+
+# Don't worry too much about sending me long lists.
+LISTMAX=500
+
+# Append history lines directly.
+setopt appendhistory
+
+# Push a directory onto the stack whenever changed.
+setopt autopushd
+
+# Allow completing options for aliases.
+setopt completealiases
+
+# Use special globbing features.
+setopt extendedglob
+
+# Save a lot more information to the history file.
+setopt extendedhistory
+
+# Ignore duplicate history.
+setopt histignorealldups
+
+# Ignore duplicate directories on the stack.
+setopt pushdignoredups
+
+# Always retrieve history from file, not memory.
+setopt sharehistory
+
+# Put completions above my prompt, not below it.
+unsetopt alwayslastprompt
+
+# Don't beep at me.
+unsetopt beep
+
+# Don't put filetype suffices in lists.
+unsetopt listtypes
+
+# Use zsh's built-in autocompletion.
+autoload -Uz compinit && compinit
+
+# Make completion expand and correct helpfully.
+zstyle ':completion:*' completer _expand _complete _correct _approximate
+
+# SSH agent setup, if available.
+[[ -e ~/.ssh/agent ]] && . ~/.ssh/agent
+
+# Sensible prompts, we'll work out colours shortly.
+PS1="%n@%m:%~%(!.#.$)"
+PS2="..."
+
+# Start stacking up options for ls and grep.
+LS_OPTS=
+GREP_OPTS=
+
+# If we're using an xterm, force 256 colors.
+if [[ $TERM == xterm* ]]; then
+ TERM=xterm-256color
+fi
+
+# If we have a color terminal, do colory things.
+if [[ $TERM == *color ]]; then
+
+ # Change prompt color depending on whether I'm root or not.
+ PS1="%{%(!.%F{red}.%F{green})%B%}${PS1}%{%b%f%}"
+
+ # Get colouring for ls and grep if available.
+ hash dircolors &>/dev/null && eval "$(dircolors -b)"
+ if ls --help | grep -- --color &>/dev/null; then
+ LS_OPTS="${LS_OPTS} --color=auto"
+ fi
+ if grep --help | grep -- --color &>/dev/null; then
+ GREP_OPTS="${GREP_OPTS} --color=auto"
+ fi
+
+ # Use same colors for completion.
+ zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
+ zstyle ':completion:*' list-colors ''
+fi
+
+# Set up more options for grep; exclude version control files.
+if grep --help | grep -- --exclude &>/dev/null; then
+ for PATTERN in .git .gitignore .gitmodules; do
+ GREP_OPTS="${GREP_OPTS} --exclude=${PATTERN}"
+ done
+fi
+if grep --help | grep -- --exclude-dir &>/dev/null; then
+ for PATTERN in .cvs .git .hg .svn; do
+ GREP_OPTS="${GREP_OPTS} --exclude-dir=${PATTERN}"
+ done
+fi
+
+# Alias ls and grep with the options we've collected.
+alias ls="ls ${LS_OPTS}"
+alias grep="grep ${GREP_OPTS}"
+
+# Protect innocent MySQL databases from my stupidity.
+alias mysql='mysql --safe-updates'
+
+# I always do this, and I hate slow train.
+alias sl='ls'
+
+# Set window titles in various terminals. Doesn't work yet.
+case $TERM in
+ screen*)
+ precmd () {print -Pn "\ek%m\e\\"}
+ ;;
+ xterm*)
+ precmd () {print -Pn "\e]0;%m\a"}
+ ;;
+esac
+
+# Add space suffix to the prompt now that we're done hacking it up.
+PS1="${PS1} "
+