set -ex -uo pipefail

_pick() {
  local p="$1" f d; shift
  for f; do
    d="$out/$p/${f#$out/}"
    mkdir -p "$(dirname "$d")"
    mv $out/"$f" "$d"
    rm -rf $out/"$f"
  done
}

_package() {
  local p="$1"
  mkdir -p $out/$p/usr/lib/extension-release.d
  cat << EOF > $out/$p/usr/lib/extension-release.d/extension-release.$p
ID=patos
IMAGE_ID=$p
IMAGE_VERSION=$version
VERSION_ID=patos
EOF

  mkfs.erofs --all-root -Efragments,dedupe,ztailpacking $out/$p.raw $out/$p
  veritysetup format --root-hash-file $out/$p.roothash $out/$p.raw $out/$p.verity
}

# remove arm64 firmware https://bugs.archlinux.org/task/76583
rm $out/usr/lib/firmware/mrvl/prestera/mvsw_prestera_fw_arm64-v4.1.img.zst

_pick amd-ucode usr/lib/firmware/amd-ucode
_package amd-ucode

_pick linux-firmware-nfp usr/lib/firmware/netronome
_package linux-firmware-nfp

_pick linux-firmware-mellanox usr/lib/firmware/mellanox
_package linux-firmware-mellanox

_pick linux-firmware-marvell usr/lib/firmware/{libertas,mwl8k,mwlwifi,mrvl}
_package linux-firmware-marvell

_pick linux-firmware-qcom usr/lib/firmware/qcom
_package linux-firmware-qcom

_pick linux-firmware-liquidio usr/lib/firmware/liquidio
_package linux-firmware-liquidio

# _pick linux-firmware-qlogic usr/lib/firmware/{qlogic,qed,ql2???_*,c{b,t,t2}fw-*}
# _package linux-firmware-qlogic

# _pick linux-firmware-bnx2x usr/lib/firmware/bnx2x*
# _package linux-firmware-bnx2x

# and the rest is base firmware
_pick linux-firmware usr/lib/firmware
_package linux-firmware

# clean up
# rm -rf $out/usr