Created
October 29, 2023 04:58
-
-
Save josephholsten/447358eb6c482a828277770fb45b164b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
die() | |
{ | |
[ $# -eq 0 ] && exit 1 | |
[ $# -gt 1 ] && \ | |
echo "error initiated at line $1 : | |
$2" 1>&2 || \ | |
echo "$1" 1>&2 | |
exit 1 | |
} | |
if [ $# -eq 1 ]; then | |
if [ "$1" = "--help" ]; then | |
man `basename \`realpath $0\`` | |
exit 0 | |
fi | |
fi | |
[ $# -eq 0 ] || { die "I do not accept any argument; except --help"; } | |
b_nvidia=false | |
f_stagezero() | |
{ | |
out=`dialog --stdout --radiolist "Select your graphics chipset :" 16 38 5 \ | |
1 nvidia on \ | |
2 radeon off \ | |
3 amdgpu off \ | |
4 intel off \ | |
5 Other/Ignore off` | |
r=$? | |
if [ $r -eq 0 ]; then | |
kldlist="" | |
case "$out" in | |
1) | |
r=1 | |
while [ $r -ne 0 ]; do | |
pkg install --yes nvidia-driver nvidia-texture-tools nvidia-settings nvidia-xconfig | |
r=$? | |
done | |
b_nvidia=true | |
kldlist="/boot/modules/nvidia.ko /boot/modules/nvidia-modeset.ko" | |
;; | |
2) | |
r=1 | |
while [ $r -ne 0 ]; do | |
pkg install --yes drm-kmod | |
r=$? | |
done | |
if [ -e /boot/modules/radeonkms.ko ]; then | |
kldlist="/boot/modules/radeonkms.ko" | |
else | |
kldlist="/boot/kernel/radeonkms.ko" | |
fi | |
;; | |
3) | |
r=1 | |
while [ $r -ne 0 ]; do | |
pkg install --yes drm-kmod xf86-video-amdgpu | |
r=$? | |
done | |
if [ -e /boot/modules/amdgpu.ko ]; then | |
kldlist="/boot/modules/amdgpu.ko" | |
else | |
kldlist="/boot/kernel/amdgpu.ko" | |
fi | |
;; | |
4) | |
r=1 | |
while [ $r -ne 0 ]; do | |
pkg install --yes drm-kmod xf86-video-intel | |
r=$? | |
done | |
if [ -e /boot/modules/i915kms.ko ]; then | |
kldlist="/boot/modules/i915kms.ko" | |
else | |
kldlist="/boot/kernel/i915kms.ko" | |
fi | |
;; | |
5) | |
return 0 | |
;; | |
esac | |
[ -n "$kldlist" ] && echo "kld_list=\"$kldlist\"" >> /etc/rc.conf | |
fi | |
return 0 | |
} | |
postproc() | |
{ | |
dialog --title "Successfully installed desktop !" --msgbox \ | |
"\n | |
Your desktop has been successfully installed : - )\n\n | |
I am now going to start post-install processing to set up the following :\n\n | |
Wine (32-bit/64-bit Windows emulation layer; user-space)\n | |
Linuxulator (64-bit Linux emulation layer; kernel-space)\n\n | |
System files :\n | |
/etc/fstab\n | |
/etc/devfs.conf\n | |
/etc/devfs.rules\n | |
/etc/rc.conf\n | |
/etc/sysctl.conf\n | |
/boot/loader.conf\n\n | |
Note : existing originals will be saved with .bak extension" 60 80 | |
linux_emu=0 | |
win32_emu=0 | |
win64_emu=0 | |
dialog --title "Query" --yesno \ | |
"\nWould you like me to set up Wine (Windows emulation layer) ?" 7 50 | |
r=$? | |
if [ $r -eq 0 ]; then | |
out=`dialog --stdout --radiolist "Choose a mode :" 10 30 2 \ | |
1 32-bit on \ | |
2 64-bit off` | |
r=$? | |
if [ $r -eq 0 ]; then | |
case $out in | |
1) | |
win32_emu=1 | |
;; | |
2) | |
win64_emu=1 | |
;; | |
esac | |
fi | |
fi | |
dialog --title "Query" --yesno \ | |
"\nWould you like me to set up Linuxulator (Linux emulation layer) ?" 7 50 | |
r=$? | |
if [ $r -eq 0 ]; then | |
linux_emu=1 | |
fi | |
if [ $win32_emu -ne 0 ]; then | |
pkg install --yes i386-wine wine-mono wine-gecko | |
fi | |
if [ $win64_emu -ne 0 ]; then | |
pkg install --yes wine wine-mono wine-gecko | |
fi | |
if [ $linux_emu -ne 0 ]; then | |
for kld in linux linux64; do | |
if ! kldstat -q -n $kld; then | |
kldload $kld | |
[ $? -eq 0 ] || \ | |
die "$LINENO" "Unable to kldload $kld" | |
fi | |
done | |
pkg install --yes linux_base-c7 | |
fi | |
flavour_linux=false | |
if [ $linux_emu -ne 0 ]; then | |
flavour_linux=true | |
fi | |
#block for /etc/fstab | |
{ | |
f=/etc/fstab | |
mangled=`echo $f | sed 's|[^[:alpha:]]|_|g'` | |
eval mandatory${mangled}="\"\ | |
fdescfs /dev/fd fdescfs rw 0 0 | |
procfs /proc procfs rw 0 0\"" | |
if [ "$linux_emu" -ne 0 ]; then | |
eval mandatory${mangled}="\"\ | |
tmpfs /compat/linux/dev/shm tmpfs rw,mode=1777,size=1g 0 0 | |
linprocfs /compat/linux/proc linprocfs rw 0 0 | |
linsysfs /compat/linux/sys linsysfs rw 0 0\"" | |
fi | |
} | |
#block for /etc/rc.conf | |
{ | |
sysrc devfs_system_ruleset=system | |
sysrc dbus_enable=YES | |
sysrc cupsd_enable=YES | |
if [ "$linux_emu" -ne 0 ]; then | |
sysrc linux_enable=YES | |
fi | |
} | |
#block for /etc/sysctl.conf | |
{ | |
f=/etc/sysctl.conf | |
mangled=`echo $f | sed 's|[^[:alpha:]]|_|g'` | |
eval mandatory${mangled}="\"\ | |
vfs.usermount=1\"" | |
if [ "$linux_emu" -ne 0 ]; then | |
eval mandatory${mangled}="\"\ | |
compat.linux.osrelease=3.10.0 | |
kern.ipc.shm_allow_removed=1\"" | |
fi | |
} | |
#block for /boot/loader.conf | |
{ | |
f=/boot/loader.conf | |
mangled=`echo $f | sed 's|[^[:alpha:]]|_|g'` | |
eval mandatory${mangled}="\"\ | |
kern.vty=vt\"" | |
} | |
#block for /etc/devfs.rules | |
{ | |
f=/etc/devfs.rules | |
mangled=`echo $f | sed 's|[^[:alpha:]]|_|g'` | |
eval mandatory${mangled}="\"\ | |
[system=10] | |
add path 'usb/*' mode 0664 group operator | |
add path 'cd*' mode 0664 group operator | |
add path 'da*' mode 0664 group operator | |
add path 'video*' mode 0664 group operator\"" | |
} | |
#block for /etc/devfs.conf | |
{ | |
f=/etc/devfs.conf | |
mangled=`echo $f | sed 's|[^[:alpha:]]|_|g'` | |
# if [ "$flavour_linux" = "false" ]; then | |
if [ "$linux_emu" -eq 0 ]; then | |
eval mandatory${mangled}="\"\ | |
own /dev/pci root:operator | |
perm /dev/pci 0664 | |
own /dev/dri/card0 root:operator | |
perm /dev/dri/card0 0664\"" | |
else | |
eval mandatory${mangled}="\"\ | |
own /dev/pci root:operator | |
perm /dev/pci 0664 | |
own /dev/dri/card0 root:operator | |
perm /dev/dri/card0 0664 | |
link /compat/linux/dev/shm shm\"" | |
fi | |
} | |
for f in /etc/fstab /etc/sysctl.conf /boot/loader.conf /etc/rc.conf \ | |
/etc/devfs.rules /etc/devfs.conf; do | |
[ -f $f ] && cp $f ${f}.bak | |
mangled=`echo $f | sed 's|[^[:alpha:]]|_|g'` | |
eval mandatory='$'mandatory${mangled} | |
echo -e "\n#Section created by mkdesktop for $f :\n" >> $f | |
echo "$mandatory" >> $f | |
done | |
for nodetype in pass cd xpt; do | |
for node in /dev/${nodetype}*; do | |
if echo $node | grep --silent "${nodetype}[[:digit:]][[:digit:]]*$"; then | |
echo "own $node root:operator" >> /etc/devfs.conf | |
echo "perm $node 0664" >> /etc/devfs.conf | |
fi | |
done | |
done | |
echo | |
cat <<-EOF | |
Post-processing done. | |
If you saw no errors anywhere, your box is raring to go : - ) | |
A reboot is now needed - you will need to do that yourself. | |
EOF | |
return 0 | |
} | |
f_stagezero | |
[ $? -eq 0 ] || die "$LINENO" "stage failure setting up graphics subsystem" | |
pkglist="" | |
out=`dialog --stdout --radiolist "Select a desktop environment to install:" 24 30 6 \ | |
1 KDE on \ | |
2 GNOME off \ | |
3 XFCE off \ | |
4 MATE off \ | |
5 LXDE off \ | |
6 Awesome off` | |
# 6 Awesome (Tiling Window Manager) off` | |
r=$? | |
if [ $r -eq 0 ]; then | |
case $out in | |
1) desktop="kde5";; | |
2) desktop="gnome3 gnome-menus";; | |
3) desktop="xfce";; | |
4) desktop="mate";; | |
5) desktop="lxde-meta";; | |
6) desktop="awesome";; | |
esac | |
pkglist="xorg sddm dbus $desktop" | |
r=1 | |
while [ $r -ne 0 ]; do | |
pkg install --yes $pkglist | |
r=$? | |
done | |
dialog --title "The normal user account" --yesno "\n | |
Only a normal user can login with the X display manager. | |
Would you therefore like to add a normal user account ? If you | |
do not already have a normal account in the system, choose Yes. | |
Else you may choose No." 16 36 | |
if [ $? -eq 0 ]; then | |
echo | |
echo "Please add the normal user account below." | |
echo "Make sure the account is additionally part of the video group". | |
echo "Other groups you may like to add the normal user account into | |
are wheel and operator." | |
echo | |
adduser | |
fi | |
echo "sddm_enable=YES" >> /etc/rc.conf | |
[ $b_nvidia = true ] && /usr/local/bin/nvidia-xconfig | |
postproc | |
r=$? | |
fi | |
exit $r |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment