# # .zshrc # # @author Billy-George Price-Sprackland # # Colors. unset LSCOLORS export CLICOLOR=1 export CLICOLOR_FORCE=1 # Don't require escaping globbing characters in zsh. unsetopt nomatch # Nicer prompt. export PS1=$'\n'"%F{green} %*%F %3~ %F{white}"$'\n'"$ " # Enable plugins. plugins=(git brew history kubectl history-substring-search) # Custom $PATH with extra locations. export PATH=/opt/homebrew/bin:$HOME/Library/Python/3.12/bin:$HOME/Library/Python/3.9/bin:/usr/local/bin:/usr/local/sbin:$HOME/bin:$HOME/.local/bin:$HOME/go/bin:/usr/local/git/bin:$HOME/.composer/vendor/bin:$PATH # Bash-style time output. export TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S' # Include alias file (if present) containing aliases for ssh, etc. if [ -f ~/.aliases ] then source ~/.aliases fi # Set architecture-specific brew share path. arch_name="$(uname -m)" if [ "${arch_name}" = "x86_64" ]; then share_path="/usr/local/share" elif [ "${arch_name}" = "arm64" ]; then share_path="/opt/homebrew/share" else echo "Unknown architecture: ${arch_name}" fi # Allow history search via up/down keys. source ${share_path}/zsh-history-substring-search/zsh-history-substring-search.zsh bindkey "^[[A" history-substring-search-up bindkey "^[[B" history-substring-search-down # Git aliases. alias gs='git status' alias gc='git commit' alias gp='git pull --rebase' alias gcam='git commit -am' alias gl='git log --graph --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset" --abbrev-commit' # Completions. autoload -Uz compinit && compinit # Case insensitive. zstyle ':completion:*' matcher-list 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]} l:|=* r:|=*' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]} l:|=* r:|=*' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]} l:|=* r:|=*' # Git upstream branch syncer. # Usage: gsync master (checks out master, pull upstream, push origin). function gsync() { if [[ ! "$1" ]] ; then echo "You must supply a branch." return 0 fi BRANCHES=$(git branch --list $1) if [ ! "$BRANCHES" ] ; then echo "Branch $1 does not exist." return 0 fi git checkout "$1" && \ git pull upstream "$1" && \ git push origin "$1" } # Tell homebrew to not autoupdate every single time I run it (just once a week). export HOMEBREW_AUTO_UPDATE_SECS=604800 # Delete a given line number in the known_hosts file. knownrm() { re='^[0-9]+$' if ! [[ $1 =~ $re ]] ; then echo "error: line number missing" >&2; else sed -i '' "$1d" ~/.ssh/known_hosts fi } # Allow Composer to use almost as much RAM as Chrome. export COMPOSER_MEMORY_LIMIT=-1 # Ask for confirmation when 'prod' is in a command string. #prod_command_trap () { # if [[ $BASH_COMMAND == *prod* ]] # then # read -p "Are you sure you want to run this command on prod [Y/n]? " -n 1 -r # if [[ $REPLY =~ ^[Yy]$ ]] # then # echo -e "\nRunning command \"$BASH_COMMAND\" \n" # else # echo -e "\nCommand was not run.\n" # return 1 # fi # fi #} #shopt -s extdebug #trap prod_command_trap DEBUG