Use aptitude instead of apt-get. And make sure only directly chosen packages are marked as such (type "M" at libraries and such) Then this gives a list of directly chosen packages: $ aptitude search '~i!~M' | sed 's/^... \([\.a-z0-9-]\+\) .*$/\1/' If needed besides official packages, use only carefully versioned unofficial/backported packages: Official Debian version strings are either x.y.z-a.b.c or (in case of Debian-native packages) a.b.c. Make sure for all unofficial packages (wether derived from official ones or not) to include a local tag in the Debian-part of the version string - as in x.y.z-a.b.yourtag.d and a.b.yourtag.d (where d is your local revision). Set your local revision as close as possible to the official package. * Simple backport of x.y.z-1.0 is done as x.y.z-0.99.yourtag.1. * Tweaked variant of x.y.z-1.0 is done as x.y.z-1.0.yourtag.1. * New package is done as x.y.z-0.0.yourtag.1. Then this gives a list of unofficial packages currently installed: $ aptitude search '~i!~Vyourtag' | sed 's/^... \([\.a-z0-9-]\+\) .*$/\1/'