#!/bin/sh
# NVIDIA GPU varsa mhmt-hw-nvidia hedefe kurulur (docs/02-mimari.md, karar #29, #30).
# Secure Boot açıksa DKMS'in MOK anahtarı rastgele 8 haneli kodla kayda alınır; kod
# canlı oturumda gösterilir ve hedefte /root/mhmt-mok.txt'ye yazılır.
set -e
CHROOT=$(mount | grep proc | grep calamares | awk '{print $3}' | sed -e "s#/proc##g")
LOCAL_DEB=/run/live/medium/mhmt/mhmt-hw-nvidia.deb

# Sınıf 0300 (VGA) veya 0302 (3D) ve üretici 10de.
DEVICE=$(lspci -n -d 10de: | awk '$2 ~ /^030[02]:$/ { split($3, id, ":"); print id[2]; exit }')
[ -n "$DEVICE" ] || exit 0

if ! nvidia-detect 2>/dev/null | grep -q -e "supported by the default drivers" -e "supported by all driver versions"; then
    echo "NVIDIA 10de:$DEVICE 550 sürücüsünce desteklenmiyor; nouveau kalır."
    exit 0
fi

# Turing (0x1E00) ve sonrası açık modül, öncesi kapalı modül (karar #30).
MODULE=nvidia-kernel-dkms
[ "$((0x$DEVICE))" -ge "$((0x1e00))" ] && MODULE=nvidia-open-kernel-dkms

# Medya sources-media ile hedefe bağlıdır; yoksa (ör. ağdan kurulum) depodan alınır.
PACKAGE=mhmt-hw-nvidia
[ -f "$CHROOT$LOCAL_DEB" ] && PACKAGE=$LOCAL_DEB
DEBIAN_FRONTEND=noninteractive chroot "$CHROOT" apt-get -y install "$PACKAGE" "$MODULE"

mokutil --sb-state 2>/dev/null | grep -q "SecureBoot enabled" || exit 0

notify() {
    # Kurucuyu bekletmeden canlı oturumun kullanıcısına gösterilir.
    LIVE_USER=$(ps -o user= -C plasmashell | head -n 1)
    [ -n "$LIVE_USER" ] || return 0
    LIVE_UID=$(id -u "$LIVE_USER")
    setsid runuser -u "$LIVE_USER" -- env XDG_RUNTIME_DIR="/run/user/$LIVE_UID" \
        WAYLAND_DISPLAY=wayland-0 QT_QPA_PLATFORM=wayland \
        kdialog --title "MHMT Linux — NVIDIA" --msgbox "$1" >/dev/null 2>&1 &
}

PUB="$CHROOT/var/lib/dkms/mok.pub"
if [ ! -f "$PUB" ]; then
    notify "NVIDIA sürücüsü kuruldu ama DKMS imza anahtarı bulunamadı. Kurulumdan sonra: sudo mokutil --import /var/lib/dkms/mok.pub"
    exit 0
fi

CODE=$(shuf -i 10000000-99999999 -n 1)
HASH=$(mktemp)
mokutil --generate-hash="$CODE" > "$HASH"
mokutil --import "$PUB" --hash-file "$HASH"
rm -f "$HASH"

MESSAGE="NVIDIA sürücüsü Secure Boot için imzalandı.

Yeniden başlatınca mavi bir \"MOK management\" ekranı çıkacak:
  Enroll MOK → Continue → Yes → parola: $CODE → Reboot

Bu kod bir kez kullanılır. Kurulu sistemde /root/mhmt-mok.txt dosyasında da durur."
printf '%s\n' "$MESSAGE" > "$CHROOT/root/mhmt-mok.txt"
chmod 600 "$CHROOT/root/mhmt-mok.txt"
notify "$MESSAGE"
