I'm now using .xsession to run my terminal/browser while xmonad is starting. What i'd want to be able to do is to start different programs on different virtual desktops in xmonad (eg browser on desktop 1, nautilus desktop 2). How can i do this in xmonad?
A tool solving your problem
Devil's Pie can do that, and it is not specific to xmonad, should work with all window managers.
Devil's Pie can be configured to detect windows as they are created, and match the window to a set of rules. If the window matches the rules, it can perform a series of actions on that window. For example, I can make all windows created by X-Chat appear on all workspaces, and the main Gkrellm1 window does not appear in the pager or task list.
You can set it up to redirect browser to desktop 1, nautilus to desktop 2, etc.
How to use it
If you just meant to move window to desktop only at session start time, and not later, you can have your
.xsession script launch devil's pie, then your applications, then kill devil's pie, and voilà.