I don't want to spend ages figuring out which knobs to turn to get a half decent shell. If there's an alternative to oh-my-zsh that looks halfway decent, has that nice fzf integrated, and the 'ghost text' history suggestions, then I welcome it!
If zsh has its completion fully configured by default, there will be no need for most people to turn knobs nor will it be a "half decent shell." It'll be the best shell, if it isn't already.
I wonder why ghost text history suggestions are popular though, I'd rather not have it. Shell history search works better, and I don't want my shell always showing me or whoever else is looking at the screen random commands that I've previously typed.
> If zsh has its completion fully configured by default, there will be no need for most people to turn knobs nor will it be a "half decent shell." It'll be the best shell, if it isn't already.
The curse of backward compatibility means that zsh does not break your setup or change things on you. And there are still developers left who bear the trauma from the one time that was tried back in the early-mid 90s in the 2.x version series. Sadly that means many new features remain inactive by default, especially anything written in shell-code like command-specific completions.
I for one use and like using both fzf on the search history and the ghost text history. With history, I often end up writing a line that isn't shell so that it fuzzy-matches what I'm looking for. I like having the passive suggestions in addition to that. It doesn't get in my way and if I like what I read, I can accept it.
I'd rather have a good history search than autosuggestion, but having both is a net-positive in my day-to-day.
The incompatible syntax of fish makes it a no go for me.
As an SRE, at my day job I often need to copy/paste commands that are generated from a playbook.
Our playbooks use Bash, and in practice Zsh is compatible. But a co-worker using fish often has to manually modify commands before running, and I'm not about that life.
The problem with fish is mostly the different syntax for setting variables and lack of heredocs. Sometimes the string substitution differences come up too.
In our case, we often have complex decision trees to diagnose issues before we get into the ops. Our playbooks are very thorough with details about all of these debugging techniques.
You can never completely automate the debugging step: it often requires human judgement to direct the investigation in ways that can't really be expressed in a script.
The friction of the shell comes up not in executing the ops, which we do in fact have heavy automation around, but in all the little pieces of debugging has to happen to tell you what ops need to be done.
(If you get paged and the solution is to skip the debugging step and run a script, then why didn't you automate the script so that you don't get paged in the first place?)
Exactly. Variable assignment works different in Fish, and it’s very hard to change that habit. With my usage of shell (with Fzf & zoxide), fish simply doesn’t improve much for me. I’m using bash constantly for my job, and having the same syntax in my shell is important
Once you have everything figured out, you just keep using the config you have. It might be worth the investment. I stopped using oh-my-zsh when I realized it was what was causing multi-second delays on Raspberry Pis.
I think auto suggestions and syntax highlighting plugins can be installed separately from oh-my-zsh.
I use starship for a better prompt, and it works on more shells than just Zsh.
I also have Atuin installed to share history across machines, and as a benefit the history search is a lot more powerful.
I self-host an atuin server, and even between machines I don't see anything like that.
I configured daemon mode to workaround an ZFS+sqlite issue. I also have my sync_frequency set to 5m (default is 1h) in the config. Perhaps those are making my experience smoother.
I'm definitely not an expert, but I configure zsh manually with those fzf and "ghost text". I took some notes in my repo, just copy the relevant portions if you actually want to try this: https://github.com/bbkane/dotfiles/tree/master/zsh
I tweak it occasionally, but for the most part I set it and forget it.