#! /bin/sh # # Copyright (c) 2019 Adriaan de Groot . All rights reserved. # # SPDX-License-Identifier: BSD-2-Clause # # This shell script can be run on a freshly-installed FreeBSD system # to create an "instant-workstation". It uses dialog(1) for user-input, # and does a best-effort to install what's needed. # - a desktop environment # - a display manager (and X and the rest) # - graphics drivers # # TODO: offer a selection of common applications (e.g. Firefox, an IDE, ..) # # Run with --selfupdate to update the script from its canonical source # (useful for testing updates to the script itself). # Get a temporary location for dialog output base=`basename $0` CONFIG=`mktemp /tmp/${base}.XXXXXX` || { echo "! Cannot create temporary file." ; exit 1 ; } ### SELF-UPDATE # # if test "x$1" = "x--selfupdate" then /usr/bin/fetch -o "${CONFIG}" https://raw.githubusercontent.com/adriaandegroot/FreeBSDTools/master/bin/instant-workstation /bin/mv "${CONFIG}" "$0" ; exit 0 fi ### USER INPUT # # Pick one or more DE's, and exactly one DM # NOTE: each ID should be distinct # /usr/bin/dialog --no-tags --separate-output \ --checklist "Desktop Environment" 0 0 0 \ kde5 "KDE Plasma Desktop" 0 \ gnome3 "GNOME Desktop" 0 \ xfce4 "XFCE Desktop" 0 \ mate "MATE Desktop" 0 \ --radiolist "Display Manager" 0 0 0 \ sddm "SDDM" 1 2> ${CONFIG} ### PACKAGE SELECTION # # Turn the user input into specific packages and sysrc # commands to execute. # packages="" sysrc="" sysctl="" for line in `cat "${CONFIG}"` do case "x$line" in "xkde5") packages="$packages x11/kde5 devel/dbus" sysrc="$sysrc dbus_enable=YES" sysctl="$sysctl net.local.stream.recvspace=65536 net.local.stream.sendspace=65536" ;; "xgnome3") packages="$packages x11/gnome3" ;; "xxfce4") packages="$packages x11-wm/xfce4" ;; "xmate") packages="$packages x11/mate-desktop" ;; "xsddm") packages="$packages x11/sddm" sysrc="$sysrc sddm_enable=YES" ;; "*") echo "! Unrecognized tag '${line}' in ${CONFIG}" exit 1 ;; esac done rm "${CONFIG}" ### HARDWARE SUPPORT # # Best-guess for necessary hardware drivers # fbsd_version=$( /usr/bin/uname -r | /usr/bin/sed 's/-.*//' ) vga_product=$( /usr/sbin/pciconf -l | /usr/bin/awk '/^vgapci/{ print substr($4,length($4)-3); }' ) vga_vendor=$( /usr/sbin/pciconf -l | /usr/bin/awk '/^vgapci/{ print substr($4,8,4); }' ) # Look for Intel graphics if test 8086 = "${vga_product}" then case "x${fbsd_version}" in "x12."[012]) packages="$packages graphics/drm-fbsd12.0-kmod" ;; "x11."[234]) packages="$packages graphics/drm-fbsd11.2-kmod" ;; "*") : ;; esac fi ### VIRTUALBOX # # if test beef = "${vga_vendor}" then # Virtualbox Support packages="$packages emulators/virtualbox-ose-additions" sysrc="$sysrc vboxguest_enable=YES vboxservice_enable=YES" fi ### X11 # # packages="$packages x11/xorg" ### INSTALLATION # # if test -z "$packages" then echo "! No packages selected for installation." exit 1 fi command="/usr/sbin/pkg install $packages" if test -n "$sysrc" then command="$command ; /usr/sbin/sysrc $sysrc"; fi if test -n "$sysctl" then command="$command ; /usr/sbin/sysrc -f /etc/sysctl.conf $sysctl"; fi su root -c "$command"