summaryrefslogtreecommitdiff
path: root/.zsh/homelander.zsh
blob: 25c9b521634540ef9f21a90df4e287bd1654f196 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
HL_PRECMD_LEFT=' '
HL_PRECMD_RIGHT=''
HL_USER_LEFT=''
HL_USER_RIGHT=''
HL_CLOCK_LEFT=''
HL_CLOCK_RIGHT=''
HL_REPO=''
HL_PUSH='↑'
HL_PULL='↓'
HL_CHANGES=''
HL_PRECURSOR=''

HL_PROMPT_FG=223
HL_PROMPT_BG=0
HL_USER_FG=223
HL_USER_BG=66
HL_USER_NOPERMS=160
HL_CLOCK_FG=214
HL_CLOCK_BG=0

hl_colored_echo_def() {
	hl_colored_echo $HL_PROMPT_FG $HL_PROMPT_BG $1
}

hl_colored_echo() {
	echo -en "%F{$1}%K{$2}$3%k%f"
}

hl_user() {
	hl_colored_echo $HL_USER_BG $HL_PROMPT_BG $HL_USER_LEFT

	__user="$USER"
	[ ! -w . ] && hl_colored_echo $HL_USER_NOPERMS $HL_USER_BG $__user \
	           || hl_colored_echo $HL_USER_FG      $HL_USER_BG $__user

	hl_colored_echo $HL_USER_BG $HL_PROMPT_BG $HL_USER_RIGHT
}

hl_time() {
	hl_colored_echo $HL_CLOCK_FG $HL_CLOCK_BG "$HL_CLOCK_LEFT$(date +%R)$HL_CLOCK_RIGHT"
}

hl_precursor() {
	__body=$HL_PRECURSOR
	if git rev-parse --git-dir > /dev/null 2>&1; then
		__gitstatus="$(git status -uno)"
		if echo $__gitstatus | grep -q 'behind' > /dev/null 2>&1; then
			__body=$HL_PULL
		elif echo $__gitstatus | grep -q 'ahead' > /dev/null 2>&1; then
			__body=$HL_PUSH
		elif echo $__gitstatus | grep -q 'changes' > /dev/null 2>&1; then
			__body=$HL_CHANGES
		else
			__body=$HL_REPO
		fi
	fi

	echo -en "$__body"
}

# user 12:45 >
# user - white on blue - on machine
#      - white on green - ssh
#      - red on * - no write permissions
# precursor - > - default
#           -  - git repo
#           - ↑ - unpushed changes
#           - ↓ - unpulled changes
#           -  - unstaged changes
#           - colored red - no write permissions

hl_precmd() {
	__exitcode="$?"

	if [ "$_print_directory" -ne 0 ] || [ "$__exitcode" -ne 0 ]; then
		[ "$__exitcode" -ne 0 ] && hl_colored_echo $HL_USER_NOPERMS $HL_PROMPT_BG $HL_PRECMD_LEFT \
		                        || hl_colored_echo $HL_USER_BG      $HL_PROMPT_BG $HL_PRECMD_LEFT

		[ "$__exitcode" -ne 0 ]       && hl_colored_echo $HL_PROMPT_FG $HL_USER_NOPERMS " $__exitcode "
		[ "$_print_directory" -ne 0 ] && hl_colored_echo $HL_USER_FG   $HL_USER_BG      " $PWD"

		[ "$_print_directory" -ne 0 ] && hl_colored_echo $HL_USER_BG      $HL_PROMPT_BG "$HL_PRECMD_RIGHT\n" \
		                              || hl_colored_echo $HL_USER_NOPERMS $HL_PROMPT_BG "$HL_PRECMD_RIGHT\n"
	fi
}

chpwd() {
	_print_directory=1
}

preexec() {
	_print_directory=0
}

setopt prompt_subst
export PROMPT='$(hl_precmd)%F{$HL_PROMPT_FG}$(hl_user) $(hl_time) $(hl_precursor) %f'