Late to the party, but since I've been struggling with this for some time and, even tried some of the solutions proposed with varying results, I've recently found a solution which worked awesome for me, since then, about 4 months ago.
Remapping keys to other positions didn't help me as much, since they were also away from the home row. Good ergonomic keyboards with "mod keys under thumbs" and fancy shapes are very expensive (although it would have been justified if this didn't worked).
What I ended up implementing is a home row mod tailored to my needs and tastes, specifically GACS variant on my S,D,F,G keys instead of A,S,D,F due to keyboard shape, my hand ergonomics and personal prerence. Notice that the article refers to firmwares and keyboards, but I've done it purely via software under Linux with my aging split keyboard. Read it just for the ergonomics, they make a lot of sense.
Basically, it means using keys in the home row as dual letter/mod. For example, I have my F key act as CTRL if hold and regular key if press-released. Ditto for S/Super,D/Alt,G/Shift. Also, since I'm on a split keyboard which provides a nice separation, I've mirrored those in H/J/K/L keys so I have mod keys in both sides. Now my home mod keys are always closer than the real mod keys, which is awesome to get used, since it becomes more comfortable soon. You can tweak your setup to what suits you better. Ergonomically, looks to me the best solution and very easy to get used to.
The software I've used is kmonad and a config file refined as I've been using it. Kmonad is a true awesomeness for keyboard customization. I've also added some very personal gimmicks, such as an extra ESC key on my Right Shift tap, and " (double quotes) on Left Shift tap, added to their usual function. And, by using layers (see docs) I've created an extra arrow keys set by doing B+[hjkl]. You can go crazy in customizing and works for any keyboard, no special hardware/firmwares needed.
After some months of using, I've got very used to it. Since you keep normal functioning, it does not gets much in the way and you can progressively get used. Try using F/J as Ctrl at first. I was surprised on how quick I got used, but as it's way easier (read: lazier) to use them, it quickly became my preferred choice. Feels very comfortable, since there is way less hand travel. And, since you have all keys at your disposal to create customizations and layers, it can fit well for lots of cases.