truthfully I don't built install scripts for end users, it tends to be OS specific and has the power to do a bunch of shady stuff for the user without their control. I refuse to use install scripts generally so I don't normalize it.
I do however use Taskfile.dev heavily for internal and external scripting. It better allows you to be OS agnostic, it prints step-by-step tasks, its easy to read yaml, and you can write descriptions for individual tasks and users can do a command-by-command dry run to see if I'm installing a virus.