Skip to content

Instantly share code, notes, and snippets.

@ThinkThoughtThunk
Last active March 9, 2023 23:02
Show Gist options
  • Save ThinkThoughtThunk/7e3038201a40993e07a9a29bffae33f6 to your computer and use it in GitHub Desktop.
Save ThinkThoughtThunk/7e3038201a40993e07a9a29bffae33f6 to your computer and use it in GitHub Desktop.
My .zshrc - robbyrussell/agnoster themes and terminal revamp
# ---------------------------------------------------------------------------- #
# Theme / Settings #
# ---------------------------------------------------------------------------- #
ZSH_THEME="robbyrussell"
ENABLE_AUTOCORRECTION="true"
COMPLETION_WAITING_DOTS="true"
DISABLE_UNTRACKED_FILES_DIRTY="true"
# ---------------------------------------------------------------------------- #
# General Exports and Variables #
# ---------------------------------------------------------------------------- #
export ZSH="$HOME/.oh-my-zsh"
export LANG=en_US.UTF-8
export WORKSPACE="$HOME/workspace"
export PERSONAL="$WORKSPACE/personal"
export NVM_DIR="$HOME/.nvm"
export PYTHONSTARTUP="$HOME/.python_startup.py"
export UPDATE_ZSH_DAYS=13
export PYENV_ROOT="$HOME/.pyenv"
# ---------------------------------------------------------------------------- #
# Homebrew #
# ---------------------------------------------------------------------------- #
BREW="/opt/homebrew"
BREW_SHARE="$BREW/share"
export HOMEBREW_AUTO_UPDATE_SECS="345600" # 2 days
export HOMEBREW_AUTO_CLEANUP_SECS="345600" # 2 days
eval "$(/opt/homebrew/bin/brew shellenv)"
# ---------------------------------------------------------------------------- #
# Aliases #
# ---------------------------------------------------------------------------- #
alias a.="git add --all && git commit -m"
alias co="git checkout"
alias cob="git checkout -b"
alias gitc="cz commit"
alias gitd="git diff"
alias hs="history | grep"
alias ip="ipconfig getifaddr en0"
alias mkcd="go() { mkdir -p "$1"; cd "$1" }; go "
alias nis="npm run i --save "
alias nisd="npm run i --save-dev "
alias pip="pip3"
alias python="python3"
# ---------------------------------------------------------------------------- #
# Plugins #
# ---------------------------------------------------------------------------- #
plugins=(
brew
colorize
forklift
git
history
macos
z
zsh-autosuggestions
zsh-completions
zsh-syntax-highlighting
)
# ---------------------------------------------------------------------------- #
# Highlighters #
# ---------------------------------------------------------------------------- #
export ZSH_HIGHLIGHT_HIGHLIGHTERS_DIR="$BREW_SHARE/zsh-syntax-highlighting/highlighters"
ZSH_HIGHLIGHT_HIGHLIGHTERS=(
main
brackets
pattern
regexp
cursor
root
line
)
# ---------------------------------------------------------------------------- #
# Setup Virtual Environments #
# ---------------------------------------------------------------------------- #
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
export PATH=$HOME/bin:/usr/local/bin:$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin:$NVM_DIR
# ---------------------------------------------------------------------------- #
# Run Shell Files (if they exist) #
# ---------------------------------------------------------------------------- #
source_commands() {
GCLOUD_SDK="$WORK/google-cloud-sdk" # Work
NVM="$BREW/opt/nvm"
local run_files=(
"$HOME/.iterm2_shell_integration.zsh"
"$NVM/nvm.sh"
"$ZSH/oh-my-zsh.sh"
"$HOME/.fzf.zsh"
"$BREW_SHARE/zsh-autosuggestions/zsh-autosuggestions.zsh"
"$BREW_SHARE/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
)
local missing=()
for file in ${files[@]:1}; do
if [[ ! -e $file ]]; then missing+=" $file"; fi
if [[ -e $file ]]; then source $file; fi
done
if [[ ! -z ${missing} ]]; then
echo "Not found: ($missing )"
fi
}
source_commands
# ---------------------------------------------------------------------------- #
# Agnoster #
# ---------------------------------------------------------------------------- #
# agnoster's Theme - https://gist.github.com/3712874
# A Powerline-inspired theme for ZSH
#
# # README
#
# In order for this theme to render correctly, you will need a
# [Powerline-patched font](https://gist.github.com/1595572).
#
# In addition, I recommend the
# [Solarized theme](https://github.com/altercation/solarized/) and, if you're
# using it on Mac OS X, [iTerm 2](http://www.iterm2.com/) over Terminal.app -
# it has significantly better color fidelity.
#
# # Goals
#
# The aim of this theme is to only show you *relevant* information. Like most
# prompts, it will only show git information when in a git working directory.
# However, it goes a step further: everything from the current user and
# hostname to whether the last call exited with an error to whether background
# jobs are running in this shell will all be displayed automatically when
# appropriate.
# --------------- Segments of the prompt -------------- #
typeset -aHg AGNOSTER_PROMPT_SEGMENTS=(
prompt_status
prompt_context
prompt_virtualenv
prompt_dir
prompt_git
prompt_end
)
# ----------------- Segment drawing ----------------- #
# A few utility functions to make it easy and re-usable
# to draw segmented prompts
CURRENT_BG='NONE'
if [[ -z "$PRIMARY_FG" ]]; then
PRIMARY_FG=black
fi
# Characters
SEGMENT_SEPARATOR="\ue0b0"
PLUSMINUS="\u00b1"
BRANCH="\ue0a0"
DETACHED="\u27a6"
CROSS="\u2718"
LIGHTNING="\u26a1"
GEAR="\u2699"
# ------------------ Begin a segment --------------------- #
# Takes two arguments, background and foreground. Both can be omitted,
# rendering default background/foreground.
prompt_segment() {
local bg fg
[[ -n $1 ]] && bg="%K{$1}" || bg="%k"
[[ -n $2 ]] && fg="%F{$2}" || fg="%f"
if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then
print -n "%{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%}"
else
print -n "%{$bg%}%{$fg%}"
fi
CURRENT_BG=$1
[[ -n $3 ]] && print -n $3
}
# --------------------------- End the prompt ---------------- #
# Closes any open segments
prompt_end() {
if [[ -n $CURRENT_BG ]]; then
print -n "%{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR"
else
print -n "%{%k%}"
fi
print -n "%{%f%}"
CURRENT_BG=''
}
# ------------ Prompt components ---------------------------- #
# Each component will draw itself, and hide itself if no information
# needs to be shown Context: user@hostname (who am I and where am I)
prompt_context() {
local user=$(whoami)
if [[ "$user" != "$DEFAULT_USER" || -n "$SSH_CONNECTION" ]]; then
prompt_segment
fi
}
# -------- Git: branch/detached head, dirty status ----------- #
prompt_git() {
local color ref
is_dirty() {
test -n "$(git status --porcelain --ignore-submodules)"
}
ref="$vcs_info_msg_0_"
if [[ -n "$ref" ]]; then
if is_dirty; then
color=yellow
ref="${ref} $PLUSMINUS"
else
color=green
ref="${ref} "
fi
if [[ "${ref/.../}" == "$ref" ]]; then
ref="$BRANCH $ref"
else
ref="$DETACHED ${ref/.../}"
fi
prompt_segment $color $PRIMARY_FG
print -n " $ref"
fi
}
# ------------- Dir: current working directory ----------------- #
prompt_dir() {
prompt_segment blue $PRIMARY_FG ' %~'
}
# ---------------------------- Status: ------------------------ #
# - was there an error
# - am I root
# - are there background jobs?
prompt_status() {
local symbols
symbols=()
[[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}$CROSS"
[[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}$LIGHTNING"
[[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$GEAR"
[[ -n "$symbols" ]] && prompt_segment $PRIMARY_FG default " $symbols "
}
# ----------- Display current virtual environment -------------- #
prompt_virtualenv() {
if [[ -n $VIRTUAL_ENV ]]; then
color=cyan
prompt_segment
print -Pn " $(basename $VIRTUAL_ENV) "
fi
}
# ------------------------- Main prompt ---------------------------- #
prompt_agnoster_main() {
RETVAL=$?
CURRENT_BG='NONE'
for prompt_segment in "${AGNOSTER_PROMPT_SEGMENTS[@]}"; do
[[ -n $prompt_segment ]] && $prompt_segment $PRIMARY_FG default
done
}
prompt_agnoster_precmd() {
vcs_info
PROMPT='%{%f%b%k%}$(prompt_agnoster_main) '
}
prompt_agnoster_setup() {
autoload -Uz add-zsh-hook
autoload -Uz vcs_info
prompt_opts=(cr subst percent)
add-zsh-hook precmd prompt_agnoster_precmd
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:*' check-for-changes false
zstyle ':vcs_info:git*' formats '%b'
zstyle ':vcs_info:git*' actionformats '%b (%a)'
}
# ----------------- Run the setup function ------------------------ #
prompt_agnoster_setup "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment