#!/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-4620
URL=http://www.sh.nu/download/nvidia/linux-2.4/ 
cd /usr/src
wget -Nc "$URL"NVIDIA-Linux-x86-$VER-pkg1.run
rm -rf NVIDIA-Linux-x86-$VER-pkg1
sh NVIDIA-Linux-x86-$VER-pkg1.run --extract-only &>/dev/null || (
 rm -f NVIDIA-Linux-x86-$VER-pkg1.run
 echo NVIDIA-Linux-x86-$VER-pkg1.run could not be extracted
 echo and has been deleted. Please restart this script.
 exit 1
) || 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-Linux-x86-$VER-pkg1
rm -f /usr/bin/nvidia-settings
rm -f /usr/local/bin/nvidia-settings
cp usr/bin/nvidia-settings /usr/local/bin
if test "$(kernelversion)" == "2.6"; then
 cd usr/src/nv
 patch -p1 < ../../../../NVIDIA_kernel-$VER-2.6.diff
 ln -s Makefile.kbuild Makefile
 cd ../../..
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-Linux-x86-$VER-pkg1
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
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
