5 # __ _____\ \ ,_\ _____ __ ___
6 # /'__`\ /\ '__`\ \ \//\ '__`\ /'__`\ /'___\
7 #/\ \L\.\\ \ \L\ \ \ \\ \ \L\ /\ \L\.\_/\ \__/
8 #\ \__/.\_\ \ ,__/\ \__\ \ ,__\ \__/.\_\ \____\
9 # \/__/\/_/\ \ \/ \/__/\ \ \/ \/__/\/_/\/____/
12 # a pacman wrapper with syntax based on debian's apt
13 # (c) 2019-2020 Fascode Network.
14 # License: Do What The Fuck You Want To Public License
15 # maintained by Yamada Hayao
17 # Enter the path to the AUR helper you want to use here.
18 # If it is empty, the corresponding AUR helper will be searched automatically.
24 APTPAC_VERSION="3.3.0"
36 DEFAULT_PACMAN_COMMAND="/usr/bin/pacman"
37 PACMAN_COMMAND="${DEFAULT_PACMAN_COMMAND}"
38 PACMAN_CONFIG="/etc/pacman.conf"
60 echo "usage ${0} [options] [command] [packages]"
63 echo " install Install the specified package"
64 echo " remove Remove the specified package"
65 echo " purge Permanently remove the package"
66 echo " update Update package database"
67 echo " upgrade | full-upgrade Update packages"
68 echo " edit-sources Edit config file of pacman"
69 echo " search Search for a package"
70 echo " autoremove Remove unnecessary packages"
71 echo " clean Remove the package cache"
72 echo " list Display a list of packages"
73 echo " show | showpkg Display the package records"
74 echo " rdepends Display the dependencies"
77 echo " -y | --yes | --assume-yes Do not check"
78 echo " -d | --download-only Only download the package"
79 echo " -c | --config-file <file> Config file for pacman"
80 echo " -h | --help Display this help"
81 echo " -v | --version Display the version of aptpac and pacman"
82 echo " --auto-remove | --autoremove Remove unnecessary packages with other command"
83 echo " --purge Delete the entire configuration file"
85 echo " pacapt options:"
86 echo " --aur-helper <command> Specifies the command to use as the AUR helper"
87 echo " Ignored if pacapt is run as root"
88 echo " Specify AUR helper that supports common command line options with pacman"
91 echo " - aptpac supports not only above options but also options of pacman"
92 echo " - If you specify the deb file, you can install using debtap"
101 aptpac ${APTPAC_VERSION} - A pacman wrapper with syntax based on debian's apt
102 License: Do What The Fuck You Want To Public License
103 (c) 2019-2020 Fascode Network. Yamada Hayao
110 PACMAN_OPTIONS+=("${@}")
114 if "${RUN_WITH_SUDO}"; then
121 _run_detect_aur_helper(){
122 if [[ ! "${UID}" = 0 ]]; then
123 if [[ -z "${AURHELPER+SET}" ]]; then
124 for AURHELPER in "${HELPERS[@]}"; do
125 if [[ -f "${AURHELPER}" ]]; then
126 PACMAN_COMMAND="${AURHELPER}"
128 elif hash "$(basename "${AURHELPER}")" 2> /dev/null; then
129 PACMAN_COMMAND="$(basename "${AURHELPER}")"
134 if [[ -f "${AURHELPER}" ]]; then
135 PACMAN_COMMAND="${AURHELPER}"
136 elif hash "$(basename "${AURHELPER}")" 2> /dev/null; then
137 PACMAN_COMMAND="$(basename "${AURHELPER}")"
139 _msg_error "${AURHELPER} is not installed"
147 if [[ ! "${PACMAN_COMMAND}" = "${DEFAULT_PACMAN_COMMAND}" ]] && [[ ! "$(basename "${PACMAN_COMMAND}")" = "$(basename "${DEFAULT_PACMAN_COMMAND}")" ]]; then
148 _msg_debug "Use AUR helper ${PACMAN_COMMAND}"
155 if "${AUTOREMOVE}"; then
156 if [[ -n $(${PACMAN_COMMAND} -Qttdq) ]]; then
157 "${PACMAN_COMMAND}" -Qttdq | _sudo "${PACMAN_COMMAND}" -Rsc --config "${PACMAN_CONFIG}" -
159 echo "No packages to remove"
166 _sudo "${PACMAN_COMMAND}" "${PACMAN_OPTIONS[@]}" --config "${PACMAN_CONFIG}" "${PACKAGE[@]}"
170 # Argument analysis and processing
172 PACAPT_ARGUMENTS=("${@}")
173 _opt_short="ydfc:hvVDFQRSTU"
174 _opt_long="yes,assume-yes,download-only,fix-broken,purse,installed,debug,help,version,config-file:,auto-remove,autoremove,aur-helper:"
175 OPT=$(getopt -o ${_opt_short} -l ${_opt_long} -- "${@}" 2> /dev/null)
177 #if [[ ${?} != 0 ]]; then
182 #echo "Argument is \"${OPT}\""
183 unset OPT _opt_short _opt_long
187 -y | --yes | --assume-yes)
188 ADD_OPTION "--noconfirm"
191 -d | --download-only)
224 --autoremove | --auto-remove)
229 if [[ ! "${UID}" = 0 ]] && [[ -f "${2}" ]]; then
230 PACMAN_COMMAND="${2}"
231 elif [[ "${UID}" = 0 ]]; then
232 _msg_warn "The specified AUR helper is not used because pacapt is running on the root."
233 elif hash "$(basename "${2}")" 2> /dev/null; then
234 PACMAN_COMMAND="$(basename "${2}")"
236 _msg_error "${2} is not installed"
241 -V | -D | -F | -Q | -R | -S | -T | -U)
243 ADD_OPTION "${PACAPT_ARGUMENTS[@]}"
251 _msg_error "Invalid argument '${1}'"
258 if [[ "${DIRECT_PACMAN}" = false ]]; then
259 if [[ $# -lt 1 ]]; then
260 _msg_error "No command specified"
299 if [[ -n "${EDITOR}" ]]; then
300 sudo "${EDITOR}" "${PACMAN_CONFIG}"
302 sudo nano "${PACMAN_CONFIG}"
307 if [[ "$(source "/etc/locale.conf" 2> /dev/null; echo -n "${LANG}")" = "ja_JP.UTF-8" ]]; then
308 echo "(ง •ᴗ•)ว ⁾⁾ファーウェイでウェイウェイ"
311 _msg_error "Invalid command '${COMMAND}'"
322 echo "....\"Have you mooed today?\"..."
326 if [[ -n "$(${PACMAN_COMMAND} -Qttdq)" ]]; then
328 while read -r pkg; do
330 done < <(${PACMAN_COMMAND} -Qttdq)
332 echo "No packages to remove"
337 if ${installed}; then
338 ADD_OPTION "-Q | grep"
344 for pkg in "${PACKAGE[@]}"; do
345 if pacman -Qq "${pkg}" 2> /dev/null 1>&2; then
346 "${PACMAN_COMMAND}" "${PACMAN_OPTIONS[@]}" -Qi --config "${PACMAN_CONFIG}" "${pkg}"
348 "${PACMAN_COMMAND}" "${PACMAN_OPTIONS[@]}" -Si --config "${PACMAN_CONFIG}" "${pkg}"
362 _msg_error "Invalid command '${COMMAND}'"
369 _run_detect_aur_helper