2022-05-28 12:49:20 -04:00
|
|
|
#!/bin/bash
|
|
|
|
#
|
|
|
|
# pkgfoster 2005-11-27
|
|
|
|
# Jukka Heino <jukka@karsikkopuu.net>
|
|
|
|
#
|
|
|
|
# pkgfoster is a simple script you can use to clean up orphaned packages (i.e.
|
2022-05-29 12:37:33 -04:00
|
|
|
# packages which do not appear in the "Depends on: " line of any other installed
|
|
|
|
# package). It uses prt-cache by default, so remember to build the cache with
|
|
|
|
# "prt-get cache". You can also use normal prt-get by modifying the PRT_GET
|
|
|
|
# variable. The file ~/.config/pkgfoster.keep contains a list of all packages
|
|
|
|
# you've decided to keep. Packages from core are never considered for deletion.
|
2022-05-28 12:49:20 -04:00
|
|
|
#
|
|
|
|
|
|
|
|
PRT_GET=prt-cache
|
|
|
|
|
|
|
|
if [ $UID = 0 ]; then
|
|
|
|
PKGRM=pkgrm
|
|
|
|
else
|
|
|
|
if command -v doas; then
|
|
|
|
PKGRM="doas pkgrm"
|
|
|
|
elif command -v sudo; then
|
|
|
|
PKGRM="sudo pkgrm"
|
|
|
|
else
|
|
|
|
PKGRM="su -c pkgrm"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
BASE=$(awk '/^[[:space:]]*prtdir.*\/core/ {print $2}' /etc/prt-get.conf)
|
2022-05-29 12:37:33 -04:00
|
|
|
CONF="${XDG_CONFIG_HOME:="$HOME/.config"}/pkgfoster.keep"
|
|
|
|
if [ ! -f "$CONF" ]; then
|
|
|
|
mkdir -p "${XDG_CONFIG_HOME}"
|
|
|
|
touch "$CONF"
|
|
|
|
fi
|
2022-05-28 12:49:20 -04:00
|
|
|
|
|
|
|
echo "Checking packages for orphans..."
|
|
|
|
|
|
|
|
while true ; do
|
|
|
|
RECHECK=0
|
|
|
|
|
2022-05-29 12:37:33 -04:00
|
|
|
orphans=$(comm -23 <($PRT_GET listorphans | sort) \
|
|
|
|
<(cat <(find "$BASE" -maxdepth 1 -type d -printf "%f\n") "$CONF" \
|
|
|
|
| sort -u) | tr '\n' ' ')
|
2022-05-28 12:49:20 -04:00
|
|
|
|
|
|
|
for PACKAGE in ${orphans[@]}; do
|
|
|
|
echo
|
|
|
|
$PRT_GET info $PACKAGE
|
|
|
|
echo
|
|
|
|
|
|
|
|
echo -n "Uninstall $PACKAGE? (y/N) "
|
|
|
|
read ANSWER
|
|
|
|
|
|
|
|
if [ "$ANSWER" = "y" ] ; then
|
|
|
|
$PKGRM $PACKAGE
|
|
|
|
RECHECK=1
|
|
|
|
else
|
2022-05-29 12:37:33 -04:00
|
|
|
echo $PACKAGE >> "$CONF"
|
2022-05-28 12:49:20 -04:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ "$RECHECK" = "0" ] ; then
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "Re-checking packages for new orphans..."
|
|
|
|
done
|