I am Windows/Mac user and I spent a bit of time trying to configure emacs across all my machines. I think it's fair to say that it wasn't designed to be configured cross platform, which is a shame. When I can be bothered I will have to create .emacs files for each platform that I use
I disagree. I have been using the same init.el across Windows and Mac for several years. Hardly anything needs to be tailored but you can inspect the system-type variable if it is really necessary.
I use the same `.emacs` on both Windows and Linux. I put some Windows-specific stuff in a separate file that I load only when `(string-match "nt" (symbol-name system-type))`.
The biggest cross-platform difficulties are the emacs version and OSX.
Make sure all your computers have the same major version (all 23 or all 24; I recommend 24 as it actually has a package manager). OSX was for several years a problem for emacs as there were two or three incompatible ports that did things differently; it's probably gotten better over time.
As preavy said, the rest can be handled by checking the OS type, machine name, user name, etc in your init files (they're not just config files, they're emacs lisp programs that get run during startup).
I keep mine in a git repository to make syncing the changes over time easier.
I am Windows/Mac user and I spent a bit of time trying to configure emacs across all my machines. I think it's fair to say that it wasn't designed to be configured cross platform, which is a shame. When I can be bothered I will have to create .emacs files for each platform that I use