2 # vim: ft=sh ts=2 sw=2 sts=2 et
4 # vpm - void package management utility for
5 # XBPS, the X Binary Package System
6 # Copyright (c) 2016 Armin Jenewein <a@m2m.pm>, GitHub: @netzverweigerer
7 # For more information about XBPS, see:
8 # https://github.com/voidlinux/xbps
10 # Released under the terms of the GNU general public license, version 3+
11 # see LICENSE file for license information.
16 # disable verbosity, by default
19 # VPM color definitions
32 # enable or disable colors based on the argument given, i.e.:
33 # setcolors on # colors on
34 # setcolors off # colors off
35 # setcolors auto # colors on or off depending on environment
40 # determine if colors should be enabled or not
41 if [[ $opt == auto
]]; then
42 # if stdout is a TTY and the TERM looks like it supports color enable colors
43 if [[ -t 1 && $TERM == *color
* ]]; then
54 if [[ -n ${COLORS[$i]} ]]; then
57 COLORS
[$i]=$
(tput setaf
"$i")
59 colorbrackets
=${COLORS[$numcolorbrackets]}
60 colordarkgray
=${COLORS[$numcolordarkgray]}
61 colorfail
=${COLORS[$numcolorfail]}
62 colorgray
=${COLORS[$numcolorgray]}
63 colorheader
=${COLORS[$numcolorheader]}
64 colorlogo
=${COLORS[$numcolorlogo]}
65 colorok
=${COLORS[$numcolorok]}
66 colorpkgcount
=${COLORS[$numcolorpkgcount]}
67 colortext
=${COLORS[$numcolortext]}
68 colorreset
=$
(tput sgr0
)
85 rmsg
255 "unknown color option: '$opt'"
91 # print the logo with brackets colorized
93 printf '%s[%s%s%s]%s' \
95 "$colorlogo" "$progname" \
100 # prints a message (with vpm-prefix)
102 local logo
=$
(getlogo
)
104 echo "$logo" "$colortext" "$@" "$colorreset"
107 # rmsg - same (but colorized based on return status passed via $1)
112 local logo
=$
(getlogo
)
115 if ((code
== 0)); then
118 statuscolor
=$colorfail
121 echo "$logo" "$statuscolor" "$@" "$colorreset"
126 echo ' __ ___ __ _ __ '
128 printf " \\ V / '_ \\ ' \ "
130 echo " $progname - void package management utility for XBPS"
132 echo -n ' \_/| .__/_|_|_|'
134 echo ' GitHub: https://github.com/netzverweigerer/vpm'
138 echo -n "$colorreset"
143 msg
"$progname - Version: $version"
144 msg
"Copyright (c) 2016 Armin Jenewein <a@m2m.pm> (GPLv3+)"
145 msg
"XBPS version: $(xbps-query -v --version | sed 's/GIT: UNSET//')"
148 # check if we have UID 0, exit otherwise
150 if [[ $EUID -gt 0 ]]; then
151 msg
"$progname: This operation needs super-user privileges."
159 if [[ -n $show_translations ]]; then
171 echo -n "$colorheader"
174 echo "$progname [OPTIONS] [SUBCOMMANDS] [<ARGS>]"
176 echo -n "$colorheader"
179 echo "--color=<yes|no|auto> - Enable/Disable colorized output (default: auto)"
180 echo "--help - (same as: help)"
181 echo "--help-pager - (same as: helppager)"
182 echo "--show-translations - Show XBPS command translations for $progname sub-commands"
183 echo "--verbose - Verbose mode (shows XBPS command translations during execution)"
185 echo -n "$colorheader"
188 echo "sync (sy) - Synchronize remote repository data"
190 echo "update (up) - Update the system"
191 t
"xbps-install -Sduv"
192 echo "listrepos (lr) - List configured repositories"
193 echo "repolist (rl) - Alias for listrepos"
195 echo "addrepo (ar) <ARGS> - Add an additional repository"
196 t
"xbps-install <ARGS>"
197 echo "info (in) <pkg> - Show information about <package>"
199 echo "filelist (fl) <pkg> - Show file-list of <package>"
200 t
"xbps-query -v -R -f"
201 echo "deps <pkg> - Show dependencies for <package>"
202 t
"xbps-query -v -R -x"
203 echo "reverse (rv) <pkg> - Show reverse dependendies of <package> (see man xbps-query)"
204 t
"xbps-query -v -R -X"
205 echo "search (s) <name> - Search for package by <name>"
206 t
"xbps-query -v -Rs"
207 echo "searchfile (sf) <file> - Search for package containing <file> (local)"
208 t
"xbps-query -v -o \"*/$1\""
209 echo "list (ls) - List installed packages"
211 echo "install (i) <pkg(s)> - Install <package(s)>"
213 echo "devinstall (di) <pkg(s)> - Install <package> (and corresponding <package>-devel package(s))"
214 t
"xbps-install -S <package> <package>-devel"
215 echo "listalternatives (la) - List alternative candidates"
216 t
"xbps-alternatives -l"
217 echo "setalternative (sa) <pkg(s) - Set alternative for <package>"
218 t
"xbps-alternatives -s"
219 echo "reconfigure (rc) <pkg> - Re-configure installed <package>"
220 t
"xbps-reconfigure -v"
221 echo "forceinstall (fi) <pkg(s)> - Force installation of <package(s)>"
223 echo "remove (rm) <package(s)) - Remove <package(s)> from the system"
225 echo "removerecursive (rr) <pkg(s)> - Recursively remove package(s) (and its dependencies)"
226 t
"xbps-remove -v -R"
227 echo "cleanup (cl) - Clean up cache directory"
228 t
"xbps-remove -v -O"
229 echo "autoremove (ar) - Remove orphaned packages"
230 t
"xbps-remove -v -O"
231 echo "whatprovides (wp) <file> - Search for package containing <file>"
233 echo "help - Show usage information"
234 echo "helppager (hp) - Show usage information (will pipe output to less/more)"
236 echo -n "$colorheader"
237 echo "XBPS COMPATIBILITY COOLNESS:"
240 echo "$progname also understands all unknown XBPS sub-commands, too:"
242 selected
=${f[$RANDOM % ${#f[@]}]}
243 echo "$progname ${selected##*-} <ARGS> - see also: /usr/sbin/xbps-*"
245 echo -n "$colorreset"
250 --color=true|
--color=yes|
--color=on
)
258 --color=false|
--color=off|
--color=no
)
277 "$0" --color=off
--help |
less
280 msg
"Unknown option: $1 (try: $progname --help)"
285 if [[ "$1" == "" ]]; then
292 if [[ "$arg" =~
--.
* ]]; then
300 msg
"(xbps-query -v -R $@):"
301 xbps-query
-v -R "$@"
303 rmsg
"$ret" "Execution finished (xbps-query -v -R $@), return code was: $ret"
307 filelist|fl|listfiles
)
309 xbps-query
-v -R -f "$@"
311 if [[ $verbose == "true" ]]; then
312 rmsg
"$ret" "Execution finished (xbps-query -v -R -f \"*/$1\"), return code was: $ret"
317 deps|dep|dependencies
)
319 xbps-query
-v -R -x "$@"
321 rmsg
"$ret" "Execution finished (xbps-query -v -R -x \"*/$1\"), return code was: $ret"
327 msg
"Reverse dependencies for $@ (xbps-query -v -R $@):"
328 xbps-query
-v -R -X "$@"
330 msg
"$ret" "Execution finished (xbps-query -v -R $@), return code was: $ret"
336 msg
"searchfile (xbps-query -v -o \"*/$1\"):"
337 xbps-query
-v -o "*/$1"
339 msg
"$ret" "Execution finished (xbps-query -v -o \"*/$1\"), return code was: $ret"
343 remotesearchfile|rsf
)
345 msg
"remotesearchfile (xbps-query -R -v -o \"*/$1\"):"
346 xbps-query
-R -v -o "*/$1"
348 msg
"$ret" "Execution finished (xbps-query -R -v -o \"*/$1\"), return code was: $ret"
354 msg
"Installed packages: "
357 while read -r _ pkg _
; do
362 printf '%s%d %s%s %s (%s%s%s) [%s%s%s]%s\n' \
363 "$colorpkgcount" "$count" \
364 "$colortext" "$pkgname" \
366 "$colorgray" "$version" \
368 "$colordarkgray" "$pkg" \
371 done < <(xbps-query
-v -l)
374 listalternative|listalternatives|la
)
375 xbps-alternatives
-l "$@"
377 rmsg
"$ret" "xbps-alternatives return code: $ret (xbps-alternatives -l $@)"
380 setalternative|setalternatives|sa
)
383 $SUDO xbps-alternatives
-s "$@"
385 rmsg
"$ret" "xbps-alternatives return code: $ret (xbps-alternatives -s $@)"
388 repolist|listrepos|rl|lr
)
389 msg
"Configured repositories (xbps-query -v -L): "
392 rmsg
"$ret" "[xbps-query -v -L] return code: $ret"
395 msg
"Available sub-repositories (xbps-query -v -Rs void-repo): "
396 xbps-query
-v -Rs void-repo
398 rmsg
"$ret" "[xbps-query -v -Rs void-repo] return code: $ret"
401 msg
"Use \"$progname addrepo <repository>\" to add a sub-repository."
409 msg
"Adding repository: $repo"
410 $SUDO xbps-install
"$1"
412 rmsg
"$ret" "[xbps-install $arg] return code: $ret"
413 msg
"Synchronizing remote repository data (xbps-install -S): "
414 $SUDO xbps-install
-S
416 rmsg
"$ret" "[xbps-install -S] return code: $ret"
424 msg
"Synchronizing remote repository data: (xbps-install -S):"
425 $SUDO xbps-install
-S
427 rmsg
"$ret" "[xbps-install -S] return code: $ret"
433 if [[ "$#" -lt 1 ]]; then
434 msg
"ERROR: install: argument missing, try --help."
437 msg
"Installing packages: $@ (xbps-install -S $@) ..."
438 $SUDO xbps-install
-S "$@"
440 rmsg
"$ret" "[xbps-install -S $@] return code: $ret"
446 if [[ "$#" -lt 1 ]]; then
447 msg
"ERROR: install: argument missing, try --help."
450 msg
"Installing packages: $@ (xbps-install -S $@) ..."
451 $SUDO xbps-install
-y -S "$@"
453 rmsg
"$ret" "[xbps-install -S $@] return code: $ret"
459 if [[ "$#" -lt 1 ]]; then
460 msg
"ERROR: devinstall: argument missing, try --help."
464 msg
"devinstall: Packages will be installed one-by-one"
465 msg
"Use \"forceinstall\" to override this if you know what you're doing."
466 msg
"(Note: forceinstall won't install -devel packages)"
467 for arg
in "${args[@]}"; do
469 msg
"Installing package: $arg (xbps-install -S $arg) ..."
470 $SUDO xbps-install
-S "$arg"
472 rmsg
"$ret" "[xbps-install -S $arg] return code: $ret"
473 msg
"installing devel package (${arg}-devel):"
474 $SUDO xbps-install
-S "${arg}-devel"
476 rmsg
"$ret" "[xbps-install -S ${arg}-devel] return code: $ret"
483 msg
"Force-Installing Package(s): $@ (xbps-install -Sf $@)"
484 $SUDO xbps-install
-Sf "$@"
486 rmsg
"$ret" "[xbps-install -Sf ${@}] return code: $ret"
492 msg
"Removing package(s): $@ (xbps-remove -v $@)"
493 $SUDO xbps-remove
-v "$@"
495 rmsg
"$ret" "[xbps-remove -v ${@}] return code: $ret"
501 msg
"Removing package(s) recursively: $@ (xbps-remove -v -R $@)"
502 $SUDO xbps-remove
-v -R "$@"
504 rmsg
"$ret" "[xbps-remove -v -R ${@}] return code: $ret"
510 msg
"reconfigure: Re-configuring package(s) (xbps-reconfigure -v $@):"
511 $SUDO xbps-reconfigure
-v "$@"
513 rmsg
"$ret" "[xbps-reconfigure -v ${@}] return code: $ret"
519 msg
"autoremove: Removing orphaned packages (xbps-remove -v -o)"
520 $SUDO xbps-remove
-v -o
522 rmsg
"$ret" "[xbps-remove -v -o] return code: $ret"
528 msg
"Running system update (xbps-install -Suv)"
529 $SUDO xbps-install
-Suv
531 if [[ $ret == 16 ]]; then
532 msg
"Updating xbps (xbps-install -u xbps)"
535 rmsg
"$ret2" "[xbps-install -u xbps] return code: $ret2"
538 rmsg
"$ret" "[xbps-install -Suv] return code: $ret"
543 msg
"Searching for: $@ (xbps-query -v -Rs $@)"
544 xbps-query
-v -Rs "$@"
546 rmsg
"$ret" "[xbps-query -v -Rs $@] return code: $ret"
550 msg
"Cleaning up packages (will remove orphaned packages) (xbps-remove -v -O $@)"
553 $SUDO xbps-remove
-v -O "$@"
555 rmsg
"$ret" "[xbps-remove -v -O $@] return code: $ret"
562 helppager|help-pager|hp
)
563 if hash less >/dev
/null
2>&1; then
564 "$0" --color=off
help |
less
566 "$0" --color=off
help |
more
572 if hash xlocate
>/dev
/null
2>&1; then
575 msg
"relaying to: \"xlocate $@\" - use xlocate -S to (re-)build cached DB."
578 rmsg
255 "xlocate not found. Try installing the xtools package."
584 if hash "xbps-${a}" >/dev
/null
2>&1; then
586 # xbps-<subcommand> found
587 msg
"relaying to XBPS: xbps-$a $@"
590 rmsg
"$ret" "xbps-$a $@ return code: $ret"
592 rmsg
255 "Unrecognized $progname subcommand: $1 (and xbps-$1 does not exist) - Try: $progname help"