#!/bin/env sh

exec >/dev/stderr

source /etc/os-release
source /etc/limine.conf

OPTSTRING=":o:b:"
CFGOUT=/dev/stdout

while getopts ${OPTSTRING} opt; do
  case ${opt} in
    o)
      CFGOUT=${OPTARG}
      ;;
    b)
      BUILD_ID=${OPTARG:-$BUILD_ID}
      ;;
    ?)
      echo "err: Invalid option: -${OPTARG}"
      exit 1
      ;;
  esac
done

cat /etc/default/limine > $CFGOUT

function render_advgroup() {
  cat <<EOF >> $CFGOUT
/${PRETTY_NAME} ${BUILD_ID} ($pkgbase $kernelver) (Advanced Boot Options)
    comment: Advanced Boot Options for ${PRETTY_NAME} ${BUILD_ID} ($pkgbase $kernelver)
EOF
}

function render_menu() {
  MENULEVEL=$1
  MENUTYPE=$2
  if [ "$LIMINE_BOOTPROTO" == "linux" ]; then
    MENUTITLE="$pkgbase $kernelver"
    CMDLINE="$LIMINE_KERNEL_CMDLINE_NORMAL"
    if [ "$MENUTYPE" == "normal" ]; then
      MENUTITLE+=", normal mode"
    fi
    if [ "$MENUTYPE" == "recovery" ]; then
      CMDLINE="$LIMINE_KERNEL_CMDLINE_RECOVERY"
      MENUTITLE+=", recovery mode"
    fi
    if [ "$MENULEVEL" == "1" ]; then
      cat <<EOF >> $CFGOUT
/${PRETTY_NAME} ${BUILD_ID} ($MENUTITLE)
EOF
    fi
    if [ "$MENULEVEL" == "2" ]; then
      cat <<EOF >> $CFGOUT
//${PRETTY_NAME} ${BUILD_ID} ($MENUTITLE)
EOF
    fi
    cat <<EOF >> $CFGOUT
    comment: ${PRETTY_NAME} ${BUILD_ID} ($MENUTITLE)
    protocol: linux
    path: boot():/vmlinuz-${pkgbase}
    cmdline: $LIMINE_KERNEL_CMDLINE_COMMON $CMDLINE
    module_path: boot():/initramfs-${pkgbase}.img
EOF
  fi
}

for kernelfile in $(find /usr/lib/modules/*/vmlinuz -maxdepth 0 | sort -r) ; do
  kernel=$(dirname $kernelfile)
  if ! pacman -Qqo "${kernelfile}" > /dev/null 2>&1; then
    # if pkgbase does not belong to any package then skip this kernel
    continue
  fi
  pkgbase=$(pacman -Qqo "${kernelfile}" 2>/dev/null)
  if [ "$LIMINE_AUTO_COPY_KERNEL" == "1" ]; then
    install -Dm644 "${kernelfile}" "/boot/vmlinuz-${pkgbase}"
  fi
  if [ "$LIMINE_AUTO_GEN_INITRD" == "1" ]; then
    tinyramfs -f -k ${kernel##/usr/lib/modules/} /boot/initramfs-${pkgbase}.img
  fi
  kernelver=`basename $kernel`
  render_menu 1
  render_advgroup
  render_menu 2 normal
  render_menu 2 recovery
done
