#!/usr/bin/env bash
# Copyright (C) 2025-Ω Miquel Sabaté Solà <mikisabate@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

set -ex

##
# Ensure you are root and dependencies are met.

if [ "$EUID" -ne 0 ];then
   echo "kbuild (error): run this as root."
   exit 1
fi

if [ ! -f /usr/bin/dracut ]; then
   echo "kbuild (error): you need either 'dracut'."
   exit 1
fi

##
# Copy files into filesystem and generate initramfs.

# Regular installs.
cp -rv usr /
cp -rv boot /

# Some environments like 'update-initramfs' on Ubuntu expect files to be placed
# under a special directory in /usr/lib/firmware. Pull this trick now.
mkdir -p /usr/lib/firmware/$name/device-tree/
cp -rv boot/dtbs/$name/* /usr/lib/firmware/$name/device-tree/

# And run dracut/update-initramfs.
dracut --kver=$name -f

##
# Provide hints on how to configure the bootloader.

if [ -z "$EDITOR" ]; then
   EDITOR=vi
fi

cat <<EXT >/etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 \$0

###
### NOTE: generated by kbuild.
###

menuentry 'openSUSE on Linux $name' --class opensuse --class gnu-linux --class gnu --class os \$menuentry_id_option 'gnulinux-simple-22391c4c-ad76-c05c-84b3-535dc2efaf97' {
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_gpt
	insmod btrfs
	search --no-floppy --fs-uuid --set=root 22391c4c-ad76-c05c-84b3-535dc2efaf97
	echo	'Loading Linux $name ...'
	linux	/boot/vmlinuz-$name root=UUID=22391c4c-ad76-c05c-84b3-535dc2efaf97 \${extra_cmdline} security=selinux selinux=1 loglevel=3 splash=silent systemd.show_status=1
	echo	'Loading initial ramdisk ...'
	initrd	/boot/initrd-$name
}
EXT

# Edit the configuration file we just produced just in case and update it.
$EDITOR /etc/grub.d/40_custom
grub2-mkconfig -o /boot/grub2/grub.cfg
