A collection of scripts and configurations for Bash (and others)
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

187 lines
4.7KB

  1. # define symbols
  2. declare -A symbols=(
  3. [hard_separator]=""
  4. [soft_separator]="|"
  5. [git]=""
  6. [lock]=""
  7. [flag]="⚑"
  8. [plus]="✚"
  9. [tick]="✔"
  10. [cross]="✘"
  11. [enter]="⏎"
  12. [python]="λ"
  13. [battery_charging]="⚡"
  14. [battery_discharging]="▮"
  15. [untracked]="U"
  16. [stash]="🐿"
  17. [ahead]="+"
  18. [behind]="-"
  19. [smilie]="^_^"
  20. [frownie]="O_o"
  21. )
  22. last_section_bg=
  23. # $1 - Text (FG) color of new section
  24. # $2 - BG of new section
  25. function section_separator() {
  26. if [ "$2" = "$last_section_bg" ]; then
  27. PS1+="$(_CC ${BLACK} ${2})${symbols[soft_separator]}"
  28. else
  29. if [ "$2" ]; then
  30. PS1+="$(_CC $(_CBG2FG ${last_section_bg}) ${2})${symbols[hard_separator]}"
  31. else
  32. #echo "${last_section_bg} GAH!"
  33. PS1+="${NORMAL}$(_CFG $(_CBG2FG ${last_section_bg}) )${symbols[hard_separator]}${NORMAL}"
  34. fi
  35. fi
  36. }
  37. # $1 - Content
  38. # $2 - Text (FG) color
  39. # $3 - BG Color
  40. # $4 - Font style
  41. # $5 - Ignore section separator
  42. function section(){
  43. ignore=$5
  44. if [ "$ignore" != true ]; then
  45. ignore=false
  46. fi
  47. if [ "$last_section_bg" ]; then
  48. if [ "$ignore" = false ]; then
  49. section_separator ${2} ${3}
  50. fi
  51. fi
  52. last_section_bg=$3
  53. PS1+="$(_CC ${2} ${3} ${4})${1}"
  54. }
  55. # This function was modified from one found @ https://www.reddit.com/r/linux/comments/2uf5uu/this_is_my_bash_prompt_which_is_your_favorite/?st=jikgswh4&sh=371ba8bf
  56. # $1 - Default text (foreground) color
  57. # $2 - Background color
  58. function section_git_status() {
  59. local default untracked stash clean ahead behind staged dirty diverged
  60. default=$(_CC $1 $2)
  61. untracked=$(_CC $GREEN $2)
  62. stash=$(_CC $GREEN $2)
  63. clean=$(_CC $GREEN $2)
  64. ahead=$(_CC $YELLOW $2)
  65. behind=$(_CC $YELLOW $2)
  66. staged=$(_CC $CYAN $2)
  67. dirty=$(_CC $RED $2)
  68. diverged=$(_CC $RED $2)
  69. branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
  70. if [[ -n "$branch" ]]; then
  71. if [ "$last_section_bg" ]; then
  72. section_separator $1 $2
  73. fi
  74. last_section_bg=$2
  75. PS1+="${default} ${symbols[git]} $branch "
  76. git_status=$(git status 2> /dev/null)
  77. # If nothing changes the color, we can spot unhandled cases.
  78. if [[ $git_status =~ 'Untracked files' ]]; then
  79. PS1+="${symbols[untracked]}"
  80. fi
  81. if git stash show &>/dev/null; then
  82. PS1+="${symbols[stash]}"
  83. fi
  84. if [[ $git_status =~ 'Your branch is ahead' ]]; then
  85. PS1+="${symbols[ahead]}"
  86. fi
  87. if [[ $git_status =~ 'Your branch is behind' ]]; then
  88. PS1+="${symbols[behind]}"
  89. fi
  90. if [[ $git_status =~ 'Changes to be committed' ]]; then
  91. PS1+="${symbols[tick]}"
  92. fi
  93. if [[ $git_status =~ 'Changed but not updated' ||
  94. $git_status =~ 'Changes not staged' ||
  95. $git_status =~ 'Unmerged paths' ]]; then
  96. PS1+="${symbols[cross]}"
  97. fi
  98. if [[ $git_status =~ 'Your branch'.+diverged ]]; then
  99. PS1+="${symbols[enter]}"
  100. fi
  101. PS1+=" "
  102. fi
  103. }
  104. # $1 - FG local
  105. # $2 - BG User
  106. # $3 - FG Remote
  107. # $4 - BG Root
  108. section_tty () {
  109. local TTY=`ps aux | grep $$ | grep bash | awk '{ print $7 }'`
  110. local SESS_SRC=`who | grep $TTY | awk '{ print $6 }'`
  111. local USR=0 # 0 = User | 1 = Root
  112. local FG=$1
  113. local BG=$2
  114. # Okay...Now who we be?
  115. if [ `/usr/bin/whoami` = "root" ] ; then
  116. USR=1
  117. BG=$4
  118. fi
  119. SSH_IP=`echo $SSH_CLIENT | awk '{ print $1 }'`
  120. if [ $SSH_IP ] ; then
  121. FG=$3
  122. else
  123. SSH_IP=`echo $SSH2_CLIENT | awk '{ print $1 }'`
  124. if [ $SSH_IP ]; then
  125. FG=$3
  126. fi
  127. fi
  128. if [ "$last_section_bg" ]; then
  129. section_separator $1 $2
  130. fi
  131. last_section_bg=$2
  132. PS1+="$(_CC $FG $BG) ${TTY} "
  133. }
  134. short_PWD ()
  135. {
  136. local PRE= NAME="$1" LENGTH="$2";
  137. [[ "$NAME" != "${NAME#$HOME/}" || -z "${NAME#$HOME}" ]] &&
  138. PRE+='~' NAME="${NAME#$HOME}" LENGTH=$[LENGTH-1];
  139. ((${#NAME}>$LENGTH)) && NAME="/...${NAME:$[${#NAME}-LENGTH+4]}";
  140. echo "$PRE$NAME"
  141. }
  142. set_prompt() {
  143. local lec="$?"
  144. local color=$GREEN
  145. local bg=$BG_LBLUE
  146. local smilie=" ${symbols[smilie]} "
  147. local DL="\033[1B"
  148. local UL2="\033[1A"
  149. if [ $COLOR_PROMPT = yes ]; then
  150. if [ $lec -ne 0 ]; then
  151. color=$RED
  152. smilie=" ${symbols[frownie]} "
  153. fi
  154. PS1="${debian_chroot:+($debian_chroot)}" #$(_CC $GREEN $BG_DGREY)\u $(_CC $LBLUE $BG_DGREY)\w$(_CC $DEFAULT $BG_DGREY)|${smilie}$(_CC $DEFAULT $BG_DGREY)|$(_git_status)${NORMAL}$(_CFG $DGREY)${symbols[hard_separator]}${NORMAL} "
  155. section "\n\033[1A$(printf "%*s" $(($(tput cols)-2)) "") \r" $BLUE $BG_GREY
  156. section $smilie $color $BG_BLACK 1 true
  157. section_tty $BLACK $BG_LBLUE $RED $BG_YELLOW
  158. section " \u@\h " $BLUE $BG_LCYAN
  159. section " $(short_PWD $PWD 20) " $LCYAN $BG_BLUE
  160. section_git_status $YELLOW $BG_LBLUE
  161. section "\n" $DEFAULT $BG_GREY
  162. section_separator
  163. PS1+="> \033[K"
  164. unset last_section_bg
  165. else
  166. PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w\$ "
  167. fi
  168. }
  169. PROMPT_COMMAND="set_prompt; $PROMPT_COMMAND"