# limitations under the License.
# basic yum/apt package manager abstraction, plus a few minor conveniences
-if type -p yum > /dev/null; then
+if command -v yum &> /dev/null; then
# package manager
p() {
- local x
- [[ $EUID == 0 ]] && x=sudo
- $x yum "$@"
+ local s; [[ $EUID != 0 ]] && s=sudo
+ $s yum "$@"
}
# package install
pi() {
- local x
- [[ $EUID == 0 ]] && x=sudo
- $x yum -y install "$@"
+ local s; [[ $EUID != 0 ]] && s=sudo
+ $s yum -y install "$@"
}
# package find
pf() {
- local x
- [[ $EUID == 0 ]] && x=sudo
- $x yum search "$@"
+ local s; [[ $EUID != 0 ]] && s=sudo
+ $s yum search "$@"
}
# package remove/uninstall
pu() {
- local x
- [[ $EUID == 0 ]] && x=sudo
- $x yum autoremove "$@"
+ local s; [[ $EUID != 0 ]] && s=sudo
+ $s yum autoremove "$@"
}
pup() { # upgrade
- local x
- [[ $EUID == 0 ]] && x=sudo
- $x yum -y distro-sync full
+ local s; [[ $EUID != 0 ]] && s=sudo
+ $s yum -y distro-sync full "$@"
}
# package list info
pl() {
yum info "$@"
}
+ pfile() {
+ yum whatprovides \*/$1
+ }
-else
+elif command -v apt-get &>/dev/null; then
p() {
- local x
- [[ $EUID == 0 ]] && x=sudo
- $x aptitude "$@"
+ local s; [[ $EUID != 0 ]] && s=sudo
+ $s apt-get "$@"
}
- pi() {
- local x
- [[ $EUID == 0 ]] && x=sudo
- # update package list if its more than an hour old
- if (( $(( $(date +%s) - $(stat -c %Y /var/lib/apt/periodic/update-success-stamp) )) > 60*60 )); then
- $x aptitude update
+ pupdate() {
+ local s f; [[ $EUID != 0 ]] && s=sudo
+ # update package list if its more than an 2 hours old
+ f=/var/cache/apt/pkgcache.bin
+ if [[ ! -r $f ]] \
+ || (( $(( $(date +%s) - $(stat -c %Y $f ) )) > 60*60*2 )); then
+ $s apt-get update
fi
- $x aptitude -y install "$@"
+ }
+ pi() {
+ pupdate
+ local s; [[ $EUID != 0 ]] && s=sudo
+ $s apt-get -y install "$@"
+ }
+ pi-nostart() {
+ local s; [[ $EUID != 0 ]] && s=sudo
+ local f=/usr/sbin/policy-rc.d
+ $s dd of=$f <<EOF
+#!/bin/sh
+exit 101
+EOF
+ $s chmod +x $f
+ pi "$@"
+ $s rm $f
}
pf() {
- # scratch a very annoying itch.
- # package description width as wide as the screen, and package name field small
- # aptitude manual can't figure out how wide emacs terminal is,
- # of course it doesn't consult the $COLUMNS variable...
- # and in a normal terminal, it makes the package name field ridiculously big
+ # scratch a very annoying itch. package description width as
+ # wide as the screen, and package name field small aptitude
+ # manual can't figure out how wide emacs terminal is, of course
+ # it doesn't consult the $COLUMNS variable... and in a normal
+ # terminal, it makes the package name field ridiculously big
# also, remove that useless dash before the description
- local x
- [[ $EUID == 0 ]] && x=sudo
- $x aptitude -F "%c%a%M %p %$((COLUMNS - 30))d" -w $COLUMNS search "$@"
+ local s; [[ $EUID != 0 ]] && s=sudo
+ $s aptitude -F "%c%a%M %p %$((COLUMNS - 30))d" -w $COLUMNS search "$@"
}
pu() {
- local x
- [[ $EUID == 0 ]] && x=sudo
- $x aptitude -y purge "$@"
+ local s; [[ $EUID != 0 ]] && s=sudo
+ $s apt-get -y purge "$@"
+ $s apt-get -y autoremove
}
pup() { # upgrade
- local x
- [[ $EUID == 0 ]] && x=sudo
- $x aptitude -y full-upgrade "$@"
+ pupdate
+ local s; [[ $EUID != 0 ]] && s=sudo
+ $s apt-get -y dist-upgrade "$@"
+ $s apt-get -y autoremove
}
# package info
pl() {
aptitude show "$@"
}
-
+ pfile() {
+ if [[ $file == /* ]] && ucfq -w $file | grep -v ::: &>/dev/null; then
+ ucfq $file
+ elif [[ $file == */* ]]; then
+ apt-file find -x "$1"\$
+ else
+ apt-file find -x /"$1"\$
+ fi
+ }
+ pkgfiles() {
+ if dpkg -s "$1" &>/dev/null; then
+ dpkg-query -L $1
+ else
+ apt-file -x list "^$1$"
+ fi
+ }
+
+elif command -v pacman &>/dev/null; then
+ p() {
+ pacaur "$@"
+ }
+ pi() {
+ pacaur -S --noconfirm --needed --noedit "$@"
+ }
+ pf() {
+ pacaur -Ss "$@"
+ }
+ pu() {
+ pacaur -Rs --noconfirm "$@"
+ if p=$(pacaur -Qdtq); then
+ pacaur -Rs $p
+ fi
+ }
+ aurex() {
+ p="$1"
+ aur='https://aur.archlinux.org'
+ curl -s $aur/$(curl -s "$aur/rpc.php?type=info&arg=$p" \
+ | jq -r .results.URLPath) | tar xz
+ cd "$p"
+
+ }
+ pmirror() {
+ local s; [[ $EUID != 0 ]] && s=sudo
+ local x=$(mktemp)
+ curl -s "https://www.archlinux.org/mirrorlist/\
+?country=US&protocol=https&ip_version=4&ip_version=6&use_mirror_status=on" \
+ | sed -r 's/^[ #]*(Server *=)/\1/' > $x
+ if (( $(stat -c %s $x ) > 10 )); then
+ $s cp $x /etc/pacman.d/mirrorlist
+ rm $x
+ fi
+ }
+ pup() { # upgrade
+ local s; [[ $EUID != 0 ]] && s=sudo
+ # file_time + 24 hours > current_time
+ if ! (( $(stat -c%Y /etc/pacman.d/mirrorlist) + 60*60*24 > $(date +%s) ))
+ then
+ pmirror
+ fi
+ pacaur -Syu --noconfirm "$@"
+ }
+ # package info
+ pl() {
+ pacaur -Si "$@"
+ }
+ pfile() {
+ pkgfile "$1"
+ }
+ pkgfiles() {
+ if pacaur -Qs "^$1$" &>/dev/null; then
+ pacman -Ql $1
+ else
+ pkgfile -l $1
+ fi
+ }
fi