I get in theory why I'd want interactive login shells to have a fancier / more complex environment than others. Maybe I should care more about optimizing startup time of non-interactive shells. But really, who has the time to figure that stuff out?
Put env vars in bash profile and functions, aliases and other non-env (completion, nvm, rvm etc) in bashrc.
Put the latter into the former and they aren't inherited. Put the former into the latter and path appends and other non-idempotent edits to env vars don't work correctly. Though I personally use some functions to make sure my path edits are idempotent for ease of iteration when editing.
> (Oh and ...)
+1 to just dumping it all in ~/.bashrc