Last active
March 9, 2023 23:02
-
-
Save ThinkThoughtThunk/7e3038201a40993e07a9a29bffae33f6 to your computer and use it in GitHub Desktop.
My .zshrc - robbyrussell/agnoster themes and terminal revamp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ---------------------------------------------------------------------------- # | |
# 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