Deduplicate the command boilerplate and refactor as decorators.
Switch to programmatic generation of the presets table

(Make things easier to modify in branches while I make time to add proper
config file support)