Movement: wasdqe (already in the game)
Hands: ui op jk l;
Runes: numpad
Select champion: numrow 1 2 3 4 (already in the game)
Swap weapons of selected champion: x (already in the game, but requires hovering your mouse over the champion instead of selecting them)
A standard US keyboard has 33 very easily accessible keys (for a traditional typist) and another couple dozen that are still pretty easy to reach, plus metakeys. You can run out of comfortable hotkeys in a bloated RTS or something like Dwarf Fortress, but I don't see it happening with Grimrock. Heck, if you want to get really fancy you could include complete charsheet and cursor manipulation using the cursor keys etc. and still not run out of keys.
Obviously I'm not a Grimrock dev, but I'm pretty sure the reason hotkeys for attacking weren't implemented was not that keyboards have too few keys on them. Rather, it seems to be an intentional design decision to make fumbling with a clunky interface a large part of combat - think about why you have to draw runes instead of just clicking on a spell icon. That was how most of the old dungeon crawlers (which Grimrock is based on) did it, after all; Dungeon Master required you to click on attack buttons and input sequences of runes for spells, Stonekeep required you to click near a monster for your swings to hit it and some monsters were even vulnerable to hits in specific spots.
I will leave whether this is a good or bad design as an exercise for the reader.
Note that Grimrock 2 provides a
Champion:attack() method. I haven't experimented with it yet, but once documentation on GUI drawing is released I plan to make a plugin for custom dungeons that allows players to define and use keyboard controls.