-
Notifications
You must be signed in to change notification settings - Fork 0
/
private_dot_bashrc
129 lines (103 loc) · 4.27 KB
/
private_dot_bashrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/bash
case $- in
*i*) ;;
*) return ;;
esac
DEBUGLEVEL="$BASHRC_DEBUG"
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# functions
# print debug information
DEBUG() {
[[ -z $DEBUGLEVEL ]] && return 0;
debuglevel="$1"
shift
[[ $DEBUGLEVEL -lt $debuglevel ]] && return 0;
_color="\033[3$((debuglevel + 1));1m"
echo -e "${_color}[debug $debuglevel]\033[0m $*" >&2
}
# check if command exists
has() {
type -t "$1" &>/dev/null
}
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# shell options
# extended glob
shopt -s extglob
# auto cd
shopt -s autocd
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
shopt -s globstar
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# environment variables
# XDG base directories
if [[ -z "$XDG_CONFIG_HOME" ]]; then
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="$HOME/.local/state"
export XDG_RUNTIME_DIR="/run/user/$UID"
fi
# environment.d
if ((ENVIRONMENTD_LOADED != 1)) || [[ -n $BASHRC_DEBUG ]]; then
if [[ -d "$XDG_CONFIG_HOME/environment.d/" ]]; then
DEBUG 1 "load variables $XDG_CONFIG_HOME/environment.d"
while IFS="" read -r envar; do
[[ -n "$envar" ]] && [[ "$envar" =~ ^[^#] ]] && [[ "$envar" =~ ^PATH ]] && eval "export $envar"
done < <(cat "$XDG_CONFIG_HOME"/environment.d/!(10-path.conf))
fi
fi
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# history
# don't put duplicate lines or lines starting with space in the history.
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTFILE=${XDG_STATE_HOME}/bash_history
HISTSIZE=1000
HISTFILESIZE=2000
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# prompt
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color | *-256color | *-kitty) color_prompt=yes ;;
esac
# color prompt
if [[ "$color_prompt" = yes ]]; then
DEBUG 1 "color prompt enabled"
c1="\[\033[01;32m\]"
c2="\[\033[01;34m\]"
esc="\[\033[00m\]"
fi
# git prompt
if [[ -f /usr/share/git/git-prompt.sh ]]; then
DEBUG 1 "git prompt enabled"
source /usr/share/git/git-prompt.sh
# shellcheck disable=SC2016
git_prompt='$(__git_ps1 " (%s)")'
fi
PS1="[${c1}\u@\h${esc} ${c2}\W${esc}${git_prompt}]\$ "
unset color_prompt force_color_prompt \
c1 c2 esc git_prompt
eval "$(dircolors "$XDG_CONFIG_HOME"/dircolors)"
# enable color support of ls and also add handy aliases
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# aliases
# colored GCC warnings and errors
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
alias ll='ls -lF'
alias l='ls -al'
if has exa; then
DEBUG 1 "alias \"l\" to exa"
alias l='exa -al'
fi
unset DEBUG DEBUGLEVEL BASHRC_DEBUG has