You need to start using key modifers if you want to play the game as it’s meant to be played. I use a lot of CTRL and ALT modifiers. The other way is to have a mouse with extra buttons.
First of all, whatever class I’m playing, I always bind the abilities more or less the same across all characters: regular attacks (generators, spenders, fillers etc), big and small defensive CDs, CC, self heals etc. It’s easier to remember that if I want to use a big offensive CD i press F1 or if I need to use big def CD i press T. You said you already do it but I just wanted to clarify it.
Secondly, unbind A and D keys from movement and assign them to your action bar. Leave S or w/e is your backward movement key because you need it as a tank.
Now to the modifers. You obviously don’t want important abilities to take 2 buttons to activate so you need to find a good balance for yourself and make sure it’s easy to reach when needed. I always bind hard CC abilities on ctrl modifier because I don’t need them to be pressed so often and when I do need them I also want them to be easy to reach, so for me it’s sap on ctrl 1 and fear on ctrl 2. Also ctrl is my choice because of how easy it is to use it- you just press it with your palm, it’s right under it. I always have my healing potion and healthstone bound to ctrl 3 and ctrl 4 on all characters as well.
Now about the big CDs. Metamorphosis is a big CD. Meta doesn’t need to be bound next to fracture or spirit bomb but it’s good to have it bound in such a place that you will never miss the button whenever you need it and also don’t missclick it whenever it’s not needed. I bound it to F1 because it’s very easy to reach, very hard to missclick and it sort of separates it from the “regular” abilities.
So after this text wall, this is my layout:
F1- Meta
F2- racial
F3- trinket
1- Glaive Throw (ctrl 1- Imprison)
2- Fracture (ctrl 2- Sigil of Misery)
3- Spirit Bomb (ctrl 3- healing pot)
4- Sigil of Flame (ctrl 4- healthstone)
5- Azerite Essence
Q,W,E,S default
R- Demon Spikes (ctrl R- taunt) - I’m always using R as active mitigation button and ctrl R as taunt
T- Firey Brand (I always have T bound to a def ability)
A- Infernal Strike (alt A- Infernal Strike with @player if I want to spawn sigil but i dont want to move)
D- Soul Cleave (even tho spirit bomb pushes it out of your rotation you still need it to trigger Hour of Reaping trait and you also want to use it as filler)
F- Sigil of Silence (I always have a stun bound to F but yeah…)
G- Consume Magic
Z- speed potion (because i always have sprints bound to Z)
X- Immolation Aura (I always have some kind of AoE bound to X)
C- Sigil of Chains
V- Engineering belt
Obviously you want to hit the last row as well as ALT modifier with your thumb if you want it to be effective.
If you want to keep your action bars somewhat free then you can also macro 2 abilities into 1 button with modifier but seeing the cooldown is kinda important so I usually try to avoid it.
Another big thing you want to do, is to macro your leap and sigils with @cursor and @player. This will remove the need of having to click on the ground to confirm the leap/sigil which makes the DH gameplay smoother.
This is how I use it with my leap:
#showtooltip Infernal Strike
/cast [nomod, @cursor] Infernal Strike
/cast [mod:alt, @player] Infernal Strike
/cast [mod:alt, @player] Sigil of Flame
The @cursor should be self explanatory. @player makes you cast whatever you have to point with your mouse directly under your feet without having to use the mouse at all and moreover without moving when you use it with your Infernal Strike, and belive me, it sometimes is very important that you don’t move the whole pack or accidentaly make a mob move behind you. The reason why I’ve put the sigil into this is because you can stack Sigil of Flame twice for more dmg.
One last thing is to use @mouseover. What it does, it removes the need of switching targets to fire an ability on certain targets. It’s useful when you have to fire off glaive for some fast high threat on new mobs but you don’t really want to switch target for that. Also same thing with Imprison- there’s lots of situations where you don’t really need to switch targets but you want to interrupt a mob or just quickly CC a ninja pull:
#showtooltip Imprison
/cast [exists, harm, @mouseover] Imprison
/cast [exists] Imprison
the reason why it’s twice in the macro is because you sometimes want to cast it on your actual target, so the macro will prioritize whatever you have your mouse over but if there is nothing under it then it will just cast it on your current target. Obviously you want to have enemy nameplates turned on to make use of this macro.