package-manager.sh 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #!/usr/bin/env bash
  2. set -euo pipefail # bash strict mode
  3. DATE="$(date +%F_%H%M%S)"
  4. SCRIPT_NAME="${0##*/}"
  5. LOG_DIR="${HOME}/.local/share/logs"
  6. LOG_FILE="${LOG_DIR}/${SCRIPT_NAME%%.sh}_${DATE}.log"
  7. display_help() {
  8. error_message="$*"
  9. [[ -n ${error_message:-} ]] && echo -e "Error: ${error_message}\n"
  10. cat <<EOF
  11. Usage: ${SCRIPT_NAME} <action> <package/s>
  12. Works with: pacman, apt, zypper, dnf
  13. OPTIONS:
  14. -u, --update Update packages
  15. -i, --install Install packages
  16. -r, --remove Remove packages
  17. -c, --clear-cache Clear package cache
  18. -s, --search Search for packages
  19. -l, --list List installed packages
  20. -d, --depends List package dependencies
  21. -h, --help Display this help message
  22. Dependencies: bash
  23. Examples:
  24. - \$ ${SCRIPT_NAME} -i tmux
  25. - \$ ${SCRIPT_NAME} -r tmux
  26. - \$ ${SCRIPT_NAME} -c
  27. EOF
  28. exit 2
  29. }
  30. [[ $# -lt 1 ]] && display_help
  31. mkdir -pv "$LOG_DIR"
  32. ln -rsf "$LOG_DIR" "$HOME"
  33. zypper_manager(){
  34. if [ -e /etc/os-release ]; then
  35. . /etc/os-release
  36. else
  37. . /usr/lib/os-release
  38. fi
  39. local action="$1"
  40. shift
  41. case "${action,,}" in
  42. u | update) sudo zypper ref
  43. if [[ $ID = "opensuse-tumbleweed" ]]; then
  44. sudo zypper dup
  45. elif [[ $ID = "opensuse-leap" ]]; then
  46. sudo zypper up
  47. fi ;;
  48. i | install) sudo zypper in -- "$@";;
  49. r | remove) sudo zypper re -- "$@";;
  50. c | clear) zypper clean -a;;
  51. s | search) zypper se -- "$@";;
  52. l | list) zypper lp -- "$@";;
  53. d | depends) rpm -qR -- "$@";;
  54. h|\?|:|*) display_help ;;
  55. esac
  56. }
  57. apt_manager(){
  58. local action="$1"
  59. shift
  60. case "${action,,}" in
  61. u | update) sudo apt update && sudo apt upgrade;;
  62. i | install) sudo apt install -- "$@";;
  63. r | remove) sudo apt autopurge -- "$@";;
  64. c | clear) sudo apt autoremove && sudo apt clean && sudo apt autoclean;;
  65. s | search) apt search -- "$@";;
  66. l | list) apt list -- "$@";;
  67. d | depends) apt-cache depends -- "$@";;
  68. h|\?|:|*) display_help ;;
  69. esac
  70. }
  71. pacman_manager(){
  72. local action="$1"
  73. shift
  74. case "${action,,}" in
  75. u | update) sudo pacman -Syu --needed;;
  76. i | install) sudo pacman -Syu --needed -- "$@";;
  77. r | remove) sudo pacman -Rncssu -- "$@";;
  78. c | clear) sudo pacman -Scc;;
  79. s | search) pacman -Qs -- "$@";;
  80. l | list) pacman -Ss -- "$@";;
  81. d | depends) pacman -Q -- "$@";;
  82. h|\?|:|*) display_help ;;
  83. esac
  84. }
  85. dnf_manager(){
  86. local action="$1"
  87. shift
  88. case "${action,,}" in
  89. u | update) sudo dnf upgrade --refresh;;
  90. i | install) sudo dnf install -- "$@";;
  91. r | remove) sudo dnf remove -- "$@";;
  92. c | clear) sudo dnf clean all;;
  93. s | search) dnf search all -- "$@";;
  94. l | list) dnf list -- "$@";;
  95. d | depends) rpm -qR -- "$@";;
  96. h|\?|:|*) display_help ;;
  97. esac
  98. }
  99. flatpak_manager(){
  100. local action="$1"
  101. shift
  102. case "${action,,}" in
  103. u | update) flatpak update -y;;
  104. i | install) flatpak install -y "$@";;
  105. r | remove) flatpak uninstall -y "$@";;
  106. c | clear) flatpak uninstall --unused -y;;
  107. s | search) flatpak search "$@";;
  108. l | list) flatpak list;;
  109. d | depends) flatpak info --show-deps "$@";;
  110. h|\?|:|*) display_help;;
  111. esac
  112. }
  113. if command -v pacman; then
  114. pacman_manager "$@"
  115. elif command -v apt; then
  116. apt_manager "$@"
  117. elif command -v zypper; then
  118. zypper_manager "$@"
  119. elif command -v dnf; then
  120. dnf_manager "$@"
  121. else
  122. display_help "package manager not supported!@!@!@"
  123. fi
  124. read -erp "Try flatpak? (yes/no): " -i "no" ans
  125. if [[ "$ans" =~ ^(yes|y)$ ]]; then
  126. flatpak_manager "$@"
  127. fi