#!/bin/bash

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

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

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

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

    # Fix resolution locked at 960x540
    sed -i 's/HorizSync/#HorizSync/' /etc/X11/mhwd.d/nvidia.conf
    sed -i 's/VertRefresh/#VertRefresh/' /etc/X11/mhwd.d/nvidia.conf

    # Fix Xorg segfault
    sed -i "s|GRUB_CMDLINE_LINUX_DEFAULT='|GRUB_CMDLINE_LINUX_DEFAULT='nvidia_drm.modeset=1 initcall_blacklist=simpledrm_platform_driver_init |" /etc/default/grub
    update-grub
}

post_upgrade() {
    if [ -f "${MHWDGPU_MODLDNVIDIA}" ]; then
        sed -i '/nvidia-drm/d' "${MHWDGPU_MODLDNVIDIA}"
    fi
}

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

    if [ -f "${MHWDGPU_BLCKLSTNVIDIA}" ]; then
        sed -i '/^blacklist nouveau/d' "${MHWDGPU_BLCKLSTNVIDIA}"
        sed -i '/^blacklist ttm/d' "${MHWDGPU_BLCKLSTNVIDIA}"
        sed -i '/^blacklist drm_kms_helper/d' "${MHWDGPU_BLCKLSTNVIDIA}"
        sed -i '/^blacklist drm/d' "${MHWDGPU_BLCKLSTNVIDIA}"
    fi

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

    sed -i 's/#HorizSync/HorizSync/' /etc/X11/mhwd.d/nvidia.conf
    sed -i 's/#VertRefresh/#VertRefresh/' /etc/X11/mhwd.d/nvidia.conf

    sed -i "s|nvidia_drm.modeset=1 ||" /etc/default/grub
    sed -i "s|initcall_blacklist=simpledrm_platform_driver_init ||" /etc/default/grub
    update-grub
}
