freebsd/freebsd-desktop.sh

1022 lines
34 KiB
Bash
Raw Normal View History

#!/bin/sh
clear
checkinternet() {
local url="https://www.freebsd.org/"
if fetch -q -o /dev/null "$url"; then
echo "Looking for Internet Connection, please wait..."
else
echo "Your computer is not connected to the internet, I can't go on."
exit 1
fi
}
knowyourhardwarefirst() {
clear
echo "--------------------------------------"
echo "Before you start, a note if you have an NVIDIA graphics card:"
echo "You need to know which driver version is required for your graphics card to function properly."
echo "You will be asked to choose between versions 390, 470 and 550"
echo
echo "Furthermore, correct UEFI configuration is obviously not supported by this script."
echo "In principle, you must disable the 'GPU Switchable Graphics' feature."
echo
read -p "Do you still want to go on ? [Y/n] : " confirm
case $confirm in
n) exit 0 ;;
esac
}
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
}
# Welcome !
welcome() {
echo "Everything seems OK, let's go !"
bsddialog --msgbox "Welcome to this desktop installation script for FreeBSD!" 5 60
}
# 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
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
}
# DE choice:
kde-sddm() {
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
}
xfce-lightdm() {
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"
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
}
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"
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
}
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
}
gnome-gdm() {
pkg_list="xorg sudo gdm chrome-gnome-shell gnome gnome-2048 gnome-autoar gnome-backgrounds
gnome-builder 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-ssh-askpass 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
}
lxqt-sddm() {
pkg_list="xorg sudo sddm liblxqt lxqt lxqt-about lxqt-admin lxqt-archiver
lxqt-build-tools lxqt-config lxqt-globalkeys lxqt-notificationd lxqt-openssh-askpass
lxqt-panel lxqt-policykit lxqt-powermanagement lxqt-qtplugin lxqt-runner
lxqt-session lxqt-sudo lxqt-themes"
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
}
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 <<EOF > /usr/local/etc/X11/xorg.conf.d/00-scfb.conf
Section "Device"
Identifier "Card0"
Driver "scfb"
BusID "$intelirisxe_pci_location"
EndSection
EOF
}
vbox() {
cat <<EOF > /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 <<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
}
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 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
;;
"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
;;
"nvidia-driver-550")
pkg ins -y nvidia-driver-550
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
;;
esac
}
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
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
}
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 \
"keepass " "KeePass password manager" off \
"codeblocks " "Code Editor" off \
"anydesk " "Remote Desktop access" 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 \
"ytdl " "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
"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
;;
"pidgin")
pkg_list="pidgin pidgin-bot-sentry pidgin-encryption pidgin-fetion pidgin-hotkeys
pidgin-icyque 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 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
}
# 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 <<EOF > /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='/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() {
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
knowyourhardwarefirst
installpkg
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' 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