62 lines
1.7 KiB
Bash
62 lines
1.7 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
BOOTSTRAP_DIR=~/.dotfiles/bootstrap
|
||
|
OUTPUT=${BOOTSTRAP_DIR}/packages.tsv
|
||
|
|
||
|
pkg_all=$(pacman -Qqett | grep -v "$(pacman -Qqg base-devel)")
|
||
|
|
||
|
pkg_repo=$(pacman -Qqn)
|
||
|
pkg_aur=$(pacman -Qqm)
|
||
|
|
||
|
# tsv file:
|
||
|
# packagename, description, source, target
|
||
|
# toot a toot manager A D
|
||
|
|
||
|
if [ -f "${OUTPUT}_TEMP" ]; then
|
||
|
rm "${OUTPUT}_TEMP"
|
||
|
fi
|
||
|
touch "${OUTPUT}_TEMP"
|
||
|
|
||
|
# create new package list
|
||
|
for pkg in $pkg_all; do
|
||
|
|
||
|
source=""
|
||
|
if $(echo "$pkg_repo" | grep -F -q -x "$pkg"); then
|
||
|
source="R"
|
||
|
elif $(echo "$pkg_aur" | grep -F -q -x "$pkg"); then
|
||
|
source="A"
|
||
|
else
|
||
|
echo "ERROR: The package $pkg could not be found in repositories or AUR."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
desc=$(pacman -Qs "$pkg" | grep -A1 --color "local/$pkg\s" | tail -n1)
|
||
|
#remove leading whitespace
|
||
|
desc="${desc#"${desc%%[![:space:]]*}"}"
|
||
|
|
||
|
target=""
|
||
|
if [ -f "$OUTPUT" ]; then
|
||
|
found_line=$(grep -e "^$pkg" "$OUTPUT")
|
||
|
fi
|
||
|
if [ -n "$found_line" ]; then
|
||
|
target=$(echo "$found_line" | cut -f4)
|
||
|
printf "Updating pkg: %s:%s from: %s, for: %s\n" "$pkg" "$desc" "$source" "$target"
|
||
|
else
|
||
|
printf "Adding pkg: %s:%s from: %s, for: %s\n" "$pkg" "$desc" "$source" "$target"
|
||
|
fi
|
||
|
|
||
|
printf "%s\t%s\t%s\t%s\n" "$pkg" "$desc" "$source" "$target" >>"${OUTPUT}_TEMP"
|
||
|
done
|
||
|
|
||
|
# notify on any removed packages
|
||
|
if [ -f "$OUTPUT" ]; then
|
||
|
while read -r line; do
|
||
|
if ! echo "$line" | cut -f1 | xargs -I _ grep -F -q -x _ <(echo "$pkg_all"); then
|
||
|
printf "REMOVED: %s" "$line"
|
||
|
fi
|
||
|
done <<<$(tail +2 "$OUTPUT")
|
||
|
fi
|
||
|
|
||
|
# actually write to file
|
||
|
cat <(printf "Name\tDescription\tSource\tTarget\n") "${OUTPUT}_TEMP" >"$OUTPUT"
|
||
|
rm "${OUTPUT}_TEMP"
|