You can even script inside the .tmux.conf.
Here’s a snippet I’m using to set different options for OSX:
if-shell 'test "$(uname -s)" = Darwin' \
'set-option ...' \
Well, the main reason I use something like tmux is so that I don’t have to open a commonly-used set of things in a specific layout. I can attach remotely to any tmux session, and have the layout as I left it, ready to pick up where I left off. So, scripting the startup and layout of windows, panes and applications isn’t something I’m looking to do, because I only do that sort of thing a handful of times a year.
I wish tmux had some sort of socket api instead of just using the binary