#!/bin/bash

# AstraLinux SE 1.6, AstraLinux CE 2.12, Ubuntu 18.04, nvidia/nouveau driver uninstaller
# ======================================================================================
# Recommended before binary(closed,proprietary) nvidia driver install
# Author: Alexey Kovin <4l3xk3@gmail.com>
# All rights reserved
# Russia, Electrostal, 2018
set -ue
. gettext.sh
export TEXTDOMAINDIR=/usr/share/locale
export TEXTDOMAIN="astra-nvidia-uninstall"

# Check EUID
# ----------
echo "EUID=$EUID"
if [ x"$EUID" != "x0" ]; then
    gettext "Launch program as administrator (sudo) (root) .."; echo
    exit 1
fi
timestamp="`date +%s`"

# Xorg config
# -----------
gettext "Removing xorg.conf .."; echo
if [ -f /etc/X11/xorg.conf ]; then
    mv -f /etc/X11/xorg.conf /etc/X11/backup-$timestamp-xorg.conf-backup
    eval_gettext '/etc/X11/xorg.conf removed, backup version: /etc/X11/backup-$timestamp-xorg.conf-backup'; echo
fi
dpkg-reconfigure xserver-xorg


# Uninstall deb packages
# ---------------------
gettext "Find and uninstall nvidia packages .."; echo
apt remove --purge --yes nvidia*
apt remove --purge --yes libnvidia*
apt remove --purge --yes xserver-xorg-video-n*
for nvdeb in `dpkg -l | grep -vE "\sastra-nvidia\s" | grep nvidia | sed -e "s/^ii\s*//" -e "s/\s.*//"`; do
    eval_gettext 'Removing package $nvdeb ...'; echo
    apt remove --purge --yes $nvdeb
done

# Restore original mesa libs and sysmlinks
# ----------------------------------------
gettext "Restore original mesa GL libs and symlinks"; echo
list=""
for pack in xserver-xorg-core libgl1 libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libgles2 libgles2-mesa libglew2.0 libglew2.2 libglewmx1.13 libglu1-mesa libglvnd0 libglx-mesa0 libglx0 ; do
    if dpkg -l | grep -qE "^ii\s+$pack\s" ; then list="$list $pack" ; fi
done
echo $list
sudo apt install --reinstall --yes $list


# Kernel modules
# --------------
gettext "Find and uninstall nvidia drivers .."; echo
for nvdriver in `find /lib/modules -type f -name "nvidia*.ko"`; do
    echo "$nvdriver"
    mv -f $nvdriver ${nvdriver}-$timestamp-backup
done

depmod -a
sed -i.$timestamp -e "/^\s*blacklist\s\+nouveau/d" -e "/^\s*options\s\+nouveau\s\+modeset\s*=\s*0/d" /etc/modprobe.d/*.conf
if ! grep -qE "^\s*nouveau\s+modeset\s*=\s*1\s*$" /etc/initramfs-tools/modules ; then cp /etc/initramfs-tools/modules /etc/initramfs-tools/modules.$timestamp ; echo "nouveau modeset=1" >> /etc/initramfs-tools/modules ; fi

update-initramfs -u -k all

if [ -L /usr/lib/i386-linux-gnu ] ; then
    if [ ! -e `readlink /usr/lib/i386-linux-gnu` ] ; then rm /usr/lib/i386-linux-gnu ; fi
fi

gettext "Reboot computer to apply changes"; echo
