#!/usr/bin/env bash set -o nounset set -o errexit cpu="$(yaml2json < _machines/"$(hostname --short)".yml | jq --raw-output .cpu)" gpu="$(yaml2json < _machines/"$(hostname --short)".yml | jq --raw-output .gpu)" if [[ "${cpu}" ]] ; then readarray -d $'\0' -t cpu_packages < <(]*}" "${makedepends[@]%%[<=>]*}" "${checkdepends[@]%%[<=>]*}" "${pkgname}") done declare -a packages_to_remove=() readarray -d $'\0' -t packages_to_remove < <(comm --zero-terminated -13 \ <(cat \ <(<_machines/"$(hostname --short)".yml yaml2json | jq --raw-output0 '(.additional_packages // [])[]') \ <(/dev/null | grep ^Name | grep ^Name | cut -d ':' -f 2 | tr -d ' ') ; then if [[ "${resolved_name}" != "${package}" ]] ; then if pacman -Qq --explicit "${resolved_name}" >/dev/null ; then printf '%s\0' "${resolved_name}" continue fi fi fi printf '%s\0' "${package}" done | sort -zu ) \ <(pacman -Qq --explicit | xargs -I "{}" printf '%s\0' "{}" | sort -zu) \ | while IFS= read -r -d $'\0' package; do skip=0 for protected in "${proctected[@]}" ; do if [[ "${package}" == "${protected}" ]] ; then skip=1 fi done if (( skip )) ; then continue fi printf '%s\0' "${package}" done) packages_removed=0 if (( "${#packages_to_remove[@]}" > 0 )) ; then echo "found the following explicitly installed packages that are not configured:" for pkg in "${packages_to_remove[@]}" ; do echo "${pkg}" done sudo pacman -Rcns "${packages_to_remove[@]}" "${@}" || exit $? packages_removed=1 fi readarray -t orphans < <(pacman -Qdtq) if (( "${#orphans[@]}" > 0 )) ; then echo "found the following orphaned packages:" for pkg in "${orphans[@]}" ; do echo "${pkg}" done sudo pacman -Rcns "${orphans[@]}" "${@}" || exit $? packages_removed=1 fi if (( packages_removed)) ; then exit 123 fi