Advertisement
Guest User

archlinux bashrc

a guest
Sep 24th, 2022
1,708
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 8.57 KB | Source Code | 0 0
  1. #!/bin/bash
  2.  
  3. # If not running interactively, don't do anything
  4. [[ $- != *i* ]] && return
  5.  
  6. # used by various programs to determine default editors
  7. export EDITOR=vim
  8. export VISUAL=vim
  9.  
  10. # python venv directory
  11. export WORKON_HOME="$XDG_DATA_HOME"/virtualenvs
  12.  
  13. # colors for man pages
  14. export LESS_TERMCAP_mb=$'\e[0;103;30m' # start blink
  15. export LESS_TERMCAP_md=$'\e[1;32m'     # start bold
  16. export LESS_TERMCAP_me=$'\e[0m'        # turn off bold, blink and underline
  17. export LESS_TERMCAP_so=$'\e[0;103;30m' # start standout (reverse video)
  18. export LESS_TERMCAP_se=$'\e[0m'        # stop standout
  19. export LESS_TERMCAP_us=$'\e[4;34m'     # start underline
  20. export LESS_TERMCAP_ue=$'\e[0m'        # stop underline
  21.  
  22. # bash environments in which powerline is used
  23. export POWERLINE_ENVS=(tmux xfce4-terminal konsole codium)
  24.  
  25. # bash environments in which archlinux update news are displayed at the beginning
  26. export PARU_NEWS_ENVS=(tmux xfce4-terminal konsole)
  27.  
  28. # executables that are required for this bashrc (neovim can be replaced with vim)
  29. export REQUIRED_PACKAGES=(neovim less coreutils grep powerline git fzf paru procps-ng python-virtualenvwrapper pacman-contrib iproute2 youtube-dl findutils bat)
  30.  
  31. # highlighting output
  32. alias ls="ls --color=auto"
  33. alias grep="grep --color=auto"
  34. alias ip="ip -color"
  35.  
  36. # fix sudo aliases
  37. alias sudo="sudo "
  38.  
  39. # xdg directory fixes
  40. alias wget='wget --hsts-file="$XDG_CACHE_HOME"/wget-hsts'
  41. alias svn='svn --config-dir "$XDG_CONFIG_HOME"/subversion'
  42. alias gdb='gdb -nh -x "$XDG_CONFIG_HOME"/gdb/init'
  43. alias gpg='gpg2 --homedir "$XDG_DATA_HOME"/gnupg'
  44. alias gpg2='gpg2 --homedir "$XDG_DATA_HOME"/gnupg'
  45. alias yarn='yarn --use-yarnrc "$XDG_CONFIG_HOME"/yarn/config'
  46. alias frama-c-gui='frama-c-gui -journal-name "$XDG_CACHE_HOME"/frama-c/frama_c_journal.ml'
  47.  
  48. # nividia gpu usage
  49. alias nvusage="watch -n 0.5 nvidia-smi"
  50.  
  51. # update packages
  52. alias update="paru -Syu --removemake --sudoloop"
  53.  
  54. # install package
  55. alias install="paru -S --removemake --sudoloop"
  56.  
  57. # set package explicit
  58. alias expl="sudo pacman -D --asexplicit"
  59.  
  60. # set package as dependency
  61. alias asdeps="sudo pacman -D --asdeps"
  62.  
  63. # remove package
  64. alias remove="paru -Rs"
  65.  
  66. # install pkgbuild
  67. alias pkgi="makepkg -sicr"
  68.  
  69. # build pkgbuild
  70. alias pkgb="makepkg -scr"
  71.  
  72. # clear package cache
  73. alias cclean="sudo paccache -rk3 && sudo pacman -Sc --noconfirm"
  74.  
  75. # remove orphaned packages
  76. alias pclean="paru -Qdtq | xargs -ro paru -Rs"
  77.  
  78. # show all listening sockets
  79. alias sockets="ss -tulpn"
  80.  
  81. # download youtube video as audio file
  82. function yt2mp3 {
  83.     if [ $# -ne 2 ]; then
  84.         echo "First and second parameter must be set!"
  85.         echo "(Usage: yt2mp3 <video-id> <folder/to/store/in>)"
  86.         return
  87.     fi
  88.    
  89.     local base_path="$2"
  90.     if [[ "$base_path" != */ ]]; then
  91.         base_path="$base_path/"
  92.     fi
  93.  
  94.     echo "youtube-dl --newline -i --restrict-filenames -o '$base_path%(title)s.%(ext)s' -x --audio-format mp3 --audio-quality 0 --embed-thumbnail https://www.youtube.com/watch?v=$1"
  95.     youtube-dl --newline -i --restrict-filenames -o "$base_path%(title)s.%(ext)s" -x --audio-format mp3 --audio-quality 0 --embed-thumbnail https://www.youtube.com/watch?v=$1 | less
  96. }
  97.  
  98. # upgrade all outdated python libraries
  99. function pyup {
  100.     if [ -z "$1" ]; then
  101.         echo "A virtual environment must be specified"
  102.         return
  103.     else
  104.         workon $1
  105.         pip install -U pip
  106.         pip list --outdated --format=freeze --no-python-version-warning --disable-pip-version-check | grep -v "^-e" | cut -d = -f 1 | xargs -n1 pip install -U --no-python-version-warning --disable-pip-version-check --no-warn-conflicts
  107.     fi
  108. }
  109.  
  110. # Query package info
  111. function query {
  112.     case "$1" in
  113.         se)
  114.             paru -Slq | fzf -q "$2" --multi --preview "paru -Si {1} && paru -Gc {1}" | xargs -r paru -Si
  115.             ;;
  116.         sel)
  117.             paru -Qsq | fzf -q "$2" --multi --preview "paru -Qi {1}"  | xargs -r paru -Qi
  118.             ;;
  119.         f2p)
  120.             find // -type f,d,l -print0 2> /dev/null | fzf -q "$2" --scheme=path --preview 'bat -f {} 2> /dev/null || ls -lA --color=always {}' --read0 --print0 | xargs -r --null paru -Qo
  121.             ;;
  122.         p2f)
  123.             local file_list=$(paru -Qsq | fzf -q "$2" --preview 'paru -Qi {1}' | xargs -r paru -Qlq)
  124.             if [ -n "$file_list" ]; then
  125.                 echo "$file_list" | fzf --multi --scheme=path --preview 'bat -f {} 2> /dev/null || ls -lA --color=always {}' | xargs -r echo
  126.             fi
  127.             ;;
  128.         deps)
  129.             paru -Qdq | fzf -q "$2" --multi --preview 'paru -Qi {1}' | xargs -r paru -Qi
  130.             ;;
  131.         expl)
  132.             paru -Qetq | fzf -q "$2" --multi --preview 'paru -Qi {1}' | xargs -r paru -Qi
  133.             ;;
  134.         orph)
  135.             paru -Qdtq | fzf -q "$2" --multi --preview 'paru -Qi {1}' | xargs -r paru -Qi
  136.             ;;
  137.         *)
  138.             echo "Unknown command. Available options: se sel f2p p2f deps expl orph"
  139.     esac
  140. }
  141.  
  142. # Display help for this bashrc
  143. function bashrc {
  144.     local fnc_desc=" \u26AC \e[38;5;4m%s\e[0m %s\n   \e[38;5;245m%s\e[0m\n"
  145.     local fnc_desc_long="\t-> \e[38;5;4m%s\e[0m %s\n\t   \e[38;5;245m%s\e[0m\n"
  146.  
  147.     printf '\e[1mThis custom bashrc offers the following functions:\e[0m\n'
  148.     printf "$fnc_desc" "nvusage" "" "Show live usage of NVIDIA graphics card"
  149.     printf "$fnc_desc" "update" "" "Perform a complete system update"
  150.     printf "$fnc_desc" "install" "<package name> ... [--asdeps]" "Install the specified packages (standalone or as dependency)"
  151.     printf "$fnc_desc" "expl" "<package name> ..." "Mark packages as explicitly installed (standalone)"
  152.     printf "$fnc_desc" "asdeps" "<package name> ..." "Mark packages as dependency"
  153.     printf "$fnc_desc" "remove" "<package name> ..." "Recursively uninstall packages and their dependencies"
  154.     printf "$fnc_desc" "pkgi" "" "Install PKGBUILD in current folder"
  155.     printf "$fnc_desc" "pkgb" "" "Build PKGBUILD in current folder"
  156.     printf "$fnc_desc" "cclean" "" "Remove cached packages"
  157.     printf "$fnc_desc" "pclean" "" "Remove orphaned packages"
  158.     printf "$fnc_desc" "sockets" "" "Show all currently open tcp and udp sockets"
  159.     printf "$fnc_desc" "yt2mp3" "<video-id> <path/to/ouputfolder>" "Download youtube video and convert to mp3 file"
  160.     printf "$fnc_desc" "pyup" "<python environment>" "Update all packages within a specified python environment"
  161.     printf "$fnc_desc" "query" "<modifier> [optional search term]" "Package querying functions"
  162.     printf "$fnc_desc_long" "query se" "[package name]" "Search for pacman/AUR packages online"
  163.     printf "$fnc_desc_long" "query sel" "[package name]" "Search for locally installed packages"
  164.     printf "$fnc_desc_long" "query f2p" "[path/to/file]" "Display the package which belongs to a specified file"
  165.     printf "$fnc_desc_long" "query p2f" "[package name]" "Display all files that belong to a package"
  166.     printf "$fnc_desc_long" "query orph" "[package name]" "Display all orphaned packages"
  167.     printf "$fnc_desc_long" "query expl" "[package name]" "Display all explicitly installed packages"
  168.     printf "$fnc_desc_long" "query deps" "[package name]" "Display all packages that are marked as dependency"
  169.     printf "\n"
  170. }
  171.  
  172. # check if required packages are present
  173. if [ -n "$REQUIRED_PACKAGES" ]; then
  174.     for req_pkg in "${REQUIRED_PACKAGES[@]}"; do
  175.         pacman -Qq $req_pkg &> /dev/null
  176.         if [ $? -eq 1 ]; then
  177.             printf "\e[48;5;9m[ERROR]\e[0m <$req_pkg> is not installed!\n"
  178.             return
  179.         fi
  180.     done
  181. fi
  182.  
  183. # custom bash prompt (if bash was opened with one of the POWERLINE_ENV entries)
  184. if [ -n "$POWERLINE_ENVS" ] && [ $(pstree -s $$ | grep ${POWERLINE_ENVS[@]/#/-e } -c) -gt 0 ]; then
  185.     powerline-daemon -q
  186.     POWERLINE_BASH_CONTINUATION=1
  187.     POWERLINE_BASH_SELECT=1
  188.     . /usr/share/powerline/bindings/bash/powerline.sh
  189. else
  190.     export GIT_PS1_SHOWDIRTYSTATE=1
  191.     source /usr/share/git/completion/git-prompt.sh
  192.     if [[ $EUID -ne 0 ]]; then
  193.         USR_PREFIX='(\e[38;5;10m\u\e[0m)'
  194.     else
  195.         USR_PREFIX='\e[48;5;9m(\u)\e[0m'
  196.     fi
  197.     PS1=$USR_PREFIX'[\e[38;5;13m$(pwd)\e[0m$(__git_ps1 " \e[38;5;11m(%s)\e[0m")] '
  198. fi
  199.  
  200. # fzf integration
  201. source /usr/share/fzf/key-bindings.bash
  202. source /usr/share/fzf/completion.bash
  203.  
  204. # bash completion
  205. [ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
  206.  
  207. # python-virtualenvwrapper integration
  208. source /usr/bin/virtualenvwrapper.sh
  209.  
  210. # display archlinux update news
  211. if [ -n "$PARU_NEWS_ENVS" ] && [ $(pstree -s $$ | grep ${PARU_NEWS_ENVS[@]/#/-e } -c) -gt 0 ]; then
  212.     paru -Pw 2> /dev/null
  213. fi
Tags: bashrc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement