While I’m not the OP, it’s really not that hard, especially on druids. Between talent and form conditionals (not to mention your autounshift toggles for feral) and you’re butting up against the limit fairly fast even for only one spec. (And, if you try to make use of the form bars to avoid using the form conditionals in macros, you’ll very quickly run out of macro slots.)
Here’s one of my macros for feral that clocks in over the limit:
#showtooltip
/tar [harm,nodead][@mouseover,harm,nodead]
/cast [mod:ctrl,@mouseover,help,nodead,talent:3/3][mod:ctrl,@player,talent:3/3]Rejuvenation; [form:1,@mouseover,harm,nodead][form:1]Growl; [mod:shift,form:2,@mouseover,harm,nodead,talent:6/3][mod:shift,talent:6/3]Primal Wrath; [form:2,@mouseover,harm,nodead][form:2]Rip; [@mouseover,help,nodead,talent:3/3][@player,talent:3/3]Rejuvenation; Moonfire
I finally gave in and started using an addon for macros. (M6 in my case because I can use direct keybinds to better manage multiples of the same class. It lets you set up a global keybind, but add conditionals to the keybindings. That way you can set it up so a keybind only triggers under certain circumstances and falls through to the default UI’s use of the keybind otherwise. That lets a keybind only work on certain classes or specs, or only if you’re not in a vehicle. (Good for letting the default main action bar keybind work for the vehicle bar.)