Programming proteins with viral geometry