added slim version etc...

This commit is contained in:
zenobit 2022-02-26 21:06:40 +01:00
parent d4b1e9e45e
commit ef8050f8f7
6 changed files with 744 additions and 674 deletions

View File

@ -1,3 +1,5 @@
vbm - An XBPS package management helper for VoidLinux
as
vpm - An XBPS package management helper for VoidLinux
Copyright (C) 2016 Armin Jenewein <a@m2m.pm>

View File

@ -1,4 +1,4 @@
PREFIX_BIN ?= /usr/local/bin
PREFIX_BIN ?= /bin
PREFIX_BASHC ?= /usr/share/bash-completion/completions
.PHONY: all
@ -7,8 +7,8 @@ all:
.PHONY: install
install:
cp ./vbm $(PREFIX_BIN)/vbm
cp ./bash-completion/completions/vbm $(PREFIX_BASHC)/vbm
cp vbm.sh $(PREFIX_BIN)/vbm
cp bash-completion/completions/vbm $(PREFIX_BASHC)/vbm
.PHONY: uninstall
uninstall:

View File

@ -1,6 +1,6 @@
### Changed name from vpm to vbm
# vbm - An XBPS package management helper for vb-linux and VoidLinux
# vbm - An XBPS package management helper for vb aka Void GNU/Linux
version 1.4.1
`vbm` is a simple to use, daily-driver enhancement to the awesome XBPS (X Binary
@ -11,23 +11,11 @@ nitpickers understanding of the word - especially vbm shouldn't be confused with
XBPS - vbm is just an addon helper tool for XBPS to make your life easier.
That's it.
# Screenshots
# better then screenshots
vbm...
![vbm](https://codeberg.org/oSoWoSo/vbm/raw/branch/main/screenshots/vbm.png)
vbm trying install package but...
![try](https://codeberg.org/oSoWoSo/vbm/raw/branch/main/screenshots/vbm.png)
vbm automatic updating xbps while updating system...
![xbps](https://codeberg.org/oSoWoSo/vbm/raw/branch/main/screenshots/vbm3.png)
vbm installing package...
![xbps](https://codeberg.org/oSoWoSo/vbm/raw/branch/main/screenshots/vbm4.png)
[![asciicast](https://asciinema.org/a/476068.svg)](https://asciinema.org/a/476068)
# Motivation to write vpm
@ -50,7 +38,7 @@ Or you can just grab vbm and paste it anywhere in your system.
# Installation
### 1. Install xtools via `xbps-install`
### (optional - needed for for xcheckrestart functions)
### (optional - needed for xcheckrestart functions)
$ xbps-install -S xtools

View File

Before

Width:  |  Height:  |  Size: 205 KiB

After

Width:  |  Height:  |  Size: 205 KiB

655
vbm
View File

@ -1,655 +0,0 @@
#!/bin/bash
# vim: ft=sh ts=2 sw=2 sts=2 et
# vbm - vb-linux management utility for
# XBPS, the X Binary Package System
# original author of vpm: Armin Jenewein <a@m2m.pm>, GitHub: @netzverweigerer
# a lot used from: Dave Eddy <dave@daveeddy.com>, GitHub: @bahamas10
# this fork vbm: zenobit from oSoWoSo <pm@osowoso.xyz>, codeberg.org: @oSoWoSo
# For more information about XBPS, see:
# https://github.com/voidlinux/xbps
# Released under the terms of the GNU general public license, version 3+
# see LICENSE file for license information.
# set version number
version="1.4.1"
# disable verbosity by default
verbose=false
# override color settings
colors=auto
# VPM color definitions
numc1=1
numc2=2
numc3=3
numc4=4
numc5=5
numc6=6
numc7=7
numc8=8
c=$(tput sgr0)
c1=${numc1}
c2=${numc2}
c3=${numc3}
c4=${numc4}
c5=${numc5}
c6=${numc6}
c7=${numc7}
c8=${numc8}
## COLORS
#c=$(tput sgr0) # reset
#c1=$(tput setaf 1) # red
#c2=$(tput setaf 2) # green
#c3=$(tput setaf 3) # yellow
#c4=$(tput setaf 4) # blue
#c5=$(tput setaf 5) # magenta
#c6=$(tput setaf 6) # light blue
#c7=$(tput setaf 7) # white
#c8=$(tput setaf 8) # grey
# program name
progname=${0##*/}
# enable or disable colors based on the argument given, i.e.:
# setcolors on # colors on
# setcolors off # colors off
# setcolors auto # colors on or off depending on environment
declare -A COLORS
setcolors () {
local opt=$1
# determine if colors should be enabled or not
if [[ $opt == auto ]]; then
# if stdout is a TTY and the TERM looks like it supports color enable colors
if [[ -t 1 && $TERM == *color* ]]; then
opt='on'
else
opt='off'
fi
fi
case "$opt" in
on)
local i
for i in {1..11}; do
if [[ -n ${COLORS[$i]} ]]; then
continue
fi
COLORS[$i]=$(tput setaf "$i")
done
c1=${COLORS[$numc1]}
c2=${COLORS[$numc2]}
c3=${COLORS[$numc3]}
c4=${COLORS[$numc4]}
c5=${COLORS[$numc5]}
c6=${COLORS[$numc6]}
c7=${COLORS[$numc7]}
c8=${COLORS[$numc8]}
c=$(tput sgr0)
;;
off)
c1=
c2=
c3=
c4=
c5=
c6=
c7=
c8=
c=
unset COLORS
declare -A COLORS
;;
*)
rmsg 255 "unknown color option: '$opt'"
exit 255
;;
esac
}
# print the logo with brackets colorized
getlogo () {
printf '%s[%s%s%s]%s' \
"$c6" \
"$c5" "$progname" \
"$c6" \
"$c"
}
# prints a message (with vbm-prefix)
msg () {
local logo=$(getlogo)
local newline=true
if [[ $1 == '-n' ]]; then
newline=false
shift
fi
printf '%s %s%s%s' "$logo" "$c4" "$*" "$c"
$newline && echo
}
# rmsg - same (but colorized based on return status passed via $1)
rmsg () {
local code=$1
shift
local logo=$(getlogo)
local statuscolor
if ((code == 0)); then
statuscolor=$c7
else
statuscolor=$c1
fi
printf '%s %s%s%s\n' "$logo" "$statuscolor" "$*" "$c"
}
banner () {
echo -n "$c5"
echo ' __ ___ __ _ __ '
printf " \\ V / '_ \\ ' \ "
echo -n "$c2"
echo " $progname - void package management utility for XBPS"
echo -n "$c5"
echo -n ' \_/| .__/_|_|_\'
echo -n "$c2"
echo ' GitHub: https://github.com/netzverweigerer/vpm'
echo -n "$c5"
echo ' |/ '
echo ' ´ '
echo -n "$c"
}
version () {
banner
msg "$progname - Version: $version (GPLv3+)"
msg "original author: Armin Jenewein <a@m2m.pm>, GitHub: @netzverweigerer"
msg "a lot used from: Dave Eddy <dave@daveeddy.com>, GitHub: @bahamas10"
msg "this fork: zenobit from oSoWoSo <pm@osowoso.xyz>, codeberg.org: @oSoWoSo"
msg "XBPS version: $(xbps-query -v --version | sed 's/GIT: UNSET//')"
}
# check if we have UID 0, exit otherwise
rootcheck () {
if [[ $EUID -gt 0 ]]; then
msg "$(tput setaf 1)This operation needs super-user privileges.$(tput sgr 0)"
SUDO=sudo
else
SUDO=''
fi
}
t () {
if [[ -n $show_translations ]]; then
tput setaf 242
echo ' ' "$@"
echo
tput setaf 109
fi
}
wrapcommand() {
local cmd ret
cmd=("$@")
echo "$c4(${cmd[*]}):$c"
"${cmd[@]}"
ret=$?
rmsg "$ret" "[${cmd[*]}], return code was: $ret"
exit "$ret"
}
usage () {
echo "${c2}USAGE:
${c1}${progname} ${c8}[OPTIONS] ${c7}[SUBCOMMANDS] ${c3}[<ARGS>]
${c8} OPTIONS :
${c8}--color=<yes|no|auto>
${c4}Enable/Disable colorized output (default: auto)
${c8}--help
${c4}(same as: help)
${c8}--help-pager
${c4}(same as: helppager)
${c8}--show-translations
${c4}Show XBPS command translations for $progname sub-commands
${c8}--verbose
${c4}Verbose mode (shows XBPS command translations during execution)
${c2} long : ${c7}SUBCOMMANDS${c1} : ${c1}(short) ${c3}<ARGS>
${c2}help
${c4}Show usage information
${c2}helppager ${c1}(hp)
${c4}Show usage information (will pipe output to less/more)
${c2}version ${c1}(v)
${c4}Show version and exit
${c2}about ${c1}(a) ${c3}<pkg>
${c4}Show information about <package>"
t "xbps-query -v -R"
echo "${c2}filelist ${c1}(fl) ${c3}<pkg>
${c4}Show file-list of <package>"
t "xbps-query -v -R -f"
echo "${c2}deps ${c1}(d) ${c3}<pkg>
${c4}Show dependencies for <package>"
t "xbps-query -v -R -x"
echo "${c2}reverse ${c1}(rd) ${c3}<pkg>
${c4}Show reverse dependendies of <package> (see man xbps-query)"
t "xbps-query -v -R -X"
echo "${c2}search ${c1}(s) ${c3}<pkg>
${c4}Search for package"
t "xbps-query -v -Rs"
echo "${c2}searchlib ${c1}(sl) ${c3}<pkg>
${c4}Search for package (multilib exclude)"
t "xbps-query -v -Rs"
echo "${c2}searchfile ${c1}(sf) ${c3}<file>
${c4}Search for package containing <file> (local)"
t "xbps-query -v -o \"*/$1\""
echo "${c2}whatprovides ${c1}(wp) ${c3}<file>
${c4}Search for package containing <file>"
t "xlocate ${c3}<pkg>"
echo "${c2}list ${c1}(ls)
${c4}List installed packages"
t "xbps-query -v -l"
echo "${c2}listw ${c1}(lw)
${c4}List installed packages without their version"
t "xbps-query -l | awk '{ print $2 }' | xargs -n1 xbps-uhelper getpkgname"
echo "${c2}listalternatives ${c1}(la)
${c4}List alternative candidates"
t "xbps-alternatives -l"
echo "${c2}listrepos ${c1}(lr)
${c4}List configured repositories"
echo "${c2}repolist ${c1}(rl)
${c4}Alias for listrepos"
t "xbps-query -v -L"
echo "${c2}sync ${c1}(sy)
${c4}Synchronize remote repository data"
t "xbps-install -S"
echo "${c2}update ${c1}(up)
${c4}Update the system"
t "xbps-install -Suv"
echo "${c2}addrepo ${c1}(ad) ${c3}<ARGS>
${c4}Add an additional repository"
t "xbps-install <ARGS>"
echo "${c2}install ${c1}(i) ${c3}<pkg(s)>
${c4}Install <package(s)>"
t "xbps-install"
echo "${c2}devinstall ${c1}(di) ${c3}<pkg(s)>
${c4}Install <package> and devel-<package>(s)"
t "xbps-install <package> <package>-devel"
echo "${c2}reconfigure ${c1}(rc) ${c3}<pkg>
${c4}Re-configure installed <package>"
t "xbps-reconfigure -v"
echo "${c2}forceinstall ${c1}(fi) ${c3}<pkg(s)>
${c4}Force installation of <package(s)>"
t "xbps-install -f"
echo "${c2}setalternative ${c1}(sa) ${c3}<pkg(s)>
${c4}Set alternative for <package>"
t "xbps-alternatives -s"
echo "${c2}remove ${c1}(rm) ${c3}<pkg(s)>
${c4}Remove <package(s)> from the system"
t "xbps-remove -v "
echo "${c2}removerecursive ${c1}(rr) ${c3}<pkg(s)>
${c4}Recursively remove package(s) (and its dependencies)"
t "xbps-remove -v -R"
echo "${c2}cleanup ${c1}(cl)
${c4}Remove obsolete packages in cachedir"
t "xbps-remove -v -O"
echo "${c2}autoremove ${c1}(ar)
${c4}Remove orphaned packages"
t "xbps-remove -v -o"
echo "${c2} XBPS COMPATIBILITY ${c2}: "
f=(/usr/sbin/xbps-*)
echo "${c4}$progname also understands all unknown XBPS sub-commands, too:"
echo -n "${c2}Example: ${c7}"
selected=${f[$RANDOM % ${#f[@]}]}
echo "$progname ${selected##*-} <ARGS>
${c2}see also: ${c4}/usr/sbin/xbps-* ${c}"
}
setcolors auto
case "$1" in
--color=true|--color=yes|--color=on)
setcolors on
shift
;;
--color=auto)
setcolors auto
shift
;;
--color=false|--color=off|--color=no)
setcolors off
shift
;;
--verbose=true)
shift
verbose=true
;;
--show-translations)
shift
show_translations=1
;;
--help)
shift
usage
exit 255
;;
--help-pager)
shift
"$0" --color=off --help | less
;;
--*)
msg "Unknown option: $1 (try: $progname --help)"
exit 1
;;
esac
if [[ -z $1 ]]; then
usage
exit 0
fi
cmd=$1
if [[ $arg =~ --.* ]]; then
cmd=${arg:2}
fi
shift
case "$cmd" in
about|a)
wrapcommand xbps-query -v -R "$@"
;;
filelist|fl|listfiles)
wrapcommand xbps-query -v -R -f "$@"
;;
deps|dep|dependencies|d)
wrapcommand xbps-query -v -R -x "$@"
;;
reverse|rd)
msg -n "Reverse dependencies for $* "
wrapcommand xbps-query -v -R -X "$@"
;;
searchfile|sf)
msg -n 'searchfile '
wrapcommand xbps-query -v -o "*/$1"
;;
remotesearchfile|rsf)
msg -n 'remotesearchfile '
wrapcommand xbps-query -R -v -o "*/$1"
;;
list|ls)
msg -n 'Installed packages: '
count=0
while read -r _ pkg _; do
((count++))
pkgname=${pkg%-*}
version=${pkg##*-}
printf '%s%d %s%s %s (%s%s%s) [%s%s%s]%s\n' \
"$c8" "$count" \
"$c4" "$pkgname" \
"$c6" \
"$c2" "$version" \
"$c6" \
"$c7" "$pkg" \
"$c6" \
"$c"
done < <(xbps-query -v -l)
;;
listw|lw)
xbps-query -l | awk '{ print $2 }' | xargs -n1 xbps-uhelper getpkgname
;;
listalternative|listalternatives|la)
wrapcommand xbps-alternatives -l "$@"
;;
setalternative|setalternatives|sa)
rootcheck
wrapcommand xbps-alternatives -s "$@"
echo
;;
repolist|listrepos|rl|lr)
code=0
msg -n "Configured repositories (xbps-query -v -L): "
xbps-query -v -L
ret=$?
((ret == 0)) || code=1
rmsg "$ret" "[xbps-query -v -L] return code: $ret"
echo
msg -n "Available sub-repositories (xbps-query -v -Rs void-repo): "
xbps-query -v -Rs void-repo
ret=$?
((ret == 0)) || code=1
rmsg "$ret" "[xbps-query -v -Rs void-repo] return code: $ret"
echo
msg -n "Use \"$progname addrepo <repository>\" to add a sub-repository."
echo
exit "$code"
;;
addrepo|ad)
rootcheck
echo
if (($# < 1)); then
rmsg 255 "ERROR: install: argument missing, try --help."
exit 1
fi
code=0
for repo in "$@"; do
msg "Adding repository: $repo"
$SUDO xbps-install "$repo"
ret=$?
((ret == 0)) || code=1
rmsg "$ret" "[xbps-install $arg] return code: $ret"
msg "Synchronizing remote repository data (xbps-install -S): "
$SUDO xbps-install -S
ret=$?
((ret == 0)) || code=1
rmsg "$ret" "[xbps-install -S] return code: $ret"
done
exit "$code"
;;
sync|sy)
rootcheck
msg -n 'Synchronizing remote repository data '
echo
wrapcommand "$SUDO" xbps-install -S
;;
install|i)
rootcheck
if (($# < 1)); then
rmsg 255 "ERROR: install: argument missing, try --help."
exit 1
fi
msg -n "Installing packages: $* "
echo
wrapcommand "$SUDO" xbps-install "$@"
;;
yesinstall)
rootcheck
if (($# < 1)); then
rmsg 255 "ERROR: install: argument missing, try --help."
exit 1
fi
msg -n "Installing packages (assumed yes): $* "
echo
wrapcommand "$SUDO" xbps-install -y "$@"
;;
devinstall)
rootcheck
if (($# < 1)); then
rmsg 255 "ERROR: devinstall: argument missing, try --help."
exit 1
fi
args=("$@")
code=0
msg "devinstall: Packages will be installed one-by-one"
msg "Use \"forceinstall\" to override this if you know what you're doing."
msg "(Note: forceinstall won't install -devel packages)"
for arg in "${args[@]}"; do
msg "Installing package: $arg (xbps-install $arg) ..."
$SUDO xbps-install "$arg"
ret=$?
((ret == 0)) || code=1
rmsg "$ret" "[xbps-install $arg] return code: $ret"
msg "installing devel package (${arg}-devel):"
$SUDO xbps-install "${arg}-devel"
ret=$?
((ret == 0)) || code=1
rmsg "$ret" "[xbps-install ${arg}-devel] return code: $ret"
done
exit "$code"
;;
forceinstall|fi)
rootcheck
msg -n "Force-Installing Package(s): $* "
echo
wrapcommand "$SUDO" xbps-install -f "$@"
;;
remove|rm)
rootcheck
msg -n "Removing package(s): $* "
echo
wrapcommand "$SUDO" xbps-remove -v "$@"
;;
removerecursive|rr)
rootcheck
msg -n "Removing package(s) recursively: $* "
echo
wrapcommand "$SUDO" xbps-remove -v -R "$@"
;;
reconfigure|rc)
rootcheck
msg -n 'reconfigure: Re-configuring package(s) '
echo
wrapcommand "$SUDO" xbps-reconfigure -v "$@"
;;
autoremove|ar)
rootcheck
msg -n 'autoremove: Removing orphaned packages '
echo
wrapcommand "$SUDO" xbps-remove -v -o
;;
update|upgrade|up)
rootcheck
msg -n 'Running system update '
echo
$SUDO xbps-install -Suv
if [[ $? == 16 ]]; then
msg -n "$(tput setaf 1)Updating xbps $(tput sgr 0)"
$SUDO xbps-install -u xbps
wrapcommand "$SUDO" xbps-install -Suv
else
if [[ $? == 1 ]]; then
msg 'Your system is up to date.'
else
msg $? 'Something goes wrong!'
fi
fi
msg 'Checking if something need restart...'
xcheckrestart
;;
search|s)
msg -n "Searching for: $* "
wrapcommand xbps-query -v -Rs "$*"
;;
# TODO: instead of grep use proper command
searchlib|sl)
msg -n "Searching for: $* "
wrapcommand xbps-query -v -Rs "$*" | grep -v 32bit
;;
cleanup|clean|cl)
msg -n 'Remove obsolete packages in cachedir '
rootcheck
echo
wrapcommand "$SUDO" xbps-remove -v -O "$@"
;;
h|help|-h|--help)
usage
;;
helppager|help-pager|hp)
pager=$PAGER
if [[ -z $pager ]]; then
if command -v less &>/dev/null; then
pager=less
else
pager=more
fi
fi
"$0" --color=off help | $pager
exit 0
;;
version|v)
version
exit 0
;;
whatprovides|wp)
if ! command -v xlocate &>/dev/null; then
rmsg 255 "xlocate not found. Try installing the xtools package."
exit 1
fi
msg -n "relaying to xlocate - use xlocate -S to (re-)build cached DB. "
wrapcommand xlocate "$@"
;;
''|*)
xbpscmd="xbps-$cmd"
if ! command -v "$xbpscmd" &>/dev/null; then
rmsg 255 "Unrecognized $progname subcommand: $cmd (and $xbpscmd does not exist) - Try: $progname help"
echo
exit 1
fi
# xbps-<subcommand> found
msg -n 'relaying to XBPS: '
wrapcommand "$xbpscmd" "$@"
;;
esac
# enjoy and make better if you can...

