https://download.nvidia.com/XFree86/Linux-x86_64/
The Nvidia provided run file may be the last shot. I'd recommend including the dkms option on install so kernel updates don't break it.
I was having trouble getting the full quote to copy on my phone, but @Locklear93 goes into it with links for install instructions (click the quote to go to it and see the provided links).
Pros:
Total control over which driver version you use, as the .run is disconnected from any kind of update.
Easier personal archival in case of... well, what you've run into already.
Lower risk of packaging issues* (uncommon, but I've got a thread around here somewhere that no one could solve which turned out to be a packaging issue on Canonical's side) I'm basing this assertion on the simple fact that it's gone through fewer hands--fewer steps means fewer opportunities for failure.
Cons:
Entirely manual. You can't just unmark and sudo apt update. You'll have to get the new .run installer and go through the whole process each time.
Potentially worse integration with Zorin. I've had fewer problems since switching to Nvidia's .run packages, but even the Nvidia installer warns that distro provided packages may work better.
Possible headaches if you're using a non-default kernel. (I have to jump through loopholes to use the .run package because I also use the Xanmod kernel. If you don't, this shouldn't apply.)
No APT provided safety rails. The .run installers include an --uninstall argument, but none of APT's features are available.