diff --git a/freebsd-desktop.sh b/freebsd-desktop.sh new file mode 100644 index 0000000..c0d3be2 --- /dev/null +++ b/freebsd-desktop.sh @@ -0,0 +1,1295 @@ +#!/bin/sh + +clear + +checkinternet() { + + printf "\n" + echo "Looking for Internet Connection, please wait..." + sleep 1 + + destination="1.1.1.1" + num_attempts=2 + + # 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 !" + printf "\n" + 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() { + + ######## XORG ######## + pkg info -e xorg || pkg ins -y xorg + + ######## SUDO ######## + pkg info -e sudo || pkg ins -y sudo + + ######## DISPLAY MANAGER ######## + pkg info -e sddm || pkg ins -y sddm + + sysrc sddm_enable=YES > /dev/null 2>&1 + + ######## KDE ######## + pkg info -e kde5 || pkg ins -y kde5 + pkg info -e freebsd-8k-wallpapers-kde || pkg ins -y freebsd-8k-wallpapers-kde + pkg info -e kde-baseapps || pkg ins -y kde-baseapps + pkg info -e kde-dev-scripts || pkg ins -y kde-dev-scripts + pkg info -e kde-dev-utils || pkg ins -y kde-dev-utils + pkg info -e kde-thumbnailer-chm || pkg ins -y kde-thumbnailer-chm + pkg info -e kde-thumbnailer-epub || pkg ins -y kde-thumbnailer-epub + pkg info -e kde-thumbnailer-fb2 || pkg ins -y kde-thumbnailer-fb2 + pkg info -e kde_poster || pkg ins -y kde_poster + pkg info -e kdeaccessibility || pkg ins -y kdeaccessibility + pkg info -e kdeadmin || pkg ins -y kdeadmin + pkg info -e kdebugsettings || pkg ins -y kdebugsettings + pkg info -e kdeconnect-kde || pkg ins -y kdeconnect-kde + pkg info -e kdegames || pkg ins -y kdegames + pkg info -e kdegraphics || pkg ins -y kdegraphics + pkg info -e kdegraphics-thumbnailers || pkg ins -y kdegraphics-thumbnailers + pkg info -e kdemultimedia || pkg ins -y kdemultimedia + pkg info -e kdevelop || pkg ins -y kdevelop + pkg info -e calligra || pkg ins -y calligra + pkg info -e kmymoney || pkg ins -y kmymoney + pkg info -e kdemultimedia-ffmpegthumbs || pkg ins -y kdemultimedia-ffmpegthumbs + pkg info -e kdenetwork || pkg ins -y kdenetwork + pkg info -e kdenetwork-filesharing || pkg ins -y kdenetwork-filesharing + pkg info -e kdenlive || pkg ins -y kdenlive + pkg info -e kdeutils || pkg ins -y kdeutils + pkg info -e libkdegames || pkg ins -y libkdegames + pkg info -e libkdepim || pkg ins -y libkdepim + pkg info -e libproxy-kde || pkg ins -y libproxy-kde + pkg info -e plasma5-kde-cli-tools || pkg ins -y plasma5-kde-cli-tools + pkg info -e plasma5-kde-gtk-config || pkg ins -y plasma5-kde-gtk-config + pkg info -e plasma5-kdecoration || pkg ins -y plasma5-kdecoration + pkg info -e plasma5-kdeplasma-addons || pkg ins -y plasma5-kdeplasma-addons + pkg info -e wallpapers-freebsd-kde || pkg ins -y wallpapers-freebsd-kde + pkg info -e dsbsu || pkg ins -y dsbsu + + sysctl net.local.stream.recvspace=65536 > /dev/null 2>&1 + sysctl net.local.stream.sendspace=65536 > /dev/null 2>&1 + + pw groupmod video -m "$user" + + ######## DBUS ######## + sysrc dbus_enable=YES + + ######## FSTAB ######## + if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then + echo "proc /proc procfs rw 0 0" >> /etc/fstab + fi + + ######## ~/.xinitrc ######## + echo "exec ck-launch-session startplasma-x11" > /home/"$user"/.xinitrc + + +} + +xfce-lightdm() { + + ######## XORG ######## + pkg info -e xorg || pkg ins -y xorg + + ######## SUDO ######## + pkg info -e sudo || pkg ins -y sudo + + ######## DISPLAY MANAGER ######## + pkg info -e lightdm || pkg ins -y lightdm + pkg info -e lightdm-gtk-greeter || pkg ins -y lightdm-gtk-greeter + + sysrc lightdm_enable=YES > /dev/null 2>&1 + + ######## XFCE ######## + pkg info -e xfce || pkg ins -y xfce + pkg info -e gtk-xfce-engine || pkg ins -y gtk-xfce-engine + pkg info -e workrave-xfce || pkg ins -y workrave-xfce + pkg info -e xfce4-appmenu-plugin || pkg ins -y xfce4-appmenu-plugin + pkg info -e xfce4-battery-plugin || pkg ins -y xfce4-battery-plugin + pkg info -e xfce4-bsdcpufreq-plugin || pkg ins -y xfce4-bsdcpufreq-plugin + pkg info -e xfce4-calculator-plugin || pkg ins -y xfce4-calculator-plugin + pkg info -e xfce4-clipman-plugin || pkg ins -y xfce4-clipman-plugin + pkg info -e xfce4-cpugraph-plugin || pkg ins -y xfce4-cpugraph-plugin + pkg info -e xfce4-dashboard || pkg ins -y xfce4-dashboard + pkg info -e xfce4-datetime-plugin || pkg ins -y xfce4-datetime-plugin + pkg info -e xfce4-dev-tools || pkg ins -y xfce4-dev-tools + pkg info -e xfce4-dict-plugin || pkg ins -y xfce4-dict-plugin + pkg info -e xfce4-diskperf-plugin || pkg ins -y xfce4-diskperf-plugin + pkg info -e xfce4-docklike-plugin || pkg ins -y xfce4-docklike-plugin + pkg info -e xfce4-fsguard-plugin || pkg ins -y xfce4-fsguard-plugin + pkg info -e xfce4-generic-slider || pkg ins -y xfce4-generic-slider + pkg info -e xfce4-genmon-plugin || pkg ins -y xfce4-genmon-plugin + pkg info -e xfce4-goodies || pkg ins -y xfce4-goodies + pkg info -e xfce4-mixer || pkg ins -y xfce4-mixer + pkg info -e xfce4-mixer-full || pkg ins -y xfce4-mixer-full + pkg info -e xfce4-mpc-plugin || pkg ins -y xfce4-mpc-plugin + pkg info -e xfce4-panel-profiles || pkg ins -y xfce4-panel-profiles + pkg info -e xfce4-places-plugin || pkg ins -y xfce4-places-plugin + pkg info -e xfce4-pulseaudio-plugin || pkg ins -y xfce4-pulseaudio-plugin + pkg info -e xfce4-volumed-pulse || pkg ins -y xfce4-volumed-pulse + pkg info -e xfce4-whiskermenu-plugin || pkg ins -y xfce4-whiskermenu-plugin + pkg info -e xfce4-windowck-plugin || pkg ins -y xfce4-windowck-plugin + + ######## DBUS ######## + sysrc dbus_enable=YES > /dev/null 2>&1 + + ######## FSTAB ######## + if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then + echo "proc /proc procfs rw 0 0" >> /etc/fstab + fi + + ######## ~/.xinitrc ######## + cp /usr/local/etc/xdg/xfce4/xinitrc /home/"$user"/.xinitrc + +} + +mate-lightdm() { + + ######## XORG ######## + pkg info -e xorg || pkg ins -y xorg + + ######## SUDO ######## + pkg info -e sudo || pkg ins -y sudo + + ######## DISPLAY MANAGER ######## + pkg info -e lightdm || pkg ins -y lightdm + pkg info -e lightdm-gtk-greeter || pkg ins -y lightdm-gtk-greeter + + sysrc lightdm_enable=YES > /dev/null 2>&1 + + ######## MATE ######## + pkg info -e libmatekbd || pkg ins -y libmatekbd + pkg info -e libmatemixer || pkg ins -y libmatemixer + pkg info -e libmateweather || pkg ins -y libmateweather + pkg info -e libshumate || pkg ins -y libshumate + pkg info -e mate || pkg ins -y mate + pkg info -e mate-applet-appmenu || pkg ins -y mate-applet-appmenu + pkg info -e mate-applets || pkg ins -y mate-applets + pkg info -e mate-backgrounds || pkg ins -y mate-backgrounds + pkg info -e mate-base || pkg ins -y mate-base + pkg info -e mate-calc || pkg ins -y mate-calc + pkg info -e mate-common || pkg ins -y mate-common + pkg info -e mate-control-center || pkg ins -y mate-control-center + pkg info -e mate-desktop || pkg ins -y mate-desktop + pkg info -e mate-dock-applet || pkg ins -y mate-dock-applet + pkg info -e mate-icon-theme || pkg ins -y mate-icon-theme + pkg info -e mate-icon-theme-faenza || pkg ins -y mate-icon-theme-faenza + pkg info -e mate-indicator-applet || pkg ins -y mate-indicator-applet + pkg info -e mate-media || pkg ins -y mate-media + pkg info -e mate-menus || pkg ins -y mate-menus + pkg info -e mate-notification-daemon || pkg ins -y mate-notification-daemon + pkg info -e mate-pam-helper || pkg ins -y mate-pam-helper + pkg info -e mate-panel || pkg ins -y mate-panel + pkg info -e mate-polkit || pkg ins -y mate-polkit + pkg info -e mate-power-manager || pkg ins -y mate-power-manager + pkg info -e mate-screensaver || pkg ins -y mate-screensaver + pkg info -e mate-session-manager || pkg ins -y mate-session-manager + pkg info -e mate-settings-daemon || pkg ins -y mate-settings-daemon + pkg info -e mate-system-monitor || pkg ins -y mate-system-monitor + pkg info -e mate-terminal || pkg ins -y mate-terminal + pkg info -e mate-themes || pkg ins -y mate-themes + pkg info -e mate-user-guide || pkg ins -y mate-user-guide + pkg info -e mate-utils || pkg ins -y mate-utils + pkg info -e materia-gtk-theme || pkg ins -y materia-gtk-theme + + ######## DBUS ######## + sysrc dbus_enable="YES" > /dev/null 2>&1 + + ######## FSTAB ######## + if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then + echo "proc /proc procfs rw 0 0" >> /etc/fstab + fi + + ######## ~/.xinitrc ######## + echo "exec ck-launch-session mate-session" > /home/"$user"/.xinitrc +} + +cinnamon-lightdm() { + ######## XORG ######## + pkg info -e xorg || pkg ins -y xorg + + ######## SUDO ######## + pkg info -e sudo || pkg ins -y sudo + + ######## DISPLAY MANAGER ######## + pkg info -e lightdm || pkg ins -y lightdm + pkg info -e lightdm-gtk-greeter || pkg ins -y lightdm-gtk-greeter + + sysrc lightdm_enable=YES > /dev/null 2>&1 + + ######## CINNAMON ######## + pkg info -e cinnamon || pkg ins -y cinnamon + pkg info -e cinnamon-control-center || pkg ins -y cinnamon-control-center + pkg info -e cinnamon-desktop || pkg ins -y cinnamon-desktop + pkg info -e cinnamon-menus || pkg ins -y cinnamon-menus + pkg info -e cinnamon-screensaver || pkg ins -y cinnamon-screensaver + pkg info -e cinnamon-session || pkg ins -y cinnamon-session + pkg info -e cinnamon-settings-daemon || pkg ins -y cinnamon-settings-daemon + pkg info -e cinnamon-translations || pkg ins -y cinnamon-translations + + ######## DBUS ######## + sysrc dbus_enable=YES > /dev/null 2>&1 + + ######## FSTAB ######## + if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then + echo "proc /proc procfs rw 0 0" >> /etc/fstab + fi + + ######## ~/.xinitrc ######## + echo "exec ck-launch-session cinnamon-session" > /home/"$user"/.xinitrc +} + +gnome-gdm() { + ######## XORG ######## + pkg info -e xorg || pkg ins -y xorg + + ######## SUDO ######## + pkg info -e sudo || pkg ins -y sudo + + ######## DISPLAY MANAGER ######## + pkg info -e gdm || pkg ins -y gdm + + sysrc gdm_enable=YES > /dev/null 2>&1 + + ######## GDM ######## + pkg info -e chrome-gnome-shell || pkg ins -y chrome-gnome-shell + pkg info -e gnome || pkg ins -y gnome + pkg info -e gnome-2048 || pkg ins -y gnome-2048 + pkg info -e gnome-autoar || pkg ins -y gnome-autoar + pkg info -e gnome-backgrounds || pkg ins -y gnome-backgrounds + pkg info -e gnome-builder || pkg ins -y gnome-builder + pkg info -e gnome-calculator || pkg ins -y gnome-calculator + pkg info -e gnome-calendar || pkg ins -y gnome-calendar + pkg info -e gnome-characters || pkg ins -y gnome-characters + pkg info -e gnome-chess || pkg ins -y gnome-chess + pkg info -e gnome-clipboard-daemon || pkg ins -y gnome-clipboard-daemon + pkg info -e gnome-clocks || pkg ins -y gnome-clocks + pkg info -e gnome-color-manager || pkg ins -y gnome-color-manager + pkg info -e gnome-common || pkg ins -y gnome-common + pkg info -e gnome-connections || pkg ins -y gnome-connections + pkg info -e gnome-console || pkg ins -y gnome-console + pkg info -e gnome-contacts || pkg ins -y gnome-contacts + pkg info -e gnome-control-center || pkg ins -y gnome-control-center + pkg info -e gnome-desktop || pkg ins -y gnome-desktop + pkg info -e gnome-devel-docs || pkg ins -y gnome-devel-docs + pkg info -e gnome-dictionary || pkg ins -y gnome-dictionary + pkg info -e gnome-font-viewer || pkg ins -y gnome-font-viewer + pkg info -e gnome-games || pkg ins -y gnome-games + pkg info -e gnome-getting-started-docs || pkg ins -y gnome-getting-started-docs + pkg info -e gnome-icon-theme || pkg ins -y gnome-icon-theme + pkg info -e gnome-icon-theme-extras || pkg ins -y gnome-icon-theme-extras + pkg info -e gnome-icon-theme-symbolic || pkg ins -y gnome-icon-theme-symbolic + pkg info -e gnome-icons || pkg ins -y gnome-icons + pkg info -e gnome-icons-elementary || pkg ins -y gnome-icons-elementary + pkg info -e gnome-icons-faenza || pkg ins -y gnome-icons-faenza + pkg info -e gnome-icons-luv || pkg ins -y gnome-icons-luv + pkg info -e gnome-initial-setup || pkg ins -y gnome-initial-setup + pkg info -e gnome-keyring || pkg ins -y gnome-keyring + pkg info -e gnome-keyring-sharp || pkg ins -y gnome-keyring-sharp + pkg info -e gnome-klotski || pkg ins -y gnome-klotski + pkg info -e gnome-latex || pkg ins -y gnome-latex + pkg info -e gnome-lite || pkg ins -y gnome-lite + pkg info -e gnome-mahjongg || pkg ins -y gnome-mahjongg + pkg info -e gnome-maps || pkg ins -y gnome-maps + pkg info -e gnome-menus || pkg ins -y gnome-menus + pkg info -e gnome-metronome || pkg ins -y gnome-metronome + pkg info -e gnome-mime-data || pkg ins -y gnome-mime-data + pkg info -e gnome-mines || pkg ins -y gnome-mines + pkg info -e gnome-mplayer || pkg ins -y gnome-mplayer + pkg info -e gnome-music || pkg ins -y gnome-music + pkg info -e gnome-nettool || pkg ins -y gnome-nettool + pkg info -e gnome-nibbles || pkg ins -y gnome-nibbles + pkg info -e gnome-online-accounts || pkg ins -y gnome-online-accounts + pkg info -e gnome-online-miners || pkg ins -y gnome-online-miners + pkg info -e gnome-photos || pkg ins -y gnome-photos + pkg info -e gnome-pie || pkg ins -y gnome-pie + pkg info -e gnome-planner || pkg ins -y gnome-planner + pkg info -e gnome-podcasts || pkg ins -y gnome-podcasts + pkg info -e gnome-pomodoro || pkg ins -y gnome-pomodoro + pkg info -e gnome-power-manager || pkg ins -y gnome-power-manager + pkg info -e gnome-pty-helper || pkg ins -y gnome-pty-helper + pkg info -e gnome-robots || pkg ins -y gnome-robots + pkg info -e gnome-screenshot || pkg ins -y gnome-screenshot + pkg info -e gnome-session || pkg ins -y gnome-session + pkg info -e gnome-settings-daemon || pkg ins -y gnome-settings-daemon + pkg info -e gnome-shell || pkg ins -y gnome-shell + pkg info -e gnome-shell-extension-audio-output-switcher || pkg ins -y gnome-shell-extension-audio-output-switcher + pkg info -e gnome-shell-extension-coverflow || pkg ins -y gnome-shell-extension-coverflow + pkg info -e gnome-shell-extension-dashtodock || pkg ins -y gnome-shell-extension-dashtodock + pkg info -e gnome-shell-extension-dashtopanel || pkg ins -y gnome-shell-extension-dashtopanel + pkg info -e gnome-shell-extension-filesmenu || pkg ins -y gnome-shell-extension-filesmenu + pkg info -e gnome-shell-extension-hidetopbar || pkg ins -y gnome-shell-extension-hidetopbar + pkg info -e gnome-shell-extension-lockkeys || pkg ins -y gnome-shell-extension-lockkeys + pkg info -e gnome-shell-extension-mediaplayer || pkg ins -y gnome-shell-extension-mediaplayer + pkg info -e gnome-shell-extension-openweather || pkg ins -y gnome-shell-extension-openweather + pkg info -e gnome-shell-extension-panel-osd || pkg ins -y gnome-shell-extension-panel-osd + pkg info -e gnome-shell-extension-recent-items || pkg ins -y gnome-shell-extension-recent-items + pkg info -e gnome-shell-extension-trash || pkg ins -y gnome-shell-extension-trash + pkg info -e gnome-shell-extension-weather || pkg ins -y gnome-shell-extension-weather + pkg info -e gnome-shell-extension-windowoverlay-icons || pkg ins -y gnome-shell-extension-windowoverlay-icons + pkg info -e gnome-shell-extensions || pkg ins -y gnome-shell-extensions + pkg info -e gnome-shell-extra-extensions || pkg ins -y gnome-shell-extra-extensions + pkg info -e gnome-sound-recorder || pkg ins -y gnome-sound-recorder + pkg info -e gnome-ssh-askpass || pkg ins -y gnome-ssh-askpass + pkg info -e gnome-sudoku || pkg ins -y gnome-sudoku + pkg info -e gnome-system-monitor || pkg ins -y gnome-system-monitor + pkg info -e gnome-terminal || pkg ins -y gnome-terminal + pkg info -e gnome-tetravex || pkg ins -y gnome-tetravex + pkg info -e gnome-text-editor || pkg ins -y gnome-text-editor + pkg info -e gnome-themes || pkg ins -y gnome-themes + pkg info -e gnome-themes-extra || pkg ins -y gnome-themes-extra + pkg info -e gnome-todo || pkg ins -y gnome-todo + pkg info -e gnome-tweaks || pkg ins -y gnome-tweaks + pkg info -e gnome-user-docs || pkg ins -y gnome-user-docs + pkg info -e gnome-user-share || pkg ins -y gnome-user-share + pkg info -e gnome-utils || pkg ins -y gnome-utils + pkg info -e gnome-video-effects || pkg ins -y gnome-video-effects + pkg info -e gnome-weather || pkg ins -y gnome-weather + pkg info -e gnome_subr || pkg ins -y gnome_subr + pkg info -e guile-gnome-platform-full || pkg ins -y guile-gnome-platform-full + pkg info -e guile-gnome-platform-lite || pkg ins -y guile-gnome-platform-lite + pkg info -e libgnome-games-support || pkg ins -y libgnome-games-support + pkg info -e libgnome-keyring || pkg ins -y libgnome-keyring + pkg info -e libgnomecanvas || pkg ins -y libgnomecanvas + pkg info -e libgnomecanvasmm || pkg ins -y libgnomecanvasmm + pkg info -e libgnomekbd || pkg ins -y libgnomekbd + pkg info -e libproxy-gnome3 || pkg ins -y libproxy-gnome3 + pkg info -e pinentry-gnome || pkg ins -y pinentry-gnome + pkg info -e polkit-gnome || pkg ins -y polkit-gnome + pkg info -e qgnomeplatform || pkg ins -y qgnomeplatform + pkg info -e rubygem-gnome || pkg ins -y rubygem-gnome + pkg info -e subversion-gnome-keyring || pkg ins -y subversion-gnome-keyring + pkg info -e xdg-desktop-portal-gnome || pkg ins -y xdg-desktop-portal-gnome + + ######## DBUS ######## + sysrc dbus_enable=YES > /dev/null 2>&1 + + ######## FSTAB ######## + if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then + echo "proc /proc procfs rw 0 0" >> /etc/fstab + fi + + ######## ~/.xinitrc ######## + echo "exec gnome-session" > /home/"$user"/.xinitrc +} + +lxqt-sddm() { + + ######## XORG ######## + pkg info -e xorg || pkg ins -y xorg + + ######## SUDO ######## + pkg info -e sudo || pkg ins -y sudo + + ######## DISPLAY MANAGER ######## + pkg info -e sddm || pkg ins -y sddm + + sysrc sddm_enable=YES > /dev/null 2>&1 + + ######## LXQT ######## + pkg info -e liblxqt || pkg ins -y liblxqt + pkg info -e lxqt || pkg ins -y lxqt + pkg info -e lxqt-about || pkg ins -y lxqt-about + pkg info -e lxqt-admin || pkg ins -y lxqt-admin + pkg info -e lxqt-archiver || pkg ins -y lxqt-archiver + pkg info -e lxqt-build-tools || pkg ins -y lxqt-build-tools + pkg info -e lxqt-config || pkg ins -y lxqt-config + pkg info -e lxqt-globalkeys || pkg ins -y lxqt-globalkeys + pkg info -e lxqt-notificationd || pkg ins -y lxqt-notificationd + pkg info -e lxqt-openssh-askpass || pkg ins -y lxqt-openssh-askpass + pkg info -e lxqt-panel || pkg ins -y lxqt-panel + pkg info -e lxqt-policykit || pkg ins -y lxqt-policykit + pkg info -e lxqt-powermanagement || pkg ins -y lxqt-powermanagement + pkg info -e lxqt-qtplugin || pkg ins -y lxqt-qtplugin + pkg info -e lxqt-runner || pkg ins -y lxqt-runner + pkg info -e lxqt-session || pkg ins -y lxqt-session + pkg info -e lxqt-sudo || pkg ins -y lxqt-sudo + pkg info -e lxqt-themes || pkg ins -y lxqt-themes + + ######## DBUS ######## + sysrc dbus_enable=YES > /dev/null 2>&1 + + ######## FSTAB ######## + if ! grep -q "proc /proc procfs rw 0 0" /etc/fstab; then + echo "proc /proc procfs rw 0 0" >> /etc/fstab + fi + + ######## ~/.xinitrc ######## + 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() { + +cat < /usr/local/etc/X11/xorg.conf.d/00-scfb.conf +Section "Device" + Identifier "Card0" + Driver "scfb" + BusID "$intelirisxe_pci_location" +EndSection +EOF + +} + +vbox() { + +cat < /usr/local/etc/X11/xorg.conf.d/00-vbox.conf +# This configuration file is useless. +# It only permits autodetection. +EOF + + +} + +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 < /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 + +} + +nvidia-gpu() { + clear + pkg ins -y nvidia-driver + sysrc kld_list="nvidia-modeset" > /dev/null 2>&1 + + # 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://') + + +cat < /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 + +} + +amd-cpu_amd-gpu() { + clear + pkg info -e xf86-video-amdgpu || pkg ins -y xf86-video-amdgpu + sysrc kld_list="amdgpu" > /dev/null 2>&1 +} + + +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 + 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 + + +} + +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 \ + "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 \ + "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 info -e wget || pkg ins -y wget + pkg info -e git || pkg ins -y git + + + if [ ! -e /tmp/linux-browser-installer* ]; then + git clone https://github.com/mrclksr/linux-browser-installer.git + fi + + /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 + git clone https://github.com/mrclksr/linux-browser-installer.git + fi + + /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 + git clone https://github.com/mrclksr/linux-browser-installer.git + fi + + /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 + git clone https://github.com/mrclksr/linux-browser-installer.git + fi + + /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 + git clone https://github.com/mrclksr/linux-browser-installer.git + fi + + /tmp/linux-browser-installer/linux-browser-installer install vivaldi + + rm -r /tmp/linux-browser-installer + + ;; + "pidgin") + pkg info -e pidgin || pkg ins -y pidgin + pkg info -e pidgin-bot-sentry || pkg ins -y pidgin-bot-sentry + pkg info -e pidgin-encryption || pkg ins -y pidgin-encryption + pkg info -e pidgin-fetion || pkg ins -y pidgin-fetion + pkg info -e pidgin-hotkeys || pkg ins -y pidgin-hotkeys + pkg info -e pidgin-icyque || pkg ins -y pidgin-icyque + pkg info -e pidgin-latex || pkg ins -y pidgin-latex + pkg info -e pidgin-libnotify || pkg ins -y pidgin-libnotify + pkg info -e pidgin-manualsize || pkg ins -y pidgin-manualsize + pkg info -e pidgin-otr || pkg ins -y pidgin-otr + pkg info -e pidgin-sipe || pkg ins -y pidgin-sipe + pkg info -e pidgin-skypeweb || pkg ins -y pidgin-skypeweb + pkg info -e pidgin-twitter || pkg ins -y pidgin-twitter + pkg info -e pidgin-window_merge || pkg ins -y pidgin-window_merge + ;; + *) + pkg info -e "$choice" || pkg ins -y "$choice" + ;; + esac + + done + + rm -f "$TMPFILE" +} + + + +# usual tools bundle +usual_tools_installation() { + + pkg info -e wget || pkg ins -y wget + pkg info -e w3m || pkg ins -y w3m + pkg info -e lynx || pkg ins -y lynx + pkg info -e rsync || pkg ins -y rsync + pkg info -e emacs || pkg ins -y emacs + pkg info -e nano || pkg ins -y nano + pkg info -e sshpass || pkg ins -y sshpass + pkg info -e fuse || pkg ins -y fuse + pkg info -e fusefs-ntfs || pkg ins -y fusefs-ntfs + pkg info -e fusefs-exfat || pkg ins -y fusefs-exfat + sysrc -f /boot/loader.conf fusefs_load=YES > /dev/null 2>&1 + pkg info -e automount || pkg ins -y automount + pkg info -e megatools || pkg ins -y megatools + pkg info -e dvd+rw-tools || pkg ins -y dvd+rw-tools + pkg info -e cdrtools || pkg ins -y cdrtools + pkg info -e webcamd || pkg ins -y webcamd && sysrc webcamd_enable="YES" && service devd restart && pw groupmod webcamd -m "$user" && sysrc -f /boot/loader.conf cuse_load=YES > /dev/null 2>&1 + pkg info -e cups || pkg ins -y cups + pkg info -e cups-filters || pkg ins -y cups-filters + pkg info -e system-config-printer || pkg ins -y system-config-printer + sysrc cupsd_enable="YES" > /dev/null 2>&1 + pkg info -e pwcview || pkg ins -y pwcview + pkg info -e wifimgr || pkg ins -y wifimgr + pkg info -e networkmgr || pkg ins -y networkmgr + pkg info -e zip || pkg ins -y zip + pkg info -e unzip || pkg ins -y unzip + pkg info -e bzip2 || pkg ins -y bzip2 + pkg info -e bzip3 || pkg ins -y bzip3 + pkg info -e btop || pkg ins -y btop + pkg info -e htop || pkg ins -y htop + pkg info -e nmap || pkg ins -y nmap + pkg info -e bind-tools || pkg ins -y bind-tools + pkg info -e git || pkg ins -y git + pkg info -e rdesktop || pkg ins -y rdesktop + pkg info -e xrdp || (pkg ins -y xrdp && sysrc xrdp_enable="NO" && sysrc xrdp_sesman_enable="NO" 2>&1) + pkg info -e tree || pkg ins -y tree + pkg info -e gh || pkg ins -y gh + pkg info -e hw-probe || pkg ins -y hw-probe + pkg info -e inxi || pkg ins -y inxi + pkg info -e python3 || pkg ins -y python3 + pkg info -e py39-qt5 || pkg ins -y py39-qt5 + pkg info -e bhyve-firmware || pkg ins -y bhyve-firmware + + # Installation of ipfwGUI : + [ ! -x /usr/local/bin/ipfwGUI ] && cd /tmp && git clone https://github.com/bsdlme/ipfwGUI.git && cd ipfwGUI && make install clean + + +} + + + +# 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" +} + + +# 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 + 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 < /usr/local/etc/X11/xorg.conf.d/keyboard.conf +Section "InputClass" +Identifier "KeyboardDefaults" + MatchIsKeyboard "on" + Option "XkbLayout" "$kbd" +EndSection +EOF + + fi + + +} + +build_locatedb() { + + # updatedb : + if [ "$(sysrc -n weekly_locate_enable)" = "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() { + 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/UHD Graphics' and 'NVIDIA' (for 535 version) 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