-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbash_prompt
More file actions
123 lines (110 loc) · 3.65 KB
/
bash_prompt
File metadata and controls
123 lines (110 loc) · 3.65 KB
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/env bash
# Solarized Dark Prompt
# Based on the Solarized Dark theme.
# Inspired by @necolas’s prompt (https://github.com/necolas/dotfiles)
# For iTerm2: Profiles → Text → use 13pt Monaco with 1.1 vertical spacing.
# Ensure terminal supports 256 colors.
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
# Function to output Git branch information and status.
prompt_git() {
local s=''
local branchName=''
# Check if the current directory is in a Git repository.
if ! git rev-parse --is-inside-work-tree &>/dev/null; then
return
fi
# Determine current branch or commit identifier.
branchName="$(
git symbolic-ref --quiet --short HEAD 2>/dev/null ||
git describe --all --exact-match HEAD 2>/dev/null ||
git rev-parse --short HEAD 2>/dev/null ||
echo '(unknown)'
)"
# Retrieve remote URL (for custom repository-specific handling).
local repoUrl
repoUrl="$(git config --get remote.origin.url)"
if grep -q ':Elfsquad/cpq.git' <<< "${repoUrl}"; then
s+='*'
else
# Check for staged changes.
if ! git diff --quiet --ignore-submodules --cached; then
s+='+'
fi
# Check for unstaged changes.
if ! git diff-files --quiet --ignore-submodules --; then
s+='!'
fi
# Check for untracked files.
if [ -n "$(git ls-files --others --exclude-standard)" ]; then
s+='?'
fi
# Check for stashed changes.
if git rev-parse --verify refs/stash &>/dev/null; then
s+='$'
fi
fi
[ -n "$s" ] && s=" [${s}]"
echo -e "${1}${branchName}${2}${s}"
}
# Set up colors using tput if available; otherwise, fallback to ANSI escapes.
if tput setaf 1 &>/dev/null; then
tput sgr0 # Reset colors
bold=$(tput bold)
reset=$(tput sgr0)
# Solarized colors (from http://git.io/solarized-colors).
black=$(tput setaf 0)
blue=$(tput setaf 33)
cyan=$(tput setaf 37)
green=$(tput setaf 64)
orange=$(tput setaf 166)
purple=$(tput setaf 125)
red=$(tput setaf 124)
violet=$(tput setaf 61)
white=$(tput setaf 15)
yellow=$(tput setaf 136)
else
bold=''
reset="\e[0m"
black="\e[1;30m"
blue="\e[1;34m"
cyan="\e[1;36m"
green="\e[1;37m"
orange="\e[1;33m"
purple="\e[1;35m"
red="\e[1;31m"
violet="\e[1;35m"
white="\e[1;37m"
yellow="\e[1;33m"
fi
# Highlight the username: red if running as root, otherwise orange.
if [[ "${USER}" == "root" ]]; then
userStyle="${red}"
else
userStyle="${orange}"
fi
# Highlight the hostname: bold red if connected via SSH, else yellow.
if [[ -n "${SSH_TTY:-}" ]]; then
hostStyle="${bold}${red}"
else
hostStyle="${yellow}"
fi
# Build the primary prompt (PS1)
# Set the terminal title to the basename of the current directory.
PS1="\[\033]0;\W\007\]" # Terminal title (working directory base name)
PS1+="\[${bold}\]\n" # New line in bold
PS1+="\[${white}\]|- ${userStyle}\]🧑 \u" # Username with icon
PS1+="\[${white}\] @ 💻 "
PS1+="\[${hostStyle}\]\h" # Hostname with styling
PS1+="\[${white}\] in "
PS1+="\[${green}\]📁 \w" # Full working directory with icon
# Append Git branch details if available.
PS1+="\$(prompt_git \"\[${white}\] on 🌿 \[${violet}\]\" \"\[${blue}\]\")"
PS1+="\n\[${white}\]|-> \[${reset}\]" # New line with prompt symbol
export PS1
# Set the secondary prompt (PS2) for multi-line commands.
PS2="\[${yellow}\]→ \[${reset}\]"
export PS2