Files
dots/files/shell/.bashrc

85 lines
2.0 KiB
Bash

# ~/.bashrc
#
# M. Thomas
# if not running interactively, don't do anything
case $- in
*i*) ;;
*) return ;;
esac
# ============================== Prompt
git_branch() {
if $(git rev-parse --git-dir > /dev/null 2>&1); then
local branch_name=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
if [[ $(uname) == "OpenBSD" ]]; then
echo "(${branch_name}) "
else
echo "(${branch_name} ) "
fi
fi
}
nix_env() {
if $(echo $PATH | grep "/nix/store" > /dev/null 2>&1); then
echo "(nix)"
fi
}
HOST="\[\033[0;33m\]\h\[\033[m\]"
GIT_NIX="\[\033[0;31m\]\$(git_branch)\$(nix_env)\[\033[m\]"
DIR="\[\033[0;34m\]\w\[\033[m\]"
NEWLINE=$'\n'
PROMPT_COMMAND=__prompt_command
__prompt_command() {
local EXIT="$?"
export PS1="${HOST} ${DIR} ${GIT_NIX}${NEWLINE}"
if [[ $(uname) == "OpenBSD" ]]; then
local red_lambda='\[\033[0;31m\]>\[\033[00m\] '
local green_lambda='\[\033[0;32m\]>\[\033[00m\] '
else
local red_lambda='\[\033[0;31m\]󱞩\[\033[00m\] '
local green_lambda='\[\033[0;32m\]󱞩\[\033[00m\] '
fi
if [ $EXIT != 0 ]
then
PS1+=$red_lambda
else
PS1+=$green_lambda
fi
}
# ============================== Auto Complete
# Press Tab to auto complete like zsh
bind 'set show-all-if-ambiguous on'
bind 'TAB:menu-complete'
bind '"\e[Z":menu-complete-backward'
# Auto complete ssh hosts
_ssh()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts=$(grep '^Host' ~/.ssh/config ~/.ssh/config.d/* 2>/dev/null | grep -v '[?*]' | cut -d ' ' -f 2-)
COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
return 0
}
complete -F _ssh ssh
complete -F _ssh s
# ============================== Jump Words
stty -ixon # enable forward search with C-s
bind '"\en": forward-word'
bind '"\ep": backward-word'
# ============================== Source other definitions
[ -f ~/.shellrc.alias ] && source ~/.shellrc.alias
[ -f ~/.shellrc.local ] && source ~/.shellrc.local