#!/bin/bash
# convenience script to show information about debian
# packages in a nice, colourful, human-readable way
{ type dpkg-query && type apt-cache; } >/dev/null || { echo "This mechanism needs dpkg and apt. Are you even on Debian?"; exit 1; }
{ type ccze && type sed && type du && type less; } >/dev/null || { echo "This mechanism needs ccze, sed, coreutils and less."; exit 1; }
dpkg-info()
{
for pkg in ${@};
do
{
{
apt-cache policy ${pkg} 2>&1 && echo
dpkg-query -s ${pkg} 2>/dev/null && echo
} | ccze -A -o nolookups && {
IFS=${IFS/ /}
list=($(dpkg -L ${pkg} 3>/dev/null | sed "s|^[^/]*||"|tail --lines=+2)) &&
[ ${#list[*]} -gt 0 ] &&
for item in ${list[@]};
do
{
[ -L "${item}" ] && [ ! -d $(realpath "${item}" 2>/dev/null) ] &&
links=("${links[@]}" "${item}") ||
[ -f "${item}" ] &&
files=("${files[@]}" "${item}") ||
dirs=("${dirs[@]}" "${item}")
}
done
[ ${#files[@]} -gt 0 ] &&
echo -ne "package ${pkg} contains:\t " &&
{ echo -n "$(LANG=C du -hc ${files[@]} | sed -nr "s/(.*)\s+total/\1iB/p") in ${#files[@]} $(ngettext 'file' 'files' ${#files[@]})" &&
{ [ ${#links[@]} -eq 0 ] || echo -n " and ${#links[@]} $(ngettext 'symbolic link' 'symbolic links' ${#links[@]})"; } &&
echo " within ${#dirs[@]} $(ngettext 'directory' 'directories' ${#dirs[@]})"; } | ccze -A -o nolookups && echo &&
ls --color=always -lahd --time-style=+" %^a %F %R" "${list[@]}"
debsums -s ${pkg}
} 2>&1
echo
{
apt-cache show ${pkg}
apt-cache showsrc ${pkg}
} | ccze -A -o nolookups
} | less -SRiM~ --shift 1 -PM"debian package info\: ${pkg}, ?ltlines %lt-%lb?L/%L.:byte %bB?s/%s. .?e(END)"
done
}
dpkg-info ${@}