From 9b0058f2267752cbb7c833ef97a0c53fb914494a Mon Sep 17 00:00:00 2001 From: opal Date: Mon, 23 May 2022 11:35:02 -0700 Subject: [PATCH] De-tangled .zshrc, added new prompt. --- .config/zsh/.zprofile | 4 -- .config/zsh/.zshrc | 121 ++++++++++++++++++++++++++++++--- .config/zsh/.zshenv => .zshenv | 0 3 files changed, 112 insertions(+), 13 deletions(-) rename .config/zsh/.zshenv => .zshenv (100%) diff --git a/.config/zsh/.zprofile b/.config/zsh/.zprofile index 3211b98..011caba 100644 --- a/.config/zsh/.zprofile +++ b/.config/zsh/.zprofile @@ -7,13 +7,9 @@ # Only vars needed by external commands should be exported. # Note that you can export vars w/out assigning a value to them. -export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/keyring/ssh" export XDG_CONFIG_HOME=~/.config export XDG_CACHE_HOME=~/.cache export XDG_DATA_HOME=~/.local/share export XDG_STATE_HOME=~/.config/zsh export EDITOR=vim export VISUAL=vim -export XDG_CURRENT_DESKTOP=Unity -eval $(gnome-keyring-daemon --start --components=ssh) -export SSH_AUTH_SOCK diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc index 7fdc053..29dfa40 100644 --- a/.config/zsh/.zshrc +++ b/.config/zsh/.zshrc @@ -1,11 +1,5 @@ #### ~~~~ General ~~~~ ##### -export ZSH="$XDG_CONFIG_HOME/oh-my-zsh" HISTFILE=$XDG_CONFIG_HOME/zsh/.history -ZSH_THEME="mrtazz" -DISABLE_AUTO_UPDATE="true" -ENABLE_CORRECTION="true" -plugins=(git) -source $ZSH/oh-my-zsh.sh # This has to stay below plugins. #### ~~~~ Path Additions ~~~~ ##### export PATH=/home/opal/scripts:$PATH # Scripts @@ -15,11 +9,120 @@ export PATH=/home/opal/.local/bin:$PATH # .local path #### ~~~~ Locale ~~~~ ##### export LANG=en_US.UTF-8 -#### ~~~ Programs ~~~~ #### -pfetch - # #### ~~~~ Import ~~~~ ##### ALIAS_LOCATION="$XDG_CONFIG_HOME/zsh/zsh_aliases" FUNCTION_LOCATION="$XDG_CONFIG_HOME/zsh/zsh_functions" . $ALIAS_LOCATION . $FUNCTION_LOCATION + +#### ~~~~ Prompt ~~~~ #### +git_prompt_status() { + local INDEX STATUS + + INDEX=$(command git status --porcelain -b 2> /dev/null) + + STATUS="" + + if $(echo "$INDEX" | command grep -E '^\?\? ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$STATUS" + fi + + if $(echo "$INDEX" | grep '^A ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" + elif $(echo "$INDEX" | grep '^M ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" + elif $(echo "$INDEX" | grep '^MM ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" + fi + + if $(echo "$INDEX" | grep '^ M ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" + elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" + elif $(echo "$INDEX" | grep '^MM ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" + elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" + fi + + if $(echo "$INDEX" | grep '^R ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_RENAMED$STATUS" + fi + + if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" + elif $(echo "$INDEX" | grep '^D ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" + elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" + fi + + if $(command git rev-parse --verify refs/stash >/dev/null 2>&1); then + STATUS="$ZSH_THEME_GIT_PROMPT_STASHED$STATUS" + fi + + if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$STATUS" + fi + + if $(echo "$INDEX" | grep '^## [^ ]\+ .*ahead' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_AHEAD$STATUS" + fi + + if $(echo "$INDEX" | grep '^## [^ ]\+ .*behind' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_BEHIND$STATUS" + fi + + if $(echo "$INDEX" | grep '^## [^ ]\+ .*diverged' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_DIVERGED$STATUS" + fi + + if [[ ! -z "$STATUS" ]]; then + echo " [ $STATUS]" + fi +} + + +prompt_git_branch() { + autoload -Uz vcs_info + precmd_vcs_info() { vcs_info } + precmd_functions+=( precmd_vcs_info ) + setopt prompt_subst + zstyle ':vcs_info:git:*' formats '%b' +} + +prompt_git_info() { + [ ! -z "$vcs_info_msg_0_" ] && echo "$ZSH_THEME_GIT_PROMPT_PREFIX%F{white}$vcs_info_msg_0_%f$ZSH_THEME_GIT_PROMPT_SUFFIX" +} + +prompt_purity_precmd() { + # Pass a line before each prompt + print -P '' +} + +prompt_purification_setup() { + # Display git branch + + autoload -Uz add-zsh-hook + add-zsh-hook precmd prompt_purity_precmd + + ZSH_THEME_GIT_PROMPT_PREFIX=" %F{red}λ%f:" + ZSH_THEME_GIT_PROMPT_DIRTY="" + ZSH_THEME_GIT_PROMPT_CLEAN="" + + ZSH_THEME_GIT_PROMPT_ADDED="%F{green}+%f " + ZSH_THEME_GIT_PROMPT_MODIFIED="%F{blue}%f " + ZSH_THEME_GIT_PROMPT_DELETED="%F{red}x%f " + ZSH_THEME_GIT_PROMPT_RENAMED="%F{magenta}➜%f " + ZSH_THEME_GIT_PROMPT_UNMERGED="%F{yellow}═%f " + ZSH_THEME_GIT_PROMPT_UNTRACKED="%F{white}%f " + ZSH_THEME_GIT_PROMPT_STASHED="%B%F{red}%f%b " + ZSH_THEME_GIT_PROMPT_BEHIND="%B%F{red}%f%b " + ZSH_THEME_GIT_PROMPT_AHEAD="%B%F{green}%f%b " + + prompt_git_branch + RPROMPT='$(prompt_git_info) $(git_prompt_status)' + PROMPT=$'%F{white}%~ %B%F{blue}>%f%b ' +} + +prompt_purification_setup diff --git a/.config/zsh/.zshenv b/.zshenv similarity index 100% rename from .config/zsh/.zshenv rename to .zshenv