package-helpers-cmxsl/helpers/DATA/tasksel/list

57 lines
2.1 KiB
Bash

#!/bin/sh
# $1 = task name, $2..$N = packages (from "Packages: list")
# Runtime policy:
# - language-pack-gnome-* > MATE/GNOME/LXDE
# - language-pack-kde-* > KDE (Triskel)
# - abrowser-/firefox-locale-* > all desktops (MATE/GNOME/LXDE/KDE), not console
# - libreoffice-l10n-*, icedove-locale-* > MATE/GNOME/KDE; not LXDE/console
# - skip non-existent candidates (avoid APT 100)
shift 1
debconf_get() {
[ -x /usr/bin/debconf-communicate ] || return
printf 'GET %s\n' "$1" | /usr/bin/debconf-communicate 2>/dev/null \
| awk 'NR==1 && $1==0 { $1=""; sub(/^ /,""); print }'
}
has_pkg() { /usr/bin/dpkg-query -W -f='${Status}\n' "$1" 2>/dev/null | grep -q 'ok installed'; }
exists() { LC_ALL=C /usr/bin/apt-cache policy "$1" 2>/dev/null | awk '/Candidate:/ {print $2}' | grep -qxv '(none)'; }
sel="$(debconf_get pkgsel/desktop) $(debconf_get tasksel/first)"
case "$sel" in
*triskel*) FLAVOR=kde ;;
*trisquel-mini*) FLAVOR=lxde ;;
*trisquel-gnome*) FLAVOR=gnome ;;
*trisquel-desktop*) FLAVOR=mate ;;
*) FLAVOR=unknown ;;
esac
if [ "$FLAVOR" = unknown ]; then
if has_pkg triskel || has_pkg plasma-desktop; then FLAVOR=kde
elif has_pkg trisquel-mini || has_pkg lxde-core; then FLAVOR=lxde
elif has_pkg trisquel-gnome || has_pkg gnome-shell; then FLAVOR=gnome
elif has_pkg trisquel-desktop || has_pkg mate-desktop-environment; then FLAVOR=mate
else FLAVOR=console
fi
fi
is_kde=false; [ "$FLAVOR" = kde ] && is_kde=true
is_gtk=false; echo "$FLAVOR" | grep -Eq '^(mate|gnome|lxde)$' && is_gtk=true
is_console=false; [ "$FLAVOR" = console ] && is_console=true
is_desktop=true; $is_console && is_desktop=false
emit() {
p="$1"; [ -n "$p" ] || return
case "$p" in
language-pack-gnome-*) $is_gtk || return ;;
language-pack-kde-*) $is_kde || return ;;
abrowser-l10n-*|abrowser-locale-*|firefox-locale-*)
$is_desktop || return ;;
libreoffice-l10n-*) echo "$FLAVOR" | grep -Eq '^(lxde|console)$' && return ;;
icedove-locale-*) echo "$FLAVOR" | grep -Eq '^(lxde|console)$' && return ;;
esac
exists "$p" && printf '%s\n' "$p"
}
for p in "$@"; do emit "$p"; done