Life is too short for a slow terminal
Posted by emschwartz 3 days ago
Comments
Comment by abejfehr 1 day ago
I can't recommend switching to mise highly enough: https://mise.en.dev/
Comment by dawnerd 1 day ago
Comment by bin_bash 1 day ago
Comment by dawnerd 14 hours ago
Comment by anon7000 11 hours ago
Comment by tecoholic 18 hours ago
If your org doesn’t use mise, just add mise.toml to your global gitignore. Mise tries to be a single tool covering multiple needs, but don’t have to use it that way. I just manage toolchain versions and envvars (replace direnv).
Comment by shhsshs 1 day ago
Comment by abejfehr 1 day ago
With mise you get the behaviour of automatically switching when you change directories effectively for free.
1. https://github.com/nvm-sh/nvm#zsh
Edit: unless you aliased it to `node` or `npm`, which would be fine I guess but super annoying if you ran node or npm commands often. It is not worth the hassle, no one should use nvm in 2026 imo
Comment by nickjj 1 day ago
Unrelated to Mise but related to zsh, there's also https://github.com/jeffreytse/zsh-vi-mode/issues/316. I noticed this plugin was causing a lot of delay. Learned a decent amount about zsh profiling from that issue.
Comment by vstm 1 day ago
Thank you for the recommendation, I might then also be able to ditch sdkman as well.
Comment by VorpalWay 1 day ago
I can strongly recommend lazy loading in zsh in general, I use it for pyenv too (which is also slow to load, but I write Python maybe every other week or so only).
The way to do this is to use the autoload functionality in zsh and have the autoloaded script replace itself with the real shell init code for the tool in question.
Comment by blfr 1 day ago
Comment by a96 26 minutes ago
Comment by hombre_fatal 1 day ago
Comment by everforward 16 hours ago
I’m an SRE and the answer is “constantly”. I get pulled in a lot of directions, it’s way easier to maintain context if I open a new terminal or tab for each thing.
Joe asks about something, I open a terminal. Teammate asks about something, new terminal. Joe replies, I swap back to his terminal to look at the scrollback buffer.
I’m closer to you when doing more dev work. One tab running a watcher for builds and restarting the app, one tab to run tests or whatever, a couple for poking around if I need to grep or curl or whatever.
Comment by brewtide 1 day ago
Comment by frollogaston 1 day ago
Comment by skydhash 1 day ago
Comment by poly2it 17 hours ago
Comment by DanielHB 1 day ago
The only thing I demand to be fast on my terminal is grep reverse search (ctrl+r) and of course typing a character. But if your terminal can't keep up with your typing speed there is something deeply wrong with it.
Comment by pkulak 1 day ago
I run a scrolling WM and have settled into a habit of opening terminals when I need them, then closing them right after. I'll open a terminal, git pull, close it. Etc. I also use a terminal that launches cold in 10-20 ms, so it's not like a pay a price for it.
This is actually what I thought this post was about! But then I saw the Ghostty reference, which, in my experience, is not very fast to launch at all. I got it opening new windows quickly by running the main process as a systemd service, but Foot launches way faster without all that fuss, and allows you to go the daemon route if you want it _even_ faster.
EDIT: Just want to clarify, no shade on Ghostty. That project is cross platform and uses the 100% defensible decision to use the full GTK stack on linux. Foot is Linux AND Wayland only, and uses that very restrictive environment to optimize the hell out of startup and general performance.
Comment by hombre_fatal 1 day ago
So much so that I vibe-coded my own terminal emulator for vertical tabs on macOS (using libghostty for the terminals) that is faster and less weird than iTerm.
Comment by chickensong 1 day ago
Comment by tom_ 1 day ago
I don't remember when I did it, but it looks like I must have gone through this at some point (maybe due to using GNU Make a lot? Or perhaps it was some other tool) - my zsh setup does a bunch of autocomplete setup only in the interactive case, and it seems to help a bit with startup time, at least on macOS:
% for i in {1..5}; do /usr/bin/time zsh -i -c exit; done # zsh in interactive mode
0.05 real 0.03 user 0.02 sys
0.02 real 0.01 user 0.01 sys
0.02 real 0.01 user 0.00 sys
0.02 real 0.01 user 0.00 sys
0.02 real 0.01 user 0.00 sys
% for i in {1..5}; do /usr/bin/time zsh -c exit; done # zsh in non-interactive mode
0.01 real 0.00 user 0.01 sys
0.01 real 0.00 user 0.00 sys
0.00 real 0.00 user 0.00 sys
0.00 real 0.00 user 0.00 sys
0.00 real 0.00 user 0.00 sys
For the interactive case, I don't really mind (within limits - the worst case, on macOS after a reboot, takes several seconds, and that's tedious). I also start new interactive terminal sessions fairly rarely.Comment by JdeBP 1 day ago
That said, it is almost totally about the Z shell. So you might still qualify as 'weird' in this case on the alternative grounds of not using the Z shell. (-:
Comment by opan 1 day ago
Comment by dopp0 1 day ago
Comment by VorpalWay 1 day ago
Comment by frollogaston 1 day ago
Comment by fg137 1 day ago
Developers that are very heavily invested in terminal and (over) optimize their terminal configuration are a small but very vocal minority.
Comment by fusslo 1 day ago
Comment by bee_rider 1 day ago
Apparently for some of the simplicity-produces-speed arguments, users have found complex/featurefull. tools that are still quick. I’m not sure how to evaluate this (I like simplicity just because it is easier to fit simple tools in my head) but we should note the counter argument (and applaud the follow-up).
Comment by VladVladikoff 1 day ago
Comment by mitchellh 1 day ago
In terms of speed, same thing: if you can provide some kind of objectively measurable thing, we can look into it. Everything we've measured so far firmly places Ghostty in the "fast" camp (with friends such as Kitty).
We're sometimes faster, sometimes slower, but in any case not noticeably so. You wouldn't pick Ghostty vs Kitty for example for performance, it'd be something else. But you would pick Ghostty over say... iTerm2 for performance (but you may pick iTerm2 for features, its extremely feature rich!).
Comment by liveoneggs 1 day ago
Comment by esseph 1 day ago
You need to figure out what is going on because that certainly isn't normal.
Literally seeing 0.0% on Linux
Comment by quotemstr 1 day ago
I can't understand Ghostty either except as some kind of trendy memetic thing, the $GME of the TTY world.
Comment by rewgs 1 day ago
Comment by Analemma_ 1 day ago
Comment by dismalaf 1 day ago
Comment by saberience 1 day ago
I started using it expecting to love it, but in reality it didn't seem to gain me anything but in fact was worse in several major ways. Also less configurable than Iterm2. :/
Comment by stavros 1 day ago
Comment by z3ugma 1 day ago
Comment by frollogaston 1 day ago
$ for i in {1..5}; do /usr/bin/time zsh -i -c exit; done
0.01 real 0.00 user 0.00 sys
0.01 real 0.00 user 0.00 sys
0.00 real 0.00 user 0.00 sys
0.00 real 0.00 user 0.00 sys
0.00 real 0.00 user 0.00 sysComment by acabal 1 day ago
I had no idea that you could do that asynchronously, and then have ZSH update the already printed prompt with the status later! That blows my mind!
Comment by jhogendorn 1 day ago
Comment by fg137 1 day ago
Comment by binaryturtle 1 day ago
if [ "$SESSION_TYPE" != 'remote/ssh' ]; then
if [ "${TERM_PROGRAM}" != 'tmux' ]; then
( if [ $[RANDOM % 10] == "0" ]; then fortune -n 40 -s; else echo "Hi, $(whoami)!"; fi ) | cowsay | lolcat && printf '\n'
else
if [ "${TMUX_PANE}" == '%0' ]; then
fortune | cowsay -f small | lolcat && printf '\n'
fi
fi
fi
It's a whole chain of interpreters firing up (sub-shells, Perl for the cow, Ruby for the lol, I think.) :DBut what would life be without a little bit of fun?
Comment by copperx 17 hours ago
Comment by titzer 1 day ago
— Kurt Vonnegut
Comment by anygivnthursday 1 day ago
Comment by opan 1 day ago
Comment by idoubtit 1 day ago
Even with a low grade laptop, my zsh config grants me a sub 5ms prompt and a sub 1ms input lag, and that's far more important than the exit time.
./zsh-bench
==> benchmarking login shell of user XYZ ...
creates_tty=0
has_compsys=1
has_syntax_highlighting=0
has_autosuggestions=0
has_git_prompt=1
first_prompt_lag_ms=54.942
first_command_lag_ms=57.069
command_lag_ms=4.275
input_lag_ms=0.669
exit_time_ms=26.522
hyperfine --warmup 3 'zsh -i -c exit'
Benchmark 1: zsh -i -c exit
Time (mean ± σ): 26.5 ms ± 0.5 ms
Range (min … max): 25.5 ms … 27.6 msComment by 1vuio0pswjnm7 1 day ago
"Most of these optimizations are about leaving stuff out. It's about being intentional and only adding things you're going to use."
I don't use X11 or a similar graphics layer, only textmode. Thus I don't use a terminal emulator
I don't use zsh. I use NetBSD sh
Smaller and faster
This is what I am comfortable with
Others may have their own preferences; to each their own
I might not understand others' preferences but that's their business, not mine
Comment by 1vuio0pswjnm7 1 day ago
"The terminal itself
Shell startup is only half the story, because the emulator adds its own input latency. I use Ghostty, which is GPU-accelerated and native, and my config is just seven lines long."
I do not use Ghostty or anything similar^1
1. https://en.wikipedia.org/wiki/List_of_terminal_emulators
Further, the terminal emulator cited by the blog author requires a graphics driver
I do not use a graphics driver
Comment by JdeBP 22 hours ago
Yes you do. It's the one that your in-kernel terminal emulator talks to in order to splat its bitmap fonts onto the screen. It is whatever wsdisplay has attached to, which can be one of a range of things from genfb through voodoofb and machfb to radeonfb. There was even a vesafb about 20 years ago.
Comment by 1vuio0pswjnm7 16 hours ago
Maybe this is not clear. I apologise for any ambiguity
vga(4) can be referred to as a "graphics driver"
For example,
But it does not support (non-text) graphics
It only supports text
The blog author is using a graphics layer such as X11 or Wayland along with a terminal emulator such as Ghostty on top of it
I do not use those things
Comment by JdeBP 1 day ago
Yes you do. It's the one built into your operating system's kernel. You'll find a lot of, but not all of, its code in /usr/src/sys/dev/wscons .
Comment by 1vuio0pswjnm7 18 hours ago
I use the vga driver which does not do graphics
Comment by parlortricks 1 day ago
Comment by maherbeg 1 day ago
Comment by byteoptimizer 22 hours ago
Comment by ilaksh 1 day ago
Comment by gguingff 1 day ago
Comment by tnelsond4 1 day ago
Kitty doesn't work, alacrity doesn't work, foot doesn't work, gnome terminal doesn't work, xfce terminal doesn't work, urxvt doesn't work, xterm doesn't work, the list goes on.
Comment by h4kunamata 1 day ago
Comment by turudjdj 1 day ago
Comment by quotemstr 1 day ago
As it turns out, avoiding unnecessary fork() is good hygiene everywhere.
Comment by koinedad 1 day ago
Comment by zeflonex2 3 days ago
Comment by hatradiowigwam 1 day ago
I started to take your comment seriously until that line. You're avoiding leveling up and learning how to use the CLI. Whatever reason you are avoiding it for, understand that's what is at play here.
Comment by wang_li 1 day ago
Comment by utopiah 1 day ago
If you start 1 command and get 1 output, the terminal isn't particularly powerful.
One you do start combining commands then it's a totally different thing.
If your GUI does everything you need, then a terminal isn't necessarily useful. If your GUI doesn't provide a feature though, you are most likely stuck. You might be able to learn it's own API in a specific language, e.g. Lisp for Gimp, Python for Blender, etc. If though your terminal application doesn't provide what you need you can pipe its output to another terminal application and thus get something that none of those applications individual can. Once you have done it with 2 applications you can do that with 3, 4, etc. You can label those applications and re-use that tomorrow, share with someone else, etc.
The terminal isn't about starting one application.
Comment by brudgers 3 days ago
In practical design, GUI applications inevitably deprecate keyboard abstractions in favor of graphical abstractions and graphical abstractions require parsing visual representations and are less conducive to "muscle memory" whenever pointer control is relative rather than absolute (which these days is approximately always [1]).
Keyboard oriented applications feel more like a language and human brains tend to map well to language and touch typing while GUI's rely on something akin (or identical) to hand-eye coordination. Hand-eye coordination is harder than touch typing and every GUI application requires developing a unique mental model.
[1] in the ancient days of digitizing tablets with absolute coordinates, it was possible to "touch mouse." But that's not how we do things today (and it would not work well with infinite scrolling, etc.)
Comment by doubled112 3 days ago
Comment by dismalaf 3 days ago
Of course, other tasks are nicer with a GUI and/or mouse/tablet/touchscreen (art creation for example).
Comment by reddit_clone 1 day ago
Here are some advantages.
- It is repeatable, you can do the same exact thing you did before. With ZSH history + FZF, recalling a command is a breeze.
- Auditability. The command in your shell history is there for you to revisit and servers as a permanent record of something you did (or didn't do).
- A command line doesn't make a mistake at 10th time, due to fatigue, inattention etc.
- Reusability. You may have to repeat the same command for different folders (or remote servers). A slight modification of the previous command will do it for you.Comment by johnthescott 3 days ago
my take is terminal is just quicker than "gui".
Comment by hilariously 1 day ago
Comment by johng 3 days ago
Comment by bee_rider 1 day ago
If you were raised on programs where most of the features were accessible at a button-click, without going through a bunch of hamburgers, modern GUIs won’t feel familiar, CLI will.
Comment by alfonsodev 1 day ago
Comment by liveoneggs 1 day ago
Comment by otikik 1 day ago
Comment by throw1234567891 1 day ago
Comment by regexorcist 1 day ago
Comment by msla 1 day ago