more abstraction
move shell to its own file
generalize the idea of a Menu