OSDN Git Service

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