Wait for systemd oneshot service to finish
Found the answer here: https://unix.stackexchange.com/questions/216045/systemd-configure-unit-file-so-that-login-screen-is-not-shown-until-service-exi
Just set Before
to when the terminal is available:
[Unit]
Description=Prepare the system after installation
Before=getty@tty1.service getty@tty2.service getty@rrt3.service getty@tty4.service getty@tty5.service getty@tty6.service
[Service]
Type=oneshot
ExecStart=/usr/bin/prepare-system
[Install]
WantedBy=multi-user.target