# 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 <