freebsd/freebsd-desktop.sh

2277 lines
70 KiB
Bash
Raw Permalink Normal View History

#!/bin/sh
##############################################
# VERSION No. 9.1
# UPDATED on 2025-06-21
# Several functions have been added to programs_selection_menu and usual_tools_installation.
# added a combined function for check_internet and installpkg called "initial_checks"
# improved the process of verifying package availability for all desktop environments. It now checks both repositories and generates a combined report.
# updated welcoming.
# added a cpu_vendor temperature monitoring function and coredumps to /tmp, thanks to "bgroper"
# added a new function : "detect_and_clean_or_keep_existing_de" detecting a previous DE installation and offering you the choice to completely clean it before installing a new one.
# added files to remove for complete deskop environnement removal.
# added checking for kde parameters before setting (net.local.stream.recvspace=65536 and net.local.stream.sendspace=65536)
# added detection of the current repository for "change_repo"
##############################################
# Welcome to this script.
# All functions are described here.
# To see the final execution flow, go directly to the end.
# You can comment out functions if you don't wish them to execute.
##############################################
# DE packages that are used in this script :
export pkg_list_kdemin="xorg sudo sddm kde"
export pkg_list_kdefull="xorg sudo sddm kde freebsd-8k-wallpapers-kde kde-dev-scripts \
kde-dev-utils kde-thumbnailer-chm kde-thumbnailer-epub kde-thumbnailer-fb2 \
kde_poster kdeaccessibility kdeadmin kdeconnect-kde kdegames kdegraphics kdemultimedia \
kdevelop calligra kmymoney kdenetwork kdeutils libkdepim wallpapers-freebsd-kde"
export pkg_list_xfcemin="xorg sudo lightdm lightdm-gtk-greeter xfce xdg-user-dirs gvfs"
export pkg_list_xfcefull="xorg sudo lightdm lightdm-gtk-greeter xfce gtk-xfce-engine \
workrave-xfce xfce4-appmenu-plugin xfce4-battery-plugin xfce4-bsdcpufreq-plugin \
xfce4-calculator-plugin xfce4-clipman-plugin xfce4-cpugraph-plugin xfce4-dashboard \
xfce4-datetime-plugin xfce4-dev-tools xfce4-dict-plugin xfce4-diskperf-plugin \
xfce4-docklike-plugin xfce4-fsguard-plugin xfce4-generic-slider xfce4-genmon-plugin \
xfce4-goodies xfce4-mixer xfce4-mpc-plugin xfce4-panel-profiles xfce4-places-plugin \
xfce4-pulseaudio-plugin xfce4-volumed-pulse xfce4-whiskermenu-plugin xfce4-windowck-plugin \
xarchiver xdg-user-dirs xfce4-screensaver xfce-icons-elementary \
xfce4-weather-plugin xfce4-netload-plugin xfce4-systemload-plugin \
xfce4-mount-plugin xfce4-notes-plugin xfce4-xkb-plugin gvfs"
export pkg_list_mate="xorg sudo lightdm lightdm-gtk-greeter libmatekbd libmatemixer libmateweather \
libshumate mate mate-applet-appmenu mate-applets mate-backgrounds mate-base mate-calc \
mate-common mate-control-center mate-desktop mate-dock-applet mate-icon-theme \
mate-icon-theme-faenza mate-indicator-applet mate-media mate-menus mate-notification-daemon \
mate-pam-helper mate-panel mate-polkit mate-power-manager mate-screensaver \
mate-session-manager mate-settings-daemon mate-system-monitor mate-terminal \
mate-themes mate-user-guide mate-utils materia-gtk-theme"
export pkg_list_cinnamon="xorg sudo lightdm lightdm-gtk-greeter cinnamon cinnamon-translations"
export pkg_list_gnomemin="xorg sudo gdm gnome-shell gnome-terminal nautilus gnome-tweaks \
gnome-keyring gnome-backgrounds gnome-system-monitor gnome-screenshot \
gnome-power-manager xdg-user-dirs xdg-desktop-portal-gnome"
export pkg_list_gnomefull="xorg sudo gdm chrome-gnome-shell gnome gnome-2048 gnome-autoar gnome-backgrounds \
gnome-calculator gnome-calendar gnome-characters gnome-chess \
gnome-clipboard-daemon gnome-clocks gnome-color-manager gnome-common gnome-connections \
gnome-console gnome-contacts gnome-control-center gnome-desktop gnome-devel-docs \
gnome-dictionary gnome-font-viewer gnome-games gnome-getting-started-docs gnome-icon-theme \
gnome-icon-theme-extras gnome-icon-theme-symbolic gnome-icons gnome-icons-elementary \
gnome-icons-faenza gnome-icons-luv gnome-initial-setup gnome-keyring gnome-keyring-sharp \
gnome-klotski gnome-latex gnome-lite gnome-mahjongg gnome-maps gnome-menus gnome-metronome \
gnome-mime-data gnome-mines gnome-mplayer gnome-music gnome-nettool gnome-nibbles \
gnome-online-accounts gnome-online-miners gnome-photos gnome-pie gnome-planner \
gnome-podcasts gnome-pomodoro gnome-power-manager gnome-pty-helper gnome-robots \
gnome-screenshot gnome-session gnome-settings-daemon gnome-shell \
gnome-shell-extension-audio-output-switcher gnome-shell-extension-coverflow \
gnome-shell-extension-dashtodock gnome-shell-extension-dashtopanel \
gnome-shell-extension-filesmenu gnome-shell-extension-hidetopbar \
gnome-shell-extension-lockkeys gnome-shell-extension-mediaplayer \
gnome-shell-extension-openweather gnome-shell-extension-panel-osd \
gnome-shell-extension-recent-items gnome-shell-extension-trash \
gnome-shell-extension-weather gnome-shell-extension-windowoverlay-icons \
gnome-shell-extensions gnome-shell-extra-extensions gnome-sound-recorder \
gnome-sudoku gnome-system-monitor gnome-terminal gnome-tetravex \
gnome-text-editor gnome-themes gnome-themes-extra gnome-todo gnome-tweaks \
gnome-user-docs gnome-user-share gnome-utils gnome-video-effects gnome-weather \
gnome_subr guile-gnome-platform-full guile-gnome-platform-lite libgnome-games-support \
libgnome-keyring libgnomecanvas libgnomecanvasmm libgnomekbd libproxy-gnome3 \
pinentry-gnome polkit-gnome qgnomeplatform rubygem-gnome subversion-gnome-keyring \
xdg-desktop-portal-gnome"
export pkg_list_lxqt="xorg sudo sddm lxqt lxqt-about lxqt-admin lxqt-archiver \
lxqt-build-tools lxqt-config lxqt-notificationd lxqt-openssh-askpass lxqt-policykit \
lxqt-powermanagement lxqt-runner lxqt-sudo lxqt-themes xdg-desktop-portal-lxqt"
export pkg_list_fvwm="xorg sudo fvwm fvwm-themes"
export pkg_list_wmaker="xorg sudo windowmaker"
export pkg_list_twm="xorg sudo"
export pkg_list_vbox="virtualbox-ose virtualbox-ose-additions"
export gpu_configured=0
############################################################################################
# FUNCTIONS
# If you can not connect to internet.. then I can do nothing !
initial_checks() {
(
echo "XXX"
echo "0"
echo "Checking internet connection..."
echo "XXX"
sleep 1
if ! fetch -q -o /dev/null "https://www.freebsd.org/"; then
bsddialog --msgbox " No internet connection detected.\n Exiting." 6 40
exit 1
fi
echo "XXX"
echo "50"
echo "Verifying 'pkg' installation..."
echo "XXX"
sleep 1
if [ ! -x /usr/local/sbin/pkg ]; then
if pkg ins -y 2>&1 | grep -q "error"; then
bsddialog --msgbox " Unable to install pkg.\n Check your connection." 6 40
exit 1
fi
fi
echo "XXX"
echo "100"
echo "Everything seems fine ! Let's go !"
echo "XXX"
sleep 1
echo EOF
) | bsddialog --gauge "Initializing environment, please wait..." 6 40
}
# Welcome !
welcome() {
if ! bsddialog --yesno " Welcome to this installation script for setting up\n a Desktop Environment on FreeBSD.\n\nCurrently, it allows you to install KDE, XFCE, GNOME, Mate, Cinnamon, LXQT, FVWM, WindowMaker or Twm.\nSince some desktop environments are feature-rich (such as KDE, XFCE, GNOME), you have the option to choose between a minimal and a more complete version.\n\nSeveral options will be offered to you (autologin, selection of standard applications for your desktop environment, hypervisor installation, etc.).\n\nA basic graphics card detection feature is included. It relies on detection using "pciconf" and is therefore not exhaustive.\nHowever, if you use an NVIDIA GPU, you need to know which driver version is required for your graphics card. You will be asked to choose between versions 304, 340, 390, 470 and 570\n\nTo enable the installation of a desktop environment, a user (other than root) must be created. If you haven't created one during the FreeBSD installation process, you'll be able to do so here.\n\nFurthermore, correct UEFI configuration is obviously not supported by this script. Generally, a few things must be done before (disable GPU switchable graphics etc.)\n\n
---------------------------
\n\nBefore starting the installation, the script will generate a package availability report for all desktop environments mentioned above, in order to check if any of them are currently experiencing build issues in the two repositories (quarterly and latest).\nOf course, you have the option to bypass the creation of this report (it takes a few minutes) by commenting out the relevant functions in the execution flow at the bottom of this script.\n\n
Shall we continue?\n" 26 70; then
echo 'I quit, bye !'
exit 0
fi
}
# Change repository
switch_to_quarterly() {
(
echo XXX
echo "0"
echo "Switching repository to Quarterly..."
echo XXX
sed -i "" "s/latest/quarterly/" /etc/pkg/FreeBSD.conf >/dev/null 2>&1
sleep 1
echo XXX
echo "25"
echo "Reinstalling pkg..."
echo XXX
pkg remove -yf pkg >/dev/null 2>&1
pkg ins -y pkg >/dev/null 2>&1
sleep 1
echo XXX
echo "50"
echo "Updating packages (first run)..."
echo XXX
pkg update -f >/dev/null 2>&1
sleep 1
echo XXX
echo "75"
echo "Updating packages (second run)..."
echo XXX
pkg update -f >/dev/null 2>&1
sleep 1
echo XXX
echo "100"
echo "Packages updated..."
echo XXX
sleep 1
echo EOF
) | bsddialog --gauge "Switching to Quarterly repository and updating packages..." 6 50
export whichrepo="QUARTERLY"
}
# Remove previous report
rm_previous_report() {
if [ -e /tmp/de_report.tmp ]; then
rm -f /tmp/de_report.tmp
fi
}
# Change repository
switch_to_latest() {
(
echo XXX
echo "0"
echo "Switching repository to Latest..."
echo XXX
sed -i "" "s/quarterly/latest/" /etc/pkg/FreeBSD.conf >/dev/null 2>&1
sleep 1
echo XXX
echo "25"
echo "Reinstalling pkg..."
echo XXX
pkg remove -yf pkg >/dev/null 2>&1
pkg ins -y pkg >/dev/null 2>&1
sleep 1
echo XXX
echo "50"
echo "Updating packages (first run)..."
echo XXX
pkg update -f >/dev/null 2>&1
sleep 1
echo XXX
echo "75"
echo "Updating packages (second run)..."
echo XXX
pkg update -f >/dev/null 2>&1
sleep 1
echo XXX
echo "100"
echo "Packages updated..."
echo XXX
sleep 1
echo EOF
) | bsddialog --gauge "Switching to Latest repository and updating packages..." 6 50
export whichrepo="LATEST"
}
# Check for Desktop Environnement packages availability before going on
check_packages_availability() {
bsddialog --infobox "Analyzing repository, please wait..." 3 40
pkg_vars="pkg_list_kdemin pkg_list_kdefull pkg_list_xfcemin pkg_list_xfcefull pkg_list_mate pkg_list_cinnamon pkg_list_gnomemin pkg_list_gnomefull pkg_list_lxqt pkg_list_fvwm pkg_list_wmaker pkg_list_twm pkg_list_vbox"
TEMP=$(mktemp)
: > "$TEMP"
TEMP2=$(mktemp)
: > "$TEMP2"
for pkg_var in $pkg_vars; do
eval pkg_list="\${$pkg_var}"
pkg_missing="no"
missing_pkgs=""
for pkgname in $pkg_list; do
latest_version=$(pkg rquery '%v' "$pkgname" 2>/dev/null)
if [ -z "$latest_version" ]; then
pkg_missing="yes"
missing_pkgs="$missing_pkgs $pkgname"
fi
done
if [ "$pkg_missing" = "yes" ]; then
case "$pkg_var" in
pkg_list_kdemin) env_name="|--KDE-(min)";;
pkg_list_kdefull) env_name="|--KDE-(full)";;
pkg_list_xfcemin) env_name="|--XFCE-(min)";;
pkg_list_xfcefull) env_name="|--XFCE-(full)";;
pkg_list_mate) env_name="|--MATE";;
pkg_list_cinnamon) env_name="|--CINNAMON-(full)";;
pkg_list_gnomemin) env_name="|--GNOME-(min)";;
pkg_list_gnomefull) env_name="|--GNOME-(full)";;
pkg_list_lxqt) env_name="|--LXQt";;
pkg_list_fvwm) env_name="|--FVWM";;
pkg_list_vbox) env_name="|--VirtualBox";;
pkg_list_wmaker) env_name="|--WindowMaker";;
pkg_list_twm) env_name="|--TWM (Xorg)";;
esac
echo "$env_name:$missing_pkgs" >> "$TEMP"
echo "" >> "$TEMP"
tr ' ' '\n' < $TEMP > $TEMP2
fi
done
echo "| ------------------------------------------" >> /tmp/de_report.tmp
echo "| Missing packages in $whichrepo repository" >> /tmp/de_report.tmp
echo >> /tmp/de_report.tmp
cat $TEMP2 >> /tmp/de_report.tmp
echo >> /tmp/de_report.tmp
}
# Display the report
show_report() {
echo >> /tmp/de_report.tmp
echo "| > Press 'q' to go on ..." >> /tmp/de_report.tmp
less /tmp/de_report.tmp
}
# Change repository
change_repo() {
REPO=$(pkg -vv | awk '/Repositories:/ {flag=1} flag && /url/ {split($3,a,"/"); gsub(/"|,/,"",a[length(a)]); print a[length(a)]; exit}')
CHOICE=$(bsddialog --title "Change your Repository? (current : $REPO)" \
--radiolist "Please select an option:" 10 65 3 \
1 "Quarterly (rebuilt every quarter)" off \
2 "Latest (continuously updated)" off \
3 "Do not change the actual configuration" on \
3>&1 1>&2 2>&3)
if [ $? -eq 0 ]; then
case $CHOICE in
1)
(
echo XXX
echo "0"
echo "Switching repository to Quarterly..."
echo XXX
sed -i "" "s/latest/quarterly/" /etc/pkg/FreeBSD.conf >/dev/null 2>&1
sleep 1
echo XXX
echo "25"
echo "Reinstalling pkg..."
echo XXX
pkg remove -yf pkg >/dev/null 2>&1
pkg ins -y pkg >/dev/null 2>&1
sleep 1
echo XXX
echo "50"
echo "Updating packages (first run)..."
echo XXX
pkg update -f >/dev/null 2>&1
sleep 1
echo XXX
echo "75"
echo "Updating packages (second run)..."
echo XXX
pkg update -f >/dev/null 2>&1
sleep 1
echo XXX
echo "100"
echo "Packages updated..."
echo XXX
sleep 1
echo EOF
) | bsddialog --gauge "Switching to Quarterly repository and updating packages..." 6 50
;;
2)
(
echo XXX
echo "0"
echo "Switching repository to Latest..."
echo XXX
sed -i "" "s/quarterly/latest/" /etc/pkg/FreeBSD.conf >/dev/null 2>&1
sleep 1
echo XXX
echo "25"
echo "Reinstalling pkg..."
echo XXX
pkg remove -yf pkg >/dev/null 2>&1
pkg ins -y pkg >/dev/null 2>&1
sleep 1
echo XXX
echo "50"
echo "Updating packages (first run)..."
echo XXX
pkg update -f >/dev/null 2>&1
sleep 1
echo XXX
echo "75"
echo "Updating packages (second run)..."
echo XXX
pkg update -f >/dev/null 2>&1
sleep 1
echo XXX
echo "100"
echo "Packages updated..."
echo XXX
sleep 1
echo EOF
) | bsddialog --gauge "Switching to Latest repository and updating packages..." 6 50
;;
esac
fi
}
# System Update
update() {
if bsddialog --yesno "Do you want to update your system before starting?\n (freebsd-update fetch/install)" 6 54; then
bsddialog --msgbox "Please review the available changes, then press 'q' to continue" 5 67
freebsd-update fetch
freebsd-update install
fi
}
# Create a BE before going on ?
create_boot_environment() {
# Check if filesystem is ZFS or not
fstype=$(df -T / | awk 'NR==2 {print $2}')
if [ ! "$fstype" = "zfs" ]; then
bsddialog --msgbox "This function is reserved for the ZFS filesystem." 5 53
return
fi
date=$(date +"%Y%m%d-%H%M%S")
if bsddialog --yesno "Do you want to create a boot environment before installation?" 5 65; then
pkg info -e beadm || pkg install -y beadm
if ! beadm create DE-install_$date; then
bsddialog --msgbox "Error creating the boot environment." 5 40
else
bsddialog --msgbox "I created a new boot environment named 'DE-install_$date'" 5 71
fi
fi
}
# Change repository
change_repo() {
REPO=$(pkg -vv | awk '/Repositories:/ {flag=1} flag && /url/ {split($3,a,"/"); gsub(/"|,/,"",a[length(a)]); print a[length(a)]; exit}')
CHOICE=$(bsddialog --title "Change your Repository? (current : $REPO)" \
--radiolist "Please select an option:" 10 65 3 \
1 "Quarterly (rebuilt every quarter)" off \
2 "Latest (continuously updated)" off \
3 "Do not change the actual configuration" on \
3>&1 1>&2 2>&3)
if [ $? -eq 0 ]; then
case $CHOICE in
1)
(
echo XXX
echo "0"
echo "Switching repository to Quarterly..."
echo XXX
sed -i "" "s/latest/quarterly/" /etc/pkg/FreeBSD.conf >/dev/null 2>&1
sleep 1
echo XXX
echo "25"
echo "Reinstalling pkg..."
echo XXX
pkg remove -yf pkg >/dev/null 2>&1
pkg ins -y pkg >/dev/null 2>&1
sleep 1
echo XXX
echo "50"
echo "Updating packages (first run)..."
echo XXX
pkg update -f >/dev/null 2>&1
sleep 1
echo XXX
echo "75"
echo "Updating packages (second run)..."
echo XXX
pkg update -f >/dev/null 2>&1
sleep 1
echo XXX
echo "100"
echo "Packages updated..."
echo XXX
sleep 1
echo EOF
) | bsddialog --gauge "Switching to Quarterly repository and updating packages..." 6 50
;;
2)
(
echo XXX
echo "0"
echo "Switching repository to Latest..."
echo XXX
sed -i "" "s/quarterly/latest/" /etc/pkg/FreeBSD.conf >/dev/null 2>&1
sleep 1
echo XXX
echo "25"
echo "Reinstalling pkg..."
echo XXX
pkg remove -yf pkg >/dev/null 2>&1
pkg ins -y pkg >/dev/null 2>&1
sleep 1
echo XXX
echo "50"
echo "Updating packages (first run)..."
echo XXX
pkg update -f >/dev/null 2>&1
sleep 1
echo XXX
echo "75"
echo "Updating packages (second run)..."
echo XXX
pkg update -f >/dev/null 2>&1
sleep 1
echo XXX
echo "100"
echo "Packages updated..."
echo XXX
sleep 1
echo EOF
) | bsddialog --gauge "Switching to Latest repository and updating packages..." 6 50
;;
esac
fi
}
# User
user_for_desktop() {
if bsddialog --yesno "Have you already created the user who will use the desktop?" 5 63; then
for j in $(seq 4); do
# Username of the desktop environment user
user=$(bsddialog --inputbox "Please enter his username" 8 29 2>&1 1>/dev/tty)
#check if the user already exists or not
if ! getent passwd "$user" >/dev/null; then
bsddialog --msg " !WARNING!\n This user does not exist\n Please try again" 7 58
else
break
fi
done
# Exit script if not able to choose a user
if [ $j -eq 4 ]; then
exit 0
fi
else
for i in $(seq 4); do
user=$(bsddialog --inputbox "What username would you like to give to your user?\n (No spaces or special characters)" 9 54 2>&1 1>/dev/tty)
fullname=$(bsddialog --inputbox "Please enter his full name (don't leave empty)" 8 50 2>&1 1>/dev/tty)
#check if the user already exists or not
if getent passwd "$user" >/dev/null; then
if bsddialog --yesno " !WARNING!\n This user already exists\nDo you want to use it [Yes] or create another one [No]" 7 58; then
break
fi
else
pw useradd "$user" -d "/home/$user" -m -c "$fullname"
clear
echo "--------------------------------------"
echo "Please assign a password to $user"
printf "\n"
passwd $user
break
fi
done
# Exit script if not able to create a user
if [ $i -eq 4 ]; then
exit 0
fi
fi
}
##############
# Detect a previous DE installation
detect_and_clean_or_keep_existing_de() {
# --------------------
# Check for KDE :
check_previous_kde_install() {
grep -q '^\s*sddm_enable="YES"' /etc/rc.conf && \
grep -q '^\s*dbus_enable="YES"' /etc/rc.conf && \
[ "$(sysctl -n net.local.stream.recvspace)" -eq 65536 ] && \
[ "$(sysctl -n net.local.stream.sendspace)" -eq 65536 ] && \
grep -q '^proc /proc procfs rw 0 0' /etc/fstab || return 1
pkg info -q kde || return 1
return 0
}
if check_previous_kde_install; then
# Decide to clear KDE installation or not.
if bsddialog --default-no --yesno "A previous KDE installation has been detected.\n Do you want to clear it ?" 6 50; then
echo 'I clean KDE installation now'
sysrc -x sddm_enable dbus_enable
sed -i '' 's/net\.local\.stream\.recvspace=65536//' /etc/sysctl.conf
sed -i '' 's/net\.local\.stream\.sendspace=65536//' /etc/sysctl.conf
sed -i '' 's/proc \/proc procfs rw 0 0//' /etc/fstab
pw groupmod video -d "$user"
rm -f /home/"$user"/.xinitrc
for pkg in $pkg_list_kdefull; do
pkg remove -yf $pkg*
done
cd /home/"$user"
rm .Xauthority
rm -rf .dbus
rm -rf .config
rm -rf .local
rm .xsession*
rm -f drkonqi.core
rm -f kcminit.core
rm -f ksplashqml.core
rm -f plasmashell.core
rm -f .dmrc
rm -f .gtkrc-2.0
pkg delete -y $(pkg info | grep -i kde | awk '{print $1}')
pkg delete -y $(pkg info | grep -i plasma | awk '{print $1}')
if bsddialog --yesno " KDE has been entirely removed.\nYou should restart before installing another desktop.\n Do you want to restart now ?" 7 57; then
reboot
fi
fi
fi
# --------------------
# Check for XFCE :
check_previous_xfce_install() {
grep -q '^\s*lightdm_enable="YES"' /etc/rc.conf && \
grep -q '^\s*dbus_enable="YES"' /etc/rc.conf && \
grep -q '^proc /proc procfs rw 0 0' /etc/fstab || return 1
pkg info -q xfce || return 1
return 0
}
if check_previous_xfce_install; then
# Decide to clear Xfce installation or not.
if bsddialog --default-no --yesno "A previous Xfce installation has been detected.\n Do you want to clear it ?" 6 51; then
echo 'I clean Xfce installation now'
sysrc -x lightdm_enable dbus_enable
sed -i '' 's/proc \/proc procfs rw 0 0//' /etc/fstab
pw groupmod video -d "$user"
rm -f /home/"$user"/.xinitrc
for pkg in $pkg_list_xfcefull; do
pkg remove -yf $pkg*
done
cd /home/"$user"
rm -rf .dbus
rm -rf .config
rm -f .dmrc
rm -rf .gnupg
rm -rf .local
rm -rf .cache
rm .xsession*
rm .ICEauthority
rm .Xauthority
rm -f .dmrc
rm -f .gtkrc-2.0
pkg delete -y $(pkg info | grep -i xfce | awk '{print $1}')
if bsddialog --yesno " Xfce has been entirely removed.\nYou should restart before installing another desktop.\n Do you want to restart now ?" 7 57; then
reboot
fi
fi
fi
# --------------------
# Check for MATE :
check_previous_mate_install() {
grep -q '^\s*lightdm_enable="YES"' /etc/rc.conf && \
grep -q '^\s*dbus_enable="YES"' /etc/rc.conf && \
grep -q '^proc /proc procfs rw 0 0' /etc/fstab || return 1
pkg info -q mate || return 1
return 0
}
if check_previous_mate_install; then
# Decide to clear Mate installation or not.
if bsddialog --default-no --yesno "A previous Mate installation has been detected.\n Do you want to clear it ?" 6 51; then
echo 'I clean Mate installation now'
sysrc -x lightdm_enable dbus_enable
sed -i '' 's/proc \/proc procfs rw 0 0//' /etc/fstab
pw groupmod video -d "$user"
rm -f /home/"$user"/.xinitrc
for pkg in $pkg_list_mate; do
pkg remove -yf $pkg*
done
cd /home/"$user"
rm -rf .dbus
rm -rf .config
rm -f .dmrc
rm -rf .gnupg
rm -rf .local
rm -rf .cache
rm .xsession*
rm .ICEauthority
rm .Xauthority
rm -f .dmrc
rm -f .gtkrc-2.0
pkg delete -y $(pkg info | grep -i mate | awk '{print $1}')
if bsddialog --yesno " Mate has been entirely removed.\nYou should restart before installing another desktop.\n Do you want to restart now ?" 7 57; then
reboot
fi
fi
fi
# --------------------
# Check for CINNAMON :
check_previous_cinnamon_install() {
grep -q '^\s*lightdm_enable="YES"' /etc/rc.conf && \
grep -q '^\s*dbus_enable="YES"' /etc/rc.conf && \
grep -q '^proc /proc procfs rw 0 0' /etc/fstab || return 1
pkg info -q cinnamon || return 1
return 0
}
if check_previous_cinnamon_install; then
# Decide to clear Mate installation or not.
if bsddialog --default-no --yesno "A previous Cinnamon installation has been detected.\n Do you want to clear it ?" 6 55; then
echo 'I clean Cinnamon installation now'
sysrc -x lightdm_enable dbus_enable
sed -i '' 's/proc \/proc procfs rw 0 0//' /etc/fstab
pw groupmod video -d "$user"
rm -f /home/"$user"/.xinitrc
for pkg in $pkg_list_cinnamon; do
pkg remove -yf $pkg*
done
cd /home/"$user"
rm -rf .dbus
rm -rf .config
rm -f mate-panel.core
rm -rf .cinnamon
rm -f .dmrc
rm -rf .local
rm -rf .cache
rm .xsession*
rm .Xauthority
rm -f .dmrc
pkg delete -y $(pkg info | grep -i cinnamon | awk '{print $1}')
if bsddialog --yesno " Cinnamon has been entirely removed.\nYou should restart before installing another desktop.\n Do you want to restart now ?" 7 57; then
reboot
fi
fi
fi
# --------------------
# Check for GNOME:
check_previous_gnome_install() {
grep -q '^\s*gdm_enable="YES"' /etc/rc.conf && \
grep -q '^\s*dbus_enable="YES"' /etc/rc.conf && \
grep -q '^proc /proc procfs rw 0 0' /etc/fstab || return 1
pkg info -q gnome-shell || return 1
pkg info -q gnome-terminal || return 1
pkg info -q nautilus || return 1
return 0
}
if check_previous_gnome_install; then
# Decide to clear Gnome installation or not.
if bsddialog --default-no --yesno "A previous Gnome installation has been detected.\n Do you want to clear it ?" 6 52; then
echo 'I clean Gnome installation now'
sysrc -x gdm_enable dbus_enable
sed -i '' 's/proc \/proc procfs rw 0 0//' /etc/fstab
pw groupmod video -d "$user"
rm -f /home/"$user"/.xinitrc
for pkg in $pkg_list_gnomefull; do
pkg remove -yf $pkg*
done
cd /home/"$user"
rm -rf .dbus
rm -rf .config
rm -rf .local
rm -rf .cache
rm .xsession*
rm .Xauthority
rm -f .dmrc
pkg delete -y $(pkg info | grep -i gnome | awk '{print $1}')
if bsddialog --yesno " Gnome has been entirely removed.\nYou should restart before installing another desktop.\n Do you want to restart now ?" 7 57; then
reboot
fi
fi
fi
# --------------------
# Check for LXQT:
check_previous_lxqt_install() {
grep -q '^\s*sddm_enable="YES"' /etc/rc.conf && \
grep -q '^\s*dbus_enable="YES"' /etc/rc.conf && \
grep -q '^proc /proc procfs rw 0 0' /etc/fstab || return 1
pkg info -q lxqt || return 1
return 0
}
if check_previous_lxqt_install; then
# Decide to clear Lxqt installation or not.
if bsddialog --default-no --yesno "A previous lxqt installation has been detected.\n Do you want to clear it ?" 6 51; then
echo 'I clean lxqt installation now'
sysrc -x sddm_enable dbus_enable
sed -i '' 's/proc \/proc procfs rw 0 0//' /etc/fstab
pw groupmod video -d "$user"
rm -f /home/"$user"/.xinitrc
for pkg in $pkg_list_lxqt; do
pkg remove -yf $pkg*
done
cd /home/"$user"
rm -rf .dbus
rm -rf .config
rm -rf .local
rm -rf .cache
pkg delete -y $(pkg info | grep -i lxqt | awk '{print $1}')
if bsddialog --yesno " Lxqt has been entirely removed.\nYou should restart before installing another desktop.\n Do you want to restart now ?" 7 57; then
reboot
fi
fi
fi
# --------------------
# Check for FVWM:
check_previous_fvwm_install() {
grep -q '^\s*sddm_enable="YES"' /etc/rc.conf && \
grep -q '^\s*dbus_enable="YES"' /etc/rc.conf
pkg info -q fvwm || return 1
return 0
}
if check_previous_fvwm_install; then
# Decide to clear fvwm installation or not.
if bsddialog --default-no --yesno "A previous fvwm installation has been detected.\n Do you want to clear it ?" 6 51; then
echo 'I clean fvwm installation now'
sysrc -x sddm_enable dbus_enable
pw groupmod video -d "$user"
rm -f /home/"$user"/.xinitrc
for pkg in $pkg_list_fvwm; do
pkg remove -yf $pkg
done
if bsddialog --yesno " fvwm has been entirely removed.\nYou should restart before installing another desktop.\n Do you want to restart now ?" 7 57; then
reboot
fi
fi
fi
# --------------------
# Check for WINDOWMAKER:
check_previous_wmaker_install() {
pkg info -q windowmaker || return 1
return 0
}
if check_previous_wmaker_install; then
# Decide to clear windowmaker installation or not.
if bsddialog --default-no --yesno "A previous windowmaker installation has been detected.\n Do you want to clear it ?" 6 58; then
echo 'I clean windowmaker installation now'
sysrc -x sddm_enable dbus_enable
pw groupmod video -d "$user"
rm -f /home/"$user"/.xinitrc
for pkg in $pkg_list_wmaker; do
pkg remove -yf $pkg
done
if bsddialog --yesno " windowmaker has been entirely removed.\nYou should restart before installing another desktop.\n Do you want to restart now ?" 7 57; then
reboot
fi
fi
fi
}
##############
# DE choices:
kde-sddm_min() {
for pkg in $pkg_list_kdemin; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
echo "| - \"$pkg\" installed"
done
sysrc sddm_enable=YES dbus_enable=YES
if ! grep -q "net.local.stream.recvspace=65536" /etc/sysctl.conf; then
echo "net.local.stream.recvspace=65536" >> /etc/sysctl.conf
fi
if ! grep -q "net.local.stream.sendspace=65536" /etc/sysctl.conf; then
echo "net.local.stream.sendspace=65536" >> /etc/sysctl.conf
fi
pw groupmod video -m "$user"
if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then
echo "proc /proc procfs rw 0 0" >> /etc/fstab
fi
echo "exec ck-launch-session startplasma-x11" > /home/"$user"/.xinitrc
session_autologin="plasma"
}
kde-sddm_full() {
for pkg in $pkg_list_kdefull; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
echo "| - \"$pkg\" installed"
done
sysrc sddm_enable=YES dbus_enable=YES
if ! grep -q "net.local.stream.recvspace=65536" /etc/sysctl.conf; then
echo "net.local.stream.recvspace=65536" >> /etc/sysctl.conf
fi
if ! grep -q "net.local.stream.sendspace=65536" /etc/sysctl.conf; then
echo "net.local.stream.sendspace=65536" >> /etc/sysctl.conf
fi
pw groupmod video -m "$user"
if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then
echo "proc /proc procfs rw 0 0" >> /etc/fstab
fi
echo "exec ck-launch-session startplasma-x11" > /home/"$user"/.xinitrc
session_autologin="plasma"
}
xfce-lightdm_min() {
for pkg in $pkg_list_xfcemin; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
echo "| - \"$pkg\" installed"
done
sysrc lightdm_enable=YES dbus_enable=YES
if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then
echo "proc /proc procfs rw 0 0" >> /etc/fstab
fi
cp /usr/local/etc/xdg/xfce4/xinitrc /home/"$user"/.xinitrc
}
xfce-lightdm_full() {
for pkg in $pkg_list_xfcefull; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
echo "| - \"$pkg\" installed"
done
sysrc lightdm_enable=YES dbus_enable=YES
if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then
echo "proc /proc procfs rw 0 0" >> /etc/fstab
fi
cp /usr/local/etc/xdg/xfce4/xinitrc /home/"$user"/.xinitrc
}
mate-lightdm() {
for pkg in $pkg_list_mate; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
echo "| - \"$pkg\" installed"
done
sysrc lightdm_enable=YES dbus_enable=YES
if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then
echo "proc /proc procfs rw 0 0" >> /etc/fstab
fi
echo "exec ck-launch-session mate-session" > /home/"$user"/.xinitrc
}
cinnamon-lightdm() {
for pkg in $pkg_list_cinnamon; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
echo "| - \"$pkg\" installed"
done
sysrc lightdm_enable=YES dbus_enable=YES
if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then
echo "proc /proc procfs rw 0 0" >> /etc/fstab
fi
echo "exec ck-launch-session cinnamon-session" > /home/"$user"/.xinitrc
}
gnome-gdm_min() {
for pkg in $pkg_list_gnomemin; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
echo "| - \"$pkg\" installed"
done
sysrc gdm_enable=YES dbus_enable=YES
if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then
echo "proc /proc procfs rw 0 0" >> /etc/fstab
fi
echo "exec gnome-session" > /home/"$user"/.xinitrc
}
gnome-gdm_full() {
for pkg in $pkg_list_gnomefull; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
echo "| - \"$pkg\" installed"
done
sysrc gdm_enable=YES dbus_enable=YES
if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then
echo "proc /proc procfs rw 0 0" >> /etc/fstab
fi
echo "exec gnome-session" > /home/"$user"/.xinitrc
}
lxqt-sddm() {
for pkg in $pkg_list_lxqt; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
echo "| - \"$pkg\" installed"
done
sysrc sddm_enable=YES dbus_enable=YES
if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then
echo "proc /proc procfs rw 0 0" >> /etc/fstab
fi
echo "exec ck-launch-session startlxqt" > /home/"$user"/.xinitrc
session_autologin="lxqt"
}
fvwm() {
for pkg in $pkg_list_fvwm; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
echo "| - \"$pkg\" installed"
done
pw groupmod video -m "$user"
sysrc sddm_enable=YES dbus_enable=YES
echo "exec fvwm" > /home/"$user"/.xinitrc
session_autologin="fvwm"
}
wmaker() {
for pkg in $pkg_list_wmaker; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
echo "| - \"$pkg\" installed"
done
pw groupmod video -m "$user"
echo "exec wmaker" > /home/"$user"/.xinitrc
}
twm() {
for pkg in $pkg_list_twm; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
echo "| - \"$pkg\" installed"
done
}
####################
# Autologin options
autologin() {
if bsddialog --yesno "Do you want to enable automatic login at desktop startup?" 5 61; then
if [ -f /usr/local/bin/sddm ]; then
# SDDM detected
cat <<EOF >> /usr/local/etc/sddm.conf
[Autologin]
User=$user
Session=$session_autologin
EOF
bsddialog --msgbox "Autologin configured for SDDM." 5 34
elif [ -f /usr/local/sbin/lightdm ]; then
# LightDM detected
sed -i "" "s/#autologin-user=/autologin-user=$user/" /usr/local/etc/lightdm/lightdm.conf
sed -i "" "s/#autologin-user-timeout=0/autologin-user-timeout=0/" /usr/local/etc/lightdm/lightdm.conf
bsddialog --msgbox "Autologin configured for LightDM." 5 37
else
bsddialog --msgbox "Neither SDDM nor LightDM detected. No changes made." 5 55
fi
fi
}
###########
# DE menus
kde-sddm_choice() {
DE=$(bsddialog --clear \
--backtitle "KDE-SDDM" \
--title "Desktop Environment" \
--menu "Select your Desktop Environment:" \
9 40 10 \
1 "Minimal KDE environment" \
2 "Full KDE environment" \
3>&1 1>&2 2>&3)
case $? in
0)
case $DE in
1) kde-sddm_min ;;
2) kde-sddm_full ;;
esac
;;
1|255) desktop_selection_menu ;;
esac
}
xfce-lightdm_choice() {
DE=$(bsddialog --clear \
--backtitle "XFCE-LIGHTDM" \
--title "Desktop Environment" \
--menu "Select your Desktop Environnment:" \
9 40 10 \
1 "Minimal Xfce environment" \
2 "Full Xfce environment" \
3>&1 1>&2 2>&3)
case $? in
0)
case $DE in
1) xfce-lightdm_min ;;
2) xfce-lightdm_full ;;
esac
;;
1|255) desktop_selection_menu ;;
esac
}
gnome-gdm_choice() {
DE=$(bsddialog --clear \
--backtitle "GNOME-GDM" \
--title "Desktop Environment" \
--menu "Select your Desktop Environnment:" \
9 40 10 \
1 "Minimal GNOME environment" \
2 "Full GNOME environment" \
3>&1 1>&2 2>&3)
case $? in
0)
case $DE in
1) gnome-gdm_min ;;
2) gnome-gdm_full ;;
esac
;;
1|255) desktop_selection_menu ;;
esac
}
# DE selection
desktop_selection_menu() {
DE=$(bsddialog --clear \
--backtitle "Desktop Environnments" \
--title "Desktop Environnment" \
--menu "Select your Desktop Environnment:" \
17 70 10 \
1 "KDE (with sddm)" \
2 "XFCE4 (with lightdm)" \
3 "MATE (with lightdm)" \
4 "CINNAMON (with lightdm)" \
5 "GNOME (with gdm)" \
6 "LXQT (with sddm)" \
7 "FVWM" \
8 "WINDOWMAKER" \
9 "TWM" \
10 "(none)" \
3>&1 1>&2 2>&3)
case $DE in
1) kde-sddm_choice ;;
2) xfce-lightdm_choice ;;
3) mate-lightdm ;;
4) cinnamon-lightdm ;;
5) gnome-gdm_choice ;;
6) lxqt-sddm ;;
7) fvwm ;;
8) wmaker ;;
9) twm ;;
10) automatic_graphics_detection ;;
esac
}
############################################################################################
# Which GPU ?
intel-irisxe() {
cat <<EOF > /usr/local/etc/X11/xorg.conf.d/00-scfb.conf
Section "Device"
Identifier "Card0"
Driver "scfb"
BusID "$intelirisxe_pci_location"
EndSection
EOF
gpu_configured=1
}
vbox() {
cat <<EOF > /usr/local/etc/X11/xorg.conf.d/00-vbox.conf
# This configuration file is useless.
# It only permits autodetection.
EOF
gpu_configured=1
}
intel-older() {
clear
pkg_list_intelgpu="xf86-video-intel drm-kmod"
for pkg in $pkg_list_intelgpu; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
sysrc kld_list+=" i915kms" > /dev/null 2>&1
cat <<EOF > /usr/local/etc/X11/xorg.conf.d/00-intel.conf
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
#Option "AccelMethod" "sna"
#Option "TearFree" "true"
#Option "DRI" "3"
#Option "Backlight" "intel_backlight"
BusID "$intel_pci_location"
EndSection
EOF
gpu_configured=1
}
nvidia-gpu() {
TMPFILE=$(mktemp)
bsddialog --backtitle "Select your GPU driver" \
--title "Installing graphics" \
--radiolist "Select driver:" 12 60 9 \
"nvidia-driver-304" "Legacy NVIDIA driver 304" off \
"nvidia-driver-340" "Legacy NVIDIA driver 340" off \
"nvidia-driver-390" "Legacy NVIDIA driver 390" off \
"nvidia-driver-470" "Legacy NVIDIA driver 470" off \
"nvidia-driver-570" "Latest NVIDIA driver 570" off 2> "$TMPFILE"
choice=$(< "$TMPFILE" sed 's/"//g')
rm -f "$TMPFILE"
case "$choice" in
"nvidia-driver-304")
pkg_list_nvidia304="nvidia-driver-304"
for pkg in $pkg_list_nvidia304; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
sysrc kld_list+=" nvidia" > /dev/null 2>&1
# BusID detection
pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 'NVIDIA')
nvidia_pci_location=$(echo "$pciconf_output" | \
sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | \
sed 's/0://')
cat <<EOF > /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BusID "$nvidia_pci_location"
EndSection
Section "ServerFlags"
Option "IgnoreABI" "1"
EndSection
EOF
gpu_configured=1
;;
"nvidia-driver-340")
pkg_list_nvidia340="nvidia-driver-340"
for pkg in $pkg_list_nvidia340; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
sysrc kld_list+=" nvidia" > /dev/null 2>&1
# BusID detection
pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 'NVIDIA')
nvidia_pci_location=$(echo "$pciconf_output" | \
sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | \
sed 's/0://')
cat <<EOF > /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BusID "$nvidia_pci_location"
EndSection
EOF
gpu_configured=1
;;
"nvidia-driver-390")
pkg_list_nvidia390="nvidia-driver-390"
for pkg in $pkg_list_nvidia390; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
sysrc kld_list+=" nvidia-modeset" > /dev/null 2>&1
# BusID detection
pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 'NVIDIA')
nvidia_pci_location=$(echo "$pciconf_output" | \
sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | \
sed 's/0://')
cat <<EOF > /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BusID "$nvidia_pci_location"
EndSection
EOF
gpu_configured=1
;;
"nvidia-driver-470")
pkg_list_nvidia470="nvidia-driver-470"
for pkg in $pkg_list_nvidia470; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
sysrc kld_list+=" nvidia-modeset" > /dev/null 2>&1
# BusID detection
pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 'NVIDIA')
nvidia_pci_location=$(echo "$pciconf_output" | \
sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | \
sed 's/0://')
cat <<EOF > /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BusID "$nvidia_pci_location"
EndSection
EOF
gpu_configured=1
;;
"nvidia-driver-570")
pkg_list_nvidia570="nvidia-driver"
for pkg in $pkg_list_nvidia570; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
sysrc kld_list+=" nvidia-modeset" > /dev/null 2>&1
# BusID detection
pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 'NVIDIA')
nvidia_pci_location=$(echo "$pciconf_output" | \
sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | \
sed 's/0://')
cat <<EOF > /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BusID "$nvidia_pci_location"
EndSection
EOF
gpu_configured=1
;;
esac
}
amd-cpu_amd-gpu() {
clear
pkg_list_amdgpu="xf86-video-amdgpu drm-kmod gpu-firmware-kmod"
for pkg in $pkg_list_amdgpu; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
sysrc kld_list+=" amdgpu" > /dev/null 2>&1
gpu_configured=1
}
graphics_selection_menu() {
GPU=$(bsddialog --clear \
--backtitle "GPU" \
--title "GPU Menu" \
--menu "Select your graphics:" \
13 70 10 \
1 "Intel Iris Xe" \
2 "Intel (before Iris Xe)" \
3 "Nvidia" \
4 "AMD" \
5 "Restart automatic GPU detection" \
6 "Virtual Machine" \
3>&1 1>&2 2>&3)
case $GPU in
1) intel-irisxe ;;
2) intel-older ;;
3) nvidia-gpu ;;
4) amd-gpu ;;
5) automatic_graphics_detection ;;
6) programs_selection_menu ;;
esac
}
automatic_graphics_detection() {
# Check if there is an already existing configuration file :
if [ -e /usr/local/etc/X11/xorg.conf.d/00-scfb.conf ] || \
[ -e /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf ] || \
[ -e /usr/local/etc/X11/xorg.conf.d/00-intel.conf ] || \
[ -e /usr/local/etc/X11/xorg.conf.d/00-vbox.conf ]; then
bsddialog --yesno "I have detected a previous graphics configuration file\n Do you want to use it [Yes] or erase it [No]?" 6 58
existingconf_ornot=$?
if [ $existingconf_ornot -eq 0 ]; then
useconf="1"
return
else
rm /usr/local/etc/X11/xorg.conf.d/00-scfb.conf 2>&1
rm /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf 2>&1
rm /usr/local/etc/X11/xorg.conf.d/00-intel.conf 2>&1
rm /usr/local/etc/X11/xorg.conf.d/00-vbox.conf 2>&1
graphics_selection_menu
return
fi
fi
if [ "$useconf" != "1" ]; then
# VIRTUALBOX
vbox_pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 "'SVGA II Adapter")
vbox_pci_location=$(echo "$vbox_pciconf_output" | sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | sed 's/0://')
# INTEL IRIS Xe
intelirisxe_pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 'Iris Xe')
intelirisxe_pci_location=$(echo "$intelirisxe_pciconf_output" | sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | sed 's/0://')
# INTEL (before Iris Xe)
intel_pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 "HD Graphics")
intel_pci_location=$(echo "$intel_pciconf_output" | sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | sed 's/0://')
# NVIDIA
nvidia_pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 'NVIDIA')
nvidia_pci_location=$(echo "$nvidia_pciconf_output" | sed -nE 's/^vgapci[0-9]+@pci([0-9]+:[0-9]+:[0-9]+:[0-9]+).*/PCI:\1/p' | sed 's/0://')
# If 2 graphics are detected (Intel Iris Xe and NVIDIA), please choose between
if [ ! -z "$intelirisxe_pciconf_output" ] && \
[ ! -z "$nvidia_pciconf_output" ]; then
bsddialog --yesno "We have detected both Intel Iris Xe and NVIDIA graphics\n Use Intel Iris Xe [Yes] or NVIDIA [No]?" 6 59
intel_ornvidia=$?
if [ $intel_ornvidia -eq 0 ]; then
intel-irisxe
return
else
nvidia-gpu
return
fi
fi
# If 2 graphics are detected (Intel and NVIDIA), please choose between
if [ ! -z "$intel_pciconf_output" ] && \
[ ! -z "$nvidia_pciconf_output" ]; then
bsddialog --yesno "We have detected both Intel and NVIDIA graphics\n Use Intel [Yes] or NVIDIA [No]?" 6 51
intel_ornvidia=$?
if [ $intel_ornvidia -eq 0 ]; then
intel-older
return
else
nvidia-gpu
return
fi
fi
# If VirtualBox is detected, ask to accept or not :
if [ ! -z "$vbox_pciconf_output" ]; then
vbox
return
fi
# If an Intel Iris Xe is detected, ask to accept or not :
if [ ! -z "$intelirisxe_pciconf_output" ]; then
intel-irisxe
return
fi
# If an Intel is detected, ask to accept or not :
if [ ! -z "$intel_pciconf_output" ]; then
intel-older
return
fi
# If an NVIDIA is detected, ask to accept or not :
if [ ! -z "$nvidia_pciconf_output" ]; then
nvidia-gpu
return
fi
# If no choice has been done, go to graphics_selection_menu :
if [ ! -e /usr/local/etc/X11/xorg.conf.d/00-scfb.conf ] && \
[ ! -e /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf ] && \
[ ! -e /usr/local/etc/X11/xorg.conf.d/00-intel.conf ] && \
[ ! -e /usr/local/etc/X11/xorg.conf.d/00-vbox.conf ]; then
graphics_selection_menu
return
fi
fi
# If a GPU has been configured, then leave the function
if [ "$gpu_configured" -eq 1 ]; then
return 0
fi
# Check if there is an already existing configuration file :
if [ ! -e /usr/local/etc/X11/xorg.conf.d/00-scfb.conf ] && \
[ ! -e /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf ] && \
[ ! -e /usr/local/etc/X11/xorg.conf.d/00-intel.conf ] && \
[ ! -e /usr/local/etc/X11/xorg.conf.d/00-vbox.conf ]; then
graphics_selection_menu
return
fi
}
programs_selection_menu() {
# Install usual programs
TMPFILE=$(mktemp)
bsddialog --backtitle "Select usual programs" \
--title "Installing applications" \
--checklist "Select usual programs:" 30 70 20 \
"firefox " "Firefox web browser" off \
"ungoogled-chromium " "Chromium web browser without Google" off \
"chrome-linux " "Linux compat chrome for Netflix" off \
"brave-linux " "Linux compat brave" off \
"edge-linux " "Linux compat edge" off \
"opera-linux " "Linux compat opera" off \
"vivaldi-linux " "Linux compat vivaldi" off \
"qutebrowser " "Qutebrowser vim-like web browser" off \
"tor-browser " "Tor Browser for FreeBSD" off \
"midori " "Midori web browser" off \
"thunderbird " "Thunderbird Mail Client" off \
"claws-mail " "Claws-Mail Client" off \
"remmina " "Remote Desktop Viewer" off \
"tigervnc-server " "TigerVNC Server" off \
"tigervnc-viewer " "TigerVNC Viewer" off \
"anydesk " "Remote Desktop access" off \
"rxvt-unicode " "rxvt modified to support Unicode" off \
"alacritty " "GPU-accelerated terminal emulator" off \
"neofetch " "highly customizable system info script" off \
"putty " "Putty term" off \
"hexchat " "HexChat IRC client" off \
"pidgin " "Pidgin messaging client" off \
"psi " "PSI messaging client" off \
"codeblocks " "Code Editor" off \
"vscode " "Code Editor" off \
"vlc " "VLC multimedia player" off \
"handbrake " "HandBrake video encoder" off \
"ffmpeg " "Video library" off \
"audacity " "Audacity audio editor" off \
"gtk-mixer " "Sound controller" off \
"gimp " "GIMP image editor" off \
"nomacs " "easy image viewer/editor" off \
"ristretto " "Ristretto image viewer" off \
"libreoffice " "LibreOffice office suite" off \
"abiword " "Text editor" off \
"qpdfview " "PDF document viewer" off \
"evince " "PFD reader" off \
"okular " "PDF reader" off \
"filezilla " "FileZilla FTP client" off \
"rsync " "Network file sync utility" off \
"restic " "Restic Simplified Backup tool" off \
"rclone " "Rclone file transfer tool" off \
"rclone-browser " "GUI rclone" off \
"7-zip " "7z file archiver" off \
"keepassxc " "KeePassXC password manager" off \
"keepass " "KeePass password manager" off \
"1password-client " "1Password manager" off \
"1password-client2 " "1Password manager" off \
"openvpn " "OpenVPN Virtual Private Network setup" off \
"tor " "Tor decentralized anonymous network" off \
"wireshark " "Wireshark network protocol analyzer" off \
"nmap " "Nmap network discovery tool" off \
"liferea " "RSS agregator" off \
"musescore " "Sheet music editor" off \
"virtualbox " "VirtualBox Hypervisor" off \
"BVCP " "BVCP (bhyve) Hypervisor" off \
"httrack " "web-site sucker" off 2>$TMPFILE
choices=$(sed 's/"//g' < $TMPFILE | tr ' ' '\n')
# Install the selected programs.
for choice in $choices; do
case $choice in
"firefox")
pkg_list="firefox"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "firefox-esr"
done
;;
"chrome-linux")
pkg_list="wget git"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
if [ ! -e /tmp/linux-browser-installer* ]; then
cd /tmp
git clone https://github.com/mrclksr/linux-browser-installer.git
fi
chmod 755 /usr/local/sbin/debootstrap
/tmp/linux-browser-installer/linux-browser-installer install chrome
;;
"brave-linux")
pkg_list="wget git"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
if [ ! -e /tmp/linux-browser-installer ]; then
cd /tmp
git clone https://github.com/mrclksr/linux-browser-installer.git
fi
chmod 755 /usr/local/sbin/debootstrap
/tmp/linux-browser-installer/linux-browser-installer install brave
;;
"edge-linux")
pkg_list="wget git"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
if [ ! -e /tmp/linux-browser-installer* ]; then
cd /tmp
git clone https://github.com/mrclksr/linux-browser-installer.git
fi
chmod 755 /usr/local/sbin/debootstrap
/tmp/linux-browser-installer/linux-browser-installer install edge
;;
"opera-linux")
pkg_list="wget git"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
if [ ! -e /tmp/linux-browser-installer* ]; then
cd /tmp
git clone https://github.com/mrclksr/linux-browser-installer.git
fi
chmod 755 /usr/local/sbin/debootstrap
/tmp/linux-browser-installer/linux-browser-installer install opera
;;
"vivaldi-linux")
pkg_list="wget git"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
if [ ! -e /tmp/linux-browser-installer* ]; then
cd /tmp
git clone https://github.com/mrclksr/linux-browser-installer.git
fi
chmod 755 /usr/local/sbin/debootstrap
/tmp/linux-browser-installer/linux-browser-installer install vivaldi
;;
"pidgin")
pkg_list="pidgin pidgin-bot-sentry pidgin-encryption pidgin-fetion pidgin-hotkeys
pidgin-latex pidgin-libnotify pidgin-manualsize pidgin-otr
pidgin-sipe pidgin-skypeweb pidgin-twitter pidgin-window_merge"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
;;
"anydesk")
fetch https://download.anydesk.com/freebsd/anydesk-freebsd-6.1.1-x86_64.tar.gz -P /tmp
cd /tmp
tar -xvzf anydesk-freebsd*
cd anydesk-6*
cp anydesk /usr/local/bin/
;;
"virtualbox")
pkg_list_vbox="virtualbox-ose virtualbox-ose-additions"
for pkg in $pkg_list_vbox; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
sysrc vboxguest_enable=YES > /dev/null 2>&1
sysrc vboxservice_enable=YES > /dev/null 2>&1
sysrc vboxnet_enable=YES > /dev/null 2>&1
sysrc -f /boot/loader.conf vboxdrv_load=YES > /dev/null 2>&1
if ! grep -q "^\[system=10\]$" /etc/devfs.rules; then
echo "[system=10]" >> /etc/devfs.rules
fi
if ! grep -q "^add path 'usb/\*' mode 0660 group operator$" /etc/devfs.rules; then
echo "add path 'usb/*' mode 0660 group operator" >> /etc/devfs.rules
fi
sysrc devfs_system_ruleset="system" > /dev/null 2>&1
pw groupmod vboxusers -m "$user"
pw groupmod operator -m "$user"
sysrc hald_enable=YES > /dev/null 2>&1
if ! grep -q "^perm cd\* 0660$" /etc/devfs.conf; then
echo "perm cd* 0660" >> /etc/devfs.conf
fi
if ! grep -q "^perm xpt0 0660$" /etc/devfs.conf; then
echo "perm xpt0 0660" >> /etc/devfs.conf
fi
if ! grep -q "^perm pass\* 0660$" /etc/devfs.conf; then
echo "perm pass* 0660" >> /etc/devfs.conf
fi
if ! grep -q "^own vboxnetctl root:vboxusers$" /etc/devfs.conf; then
echo "own vboxnetctl root:vboxusers" >> /etc/devfs.conf
fi
if ! grep -q "^perm vboxnetctl 0660$" /etc/devfs.conf; then
echo "perm vboxnetctl 0660" >> /etc/devfs.conf
fi
chown root:vboxusers /dev/vboxnetctl
chmod 0660 /dev/vboxnetctl
;;
"BVCP")
fetch https://bhyve.npulse.net/release.tgz -o /tmp
cd /tmp ; tar xvzf release.tgz ; cd bhyve-webadmin*
./install.sh
printf "\n"
echo "------------------------------------------------------"
echo "Please note the admin password and then press [ENTER] to continue"
echo "------------------------------------------------------"
read ENTER
;;
*)
pkg info -e "$choice" || pkg ins -y "$choice"
;;
esac
done
rm -f "$TMPFILE"
}
# usual tools bundle (webcams, printers, RDP, usb devices NTFS/EXFAT automount, CD/DVD burning, hypervisors etc.)
usual_tools_installation() {
# Install usual tools
TMPFILE=$(mktemp)
bsddialog --backtitle "Select usual tools" \
--title "Installing applications" \
--checklist "Select usual tools:" 30 70 20 \
"git " "Distributed source code management tool" off \
"webcam " "Automatically configure webcam usage" off \
"NTFS-ExFAT " "Automount USB devices with NTFS/ExFAT" off \
"CD-DVD " "dvd+rw-tools cdrtools" off \
"compress " "Compression/Decompression bundle" off \
"printer " "Use printers" off \
"wifimgr " "Manage Wifi connections" off \
"networkmgr " "Manage Ethernet connections" off \
"bind-tools " "Command line tools from BIND" off \
"htop " "htop monitoring tool" off \
"btop " "btop monitoring tool" off \
"nano " "nano CLI editor" off \
"hw-probe " "Send hardware probes" off \
"inxi " "CLI system information tool" off \
"xrdp " "Remote Desktop Protocol (RDP) server" off \
"rdesktop " "RDP client for Windows" off \
"ipfwGUI " "IPFW firewall GUI manager" off \
"dma " "DragonFly Mail Agent" off \
"coredumps " "Send core dumps to /tmp/core" off \
"cpu_temp " "Enable CPU temp monitoring (Intel/AMD)" off \
"locatedb " "Build locatedb" off \
"password_less" "Enable password-less root login with 'sudo su -'" off \
"wget " "Retrieve files by HTTP(S) or FTP" off 2>$TMPFILE
choices=$(sed 's/"//g' < $TMPFILE | tr ' ' '\n')
# Install the selected programs.
for choice in $choices; do
case $choice in
"webcam")
pkg_list="webcamd pwcview"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
sysrc webcamd_enable="YES"
service devd restart
pw groupmod webcamd -m "$user"
sysrc -f /boot/loader.conf cuse_load=YES
;;
"NTFS-ExFAT")
pkg_list="fuse fusefs-ntfs fusefs-exfat automount"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
sysrc -f /boot/loader.conf fusefs_load=YES
;;
"CD-DVD")
pkg_list="dvd+rw-tools cdrtools"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
;;
"compress")
pkg_list="zip unzip bzip2 bzip3 zpaqfranz"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
;;
"printer")
pkg_list="cups cups-filters system-config-printer"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
sysrc cupsd_enable="YES"
;;
"xrdp")
pkg_list="xrdp"
for pkg in $pkg_list; do
pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg"
done
sysrc xrdp_enable="NO"
sysrc xrdp_sesman_enable="NO"
;;
"ipfwGUI")
if [ ! -x /usr/local/bin/ipfwGUI ]; then
cd /tmp
git clone https://github.com/bsdlme/ipfwGUI.git
cd ipfwGUI
make install clean
fi
;;
"dma")
HOSTNAME=$(hostname)
MAILSERVER=$(bsddialog --inputbox " DMA : Address of mailserver" 8 33 2>&1 1>/dev/tty)
if [ -e /etc/dma/dma.conf ]; then
mv /etc/dma/dma.conf /etc/dma/dma.conf.original
fi
cat <<EOF > /etc/dma/dma.conf
SMARTHOST $MAILSERVER
MAILNAME $HOSTNAME
NULLCLIENT
EOF
cat <<EOF >> /etc/rc.conf
# Disable sendmail
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
EOF
;;
"coredumps")
# Make the cores directory, with sticky bit
if [ ! -d /tmp/core ]; then
mkdir -p /tmp/cores
chmod 1777 /tmp/cores
fi
CONF="/etc/sysctl.conf"
set_sysctl() {
KEY="$1"
VALUE="$2"
# Update sysctl.conf only if the exact line is missing
if ! grep -q "^$KEY=$VALUE\$" "$CONF"; then
if grep -q "^$KEY=" "$CONF"; then
sed -i '' "s|^$KEY=.*|$KEY=$VALUE|" "$CONF"
else
echo "$KEY=$VALUE" >> "$CONF"
fi
fi
# Apply the setting immediately
CURRENT_VAL=$(sysctl -n "$KEY")
if [ "$CURRENT_VAL" != "$VALUE" ]; then
sysctl "${KEY}=${VALUE}"
fi
}
# Set both values
set_sysctl kern.corefile "/tmp/cores/%N.%P.core"
set_sysctl kern.coredump "1"
;;
"cpu_temp")
vendor=$(sysctl -n hw.model 2>/dev/null)
if echo "$vendor" | grep -qi "intel"; then
sysrc kld_list+=coretemp
elif echo "$vendor" | grep -qi "amd"; then
sysrc kld_list+=amdtemp
fi
;;
"locatedb")
# updatedb :
if [ "$(sysrc -n weekly_locate_enable='/etc/periodic/weekly/310.locate')" = "YES" ]; then
echo "The weekly locate update is already enabled in rc.conf. The script 310.locate will not run."
else
/etc/periodic/weekly/310.locate
fi
;;
"password_less")
pw groupmod wheel -m "$user"
pw groupmod operator -m "$user"
sed -i '' "s/# %wheel/ %wheel/" /usr/local/etc/sudoers
;;
*)
pkg info -e "$choice" || pkg ins -y "$choice"
;;
esac
done
rm -f "$TMPFILE"
}
# Change locale
locale_selection_menu() {
# Utiliser bsddialog pour afficher une liste avec des boutons radio
selected_choice=$(bsddialog --title "Select Locale" --radiolist "Please choose:" 19 50 15 \
"af_ZA.UTF-8" "South Africa" off \
"am_ET.UTF-8" "Ethiopia" off \
"ar_AE.UTF-8" "United Arab Emirates" off \
"ar_EG.UTF-8" "Egypt" off \
"ar_JO.UTF-8" "Jordan" off \
"ar_MA.UTF-8" "Morocco" off \
"ar_QA.UTF-8" "Qatar" off \
"ar_SA.UTF-8" "Saudi Arabia" off \
"be_BY.UTF-8" "Belarus" off \
"bg_BG.UTF-8" "Bulgaria" off \
"ca_AD.UTF-8" "Andorra" off \
"ca_ES.UTF-8" "Spain" off \
"ca_FR.UTF-8" "France" off \
"ca_IT.UTF-8" "Italy" off \
"cs_CZ.UTF-8" "Czech Republic" off \
"da_DK.UTF-8" "Denmark" off \
"de_AT.UTF-8" "Austria" off \
"de_CH.UTF-8" "Switzerland" off \
"de_DE.UTF-8" "Germany" off \
"el_GR.UTF-8" "Greece" off \
"en_AU.UTF-8" "Australia" off \
"en_CA.UTF-8" "Canada" off \
"en_GB.UTF-8" "United Kingdom" off \
"en_HK.UTF-8" "Hong Kong" off \
"en_IE.UTF-8" "Ireland" off \
"en_NZ.UTF-8" "New Zealand" off \
"en_PH.UTF-8" "Philippines" off \
"en_SG.UTF-8" "Singapore" off \
"en_US.UTF-8" "United States" off \
"en_ZA.UTF-8" "South Africa" off \
"es_AR.UTF-8" "Argentina" off \
"es_CR.UTF-8" "Costa Rica" off \
"es_ES.UTF-8" "Spain" off \
"es_MX.UTF-8" "Mexico" off \
"et_EE.UTF-8" "Estonia" off \
"eu_ES.UTF-8" "Spain" off \
"fa_AF.UTF-8" "Afghanistan" off \
"fa_IR.UTF-8" "Iran" off \
"fi_FI.UTF-8" "Finland" off \
"fr_BE.UTF-8" "Belgium" off \
"fr_CA.UTF-8" "Canada" off \
"fr_CH.UTF-8" "Switzerland" off \
"fr_FR.UTF-8" "France" off \
"ga_IE.UTF-8" "Ireland" off \
"he_IL.UTF-8" "Israel" off \
"hi_IN.UTF-8" "India" off \
"hr_HR.UTF-8" "Croatia" off \
"hu_HU.UTF-8" "Hungary" off \
"hy_AM.UTF-8" "Armenia" off \
"is_IS.UTF-8" "Iceland" off \
"it_CH.UTF-8" "Switzerland" off \
"it_IT.UTF-8" "Italy" off \
"ja_JP.UTF-8" "Japan" off \
"kk_KZ.UTF-8" "Kazakhstan" off \
"ko_KR.UTF-8" "South Korea" off \
"lt_LT.UTF-8" "Lithuania" off \
"lv_LV.UTF-8" "Latvia" off \
"mn_MN.UTF-8" "Mongolia" off \
"nb_NO.UTF-8" "Norway" off \
"nl_BE.UTF-8" "Belgium" off \
"nl_NL.UTF-8" "Netherlands" off \
"nn_NO.UTF-8" "Norway" off \
"pl_PL.UTF-8" "Poland" off \
"pt_BR.UTF-8" "Brazil" off \
"pt_PT.UTF-8" "Portugal" off \
"ro_RO.UTF-8" "Romania" off \
"ru_RU.UTF-8" "Russia" off \
"se_FI.UTF-8" "Finland" off \
"se_NO.UTF-8" "Norway" off \
"sk_SK.UTF-8" "Slovakia" off \
"sl_SI.UTF-8" "Slovenia" off \
"sr_RS.UTF-8" "Serbia" off \
"sr_RS.UTF-8@latin" "Serbia" off \
"sv_FI.UTF-8" "Finland" off \
"sv_SE.UTF-8" "Sweden" off \
"tr_TR.UTF-8" "Turkey" off \
"uk_UA.UTF-8" "Ukraine" off \
"zh_CN.UTF-8" "China" off \
"zh_HK.UTF-8" "Hong Kong" off \
"zh_TW.UTF-8" "Taiwan" off 3>&1 1>&2 2>&3)
# Check and Add locale choice to /home/"$user"/.profile
if [ ! -z $selected_choice ]; then
if ! grep -q "export LANG=\"$selected_choice\"" /home/"$user"/.profile; then
{
echo -e "\n# CUSTOM LOCALE"
echo "export LANG=\"$selected_choice\""
} >> /home/"$user"/.profile
fi
if ! grep -q "export LC_CTYPE=\"$selected_choice\"" /home/"$user"/.profile; then
echo "export LC_CTYPE=\"$selected_choice\"" >> /home/"$user"/.profile
fi
fi
# Change the locale for gdm (if installed)
if [ -e /usr/local/etc/gdm/locale.conf ]; then
sed -i '' "s/en_US.UTF-8/$selected_choice/" /usr/local/etc/gdm/locale.conf
fi
# Change Keyboard map
kbd=$(echo "$selected_choice" | sed 's/^\(..\).*$/\1/')
if [ ! -e /usr/local/etc/X11/xorg.conf.d/keyboard.conf ]; then
cat <<EOF > /usr/local/etc/X11/xorg.conf.d/keyboard.conf
Section "InputClass"
Identifier "KeyboardDefaults"
MatchIsKeyboard "on"
Option "XkbLayout" "$kbd"
EndSection
EOF
fi
build_locatedb
}
# reboot now
reboot_now() {
bsddialog --yesno "Thank you for using this script!\n The installation is finished\n Do you want to reboot now?" 7 36
close_inac=$?
if [ $close_inac -eq 0 ]; then
reboot
fi
exit 0
}
############################################################################################
# EXECUTION FLOW
initial_checks
welcome
# ---- Package availability report for every DE in the 2 repositories section ---- #
rm_previous_report
switch_to_quarterly
check_packages_availability
switch_to_latest
check_packages_availability
show_report
# -------------------------------------------------------------------------------- #
change_repo
update
create_boot_environment
user_for_desktop
detect_and_clean_or_keep_existing_de
desktop_selection_menu
autologin
automatic_graphics_detection
programs_selection_menu
usual_tools_installation
locale_selection_menu
reboot_now