bash_profile

Published on April 1st, 2023 • Updated on April 12th, 2023

# History size
export HISTSIZE=1000000
export HISTFILESIZE=1000000

# Append commands to the history file rather than overwrite it
shopt -s histappend

# Control how commands are saved in the history file
export HISTCONTROL=ignoredups:erasedups

# Store multi-line commands in one history entry
shopt -s cmdhist

# Enables forward bash history search with C-s
stty -ixon

# Navigate through previous commands, which start with the same fragment using up/down arrows
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'

# Save each command right after it has been executed
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"

# Get git branch for prompt
parse_git_branch() {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}

# Prompt
PS1="\`if [ \$? = 0 ];
    then echo \[\e[32m\]0\[\e[0m\];
    else echo \[\e[31m\]\$?\[\e[0m\];
    fi\` \e[0;34m\W \$(parse_git_branch)\nλ\e[m "

# Set the default editor
export EDITOR=vi

# Locally installed programs for system administration.
export PATH="/usr/local/sbin:$PATH"

alias ls="ls -holA"

# Automatically corrects small typos in directory names and jumps to the best guess of existing
# directories
shopt -s cdspell

# cd to only suggest directories
complete -d cd

# Use CDPATH to define the base directories for cd command, place all projects under ~/workspace
export CDPATH=.:~:~/workspace

# Place all projects under ~/workspace and have in there a .bash_profile with workspace specific
# bash configurations like nvm, sdkman, pyenv, tea, etc.
if [[ -f ~/workspace/.bash_profile ]]; then
  source ~/workspace/.bash_profile
fi