# Nick's multiplatform (OSX/Linux) zshrc
# Last Updated: Tue Jan 9 13:47:53 2018
# In order to install everything run the following:
# Mac:
# $ brew install zsh zsh-autosuggestions zsh-syntax-highlighting antigen
# Linux:
# $ sudo apt install zsh zsh-autosuggestions zsh-syntax-highlighting zsh-antigen
# On recent Ubuntu the antigen package is broken, so install it and then run:
# $ sudo curl -o /usr/share/zsh-antigen/antigen.zsh -sL git.io/antigen
# The Powerline support will require a compatible font which can be installed from:
#
https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/SourceCodePro/Regular/complete
# Force 256 colors unless Linux console
if [[ $TERM != "linux" ]]; then
export TERM="xterm-256color"
fi
# Antigen {{{
# Only use Antigen on login shells
if [[ -o login ]]; then
USE_ANTIGEN=1
else
USE_ANTIGEN=0
fi
if [[ $USE_ANTIGEN=1 ]]; then
ANTIGEN_MUTEX=false
if [[ -d /usr/local/share/antigen ]]; then
source /usr/local/share/antigen/antigen.zsh
elif [[ -d /usr/share/zsh-antigen ]]; then
source /usr/share/zsh-antigen/antigen.zsh
fi
antigen use oh-my-zsh
antigen bundle zsh-users/zsh-completions
antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle dirhistory
antigen bundle python
antigen bundle git
antigen bundle web-search
antigen bundle common-aliases
antigen bundle vi-mode
# Powerline switch
USE_POWERLINE=1
# Powerline config {{{2
if [[ $USE_POWERLINE == 1 ]]; then
DEFAULT_FOREGROUND=006
DEFAULT_BACKGROUND=235
DEFAULT_COLOR=$DEFAULT_FOREGROUND
POWERLEVEL9K_OS_ICON_FOREGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_OS_ICON_BACKGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_CONTEXT_DEFAULT_FOREGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_CONTEXT_DEFAULT_BACKGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_DIR_HOME_BACKGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_DIR_HOME_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_DIR_HOME_SUBFOLDER_BACKGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_DIR_HOME_SUBFOLDER_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_DIR_DEFAULT_BACKGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_DIR_DEFAULT_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_DIR_WRITABLE_FORBIDDEN_BACKGROUND="magenta"
POWERLEVEL9K_DIR_WRITABLE_FORBIDDEN_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_VCS_CLEAN_BACKGROUND="green"
POWERLEVEL9K_VCS_CLEAN_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_VCS_MODIFIED_BACKGROUND="yellow"
POWERLEVEL9K_VCS_MODIFIED_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND="magenta"
POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_STATUS_OK_FOREGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_STATUS_OK_BACKGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_VI_MODE_INSERT_BACKGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_VI_MODE_NORMAL_BACKGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_TIME_FOREGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_TIME_BACKGROUND="white"
POWERLEVEL9K_MODE="nerdfont-complete"
POWERLEVEL9K_SHORTEN_DIR_LENGTH=3
POWERLEVEL9K_SHORTEN_STRATEGY="truncate_middle"
POWERLEVEL9K_ALWAYS_SHOW_CONTEXT=true
POWERLEVEL9K_ALWAYS_SHOW_USER=false
POWERLEVEL9K_PROMPT_ON_NEWLINE=true
POWERLEVEL9K_RPROMPT_ON_NEWLINE=false
POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX="╭"
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="╰─\uF155 "
#POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon context dir vcs)
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon dir vcs)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status vi_mode time)
POWERLEVEL9K_CONTEXT_TEMPLATE="\uf2bd %n \uf109 %m"
POWERLEVEL9K_VI_INSERT_MODE_STRING="%F{green}\ue62b: %F{$DEFAULT_FOREGROUND}\uf044"
POWERLEVEL9K_VI_COMMAND_MODE_STRING="%F{green}\ue62b: %F{$DEFAULT_BACKGROUND}\uf085"
POWERLEVEL9K_TIME_FORMAT="%D{\uf017 %I:%M%p}"
fi
#}}}2
# Host specific config {{{2
if [[ `uname` == 'Darwin' ]]; then
antigen bundle osx
antigen bundle brew
if [[ $USE_POWERLINE == 1 ]]; then
POWERLEVEL9K_INSTALLATION_PATH=$ANTIGEN_BUNDLES/bhilburn/powerlevel9k
antigen theme bhilburn/powerlevel9k powerlevel9k
else
antigen theme apple
RPROMPT='%{$fg_bold[white]%}%m %t]-%{$fg_bold[grey]%}-.%{$reset_color%}'
fi
test -e ${HOME}/.iterm2_shell_integration.zsh && source ${HOME}/.iterm2_shell_integration.zsh
elif [[ `uname` == 'Linux' ]]; then
antigen bundle debian
antigen bundle command-not-found
if [[ $USE_POWERLINE == 1 ]]; then
POWERLEVEL9K_INSTALLATION_PATH=$ANTIGEN_BUNDLES/bhilburn/powerlevel9k
antigen theme bhilburn/powerlevel9k powerlevel9k
else
antigen theme terminalparty
RPROMPT='%{$fg_bold[white]%}%m %t]-%{$fg_bold[grey]%}-.%{$reset_color%}'
fi
fi
#}}}2
fi
#}}}
# Autosuggest
if [[ -d /usr/local/share/zsh-autosuggestions ]]; then
source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh
elif [[ -d /usr/share/zsh-autosuggestions ]]; then
source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
fi
# Syntax highlighting
if [[ -d /usr/local/share/zsh-syntax-highlighting ]]; then
source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
elif [[ -d /usr/share/zsh-syntax-highlighting ]]; then
source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
fi
# Set the PATH intelligently. {{{
pathdirs=(
~/bin
~/.iterm2
/usr/local/bin
/usr/texbin
/usr/X11/bin
/usr/X11R6/bin
/opt/local/bin
/opt/local/X11/bin
/usr/local/sbin
/usr/games
/usr/local/share/SIMH/bin
/usr/local/opt/python/libexec/bin
)
for dir in $pathdirs; do
if [ -d $dir ]; then
PATH="$dir:$PATH"
fi
done
#}}}
# Aliases
alias less='most'
alias lynx='lynx -cfg=./.lynx.cfg -lss=./.lynx.lss'
alias speedtest='curl -s
https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python'
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt autocd beep extendedglob notify
bindkey -v
export KEYTIMEOUT=1
# Manually enable menu-style completion
zstyle ':completion:*' menu select
# Functions {{{
# Mac only: open argument in new iTerm tab {{{2
if [[ `uname` == 'Darwin' ]]; then
tab () {
local cmd=""
local cdto="$PWD"
local args="$@"
if [[ ${#@} > 1 && -d "$1" ]]; then
cdto=`cd "$1"; pwd`
args="${@:2}"
elif [[ ${#@} > 1 ]]; then
args="${@:2}"
fi
if [[ -n "$args" ]]; then
cmd="; $args"
fi
local exec="cd $cdto$cmd"
osascript &>/dev/null <<EOF
tell application "iTerm"
tell current window
create tab with default profile
end tell
tell current session of current window
write text "$exec"
end tell
end tell
EOF
}
fi
#}}}2
#}}}
# On Linux hosts only
# set the console font, but only if this is a tty
#[[ ( `uname` == 'Linux' && `tty` =~ \/dev\/tty ) ]] && setfont sun12x22