#!/usr/bin/bash

# Workaround for: https://github.com/flatpak/flatpak/issues/3907
set -euo pipefail

SYSTEM_NVIDIA_VERSION=$(cat /sys/module/nvidia/version)
FLATPAK_NVIDIA_VERSION=$(echo "${SYSTEM_NVIDIA_VERSION}" | tr '.' '-')

case "${1}" in
    check)
        # Exit 0 if sync is needed (versions mismatch), exit 1 if already in sync
        if flatpak info --system org.freedesktop.Platform.GL.nvidia-"${FLATPAK_NVIDIA_VERSION}" >/dev/null 2>&1 && \
           flatpak info --system org.freedesktop.Platform.GL32.nvidia-"${FLATPAK_NVIDIA_VERSION}" >/dev/null 2>&1; then
            echo "NVIDIA Flatpak runtime ${SYSTEM_NVIDIA_VERSION} already installed"
            exit 1
        fi
        echo "NVIDIA Flatpak runtime ${SYSTEM_NVIDIA_VERSION} needs to be installed"
        exit 0
        ;;
    sync)
        echo "Installing NVIDIA Flatpak runtime version ${SYSTEM_NVIDIA_VERSION}"
        flatpak remote-add --system --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
        flatpak install --system --noninteractive -y flathub \
            org.freedesktop.Platform.GL.nvidia-"${FLATPAK_NVIDIA_VERSION}" \
            org.freedesktop.Platform.GL32.nvidia-"${FLATPAK_NVIDIA_VERSION}"
        ;;
    *)
        echo "Usage: $0 {check|sync}"
        exit 1
        ;;
esac
