all repos — archive/dotfiles @ 4f655369e8e87b73e2a932091b5db84c81e7736a

Superseded by nixfiles

tag-zsh/config/zsh/zshrc (view raw)

# -*- mode: sh; -*-
source $ZPLUG_HOME/init.zsh

zplug "zsh-users/zsh-completions"
zplug "Tarrasch/zsh-autoenv", as:plugin
zplug "clvv/fasd", hook-build:"PREFIX=$HOME make install"
zplug "caarlos0/zsh-open-pr", as:plugin
if [[ -n $commands[nix-env] ]]
then
  zplug "spwhitt/nix-zsh-completions", as:plugin
  fpath=($fpath $ZPLUG_REPOS/spwhitt/nix-zsh-completions)
fi

zplug "gerges/oh-my-zsh-jira-plus", as:plugin, if:"[[ ${(SN)HOST%spotcap} ]]"
zplug "lukechilds/zsh-better-npm-completion", if:"[[ -n $commands[npm] ]]", defer:2
zplug "hlissner/zsh-autopair", defer:2

HISTSIZE=3000
SAVEHIST=10000
HISTFILE=${XDG_CACHE_HOME:=$HOME/.cache}/zsh/history

WORDCHARS=${${WORDCHARS//[-.]}//[\/]}

if [[ ${path[(I)$HOME/bin ]} ]]
then
  path+=($HOME/bin)
fi

if [[ ${path[(I)$HOME/.local/bin ]} ]]
then
  path+=($HOME/.local/bin)
fi

if [[ -d /opt/local/share/zsh/site-functions ]]
then
  fpath+=(/opt/local/share/zsh/site-functions)
fi

export EDITOR=emacsclient
alias ec=emacsclient
alias open-project=projectile
_emacs_function () {
  emacsclient -e "($1 \"$2\")" > /dev/null
}
projectile () {
  _emacs_function projectile-switch-project-by-name ${1:-$PWD}
}
yarn () {
  PREFIX=$HOME/.local command yarn "$@"
}

ls='\ls'
gnu_ls_options="-v --group-directories-first --color=auto"
gnu_ls_isodate="--time-style=long-iso"
bsd_ls_options="-p"
bsd_ls_isodate="-D '%F %k:%M'"

case $os in
  darwin)
    if [[ -n $commands[gls] ]]
    then
      ls='\gls'
      ls_options=$gnu_ls_options
      ls_isodate=$gnu_ls_isodate
    else
      ls_options=$bsd_ls_options
      ls_isodate=$bsd_ls_isodate
    fi
    ;;
  freebsd)
    ls_options=$bsd_ls_options
    ls_isodate=$bsd_ls_isodate
    ;;
  linux)
    ls_options=$gnu_ls_options
    ls_isodate=$gnu_ls_isodate
    ;;
esac
alias l="${ls} ${ls_options} -Bp"
alias l1="${ls} ${ls_options} -1"
alias ls="${ls} ${ls_options} -hF"
alias la="${ls} ${ls_options} -hA"
alias ll="${ls} ${ls_options} ${ls_isodate} -hl"
alias lal="ll -A"
alias lla="lal"
alias llr="ll -t"

zmodload zsh/terminfo

bindkey '\e[3~' delete-char

bindkey '\C-hd' describe-key-briefly

backward-argument () {
  local WORDCHARS="\!\`~#@$%^&*()-_=+[{]}\|;:,<.>/?\'\""
  zle backward-word
}

forward-argument () {
  local WORDCHARS="\!\`~#@$%^&*()-_=+[{]}\|;:,<.>/?\'\""
  zle forward-word
}

kill-argument () {
  local WORDCHARS="\!\`~#@$%^&*()-_=+[{]}\|;:,<.>/?\'\""
  zle backward-argument
  zle kill-word
}

zle -N backward-argument
zle -N forward-argument
zle -N kill-argument
bindkey '\e^b' backward-argument
bindkey '\e^f' forward-argument
bindkey '\e^k' kill-argument

ds () {
  du -hd1 $1 | sort -h
}

zle -C hist-complete complete-word _generic
zstyle ':completion:hist-complete:*' completer _history
bindkey '\e ' hist-complete

zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' '+m:{A-Z}={a-z}'
zstyle ':completion:*' completer _expand _complete _match

if [[ -z $SSH_AUTH_SOCK && $commands[ssh-agent] ]]
then
  eval $(ssh-agent)
fi

if zplug check Tarrasch/zsh-autoenv
then
  AUTOENV_FILE_ENTER=.envrc
  AUTOENV_HANDLE_LEAVE=1
  AUTOENV_LOOK_UPWARDS=1
fi

# Then, source plugins and add commands to $PATH
zplug load

# General configuration
setopt auto_cd          # Change directories without `cd`

if zplug check zsh-users/zsh-completions
then
  autoload -U compinit && compinit
fi

if [[ -n $commands[hub] ]]
then
  alias git=hub
  alias gh=hub
fi

if [[ -n $commands[lunchy] ]]
then
  LUNCHY_DIR=$(dirname $(gem which lunchy))/../extras
  if [ -f $LUNCHY_DIR/lunchy-completion.zsh ]; then
    . $LUNCHY_DIR/lunchy-completion.zsh
  fi
fi

if [[ $TERM == "dumb" ]]
then
  unsetopt zle
  PROMPT="> "
else
  unset RPROMPT
  # show username@host if logged in through SSH
  [[ "$SSH_CONNECTION" != '' ]] && prompt_pure_username=' %F{242}%n@%m%f'

  # show username@host if root, with username in white
  [[ $UID -eq 0 ]] && prompt_pure_username=' %F{white}%n%f%F{242}@%m%f'

  setopt prompt_subst
  setopt prompt_cr
  PROMPT='%F{blue}%~%f${prompt_pure_username}
%(?.%F{magenta}.%F{red})>%f '

  ## From https://github.com/robbyrussell/oh-my-zsh/blob/71deb74552d54630d99ae1db3647ebed7b3bc735/lib/termsupport.zsh

  # Keep Apple Terminal.app's current working directory updated
  # Based on this answer: http://superuser.com/a/315029
  # With extra fixes to handle multibyte chars and non-UTF-8 locales

  if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then
    # Emits the control sequence to notify Terminal.app of the cwd
    # Identifies the directory using a file: URI scheme, including
    # the host name to disambiguate local vs. remote paths.
    function update_terminalapp_cwd() {
      emulate -L zsh

      # Percent-encode the pathname.
      # Percent-encode the pathname.
      local URL_PATH=''
      {
        # Use LC_CTYPE=C to process text byte-by-byte.
        local i ch hexch LC_CTYPE=C
        for ((i = 1; i <= ${#PWD}; ++i)); do
          ch="$PWD[i]"
          if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
            URL_PATH+="$ch"
          else
            hexch=$(printf "%02X" "'$ch")
            URL_PATH+="%$hexch"
          fi
        done
      }
      [[ $? != 0 ]] && return 1

      printf '\e]7;%s\a' "file://$HOST$URL_PATH"
    }

    # Use a precmd hook instead of a chpwd hook to avoid contaminating output
    precmd_functions+=(update_terminalapp_cwd)
    # Run once to get initial cwd set
    update_terminalapp_cwd
  fi

  function set_window_title { printf '\e]2;%s\a' "$1" }

  function update_window_title {
    if [[ -n "$SSH_CONNECTION" || $UID -eq 0 ]]
    then
      set_window_title "$USER@$HOST"
    else
      set_window_title ""
    fi
  }
  precmd_functions+=(update_window_title)
fi

if zplug check clvv/fasd
then
  if [[ -n $commands[fasd] ]]
  then
    _FASD_DATA="$HOME/.cache/zsh/fasd-data"
    source =fasd

    fasd_cache="$HOME/.fasd-init-zsh"
    if [ "$(command -v fasd)" -nt "$fasd_cache" -o ! -s "$fasd_cache" ]; then
      fasd --init posix-alias zsh-hook zsh-ccomp zsh-ccomp-install >| "$fasd_cache"
    fi
    source "$fasd_cache"
    unset fasd_cache
  else
    echo "no fasd"
  fi
fi

unsetopt flow_control       # Let me use ^S and ^Q