405 lines
9.9 KiB
Org Mode
405 lines
9.9 KiB
Org Mode
#+TITLE: Bash Configuration
|
|
|
|
* Bashrc
|
|
:PROPERTIES:
|
|
:header-args:conf: :tangle ~/.bashrc
|
|
:header-args:conf+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
** TODO What does that do?
|
|
#+BEGIN_SRC conf
|
|
[[ $- != *i* ]] && return
|
|
#+END_SRC
|
|
|
|
** Bash Completion
|
|
#+BEGIN_SRC conf
|
|
[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
|
|
#+END_SRC
|
|
|
|
** Change the window title of X terminals
|
|
#+BEGIN_SRC conf
|
|
case ${TERM} in
|
|
xterm*|rxvt*|Eterm*|aterm|kterm|gnome*|interix|konsole*)
|
|
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\007"'
|
|
;;
|
|
screen*)
|
|
PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\033\\"'
|
|
;;
|
|
esac
|
|
#+END_SRC
|
|
|
|
** Use Color
|
|
#+BEGIN_SRC conf
|
|
use_color=true
|
|
#+END_SRC
|
|
|
|
** TODO Set colorful PS1 only on colorful terminals.
|
|
dircolors --print-database uses its own built-in database instead of using /etc/DIR_COLORS. Try to use the external file first to take advantage of user additions. Use internal bash globbing instead of external grep binary.
|
|
|
|
#+BEGIN_SRC conf
|
|
safe_term=${TERM//[^[:alnum:]]/?} # sanitize TERM
|
|
match_lhs=""
|
|
[[ -f ~/.dir_colors ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"
|
|
[[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"
|
|
[[ -z ${match_lhs} ]] \
|
|
&& type -P dircolors >/dev/null \
|
|
&& match_lhs=$(dircolors --print-database)
|
|
[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true
|
|
|
|
if ${use_color} ; then
|
|
# Enable colors for ls, etc. Prefer ~/.dir_colors #64489
|
|
if type -P dircolors >/dev/null ; then
|
|
if [[ -f ~/.dir_colors ]] ; then
|
|
eval $(dircolors -b ~/.dir_colors)
|
|
elif [[ -f /etc/DIR_COLORS ]] ; then
|
|
eval $(dircolors -b /etc/DIR_COLORS)
|
|
fi
|
|
fi
|
|
|
|
if [[ ${EUID} == 0 ]] ; then
|
|
PS1='\[\033[01;31m\][\h\[\033[01;36m\] \W\[\033[01;31m\]]\$\[\033[00m\] '
|
|
else
|
|
PS1='\[\033[01;32m\][\u@\h\[\033[01;37m\] \W\[\033[01;32m\]]\$\[\033[00m\] '
|
|
fi
|
|
|
|
alias ls='ls --color=auto'
|
|
alias grep='grep --colour=auto'
|
|
alias egrep='egrep --colour=auto'
|
|
alias fgrep='fgrep --colour=auto'
|
|
else
|
|
if [[ ${EUID} == 0 ]] ; then
|
|
# show root@ when we don't have colors
|
|
PS1='\u@\h \W \$ '
|
|
else
|
|
PS1='\u@\h \w \$ '
|
|
fi
|
|
fi
|
|
#+END_SRC
|
|
|
|
#+BEGIN_SRC conf
|
|
unset use_color safe_term match_lhs sh
|
|
#+END_SRC
|
|
|
|
#+BEGIN_SRC conf
|
|
xhost +local:root > /dev/null 2>&1
|
|
|
|
complete -cf sudo
|
|
|
|
# Line wrap on window resize
|
|
shopt -s checkwinsize
|
|
|
|
shopt -s expand_aliases
|
|
|
|
# Auto "cd" when entering just a path
|
|
shopt -s autocd
|
|
|
|
# Enable history appending instead of overwriting
|
|
shopt -s histappend
|
|
#+END_SRC
|
|
|
|
** Rebind up and down arrow keys to search through bash history
|
|
#+BEGIN_SRC conf
|
|
bind '"\e[A": history-search-backward'
|
|
bind '"\e[B": history-search-forward'
|
|
#+END_SRC
|
|
|
|
** Aliases
|
|
*** Better defaults for some commands
|
|
#+BEGIN_SRC conf
|
|
alias cp="cp -i" # confirm before overwriting something
|
|
alias df='df -h' # human-readable sizes
|
|
alias free='free -m' # show sizes in MB
|
|
alias mutt="neomutt"
|
|
#+END_SRC
|
|
|
|
*** One letter aliases
|
|
#+BEGIN_SRC conf
|
|
alias r="ranger"
|
|
alias t="tmux"
|
|
alias v="nvim"
|
|
alias sv='sudo -E nvim'
|
|
alias g="git"
|
|
alias m="neomutt"
|
|
alias y="yadm"
|
|
alias o="xdg-open"
|
|
#+END_SRC
|
|
|
|
*** Magit
|
|
#+BEGIN_SRC conf
|
|
alias magit="emacsclient -create-frame --alternate-editor=\"\" --eval '(magit-status)'"
|
|
#+END_SRC
|
|
|
|
*** Vim-like
|
|
#+BEGIN_SRC conf
|
|
alias :q=exit
|
|
alias :e=nvim
|
|
#+END_SRC
|
|
|
|
*** Youtube
|
|
#+BEGIN_SRC conf
|
|
alias yt="youtube-dl --add-metadata -ic" # Download video link
|
|
alias yta="yt -x -f bestaudio/best" # Download only audio
|
|
#+END_SRC
|
|
|
|
*** Print each PATH entry on a separate line
|
|
#+BEGIN_SRC conf
|
|
alias path='echo -e ${PATH//:/\\n}'
|
|
#+END_SRC
|
|
|
|
*** TODO [#B] IP addresses - Remove the use of =dig= and =ifconfig=
|
|
Use =addr= instead
|
|
#+BEGIN_SRC conf
|
|
# alias ip="dig +short myip.opendns.com @resolver1.opendns.com"
|
|
# alias localip="ip route get 8.8.4.4 | head -1 | awk '{print $7}'"
|
|
# alias ips="ifconfig -a | grep -o 'inet6\? \(addr:\)\?\s\?\(\(\([0-9]\+\.\)\{3\}[0-9]\+\)\|[a-fA-F0-9:]\+\)' | awk '{ sub(/inet6? (addr:)? ?/, \"\"); print }'"
|
|
#+END_SRC
|
|
|
|
** Functions
|
|
*** Display colors
|
|
#+BEGIN_SRC conf
|
|
colors() {
|
|
local fgc bgc vals seq0
|
|
|
|
printf "Color escapes are %s\n" '\e[${value};...;${value}m'
|
|
printf "Values 30..37 are \e[33mforeground colors\e[m\n"
|
|
printf "Values 40..47 are \e[43mbackground colors\e[m\n"
|
|
printf "Value 1 gives a \e[1mbold-faced look\e[m\n\n"
|
|
|
|
# foreground colors
|
|
for fgc in {30..37}; do
|
|
# background colors
|
|
for bgc in {40..47}; do
|
|
fgc=${fgc#37} # white
|
|
bgc=${bgc#40} # black
|
|
|
|
vals="${fgc:+$fgc;}${bgc}"
|
|
vals=${vals%%;}
|
|
|
|
seq0="${vals:+\e[${vals}m}"
|
|
printf " %-9s" "${seq0:-(default)}"
|
|
printf " ${seq0}TEXT\e[m"
|
|
printf " \e[${vals:+${vals+$vals;}}1mBOLD\e[m"
|
|
done
|
|
echo; echo
|
|
done
|
|
}
|
|
#+END_SRC
|
|
|
|
*** TODO Meteo - Is Dig mandatory?
|
|
To install =dig=, use =yay -S bind-tools=
|
|
|
|
#+BEGIN_SRC conf
|
|
meteo() {
|
|
if [ -n "$*" ]; then
|
|
address="wttr.in/"
|
|
address+=$*
|
|
address+="?lang=fr"
|
|
curl "$address"
|
|
else
|
|
address="wttr.in/"
|
|
address+=$(ip)
|
|
address+="?lang=fr"
|
|
curl "$address"
|
|
fi
|
|
}
|
|
alias meteo=meteo
|
|
#+END_SRC
|
|
|
|
*** TODO Upload using transfer.sh
|
|
#+BEGIN_SRC conf
|
|
upload() {
|
|
# write to output to tmpfile because of progress bar
|
|
tmpfile=$(mktemp -t transferXXX)
|
|
# basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9]/-/g')
|
|
curl --progress-bar --upload-file "$1" "https://transfer.sh/" >> $tmpfile;
|
|
cat $tmpfile | xclip -selection clipboard;
|
|
echo "Copied:" $(cat $tmpfile);
|
|
rm -f $tmpfile;
|
|
}
|
|
alias upload=upload
|
|
#+END_SRC
|
|
|
|
*** TODO Upload alternative
|
|
#+BEGIN_SRC conf
|
|
transfer() {
|
|
curl --progress-bar --upload-file "$1" https://transfer.sh/$(basename $1) | xclip -in -selection clipboard;
|
|
}
|
|
alias transfer=transfer
|
|
#+END_SRC
|
|
|
|
*** Extract archive
|
|
usage: ex <file>
|
|
|
|
#+BEGIN_SRC conf
|
|
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
|
|
}
|
|
#+END_SRC
|
|
|
|
*** Tree display
|
|
=tre= is a shorthand for =tree= with hidden files and color enabled, ignoring
|
|
the =.git= directory, listing directories first. The output gets piped into
|
|
=less= with options to preserve color and line numbers, unless the output is
|
|
small enough for one screen.
|
|
|
|
#+BEGIN_SRC conf
|
|
function tre() {
|
|
tree -aC -I '.git|node_modules|bower_components' --dirsfirst "$@" | less -FRNX;
|
|
}
|
|
#+END_SRC
|
|
|
|
*** Create a new directory and enter it
|
|
#+BEGIN_SRC conf
|
|
function mkd() {
|
|
mkdir -p "$@" && cd "$_";
|
|
}
|
|
#+END_SRC
|
|
|
|
*** Filesize of directory
|
|
#+BEGIN_SRC conf
|
|
function fs() {
|
|
if du -b /dev/null > /dev/null 2>&1; then
|
|
local arg=-sbh;
|
|
else
|
|
local arg=-sh;
|
|
fi
|
|
if [[ -n "$@" ]]; then
|
|
du $arg -- "$@";
|
|
else
|
|
du $arg .[^.]* ./*;
|
|
fi;
|
|
}
|
|
#+END_SRC
|
|
|
|
*** Redirect both standard output and standard error, as well as sending to background
|
|
#+BEGIN_SRC conf
|
|
function nullify() {
|
|
"$@" >/dev/null 2>&1
|
|
}
|
|
#+END_SRC
|
|
|
|
** Prompt
|
|
#+BEGIN_SRC conf
|
|
if [ "`id -u`" -eq 0 ]; then
|
|
PS1="\[\033[m\]|\[\033[1;35m\]\t\[\033[m\]|\[\e[1;31m\]\u\[\e[1;36m\]\[\033[m\]@\[\e[1;36m\]\h\[\033[m\]:\[\e[0m\]\[\e[1;32m\][\W]> \[\e[0m\]"
|
|
else
|
|
PS1="\[\033[m\]|\[\033[1;35m\]\t\[\033[m\]|\[\e[1m\]\u\[\e[1;36m\]\[\033[m\]@\[\e[1;36m\]\h\[\033[m\]:\[\e[0m\]\[\e[1;32m\][\W]> \[\e[0m\]"
|
|
fi
|
|
#+END_SRC
|
|
|
|
** Exports
|
|
#+BEGIN_SRC conf
|
|
export TERM=xterm-256color
|
|
#+END_SRC
|
|
|
|
*** Better yaourt colors
|
|
#+BEGIN_SRC conf
|
|
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"
|
|
#+END_SRC
|
|
|
|
*** Use Ripgrep for FZF
|
|
#+BEGIN_SRC conf
|
|
export FZF_DEFAULT_COMMAND='rg --files --no-ignore --hidden --follow --glob "!.git/*"'
|
|
#+END_SRC
|
|
|
|
*** Goland
|
|
#+BEGIN_SRC conf
|
|
export GOPATH=$HOME/go
|
|
PATH=$GOPATH:$GOPATH/bin:$PATH
|
|
export PATH
|
|
#+END_SRC
|
|
|
|
** Bash History
|
|
Undocumented feature which sets the size to "unlimited". http://stackoverflow.com/questions/9457233/unlimited-bash-history
|
|
|
|
#+BEGIN_SRC conf
|
|
export HISTFILESIZE=
|
|
export HISTSIZE=
|
|
export HISTTIMEFORMAT="[%F %T] "
|
|
#+END_SRC
|
|
|
|
Change the file location because certain bash sessions truncate =.bash_history= file upon close. http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
|
|
|
|
#+BEGIN_SRC conf
|
|
export HISTFILE=~/.bash_eternal_history
|
|
#+END_SRC
|
|
|
|
Force prompt to write history after every command. http://superuser.com/questions/20900/bash-history-loss
|
|
|
|
#+BEGIN_SRC conf
|
|
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
|
|
#+END_SRC
|
|
|
|
** Base16 Shell
|
|
#+BEGIN_SRC conf
|
|
BASE16_SHELL="$HOME/.base16-manager/chriskempson/base16-shell/"
|
|
[ -n "$PS1" ] && \
|
|
[ -s "$BASE16_SHELL/profile_helper.sh" ] && \
|
|
eval "$("$BASE16_SHELL/profile_helper.sh")"
|
|
#+END_SRC
|
|
|
|
* Bash Profile
|
|
:PROPERTIES:
|
|
:header-args:conf: :tangle ~/.bash_profile
|
|
:header-args:conf+: :comments both :mkdirp yes
|
|
:END:
|
|
** Ignore case for autocompletion
|
|
#+BEGIN_SRC conf
|
|
bind "set completion-ignore-case on"
|
|
bind "set show-all-if-ambiguous on"
|
|
#+END_SRC
|
|
|
|
** Source bashrc
|
|
#+BEGIN_SRC conf
|
|
[[ -f ~/.bashrc ]] && . ~/.bashrc
|
|
#+END_SRC
|
|
|
|
* Profile
|
|
:PROPERTIES:
|
|
:header-args:conf: :tangle ~/.profile
|
|
:header-args:conf+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
** QT And GTK Themes
|
|
#+BEGIN_SRC conf
|
|
export QT_QPA_PLATFORMTHEME="qt5ct"
|
|
export GTK2_RC_FILES="$HOME/.gtkrc-2.0"
|
|
#+END_SRC
|
|
|
|
** Gui program to ask for sudo password
|
|
#+BEGIN_SRC conf
|
|
export SUDO_ASKPASS=~/bin/askpass-rofi
|
|
#+END_SRC
|
|
|
|
** Default
|
|
#+BEGIN_SRC conf
|
|
export EDITOR=/usr/bin/nvim
|
|
export BROWSER=/usr/bin/qutebrowser
|
|
#+END_SRC
|
|
|
|
** Path
|
|
#+BEGIN_SRC conf
|
|
PATH=$HOME/appimages:$PATH
|
|
PATH=$HOME/.gem/ruby/2.5.0/bin:$PATH
|
|
PATH=~/bin:$PATH
|
|
export PATH
|
|
#+END_SRC
|