disable_cma() {
  if [[ -f /boot/config.txt && $(grep '^cma' /boot/config.txt) != '' ]]; then
    cat <<END

 >>> You appear to have dynamic memory (CMA) enabled, which is currently broken
    in newer kernels and will cause many issues if left enabled. Disabling that
    for you now.

END
    sed -i 's/^cma_/#cma_/g' /boot/config.txt
  fi
}

correct_fstab() {
  # starting with v5.10.y, fstab requires a padded zero in the path to /boot
  if [[ -f /etc/fstab ]]; then
    if grep -q mmcblk1p1 /etc/fstab; then
      sed -i 's/mmcblk1p1/mmcblk0p1/' /etc/fstab
    fi
  fi
}

eol_kernel() {
  if grep -q armv7 /proc/version; then
    if [[ -f /sys/firmware/devicetree/base/model ]]; then
      if grep -a -q 4 /sys/firmware/devicetree/base/model; then
        cat <<END
 >>> WARNING: Kernel 6.18 breaks RPi4 armv7h. Downgrade, back up, switch to aarch64!
END
      fi
    fi
  fi
}

post_install () {
  post_upgrade
}

post_upgrade() {
  correct_fstab
  disable_cma
  eol_kernel

  if grep "^[^#]*[[:space:]]/boot" etc/fstab 2>&1 >/dev/null; then
    if ! grep "[[:space:]]/boot" etc/mtab 2>&1 >/dev/null; then
      cat <<END

 >>> WARNING: /boot appears to be a separate partition but is not mounted.
    You probably just broke your system. Congratulations.

END
    fi
  fi
}

post_remove() {
  rm -f boot/initramfs-linux.img
}
