120 lines
4.5 KiB
Bash
120 lines
4.5 KiB
Bash
#!/bin/bash - not strictly necessary, but helps nano with syntax highlighting.
|
|
# Bash specific configuration.
|
|
|
|
__prompt_user_colour() {
|
|
# Determine the colour of the username in the prompt.
|
|
|
|
if [[ "$LOGNAME" == "root" ]]; then
|
|
printf "%s" "1;31m" # Bright Red.
|
|
elif [[ "$LOGNAME" == "tadgy" ]]; then
|
|
printf "%s" "1;32m" # Bright Green.
|
|
else
|
|
printf "%s" "1;36m" # Bright Cyan.
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
# Determine the platform being logged into.
|
|
PLATFORM="${PLATFORM:-$(uname -s)}"
|
|
|
|
# Make bash a little more pleasent - these are valid for all versions.
|
|
shopt -s cdspell checkhash checkwinsize cmdhist histappend no_empty_cmd_completion
|
|
|
|
# Exit the shell on a Ctl+D.
|
|
IGNOREEOF=0
|
|
|
|
# History control.
|
|
HISTCONTROL="ignoredups"
|
|
HISTFILE="$HOME/.bash_history-${HOSTNAME%%.*}"
|
|
HISTFILESIZE=1000000
|
|
HISTIGNORE="bg:bg *:fg:fg *:jobs:exit:clear:history"
|
|
HISTSIZE=1000000
|
|
HISTTIMEFORMAT="%d/%m/%y %H:%M:%S "
|
|
history -a
|
|
history -r
|
|
|
|
# Git prompt options.
|
|
GIT_PROMPT_SHOW_TYPE=1
|
|
GIT_PROMPT_SHOW_UPSTREAM=1
|
|
GIT_PROMPT_SHOW_UPSTREAM_EXTENDED=1
|
|
GIT_PROMPT_SHOW_IGNORED=1
|
|
GIT_PROMPT_SHOW_UNSTAGED=1
|
|
GIT_PROMPT_SHOW_UNCOMMITTED=1
|
|
GIT_PROMPT_SHOW_UNTRACKED=1
|
|
GIT_PROMPT_SHOW_STASH=1
|
|
|
|
# Version specific set up.
|
|
if (( BASH_VERSINFO[0] >= 4 )); then
|
|
# Add to the shopts.
|
|
shopt -s checkjobs dirspell
|
|
|
|
# Trim the path in the prompt.
|
|
PROMPT_DIRTRIM=2
|
|
# Coloured username + host + directory in the prompt.
|
|
PS1='[\[\033[$(__prompt_user_colour)\]\u\[\033[0m\]@\[\033[1;33m\]\h\[\033[0m\]] \[\033[1;34m\]\w\[\033[0m\]'
|
|
else
|
|
# Coloured username + host + directory in the prompt.
|
|
PS1='[\[\033[$(__prompt_user_colour)\]\u\[\033[0m\]@\[\033[1;33m\]\h\[\033[0m\]] \[\033[1;34m\]$(printf "%s" "${PWD/#$HOME/~}" | awk -F/ '\''{if (NF>3) {printf ".../" $(NF-1) "/" $NF} else {printf $0}}'\'')\[\033[0m\]'
|
|
fi
|
|
|
|
# Set the debugger prompt.
|
|
# shellcheck disable=SC2155
|
|
export PS4='+(\[\033[1;33m\]$?\[\033[0m\]) \[\033[1;34m\]${BASH_SOURCE##*/}\[\033[0m\]${FUNCNAME[0]:+(\[\033[1;32m\]${FUNCNAME[0]}\[\033[0m\])}:\[\033[1;31m\]$LINENO\[\033[0m\]: '
|
|
|
|
# Common aliases.
|
|
hash bc >/dev/null 2>&1 && alias bc='bc -lq'
|
|
hash grep >/dev/null 2>&1 && { alias egrep='grep -E --color=auto'; alias fgrep='grep -F --color=auto'; alias grep='grep --color=auto'; }
|
|
|
|
# Platform specific set up.
|
|
if [[ "$PLATFORM" = "Linux" ]]; then
|
|
# Linux specific functions.
|
|
hash ps grep >/dev/null 2>&1 && psgrep() {
|
|
if [[ -n "$1" ]]; then
|
|
# shellcheck disable=SC2009
|
|
ps -auwwx | command grep -E --color=always -- "(.*RSS.*|$1)" | command grep -F -v '(.*RSS.*|'
|
|
else
|
|
printf "%s: %s\\n" "Usage" "${FUNCNAME[0]} <something>" >&2
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Linux specific aliases.
|
|
hash diff >/dev/null 2>&1 && alias diff='diff --color=auto -u'
|
|
hash ftpwho >/dev/null 2>&1 && alias ftpwho='ftpwho -v'
|
|
hash gpg2 >/dev/null 2>&1 && alias gpg='command gpg2' && alias gpg2='gpg2 --pinentry-mode=loopback'
|
|
hash iftop >/dev/null 2>&1 && alias iftop='TERM=vt100 iftop'
|
|
hash iotop >/dev/null 2>&1 && alias iotop='TERM=linux iotop'
|
|
hash ip >/dev/null 2>&1 && alias ip='ip -color=auto'
|
|
hash last less >/dev/null 2>&1 && alias laston='last -a | less'
|
|
hash ls >/dev/null 2>&1 && alias ls='ls -bFv --color=auto'
|
|
hash minicom >/dev/null 2>&1 && alias minicom='minicom -m -c on'
|
|
hash mkpasswd >/dev/null 2>&1 && { alias mkpasswd='mkpasswd -m sha512crypt'; alias pwgen='mkpasswd -m sha512crypt'; }
|
|
hash nc >/dev/null 2>&1 && alias pastebin='nc termbin.com 9999'
|
|
hash pinfo >/dev/null 2>&1 && alias info='pinfo'
|
|
hash ping >/dev/null 2>&1 && alias ping='ping -b'
|
|
hash xclip >/dev/null 2>&1 && alias file2clip='DISPLAY=:0.0 xclip -selection clipboard'
|
|
elif [[ "$PLATFORM" = "Darwin" ]]; then
|
|
# Darwin specific aliases (some dependant on macports).
|
|
hash df >/dev/null 2>&1 && [[ ! -e "/opt/local/libexec/gnubin/df" ]] && alias df='df -kP'
|
|
hash diff >/dev/null 2>&1 && alias diff='diff -u'
|
|
[[ -e "/opt/local/libexec/gnubin//diff" ]] && alias diff='diff --color=auto -u'
|
|
hash last less >/dev/null 2>&1 && alias laston='last | less'
|
|
|
|
hash ls >/dev/null 2>&1 && alias ls='ls -bFGO'
|
|
[[ -e "/opt/local/libexec/gnubin/ls" ]] && alias ls='ls -bFv --color=auto'
|
|
[[ -e "/opt/local/libexec/gnubin/nc" ]] && alias pastebin='nc termbin.com 9999'
|
|
[[ -e "/opt/local/bin/pinfo" ]] && alias info='pinfo'
|
|
hash top >/dev/null 2>&1 && alias top='top -o cpu -S'
|
|
else
|
|
printf "%s: %s\\n" "${BASH_SOURCE##*/}" "unsupported platform: $PLATFORM" >&2
|
|
fi
|
|
|
|
# Read in the shell configuration from .bashrc.d/*.
|
|
for FILE in "$HOME"/.bashrc.d/*; do
|
|
[[ -x "$FILE" ]] && source "$FILE"
|
|
done
|
|
unset FILE
|
|
|
|
# Finalise the prompt.
|
|
PS1+=' ->'
|