mirror of
				https://github.com/ItsDrike/dotfiles.git
				synced 2025-11-04 09:16:36 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env zsh
 | 
						|
 | 
						|
# hide EOL sign ('%')
 | 
						|
export PROMPT_EOL_MARK=""
 | 
						|
 | 
						|
# TTY (pure linux) terminal only has 8-bit color support
 | 
						|
# (unless you change it in kernel), respect this and downgrade
 | 
						|
# the color scheme accordingly (it won't look best, but it's
 | 
						|
# still better than no colors)
 | 
						|
if [ $TERM = "linux" ]; then
 | 
						|
	GREEN="%F{002}"
 | 
						|
	RED="%F{001}"
 | 
						|
	ORANGE="%F{003}"
 | 
						|
	BLUE="%F{004}"
 | 
						|
	LBLUE="%F{006}"
 | 
						|
	PURPLE="%F{005}"
 | 
						|
else
 | 
						|
	GREEN="%F{047}"
 | 
						|
	RED="%F{196}"
 | 
						|
	ORANGE="%F{214}"
 | 
						|
	BLUE="%F{027}"
 | 
						|
	LBLUE="%F{075}"
 | 
						|
	PURPLE="%F{105}"
 | 
						|
fi
 | 
						|
RESET="%f"
 | 
						|
 | 
						|
# Once we are too deep in the filestructure, we can usually afford to shorten
 | 
						|
# the whole working directory and only print something like ~/.../dir3/dir4/dir5
 | 
						|
# instead of ~/dir1/dir2/dir3/dir4/dir5. If this isn't desired, set this to 0
 | 
						|
USE_SHORTENED_WORKDIR=1
 | 
						|
 | 
						|
# Signals git status of CWD repository (if any)
 | 
						|
git_prompt() {
 | 
						|
    ref=$(command git symbolic-ref HEAD 2> /dev/null) || ref=$(command git rev-parse --short HEAD 2> /dev/null) || return 0
 | 
						|
    echo -n " $ORANGE${ref#refs/heads/}"
 | 
						|
 | 
						|
    if [ ! -z "$(git status --short)" ]; then
 | 
						|
        echo "$RED+"
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
# Adds @chroot or @ssh
 | 
						|
foreign_prompt() {
 | 
						|
	if [ "$(awk '$5=="/" {print $1}' </proc/1/mountinfo)" != "$(awk '$5=="/" {print $1}' </proc/$$/mountinfo)" ]; then
 | 
						|
		echo -n "@${ORANGE}chroot"
 | 
						|
	elif [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
 | 
						|
		echo -n "@${ORANGE}ssh"
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
# Prints appropriate working directory
 | 
						|
working_directory() {
 | 
						|
	# By default up to 5 directories will be tolerated before shortening
 | 
						|
	# After we surpass that, first directory (or ~) will be printed together with last 3
 | 
						|
	# This feature uses special symbol '…', but this isn't aviable when in TTY. Because
 | 
						|
	# of this, when we are in TTY, we fall back to longer '...'
 | 
						|
 | 
						|
	if [ $USE_SHORTENED_WORKDIR != 1 ]; then
 | 
						|
		echo -n " $BLUE$~"
 | 
						|
	elif [ $TERM = "linux" ]; then
 | 
						|
		echo -n " $BLUE%(5~|%-1~/.../%3~|%4~)"
 | 
						|
	else
 | 
						|
		echo -n " $BLUE%(5~|%-1~/…/%3~|%4~)"
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
setopt promptsubst  # enable command substitution in prompt
 | 
						|
 | 
						|
# Primary Prompt
 | 
						|
[ "$EUID" -eq 0 ] && PS1="$RED%n$RESET" || PS1="$GREEN%n$RESET" # user
 | 
						|
PS1+="$(foreign_prompt)"
 | 
						|
PS1+="\$(git_prompt)"
 | 
						|
PS1+="$(working_directory)"
 | 
						|
PS1+=" $PURPLE%(!.#.»)$RESET " # Final symbol (# or »)
 | 
						|
 | 
						|
# Next line prompt
 | 
						|
PS2="$RED\ $RESET"
 | 
						|
 | 
						|
# Right side prompt (on error)
 | 
						|
RPS1="%(?..$RED%? ↵$RESET)"
 | 
						|
 | 
						|
 |