@chessbyte updated to incorporate feedback. Coorect me if I'm wrong but can't make it 100% symmetrical since the intial rm_f or ln_s could fail (also the rm_f in the ensure block). Tried to keep it simple while handling common edge cases.

Anywho shout out if there is anything else