From 8979b768965109f39730ed2a431fbf2e4d369502 Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Mon, 17 Feb 2020 13:21:02 +0100 Subject: Update bash PS1 This should bring the prompt for interactive Bash usage in line with the prompt for zsh. The colors are slightly different, but the information is the same. --- .bashrc | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) (limited to '.bashrc') diff --git a/.bashrc b/.bashrc index b289417..e6dd4cd 100644 --- a/.bashrc +++ b/.bashrc @@ -1,2 +1,88 @@ +[ $DEBUG_DOTFILES ] && echo "Loading .bashrc" -complete -C /usr/bin/terraform terraform +# Load initialization +[ $DEBUG_DOTFILES ] && echo " Loading ~/.config/shell/init" +source ~/.config/shell/init + +# Load the sources file, which in turn will source more functionality +[ $DEBUG_DOTFILES ] && echo " Loading ~/.config/shell/sources" +source ~/.config/shell/sources + +# Set vi mode +[ $DEBUG_DOTFILES ] && echo " Setting vi-mode" +set -o vi + +# Bind some emacs-style bindings in insert mode +bind -m vi-insert "\C-a":beginning-of-line +bind -m vi-insert "\C-b":backward-char +bind -m vi-insert "\C-e":end-of-line +bind -m vi-insert "\C-f":forward-char +bind -m vi-insert "\C-k":kill-line +bind -m vi-insert "\C-n":history-search-forward +bind -m vi-insert "\C-p":history-search-backward +bind -m vi-insert "\C-u":kill-region +bind -m vi-insert "\C-y":yank + +# Configure Bash options +[ $DEBUG_DOTFILES ] && echo " Setting autocompletions" +shopt -s histappend + +# Set up the prompt +[ $DEBUG_DOTFILES ] && echo " Setting PS1" +PROMPT_COMMAND=__precmd + +__precmd() +{ + # Record exit code of previous command immediately + local previous_exit=$? + + # Colors in the Bash prompt should be wrapped in \001 and \002, + # (RL_PROMPT_START_INGORE and RL_PROMPT_END_IGNORE) in order to avoid + # wrapping issues later in life. It is also *very* important to wrap + # things in double quotes for the PS1 coloring to be applied correctly! + + # Set the username, hostname and path + PS1="\001$SHELLC_F_GREEN\002\u\001$SHELLC_RESET_COLOR_F\002" + PS1+="\001$SHELLC_F_LIGHTGRAY\002@\001$SHELLC_RESET_COLOR_F\002" + PS1+="\001$SHELLC_F_MAGENTA\002\H\001$SHELLC_RESET_COLOR_F\002" + PS1+="\001$SHELLC_F_LIGHTGRAY\002:\001$SHELLC_RESET_COLOR_F\002" + PS1+="\001$SHELLC_F_BLUE\002\w\001$SHELLC_RESET_COLOR_F\002" + + # Add git status + if git rev-parse --is-inside-work-tree &> /dev/null + then + PS1+="\001$SHELLC_F_LIGHTGRAY\002·\001$SHELLC_RESET_COLOR_F\002" + + # Set coloring of the branch name + if [[ "$(git status -uno --porcelain 2> /dev/null)" == "" ]] + then + PS1+="\001$SHELLC_F_GREEN\002" + else + PS1+="\001$SHELLC_F_YELLOW\002" + fi + + # Get the branch name + local git_branch_name=$(git rev-parse --abbrev-ref @) + + if [[ "$git_branch_name" == "HEAD" ]] + then + git_branch_name=$(git rev-parse --short HEAD 2> /dev/null) + fi + + # Set the prompt + PS1+="$git_branch_name\001$SHELLC_RESET_COLOR_F\002" + fi + + # Add the exit code of the previous command + PS1+=" " + + if [[ $previous_exit -ne 0 ]] + then + PS1+="\001$SHELLC_F_RED\002" + fi + + PS1+="$(printf "%03i" "$previous_exit")\001$SHELLC_RESET_COLOR_F\002" + + # Final prompt character + PS1+=" \001$SHELLC_F_LIGHTGRAY\002»\001$SHELLC_RESET_FULL\002 \001$CURSOR_STYLE\002" +} -- cgit v1.1