81 lines
1.8 KiB
Bash
81 lines
1.8 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/')
|
|
echo "${branch_name} "
|
|
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="$?"
|
|
|
|
# Shorten $PWD, if it's too long
|
|
if [ $COLUMNS -lt 80 ]; then
|
|
export PROMPT_DIRTRIM=1
|
|
else
|
|
export PROMPT_DIRTRIM=0
|
|
fi
|
|
|
|
export PS1="${HOST} ${DIR} ${GIT_NIX}${NEWLINE}"
|
|
|
|
if [ $EXIT != 0 ]
|
|
then
|
|
PS1+='\[\033[0;31m\]$\[\033[00m\] '
|
|
else
|
|
PS1+='\[\033[0;32m\]$\[\033[00m\] '
|
|
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
|