forked from matthewmcvickar/dotfiles
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.bash_prompt
106 lines (91 loc) · 3.16 KB
/
.bash_prompt
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
# @gf3's Sexy Bash Prompt, inspired by “Extravagant Zsh Prompt”
# Shamelessly copied from https://github.com/gf3/dotfiles
default_username='matthewmcvickar'
if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then
export TERM=gnome-256color
elif infocmp xterm-256color >/dev/null 2>&1; then
export TERM=xterm-256color
fi
if tput setaf 1 &> /dev/null; then
tput sgr0
if [[ $(tput colors) -ge 256 ]] 2>/dev/null; then
MAGENTA=$(tput setaf 9)
ORANGE=$(tput setaf 172)
GREEN=$(tput setaf 190)
PURPLE=$(tput setaf 141)
WHITE=$(tput setaf 0)
else
MAGENTA=$(tput setaf 5)
ORANGE=$(tput setaf 4)
GREEN=$(tput setaf 2)
PURPLE=$(tput setaf 1)
WHITE=$(tput setaf 7)
fi
BOLD=$(tput bold)
RESET=$(tput sgr0)
else
MAGENTA="\033[1;31m"
ORANGE="\033[1;33m"
GREEN="\033[1;32m"
PURPLE="\033[1;35m"
WHITE="\033[1;37m"
BOLD=""
RESET="\033[m"
fi
export MAGENTA
export ORANGE
export GREEN
export PURPLE
export WHITE
export BOLD
export RESET
function parse_git_dirty() {
git diff --quiet --ignore-submodules HEAD 2>/dev/null; [ $? -eq 1 ] && echo '❗'
}
function parse_git_untracked() {
number_of_untracked_files=$(git status --porcelain 2>/dev/null | grep "^??" | wc -l)
if [ $number_of_untracked_files != '0' ]; then echo -n ' +' && git status --porcelain 2>/dev/null | grep "^??" | wc -l | awk '{ print $1 }'; fi
}
function parse_git_branch() {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1$(parse_git_dirty) ${WHITE}$(parse_git_untracked)/"
}
# Only show username/host if not default.
function usernamehost() {
if [ $USER != $default_username ]; then echo "${MAGENTA}$USER ${WHITE}at ${ORANGE}$HOSTNAME $WHITEin "; fi
}
# Get the current phase of the moon for use as prompt
# Adapted from: http://wan.pengganas.net/entry/calculating-phase-of-moon-in-ruby
function moonphase() {
/usr/bin/env ruby <<-EORUBY
# Convert a date to Julian.
def julian(year, month, day)
a = (14-month)/12
y = year+4800-a
m = (12*a)-3+month
return day + (153*m+2)/5 + (365*y) + y/4 - y/100 + y/400 - 32045
end
# Define the phases of the moon.
def phase(year, month, day)
p = (julian(year, month, day) - julian(2000, 1, 6)) % 29.530588853
if p < 1.84566 then return "🌑" # new
elsif p < 5.53699 then return "🌒" # waxing crescent
elsif p < 9.22831 then return "🌓" # first quarter
elsif p < 12.91963 then return "🌔" # waxing gibbous
elsif p < 16.61096 then return "🌕" # full
elsif p < 20.30228 then return "🌖" # waning gibbous
elsif p < 23.99361 then return "🌗" # last quarter
elsif p < 27.68493 then return "🌘" # waning crescent
else return "🌑" # new
end
end
# Get today's phase.
today = Time.new
print "#{phase(today.year, today.month, today.day)}"
EORUBY
}
function shellprompt() {
echo "❯ "
# echo "$(moonphase) "
# Some other options: › » ❯ ➜ ⤇ ➨ ➽ ➞ ➙ → ↳ ➤ ► ▸
}
PS1="\[\e]2;$PWD\[\a\]\[\e]1;\]$(basename "$(dirname "$PWD")")/\W\[\a\]${BOLD}\$(usernamehost)\[$GREEN\]\w\[$WHITE\]\$([[ -n \$(git branch 2> /dev/null) ]] && echo \" on \")\[$PURPLE\]\$(parse_git_branch)\[$WHITE\]\n\$(shellprompt)\[$RESET\]"