735
vbm.sh Executable file
View File

@ -0,0 +1,735 @@
#!/bin/bash
# vim: ft=sh ts=2 sw=2 sts=2 et
# vbm - vb-linux management utility for
# XBPS, the X Binary Package System
# original author: Armin Jenewein <a@m2m.pm>, GitHub: @netzverweigerer
# a lot used from: Dave Eddy <dave@daveeddy.com>, GitHub: @bahamas10
# this fork: zenobit <zen@osowoso.xyz>, codeberg.org: @oSoWoSo
# For more information about XBPS, see:
# https://github.com/voidlinux/xbps
# Released under the terms of the GNU general public license, version 3+
# see LICENSE file for license information.
# set version number
version="1.4.2"
# enable verbosity, by default
verbose=true
# program name
progname=${0##*/}
# VBM color definitions
numcolorok=2
numcolorfail=1
numcolorlogo=2
numcolorheader=3
numcolortext=4
numcolorgray=8
numcolorpkgcount=7
numcolordarkgray=11
numcolorbrackets=1
# enable or disable colors based on the argument given, i.e.:
# setcolors on # colors on
# setcolors off # colors off
# setcolors auto # colors on or off depending on environment
declare -A COLORS
setcolors() {
local opt=$1
# determine if colors should be enabled or not
if [[ $opt == auto ]]; then
# if stdout is a TTY and the TERM looks like it supports color enable colors
if [[ -t 1 && $TERM == *color* ]]; then
opt='on'
else
opt='off'
fi
fi
case "$opt" in
on)
local i
for i in {1..11}; do
if [[ -n ${COLORS[$i]} ]]; then
continue
fi
COLORS[$i]=$(tput setaf "$i")
done
colorbrackets=${COLORS[$numcolorbrackets]}
colordarkgray=${COLORS[$numcolordarkgray]}
colorfail=${COLORS[$numcolorfail]}
colorgray=${COLORS[$numcolorgray]}
colorheader=${COLORS[$numcolorheader]}
colorlogo=${COLORS[$numcolorlogo]}
colorok=${COLORS[$numcolorok]}
colorpkgcount=${COLORS[$numcolorpkgcount]}
colortext=${COLORS[$numcolortext]}
colorreset=$(tput sgr0)
;;
off)
colorbrackets=
colordarkgray=
colorfail=
colorgray=
colorheader=
colorlogo=
colorok=
colorpkgcount=
colortext=
colorreset=
unset COLORS
declare -A COLORS
;;
*)
rmsg 255 "unknown color option: '$opt'"
exit 255
;;
esac
}
# print the logo with brackets colorized
getlogo() {
printf '%s[%s%s%s]%s' \
"$colorbrackets" \
"$colorlogo" "$progname" \
"$colorbrackets" \
"$colorreset"
}
# prints a message (with vbm-prefix)
msg() {
local logo=$(getlogo)
local newline=true
if [[ $1 == '-n' ]]; then
newline=false
shift
fi
printf '%s %s%s%s' "$logo" "$colortext" "$*" "$colorreset"
$newline && echo
}
# rmsg - same (but colorized based on return status passed via $1)
rmsg() {
local code=$1
shift
local logo=$(getlogo)
local statuscolor
if ((code == 0)); then
statuscolor=$colorok
else
statuscolor=$colorfail
fi
printf '%s %s%s%s\n' "$logo" "$statuscolor" "$*" "$colorreset"
}
banner() {
echo -n "$colorlogo"
echo ' __ __/|__ _ __ '
printf " \\ V / '_ \\ ' \ "
echo -n "$colorgray"
echo " $progname - XBPS package management helper"
echo -n "$colorlogo"
echo -n ' \_/|_,__/_|_|_\'
echo -n "$colorgray"
echo ' Source: https://codeberg.org/oSoWoSo/vbm'
echo -n "$colorlogo"
echo -n "$colorreset"
}
version() {
banner
echo
msg "${colorpkgcount}$progname - Version: $version (GPLv3+)"
msg "${colorpkgcount}original author: Armin Jenewein <a@m2m.pm>"
msg "https://github.com/netzverweigerer/vpm"
msg "${colorpkgcount}a lot used from: Dave Eddy <dave@daveeddy.com>"
msg "https://github.com/bahamas10/vpm"
msg "${colorpkgcount}this fork: zenobit <zen@osowoso.xyz>"
msg "https://codeberg.org/oSoWoSo/vbm"
msg "${colorpkgcount}XBPS version: $(xbps-query -v --version | sed 's/GIT: UNSET//')"
}
# check if we have UID 0, exit otherwise
rootcheck() {
if [[ $EUID -gt 0 ]]; then
msg "$(tput setaf 1)This operation needs super-user privileges.$(tput sgr 0)"
SUDO=sudo
else
SUDO=''
fi
}
t() {
if [[ -n $show_translations ]]; then
tput setaf 242
echo ' ' "$@"
echo
tput setaf 109
fi
}
wrapcommand() {
local cmd ret
cmd=("$@")
echo "$colortext(${cmd[*]}):$colorreset"
"${cmd[@]}"
ret=$?
rmsg "$ret" "[${cmd[*]}], return code was: $ret"
exit "$ret"
}
usage() {
echo
version
echo
echo "${colorheader}USAGE:
${colorpkgcount}${progname} ${colortext}[OPTIONS] ${colorok}[SUBCOMM${colorfail}ANDS] ${colorpkgcount}[<ARGS>]
${colorheader} OPTIONS :
${colortext}--color=<yes|no|auto> ${colorgray}Enable/Disable colorized output (default: auto)
${colortext}--help ${colorgray}(same as: help) show usage
${colortext}--slim ${colorgray}(same as: slim) show usage for small screens
${colortext}--help-pager ${colorgray}(same as: helppager)
${colortext}--show-translations ${colorgray}Show ${colorpkgcount}XBPS${colorgray} command translations for $colorpkgcount$progname$colorgray sub-commands
${colortext}--verbose ${colorgray}Show ${colorpkgcount}XBPS${colorgray} command translations during execution
${colorheader} SUBCOMMANDS :
${colorok}(long) ${colorfail}(short)${colorpkgcount} <ARGS>"
echo " ${colorok}sync ${colorfail}(S) ${colorgray}Synchronize remote repository data"
t "xbps-install -S"
echo " ${colorok}update ${colorfail}(u) ${colorgray}Update the system"
t "xbps-install -Suv"
echo " ${colorok}search ${colorfail}(s) ${colorpkgcount}<pkg> ${colorgray}Search for package"
t "xbps-query -v -Rs"
echo " ${colorok}syncsearch ${colorfail}(Ss) ${colorgray}Fetch repodata and search for package"
t "xbps-query -v -MRs"
echo " ${colorok}about ${colorfail}(a) ${colorpkgcount}<pkg> ${colorgray}Show information about <package>"
t "xbps-query -v -R"
echo " ${colorok}install ${colorfail}(i) ${colorpkgcount}<pkg(s)> ${colorgray}Install <package(s)>"
t "xbps-install"
echo " ${colorok}remove ${colorfail}(rm) ${colorpkgcount}<pkg(s)> ${colorgray}Remove <package(s)> from the system"
t "xbps-remove -v "
echo " ${colorok}filelist ${colorfail}(fl) ${colorpkgcount}<pkg> ${colorgray}Show file-list of <package>"
t "xbps-query -v -R -f"
echo " ${colorok}deps ${colorfail}(d) ${colorpkgcount}<pkg> ${colorgray}Show dependencies for <package>"
t "xbps-query -v -R -x"
echo " ${colorok}reverse ${colorfail}(rd) ${colorpkgcount}<pkg> ${colorgray}Show reverse dependendies of <package>"
t "xbps-query -v -R -X"
echo " ${colorok}searchlib ${colorfail}(sl) ${colorpkgcount}<pkg> ${colorgray}Search for package (64bit only)"
t "xbps-query -v -Rs"
echo " ${colorok}searchfile ${colorfail}(sf) ${colorpkgcount}<file> ${colorgray}Search for package containing <file> (local)"
t "xbps-query -v -o \"*/$1\""
echo " ${colorok}whatprovides ${colorfail}(wp) ${colorpkgcount}<file> ${colorgray}Search for package containing <file>"
t "xlocate ${colorpkgcount}<pkg>"
echo " ${colorok}list ${colorfail}(ls) ${colorgray}List installed packages"
t "xbps-query -v -l"
echo " ${colorok}listw ${colorfail}(lw) ${colorgray}List installed packages without their version"
t "xbps-query -l | awk '{ print $2 }' | xargs -n1 xbps-uhelper getpkgname"
echo " ${colorok}listalternatives ${colorfail}(la) ${colorgray}List alternative candidates"
t "xbps-alternatives -l"
echo " ${colorok}listrepos ${colorfail}(lr) ${colorgray}List configured repositories"
echo " ${colorok}repolist ${colorfail}(rl) ${colorgray}Alias for listrepos"
t "xbps-query -v -L"
echo " ${colorok}addrepo ${colorfail}(ad) ${colorpkgcount}<ARGS> ${colorgray}Add an additional repository"
t "xbps-install ${colorpkgcount}<ARGS>"
echo " ${colorok}devinstall ${colorfail}(di) ${colorpkgcount}<pkg(s)> ${colorgray}Install <package>${colorgray} and devel-<package(s)>"
t "xbps-install <package> <package>${colorgray}-devel"
echo " ${colorok}reconfigure ${colorfail}(rc) ${colorpkgcount}<pkg> ${colorgray}Re-configure installed <package>"
t "xbps-reconfigure -v"
echo " ${colorok}forceinstall ${colorfail}(fi) ${colorpkgcount}<pkg(s)> ${colorgray}Force installation of <package(s)>"
t "xbps-install -f"
echo " ${colorok}setalternative ${colorfail}(sa) ${colorpkgcount}<pkg(s)> ${colorgray}Set alternative for <package>"
t "xbps-alternatives -s"
echo " ${colorok}removerecursive ${colorfail}(rr) ${colorpkgcount}<pkg(s)> ${colorgray}Remove package(s) with dependencies"
t "xbps-remove -v -R"
echo " ${colorok}cleanup ${colorfail}(cl) ${colorgray}Remove obsolete packages in cachedir"
t "xbps-remove -v -O"
echo " ${colorok}autoremove ${colorfail}(ar) ${colorgray}Remove orphaned packages"
t "xbps-remove -v -o"
echo
echo "${colorpkgcount}XBPS${colorheader} COMPATIBILITY COOLNESS:"
echo -n "$colorgray"
f=(/usr/sbin/xbps-*)
echo "$colorpkgcount$progname$colorgray also understands all unknown ${colorpkgcount}XBPS${colorgray} sub-commands, too:"
echo -n "Example: "
selected=${f[$RANDOM % ${#f[@]}]}
echo "$colorpkgcount$progname$colorok ${selected##*-}$colorreset ${colorpkgcount}<ARGS> $colorgray- see also: /usr/sbin/xbps-*"
echo -n "$colorreset"
}
usage_slim() {
echo
version
echo
echo "${colorheader}USAGE:
${colorpkgcount}${progname} ${colortext}[OPTIONS] ${colorok}[SUBCOMM${colorfail}ANDS] ${colorpkgcount}[<ARGS>]
${colorheader}OPTIONS :
${colortext}--color=<yes|no|auto>
${colorgray}Enable/Disable colorized output (default: auto)
${colortext}--help
${colorgray}(same as: help) show usage
${colortext}--slim
${colorgray}(same as: slim) show usage for small screens
${colortext}--help-pager
${colorgray}(same as: helppager)
${colortext}--show-translations
${colorgray}Show ${colorpkgcount}XBPS${colorgray} command translations for $colorpkgcount$progname$colorgray sub-commands
${colortext}--verbose
${colorgray}Show ${colorpkgcount}XBPS${colorgray} command translations during execution
${colorheader} SUBCOMMANDS :
${colorok}(long) ${colorfail}(short)${colorpkgcount} <ARGS>
${colorok}about ${colorfail}(a) ${colorpkgcount}<pkg>
${colorgray}Show information about <package>"
t "xbps-query -v -R"
echo "${colorok}filelist ${colorfail}(fl) ${colorpkgcount}<pkg>
${colorgray}Show file-list of <package>"
t "xbps-query -v -R -f"
echo "${colorok}deps ${colorfail}(d) ${colorpkgcount}<pkg>
${colorgray}Show dependencies for <package>"
t "xbps-query -v -R -x"
echo "${colorok}reverse ${colorfail}(rd) ${colorpkgcount}<pkg>
${colorgray}Show reverse dependendies of <package>"
t "xbps-query -v -R -X"
echo "${colorok}search ${colorfail}(s) ${colorpkgcount}<pkg>
${colorgray}Search for package"
t "xbps-query -v -Rs"
echo "${colorok}searchlib ${colorfail}(sl) ${colorpkgcount}<pkg>
${colorgray}Search for package (64bit only)"
t "xbps-query -v -Rs"
echo "${colorok}searchfile ${colorfail}(sf) ${colorpkgcount}<file>
${colorgray}Search for package containing <file> (local)"
t "xbps-query -v -o \"*/$1\""
echo "${colorok}whatprovides ${colorfail}(wp) ${colorpkgcount}<file>
${colorgray}Search for package containing <file>"
t "xlocate ${colorpkgcount}<pkg>"
echo "${colorok}list ${colorfail}(ls)
${colorgray}List installed packages"
t "xbps-query -v -l"
echo "${colorok}listw ${colorfail}(lw)
${colorgray}List installed packages without version"
t "xbps-query -l | awk '{ print $2 }' | xargs -n1 xbps-uhelper getpkgname"
echo "${colorok}listalternatives ${colorfail}(la)
${colorgray}List alternative candidates"
t "xbps-alternatives -l"
echo "${colorok}listrepos ${colorfail}(lr)
${colorgray}List configured repositories"
echo "${colorok}repolist ${colorfail}(rl)
${colorgray}Alias for listrepos"
t "xbps-query -v -L"
echo "${colorok}sync ${colorfail}(S)
${colorgray}Synchronize remote repository data"
t "xbps-install -S"
echo "${colorok}update ${colorfail}(u)
${colorgray}Update the system"
t "xbps-install -Suv"
echo "${colorok}addrepo ${colorfail}(ad) ${colorpkgcount}<ARGS>
${colorgray}Add an additional repository"
t "xbps-install ${colorpkgcount}<ARGS>"
echo "${colorok}install ${colorfail}(i) ${colorpkgcount}<pkg(s)>
${colorgray}Install <package(s)>"
t "xbps-install"
echo "${colorok}devinstall ${colorfail}(di) ${colorpkgcount}<pkg(s)>
${colorgray}Install <package> and devel-<package>(s)"
t "xbps-install <package> <package>-devel"
echo "${colorok}reconfigure ${colorfail}(rc) ${colorpkgcount}<pkg>
${colorgray}Re-configure installed <package>"
t "xbps-reconfigure -v"
echo "${colorok}forceinstall ${colorfail}(fi) ${colorpkgcount}<pkg(s)>
${colorgray}Force installation of <package(s)>"
t "xbps-install -f"
echo "${colorok}setalternative ${colorfail}(sa) ${colorpkgcount}<pkg(s)>
${colorgray}Set alternative for <package>"
t "xbps-alternatives -s"
echo "${colorok}remove ${colorfail}(rm) ${colorpkgcount}<pkg(s)>
${colorgray}Remove <package(s)>${colorgray} from the system"
t "xbps-remove -v "
echo "${colorok}removerecursive ${colorfail}(rr) ${colorpkgcount}<pkg(s)>
${colorgray}Remove package(s) with dependencies"
t "xbps-remove -v -R"
echo "${colorok}cleanup ${colorfail}(cl)
${colorgray}Remove obsolete packages in cachedir"
t "xbps-remove -v -O"
echo "${colorok}autoremove ${colorfail}(ar)
${colorgray}Remove orphaned packages"
t "xbps-remove -v -o"
echo "$colorheader"
echo "${colorpkgcount}XBPS${colorgray} COMPATIBILITY COOLNESS:"
echo -n "$colorgray"
f=(/usr/sbin/xbps-*)
echo "$colorpkgcount$progname$colorgray understands ${colorpkgcount}XBPS${colorgray} sub-commands"
echo -n "Example: "
selected=${f[$RANDOM % ${#f[@]}]}
echo "$colorpkgcount$progname$colorok ${selected##*-}$colorreset ${colorpkgcount}<ARGS> $colorgray
see also: /usr/sbin/xbps-*$colorreset"
}
setcolors auto
case "$1" in
--color=true|--color=yes|--color=on)
setcolors on
shift
;;
--color=auto)
setcolors auto
shift
;;
--color=false|--color=off|--color=no)
setcolors off
shift
;;
--verbose=true)
shift
verbose=true
;;
--show-translations)
shift
show_translations=1
;;
--help)
shift
usage
exit 255
;;
--slim)
shift
usage_slim
;;
--help-pager)
shift
"$0" --color=off --help | less
;;
--*)
msg "Unknown option: $1 (try: $progname --help)"
exit 1
;;
esac
if [[ -z $1 ]]; then
usage
exit 0
fi
cmd=$1
if [[ $arg =~ --.* ]]; then
cmd=${arg:2}
fi
shift
case "$cmd" in
about|a)
wrapcommand xbps-query -v -R "$@"
;;
filelist|fl|listfiles)
wrapcommand xbps-query -v -R -f "$@"
;;
deps|dep|dependencies|d)
wrapcommand xbps-query -v -R -x "$@"
;;
reverse|rd)
msg "Reverse dependencies for $* "
wrapcommand xbps-query -v -R -X "$@"
;;
searchfile|sf)
msg 'searchfile '
wrapcommand xbps-query -v -o "*/$1"
;;
remotesearchfile|rsf)
msg 'remotesearchfile '
wrapcommand xbps-query -R -v -o "*/$1"
;;
list|ls)
msg 'Installed packages: '
count=0
while read -r _ pkg _; do
((count++))
pkgname=${pkg%-*}
version=${pkg##*-}
printf '%s%d %s%s %s (%s%s%s) [%s%s%s]%s\n' \
"$colorpkgcount" "$count" \
"$colortext" "$pkgname" \
"$colorbrackets" \
"$colorgray" "$version" \
"$colorbrackets" \
"$colordarkgray" "$pkg" \
"$colorbrackets" \
"$colorreset"
done < <(xbps-query -v -l)
;;
listw|lw)
xbps-query -l | awk '{ print $2 }' | xargs -n1 xbps-uhelper getpkgname
;;
listalternative|listalternatives|la)
wrapcommand xbps-alternatives -l "$@"
;;
setalternative|setalternatives|sa)
rootcheck
wrapcommand xbps-alternatives -s "$@"
echo
;;
repolist|listrepos|rl|lr)
code=0
msg "Configured repositories (xbps-query -v -L): "
xbps-query -v -L
ret=$?
((ret == 0)) || code=1
rmsg "$ret" "[xbps-query -v -L] return code: $ret"
echo
msg "Available sub-repositories (xbps-query -v -Rs void-repo): "
xbps-query -v -Rs void-repo
ret=$?
((ret == 0)) || code=1
rmsg "$ret" "[xbps-query -v -Rs void-repo] return code: $ret"
echo
msg "Use \"$progname addrepo <repository>\" to add a sub-repository."
echo
exit "$code"
;;
addrepo|ad)
rootcheck
echo
if (($# < 1)); then
rmsg 255 "ERROR: install: argument missing, try --help."
exit 1
fi
code=0
for repo in "$@"; do
msg "Adding repository: $repo"
$SUDO xbps-install "$repo"
ret=$?
((ret == 0)) || code=1
rmsg "$ret" "[xbps-install $arg] return code: $ret"
msg "Synchronizing remote repository data (xbps-install -S): "
$SUDO xbps-install -S
ret=$?
((ret == 0)) || code=1
rmsg "$ret" "[xbps-install -S] return code: $ret"
done
exit "$code"
;;
sync|S)
rootcheck
msg 'Synchronizing remote repository data '
echo
wrapcommand "$SUDO" xbps-install -S "$@"
;;
install|i)
rootcheck
if (($# < 1)); then
rmsg 255 "ERROR: install: argument missing, try --help."
exit 1
fi
msg "Installing packages: $* "
echo
wrapcommand "$SUDO" xbps-install "$@"
;;
yesinstall)
rootcheck
if (($# < 1)); then
rmsg 255 "ERROR: install: argument missing, try --help."
exit 1
fi
msg "Installing packages (assumed yes): $* "
echo
wrapcommand "$SUDO" xbps-install -y "$@"
;;
devinstall)
rootcheck
if (($# < 1)); then
rmsg 255 "ERROR: devinstall: argument missing, try --help."
exit 1
fi
args=("$@")
code=0
msg "devinstall: Packages will be installed one-by-one"
msg "Use \"forceinstall\" to override this if you know what you're doing."
msg "(Note: forceinstall won't install -devel packages)"
for arg in "${args[@]}"; do
msg "Installing package: $arg (xbps-install $arg) ..."
$SUDO xbps-install "$arg"
ret=$?
((ret == 0)) || code=1
rmsg "$ret" "[xbps-install $arg] return code: $ret"
msg "installing devel package (${arg}-devel):"
$SUDO xbps-install "${arg}-devel"
ret=$?
((ret == 0)) || code=1
rmsg "$ret" "[xbps-install ${arg}-devel] return code: $ret"
done
exit "$code"
;;
forceinstall|fi)
rootcheck
msg "Force-Installing Package(s): $* "
echo
wrapcommand "$SUDO" xbps-install -f "$@"
;;
remove|rm)
rootcheck
msg "Removing package(s): $* "
echo
wrapcommand "$SUDO" xbps-remove -v "$@"
;;
removerecursive|rr)
rootcheck
msg "Removing package(s) recursively: $* "
echo
wrapcommand "$SUDO" xbps-remove -v -R "$@"
;;
reconfigure|rc)
rootcheck
msg 'reconfigure: Re-configuring package(s) '
echo
wrapcommand "$SUDO" xbps-reconfigure -v "$@"
;;
autoremove|ar)
rootcheck
msg 'autoremove: Removing orphaned packages '
echo
wrapcommand "$SUDO" xbps-remove -v -o
;;
update|upgrade|up|u)
rootcheck
msg 'Running system update '
echo
$SUDO xbps-install -Suv
if [[ $? == 16 ]]; then
msg "$(tput setaf 1)Updating xbps $(tput sgr 0)"
$SUDO xbps-install -u xbps
wrapcommand "$SUDO" xbps-install -Suv
else
if [[ $? == 1 ]]; then
msg 'Your system is up to date.'
else
msg $? 'Something goes wrong!'
fi
fi
msg 'Checking if something need restart...'
echo
xcheckrestart
;;
syncsearch|Ss)
msg "Syncing and searching for: $* "
wrapcommand xbps-query -v -MRs "$*"
;;
search|s)
msg "Searching for: $* "
wrapcommand xbps-query -v -Rs "$*"
;;
# TODO: instead of grep use proper command
searchlib|sl)
msg "Searching for: $* "
wrapcommand xbps-query -v -Rs "$*" | grep -v 32bit
;;
cleanup|clean|cl)
msg 'Remove obsolete packages in cachedir '
rootcheck
echo
wrapcommand "$SUDO" xbps-remove -v -O "$@"
;;
h|help|-h|--help)
usage
;;
slim|--slim)
usage_slim
;;
helppager|help-pager|hp)
pager=$PAGER
if [[ -z $pager ]]; then
if command -v less &>/dev/null; then
pager=less
else
pager=more
fi
fi
"$0" --color=off help | $pager
exit 0
;;
version|v)
version
exit 0
;;
whatprovides|wp)
if ! command -v xlocate &>/dev/null; then
rmsg 255 "xlocate not found. Try installing the xtools package."
exit 1
fi
msg "relaying to xlocate - use xlocate -S to (re-)build cached DB. "
wrapcommand xlocate "$@"
;;
''|*)
xbpscmd="xbps-$cmd"
if ! command -v "$xbpscmd" &>/dev/null; then
rmsg 255 "Unrecognized $progname subcommand: $cmd (and $xbpscmd does not exist) - Try: $progname help"
echo
exit 1
fi
# xbps-<subcommand> found
msg "relaying to ${colorpkgcount}XBPS${colorgray}: "
wrapcommand "$xbpscmd" "$@"
;;
esac
exit 0
# enjoy and make better if you can...