#!/bin/zsh gitInfo="" dirInfo="" sessions="" gcloudProjectId="" if [ -x "$(command -v tmux)" ]; then hasTmux=true fi gitInfo () { gitStatus=$(git status --porcelain 2>/dev/null) if [[ $? -ne 0 ]]; then gitInfo="" return fi local branchColor="green" local branchName=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) if [[ $branchName != "master" && $branchName != "main" && $branchName != "trunk" ]]; then branchColor="yellow" elif [[ $branchName == "HEAD" ]]; then branchColor="red" fi termWidth=$(tput cols) if (( $termWidth < 100 && $#branchName > 9 )); then # NOTE: Work fix. Long branchnames. branchName="${branchName:0:8}…" fi local dirtyFlag="" if [[ ! -z $gitStatus ]]; then dirtyFlag="%F{yellow}‼%f" fi gitInfo="%B (%F{$branchColor}$branchName%f)%b$dirtyFlag" } dirCount() { local count="$(dirs -p | wc -l | tr -d ' ')" dirInfo=$([[ $count -gt 1 ]] && echo " $count") } tmuxSessionCount() { if [[ -v hasTmux ]]; then local count=$(("$(tmux list-sessions -F \#{session_name} 2>/dev/null | wc -l)")) sessions=$([[ $count -gt 0 ]] && echo " %B%F{cyan}⇅$count%f%b") else sessions=$(echo " %B%F{cyan}⇅%B%F{red}err%f%b") fi } if [[ ! -v PROMPT_COLOR ]]; then PROMPT_COLOR="blue" fi hostname="%B%F{$PROMPT_COLOR}%m%f%b" directory="%F{cyan}%1~%f" retVal="%(?:%B%F{green}✓:%B%F{red}✖%?)%f%b" jobs="%(1j: %B%F{yellow}⚠%j:)%f%b" os='' un=`uname -sr` if [[ $un =~ 'Linux' ]]; then if [[ $un =~ 'arch' ]]; then # ;D os='' else os='' fi elif [[ $un =~ 'BSD' ]]; then os='' elif [[ $un =~ 'Darwin' ]]; then os='' fi precmd_functions+=( gitInfo dirCount tmuxSessionCount ) setopt prompt_subst export PROMPT='($os$hostname:$directory)[$retVal$jobs$dirInfo$sessions]$gitInfo ' export RPROMPT=''