"Got ubuntu running in a vm. Buggy as shit."

I have 3 different distros running on as many machines all work fine and one is based on ubuntu LTS. Probably what you should be running but whatever.

"- keyboard support is terrible, in intellij i can't type `or ´ or ~ but I can type all those in gedit and then i have to copy paste them over"

Do you really believe people have this issue? Do you think we all have emailed ourselves documents full of all the characters are OS are too broken to recognize? Something is screwed up about how your vm or your vm software is configured that you are blaming on the OS. I have used over a dozen distros in a multitude of versions and none had any problem with hitting a key and having a character appear on the screen.

"virtual desktops is a mess, if one window overflows into another desktop, then when you click on that app ubuntu will take you to the desktop where you see the least amount of your application, usually just a few pixels on the top of the screen"

This sounds sub-optimal but may I suggest you keep windows on one screen. Most environments provide a hotkey to move a window to a certain screen and many provide hotkeys to resize it to either fill the entire screen or some portion thereof like the left/right/top/bottom half or just drag the window all the way onto the screen you intend to use it on.

Personally I prefer the way i3wm handles virtual desktops. They are PER monitor. Optimally you just assign each workspace to a particular output. Example 1-5 on left monitor 6-0 on right and switch a given output and to a given workspace with one click of super or cmd + number.

Want to view your chat app on the right monitor while leaving your browser alone on the left cmd + 7. Its also substantially lightweight which means it would work better on a vm.

The great thing about it is that there isn't ONE way to handle virtual desktops there are a bunch of different environments available one of which probably works optimally for you.

"- ctrl-a and ctrl-e don't work in most applications, even though these are old school shortcuts that work nearly everywhere on a mac"

Many applications are configurable but honestly different environments different conventions this isn't a bug its just a difference.

"- installing applications is always terrible on ubuntu. You can install from their app-store, if that works (50/50 odds) but you can't get intellij there, or sublime. To install sublime I had to find a blog post with 4-5 steps I needed to do. For intellij I also found a blogpost, but when I need to upgrade intellij I couldn't find it anymore and had to delete everything inside my intellij folder and copy a new intellij in."

Installing applications is fantastically easy and works every single time. Most common stuff is available in the repo and you can apt install foo or use the gui if you like.

Most less common stuff is available in a 3rd party repo. If you need such the workflow is google ppa somesoftware note the ppa involved and run

add-apt-repository ppa:something
apt-get update
apt install foo

if you get bored and want to automate that in fish

function ppa
sudo add-apt-repository ppa:$argv
sudo apt-get update
if [ $argv[2..-1] ]
sudo apt install $argv[2..-1]
end
end

ppa someaddress somesoftware bam installed

example want newer gimp

ppa otto-kesselgulasch/gimp gimp

When you say it works 50/50 you don't mean that it fails half the time you mean that it installs almost all things just fine save for a few quite frankly mediocre poorly chosen apps that you simultaneously actually pay money for but don't get good support for your environment.

This is probably because your environment is some 7 year old version of ubuntu that is similar to what your servers are running. Seriously the last time I installed intelij I just had to unzip an archive, add to path, and tell it where to get java. This "Install" in /opt actually survived multiple distros and worked without complaint.

Shockingly the instructions you found on the internet probably didn't cover the case of running new sofware on an obsolete base.