116 lines
4.2 KiB
Bash
116 lines
4.2 KiB
Bash
#!/bin/bash
|
|
# Set up bash for interactive use (options, prompt, aliases, etc.)
|
|
|
|
# From: https://ethanschoonover.com/solarized/
|
|
# SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B RGB HSB
|
|
# --------- ------- ---- ------- ----------- ---------- ----------- -----------
|
|
# base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21
|
|
# base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26
|
|
# base01 #586e75 10/7 brgreen 240 #585858 45 -07 -07 88 110 117 194 25 46
|
|
# base00 #657b83 11/7 bryellow 241 #626262 50 -07 -07 101 123 131 195 23 51
|
|
# base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59
|
|
# base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63
|
|
# base2 #eee8d5 7/7 white 254 #e4e4e4 92 -00 10 238 232 213 44 11 93
|
|
# base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99
|
|
# yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71
|
|
# orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80
|
|
# red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86
|
|
# magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83
|
|
# violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77
|
|
# blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82
|
|
# cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63
|
|
# green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60
|
|
# ^
|
|
# |
|
|
# +--- set colors according to this column, assuming a
|
|
# properly configured terminal.
|
|
#
|
|
# Don't export these into the environment -> the point is to have them
|
|
# available within the shell only.
|
|
Base03=8
|
|
Base02=0
|
|
Base01=10
|
|
Base00=11
|
|
Base0=12
|
|
Base1=14
|
|
Base2=7
|
|
Base3=15
|
|
Red=1
|
|
Orange=9
|
|
Yellow=3
|
|
Green=2
|
|
Cyan=6
|
|
Blue=4
|
|
Violet=13
|
|
Magenta=5
|
|
Reset=$(tput sgr0)
|
|
|
|
while read -r f; do [ -f "$f" ] && source "$f"; done <<EOL
|
|
$ZDOTDIR/aliases
|
|
EOL
|
|
unset f
|
|
|
|
# Prevent ctrl-s from freezing the terminal.
|
|
stty stop undef
|
|
|
|
shopt -s cdspell checkwinsize globstar histappend nocaseglob
|
|
set -o noclobber # Prevent overwriting files with output redirection.
|
|
|
|
# Eternal bash history (from https://stackoverflow.com/a/19533853)
|
|
HISTCONTROL=erasedups
|
|
HISTFILESIZE=
|
|
HISTSIZE=
|
|
HISTTIMEFORMAT="[%F %T] "
|
|
HISTFILE="$XDG_DATA_HOME/bash/history"
|
|
|
|
# Prompt configuration.
|
|
Reset="\[$(tput sgr0)\]"
|
|
PS1_EXIT="\[$(tput setaf "$Red" )\]" # color for last exit code if non-zero
|
|
PS1_ROOT="\[$(tput setaf "$Orange" )\]" # logged in as root
|
|
PS1_SSH="\[$(tput setaf "$Yellow" )\]" # hostname for SSH sessions
|
|
PS1_PWD="\[$(tput setaf "$Cyan" )\]" # PWD color
|
|
PS1_GIT="\[$(tput setaf "$Blue" )\]" # color for git branch
|
|
PS1_VENV="\[$(tput setaf "$Violet" )\]" # color for python virtual env
|
|
PS1_JOBS="\[$(tput setaf "$Magenta")\]" # color for background jobs
|
|
PS1_SEP_COLOR="\[$(tput setaf "$Base01" )\]"
|
|
PS1_SEP=" > " # separator between prompt parts
|
|
|
|
GIT_PS1_SHOWDIRTYSTATE=1
|
|
GIT_PS1_SHOWSTASHSTATE=1
|
|
GIT_PS1_SHOWUNTRACKEDFILES=1
|
|
GIT_PS1_SHOWUPSTREAM=verbose
|
|
|
|
PROMPT_COMMAND=__ps1_set
|
|
PS2="... "
|
|
|
|
__ps1_set() {
|
|
local exit=$?
|
|
local prompt=">>>>>>>>>>"
|
|
local sep_color="$PS1_SEP_COLOR"
|
|
|
|
local ps=()
|
|
[ $exit -ne 0 ] && ps+=("$PS1_EXIT$exit")
|
|
[ $EUID -eq 0 ] && { ps+=("$PS1_ROOT\u"); prompt="##########"; }
|
|
[ -n "$SSH_CONNECTION" ] && ps+=("$PS1_SSH\h")
|
|
ps+=("$PS1_PWD\w")
|
|
type __git_ps1 && __git_ps1 '' '' "$PS1_GIT%s" && [ -n "$PS1" ] && ps+=("$PS1")
|
|
[ -n "$VIRTUAL_ENV" ] && ps+=("$PS1_VENV${VIRTUAL_ENV##*/}")
|
|
local j="\j" && [ "${j@P}" -gt 0 ] && ps+=("$PS1_JOBS${j@P} bg")
|
|
|
|
local extra=""
|
|
[ ${#ps[@]} -gt 1 ] && printf -v extra "$sep_color$PS1_SEP%s" "${ps[@]:1}"
|
|
PS1="${ps[0]}$extra$sep_color ${prompt:0:$SHLVL}$Reset "
|
|
} &>/dev/null
|
|
|
|
# Source extra configurations if available.
|
|
_source_extra_configs() {
|
|
local configs=(
|
|
/usr/local/etc/profile.d/bash_completion.sh
|
|
/usr/share/bash-completion/bash_completion
|
|
$HOME/.local/etc/bash/*
|
|
)
|
|
local f
|
|
for f in ${configs[@]}; do [ -f "$f" ] && source "$f"; done
|
|
}
|
|
_source_extra_configs || true
|
|
|