The below is my full experience of how I flashed TWRP, the Xiaomi.eu rom and rooted with Magisk. Whilst it essentially is a step-by-step, it also contains not only how I succeeded but also how I encountered issues and so...
Here is a slightly condensed verison with thanks to @airwebber
Get the latest xiaomi.eu rom from here or here, just scroll down and find the "xiaomi.eu_multi_MI9..." version.
Get the latest magisk (magisk v19 works at the time of writing this post):
Some versions of twrp may not work on older builds other than the latest (9.4.25) and so use this one with:
Once the waiting time elapses (usually 360 hours) use the MiFlash tool to unlock the bootloader. Warning: this wipes your phone entirely, so be sure to backup anything of importance.
Unlocking takes a few minutes and once 100% complete your Mi 9 will reboot. Your phone will say “unlocked” on the first splash screen while booting up.
Your Mi 9 will boot, and you will need to either perform/skip the initial setup stuff. Once ready, power off your device in order to flash TWRP.
Press both the volume down key and power key to boot into Fastboot Mode.
Once in Fastboot Mode, use the following command to install TWRP: “fastboot flash recovery XXXX” (XXXX = the pathway to your TWRP.img file). However, I find it best using Minimal ADB and copying the TWRP file and renaming it to “twrp.img” for ease) in the Minimal ADB folder location e.g. “C:\Program Files (x86)\Minimal ADB and Fastboot”.
Once flashed, disconnect the USB cable and boot to TWRP recovery by holding down both the volume up and the power buttons. This sometimes will bring you to the stock recovery and NOT TWRP! If it does, boot back to Fastboot and reflash TWRP.
Once you can boot to TWRP, push both the rom and magisk via CMD line:
adb push rom.zip /tmp/
adb push magisk.zip /tmp/
For ease, I suggest copying both files to the Minimal ADB folder location e.g. “C:\Program Files (x86)\Minimal ADB and Fastboot”. And renaming them to: “rom.zip” and “magisk.zip”.
This step is very important!! You must go to the Wipe menu and select: Format Data, then type “yes” to continue and then: do a Factory reset, which also wipes: Data, Caches and Format Data. If you skip this step you won’t be able to install a lot of important apps and will have to start over.
Now that you have pushed both the rom & magisk and wiped everything you needed to. Install the ROM immediately after install magisk.zip (in that order) both located in /tmp/.
The installation will take a couple of minutes (if your screen dims, don’t worry that’s just TWRP screen dimming, touch the screen to keep it awake!) once finished with no errors, then reboot and chose Do Not Install the TWRP app when prompted.
The phone will take a few seconds to reboot and show the first MI splash screen, but it should start booting. After a couple of minutes, you should see the initial boot screen! Perform the setup (connecting to Wi-Fi, adding my Google account etc.).
Once finished setting up, you may notice that magisk was not installed, if that happens, you can install the APK version and follow the prompts and reboot.
Once rebooted, confirm that magisk is now installed. If it is, I suggest installing SafetyNet and confirming your phone passes!
If it passes, you have successfully installed and rooted the Xiaomi.eu rom!
Also, when updating with each weekly I recommend the below as an alternative to using the built in Updater app. The reason being is I believe the updater app automatically reboots after it installs, which if you're rooted means you'll lose it. That then means you have to reboot back to twrp, reflash magisk, reboot, reinstall modules, reboot again etc.
Therefore to update a weekly:
Download the rom manually
Reboot to twrp
Wipe system and caches
Flash the rom and magisk
Optional: I also disable my substratum theme too before updating and reapply afterwards. Whether it's needed or not I'm not too sure, so give it a try either way