#!ipxe

# Talos
# https://github.com/siderolabs/talos/releases
# https://www.talos.dev/v1.6/talos-guides/install/bare-metal-platforms/pxe

goto ${menu} ||

:talos
set os Talos
set os_arch ${arch}
iseq ${os_arch} x86_64 && set os_arch amd64 ||
iseq ${os_arch} arm64 && set os_arch arm64 ||
isset ${talos_version} || set talos_version latest
isset ${talos_mirror} || set talos_mirror https://github.com/siderolabs/talos/releases
isset ${talos_platform} || set talos_platform metal
menu ${os} by Talos Systems
menu ${os} install
item --gap Talos:
item talos_boot ${space} Begin install ${os} ${talos_version}
item --gap Parameters:
item talos_version ${space} ${os} version: ${talos_version}
item talos_config_url ${space} Set userdata.yaml URL: ${talos_config_url}
item talos_mirror ${space} Set mirror URL: ${talos_mirror}
item talos_platform ${space} Set platform: ${talos_platform}
choose --default ${menu} menu || goto talos_exit
echo ${cls}
goto ${menu} ||
goto talos_exit

:talos_version
menu ${os} version
item latest ${space} latest
item custom ${space} Set custom version
choose --default ${version} version || goto talos_exit
echo ${cls}
goto talos_version_${version} ||
goto talos_exit

:talos_version_latest
set talos_version latest
set talos_base_url ${talos_mirror}/latest/download
goto talos

:talos_version_custom
clear talos_version
echo -n Please set Talos version manually (in format vX.Y.Z):  && read talos_version
set talos_base_url ${talos_mirror}/download/${talos_version}
clear menu
goto talos

:talos_mirror
echo -n Set mirror URL:  && read talos_mirror
clear menu
goto talos

:talos_config_url
echo -n Set userdata.yaml URL:  && read talos_config_url
clear menu
goto talos

# https://www.talos.dev/latest/reference/kernel/#talosplatform
:talos_platform
menu ${os} platforms
item metal ${space} Bare Metal
item aws ${space} AWS
item azure ${space} Azure
item digitalocean ${space} Digital Ocean
item gcp ${space} GCP
item hcloud ${space} Hetzner Cloud
item nocloud ${space} Nocloud
item openstack ${space} Openstack
item oracle ${space} oracle
item scaleway ${space} Scaleway
item upcloud ${space} Upcloud
item vmware ${space} VMware
item vultr ${space} Vultr
choose --default ${talos_platform} talos_platform
goto talos

# https://www.talos.dev/latest/reference/kernel/
:talos_boot
isset ${talos_base_url} || set talos_base_url ${talos_mirror}/latest/download
isset ${talos_config_url} && set talos_config talos.config=${talos_config_url} ||
set boot_params printk.devkmsg=on slab_nomerge pti=on console=ttyS0 console=tty0 init_on_alloc=1 init_on_free=1 consoleblank=0 nvme_core.io_timeout=4294967295 ima_template=ima-ng ima_appraise=fix ima_hash=sha512 talos.platform=${talos_platform} ${talos_config} initrd=initrd.magic ${cmdline}
imgfree
kernel ${talos_base_url}/vmlinuz-${os_arch} ${boot_params}
initrd ${talos_base_url}/initramfs-${os_arch}.xz
echo
echo Booting with the following kernel args:
echo ${boot_params}
echo
echo MD5sums:
md5sum vmlinuz-${os_arch} initramfs-${os_arch}.xz
boot

:talos_exit
clear menu
exit 0
