OSDN Git Service

[update] : Added comments
[alterlinux/aptpac.git] / aptpac
1 #!/usr/bin/env bash
2 #
3 #               __
4 #              /\ \__
5 #   __    _____\ \ ,_\ _____     __      ___
6 # /'__`\ /\ '__`\ \ \//\ '__`\ /'__`\   /'___\
7 #/\ \L\.\\ \ \L\ \ \ \\ \ \L\ /\ \L\.\_/\ \__/
8 #\ \__/.\_\ \ ,__/\ \__\ \ ,__\ \__/.\_\ \____\
9 # \/__/\/_/\ \ \/  \/__/\ \ \/ \/__/\/_/\/____/
10 #           \ \_\        \ \_\
11 #            \/_/         \/_/
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
16
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.
19 AURHELPER=
20
21
22
23 set -e
24 APTPAC_VERSION="3.0.1"
25 PACMAN_OPTIONS=
26 HELPERS=(
27     "/usr/bin/yay"
28     "/usr/bin/yaourt"
29     "/usr/bin/aurman"
30     "/usr/bin/pikaur"
31     "/usr/bin/pacaur"
32 )
33
34 DEFAULT_PACMAN_COMMAND="pacman"
35
36 debug=false
37 PACMAN_COMMAND="${DEFAULT_PACMAN_COMMAND}"
38
39
40 _msg_error () {
41     echo -e "${@}" >&2
42 }
43
44 _msg_debug () {
45     if ${debug}; then
46         echo -e "${@}" >&1
47     fi
48 }
49
50 if [[ ! "${UID}" = 0 ]]; then
51     if [[ -z "${AURHELPER}" ]]; then
52         for AURHELPER in ${HELPERS[@]}; do
53             if [[ -f "${AURHELPER}" ]]; then
54                 PACMAN_COMMAND="${AURHELPER}"
55                 break
56             elif hash "$(basename "${AURHELPER}")" 2> /dev/null; then
57                 PACMAN_COMMAND="$(basename "${AURHELPER}")"
58                 break
59             fi
60         done
61         if [[ "${PACMAN_COMMAND}" == "${DEFAULT_PACMAN_COMMAND}" ]]; then
62             PACMAN_COMMAND="sudo ${DEFAULT_PACMAN_COMMAND}"
63         fi
64     else
65         if [[ -f "${AURHELPER}" ]]; then
66             PACMAN_COMMAND="${AURHELPER}"
67         elif hash "$(basename "${AURHELPER}")" 2> /dev/null; then
68             PACMAN_COMMAND="$(basename "${AURHELPER}")"
69         else
70             _msg_error "${AURHELPER} is not installed."
71             exit 1
72         fi
73     fi
74 fi
75
76
77 # List option
78 installed=false
79
80 _usage () {
81     echo "usage ${0} [options] [command] [packages]"
82     echo " commands:              "
83     echo "    install                       Install the specified package."
84     echo "    remove                        Remove the specified package."
85     echo "    purge                         Permanently remove the package."
86     echo "    update                        Update the package database."
87     echo "    upgrade                       Update the package."
88     echo "    search                        Search for a package."
89     echo "    autoremove                    Remove unnecessary packages."
90     echo "    clean                         Remove the package cache."
91     echo "    list                          Displays a list of packages."
92     echo
93     echo " general options:       "
94     echo "    -y | --yes  | --assume-yes    Do not check."
95     echo "    -d | --download-only          Only download the package."
96     echo "    -c <file>                     Config file for pacman."
97     echo "    -h | --help                   Display this help."
98     echo "    -v | --version                Displays the version of aptpac and pacman."
99     echo "    --purge                       Delete the entire configuration file."
100 }
101
102 _exit () {
103     exit ${1}
104 }
105
106 _version () {
107 cat << EOF
108 aptpac ${APTPAC_VERSION} - A pacman wrapper with syntax based on debian's apt
109 License: Do What The Fuck You Want To Public License
110 (c) 2019-2020 Fascode Network. Yamada Hayao
111 EOF
112 echo
113 pacman --version
114 }
115
116
117 ADD_OPTION () {
118     PACMAN_OPTIONS="${PACMAN_OPTIONS} ${@}"
119 }
120
121 # Argument analysis and processing
122 _opt_short="ydfc:hv"
123 _opt_long="yes,assume-yes,download-only,fix-broken,purse,installed,debug,help,version"
124 OPT=$(getopt -o ${_opt_short} -l ${_opt_long} -- "${@}")
125 if [[ ${?} != 0 ]]; then
126     exit 1
127 fi
128
129 eval set -- "${OPT}"
130 #echo "Argument is \"${OPT}\""
131 unset OPT _opt_short _opt_long
132
133 while true; do
134     case ${1} in
135         -y | --yes | --assume-yes)
136             ADD_OPTION "--noconfirm"
137             shift 1
138             ;;
139         -d | --download-only)
140             ADD_OPTION "-w"
141             shift 1
142             ;;
143         -f | --fix-broken)
144             shift 1
145             ;;
146         -c)
147             ADD_OPTION "--config ${2}"
148             shift 2
149             ;;
150         --purge)
151             ADD_OPTION "-n"
152             shift 1
153             ;;
154         --installed)
155             installed=true
156             shift 1
157             ;;
158         --debug)
159             debug=true
160             shift 1
161             ;;
162         -h | --help)
163             _usage
164             shift 1
165             exit 0
166             ;;
167         -v | --version)
168             _version
169             shift 1
170             exit 0
171             ;;
172         --)
173             shift 1
174             break
175             ;;
176         *)
177             _msg_error "Invalid argument '${1}'"
178             _help
179             exit 1
180             ;;
181     esac
182 done
183
184 if [[ $# -lt 1 ]]; then
185     _msg_error "No command specified"
186     _usage
187     _exit 1
188 fi
189 COMMAND="${1}"
190
191 shift 1
192
193 PACKAGE="${@}"
194
195 case "${COMMAND}" in
196     install) ADD_OPTION "-S" ;;
197     remove) ADD_OPTION "-Rsc" ;;
198     purge) ADD_OPTION "-Rsnc" ;;
199     update) ADD_OPTION "-Syy" ;;
200     upgrade) ADD_OPTION "-Syu" ;;
201     search) ADD_OPTION "-Ss" ;;
202     full-upgrade) ADD_OPTION "-Syu" ;;
203     edit-sources) sudo nano /etc/pacman.conf; _exit 0 ;;
204     dist-upgrade) ADD_OPTION "-Syu" ;;
205     huawei) 
206         source "/etc/locale.conf"
207         if [[ "${LANG}" = "ja_JP.UTF-8" ]]; then
208             echo "(ง •ᴗ•)ว ⁾⁾ファーウェイでウェイウェイ"
209             _exit 0
210         else
211             _msg_error "Invalid command '${COMMAND}'"
212             _exit 1
213         fi
214         ;;
215     moo)
216 cat << EOF
217          (__) 
218          (oo) 
219    /------\/ 
220   / |    ||   
221  *  /\---/\ 
222     ~~   ~~   
223 ...."Have you mooed today?"...
224 EOF
225     exit 0
226     ;;
227     clean)
228         ADD_OPTION "-Sccc"
229         ;;
230     autoremove) if [[ -n $(${PACMAN_COMMAND} -Qttdq) ]]; then
231                     ADD_OPTION "=Rsc"
232                     PACKAGE="$(${PACMAN_COMMAND} -Qttdq)"
233                 else
234                     echo "No packages to remove."
235                     exit 0
236                 fi
237                 ;;
238     list)
239         if ${installed}; then
240             ADD_OPTION "-Q | grep"
241         else
242             ADD_OPTION "-Ss"
243         fi
244         ;;
245     *)
246         _msg_error "Invalid command '${COMMAND}'"
247         _exit 1
248         ;;
249 esac
250
251 if [[ ! "${PACMAN_COMMAND}" = "pacman" ]] && [[ ! "${PACMAN_COMMAND}" = "sudo pacman" ]]; then
252     _msg_debug "Use AUR helper ${PACMAN_COMMAND}."
253 fi
254
255 # echo "${PACMAN_COMMAND} ${PACMAN_OPTIONS} ${PACKAGE}"
256 ${PACMAN_COMMAND} ${PACMAN_OPTIONS} ${PACKAGE}