`!` doesn't `cd`. There's nothing an external command can do that makes your shell change your directory without you explicitly asking your shell to do something. `!` is for spawning a subshell, and it does NOT exit `nnn`. Your use of `Q` is also completely pointless in this case.
Now, again I didn't read the code, but most likely the spawned subshell is not a login shell, so stuff in `.zprofile` is not loaded. See `man 1 zsh`.
It's arguable whether the spawned shell should be a login shell, but I'd say non-login shell is the right choice here. If you want your stuff in every interactive session, use rc, not profile.
If what you actually want is cd on quit, pretty please RTFA. https://github.com/jarun/nnn#cd-on-quit
First, 'loose' doesn't make sense. You keep using the wrong word, in quotes... Not sure why you insist on doing that.
Secondly, I recommend you see what's exactly executed by zsh by running
```zsh
setopt xtrace; nnn (or whatever command you launch nnn with here); unsetopt xtrace
```
I seriously doubt sourcing a file with the content `cd "directory"` can clobber your alias. There's a chance you have a weird path and `nnn` isn't quoting that properly (I didn't audit the code), but the chance of that clobbering an alias without you intentionally constructing the path is smaller than being hit by lightning.
> I end up 'loosing' my alias and stuff.
I guess you mean "losing"... "My alias and stuff" is really vague, need a lot more details, i.e., exactly what alias is "lost", exactly what command works before but not after, what "stuff" is.
> This just seems to set my NNN_TMPFILE and doesn't exit nnn.
That additional information seems in direct contradiction with the previous "I end up 'loosing' my alias and stuff."