Skip to content

Instantly share code, notes, and snippets.

@Trucido
Last active July 7, 2020 17:26
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Trucido/d189425d44567967cbddd5ec463537a9 to your computer and use it in GitHub Desktop.
Save Trucido/d189425d44567967cbddd5ec463537a9 to your computer and use it in GitHub Desktop.
# .bashrc -*- mode:shell-script sh-basic-offset:4 indent-tabs-mode:nil -*-
#
#
# Sanity checks
#
[ -n "$BASH_VERSION" -a -n "$BASH" ] || return 0
# Always set histfile to avoid clobbering other shells.
HISTFILE=${HOME}/.bash_history
# Test for corner cases in shells sourcing this file.
if [ -f /proc/mounts ]; then
shell=$(readlink /proc/$$/exe 2>/dev/null) || return 0
case "$shell" in
*/bash)
while read -r -d $'\0' a ; do
case "$a" in
--noprofile) noprofile=true ;;
--restricted) restricted=true ;;
--posix) SH_VERSION="$BASH_VERSION" ;;
--norc) norc=true ;;
esac
done < /proc/$$/cmdline
case "$0" in
sh|-sh|*/sh) SH_VERSION="$BASH_VERSION" ;;
esac ;;
*) return 0 ;;
esac
else
return 0
fi
unset a
[ "$noprofile" != true ] || return 0
[ "$restricted" != true ] || return 0
[ -z "$SH_VERSION" ] || return 0
[ "$norc" != true ] || return 0
# Not needed after initial bash checks, but just in case...
if ! shopt -oq posix 2>/dev/null; then :; else return 0; fi
#
# Environment
#
/usr/bin/tty -s && test -t && \
{
LANG=${LANG:-en_US.UTF-8}
LC_CTYPE=${LC_CTYPE:-en_US.UTF-8}
LANGUAGE=en_US.UTF-8:en_US:en
TZ="America/New_York"
IS_WSL=$(grep -i microsoft /proc/version)
LS_OPTIONS="-A -N --color=auto -T 0"
GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
export LANG
# Editor(s)
if [ "${EUID}" = 0 ] || [ "$USER" = root ]; then
EDITOR=nano
GIT_EDITOR=vim
else
EDITOR='emacsclient -t -a="nano"'
GIT_EDITOR='emacsclient -t -a=""'
fi
NANO_OPTIONS='-B -C "/var/tmp" -G -H -O -S -U -a -q -w -x'
export EDITOR GIT_EDITOR NANO_OPTIONS
# Pager
MORE=-sl
# LESS
LESS='-FiRaX#.5'
PAGER=${PAGER:-less}
SYSTEMD_PAGER=${SYSTEMD_PAGER:-less}
export LESS MORE PAGER
# if [ -n "$BASH_VERSION" ]; then
#
# bashenv
#
HISTFILE=${HOME}/.bash_history
HISTSIZE=1000
HISTFILESIZE=10000
HISTCONTROL=ignoredups
HISTTIMEFORMAT="%F %H:%M:%S: "
shopt -s histappend no_empty_cmd_completion 2>/dev/null
[ "$IS_WSL" != "" ] && shopt -s huponexit
# elif [ -n "$ZSH_VERSION" ]; then
# #
# # zshenv
# #
# HISTFILE=${HOME}/.zsh_history
# #HISTTIMEFORMAT not supported yet in zsh
# alias h='fc -t "%Y:%m:%d %T:" -il'
# alias H='fc -t "%Y:%m:%d %T:" -il 1'
# setopt ALL_EXPORT
# ZDOTDIR=${HOME}/.zsh
# HISTSIZE=10000
# SAVEHIST=10000
# READNULLCMD=less
# HISTSIZE=10000
# SAVEHIST=10000
# HISTFILESIZE=10000
# HISTCONTROL=ignoredups
# setopt HIST_IGNORE_DUPS APPEND_HISTORY INC_APPEND_HISTORY SHARE_HISTORY HIST_FCNTL_LOCK
# [ "$IS_WSL" != "" ] && setopt HUP
# unsetopt ALL_EXPORT
# fi
} 2>/dev/null || true
#
# PATH
#
if [ "$UID" = 0 ]; then
PATH=$HOME/bin:$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/games:/var/games:/usr/lib/mit/sbin
elif [ "$UID" -ge 1000 ]; then
PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/var/games:/usr/lib/mit/bin
fi
export PATH
#
# LS_COLORS
#
if test -z "$SSH_CONNECTION" -a -z "$SSH_TTY" -a -z "$STY" -a -z "$MC_SID" -a \
"${TERM}" != dumb -a "x`/usr/bin/tty -s && /usr/bin/tput colors 2>/dev/null`" = "x256"
then
LS_COLORS='rs=0:di=38;5;33:ln=3;36:mh=3;38;5;5:pi=40;38;5;1:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=01;37;41:mi=01;37;41:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;21:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;40:*.cmd=38;5;70:*.exe=38;5;70:*.com=38;5;70:*.bat=38;5;70:*.btm=38;5;70:*.dll=38;5;70:*.local=38;5;239:*.list=01;38;5;5:*.ymp=01;38;5;5:*.lst=01;38;5;5:*.repo=01;38;5;5:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.iso=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.JPG=38;5;13:*.JPEG=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.ico=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.webp=38;5;13:*.ogm=38;5;13:*.divx=38;5;13:*.xvid=38;5;13:*.3gp=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.aiff=38;5;45:*.ape=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.FLAC=38;5;45:*.m4a=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.MP3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.voc=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.WAV=38;5;45:*.wma=38;5;45:*.wv=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.opus=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:*.m4r=38;5;45:*.mp2=38;5;45:*.mod=38;5;45:*.xm=38;5;45:*.s3m=38;5;45:*.it=38;5;45:*~=38;5;239:*.bak=38;5;239:*.bak2=38;5;239:*.bak3=38;5;239:*.bak4=38;5;239:*.bak5=38;5;239:*.swp=38;5;239:*.bck=38;5;239:*.bk=38;5;239:*.old=38;5;239:*.tmp=38;5;239:*history=38;5;239:*hist=38;5;239:*.lesshst=38;5;239:*hsts=38;5;239:*.log=38;5;239:*.tmp=38;5;239:*.i18n=38;5;239:*.urlview=38;5;239:*dump=38;5;239:*template=38;5;239:*temp=38;5;239:*-errors=38;5;239:*.tmp*=38;5;239:*.save=38;5;229:*.rpmsave=38;5;229:*.rpmnew=38;5;229:*.rpmorig=38;5;229:*.rpmbak=38;5;229:*.notes=38;5;229:*.dpkg-new=38;5;229:*.conf.new=38;5;229:*NOTE*=38;5;229:*.save=38;5;229:*.rpmsave=38;5;229:*.rpmnew=38;5;229:*.rpmorig=38;5;229:'
export LS_COLORS
else
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00;35:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.bat=00;32:*.btm=00;32:*.dll=00;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:*.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:*.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
fi
#
# Set some basic aliases
#
{
alias o='less -FiRaX#.5'
alias l='/bin/ls -ANFv --group-directories-first --color=auto -T 0'
alias ll='/bin/ls -hAlNFsv --group-directories-first --color=auto -T 0'
alias cp='cp -v --sparse=auto --reflink=auto'
alias cpa='cp -v --preserve=all --sparse=auto --reflink=auto'
alias cpx='cp -avx --sparse=auto --reflink=auto'
alias cpz='cp -vZ --preserve=all --sparse=auto --reflink=auto'
alias mv='mv -v'
alias mvz='mv -vZ'
alias ln='ln -v'
alias mkdir='mkdir -v'
alias md='mkdir -pv'
alias mdz='mkdir -pvZ'
alias rm='rm -v --i=once --preserve-root'
alias rd='rmdir -v'
alias cl='clear'
alias grep='grep --color=auto'
alias dfa='/bin/df -halT | column -t'
alias chmodx='chmod +x'
alias sudo='sudo '
alias klogw='journalctl -kef'
alias jlogw='journalctl -ef'
# more verbose modinfo
modinfov() {
systool -m ${1+"$@"} -av
}
# which2
if /usr/bin/which -V 2>/dev/null | grep -q GNU 2>/dev/null; then
alias which2='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot'
fi
# Man
if [ -z "$MANPAGER" ] && [ ! -e /usr/bin/manpager ]; then
if [ -z "${PAGER}" ] || [ "${PAGER##*/bin/}" = less ]; then
man() {
env LESS_TERMCAP_mb="$(printf '\e[1;31m')" \
LESS_TERMCAP_md="$(printf '\e[38;5;33m')" \
LESS_TERMCAP_me="$(printf '\e[0m')" \
LESS_TERMCAP_se="$(printf '\e[0m')" \
LESS_TERMCAP_so="$(printf '\e[1;44;33m')" \
LESS_TERMCAP_ue="$(printf '\e[0m')" \
LESS_TERMCAP_us="$(printf '\e[38;5;136;4m')" \
GROFF_NO_SGR="yes" \
LESS='-FiRaX#.5' \
man "$@"
}
fi
fi
# ls permissions in digits
_lsp() {
( /bin/ls -alG "$@" ) | \
( awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o",k);print}' );
}
alias lsp=_lsp
#lesspipe.sh (https://github.com/wofr06/lesspipe/)
if [ -x /usr/local/bin/lesspipe.sh ]; then
less() {
env LESSOPEN="|/usr/local/bin/lesspipe.sh %s" \
LESSCLOSE='' \
LESSCHARSET="$(locale charmap 2>/dev/null)" \
LESS_ADVANCED_PREPROCESSOR='1' \
LESSQUIET='1' \
LESS=${LESS:-'-FiRaX#.5'} \
less "$@"
}
fi
# colordiff
if [ -x /usr/bin/colordiff ]; then
ccdiff() {
/usr/bin/colordiff ${1+"$@"} | LESS='-FiRaX#.5' less
}
fi
} 2>/dev/null || true
# Prevent double sourcing
if [ -z "$BASHRCREAD" ]; then
/usr/bin/tty -s || return 0
BASHRCREAD="Y"
#
# Interactive only
case $- in
*i*)
#
# aliases
#
if [ -e ~/.alias ] && [ -e ~/.bash_aliases ]; then
# Handle case of symlinked alias file
if [ "`readlink -sfq ~/.alias`" != "`readlink -sfq ~/.bash_aliases`" ]; then
test -s ~/.alias && . ~/.alias 2>/dev/null || true
test -s ~/.bash_aliases && . ~/.bash_aliases 2>/dev/null || true
else
test -s ~/.bash_aliases && . ~/.alias 2>/dev/null || true
fi
else
# One of these should exist, so avoid extra elifs and just test anyway.
test -s ~/.alias && . ~/.alias 2>/dev/null || true
test -s ~/.bash_aliases && . ~/.bash_aliases 2>/dev/null || true
fi
#
# Inputrc/readline settings
#
if test -n "$TERM" -a -z "$MC_SID" -a -t ; then
{
bind "set meta-flag on"
bind "set input-meta on"
bind "set output-meta on"
bind "set convert-meta off"
bind "set enable-meta-key off"
bind "set bell-style none"
bind "set show-all-if-ambiguous on"
bind "set show-all-if-unmodified on"
bind "set page-completions off"
bind "set completion-query-items 500"
bind "set completion-ignore-case on"
bind "set match-hidden-files on"
bind "set colored-stats on"
bind "set menu-complete-display-prefix off"
bind "set colored-completion-prefix on"
bind "set mark-directories on"
bind "set mark-symlinked-directories on"
bind "set skip-completed-text on"
bind "set meta-flag on"
bind "set input-meta on"
bind "set output-meta on"
bind "set convert-meta off"
bind "set enable-meta-key off"
bind "set bell-style none"
bind "set show-all-if-ambiguous on"
bind "set show-all-if-unmodified on"
bind "set page-completions off"
bind "set completion-query-items 500"
bind "set completion-ignore-case on"
bind "set match-hidden-files on"
bind "set colored-stats on"
bind "set menu-complete-display-prefix on"
bind "set colored-completion-prefix on"
bind "set mark-directories on"
bind "set mark-symlinked-directories on"
bind "set skip-completed-text on"
} 2>/dev/null || :
#
# Set window title of xterms, use __vte_prompt_command if available.
#
if [ -z "$PROMPT_COMMAND" ]; then
case "${TERM}" in
[aeEkx]term*|vte*|rxvt*|gnome*|konsole*|interix)
if [ "${VTE_VERSION:-0}" -ge 3405 ]; then
# prevent double sourcing of vte.sh
if ! command -v __vte_prompt_command >/dev/null 2>&1 ; then
if [ -r /etc/profile.d/vte.sh ]; then
. /etc/profile.d/vte.sh
elif [ -r /etc/profile.d/vte-3.91.sh ]; then
. /etc/profile.d/vte-3.91.sh
fi
fi
# Check vte.sh was loaded and we have __vte_prompt_command
if command -v __vte_prompt_command >/dev/null 2>&1 ; then
PROMPT_COMMAND="__vte_prompt_command"
else
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
fi
elif [ -n "$STY" ]; then ## # Some screen* terms lie about their $TERM
PROMPT_COMMAND='printf·"\033k%s@%s:%s\033\\"·"${USER}"·"${HOSTNAME%%.*}"·"${PWD/#$HOME/\~}"'
else
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
fi
;;
screen*)
PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
;;
*) ;;
esac
fi
#
# PROMPT
#
#show error code of last command.
prompt_errstatus() { local e=$?; [ $e != 0 ] && echo -e " $e"; }
#prompt_bang() { [ "$USER" = "root" ] && printf "%s" "#" || printf "%s" "\$"; }
if [ "$EUID" = 0 ] || [ "$USER" = "root" ]; then
PS1="\[\e[01;30m\]\A \[\e[00;31m\]\u\[\e[01;30m\]@\[\e[00;36m\]\h\[\e[01;30m\]:\[\e[00;34m\]\w\[\e[00;35m\]\$(prompt_errstatus)\[\e[00;31m\] \\$\[\e[00m\] "
else
PS1="\[\e[01;30m\]\A \[\e[00;32m\]\u\[\e[01;30m\]@\[\e[00;36m\]\h\[\e[01;30m\]:\[\e[00;34m\]\w\[\e[00;35m\]\$(prompt_errstatus)\[\e[00;32m\] \\$\[\e[00m\] "
fi
#
# Git info (no fancy colors just yellow)
#
if ! command -v __git_ps1 >/dev/null 2>&1 ; then
# Avoid double sourcing
if [ -r /etc/bash_completion.d/git-prompt.sh ]; then
. /etc/bash_completion.d/git-prompt.sh
elif [ -r /etc/bash_completion.d/git-prompt ]; then
. /etc/bash_completion.d/git-prompt
elif [ -r /usr/share/git-core/contrib/completion/git-prompt.sh ]; then
. /usr/share/git-core/contrib/completion/git-prompt.sh
fi
fi
# Check we have git info now and set some basic options
if command -v __git_ps1 >/dev/null 2>&1 ; then
GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
#GIT_PS1_SHOWUPSTREAM="verbose legacy git"
GIT_PS1_DESCRIBE_STYLE=default
#GIT_PS1_SHOWCOLORHINTS=1
# dirty sed ps1 hack to include __git_ps1
PS1="$(echo -n "$PS1" | sed "s|\\\w|\\\w\\\[\\\e[00;33m\\\]\$(__git_ps1 \" (%s)\")|")"
fi
fi
;;
*) return 0 ;;
esac
fi
# ex: ts=4 sw=4 et filetype=sh
#
# End: .bashrc
#
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment