Move all config files outside or dotfiles folder
This commit is contained in:
447
bash.org
Normal file
447
bash.org
Normal file
@@ -0,0 +1,447 @@
|
||||
#+TITLE: Bash Configuration
|
||||
:DRAWER:
|
||||
#+STARTUP: overview
|
||||
|
||||
#+LANGUAGE: en
|
||||
#+EMAIL: dehaeze.thomas@gmail.com
|
||||
#+AUTHOR: Dehaeze Thomas
|
||||
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="./js/readtheorg.js"></script>
|
||||
:END:
|
||||
|
||||
* Bashrc
|
||||
:PROPERTIES:
|
||||
:header-args:bash: :tangle ~/.bashrc
|
||||
:header-args:bash+: :comments both :mkdirp yes
|
||||
:END:
|
||||
|
||||
** What does that do?
|
||||
#+BEGIN_SRC bash
|
||||
[[ $- != *i* ]] && return
|
||||
#+END_SRC
|
||||
|
||||
** Bash Completion
|
||||
#+BEGIN_SRC bash
|
||||
[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
|
||||
#+END_SRC
|
||||
|
||||
** Ignore case for autocompletion
|
||||
#+BEGIN_SRC bash
|
||||
bind "set completion-ignore-case on"
|
||||
bind "set show-all-if-ambiguous on"
|
||||
#+END_SRC
|
||||
|
||||
** Use Color
|
||||
#+BEGIN_SRC bash
|
||||
use_color=true
|
||||
alias ls='ls -hN --color=auto --group-directories-first'
|
||||
alias grep='grep --colour=auto'
|
||||
#+END_SRC
|
||||
|
||||
** 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 bash
|
||||
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
|
||||
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
|
||||
|
||||
** Some config
|
||||
#+BEGIN_SRC bash
|
||||
unset use_color safe_term match_lhs sh
|
||||
|
||||
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
|
||||
|
||||
** Prompt
|
||||
#+BEGIN_SRC bash
|
||||
export PS1="\[$(tput bold)\]\[$(tput setaf 1)\][\[$(tput setaf 3)\]\u\[$(tput setaf 2)\]@\[$(tput setaf 4)\]\h \[$(tput setaf 5)\]\W\[$(tput setaf 1)\]]\[$(tput setaf 7)\]\\$ \[$(tput sgr0)\]"
|
||||
#+END_SRC
|
||||
|
||||
** SSH Agent
|
||||
#+begin_src bash
|
||||
# if ! pgrep -u "$USER" ssh-agent > /dev/null; then
|
||||
# ssh-agent > "$XDG_RUNTIME_DIR/ssh-agent.env"
|
||||
# fi
|
||||
# if [[ ! "$SSH_AUTH_SOCK" ]]; then
|
||||
# eval "$(<"$XDG_RUNTIME_DIR/ssh-agent.env")"
|
||||
# fi
|
||||
#+end_src
|
||||
|
||||
** Rebind up and down arrow keys to search through bash history
|
||||
#+BEGIN_SRC bash
|
||||
bind '"\e[A": history-search-backward'
|
||||
bind '"\e[B": history-search-forward'
|
||||
#+END_SRC
|
||||
|
||||
** Aliases
|
||||
*** Better defaults for some commands
|
||||
#+BEGIN_SRC bash
|
||||
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"
|
||||
alias tmux='tmux -f $XDG_CONFIG_HOME/tmux/tmux.conf'
|
||||
#+END_SRC
|
||||
|
||||
*** One letter aliases
|
||||
#+BEGIN_SRC bash
|
||||
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"
|
||||
alias x="sxiv -ft *"
|
||||
#+END_SRC
|
||||
|
||||
*** Neovim
|
||||
#+begin_src bash
|
||||
command -v nvim >/dev/null && alias vim="nvim" vimdiff="nvim -d" # Use neovim for vim if present.
|
||||
#+end_src
|
||||
|
||||
*** Magit
|
||||
#+BEGIN_SRC bash
|
||||
# alias magit="emacsclient -create-frame --alternate-editor=\"\" --eval '(magit-status)'"
|
||||
alias magit="nvim -c MagitOnly"
|
||||
#+END_SRC
|
||||
|
||||
*** Homelab Relative
|
||||
#+begin_src bash
|
||||
alias dlab="aria2p --port 6800 --host http://dl.tdehaeze.xyz --secret $(pass dl.tdehaeze.xyz/tdehaeze | sed -n 1p)"
|
||||
#+end_src
|
||||
|
||||
*** Vim-like
|
||||
#+BEGIN_SRC bash
|
||||
alias :q=exit
|
||||
alias :e=nvim
|
||||
#+END_SRC
|
||||
|
||||
*** Print each PATH entry on a separate line
|
||||
#+BEGIN_SRC bash
|
||||
alias path='echo -e ${PATH//:/\\n}'
|
||||
#+END_SRC
|
||||
|
||||
** Functions
|
||||
*** Display colors
|
||||
#+BEGIN_SRC bash
|
||||
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
|
||||
|
||||
*** 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 bash
|
||||
function tre() {
|
||||
tree -aC -I '.git|node_modules|bower_components' --dirsfirst "$@" | less -FRNX;
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
*** Create a new directory and enter it
|
||||
#+BEGIN_SRC bash
|
||||
function mkd() {
|
||||
mkdir -p "$@" && cd "$_";
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
*** Filesize of directory
|
||||
#+BEGIN_SRC bash
|
||||
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 bash
|
||||
function nullify() {
|
||||
"$@" >/dev/null 2>&1
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
*** Send SMS
|
||||
https://doronbehar.com/articles/using-kdeconnect-to-comfortably-send-sms-messages-from-the-shell/#kdeconnects-builtin-sms-interface
|
||||
#+begin_src bash
|
||||
sms(){
|
||||
local args="$@"
|
||||
# local phone_number name phone_type
|
||||
# khard phone --parsable | sort -u | fzf | IFS=$'\t' read -r phone_number name phone_type
|
||||
local phone_number=$(khard phone --parsable | sort -u | fzf | cut -f1 -d$'\t')
|
||||
if [[ -z "${phone_number}" ]]; then
|
||||
echo No recipient was chosen >&2
|
||||
return
|
||||
else
|
||||
# echo "${name}"$'\t'"${phone_number}"$'\t'"${phone_type}" > ${_KDECONNECT_SMS_LAST_RECIPIENT}
|
||||
kdeconnect-cli --send-sms "${args}" --destination "${phone_number}" --device 4de3b5de2264a17c
|
||||
# kdeconnect-cli --device ${_KDECONNECT_DEFAULT_DEVICE} --send-sms "${args}" --destination "${phone_number}" && \
|
||||
# echo sent sms message to ${name} | fribidi
|
||||
fi
|
||||
}
|
||||
|
||||
#+end_src
|
||||
** Bash History
|
||||
Undocumented feature which sets the size to "unlimited". http://stackoverflow.com/questions/9457233/unlimited-bash-history
|
||||
|
||||
#+BEGIN_SRC bash
|
||||
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 bash
|
||||
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 bash
|
||||
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
|
||||
#+END_SRC
|
||||
|
||||
* Bash Profile
|
||||
:PROPERTIES:
|
||||
:header-args:bash: :tangle ~/.bash_profile
|
||||
:header-args:bash+: :comments both :mkdirp yes
|
||||
:END:
|
||||
|
||||
#+BEGIN_SRC bash
|
||||
[[ -f ~/.profile ]] && . ~/.profile
|
||||
[[ -f ~/.bashrc ]] && . ~/.bashrc
|
||||
#+END_SRC
|
||||
|
||||
* Profile
|
||||
:PROPERTIES:
|
||||
:header-args:bash: :tangle ~/.profile
|
||||
:header-args:bash+: :comments both :mkdirp yes
|
||||
:END:
|
||||
|
||||
** QT And GTK Themes
|
||||
#+begin_src bash
|
||||
export QT_QPA_PLATFORMTHEME="qt5ct"
|
||||
export GTK2_RC_FILES="$HOME/.gtkrc-2.0"
|
||||
#+END_SRC
|
||||
|
||||
** Gui program to ask for sudo password
|
||||
#+begin_src bash
|
||||
export SUDO_ASKPASS=~/.local/bin/askpass-rofi
|
||||
#+END_SRC
|
||||
|
||||
** Gnome Keyring Daemon
|
||||
#+begin_src bash
|
||||
if [ -n "$DESKTOP_SESSION" ];then
|
||||
eval $(gnome-keyring-daemon --start)
|
||||
export SSH_AUTH_SOCK
|
||||
fi
|
||||
#+end_src
|
||||
|
||||
** Default
|
||||
#+begin_src bash
|
||||
export EDITOR="nvim"
|
||||
export TERMINAL="termite"
|
||||
export BROWSER="qutebrowser"
|
||||
export READER="zathura"
|
||||
export FILE="ranger"
|
||||
#+END_SRC
|
||||
|
||||
** Exports
|
||||
*** Term
|
||||
This is important for termite to work when sshing in remote machines.
|
||||
#+begin_src bash
|
||||
export TERM=xterm-color
|
||||
#+end_src
|
||||
|
||||
*** XDG Default
|
||||
#+begin_src bash
|
||||
export XDG_CONFIG_HOME="$HOME/.config"
|
||||
#+end_src
|
||||
|
||||
*** Better yaourt colors
|
||||
#+begin_src bash
|
||||
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 bash
|
||||
export FZF_DEFAULT_COMMAND='rg --files --no-ignore --hidden --follow --glob "!.git/*"'
|
||||
export FZF_DEFAULT_OPTS='--layout=reverse --height=20'
|
||||
#+end_src
|
||||
|
||||
*** Goland
|
||||
#+begin_src bash
|
||||
export GOPATH=$HOME/go
|
||||
#+end_src
|
||||
|
||||
*** Latex Path
|
||||
#+begin_src bash
|
||||
export TEXMFHOME=$HOME/.local/share/texmf
|
||||
#+end_src
|
||||
|
||||
*** Bitwarden Session
|
||||
#+begin_src bash
|
||||
export BW_SESSION="HH0yycfocRSuGtq/iW1e6v13PQ1sShMXbMhdb/En94S6OcIXFnJlLEyU+dySsmf2YShY4CImoB5FrxgdPsY9Qw=="
|
||||
#+end_src
|
||||
|
||||
** Path
|
||||
#+begin_src bash
|
||||
PATH=$HOME/appimages:$PATH
|
||||
PATH=$HOME/.gem/ruby/2.5.0/bin:$PATH
|
||||
PATH=$GOPATH:$GOPATH/bin:$PATH
|
||||
PATH=~/.local/bin:$PATH
|
||||
PATH=~/.emacs.d/bin:$PATH
|
||||
export PATH
|
||||
#+END_SRC
|
||||
|
||||
* Input
|
||||
:PROPERTIES:
|
||||
:header-args: :tangle ~/.inputrc
|
||||
:header-args+: :comments both :mkdirp yes
|
||||
:END:
|
||||
|
||||
Completion:
|
||||
#+BEGIN_SRC conf
|
||||
# Single tab for autocompletion
|
||||
set show-all-if-ambiguous on
|
||||
|
||||
# Ignore case for completion
|
||||
set completion-ignore-case on
|
||||
#+END_SRC
|
||||
|
||||
vi mode:
|
||||
#+BEGIN_SRC conf
|
||||
# VI mode (works in bash and zsh)
|
||||
set editing-mode vi
|
||||
|
||||
# Show which mode (normal or insert)
|
||||
set show-mode-in-prompt on
|
||||
|
||||
# Show the mode by changing the cursor
|
||||
set vi-ins-mode-string \1\e[6 q\2
|
||||
set vi-cmd-mode-string \1\e[2 q\2
|
||||
#+END_SRC
|
||||
|
||||
Key-bindings for vi-mode:
|
||||
#+BEGIN_SRC conf
|
||||
set keymap vi-command
|
||||
# these are for vi-command mode
|
||||
Control-l: clear-screen
|
||||
Control-a: beginning-of-line
|
||||
Control-e: end-of-line
|
||||
Control-w: "\C-aisudo \C-e"
|
||||
|
||||
set keymap vi-insert
|
||||
# these are for vi-insert mode
|
||||
Control-l: clear-screen
|
||||
Control-a: beginning-of-line
|
||||
Control-e: end-of-line
|
||||
Control-w: "\C-asudo \C-e"
|
||||
#+END_SRC
|
||||
|
||||
Colorized completion
|
||||
#+begin_src conf
|
||||
# Color files by types
|
||||
set colored-stats On
|
||||
# Append char to indicate type
|
||||
set visible-stats On
|
||||
# Mark symlinked directories
|
||||
set mark-symlinked-directories On
|
||||
# Color the common prefix
|
||||
set colored-completion-prefix On
|
||||
# Color the common prefix in menu-complete
|
||||
set menu-complete-display-prefix On
|
||||
#+end_src
|
||||
|
||||
Don't echo =^C= after =Ctrl+C= is pressed.
|
||||
#+begin_src conf
|
||||
set echo-control-characters off
|
||||
#+end_src
|
||||
Reference in New Issue
Block a user