#!/bin/bash
# Based on http://wiki.debian.org/NvidiaGraphicsDrivers?action=AttachFile&do=view&target=nvidia-versions.sh
# Based on nvidia-detect, originall for debian by:
# Copyright © 2008-2011 Filipus Klutiero <chealer@gmail.com>
# Copyright © 2011-2016 Andreas Beckmann <anbe@debian.org>
#
# Changes made for MX Linux by Dolphin Oracle (dolphinoracle@mgail.com)
# Depends on mx version of nvidia-detect
#
# This package is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This package is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>
#

if [ "$1" = "-h" -o "$1" = "--help" ]; then
	echo "Usage: nvidia-detect-mx [PCIID]..."
	echo "       Reports the Debian packages supporting the NVIDIA GPU that is"
	echo "       installed on the local system (or given as a PCIID parameter)."
	exit 0
fi

shopt -s compat31 nocasematch 2>/dev/null || { echo "Error: this script only works with bash." && exit; } # Avoid cryptic failure when running dash on this script

# last time the PCI IDs were updated
LATEST=$(cat /usr/bin/nvidia-detect|grep LATEST= |cut -d '"' -f2)
echo "Latest = " $LATEST
PACKAGE=

NV_DETECT()
{

NVGA=$1
IDLISTDIR=/usr/share/nvidia
local VERSIONS

if grep -q -i $NVGA $IDLISTDIR/nvidia-legacy-71xx.ids 2>/dev/null
then
	VERSIONS[71]=71.86
fi

if grep -q -i $NVGA $IDLISTDIR/nvidia-legacy-96xx.ids 2>/dev/null
then
	VERSIONS[96]=96.43
fi

if grep -q -i $NVGA $IDLISTDIR/nvidia-legacy-173xx.ids 2>/dev/null
then
	VERSIONS[173]=173.14
fi

if grep -q -i $NVGA $IDLISTDIR/nvidia-legacy-304xx.ids 2>/dev/null
then
	VERSIONS[304]=304.123
fi

if grep -q -i $NVGA $IDLISTDIR/nvidia-legacy-340xx.ids 2>/dev/null
then
	VERSIONS[340]=340.76
fi

if grep -q -i $NVGA $IDLISTDIR/nvidia.ids 2>/dev/null
then
       	# 999 means current
	VERSIONS[999]=$LATEST
fi


if [[ ${#VERSIONS[*]} == 0 ]]; then
       	echo "Uh oh. Your card is not supported by any driver version up to $LATEST."
	echo "A newer driver may add support for your card."
	echo "Newer driver releases may be available in the MX testing repository or jessie-backports."
	return
fi

if [[ -n ${VERSIONS[999]} ]]; then
	echo "Your card is supported by the nvidia-driver $LATEST package"
	PACKAGE="nvidia-driver" #; changes for mx
elif [[ -n ${VERSIONS[340]} ]]; then
	echo "Your card is supported by the nvidia 340 driver"
	PACKAGE="nvidia-legacy-340xx-driver" #; changes for mx
elif [[ -n ${VERSIONS[304]} ]]; then
	echo "Your card is supported by the 304 driver."
	PACKAGE="nvidia-legacy-304xx-driver"
elif [[ -n ${VERSIONS[173]} ]]; then
	echo "Uh oh. Your card is only supported by the 173.14 legacy drivers series, which is not in any current Debian suite."
elif [[ -n ${VERSIONS[96]} ]]; then
	echo "Uh oh. Your card is only supported by the 96.43 legacy drivers series, which is not in any current Debian suite."
elif [[ -n ${VERSIONS[71]} ]]; then
	echo "Uh oh. Your card is only supported by the 71.86 legacy drivers series, which is not in any current Debian suite."
else
	echo "Oops. Internal error 8 ($NVGA)"
fi
	

if [ -n "$PACKAGE" ]; then
	echo "It is recommended to install the following:"
	echo "INSTALL: "    $PACKAGE 
fi

}


if [ -z "$1" ]; then

	if ! (lspci --version) > /dev/null 2>&1; then
		echo "ERROR: The 'lspci' command was not found. Please install the 'pciutils' package." >&2
		exit 1
	fi

	NV_DEVICES=$(lspci -mn | awk '{ gsub("\"",""); if ($2 == "0300" && ($3 == "10de" || $3 == "12d2")) { print $1 } }')

	if [ -z "$NV_DEVICES" ]; then
		echo "No NVIDIA GPU detected."
		exit 0
	fi

	echo "Detected NVIDIA GPUs:"
	for d in $NV_DEVICES ; do
		lspci -nn -s $d
	done

	for d in $NV_DEVICES ; do
		echo -e "\nChecking card: $(lspci -s $d | awk -F: '{print $3}')"
		NV_DETECT "$(lspci -mn -s "$d" | awk '{ gsub("\"",""); print $3 $4 }')"
	done

else

	for id in "$@" ; do
		PCIID=$(echo "$id" | sed -rn 's/^(10de)?:?([0-9a-fA-F]{4})$/10de\2/ip')
		if [ -z "$PCIID" ]; then
			echo "Error parsing PCI ID '$id'."
			exit 1
		fi

		echo "Checking driver support for PCI ID [$(echo $PCIID | sed -r 's/(....)(....)/\1:\2/')]"
		NV_DETECT "$PCIID"
	done

fi
