core,echoes,tasks

This commit is contained in:
Marc Beninca 2023-11-13 16:59:24 +01:00
parent 1250f70e55
commit 70913bcd02
2 changed files with 108 additions and 21 deletions

118
build.sh
View file

@ -61,14 +61,15 @@ source "${NAME%.*}.mod"
MEMDISK_ROOT='boot' MEMDISK_ROOT='boot'
MEMDISK_DIRECTORY="${MEMDISK_ROOT}/grub" MEMDISK_DIRECTORY="${MEMDISK_ROOT}/grub"
MEMDISK_FILE="${MEMDISK_DIRECTORY}/grub.cfg" MEMDISK_FILE="${MEMDISK_DIRECTORY}/grub.cfg"
MEMDISK_PUB="${MEMDISK_DIRECTORY}/grub.pgp"
MEMDISK_ARCHIVE="${MEMDISK_ROOT}.tar" MEMDISK_ARCHIVE="${MEMDISK_ROOT}.tar"
UEFI_ROOT="${ROOT}/efi" UEFI_ROOT="${ROOT}/efi"
UEFI_DIRECTORY="${UEFI_ROOT}/boot" UEFI_DIRECTORY="${UEFI_ROOT}/boot"
UEFI_CORE="${UEFI_DIRECTORY}/core.efi"
UEFI_FILE="${UEFI_DIRECTORY}/bootx64.efi" UEFI_FILE="${UEFI_DIRECTORY}/bootx64.efi"
UEFI_GRUB="${UEFI_DIRECTORY}/grubx64.efi" UEFI_GRUB="${UEFI_DIRECTORY}/grubx64.efi"
SIGNED_GRUB='/usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed' SIGNED_GRUB='/usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed'
SIGNED_SHIM='/usr/lib/shim/shimx64.efi.signed' SIGNED_SHIM='/usr/lib/shim/shimx64.efi.signed'
BIOS_BOOT='/usr/lib/grub/i386-pc/boot.img'
BIOS_DIRECTORY="${ROOT}/bios" BIOS_DIRECTORY="${ROOT}/bios"
BIOS_FILE="${BIOS_DIRECTORY}/core.img" BIOS_FILE="${BIOS_DIRECTORY}/core.img"
BIOS_SETUP="${BIOS_DIRECTORY}/setup.sh" BIOS_SETUP="${BIOS_DIRECTORY}/setup.sh"
@ -76,69 +77,127 @@ COMPRESSION='xz'
BOOT_ROOT="${ROOT}/boot" BOOT_ROOT="${ROOT}/boot"
GRUB_ROOT="${BOOT_ROOT}/grub" GRUB_ROOT="${BOOT_ROOT}/grub"
GRUB_CFG="${GRUB_ROOT}/grub.cfg" GRUB_CFG="${GRUB_ROOT}/grub.cfg"
GRUB_CFG_SH="${DIRECTORY}/grub.cfg.sh"
GRUBENV="${GRUB_ROOT}/grubenv" GRUBENV="${GRUB_ROOT}/grubenv"
GRUB_ENV="${ROOT}/grub.env" GRUB_ENV="${ROOT}/grub.env"
GRUB_FONTS="${GRUB_ROOT}/fonts"
GRUB_HEAD='# GRUB Environment Block' GRUB_HEAD='# GRUB Environment Block'
GRUB_LOCALES="${GRUB_ROOT}/locale"
GRUB_PUB="${GRUB_ROOT}/grub.pgp" GRUB_PUB="${GRUB_ROOT}/grub.pgp"
GRUB_SHIGNED="${DIRECTORY}/grubx64.efi.signed.sh" GRUB_SHIGNED="${DIRECTORY}/grubx64.efi.signed.sh"
GRUB_THEMES="${GRUB_ROOT}/themes"
# wipe ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ # wipe ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
echo -n "
${MEMDISK_ROOT}
${UEFI_ROOT}
${BIOS_DIRECTORY}
"
rm --force --recursive \ rm --force --recursive \
"${MEMDISK_ROOT}" "${UEFI_ROOT}" "${BIOS_DIRECTORY}" "${MEMDISK_ROOT}" "${UEFI_ROOT}" "${BIOS_DIRECTORY}"
# memdisk ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ # memdisk ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
echo -n "
${MEMDISK_DIRECTORY}
"
mkdir --parents "${MEMDISK_DIRECTORY}" mkdir --parents "${MEMDISK_DIRECTORY}"
echo -n "
${MEMDISK_FILE}
"
echo -n "\ echo -n "\
# header # header
" > "${MEMDISK_FILE}" " > "${MEMDISK_FILE}"
echo -n "
${GRUB_SHIGNED}
${MEMDISK_FILE}
"
cat "${GRUB_SHIGNED}" >> "${MEMDISK_FILE}" cat "${GRUB_SHIGNED}" >> "${MEMDISK_FILE}"
echo -n "
${MEMDISK_FILE}
"
echo -n "\ echo -n "\
# footer # footer
" >> "${MEMDISK_FILE}" " >> "${MEMDISK_FILE}"
gpg --export "${PGP_PUB}" > "${MEMDISK_PUB}" echo -n "
# gpg --detach-sign "${MEMDISK_PUB}" ${MEMDISK_ROOT}
${MEMDISK_ARCHIVE}
"
tar --create --auto-compress \ tar --create --auto-compress \
--file "${MEMDISK_ARCHIVE}" "${MEMDISK_ROOT}" --file "${MEMDISK_ARCHIVE}" "${MEMDISK_ROOT}"
# uefi ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ # uefi ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
echo -n "
${UEFI_DIRECTORY}
"
mkdir --parents "${UEFI_DIRECTORY}" mkdir --parents "${UEFI_DIRECTORY}"
echo -n "
${MEMDISK_ARCHIVE}
${UEFI_FILE}
"
grub-mkimage \ grub-mkimage \
--compress "${COMPRESSION}" \ --compress "${COMPRESSION}" \
--memdisk "${MEMDISK_ARCHIVE}" \ --memdisk "${MEMDISK_ARCHIVE}" \
--format 'x86_64-efi' \ --format 'x86_64-efi' \
--output "${UEFI_FILE}" \ --output "${UEFI_FILE}" \
--pubkey "${MEMDISK_PUB}" \
"${MODULES[@]}" "${MODULES[@]}"
# gpg --detach-sign "${UEFI_FILE}"
if [ -f "${SIGNED_SHIM}" ] ; then if [ -f "${SIGNED_SHIM}" ] ; then
echo -n "
${UEFI_FILE}
${UEFI_GRUB}
"
mv "${UEFI_FILE}" "${UEFI_GRUB}" mv "${UEFI_FILE}" "${UEFI_GRUB}"
echo -n "
${SIGNED_SHIM}
${UEFI_FILE}
"
cp "${SIGNED_SHIM}" "${UEFI_FILE}" cp "${SIGNED_SHIM}" "${UEFI_FILE}"
fi fi
if [ -f "${SIGNED_GRUB}" ] ; then if [ -f "${SIGNED_GRUB}" ] ; then
echo -n "
${UEFI_GRUB}
${UEFI_CORE}
"
mv "${UEFI_GRUB}" "${UEFI_CORE}"
echo -n "
${SIGNED_GRUB}
${UEFI_GRUB}
"
cp "${SIGNED_GRUB}" "${UEFI_GRUB}" cp "${SIGNED_GRUB}" "${UEFI_GRUB}"
fi fi
# bios ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ # bios ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
echo -n "
${BIOS_DIRECTORY}
"
mkdir "${BIOS_DIRECTORY}" mkdir "${BIOS_DIRECTORY}"
cp '/usr/lib/grub/i386-pc/boot.img' "${BIOS_DIRECTORY}" echo -n "
${BIOS_BOOT}
${BIOS_DIRECTORY}
"
cp "${BIOS_BOOT}" "${BIOS_DIRECTORY}"
echo -n "
${MEMDISK_ARCHIVE}
${BIOS_FILE}
"
grub-mkimage \ grub-mkimage \
--compress "${COMPRESSION}" \ --compress "${COMPRESSION}" \
--memdisk "${MEMDISK_ARCHIVE}" \ --memdisk "${MEMDISK_ARCHIVE}" \
--format 'i386-pc' \ --format 'i386-pc' \
--output "${BIOS_FILE}" \ --output "${BIOS_FILE}" \
--pubkey "${MEMDISK_PUB}" \
"${MODULES[@]}" "${MODULES_BIOS[@]}" "${MODULES[@]}" "${MODULES_BIOS[@]}"
echo -n "
${BIOS_SETUP}
"
echo -n '#! /usr/bin/env bash echo -n '#! /usr/bin/env bash
FILE="$(realpath "${BASH_SOURCE[0]}")" FILE="$(realpath "${BASH_SOURCE[0]}")"
DIRECTORY="$(dirname "${FILE}")" DIRECTORY="$(dirname "${FILE}")"
@ -150,12 +209,19 @@ DIRECTORY="$(dirname "${FILE}")"
# grub ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ # grub ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
echo -n "
${GRUB_ROOT}
"
rm --force --recursive "${GRUB_ROOT}" rm --force --recursive "${GRUB_ROOT}"
mkdir --parents "${GRUB_ROOT}" mkdir --parents "${GRUB_ROOT}"
# grub / cfg ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ # grub / cfg ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
cp "${DIRECTORY}/grub.cfg.sh" "${GRUB_CFG}" echo -n "
${GRUB_CFG_SH}
${GRUB_CFG}
"
cp "${GRUB_CFG_SH}" "${GRUB_CFG}"
# grub / env ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ # grub / env ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
@ -170,6 +236,11 @@ ${kv}"
echo -n "${text}" > "${file}" echo -n "${text}" > "${file}"
} }
echo -n "
${GRUBENV}
${GRUB_ENV}
"
write_env "${GRUBENV}" "\ write_env "${GRUBENV}" "\
live_name=${PROJECT} live_name=${PROJECT}
data_uuid=${DATA} data_uuid=${DATA}
@ -181,18 +252,24 @@ grub_sleep=999
# grub / fonts ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ # grub / fonts ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
mkdir --parents "${GRUB_ROOT}/fonts" echo -n "
${GRUB_FONTS}
"
mkdir --parents "${GRUB_FONTS}"
for font in $(find '/usr/share/grub' -type 'f' -name '*.pf2') ; do for font in $(find '/usr/share/grub' -type 'f' -name '*.pf2') ; do
cp "${font}" "${GRUB_ROOT}/fonts" cp "${font}" "${GRUB_FONTS}"
done done
# grub / themes ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ # grub / themes ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
if cd '/usr/share/grub/themes' ; then if cd '/usr/share/grub/themes' ; then
mkdir --parents "${GRUB_ROOT}/themes" echo -n "
${GRUB_THEMES}
"
mkdir --parents "${GRUB_THEMES}"
for theme in * ; do for theme in * ; do
if [ -f "${theme}/theme.txt" ] ; then if [ -f "${theme}/theme.txt" ] ; then
cp --recursive "${theme}" "${GRUB_ROOT}/themes" cp --recursive "${theme}" "${GRUB_THEMES}"
fi fi
done done
fi fi
@ -200,23 +277,34 @@ cd "${DIRECTORY}"
# grub / locales ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ # grub / locales ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
mkdir --parents "${GRUB_ROOT}/locale" echo -n "
${GRUB_LOCALES}
"
mkdir --parents "${GRUB_LOCALES}"
cd '/usr/share/locale' cd '/usr/share/locale'
for locale in * ; do for locale in * ; do
file="${locale}/LC_MESSAGES/grub.mo" file="${locale}/LC_MESSAGES/grub.mo"
if [ -f "${file}" ] ; then if [ -f "${file}" ] ; then
cp "${file}" "${GRUB_ROOT}/locale/${locale}.mo" cp "${file}" "${GRUB_LOCALES}/${locale}.mo"
fi fi
done done
cd "${DIRECTORY}" cd "${DIRECTORY}"
# grub / pubkey ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ # grub / pubkey ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
echo -n "
${PGP_PUB}
${GRUB_PUB}
"
gpg --export "${PGP_PUB}" > "${GRUB_PUB}" gpg --export "${PGP_PUB}" > "${GRUB_PUB}"
# grub / modules ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ # grub / modules ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
for target in 'x86_64-efi' 'i386-pc' ; do for target in 'x86_64-efi' 'i386-pc' ; do
echo -n "
↙ /usr/lib/grub/${target}
${GRUB_ROOT}/${target}
"
mkdir --parents "${GRUB_ROOT}/${target}" mkdir --parents "${GRUB_ROOT}/${target}"
cd "/usr/lib/grub/${target}" cd "/usr/lib/grub/${target}"
for module in *.lst *.mod ; do for module in *.lst *.mod ; do

View file

@ -58,23 +58,22 @@ Build an ESP File System including:
## Tasks ## Tasks
* build * build.sh
* echo section lists & modules
* args/pgp * args/pgp
* args/esp & lsgm/cp * args/esp & lsgm/cp
* keyboard layouts
* mimic grubx64.efi.signed * mimic grubx64.efi.signed
* efi * efi
* bios * bios
* grub.cfg * grub.cfg
* check squashfs * check squashfs option
* option * python
* end grubenv with \n
![Graph](todo.svg) ![Graph](todo.svg)
### Later ### Later
* arm * arm
* keyboard layouts
* custom fonts
* live-media * live-media
* -mount-opts * -mount-opts