From 9662e7d32eca19a17186da6953b773bf5159508c Mon Sep 17 00:00:00 2001 From: majekla <theophile.dudreuilh@yahoo.com> Date: Sun, 30 Mar 2025 19:34:50 +0000 Subject: [PATCH] Upload files to "/" --- freebsd-desktop.sh | 1213 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1213 insertions(+) create mode 100644 freebsd-desktop.sh diff --git a/freebsd-desktop.sh b/freebsd-desktop.sh new file mode 100644 index 0000000..90d1b83 --- /dev/null +++ b/freebsd-desktop.sh @@ -0,0 +1,1213 @@ +#!/bin/sh + +clear + +checkinternet() { + local url="https://www.freebsd.org/" + echo "- Looking for internet connection, please wait ..." ; sleep 1 + + if fetch -q -o /dev/null "$url"; then + echo "--- OK, let's go !" ; sleep 1 + installpkg + else + echo "Your computer is not connected to the internet, I can't go on." + exit 0 + fi +} + +installpkg() { + printf "\n" + echo "- Looking for 'pkg', please wait..." ; sleep 1 + + if [ ! -x /usr/local/sbin/pkg ]; then + # Check if pkg can be installed + if pkg ins -y 2>&1 | grep -q "error"; then + echo "I can't install pkg, please check your internet connection" + printf "\n" + exit 0 + fi + fi + echo "--- OK, let's go !" ; sleep 1 + + welcome +} + +# 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, and LXQT.\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 390, 470 and 550\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 Good luck!" 26 70; then + echo 'I quit, bye !' + exit 0 + fi + + update +} + + +# System Update +update() { + if bsddialog --yesno "Do you want to update your system before starting?" 5 54; then + bsddialog --msgbox "Please review the available changes, then press 'q' to continue" 5 67 + freebsd-update fetch + freebsd-update install + fi + + user_for_desktop +} + + +# 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 + + desktop_selection_menu +} + + +############################################################################################ +# DE choices: + +kde-sddm_min() { + pkg_list="xorg sudo sddm plasma5-plasma plasma5-sddm-kcm kf5-kded kf5-kdesu \ + plasma5-polkit-kde-agent-1 plasma5-kdecoration plasma5-kde-cli-tools" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + + sysrc sddm_enable=YES dbus_enable=YES + + sysctl net.local.stream.recvspace=65536 net.local.stream.sendspace=65536 > /dev/null 2>&1 + 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 + + sddm_autologin +} + +kde-sddm_full() { + pkg_list="xorg sudo sddm kde5 freebsd-8k-wallpapers-kde kde-baseapps kde-dev-scripts \ + kde-dev-utils kde-thumbnailer-chm kde-thumbnailer-epub kde-thumbnailer-fb2 \ + kde_poster kdeaccessibility kdeadmin kdebugsettings kdeconnect-kde kdegames \ + kdegraphics kdegraphics-thumbnailers kdemultimedia kdevelop calligra kmymoney \ + kdemultimedia-ffmpegthumbs kdenetwork kdenetwork-filesharing kdenlive kdeutils \ + libkdegames libkdepim libproxy-kde plasma5-kde-cli-tools plasma5-kde-gtk-config \ + plasma5-kdecoration plasma5-kdeplasma-addons wallpapers-freebsd-kde dsbsu" + + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + done + + sysrc sddm_enable=YES dbus_enable=YES + + sysctl net.local.stream.recvspace=65536 net.local.stream.sendspace=65536 > /dev/null 2>&1 + 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 + + sddm_autologin +} + +xfce-lightdm_min() { + pkg_list="xorg sudo lightdm lightdm-gtk-greeter xfce xfce4-session xfce4-settings \ + xfce4-desktop xfce4-panel xfce4-wm xfce4-terminal xfce4-tumbler \ + xfce4-power-manager xfce4-notifyd xfce4-screenshooter-plugin xfce4-taskmanager \ + xfce4-wm-themes xdg-user-dirs" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + 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 + + lightdm_autologin +} + +xfce-lightdm_full() { + pkg_list="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-session xfce4-settings \ + xfce4-desktop xfce4-panel xfce4-wm xfce4-terminal xfce4-tumbler \ + xfce4-power-manager xfce4-notifyd xfce4-screensaver xfce4-taskmanager \ + xfce4-screenshooter-plugin xfce-icons-elementary xfce4-wm-themes \ + xfce4-weather-plugin xfce4-netload-plugin xfce4-systemload-plugin \ + xfce4-mount-plugin xfce4-notes-plugin xfce4-xkb-plugin" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + 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 + + lightdm_autologin +} + +mate-lightdm() { + pkg_list="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 mate-conf-editor" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + 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 + + lightdm_autologin +} + +cinnamon-lightdm() { + pkg_list="xorg sudo lightdm lightdm-gtk-greeter cinnamon cinnamon-control-center + cinnamon-desktop cinnamon-menus cinnamon-screensaver cinnamon-session + cinnamon-settings-daemon cinnamon-translations" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + 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 + + lightdm_autologin +} + +gnome-gdm_min() { + pkg_list="xorg sudo gdm gnome-shell gnome-session gnome-desktop gnome-control-center \ + gnome-settings-daemon gnome-terminal nautilus gnome-tweaks gnome-keyring gnome-backgrounds \ + gnome-system-monitor gnome-screenshot gnome-power-manager xdg-user-dirs xdg-desktop-portal-gnome" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + 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 + + automatic_graphics_detection +} + +gnome-gdm_full() { + pkg_list="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" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + 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 + + automatic_graphics_detection +} + +lxqt-sddm() { + pkg_list="xorg sudo sddm liblxqt lxqt lxqt-about lxqt-admin lxqt-archiver \ + lxqt-build-tools lxqt-config lxqt-globalkeys lxqt-menu-data lxqt-notificationd lxqt-openssh-askpass \ + lxqt-panel lxqt-policykit lxqt-powermanagement lxqt-qtplugin lxqt-runner \ + lxqt-session lxqt-sudo lxqt-themes xdg-desktop-portal-lxqt" + + for pkg in $pkg_list; do + pkg info -e "$pkg" >/dev/null || pkg ins -y "$pkg" + 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 + + sddm_autologin +} + + +############################################################################################ +# Autologin options + +sddm_autologin() { + if bsddialog --yesno "Do you want to enable automatic login at desktop startup?" 5 61; then + cat <<EOF >> /usr/local/etc/sddm.conf +[Autologin] +User=$user +Session=plasma +EOF + fi + + automatic_graphics_detection +} + +lightdm_autologin() { + if bsddialog --yesno "Do you want to enable automatic login at desktop startup?" 5 61; then + 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 + fi + + automatic_graphics_detection +} + + +############################################################################################ +# 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 Environnment" \ + --title "Desktop Environnment" \ + --menu "Select your Desktop Environnment:" \ + 14 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 "(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) 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 + programs_selection_menu +} + +vbox() { +cat <<EOF > /usr/local/etc/X11/xorg.conf.d/00-vbox.conf +# This configuration file is useless. +# It only permits autodetection. +EOF + programs_selection_menu +} + +intel-older() { + clear + pkg info -e xf86-video-intel || pkg ins -y xf86-video-intel + pkg info -e drm-kmod || pkg ins -y drm-kmod + 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 + + programs_selection_menu +} + +nvidia-gpu() { + TMPFILE=$(mktemp) + + bsddialog --backtitle "Select your GPU driver" \ + --title "Installing graphics" \ + --radiolist "Select driver:" 10 60 9 \ + "nvidia-driver-390" "Legacy NVIDIA driver" off \ + "nvidia-driver-470" "NVIDIA driver" off \ + "nvidia-driver-550" "Latest NVIDIA driver" off 2> "$TMPFILE" + + choice=$(< "$TMPFILE" sed 's/"//g') + rm -f "$TMPFILE" + + case "$choice" in + + "nvidia-driver-390") + pkg info -e nvidia-driver-390 || pkg ins -y nvidia-driver-390 + 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 + programs_selection_menu + + ;; + "nvidia-driver-470") + pkg info -e nvidia-driver-470 || pkg ins -y nvidia-driver-470 + 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 + + programs_selection_menu + + ;; + "nvidia-driver-550") + pkg info -e nvidia-driver || pkg ins -y nvidia-driver + 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 + programs_selection_menu + + ;; + esac + + programs_selection_menu + +} + +amd-cpu_amd-gpu() { + clear + pkg info -e xf86-video-amdgpu || pkg ins -y xf86-video-amdgpu + pkg info -e drm-kmod || pkg ins -y drm-kmod + pkg info -e gpu-firmware-kmod || pkg ins -y gpu-firmware-kmod + sysrc kld_list+=" amdgpu" > /dev/null 2>&1 + + programs_selection_menu +} + + +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" + programs_selection_menu + 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 + 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 + else + nvidia-gpu + 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 + else + nvidia-gpu + fi + fi + + # If VirtualBox is detected, ask to accept or not : + if [ ! -z "$vbox_pciconf_output" ]; then + vbox + fi + + # If an Intel Iris Xe is detected, ask to accept or not : + if [ ! -z "$intelirisxe_pciconf_output" ]; then + intel-irisxe + fi + + # If an Intel is detected, ask to accept or not : + if [ ! -z "$intel_pciconf_output" ]; then + intel-older + fi + + # If an NVIDIA is detected, ask to accept or not : + if [ ! -z "$nvidia_pciconf_output" ]; then + nvidia-gpu + 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 + fi + 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 + fi +} + +dma() { + #pkg info -e dma || pkg install -y dma + HOSTNAME=hostname + MAILSERVER=$(bsddialog --inputbox " DAM : 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 + bsddialog --msgbox "Don't forget to take a loot at /etc/dma/dma.conf" 5 52 +} + +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 \ + "dma " "Dragonfly DMA" off \ + "remmina " "Remote Desktop Viewer" off \ + "tigervnc-server " "TigerVNC Server" off \ + "tigervnc-viewer " "TigerVNC Viewer" off \ + "anydesk " "Remote Desktop access" 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 \ + "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 \ + "ytdl " "YouTube video downloader" off \ + "musescore " "Sheet music editor" 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 info firefox || pkg install -y firefox-esr + ;; + "chrome-linux") + + pkg info -e wget || pkg ins -y wget + pkg info -e git || pkg ins -y git + + + 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 info -e wget || pkg ins -y wget + pkg info -e git || pkg ins -y git + + 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 info -e wget || pkg ins -y wget + pkg info -e git || pkg ins -y git + + 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 info -e wget || pkg ins -y wget + pkg info -e git || pkg ins -y git + + 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 info -e wget || pkg ins -y wget + pkg info -e git || pkg ins -y git + + 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 + + ;; + "dma") + dma + ;; + "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/ + ;; + *) + pkg info -e "$choice" || pkg ins -y "$choice" + ;; + esac + done + + rm -f "$TMPFILE" + + usual_tools_installation +} + + + +# usual tools bundle +usual_tools_installation() { + pkg_list="wget w3m lynx rsync emacs nano sshpass fuse fusefs-ntfs fusefs-exfat + automount megatools dvd+rw-tools cdrtools webcamd cups cups-filters system-config-printer + pwcview wifimgr networkmgr zip unzip bzip2 bzip3 btop htop nmap bind-tools git + rdesktop xrdp tree gh hw-probe inxi python3 bhyve-firmware openssl gtkglext zpaqfranz qemu-tools" + + 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 + sysrc webcamd_enable="YES" + service devd restart + pw groupmod webcamd -m "$user" + sysrc -f /boot/loader.conf cuse_load=YES + sysrc cupsd_enable="YES" + sysrc xrdp_enable="NO" + sysrc xrdp_sesman_enable="NO" + + if [ ! -x /usr/local/bin/ipfwGUI ]; then + cd /tmp + git clone https://github.com/bsdlme/ipfwGUI.git + cd ipfwGUI + make install clean + fi + + hypervisor_selection +} + + + +# Install a hypervisor +hypervisor_selection() { + TMPFILE=$(mktemp) + + bsddialog --backtitle "Select programs" \ + --title "Install a hypervisor" \ + --checklist "Select programs:" 9 70 20 \ + "virtualbox-ose " "VirtualBox" off \ + "BVCP " "GUI Bhyve manager" off 2>$TMPFILE + + # Read the user choices from the temporary file. + choices=$(sed 's/"//g' < $TMPFILE | tr ' ' '\n') + + + # Install the selected programs. + for choice in $choices; do + + if [ "$choice" = "virtualbox-ose" ]; then + pkg info -e virtualbox-ose || pkg ins -y virtualbox-ose + pkg info -e virtualbox-ose-additions || pkg ins -y virtualbox-ose-additions + + 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 + + fi + if [ "$choice" = "BVCP" ]; then + 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 + fi + done + + rm -f "$TMPFILE" + + password_less +} + + +# Add $user to wheel and operator group, add wheel group to sudo permissions +password_less() { + if bsddialog --yesno "Do you want to enable password-less root login with 'sudo su -'?" 5 68; then + pw groupmod wheel -m "$user" + pw groupmod operator -m "$user" + sed -i '' "s/# %wheel/ %wheel/" /usr/local/etc/sudoers + fi + + locale_selection_menu +} + + + +# 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 ! 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 + + # 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 +} + +build_locatedb() { + clear + # 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 + + reboot_now +} + +# 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 +} + +################################################################################################################ + + +############################ +# functions are chained now +# Start the script by checking internet connection : +checkinternet +