Even looking at the code, maybe its because I don't know Go really well but I can't figure out what is supported :P It seems to me like the supported shells should be known at compile time. However, it is a map which shells are added to at runtime which confuses me. I would like to try to add `ion` support, but am confused by what is going on.