#!/bin/bash all=($(< packages.txt sed 's/#.*//' | xargs printf -- '%s\n' | sort -u)) grps=($(printf -- '%s\n' "${all[@]}" | sed -n 's/^g://p')) pkgs=($(printf -- '%s\n' "${all[@]}" | sed -n 's/^p://p')) echo ' => In packages.txt, but not installed' comm -13 \ <(pacman -Qq|sort -u) \ <({ pacman -Qgq -- "${grps[@]}"; printf '%s\n' "${pkgs[@]}"; }|sort -u) | sed 's|^| -> |' echo ' => Installed explicitly, but not in packages.txt' comm -23 \ <(pacman -Qetq|sort -u) \ <({ pacman -Qgq -- "${grps[@]}"; printf '%s\n' "${pkgs[@]}"; }|sort -u) | sed 's|^| -> |' echo ' => Installed as dependencies, but only optionally needed' comm -23 \ <(pacman -Qdttq|sort -u) \ <(pacman -Qdtq |sort -u) | sed 's|^| -> |' echo ' => Installed as dependencies, but no longer needed' pacman -Qdtq|sort -u |sed 's|^| -> |'