195 lines
6.9 KiB
Bash
Executable File
195 lines
6.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# The #! makes the linter know that this is a bash file
|
|
#
|
|
# ~/.bashrc
|
|
#
|
|
|
|
# If not running interactively, don't do the below
|
|
[[ $- != *i* ]] && return
|
|
|
|
# cat the .motd file if it exists
|
|
[ -f ~/.motd ] && cat ~/.motd
|
|
|
|
# don't put duplicate lines or lines starting with space in the history.
|
|
# See bash(1) for more options
|
|
HISTCONTROL=ignoreboth
|
|
|
|
if command -v "slatectx-pwd" >&- 2>&-; then
|
|
ENABLE_SLATECTX_PWD_SET="1"
|
|
SLATECTX_PROMPT_COMMAND='[ -n "$ENABLE_SLATECTX_PWD_SET" ] && slatectx-pwd set;'
|
|
DIRECTORY="$(slatectx-pwd get)"
|
|
[ -n "$DIRECTORY" ] && cd -- "$DIRECTORY"
|
|
unset DIRECTORY
|
|
alias cdx='cd "$(slatectx-pwd get)"'
|
|
fi
|
|
|
|
# shellcheck disable=SC1091
|
|
[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
|
|
|
|
# shellcheck disable=SC1091
|
|
[ -r /usr/share/fzf/key-bindings.bash ] && . /usr/share/fzf/key-bindings.bash
|
|
|
|
# Change the window title of X terminals
|
|
case ${TERM} in
|
|
xterm*|rxvt*|Eterm*|aterm|kterm|gnome*|interix|konsole*|foot)
|
|
PROMPT_COMMAND="$SLATECTX_PROMPT_COMMAND "'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\007"'
|
|
;;
|
|
screen*)
|
|
PROMPT_COMMAND="$SLATECTX_PROMPT_COMMAND"' echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\033\\"'
|
|
;;
|
|
esac
|
|
|
|
unset SLATECTX_PROMPT_COMMAND
|
|
|
|
# If TERM is foot and foot binary is not present set TERM to xterm
|
|
[ "$TERM" == "foot" ] && [ ! -x /usr/bin/foot ] && export TERM=xterm
|
|
|
|
start_ssh_agent () {
|
|
eval "$(ssh-agent)" && MY_SSH_AGENT_PID="$SSH_AGENT_PID"
|
|
}
|
|
|
|
[ -z "$SSH_AUTH_SOCK" ] && start_ssh_agent
|
|
|
|
kill_ssh_agent () {
|
|
[ -z "$MY_SSH_AGENT_PID" ] || kill "$MY_SSH_AGENT_PID"
|
|
}
|
|
|
|
trap kill_ssh_agent EXIT
|
|
|
|
add_ssh_key () {
|
|
if [ -z "$1" ]; then
|
|
ssh-add
|
|
else
|
|
ssh-add "$HOME/.ssh/$1"
|
|
fi
|
|
}
|
|
|
|
alias ssa=start_ssh_agent
|
|
alias sa=add_ssh_key
|
|
|
|
BRIGHT_RED="\033[01;31m"
|
|
DEFAULT_COLOR="\033[00m"
|
|
|
|
if [ -n "$(ls /sys/class/power_supply/BAT*/capacity /sys/class/power_supply/*-battery/capacity 2> /dev/null)" ] ; then
|
|
# shellcheck disable=SC2016 # battcap isn't supposed to be exanded here.
|
|
BATTERY_PS1='\[\033[00;37m\]$(battcap)\[\033[30m\]-'
|
|
fi
|
|
|
|
battcap () {
|
|
cat /sys/class/power_supply/BAT*/capacity /sys/class/power_supply/*-battery/capacity 2> /dev/null | tr '\n' '+' | sed 's/+$//'
|
|
}
|
|
|
|
retcode () {
|
|
RETCODE="$?"
|
|
if [[ "$RETCODE" != 0 ]] ; then
|
|
printf "[%s]" "$RETCODE"
|
|
fi
|
|
}
|
|
|
|
# short 2 deep pwd command for the prompt
|
|
PWDSHORT_HOME_REP="~"
|
|
pwdshort () {
|
|
echo "${PWD/#$HOME/$PWDSHORT_HOME_REP}" | tr / '\n' | tail -n 2 | tr '\n' / | sed 's/\/$//'
|
|
}
|
|
|
|
responsive_newline() {
|
|
[[ "$(tput cols 2> /dev/null)" -gt 50 ]] || printf "\n "
|
|
}
|
|
|
|
if [[ ${EUID} == 0 ]] ; then
|
|
PS1='\[\033[01;31m\]$(retcode)['"$BATTERY_PS1"'\[\033[01;31m\]\u@\[\033[00;32m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]]$(responsive_newline)\$\[\033[00m\] '
|
|
else
|
|
PS1='\[\033[01;31m\]$(retcode)\[\033[00m\]['"$BATTERY_PS1"'\[\033[33m\]\u\[\033[01;31m\]@\[\033[00;32m\]\h\[\033[00m\]:\[\033[01;34m\]$(pwdshort)\[\033[00m\]]$(responsive_newline)\[\033[32m\]\$\[\033[00m\] '
|
|
fi
|
|
|
|
# set ls colorscheme
|
|
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:';
|
|
export LS_COLORS
|
|
export USER_LS_COLORS="$LS_COLORS"
|
|
|
|
if grep --help 2>&1 | grep -q '.--color' ; then
|
|
alias grep='grep --color=auto'
|
|
alias egrep='egrep --color=auto'
|
|
alias fgrep='fgrep --color=auto'
|
|
fi
|
|
|
|
ip --help 2>&1 | grep -q '.-c.olor' && alias ip='ip -c'
|
|
|
|
alias cp="cp -i" # confirm before overwriting something
|
|
alias df='df -h' # human-readable sizes
|
|
alias free='free -m' # show sizes in MB
|
|
alias ..='cd ..'
|
|
alias blobcat=xxd
|
|
alias ap=ansible-playbook
|
|
alias sudi="sudo -i"
|
|
alias ls='ls --color=auto'
|
|
alias ll='ls -lh --color=auto'
|
|
alias la='ls -lah --color=auto'
|
|
command -v xbps-query > /dev/null 2> /dev/null && alias xbps-search='xbps-query -R -s'
|
|
alias ffh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
|
|
alias fcp='scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
|
|
|
|
# useful for testing multifile scripts
|
|
alias here='PATH="$PWD:$PATH"'
|
|
|
|
command -v kak-slatectx > /dev/null 2> /dev/null && alias kak='kak-slatectx'
|
|
|
|
#xhost +local:root > /dev/null 2>&1
|
|
|
|
complete -cf sudo
|
|
|
|
# Bash won't get SIGWINCH if another process is in the foreground.
|
|
# Enable checkwinsize so that bash will check the terminal size when
|
|
# it regains control. #65623
|
|
# http://cnswww.cns.cwru.edu/~chet/bash/FAQ (E11)
|
|
shopt -s checkwinsize
|
|
|
|
shopt -s expand_aliases
|
|
|
|
# export QT_SELECT=4
|
|
|
|
# Enable history appending instead of overwriting. #139609
|
|
shopt -s histappend
|
|
|
|
# Enable directory switching without cd
|
|
shopt -s autocd
|
|
|
|
# Do a proper clear for Ctrl+l
|
|
bind '"\C-l": clear-display'
|
|
|
|
#
|
|
# # ex - archive extractor
|
|
# Thanks Manjaro!
|
|
# # usage: ex <file>
|
|
ex ()
|
|
{
|
|
if [ -f "$1" ] ; then
|
|
case "$1" in
|
|
*.tar.bz2) tar xjf "$1" ;;
|
|
*.tar.gz) tar xzf "$1" ;;
|
|
*.bz2) bunzip2 "$1" ;;
|
|
*.rar) unrar x "$1" ;;
|
|
*.gz) gunzip "$1" ;;
|
|
*.tar) tar xf "$1" ;;
|
|
*.tbz2) tar xjf "$1" ;;
|
|
*.tgz) tar xzf "$1" ;;
|
|
*.zip) unzip "$1" ;;
|
|
*.Z) uncompress "$1";;
|
|
*.7z) 7z x "$1" ;;
|
|
*) echo "'$1' cannot be extracted via ex()" ;;
|
|
esac
|
|
else
|
|
echo "'$1' is not a valid file"
|
|
fi
|
|
}
|
|
|
|
# better yaourt colors
|
|
export YAOURT_COLORS="nb=1:pkg=1:ver=1;32:lver=1;45:installed=1;42:grp=1;34:od=1;41;5:votes=1;44:dsc=0:other=1;35"
|
|
|
|
# jq theme
|
|
export JQ_COLORS="1;31:0;39:0;39:0;39:0;32:1;39:1;39"
|
|
|
|
# Chainload a .bashrc.local if it exists
|
|
# shellcheck disable=2015 disable=1090
|
|
[ -x ~/.bashrc.local ] && . ~/.bashrc.local || true
|