Here is a script you can all use which selects a desktop environment, installs it if necessary, and configures a (eg. your) user's X session so that it starts when he, she or you log in, facilitating further user-centric configuration.
Perhaps if you ask really nicely the devs will install it into the base system somewhere for you and maintain the map of packages to descriptions because even the densest among you must be aware by now that you're never getting anything more complicated than this. Now will you all please stop this and go and do something useful? Matthew src/gui-selector.sh: #!/bin/ksh default="fvwm" builtin="cwm fvwm twm" bloaty="kde gnome xfce" gnome="gnome" # Is there something for this? gnome_full=$gnome gnome_bloat="gnome-extras" gnome_bin=/usr/local/bin/gnome kde="kde4-minimal" kde_full="kde4" kde_bloat="kde4-extras" kde_bin=/usr/local/bin/kde4 xfce="xfce" xfce_full="xfce-extras" xfce_bloat=$xfce_full xfce_bin=/usr/local/bin/xfce cwm_desc="?" fvwm_desc="Simple, effective, default" twm_desc="Theo likes it so it must be good" gnome_desc="We know what you want, except not correctly like Apple" kde_desc="The only DE ever to kill my X server" xfce_desc="I heard of this once" error() { if [[ $# != 0 ]]; then echo "$@" >&2 else cat >&2 fi } abort() { error "$@" exit 1 } msg() { if [[ $# != 0 ]]; then echo "$@" else cat fi } prompt() { answer= # NOT local echo -n "$@" '' read answer echo } root= if [[ `id -u` -ne 0 ]]; then root=doas error <<ROOT Before this script can continue root access required. Either stop this script with Ctrl-C and execute it in a root shell or ensure this line exists in /etc/doas.conf: permit nopass $USER as root cmd pkg_add Note that there are more secure ways to achieve this but it should be acceptable for a desktop computer; see doas.conf(5) for more information. When your user account's root privileges are enabled, press enter to continue. ROOT prompt Root privileges? fi # TODO: layouts and shit list_ui() { unset list # NOT local local this=0 for cat in builtin bloaty; do msg DE category: $cat msg '' eval _all=\$$cat for de in $_all; do eval msg $this: $de -- \$${de}_desc list[$this]=$de ((this++)) done msg '' done } find_de() { de= # NOT local local _c=$1 _i= if [[ " $builtin $bloaty " = *" $_C "* ]]; then de=$_c return 0 fi if [[ $_c = *[0-9]* && $_c -lt ${#list[@]} ]]; then de=${list[$_c]} return 0 fi _i=0 while [[ $_i -lt ${#list[@]} ]]; do if [[ ${list[$_i]} = $_c ]]; then de=$_c return 0 fi ((_i++)) done return 1 } list_ui msg You may identify a desktop environment by its number or its short name. while prompt Which desktop environment would you like to use? && ! find_de "$answer"; do error Invalid selection. done if ! [[ " $builtin " = *" $de "* ]]; then msg <<BLOAT Desktop environments other than those which are built into the base system come in up to three flavours, Regular, Full and Bloaty. Not all environments provide all three flavours. If you select a flavour which is not available the next-smallest flavour will be chosen in its place. BLOAT while prompt Which flavour would you like to install [Regular]: && [[ -n "$answer" && "$answer" != [BbFfRr]* ]]; do error Invalid selection. done case "$answer" in [Bb]*) bloat=${de}_bloat;; [Ff]*) bloat=${de}_full;; [Rr]*|'') bloat=$de;; esac eval \$root pkg_add \$$bloat fi if [[ `id -u` -eq 0 ]]; then _g= while prompt Which user account to you want to set the desktop environment for? && ! _g=$(getent passwd "$answer"); do error Invalid user. done userhome=$(echo "$_g" | cut -d: -f6) whose="the user's" else userhome=$HOME whose="your" fi if [[ -e $userhome/.xsession ]]; then bak=$(date +%F:%T) msg Backing up previous xsession file to "$userhome/.xsession~$bak" cp "$userhome/.xsession" "$userhome/.xsession~$bak" || abort cp .xsession fi if [[ " $builtin " = *" $de "* ]]; then echo exec /usr/X11R6/bin/$de > $userhome/.xsession else eval echo exec \$${de}_bin > $userhome/.xsession fi || abort Could not write to $userhome/.xsession msg << COMPLETE $de has been installed and configured as $whose default desktop environment. You may log out or reboot to enter it. To install another environment and change $whose default, simply run this script again. COMPLETE