We recommend import/export throughout - but rather than using a single prelude, we build a hierarchy (preludes are kind of ugly in general because they include stuff you don't need and often miss stuff you do need)..
<https://status-im.github.io/nim-style-guide/language.import.html> gives some detail but basically the idea is that if you compose a type using types from other modules, you also export those modules, or you run a significant risk of having different behavior of the same type in different modules, specially when there are matching overloads (such as often happens for `hash` and similar functions). The end result is that your import lists are generally short and reflect the real dependencies of the code which makes it easier to reason about.