- Access the scrollback buffer in neovim
- Access the last command output in neovim
- Animated cursor trails. It sounds dumb at first but I find that when sharing my screen, the cursor trails help other people keep track of my cursor when using neovim.
Here are my configs to quickly load @screen_scrollback or @last_cmd_output in neovim
map kitty_mod+z launch --stdin-source=@screen_scrollback --type=overlay /bin/zsh -c "nvim +$ +'nnoremap q ZQ'"
map kitty_mod+v launch --stdin-source=@last_cmd_output --type=overlay /bin/zsh -c "nvim +$ +'nnoremap q ZQ'"
Anecdotally, it feels the fastest to me. Also GPU-accelerated and super configurable. It's amazing how a guy (Mitchell Hashimoto)[2] leaves the company he co-founded before it was sold to IBM.
[1]: https://ghostty.org
It shocked me when I got back into playing with multiple machines after over a decade that this mostly still does not exist.
Instead we’re finally doing gpu rendering (which is amazing but … surprising for this to be the 2025 topic du jour?)
Wezterm runs everywhere, but lets me customise it once and keep that config uniform across all machines.
I can have a single config [0], wrap that in a nix expression [1] for anywhere that runs home-manager / NixOS and then also check it out and symlink on Windows machines as my portal to WSL. As my preferences change, my tooling stays consistent and familiar everywhere it's needed.
[0]: https://git.sr.ht/~kb/env/tree/main/item/dotfiles/wezterm.lu...
[1]: https://git.sr.ht/~kb/env/tree/main/item/programs/wezterm.ni...
I use Ghostty, but the same thing. I have a flake based setup, which means I have the same environment and programs across all my Macs, Linux machines and WSL terminals.
Takes me about 30 minutes to spin up a new Mac laptop, with 99% of all setup done, down to system preferences.
Linux (nixOS) a little longer because for a brand new machine I may need to do a little hardware specific bootstrapping, but if I’m paving the same machine about the same.
1. quick-select the output in the terminal (select files/paths, urls, etc and either copy or paste them at the cursor). This is very useful as you often don't have the foresight to pipe the command to pipe the output of the command to some selection mechanism and even placing text on the line-editor is not that easy by default.
2. view images (sixel or kitty protocol). This is pretty useful visual analog to cat that doesn't require opening another program and works over ssh. Also for video.
There are some other nice utilities for doing things like downloading files directly in the terminal (it2dl for iterm and kitten transfer for kitty).
kitty doesn't work out of the box on macos if I remember; you have to set configuration for option/command etc.
I don't really dump megabytes of text into the terminal, they might have an edge there? (I found that xterm is much faster than xfce4-terminal for that.)
* They're very fast and the scrolling is very smooth, especially on a 120 Mhz (ProMotion) refresh rate on MacBook Pros.
* While TMUX runs on all of them, they have built-in multiplexing, so you terminal sessions without requiring TMUX.
* Super configurable and in some cases programable
* Excellent typeface support, including ligatures, which I liker
* A quality of life issue: you don't have to copy and paste URLs; you just right-click them in the terminal.
* Excellent typeface support
Wez is also cross platform so I get to use it on my Linux and Mac and my (Ugh) Windows work machine. Configuration being done in Lua is also something I quite like, but your mileage may vary on that one.
The thing that made me switch to Ghostty was the image support in wez didn't play well with tmux.
After testing wez, kitty, and Ghostty, I ended up going with Ghostty.
I do miss the idea of the whole lua config thing, but since I never did anything with it, I can't treat that as a practical concern.
What killed iTerm2 for me was the fact that syncing settings between machines with chezmoi was next to impossible.
With Wezterm it's just Lua code, easy to diff and easy to apply.
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.
I suppose I'm a bit of an extremist, though.
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.
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...)
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.
I've been using it for years and didn't touch the templating until this spring actually, I just had if statements in my setup bash scripts =P
Because these terminals all use the Kitty protocol, you can finally detect a single ESC press without a timeout hack as well as use shift with arrow keys to do text selection.
The fact that it has taken until 2025 to be able to do something this basic is pathetic.