#! /bin/sh
# /etc/init.d/nvidia-driver: build and load nvidia kernel module
# update-rc.d nvidia-driver start 90 2 3 4 5 .
# gurkan@linuks.mine.nu, http://www.linuks.mine.nu/nvidia/

case "$1" in
    start)
	echo -n "Starting NVIDIA magic: "
	if [ -f /lib/modules/`uname -r`/kernel/drivers/video/nvidia.o ]; then
	    echo "."
	    exit 0
	fi
	if (lspci | grep VGA | grep nVidia > /dev/null); then
	    echo -n "nvidia found..."
	    modprobe nvidia; lsmod | grep nvidia | grep -v unused || (
		rmmod nvidia
		apt-get install kernel-source-`uname -r` #|| \
		    #cp /pub/debian-local/configs/sarge/KERNEL/linux-2.4.33-pre1-dphys.tar.bz2 .
		cd /usr/src/
		tar xjf kernel-source-`uname -r`.tar.bz2
		rm -rf linux
		ln -sf kernel-source-`uname -r` linux
		
		cd /usr/src/linux
		cp -v Makefile Makefile.bk
		case `uname -r` in
		    2.4*)
			(uname -r | sed "s,-.*,," | awk 'BEGIN{FS="."}{print "VERSION = " $1; print "PATCHLEVEL = " $2; print "SUBLEVEL = " $3; printf "EXTRAVERSION = .%s",$4}';uname -r|awk 'BEGIN{FS="-"}{$1="";print $0}'|sed "s,\ ,-,g"; echo; sed "1,4d" /usr/src/linux/Makefile.bk) > Makefile
		    ;;
		    2.6*)
			(uname -r | sed "s,-.*,," | awk 'BEGIN{FS="."}{print "VERSION = " $1; print "PATCHLEVEL = " $2; print "SUBLEVEL = " $3; printf "EXTRAVERSION = .%s",$4}';uname -r|awk 'BEGIN{FS="-"}{$1="";print $0}'|sed "s,\ ,-,g"; echo; sed "1,4d" /usr/src/linux/Makefile.bk) > Makefile
		    ;;
		esac
		cp /boot/config-`uname -r` .config
		/usr/bin/make oldconfig
		/usr/bin/make
		
		# get the installer
		# for 2.6.16+ patch it
		cd /usr/src
		#NVBIN=NVIDIA-Linux-x86-1.0-8178-pkg1.run
		#NVBIN=NVIDIA-Linux-x86-1.0-8762-pkg1.run
		NVBIN=NVIDIA-Linux-x86-1.0-8774-pkg1.run
		rm ${NVBIN}
		wget http://debian.ethz.ch/pub/debian-local/share/kernel/${NVBIN}
		chmod +x ./${NVBIN}
		./${NVBIN} -aXNsqn --ui=none
		
		modprobe nvidia
	    )
	    echo "."
	else
	    echo "no NVIDIA found."
	fi
        ;;
    restart|force-reload)
	# nothing to do
	:
	;;
    stop)
	# nothing to do
	:
	;;
    *)
        echo "Usage: /etc/init.d/nvidia-driver start"
        exit 1
	;;
esac

exit 0
