I just recently decided to replace iterm2 with wezterm when I started moving macbook over to nix. iterm2 is about the only one that didn’t work well for this, since you can’t source control the configuration (import/export doesn’t cut it)

Any of the ones you mentioned would probably work good with nix too. I don’t really care about the config being scriptable at all, it was just the first terminal that easily let me set all of the keyboard shortcuts I wanted, so I stuck with it.

iTerm2 does support source control; I've got my settings in a git repo managed by Chezmoi. In the settings dialog, under "General" -> "Settings", there's an "External settings: Load settings from a custom folder or URL" option.

I've also gone wez from iterm2, and you hit upon why. Don't ever make me click on things. I can't script => modify => export clicking on things. When you make me click on things, you've defined my interface for me, which I did not ask for.

I suppose I'm a bit of an extremist, though.

Nah, I want my configurations to be deterministic.

I put config in dir, launch app. App should look like config.

If it doesn't it's the app's fault.

There are a limited number of applications I tolerate this behaviour from, but not many.

Almost entirely with you on that, actually. But OS and other environment differences frequently demand some sort of tweaking, which I absolutely do not want to do by hand if I've done it before.

Chezmoi can do conditional templating on config files, which is super nice.

But it's always better when the application itself is cross platform and uses just a single config file.

(Just setting all of the knobs on macOS is a massive hassle and only part of them can be automated in a deterministic way...)

It's about time I started using a dotfile manager that I didn't make entirely myself - thanks for the recommendation.

For more and more of the cross-platform headaches, I've actually found myself treating the OS as more of a virtual host, and spending the plurality of my time configuring layers that run in it (modify .zshrc where it can do the work of iterm/wezterm, if it can be done in .emacs then do it there).

I get the feeling that I'm not far off shipping personal nix containers around, but there's still a little too much friction between having containers work and working on the OS itself.