forked from ghuntley/dotfiles-retired
-
Notifications
You must be signed in to change notification settings - Fork 0
/
prompt.zsh
108 lines (94 loc) · 2.45 KB
/
prompt.zsh
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
97
98
99
100
101
102
103
104
105
106
107
108
autoload colors && colors
# cheers, @ehrenmurdick
# http://github.com/ehrenmurdick/config/blob/master/zsh/prompt.zsh
git_branch() {
echo $(/usr/bin/git symbolic-ref HEAD 2>/dev/null | awk -F/ {'print $NF'})
}
git_dirty() {
st=$(/usr/bin/git status 2>/dev/null | tail -n 1)
if [[ $st == "" ]]
then
st=$(/usr/bin/git status 2>/dev/null | tail -n 2)
if [[ $st == "" ]]
then
echo ""
else
echo " (%{$fg_bold[red]%}$(git_prompt_info)%{$reset_color%}$(need_push))"
fi
else
if [[ $st == "nothing to commit (working directory clean)" || $st == "nothing to commit, working directory clean" || $st == "nothing to commit, working tree clean" ]]
then
echo " (%{$fg[green]%}$(git_prompt_info)%{$reset_color%}$(need_push))"
else
echo " (%{$fg_bold[red]%}$(git_prompt_info)%{$reset_color%}$(need_push))"
fi
fi
}
git_prompt_info () {
ref=$(/usr/bin/git symbolic-ref HEAD 2>/dev/null) || return
# echo "(%{\e[0;33m%}${ref#refs/heads/}%{\e[0m%})"
echo "${ref#refs/heads/}"
}
project_name () {
name=$(pwd | awk -F'projects/' '{print $2}' | awk -F/ '{print $1}')
echo $name
}
project_name_color () {
#name=$(project_name)
echo "%{\e[0;35m%}${name}%{\e[0m%}"
}
unpushed () {
/usr/bin/git cherry -v origin/$(git_branch) 2>/dev/null
}
need_push () {
if [[ $(unpushed) == "" ]]
then
echo ""
else
echo ":%{$fg_bold[magenta]%}unpushed%{$reset_color%}"
fi
}
hostname_prompt(){
echo "%{$fg[yellow]%}$(hostname)%{$reset_color%}"
}
username_prompt(){
echo "%{$fg[magenta]%}%n%{$reset_color%}"
}
# This keeps the number of todos always available the right hand side of my
# command line. I filter it to only count those tagged as "+next", so it's more
# of a motivation to clear out the list.
todo(){
if $(which todo.sh &> /dev/null)
then
num=$(echo $(todo.sh ls +next | wc -l))
let todos=num-2
if [ $todos != 0 ]
then
echo "$todos"
else
echo ""
fi
else
echo ""
fi
}
directory_name(){
echo "%{$fg[cyan]%}%1/%\/%{$reset_color%}"
}
emoji() {
current_folder=${PWD##*/}
if [[ $current_folder == 'love' && $platform == 'osx' ]]
then
echo "❤️ "
else
echo "$"
fi
}
export PROMPT=$'$(username_prompt)@$(hostname_prompt):$(directory_name)$(project_name_color)$(git_dirty)$(emoji) '
set_prompt () {
export RPROMPT="%{$fg_bold[grey]%}$(todo)%{$reset_color%}"
}
precmd() {
title "zsh" "$USER@%m" "%55<...<%~"
set_prompt
}