# ____ _____ # | _ \_ _| Derek Taylor (DistroTube) # | | | || | http://www.youtube.com/c/DistroTube # | |_| || | http://www.gitlab.com/dwt1/ # |____/ |_| # # My bash config. Not much to see here; just some pretty standard stuff. ### EXPORT export TERM="xterm-256color" # getting proper colors export HISTCONTROL=ignoredups:erasedups # no duplicate entries export EDITOR="emacsclient -t -a ''" # $EDITOR use Emacs in terminal export VISUAL="emacsclient -c -a emacs" # $VISUAL use Emacs in GUI mode ### SET FZF DEFAULTS export FZF_DEFAULT_OPTS="--layout=reverse --exact --border=bold --border=rounded --margin=3% --color=dark" ### SET MANPAGER ### Uncomment only one of these! ### "nvim" as manpager export MANPAGER="nvim +Man!" ### "less" as manpager # export MANPAGER="less" ### SET VI MODE ### # Comment this line out to enable default emacs-like bindings set -o vi bind -m vi-command 'Control-l: clear-screen' bind -m vi-insert 'Control-l: clear-screen' # If not running interactively, don't do anything [[ $- != *i* ]] && return ### PROMPT # This is commented out if using starship prompt # PS1='[\u@\h \W]\$ ' ### PATH if [ -d "$HOME/.bin" ] ; then PATH="$HOME/.bin:$PATH" fi if [ -d "$HOME/.local/bin" ] ; then PATH="$HOME/.local/bin:$PATH" fi if [ -d "$HOME/.emacs.d/bin" ] ; then PATH="$HOME/.emacs.d/bin:$PATH" fi if [ -d "$HOME/Applications" ] ; then PATH="$HOME/Applications:$PATH" fi if [ -d "/var/lib/flatpak/exports/bin/" ] ; then PATH="/var/lib/flatpak/exports/bin/:$PATH" fi if [ -d "$HOME/.config/emacs/bin/" ] ; then PATH="$HOME/.config/emacs/bin/:$PATH" fi ### SETTING OTHER ENVIRONMENT VARIABLES if [ -z "$XDG_CONFIG_HOME" ] ; then export XDG_CONFIG_HOME="$HOME/.config" fi if [ -z "$XDG_DATA_HOME" ] ; then export XDG_DATA_HOME="$HOME/.local/share" fi if [ -z "$XDG_CACHE_HOME" ] ; then export XDG_CACHE_HOME="$HOME/.cache" fi export XMONAD_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/xmonad" # xmonad.hs is expected to stay here export XMONAD_DATA_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/xmonad" export XMONAD_CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/xmonad" ### CHANGE TITLE OF TERMINALS case ${TERM} in xterm*|rxvt*|Eterm*|aterm|kterm|gnome*|alacritty|st|konsole*) PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\007"' ;; screen*) PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\033\\"' ;; esac ### SHOPT shopt -s autocd # change to named directory shopt -s cdspell # autocorrects cd misspellings shopt -s cmdhist # save multi-line commands in history as single line shopt -s dotglob shopt -s histappend # do not overwrite history shopt -s expand_aliases # expand aliases shopt -s checkwinsize # checks term size when bash regains control #ignore upper and lowercase when TAB completion bind "set completion-ignore-case on" ### COUNTDOWN cdown () { N=$1 while [[ $((--N)) -gt 0 ]] do echo "$N" | figlet -c | lolcat && sleep 1 done } ### Function extract for common file formats ### SAVEIFS=$IFS IFS=$(echo -en "\n\b") ### ARCHIVE EXTRACTION # usage: ex function ex { if [ -z "$1" ]; then # display usage if no parameters given echo "Usage: ex ." echo " extract [path/file_name_2.ext] [path/file_name_3.ext]" else for n in "$@" do if [ -f "$n" ] ; then case "${n%,}" in *.cbt|*.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar) tar xvf "$n" ;; *.lzma) unlzma ./"$n" ;; *.bz2) bunzip2 ./"$n" ;; *.cbr|*.rar) unrar x -ad ./"$n" ;; *.gz) gunzip ./"$n" ;; *.cbz|*.epub|*.zip) unzip ./"$n" ;; *.z) uncompress ./"$n" ;; *.7z|*.arj|*.cab|*.cb7|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.pkg|*.rpm|*.udf|*.wim|*.xar) 7z x ./"$n" ;; *.xz) unxz ./"$n" ;; *.exe) cabextract ./"$n" ;; *.cpio) cpio -id < ./"$n" ;; *.cba|*.ace) unace x ./"$n" ;; *) echo "ex: '$n' - unknown archive method" return 1 ;; esac else echo "'$n' - file does not exist" return 1 fi done fi } IFS=$SAVEIFS # navigation up () { local d="" local limit="$1" # Default to limit of 1 if [ -z "$limit" ] || [ "$limit" -le 0 ]; then limit=1 fi for ((i=1;i<=limit;i++)); do d="../$d" done # perform cd. Show error if cd fails if ! cd "$d"; then echo "Couldn't go up $limit dirs."; fi } ### ALIASES ### # navigation alias ..='cd ..' alias ...='cd ../..' alias .3='cd ../../..' alias .4='cd ../../../..' alias .5='cd ../../../../..' # vim and emacs alias vim="nvim" alias emacs="emacsclient -c -a 'emacs'" # GUI versions of Emacs alias em="/usr/bin/emacsclient -nw" # Terminal version of Emacs alias rem="killall emacs || echo 'Emacs server not running'; /usr/bin/emacs --daemon" # Kill Emacs and restart daemon.. # Changing "ls" to "eza" alias ls='eza -al --color=always --group-directories-first' # my preferred listing alias la='eza -a --color=always --group-directories-first' # all files and dirs alias ll='eza -l --color=always --group-directories-first' # long format alias lt='eza -aT --color=always --group-directories-first' # tree listing alias l.='eza -al --color=always --group-directories-first ../' # ls on the PARENT directory alias l..='eza -al --color=always --group-directories-first ../../' # ls on directory 2 levels up alias l...='eza -al --color=always --group-directories-first ../../../' # ls on directory 3 levels up # pacman and yay alias pacsyu='sudo pacman -Syu' # update only standard pkgs alias pacsyyu='sudo pacman -Syyu' # Refresh pkglist & update standard pkgs alias parsua='paru -Sua --noconfirm' # update only AUR pkgs (paru) alias parsyu='paru -Syu --noconfirm' # update standard pkgs and AUR pkgs (paru) alias unlock='sudo rm /var/lib/pacman/db.lck' # remove pacman lock alias orphan='sudo pacman -Rns $(pacman -Qtdq)' # remove orphaned packages (DANGEROUS!) # get fastest mirrors alias mirror="sudo reflector -f 30 -l 30 --number 10 --verbose --save /etc/pacman.d/mirrorlist" alias mirrord="sudo reflector --latest 50 --number 20 --sort delay --save /etc/pacman.d/mirrorlist" alias mirrors="sudo reflector --latest 50 --number 20 --sort score --save /etc/pacman.d/mirrorlist" alias mirrora="sudo reflector --latest 50 --number 20 --sort age --save /etc/pacman.d/mirrorlist" # adding flags alias df='df -h' # human-readable sizes alias free='free -m' # show sizes in MB alias grep='grep --color=auto' # colorize output (good for log files) # ps alias psa="ps auxf" alias psgrep="ps aux | grep -v grep | grep -i -e VSZ -e" alias psmem='ps auxf | sort -nr -k 4' alias pscpu='ps auxf | sort -nr -k 3' # Merge Xresources alias merge='xrdb -merge ~/.Xresources' # git alias addup='git add -u' alias addall='git add .' alias branch='git branch' alias checkout='git checkout' alias clone='git clone' alias commit='git commit -m' alias fetch='git fetch' alias pull='git pull origin' alias push='git push origin' alias stat='git status' # 'status' is protected name so using 'stat' instead alias tag='git tag' alias newtag='git tag -a' # get error messages from journalctl alias jctl="journalctl -p 3 -xb" # gpg encryption # verify signature for isos alias gpg-check="gpg2 --keyserver-options auto-key-retrieve --verify" # receive the key of a developer alias gpg-retrieve="gpg2 --keyserver-options auto-key-retrieve --receive-keys" # change your default USER shell alias tobash="chsh $USER -s /bin/bash && echo 'Log out and log back in for change to take effect.'" alias tozsh="chsh $USER -s /bin/zsh && echo 'Log out and log back in for change to take effect.'" alias tofish="chsh $USER -s /bin/fish && echo 'Log out and log back in for change to take effect.'" # bigger font in tty and regular font in tty alias bigfont="setfont ter-132b" alias regfont="setfont default8x16" # bare git repo alias for managing my dotfiles alias config="/usr/bin/git --git-dir=$HOME/dotfiles --work-tree=$HOME" # termbin alias tb="nc termbin.com 9999" # the terminal rickroll alias rr='curl -s -L https://raw.githubusercontent.com/keroserene/rickrollrc/master/roll.sh | bash' ### RANDOM COLOR SCRIPT ### # Get this script from my GitLab: gitlab.com/dwt1/shell-color-scripts # Or install it from the Arch User Repository: shell-color-scripts colorscript random ### SETTING THE STARSHIP PROMPT ### eval "$(starship init bash)" ### FZF ### # Enables the following keybindings: # CTRL-t = fzf select # CTRL-r = fzf history # ALT-c = fzf cd eval "$(fzf --bash)"