@jmshep Just to round things off, you can call other macros from within macros.
So for example, my slicer start gcode just has one line which calls a "pre-print" macro. This macro starts by heating the bed to 40 deg C and waits. Once the temperature has been reached, it then sets the bed temperature to (say) 50 deg C but does not wait. At the same time, it runs a G28 command which calls my homeall.g. Because I use my nozzle as a probe, the first line of the home all macro heats the hot end to 140 deg C to soften any plastic that may have oozed out of the nozzle. Then the homing sequence finishes and control gets passed back to the "pre-print" macro which now selects the active and standby temperatures for all the tools, selects a tool, moves the carriage to the rear of the printer then waits for all temperatures to reach their set points. When that happens, the nozzle then gets wiped and printing starts.
In practice, all I do is select a file and hit "print". The bed starts to heat and once it reaches 40 deg C everything else gets heated, homed, primed and wiped during the time it takes to complete heating the bed. I have different printer settings in the slicer which simply point to a different macro in the start gcode to set the required hot end and bed temperatures.
HTH