# mhwd Driver Config

NAME="video-nvidia"
INFO="Closed source NVIDIA drivers for linux."
VERSION="2025.09.29"
FREEDRIVER="false"
PRIORITY="7"

CLASSIDS="0300 0302"
VENDORIDS="10de"
DEVICEIDS=">/var/lib/mhwd/ids/pci/nvidia.ids"

# Conflicts
CONFLICTS="nvidia-390xx-utils nvidia-390xx-settings libxnvctrl-390xx nvidia-470xx-utils nvidia-470xx-settings libxnvctrl-470xx nvidia-570xx-utils nvidia-570xx-settings nvidia-575xx-utils nvidia-575xx-settings"
CONFLICTS_64="lib32-nvidia-390xx-utils lib32-nvidia-470xx-utils lib32-nvidia-570xx-utils lib32-nvidia-575xx-utils"
CONKMOD="nvidia-390xx nvidia-470xx nvidia-570xx nvidia-575xx"
[[ "$(nvidia-recommended-driver)" == "open" ]] && CONKMOD+=" nvidia"

# Conflicts with other mhwd configs
MHWDCONFLICTS="video*nvidia*"

# Dependencies
DEPENDS="nvidia-utils nvidia-settings"
DEPENDS_64="lib32-nvidia-utils"
DEPKMOD="nvidia"
[[ "$(nvidia-recommended-driver)" == "open" ]] && DEPKMOD="nvidia-open"

XORGFILE="/etc/X11/mhwd.d/nvidia.conf"
MHWDGPU_MODOPTNVIDIA="/etc/modprobe.d/mhwd-gpu.conf"
MHWDGPU_MODLDNVIDIA="/etc/modules-load.d/mhwd-gpu.conf"

fix_screen_flickering()
{
	sed -i /'Section "Device"'/,/'EndSection'/s/'EndSection'/"\tOption \"RegistryDwords\" \"PowerMizerEnable=0x1; PerfLevelSrc=0x2222; PowerMizerDefault=0x2; PowerMizerDefaultAC=0x1\"\nEndSection"/g "${XORGFILE}"
}

post_install()
{
	nvidia-xconfig -o "${XORGFILE}" --composite &>/dev/null
	MHWD_ADD_BACKSPACE "${XORGFILE}"

	# Remove logo
	sed -i /'Section "Device"'/,/'EndSection'/s/'EndSection'/"\tOption \"NoLogo\" \"1\"\nEndSection"/g "${XORGFILE}"

	# Fix screen flickering for some nvidia devices
	MHWD_FUNC_ON_MATCH 0300 10de "0400 0401 0402 0403 0407 0409 0425" fix_screen_flickering

	mhwd-gpu --setmod nvidia --setxorg "${XORGFILE}"

	# Without this 'glxgears' don't work in live-session
	MODULES_LOAD="/etc/modules-load.d"
	echo "nvidia_drm" >> "${MODULES_LOAD}/mhwd-gpu.conf"
	if [ ! "$(pgrep X)" ];	then
		modprobe nvidia_drm
	fi

	# Enable Modeset for Nvidia driver
	echo "options nvidia_drm modeset=1" >> "${MHWDGPU_MODOPTNVIDIA}"
}

post_remove()
{
	if [ -e "${XORGFILE}" ]; then
		rm "${XORGFILE}"
	fi

	if [ -f "${MHWDGPU_MODOPTNVIDIA}" ]; then
		rm "${MHWDGPU_MODOPTNVIDIA}"
	fi

	if [ -f "${MHWDGPU_MODLDNVIDIA}" ]; then
		sed -i '/^nvidia/d' "${MHWDGPU_MODLDNVIDIA}"
	fi

	mhwd-gpu --check
}
