2021-05-31 13:23:07 +02:00
#!/usr/bin/env sh
2021-04-01 21:18:34 +02:00
[ " $USER " = "root" ] && echo "Please DO NOT run this script as root" && exit 1
2021-05-31 13:23:07 +02:00
checkinst( ) {
which $1 >/dev/null 2>/dev/null && return 0 || return 1
}
2021-04-01 21:18:34 +02:00
usage( ) {
echo "Usage:"
2021-04-01 21:19:25 +02:00
echo " opti-sw.sh (i)ntel | (n)vidia"
2021-04-01 21:18:34 +02:00
}
2021-05-31 13:23:07 +02:00
if ! checkinst "sudo" ; then
if checkinst "doas" ; then
alias sudo = "doas"
else
alias sudo = "su -c"
fi
fi
case " $1 " in
i| intel) OPT = intel; ;
n| nvidia) OPT = nvidia; ;
*) usage; exit 1; ;
esac
SUSPEND_SCRIPT = /lib64/elogind/system-sleep/opti-sw-nvidia.sh
2021-04-01 21:18:34 +02:00
rc_msg( ) {
TERM_WIDTH = $( stty size | cut -d" " -f2)
printf " % ${ TERM_WIDTH } s " | tr " " "_"
printf "\n\n"
2021-05-31 13:23:07 +02:00
echo "If you haven't done so already, please put the following line at the top of your display manager or XOrg init script (for example ~/.xinitrc for startx or /usr/share/sddm/scripts/Xsetup for SDDM):"
2021-04-01 21:18:34 +02:00
echo " sh $HOME /.local/lib/nvidia-switch-rc.sh "
2021-05-31 14:22:34 +02:00
printf " % ${ TERM_WIDTH } s\n " | tr " " "_"
2021-04-01 21:18:34 +02:00
}
2021-05-31 13:23:07 +02:00
# Make suspend work for NVIDIA
install_nvidia_suspend_script( ) {
[ ! -d /lib64/elogind/system-sleep/ ] &&
2021-05-31 14:22:34 +02:00
echo "Unable to install NVIDIA suspend script: /lib64/elogind/system-sleep/ not found. This might be because you aren't using elogind." &&
return 1
sudo sh -c " echo '#!/usr/bin/env sh
# Managed by opti-sw.sh
lsmod | cut -d\" \" -f1 | grep \" ^nvidia\$ \" > /dev/null || exit 0
WHEN = \" \$ 1\"
WHAT = \" \$ 2\"
if [ pre = \" \$ WHEN\" ] ; then
if [ suspend = \" \$ WHAT\" ] ; then
/usr/bin/nvidia-sleep.sh suspend
else
/usr/bin/nvidia-sleep.sh hibernate
fi
elif [ post = \" \$ WHEN\" ] ; then
sleep 1
/usr/bin/nvidia-sleep.sh resume &
fi ' > $SUSPEND_SCRIPT "
2021-04-01 21:18:34 +02:00
2021-05-31 13:23:07 +02:00
sudo chmod +x $SUSPEND_SCRIPT
}
2021-05-31 11:52:58 +02:00
2021-05-31 13:23:07 +02:00
case $OPT in
intel)
sudo modprobe -r nvidia
[ -e /etc/X11/xorg.conf ] &&
sudo mv -f /etc/X11/xorg.conf /etc/X11/xorg.conf.nvidia &&
echo "Backed up existing XOrg config file /etc/X11/xorg.conf to /etc/X11/xorg.conf.nvidia"
echo " " > ~/.local/lib/nvidia-switch-rc.sh
sudo sed -i '/^nvidia$/d' /etc/modules-load.d/video.conf
echo "Switched to Intel GPU"
; ;
nvidia)
rc_msg
sudo nvidia-xconfig --prime > /dev/null 2> /dev/null
sudo modprobe nvidia
echo -e "xrandr --setprovideroutputsource modesetting NVIDIA-0\nxrandr --auto" > ~/.local/lib/nvidia-switch-rc.sh
sudo mkdir -p /etc/modules-load.d
grep '^nvidia$' /etc/modules-load.d/video.conf > /dev/null || sudo su -c 'echo nvidia >> /etc/modules-load.d/video.conf'
2021-04-01 21:18:34 +02:00
2021-05-31 13:23:07 +02:00
# Make suspend work
[ ! -e " $SUSPEND_SCRIPT " ] && install_nvidia_suspend_script && echo " Installed $SUSPEND_SCRIPT to make suspend work on NVIDIA "
2021-05-31 14:22:34 +02:00
2021-05-31 13:23:07 +02:00
echo "Switched to NVIDIA GPU. You will probably need to restart."
; ;
esac
2021-04-01 21:18:34 +02:00
2021-05-31 14:22:34 +02:00
[ ! -e ~/.local/lib/nvidia-switch-rc.sh ] && mkdir -p ~/.local/lib/ && touch ~/.local/lib/nvidia-switch-rc.sh && chmod +x ~/.local/lib/nvidia-switch-rc.sh
exit 0