#!/bin/sh
if test -z "`lspci|grep VGA|grep -i nvidia`"; then
 echo Error: No nVidia VGA adapter found.
 exit 3
fi
if test $(id -u) != 0; then
 echo Error: You must be root to run this script!
 exit 4
fi
if test -n "$DISPLAY"; then
 echo Error: Can\`t be run within X! Use a text console \(ALT-CTRL-F1\)
 exit 5
fi
VER=1.0-4496 
URL=http://download.nvidia.com/XFree86/Linux-x86/
cd /usr/src
wget -Nc $URL$VER/NVIDIA_kernel-$VER.src.rpm
rpm2cpio NVIDIA_kernel-$VER.src.rpm|cpio -i NVIDIA_kernel-$VER.tar.gz
wget -Nc $URL$VER/NVIDIA_GLX-$VER.src.rpm
rpm2cpio NVIDIA_GLX-$VER.src.rpm|cpio -i NVIDIA_GLX-$VER.tar.gz
rm -rf NVIDIA_kernel-$VER
tar zxf NVIDIA_kernel-$VER.tar.gz &>/dev/null || (
 rm -f NVIDIA_kernel-$VER.src.rpm
 rm -f NVIDIA_kernel-$VER.tar.gz
 echo NVIDIA_kernel-$VER.tar.gz could not be extracted
 echo and has been deleted. Please restart this script.
 exit 1
) || exit $?
rm -rf NVIDIA_GLX-$VER
tar zxf NVIDIA_GLX-$VER.tar.gz &>/dev/null || (
 rm -f NVIDIA_GLX-$VER.src.rpm
 rm -f NVIDIA_GLX-$VER.tar.gz
 echo NVIDIA_GLX-$VER.tar.gz could not be extracted
 echo and has been deleted. Please restart this script.
 exit 2
) || exit $?
if test "$(kernelversion)" == "2.6"; then
 wget -Nc http://www.minion.de/files/NVIDIA_kernel-$VER-2.6.diff
fi
if test -f /etc/modutils/1alsa; then
 mv /lib/modules/extra/alsa /lib/modules/`uname -r`/
 rm -f /etc/modutils/1alsa
 update-modules
fi
DM=`cat /etc/X11/default-display-manager 2>/dev/null`
DM=`basename $DM 2>/dev/null`
if test -z "$DM"; then
 test -e /etc/init.d/kdm && /etc/init.d/kdm stop
else
 test -e /etc/init.d/$DM && /etc/init.d/$DM stop
fi
rm -f /lib/modules/`uname -r`/kernel/drivers/video/nvidia.*o
cd NVIDIA_kernel-$VER
if test "$(kernelversion)" == "2.6"; then
 patch -p1 <../NVIDIA_kernel-$VER-2.6.diff
 ln -s Makefile.kbuild Makefile
fi
CC=gcc-$(perl -pe '($_)=/gcc.[Vv]ersion\s(3\.\d|2\.\d+)/;' /proc/version)
if test -e /usr/bin/$CC; then
 make install CC=/usr/bin/$CC IGNORE_CC_MISMATCH=1
else
 make install IGNORE_CC_MISMATCH=1
fi
cd ..
rm -rf NVIDIA_kernel-$VER
rm -f /etc/modutils/nvidia
perl -pi -e 's|.*char-major-195.*[\n]?||' /etc/modutils/aliases
perl -pi -e 's|[\n]?$|\n|' /etc/modutils/aliases
echo alias char-major-195 nvidia >> /etc/modutils/aliases
update-modules
cd NVIDIA_GLX-$VER
make install
cd ..
rm -rf NVIDIA_GLX-$VER
if ! test -e /etc/X11/XF86Config-4.1st; then
 cp /etc/X11/XF86Config-4 /etc/X11/XF86Config-4.1st
fi
perl -p -e 's/^[\s]*Load\s*"GLcore"/#\tLoad  "GLcore"/;
            s/^[\s]*Load\s*"dri"/#\tLoad  "dri"/;
            s/^[\s]*#*[\s]*Load\s*"glx"/\tLoad  "glx"/;
            s/^[\s]*Driver\s*"nv"/\tDriver      "nvidia"/g;
            s/^[\s]*Driver\s*"fbdev"/\tDriver      "nvidia"/g;
            s/^[\s]*Driver\s*"vesa"/\tDriver      "nvidia"/g;
	    s/DefaultColorDepth.*/DefaultColorDepth 24/;
	    s/^[\s]*Option\s*"sw_cursor"/\t#Option     "sw_cursor"/' \
            < /etc/X11/XF86Config-4.1st > /etc/X11/XF86Config-4
rm -rf /usr/lib/tls
ldconfig
sync
if test -z "$DM"; then
 test -e /etc/init.d/kdm && /etc/init.d/kdm start
else
 test -e /etc/init.d/$DM && /etc/init.d/$DM start
fi 
