#!/bin/sh clear checkinternet() { printf "\n" echo "Looking for Internet Connection, please wait..." sleep 1 # Check ping with cloudflare destination="1.1.1.1" # Number of ping attempts num_attempts=3 # Check internet connection with ping if ! ping -c "$num_attempts" -q "$destination" > /dev/null; then printf "\n" echo "-------------------------------------------" echo "Your computer is not connected to internet, I can't go on" printf "\n" 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 printf "\n" echo "-------------------------------------------" echo "I can't install pkg, please check your internet connection" printf "\n" exit 0 fi fi } installbsddialog() { printf "\n" echo "Looking for 'bsddialog', please wait..." sleep 1 if [ ! -x "/usr/local/bin/bsddialog" ]; then if pkg ins -y bsddialog | grep -q "error"; then printf "\n" echo "-------------------------------------------" echo "I can't install bsddialog, please check your internet connection" printf "\n" exit 0 fi fi } # Welcome ! welcome() { printf "\n" echo "Everything seems OK, let's go !" sleep 1 bsddialog --msgbox "Welcome to this desktop installation script for FreeBSD!" 5 60 } # System Update update() { bsddialog --yesno "Do you want to update your system before starting?" 5 54 close_inac=$? if [ $close_inac -eq 0 ]; then bsddialog --msgbox "Please review the available changes, then press 'q' to continue" 5 67 freebsd-update fetch freebsd-update install fi } # User user_for_desktop() { bsddialog --yesno "Have you already created the user who will use the desktop?" 5 63 close_inac=$? if [ $close_inac -eq 1 ]; then i=0 while [ $i -lt 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 checkuser=$(getent passwd | grep "$user" | wc -l | tr -d ' ' | uniq) if [ $checkuser -eq 1 ]; then bsddialog --yesno " !WARNING!\n This user already exists\nDo you want to use it [Yes] or create another one [No]" 7 58 use_oranother=$? if [ $use_oranother -eq 1 ]; then i=$((i+1)) else i=$((i+5)) fi else pw useradd "$user" -d "/home/$user" -m -c "$fullname" clear echo "--------------------------------------" echo "Please assign a password to $user" printf "\n" passwd $user i=$((i+5)) fi done # Exit script if not able to create a user if [ $i -eq 4 ]; then exit 0 fi else j=0 while [ $j -lt 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 checkuser=$(getent passwd | grep "$user" | wc -l | tr -d ' ' | uniq) if [ $checkuser -eq 0 ]; then bsddialog --msg " !WARNING!\n This user does not exist\n Please try again" 7 58 j=$((j+1)) else j=$((j+5)) fi done # Exit script if not able to choose a user if [ $j -eq 4 ]; then exit 0 fi fi } # DE choice: kde-sddm() { pkg ins -y xorg ; pkg ins -y sudo pkg ins -y sddm ; sysrc sddm_enable="YES" pkg ins -y kde5 ; pkg ins -y freebsd-8k-wallpapers-kde ; pkg ins -y kde-baseapps ; pkg ins -y kde-dev-scripts ; pkg ins -y kde-dev-utils ; pkg ins -y kde-thumbnailer-chm ; pkg ins -y kde-thumbnailer-epub ; pkg ins -y kde-thumbnailer-fb2 ; pkg ins -y kde_poster ; pkg ins -y kdeaccessibility ; pkg ins -y kdeadmin ; pkg ins -y kdebugsettings ; pkg ins -y kdeconnect-kde ; pkg ins -y kdegames ; pkg ins -y kdegraphics ; pkg ins -y kdegraphics-thumbnailers ; pkg ins -y kdemultimedia ; pkg ins -y kdevelop ; pkg ins -y calligra ; pkg ins -y kmymoney ; pkg ins -y kdemultimedia-ffmpegthumbs ; pkg ins -y kdenetwork ; pkg ins -y kdenetwork-filesharing ; pkg ins -y kdenlive ; pkg ins -y kdeutils ; pkg ins -y libkdegames ; pkg ins -y libkdepim ; pkg ins -y libproxy-kde ; pkg ins -y plasma5-kde-cli-tools ; pkg ins -y plasma5-kde-gtk-config ; pkg ins -y plasma5-kdecoration ; pkg ins -y plasma5-kdeplasma-addons ; pkg ins -y wallpapers-freebsd-kde ; pkg ins -y dsbsu sysctl net.local.stream.recvspace=65536 ; sysctl net.local.stream.sendspace=65536 sysrc dbus_enable="YES" checkfstab=$(grep "proc /proc procfs rw 0 0" < /etc/fstab | wc -l | tr -d ' ' | uniq) if [ $checkstab -eq 0 ]; then echo "proc /proc procfs rw 0 0" >> /etc/fstab fi echo "exec ck-launch-session startplasma-x11" > /home/"$user"/.xinitrc pw groupmod video -m $user } xfce-lightdm() { pkg ins -y xorg ; pkg ins -y sudo pkg ins -y gtk-xfce-engine ; pkg ins -y libxfce4menu ; pkg ins -y libxfce4util ; pkg ins -y workrave-xfce ; pkg ins -y xfce ; pkg ins -y xfce-icons-elementary ; pkg ins -y xfce4-appfinder ; pkg ins -y xfce4-appmenu-plugin ; pkg ins -y xfce4-battery-plugin ; pkg ins -y xfce4-bsdcpufreq-plugin ; pkg ins -y xfce4-calculator-plugin ; pkg ins -y xfce4-clipman-plugin ; pkg ins -y xfce4-conf ; pkg ins -y xfce4-cpugraph-plugin ; pkg ins -y xfce4-dashboard ; pkg ins -y xfce4-datetime-plugin ; pkg ins -y xfce4-desktop ; pkg ins -y xfce4-dev-tools ; pkg ins -y xfce4-dict-plugin ; pkg ins -y xfce4-diskperf-plugin ; pkg ins -y xfce4-docklike-plugin ; pkg ins -y xfce4-fsguard-plugin ; pkg ins -y xfce4-generic-slider ; pkg ins -y xfce4-genmon-plugin ; pkg ins -y xfce4-goodies ; pkg ins -y xfce4-mailwatch-plugin ; pkg ins -y xfce4-mixer ; pkg ins -y xfce4-mixer-full ; pkg ins -y xfce4-mount-plugin ; pkg ins -y xfce4-mpc-plugin ; pkg ins -y xfce4-netload-plugin ; pkg ins -y xfce4-notes-plugin ; pkg ins -y xfce4-notifyd ; pkg ins -y xfce4-panel ; pkg ins -y xfce4-panel-profiles ; pkg ins -y xfce4-places-plugin ; pkg ins -y xfce4-power-manager ; pkg ins -y xfce4-pulseaudio-plugin ; pkg ins -y xfce4-screensaver ; pkg ins -y xfce4-screenshooter-plugin ; pkg ins -y xfce4-session ; pkg ins -y xfce4-settings ; pkg ins -y xfce4-smartbookmark-plugin ; pkg ins -y xfce4-stopwatch-plugin ; pkg ins -y xfce4-systemload-plugin ; pkg ins -y xfce4-taskmanager ; pkg ins -y xfce4-terminal ; pkg ins -y xfce4-time-out-plugin ; pkg ins -y xfce4-timer-plugin ; pkg ins -y xfce4-tumbler ; pkg ins -y xfce4-verve-plugin ; pkg ins -y xfce4-volumed-pulse ; pkg ins -y xfce4-wavelan-plugin ; pkg ins -y xfce4-weather-plugin ; pkg ins -y xfce4-whiskermenu-plugin ; pkg ins -y xfce4-windowck-plugin ; pkg ins -y xfce4-wm ; pkg ins -y xfce4-wm-themes ; pkg ins -y xfce4-xkb-plugin pkg ins -y lightdm ; pkg ins -y lightdm-gtk-greeter ; sysrc lightdm_enable="YES" sysrc dbus_enable="YES" checkfstab=$(grep "proc /proc procfs rw 0 0" < /etc/fstab | wc -l | tr -d ' ' | uniq) if [ $checkstab -eq 0 ]; then echo "proc /proc procfs rw 0 0" >> /etc/fstab fi cp /usr/local/etc/xdg/xfce4/xinitrc /home/"$user"/.xinitrc } mate-lightdm() { pkg ins -y xorg ; pkg ins -y sudo pkg ins -y libmatekbd ; pkg ins -y libmatemixer ; pkg ins -y libmateweather ; pkg ins -y libshumate ; pkg ins -y mate ; pkg ins -y mate-applet-appmenu ; pkg ins -y mate-applets ; pkg ins -y mate-backgrounds ; pkg ins -y mate-base ; pkg ins -y mate-calc ; pkg ins -y mate-common ; pkg ins -y mate-control-center ; pkg ins -y mate-desktop ; pkg ins -y mate-dock-applet ; pkg ins -y mate-icon-theme ; pkg ins -y mate-icon-theme-faenza ; pkg ins -y mate-indicator-applet ; pkg ins -y mate-media ; pkg ins -y mate-menus ; pkg ins -y mate-notification-daemon ; pkg ins -y mate-pam-helper ; pkg ins -y mate-panel ; pkg ins -y mate-polkit ; pkg ins -y mate-power-manager ; pkg ins -y mate-screensaver ; pkg ins -y mate-session-manager ; pkg ins -y mate-settings-daemon ; pkg ins -y mate-system-monitor ; pkg ins -y mate-terminal ; pkg ins -y mate-themes ; pkg ins -y mate-user-guide ; pkg ins -y mate-utils ; pkg ins -y materia-gtk-theme pkg ins -y lightdm ; pkg ins -y lightdm-gtk-greeter ; sysrc lightdm_enable="YES" sysrc dbus_enable="YES" checkfstab=$(grep "proc /proc procfs rw 0 0" < /etc/fstab | wc -l | tr -d ' ' | uniq) if [ $checkstab -eq 0 ]; then echo "proc /proc procfs rw 0 0" >> /etc/fstab fi echo "exec ck-launch-session mate-session" > /home/"$user"/.xinitrc } cinnamon-lightdm() { pkg ins -y xorg ; pkg ins -y sudo pkg ins -y cinnamon ; pkg ins -y cinnamon-control-center ; pkg ins -y cinnamon-desktop ; pkg ins -y cinnamon-menus ; pkg ins -y cinnamon-screensaver ; pkg ins -y cinnamon-session ; pkg ins -y cinnamon-settings-daemon ; pkg ins -y cinnamon-translations pkg ins -y lightdm ; pkg ins -y lightdm-gtk-greeter ; sysrc lightdm_enable="YES" sysrc dbus_enable="YES" checkfstab=$(grep "proc /proc procfs rw 0 0" < /etc/fstab | wc -l | tr -d ' ' | uniq) if [ $checkstab -eq 0 ]; then echo "proc /proc procfs rw 0 0" >> /etc/fstab fi echo "exec ck-launch-session cinnamon-session" > /home/"$user"/.xinitrc } gnome-gdm() { pkg ins -y xorg ; pkg ins -y sudo pkg ins -y chrome-gnome-shell ; pkg ins -y gnome ; pkg ins -y gnome-2048 ; pkg ins -y gnome-autoar ; pkg ins -y gnome-backgrounds ; pkg ins -y gnome-builder ; pkg ins -y gnome-calculator ; pkg ins -y gnome-calendar ; pkg ins -y gnome-characters ; pkg ins -y gnome-chess ; pkg ins -y gnome-clipboard-daemon ; pkg ins -y gnome-clocks ; pkg ins -y gnome-color-manager ; pkg ins -y gnome-common ; pkg ins -y gnome-connections ; pkg ins -y gnome-console ; pkg ins -y gnome-contacts ; pkg ins -y gnome-control-center ; pkg ins -y gnome-desktop ; pkg ins -y gnome-devel-docs ; pkg ins -y gnome-dictionary ; pkg ins -y gnome-font-viewer ; pkg ins -y gnome-games ; pkg ins -y gnome-getting-started-docs ; pkg ins -y gnome-icon-theme ; pkg ins -y gnome-icon-theme-extras ; pkg ins -y gnome-icon-theme-symbolic ; pkg ins -y gnome-icons ; pkg ins -y gnome-icons-elementary ; pkg ins -y gnome-icons-faenza ; pkg ins -y gnome-icons-luv ; pkg ins -y gnome-initial-setup ; pkg ins -y gnome-keyring ; pkg ins -y gnome-keyring-sharp ; pkg ins -y gnome-klotski ; pkg ins -y gnome-latex ; pkg ins -y gnome-lite ; pkg ins -y gnome-mahjongg ; pkg ins -y gnome-maps ; pkg ins -y gnome-menus ; pkg ins -y gnome-metronome ; pkg ins -y gnome-mime-data ; pkg ins -y gnome-mines ; pkg ins -y gnome-mplayer ; pkg ins -y gnome-music ; pkg ins -y gnome-nettool ; pkg ins -y gnome-nibbles ; pkg ins -y gnome-online-accounts ; pkg ins -y gnome-online-miners ; pkg ins -y gnome-photos ; pkg ins -y gnome-pie ; pkg ins -y gnome-planner ; pkg ins -y gnome-podcasts ; pkg ins -y gnome-pomodoro ; pkg ins -y gnome-power-manager ; pkg ins -y gnome-pty-helper ; pkg ins -y gnome-robots ; pkg ins -y gnome-screenshot ; pkg ins -y gnome-session ; pkg ins -y gnome-settings-daemon ; pkg ins -y gnome-shell ; pkg ins -y gnome-shell-extension-audio-output-switcher ; pkg ins -y gnome-shell-extension-coverflow ; pkg ins -y gnome-shell-extension-dashtodock ; pkg ins -y gnome-shell-extension-dashtopanel ; pkg ins -y gnome-shell-extension-filesmenu ; pkg ins -y gnome-shell-extension-hidetopbar ; pkg ins -y gnome-shell-extension-lockkeys ; pkg ins -y gnome-shell-extension-mediaplayer ; pkg ins -y gnome-shell-extension-openweather ; pkg ins -y gnome-shell-extension-panel-osd ; pkg ins -y gnome-shell-extension-recent-items ; pkg ins -y gnome-shell-extension-trash ; pkg ins -y gnome-shell-extension-weather ; pkg ins -y gnome-shell-extension-windowoverlay-icons ; pkg ins -y gnome-shell-extensions ; pkg ins -y gnome-shell-extra-extensions ; pkg ins -y gnome-sound-recorder ; pkg ins -y gnome-ssh-askpass ; pkg ins -y gnome-sudoku ; pkg ins -y gnome-system-monitor ; pkg ins -y gnome-terminal ; pkg ins -y gnome-tetravex ; pkg ins -y gnome-text-editor ; pkg ins -y gnome-themes ; pkg ins -y gnome-themes-extra ; pkg ins -y gnome-todo ; pkg ins -y gnome-tweaks ; pkg ins -y gnome-user-docs ; pkg ins -y gnome-user-share ; pkg ins -y gnome-utils ; pkg ins -y gnome-video-effects ; pkg ins -y gnome-weather ; pkg ins -y gnome_subr ; pkg ins -y guile-gnome-platform-full ; pkg ins -y guile-gnome-platform-lite ; pkg ins -y libgnome-games-support ; pkg ins -y libgnome-keyring ; pkg ins -y libgnomecanvas ; pkg ins -y libgnomecanvasmm ; pkg ins -y libgnomekbd ; pkg ins -y libproxy-gnome3 ; pkg ins -y pinentry-gnome ; pkg ins -y polkit-gnome ; pkg ins -y qgnomeplatform ; pkg ins -y rubygem-gnome ; pkg ins -y subversion-gnome-keyring ; pkg ins -y xdg-desktop-portal-gnome sysrc gdm_enable="YES" sysrc dbus_enable="YES" checkfstab=$(grep "proc /proc procfs rw 0 0" < /etc/fstab | wc -l | tr -d ' ' | uniq) if [ $checkstab -eq 0 ]; then echo "proc /proc procfs rw 0 0" >> /etc/fstab fi echo "exec gnome-session" > /home/"$user"/.xinitrc } lxqt-sddm() { pkg ins -y xorg ; pkg ins -y sudo pkg ins -y liblxqt ; pkg ins -y lxqt ; pkg ins -y lxqt-about ; pkg ins -y lxqt-admin ; pkg ins -y lxqt-archiver ; pkg ins -y lxqt-build-tools ; pkg ins -y lxqt-config ; pkg ins -y lxqt-globalkeys ; pkg ins -y lxqt-notificationd ; pkg ins -y lxqt-openssh-askpass ; pkg ins -y lxqt-panel ; pkg ins -y lxqt-policykit ; pkg ins -y lxqt-powermanagement ; pkg ins -y lxqt-qtplugin ; pkg ins -y lxqt-runner ; pkg ins -y lxqt-session ; pkg ins -y lxqt-sudo ; pkg ins -y lxqt-themes pkg ins -y sddm ; sysrc sddm_enable="YES" sysrc dbus_enable="YES" checkfstab=$(grep "proc /proc procfs rw 0 0" < /etc/fstab | wc -l | tr -d ' ' | uniq) if [ $checkstab -eq 0 ]; then echo "proc /proc procfs rw 0 0" >> /etc/fstab fi echo "exec ck-launch-session startlxqt" > /home/"$user"/.xinitrc } 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 ;; 2) xfce-lightdm ;; 3) mate-lightdm ;; 4) cinnamon-lightdm ;; 5) gnome-gdm ;; 6) lxqt-sddm ;; esac } # Which GPU ? intel-irisxe() { echo 'Section "Device"' > /usr/local/etc/X11/xorg.conf.d/00-scfb.conf echo ' Identifier "Card0"' >> /usr/local/etc/X11/xorg.conf.d/00-scfb.conf echo ' Driver "scfb"' >> /usr/local/etc/X11/xorg.conf.d/00-scfb.conf echo " BusID \"$intelirisxe_pci_location\"" >> /usr/local/etc/X11/xorg.conf.d/00-scfb.conf echo 'EndSection' >> /usr/local/etc/X11/xorg.conf.d/00-scfb.conf } vbox() { echo '# This configuration file is useless.' > /usr/local/etc/X11/xorg.conf.d/00-vbox.conf echo '# If only permits autodetection.' >> /usr/local/etc/X11/xorg.conf.d/00-vbox.conf } intel-older() { clear pkg ins -y xf86-video-intel ; pkg ins -y drm-kmod sysrc kld_list="i915kms" echo 'Section "Device"' > /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo ' Identifier "Intel Graphics"' >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo ' Driver "intel"' >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo ' Option "AccelMethod" "sna"' >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo ' Option "TearFree" "true"' >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo ' Option "DRI" "3"' >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo ' Option "Backlight" "intel_backlight"' >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo " BusID \"$intel_pci_location\"" >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf echo "EndSection" >> /usr/local/etc/X11/xorg.conf.d/00-intel.conf } nvidia-gpu() { clear pkg ins -y nvidia-driver sysrc kld_list="nvidia-modeset" # Automatically detect and BusID for NVIDIA graphics : pciconf_output=$(pciconf -lv | grep -B3 'display' | grep -B2 '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://') echo 'Section "Device"' > /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf echo ' Identifier "Device0"' >> /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf echo ' Driver "nvidia"' >> /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf echo ' VendorName "NVIDIA Corporation' >> /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf echo " BusID \"$nvidia_pci_location\"" >> /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf echo 'EndSection' >> /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf } amd-cpu_amd-gpu() { clear pkg ins -y xf86-video-amdgpu sysrc kld_list="amdgpu" } graphics_selection_menu() { GPU=$(bsddialog --clear \ --backtitle "GPU" \ --title "GPU Menu" \ --menu "Select your graphics:" \ 12 70 10 \ 1 "Intel Iris Xe" \ 2 "Intel (before Iris Xe)" \ 3 "Nvidia" \ 4 "AMD" \ 5 "Virtual Machine" \ 3>&1 1>&2 2>&3) case $GPU in 1) intel-irisxe ;; 2) intel-older ;; 3) nvidia-gpu ;; 4) amd-gpu;; 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" 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 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 nvidiagpu 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 nvidiagpu fi fi # If VirtualBox is detected, ask to accept or not : if [ ! -z "$vbox_pciconf_output" ]; then #bsddialog --yesno "We have detected VirtualBox graphics on your computer\n (BusID \"$vbox_pci_location\")\nDo you want to use it [Yes] or use another one [No] ?" 7 57 #vbox_ornot=$? #if [ $vbox_ornot -eq 0 ]; then vbox #fi fi # If an Intel Iris Xe is detected, ask to accept or not : if [ ! -z "$intelirisxe_pciconf_output" ]; then #bsddialog --yesno "We have detected an Iris Xe graphics on your computer\n (BusID \"$intelirisxe_pci_location\")\nDo you want to use it [Yes] or use another one [No] ?" 7 57 #Irisx_ornot=$? #if [ $Irisx_ornot -eq 0 ]; then intel-irisxe #fi fi # If an Intel is detected, ask to accept or not : if [ ! -z "$intel_pciconf_output" ]; then #bsddialog --yesno "We have detected an Intel graphics on your computer\n (BusID \"$intel_pci_location\")\nDo you want to use it [Yes] or use another one [No] ?" 7 57 #intel_ornot=$? #if [ $intel_ornot -eq 0 ]; then intel-older #fi fi # If an NVIDIA is detected, ask to accept or not : if [ ! -z "$nvidia_pciconf_output" ]; then #bsddialog --yesno "We have detected a NVIDIA graphics on your computer\n (BusID \"$nvidia_pci_location\")\nDo you want to use it [Yes] or use another one [No] ?" 7 57 #nvidia_ornot=$? #if [ $nvidia_ornot -eq 0 ]; then nvidia-gpu #fi fi # If no choice has been done, go to graphics_selection_menu : if [ ! -e /usr/local/etc/X11/xorg.conf.d/00-scfb.conf ] ; then if [ ! -e /usr/local/etc/X11/xorg.conf.d/00-nvidia.conf ]; then if [ ! -e ]/usr/local/etc/X11/xorg.conf.d/00-intel.conf]; then if [ ! -e ]/usr/local/etc/X11/xorg.conf.d/00-vbox.conf]; then graphics_selection_menu fi fi fi 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 } programs_selection_menu() { # Install usual programs TMPFILE=$(mktemp) bsddialog --backtitle "Select programs" \ --title "Installing applications" \ --checklist "Select 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 \ "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 \ "putty " "Putty term" off \ "remmina " "Remote Desktop Viewer" off \ "gtk-mixer " "Sound controller" off \ "keepassxc " "KeePassXC password manager" 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 \ "gimp " "GIMP image editor" off \ "nomacs " "easy image viewer/editor" off \ "ristretto " "Ristretto image viewer" off \ "liferea " "RSS agregator" off \ "youtube-dl " "YouTube video downloader" off \ "libreoffice " "LibreOffice office suite" off \ "abiword " "Text editor" off \ "qpdfview " "PDF document viewer" off \ "filezilla " "FileZilla FTP client" off \ "rclone " "Rclone file transfer tool" off \ "rclone-browser " "GUI rclone" off \ "musescore " "Sheet music editor" off \ "httrack " "web-site sucker" off \ "hexchat " "HexChat IRC client" off \ "pidgin " "Pidgin messaging client" off \ "psi " "PSI messaging client" off \ "wireshark " "Wireshark network protocol analyzer" off \ "nmap " "Nmap network discovery tool" off \ "tor " "Tor decentralized anonymous network" off \ "openvpn " "OpenVPN Virtual Private Network setup" off 2>$TMPFILE choices=$(sed 's/"//g' < $TMPFILE | tr ' ' '\n') # Install the selected programs. for choice in $choices; do case $choice in "chrome-linux") pkg ins -y wget git cd /tmp git clone https://github.com/mrclksr/linux-browser-installer.git cd linux-browser-installer* ./linux-browser-installer install chrome cd .. rm -r linux-browser-installer ;; "pidgin") pkg ins -y pidgin ; pkg ins -y pidgin-bot-sentry ; pkg ins -y pidgin-encryption ; pkg ins -y pidgin-fetion ; pkg ins -y pidgin-hotkeys ; pkg ins -y pidgin-icyque ; pkg ins -y pidgin-latex ; pkg ins -y pidgin-libnotify ; pkg ins -y pidgin-manualsize ; pkg ins -y pidgin-otr ; pkg ins -y pidgin-sipe ; pkg ins -y pidgin-skypeweb ; pkg ins -y pidgin-twitter ; pkg ins -y pidgin-window_merge ;; *) pkg ins -y "$choice" ;; esac done rm -f "$TMPFILE" } # usual tools bundle usual_tools_installation() { if [ ! -x /usr/local/bin/wget ]; then pkg ins -y wget fi if [ ! -x /usr/local/bin/w3m ]; then pkg ins -y w3m fi if [ ! -x /usr/local/bin/lynx ]; then pkg ins -y lynx fi if [ ! -x /usr/local/bin/rsync ]; then pkg ins -y rsync fi if [ ! -x /usr/local/bin/emacs ]; then pkg ins -y emacs fi if [ ! -x /usr/local/bin/nano ]; then pkg ins -y nano fi if [ ! -x /usr/local/bin/sshpass ]; then pkg ins -y sshpass fi if [ ! -x /usr/local/bin/fuse ]; then pkg ins -y fuse fi if [ ! -x /usr/local/bin/ntfs-3g ]; then pkg ins -y fusefs-ntfs fi if [ ! -x /usr/local/sbin/mount.exfat ]; then pkg ins -y fusefs-exfat fi if [ ! -x /usr/local/bin/ntfs-3g ]; then pkg ins -y fusefs-ntfs fi if [ ! -x /usr/local/sbin/automount ]; then pkg ins -y automount fi if [ ! -x /usr/local/bin/megatools ]; then pkg ins -y megatools fi if [ ! -x /usr/local/bin/ntfs-3g ]; then pkg ins -y fusefs-ntfs fi checkfusefsload=$(grep "fusefs_load=\"YES\"" < /boot/loader.conf | wc -l | tr -d ' ' | uniq) if [ ! $checkfusefsload -eq "1" ]; then echo 'fusefs_load="YES"' >> /boot/loader.conf fi if [ ! -x /usr/local/bin/growisofs ]; then pkg ins -y dvd+rw-tools fi if [ ! -x /usr/local/bin/cdrecord ]; then pkg ins -y cdrtools fi if [ ! -x /usr/local/sbin/webcamd ]; then pkg ins -y webcamd sysrc webcamd_enable="YES" service devd restart pw groupmod webcamd -m $user sysrc -f /boot/loader.conf cuse_load=YES fi if [ ! -x /usr/local/bin/pwcview ]; then pkg ins -y pwcview fi if [ ! -x /usr/local/bin/lpr ]; then pkg ins -y cups pkg ins -y cups-filters pkg ins -y system-config-printer sysrc cupsd_enable="YES" fi if [ ! -x /usr/local/bin/wifimgr ]; then pkg ins -y wifimgr fi if [ ! -x /usr/local/bin/networkmgr ]; then pkg ins -y networkmgr fi if [ ! -x /usr/local/bin/zip ]; then pkg ins -y zip fi if [ ! -x /usr/local/bin/unzip ]; then pkg ins -y unzip fi if [ ! -x /usr/local/bin/bzip2 ]; then pkg ins -y bzip2 fi if [ ! -x /usr/local/bin/bzip3 ]; then pkg ins -y bzip3 fi if [ ! -x /usr/local/bin/btop ]; then pkg ins -y btop fi if [ ! -x /usr/local/bin/htop ]; then pkg ins -y htop fi if [ ! -x /usr/local/bin/nmap ]; then pkg ins -y nmap fi if [ ! -x /usr/local/bin/nslookup ]; then pkg ins -y bind-tools fi if [ ! -x /usr/local/bin/git ]; then pkg ins -y git fi if [ ! -x /usr/local/bin/rdesktop ]; then pkg ins -y rdesktop fi if [ ! -x /usr/local/sbin/xrdp ]; then pkg ins -y xrdp sysrc xrdp_enable="NO" xrdp_sesman_enable="NO" fi if [ ! -x /usr/local/bin/tree ]; then pkg ins -y tree fi if [ ! -x /usr/local/bin/gh ]; then pkg ins -y gh fi if [ ! -x /usr/local/bin/hw-probe ]; then pkg ins -y hw-probe fi if [ ! -x /usr/local/bin/inxi ]; then pkg ins -y inxi fi if [ ! -x /usr/local/bin/python3 ]; then pkg ins -y python3 pkg ins -y py39-qt5 fi if [ ! -x /usr/local/bin/inxi ]; then pkg ins -y inxi fi if [ ! -e /usr/local/share/licenses/bhyve-firmware-1.*/catalog.mk ]; then pkg ins -y bhyve-firmware fi # Installation of ipfwGUI : if [ ! -x /usr/local/bin/ipfwGUI ]; then cd /tmp git clone https://github.com/bsdlme/ipfwGUI.git cd ipfwGUI make install clean fi } # 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 ins -y virtualbox-ose ; pkg ins -y virtualbox-ose-additions sysrc vboxguest_enable=YES vboxservice_enable=YES vboxnet_enable=YES echo 'vboxdrv_load="YES"' >> /boot/loader.conf echo "[system=10]" >> /etc/devfs.rules echo "add path 'usb/*' mode 0660 group operator" >> /etc/devfs.rules sysrc devfs_system_ruleset="system" pw groupmod vboxusers -m "$user" pw groupmod operator -m "$user" sysrc hald_enable=YES echo "perm cd* 0660" >> /etc/devfs.conf echo "perm xpt0 0660" >> /etc/devfs.conf echo "perm pass* 0660" >> /etc/devfs.conf chown root:vboxusers /dev/vboxnetctl chmod 0660 /dev/vboxnetctl echo 'own vboxnetctl root:vboxusers' >> /etc/devfs.conf echo 'perm vboxnetctl 0660' >> /etc/devfs.conf 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" } # Add $user to wheel and operator group, add wheel group to sudo permissions make_administrator() { pw groupmod wheel -m "$user" pw groupmod operator -m "$user" sed -i '' "s/# %wheel/ %wheel/" /usr/local/etc/sudoers } # 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 checkprofilelocale=$(grep "export LANG=\"$selected_choice\"" < /home/"$user"/.profile | wc -l | tr -d ' ' | uniq) if [ $checkprofilelocale -eq 0 ]; then printf "\n" >> /home/"$user"/.profile echo "# CUSTOM LOCALE" >> /home/"$user"/.profile echo "export LANG=\"$selected_choice\"" >> /home/"$user"/.profile fi checkprofilelctype=$(grep "export LC_CTYPE=\"$selected_choice\"" < /home/"$user"/.profile | wc -l | tr -d ' ' | uniq) if [ $checkprofilelctype -eq 0 ]; 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 echo 'Section "InputClass"' > /usr/local/etc/X11/xorg.conf.d/keyboard.conf echo 'Identifier "KeyboardDefaults"' >> /usr/local/etc/X11/xorg.conf.d/keyboard.conf echo ' MatchIsKeyboard "on"' >> /usr/local/etc/X11/xorg.conf.d/keyboard.conf echo " Option \"XkbLayout\" \"$kbd\"" >> /usr/local/etc/X11/xorg.conf.d/keyboard.conf echo 'EndSection' >> /usr/local/etc/X11/xorg.conf.d/keyboard.conf fi } build_locatedb() { # updatedb : /etc/periodic/weekly/310.locate sysrc weekly_locate_enable="YES" } # Thanks thanks() { bsddialog --msgbox "Welcome to this desktop installation script for FreeBSD!" 5 60 } # 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 } ################################################################################################################ checkinternet installpkg installbsddialog welcome update user_for_desktop desktop_selection_menu automatic_graphics_detection # at the very moment, only Intel 'Iris Xe', Intel 'HD Graphics' and 'NVIDIA' are automatically detected, choice must be asked manually for others programs_selection_menu usual_tools_installation hypervisor_selection make_administrator locale_selection_menu build_locatedb reboot_now