I'm not a fan of spending days configuring things, I'm a simple man who enjoys things preconfigured, maybe with just a little tiny bit of tweaking. So when Manjaro gave me a beautiful zsh configuration out of the box, with good autocomplete, nice prompt with git info, showing timing and result code of each program I run, I was very happy and remain happy still. It works fast and well, so kudos to people who made it. Once you have a good working config, no reason to change it.
I know that a lot of people will go to zsh or fish because of the syntax highlighting and autocompletion which is nice. But bash actually has this as well, it is a project called blesh and it makes bash probably better than zsh and maybe even fish. This project is the reason ive been using bash for 3 years now.
You don't actually need blesh to setup auto-complete with bash, it just helps to automate the process. I've been using auto-complete with bash for a couple of decades, though most distros now come with it setup with sane and useful defaults.
I started with bash (the reasonable shell 20 sth years ago), and when zsh and fish became a thing, I was really excited. New features, the next step, everything shiny, I'm in!! And then I noticed that I was less productive, because I could do everything I wanted in bash, without learning the small and not so small differences between bash and the others. So I went back to bash, found oh my bash, found blesh, and never looked back. That said, I think zsh and fish really pushed bash related projects, which is good. Kudos to the devs on all sides.
i am really annoyed by fish, it is confusing when bash scripts dont work on it and this didnt happen to me but believe it or not someone i know who is a beginner with GNU/Linux accidentally broke his desktop environment to a completely black screen by trying to install fish and misconfiguring his system, i troubleshooted it for him and i think i remember the problem was he put "exec fish" at the top of his bashrc which was hanging the script his display manager used to start DEs. i wouldn't have done it like that so i made him delete that and reinstall fish a more normal way
@@tacokoneko For tiling window manager users that use fish, you can just have your terminal keybind as "alacritty -e fish" for example, and it will work just fine.
@@tacokoneko tbf, that's more a bash and de related error than a fish issue, but yes, it can lead to annoying problems. In my case, I use a lot of bash scripting directly in the command line, for loops, pipes, redirecting output etc., and if I had to learn al of that new, just to be confused again on the next computer I log into (which may not be under my control....)
Sooo, that wasnt fish problem per se, but just fucking up .bashrc. And I cant understand that " it is confusing when bash scripts dont work on it " . Do you mean setting fish as a login shell? @@tacokoneko
Currently on Fish. Yeah, it heavily leans _away_ from POSIX, but whatever. It's comfortable, and easier for me to restart configurations if I need to. I could pull up bash if I needed it for a very sensitive operation that calls for it anyhow. Anyways hope the summer's been treating you well. :)
Bash is great and tends to be underrated by those who switch to zsh and fish for the "cool factor" instead of specific features, but to each their own. I spend most of my time in bash when I'm on a terminal as it's usually for working on a server and servers should generally follow the "less is more" approach so I don't normally install additional shells on them. On my home PC I use zsh, but that's for tinkering, not serious work so any slowdowns from plugins really doesn't bother me with it. Bash is my work horse while others are for tinkering and fun.
Hey Matt, I used to use fish, but I got tired of some random POSIX thing not working and having to switch to bash for a single command, so I recently made the switch to zsh, replicating all the features of fish into zsh. Now I don't use oh my zsh, because it is just too slow. But even without it, there is a slight, but noticeable speed decrease compared to fish. I didn't even consider bash as an option, so now that you reminded me of it, I think I'll just try to configure bash in the same way, and hope for the best.
Good video. Might be time to try bash again. I've never had any big complaints using zsh, but I have noticed slow startup speeds sometimes for whatever reason (even without oh-my-zsh).
Do you regenerate the compinit on each startup? # generate compinit only every 8 hours for _ in "$HOME"/.zcompdump(N.mh+8); do compinit bashcompinit done
Zsh is my new friend literally just for completion. I don't need 17 plugins, i just want to see the git thing and completion and better history keeping
A few years ago we only had xterm and after urxvt, we must to configure all the presentation of a terminal emulator (prompt, colors, background, font, size, alias, etc) into bashrc or xrsesources. In other side, with Bash we learned script doing agenda, notes, editors, wget manager and thousand more things. We learned Bash we can.
I've used both over the last two decades. For servers at work, I leave everything default (even if that default is ksh). For scripting, I stay on bash for compatibility. For my personal computers, it's zsh with just the git plugin, and a pretty prompt on the right. (I like the left prompt to always be the same size, so current dir and branch go to the right)
Completely agreed. Shouldn't I spend a little bit of time on learning about the previous reliable choices, how to use them properly, extending them and at last know how to deal with the issues I find and try to improve that entity's quality and share it with others. Thank you for the very eye opening podcast.
For me it's because zsh broke too many of my configurations and scripts. I'm an old-school unix user starting form SunOS way back in 1998 and the Solaris, Tru64, HPUX before installing Linux on my own computer (these days I'm a mix of macOS and Linux). My sell configs and personal scripts start from those SunOS/Solaris days and have been with me for over 2 decades. I "finalized" my preferred terminal setup some time around 2015. Tried to configure zsh to fit with my config and spent 2 days doing it and failing. I gave up and switched back to bash. The only reason I used zsh in the first place? It's the default shell on newer macOS installs.
This is pretty much my experience as well. I switched away from alternate shells when I realized bash can already do all that. In chasing the KISS principle, I forgot actually keep things simple and keeping the default components.
I struggled with the shell until i experimented with openbsd and found ksh more clear and easier to grasp. A year later, i made a second attempt at fish and enjoyed the clarity of its syntax, structure and command set. they built in so much useful stuff while avoiding bloat. therefore, self contained fish scripts can do most everyday things without needing to break out to bc, lua, etc.
Zsh with starship, zoxide, fzf-tab complete, zsh-syntax highlighting, auto-suggestions and a few lesser known zstyle settings is insanely good... Maybe I'll post my config because I cannot use bash anymore... its noticeably worse as an interactive shell. I use it for scripting because its universal and ShellCheck / bash-language-server work with it. Oh-my-zsh is just horrible and it provides nothing of note. "plugins" are just sourcing zsh scripts and you can do that yourself. You also need to set you ZDOTDIR to somewhere else than home.
you can use fzf completion in bash, it's complitely different program has nothing to do with your shell. starship - no comments. I just use ">" or "#", but you do you I guess .. I don't know what's zoxide. syntax highlighting - Do you code on the command line? Or are you visually impaired and can't distinguish among three, five words: what's the binary name, what's the positional parameter and its options?...
@@JamesSmith-ix5jd I'll just have to show y'all because the way you all use the terminal is so wild to me. I want my experience to be good because I constantly use it. Also it's not fzf that's special, is the zstyle and z complete options that make fzf tab complete special. You can easily auto fill paths and flags without having to guess if it's correct or not. I'll post a video when I get home
from bash manpage: "completion-ignore-case (Off) - If set to On, readline performs filename matching and completion in a case-insensitive fashion.", also look at "colored-completion-prefix", "menu-complete" (does the cycle-through-options thing instead of listing options...), this things require learning a bit about "readline" and setting a ~/.inputrc file; for the prefix-search in history using the arrow keys, put this in your ~/.inputrc file: # Contextual history search with arrows "\e[A": history-search-backward "\e[B": history-search-forward then do "Ctrl-x Ctrl-r" to reread ~/.inputrc (or relogin, start a new terminal, etc.)
From someone who transitioned from Windows 98 (Cygwin) to RedHat 1.0 then MacOS 9.5 due to BASH, I felt this video was fuzzy and warm. Currently on a MBA 13" M2 and still using BASH for a crap-load of reasons. I get weather info the same way I did 25 years ago, format it the same way, and it works. I get news headlines the same way I figured out 15 years ago and most RSS news feeds still work, and there they are!. My email notifications, server scripts, and so much more were figured out when I was younger, and if it ain't broke ... don't fix it. $0.02
I use zsh, but without any frameworks, instead I have my own framework like config which lazy-loads plugins and it’s super fast (at least to my eyes) It is to a point that it’s really hard for me to switch shells (call it shell lock-in) 😅
@@alexstone691 glad to know, I like zsh for it “just works” way of getting things done. Plus all bash scripts are valid zsh scripts. I still wonder what it takes to make it posix compliant and make it work with tools like shellcheck.
I used Bash and refused to change for over a decade, and actually just switched to zsh in the past year. The plugins from Oh-My-Zsh are all over-engineered and need to be used sparingly. For the most part, it is better to just copy over the parts of them that you need into your .zshrc file. Sometimes I just want some extra completions for sub-commands of s specific program, and not 900 aliases, which is a common thing for zsh plugins. Either way, I don't care what shell anyone uses. The point of Linux is freedom to choose, so I am happy that you are happy being back with Bash, and I am equally happy with the people still content using zsh, fish, etc. I am not a paid sponsor of Bash, therefore see little reason to tell people to switch to it.
Yeah, the "and here is why you should too" part confuse me. And he seems to not understand how to config zsh. Environment variables in the shell config file?? I find the whole video just very bad quality tbh. As for me, I tend to use zsh in graphical interfaces (the translucant autocomplete is really nice) and bash in cli only situations, like debian servers and stuff, no need for zsh there.
I use windows as well, but didn't stop tinkering, I learned powershell and how to gut this OS to the bare minimum (30 services, 400MB RAM usage). Once tinkerer forever tinkerer.
I use bash (always have) and it does have tab completion even for incomplete words. Have to check what I did to enable that cause I can't remember though.
I recently switched from Arch to Debian. I had long ago switched to zsh with a few useful plugin scripts but not using Oh my zsh or any other helper. Just syntax highlighting, history search, cli prompt etc. The new debian install was basic bash and while I intended not to install zsh this time, I found it's basic setup instantly annoying and I missed my tweaked setup. As before, using the z shell doesn't mean foregoing bash scripting. All my scripts were always in bash. All I was using zsh for was the user shell. Possibly I could have set up something similar in bash, but since all my configs were sitting in a backup, it was just easier to install zsh and restore the needed dot files than build a working set for bash that might give me only some of the functionality back.
Didn't Jack@Linux make some videos on how to do the same Zsh stuff in bash and some scripts? You might want to check them out. I use Zsh because I have prompts I like and have them rotate each time I open a terminal and the stuff you showed in the video. I think Jake figured out how to do that with a script, I might be wrong. 🤔 Thanks Matt! LLAP 🖖
I never had any slowness in zsh but I dont use any frameworks like OMZ. I just have syntax highlight and autocomplete plugins and everything else is in my .zshrc. If you use custom prompts like starship they can slow down any shell dramatically if you have lot going on there.
We use the Korn shell across our various unix flavours of dev machines at work so that would be my shell of choice at home too, however, ksh is marked as unstable in my Linux distribution, so in the interests of stability I too use Bash, however I have "set -o vi" in my .bashrc which enables command line editing in a way that is familiar to me.
If there is a shebang, the script will run with that program. That’s the whole point of shebang. OMG, the video shouts “i don’t know what the hack i am doing” 🤦♂️
Definitely would like a tutorial. Especially on the history search. I figured that out once, but never saved it in the bashrc for some reason and I haven’t been able to figure it out again.
what's the "interactive tab complete"?, the cycle-through-options thing? if so, look at 'menu-complete' in bash's manpage, you replace the TAB function with that in your ~/.inputrc; also look at "colored-completion-prefix"
These zsh related files can be set to a different location quite easily, ```export ZSH_COMPDUMP=$HOME/.cache/.zcompdump-$HOST export HISTFILE=~/.zsh_history```. I personally use the zsh thing where u tab through options a lot, like really a lot, if bash had that i would switch, but till then i stay with zsh and oh-my-zsh for sure, but still nice video, didnt knew that bash could do the thing with the history and non-case-sensitive tab completion.
I so so wanted to stick with bash, but a company laptop which is a Macbook is having ZSH by default. I don’t want to maintain separate dotfiles for both shells so I have to switch to ZSH. I set it up from scratch without oh-my-zsh and I can tell it’s much slower than bash.
Agreed. I still prefer zsh for select few things bash doesn't support, but it's not much(of what I use myself, it does support a good deal more though, just often not the general quoted stuff lol, where bash could same if configured). It's not slower for me, neither known as such generally, the opposite actually, but neither use ohmyzsh as you said.
My zsh startups in few miliseconds. Bash is slower for me. I use zsh-defer and pull only needed ozs plugins via my gotfile manager and source them manually with zsh-defer. Also I prefer to use zsh-autosuggestions, which is impossible on bash right now. Also zsh out of box has good color support, separate binaries/aliases/files during tab complete. If you spend some time and understand how zsh works iit give you much more power compare to old bash
If I recall correctly in my tests st+bash with very few patches were starting in ~40ms. urxvt starts also in about 40ms (20ms if demonized) zsh in something like alacritty can't start faster than these two, it is physically not possible, I can even feel the delay, which would suggest 100-200ms startup time, but I didn't bother testing it.
@@JamesSmith-ix5jd It is started immediately for me. Wezterm terminal on Swaywm Arch Linux. Zsh fully configured and bash also configured as well, but without plugins
ZSH is not compatible with my workflow. I resent the likes of Manjaro and Mint changing the default to zsh. It breaks things and it makes it harder to provide help to newbies (or not-so-newbies) as now you have to give extra commands to switch to a BASH session and back, which is an extra hurdle for them to trip over. Like you point out, the BASH prompt can be customized .. like mine, which makes it easy to see at a glance which machine and user account I'm logged in to.
@@eyeYT Yup, Apple really hates the GPL and Bash switched to it a long time ago, hence newer versions of bash are not "compatible" as (god forbid), Apple would have to release the source code for everything shipped with an Apple product.
I've used both and love them both. But these days I just use zsh because the distro I mainly use for work uses zsh and it does the job I need it to and like the consistency.
I have been considering switching to zsh because o work on a project with some developers who work on Mac, and I keep forgetting that I have to test every bash script on MacOS to make sure I haven’t used any features that the native bash on MacOS will never have. If my scripts are all for zsh, then they will work the same on all platforms (that have zsh installed). I haven’t actually tried making that switch or actually using zsh at all yet though. Does my reasoning seem right or wrong?
It's bash really faster or it's your zsh configuration was bulky? I mean you're talking about noticable problems with cd-ing and omz so I guess the problem might be solved simply by turning some things off? I personally find the zsh more useful by default especially on servers. Bash on newly created machine is just a pain. So I install zsh and... I don't even install plugins, it works okay already. So for me bare zsh is better then bare bash. And if I go with zsh in servers why should I do other way on personal machine?
Can we also get highlighted command suggestion like fish does when you start typing anything... Like when you type something, suggest a command complition in different color, and if you misspelt then change color indicating that this is not a command
I've pretty much exclusively used ZSH on Linux. I'd consider myself a rather advanced user, with over 100_000 executed commands logged, and probably like 1000+ hours of just fucking around with shell features and stupidly long pipelines at this point. My scripts are also pretty much all #!/bin/zsh, except the few that are so minimal and portable I can do #!/bin/sh for. I use stock ZSH, no patches, no plugins besides ZSH Syntax Highlighting, no frameworks, integration hooks for my terminal emulator (WezTerm) and history manager (Atuin), and then a 500 line handwritten config on my current machine (old one was 700. This is only counting my primary interactive configuration file.). I tried BASH recently when I made a new user. It was an awful experience. BASH might largely be able to match what I do in ZSH, but ZSH is so much more sensible and just better, and really the only reason IMHO to ever use BASH over ZSH is that BASH is more widespread (and that the improvements of ZSH can cause significant bugs if trying to use it as BASH code). That's it. Otherwise there wouldn't even be a reason for me to have BASH on my machine, let alone actually use it. Also there are definite places where besides just having the better defaults, it has extremely useful functionality. example complex ZSH command of mine from a few days ago (this one deletes a round of GNU cp's file backups if they're identical. Constructed this because duperemove wasn't working correctly): ```zsh yes | for file in /run/user/1000/no-atime_mb/DH/norp/mir/**.\~#\~(.); do prev_ver="${file:r}$(n="$(( "$(rgft1 '\.~(\d+)~$'
Bash does everything I need. I've tried zsh briefly, but being a non-default shell it doesn't come preconfigured like bash and I didn't want to put in the effort to do it myself. And Bash is certainly better than ksh or csh. So no need to switch.
I switched from zsh because it was crashing on my not-so-complex git and docker scripts. Bash was rock solid. Regarding eye candy, I don’t need that either, my bash prompt is PS1=“\w ->” and that’s all I need, really.
I like Zsh features more, because they are easier to configure. In terms of speed of execution commands - they both are the same. Also, I never used OZSH or any other ready to use "improver" of Zsh. Therefore I had never seen any performance issue of Zsh. Anyway, shell scripts I use are written for POSIX compliant shell, I avoid writing scripts for Bash or Zsh. If I have trouble with POSIX compliant scripts - I just write script in Python.
for the prefix-search in history using the arrow keys, put this in your ~/.inputrc file: # Contextual history search with arrows "\e[A": history-search-backward "\e[B": history-search-forward then do "Ctrl-x Ctrl-r" to reread ~/.inputrc (or relogin, start a new terminal, etc.) check out the "READLINE" section of bash's manpage
The great thing about Bash is that it's already installed in nearly every Linux environment you'll come across (I'm sure someone could prove me wrong on that). Why should I use a shell that I'll need to install on every new system and every new VM I use?
Tbh. The main reason of why I switched to zsh, was to make the prompt look like that simple ~>. But if I can do it with bash too, and some other things, then I can also switch back to bash. Just like I turned off all plugins in vim, and just used basic vimrc commands, like you have shown in previous videos. I'm slowly coming back to defaults. I'll just now will have to see, how to uninstall oh-my-zsh and zsh, and then, how to do some of zsh things in bash, as I completely don't know any coding language.
@@paulj505 Yes, PS1 is the variable containing the prompt "string", \W is the special characters for "current directory" and displays ~ for $HOME. Use \w if you want the full path. If you want a literal tilde instead, just use PS1='~> '
I set up and configured everything I wanted in bash (autocomoletion mainly with blesh), but yhe result is very slow especially when it pulls suggestions (since I'm on wsl and blesh is very slow when path includes/mnt/c) so now I'm on fish as interactive shell and if I ever need automations I'll just write script in bash or even non-shell language
I stared out in sh and ksh back in the day so bash was a natural progression for me so I've always stuck with it. Like you say, many systems scripts I've crafted over time have started with #!/usr/bin/bash or similar so why would use zsh in my shell but I still tried it out particularly when I had to use a mac. Thats where I think zsh comes in as I believe, someone correct me but I believe mac froze the version of bash in their os, so you would always have an old ferclunkey version of bash on mac unless you brew installed a modern ( current ) one. I dont know for sure now as I've not checked, could be wrong on how it is right now. But I like concentraing on what is on most linux systems anyways so my productivity stays high. Learning shortcuts in bash like cntrl-r to find commands in the history work everywhere there is bash, I dont need zsh to be set up so why need to change my workstation to be different ? Interesting video, comment and expose of bash and its merits, thanks. I'm off to look at oh my bash now - you made me do it ! ;)
I have a question regarding bash and zsh scripting: if I work in an enterprise, should I rather use bash (for scripting) instead of zsh? (Some scripts using zsh are not running on bash?). Thank you for your answer 😀
bash is most common and even with bash most people don't know advanced scripting, zsh has even more features, so if you write zsh scripts it's quite possible you'll end up being the only one maintaining them
In my opinion if one wants to switch then might aswell to fish instead of zsh since neither of them are POSIX compliant but fish is way lighter and faster.
IDK man. I mean, with the exception of the functions, or whatever, that actually require bash to work properly, I'm not sure why I'd need bash of zsh when fish exists.
Can Zsh's Esc-e shortcut be replicated on bash? That and the tab autoselect are what keep me on zsh. Though I would love to move back to bash as I think I've found commands that work in bash but not zsh because of Zsh's globbing/expansion features, and on bash ". " is equivalent to source but it is not on zsh
I was thinking about this recently. I mostly use zsh as a themes manager, save for a few real plugins. On the real plug ins thing, I looked at what many of them are - premade aliases - if i am using it often i would just make my own with a name i will actually remember.
I will be thrilled if you do a video on how you ended up with a terminal like that. Also, a fan boy of Opensuse Tumbleweed (I know, don't mean anything). 😅 Thank you
:) saying something in internet doesn't need to mean anything... you have freedom to say what every you want... how is opensuse?? is it better than fedora???
@vaisakhkm783 In my opinion, yes. But I will not use the word "better" here. I mean, Linux foundation in great, distributions are also amazing, and each of them offer what a selected group of users like and want. I tested and used Ubuntu, Fedora... but I found myself at home when I installed Opensuse from day one. Not that it was better or something like that, but it just worked the way I wanted with no hard work. I also appreciate the fact they added a powerful GUI software as YAST because it really helps manage our system the simplest way without the need to find each file through CLI. In spite of being down of software availability (even if we can add more support through snap and flatpak) ; yes, Opensuse (Tumbleweed) "better".
Honestly, I've never even needed the advanced features anyway, so Bash never even falsely felt lacking as a result. Of course, many of my terminal-use habits are derived from my earlier days when I was dicking around in DOS VMs, so a lot of methods I use are very not ambitious, but still. Bash works well.
Zsh scripting is a little different. That's why I stopped using it a few years ago. Everyone just has bash and yes you can make it do most of the cool stuff.
When I'm not in fish I feel disconnected or restricted. If you could make bash work and look like fish now that would be something. But your bash is like a 2 wheeled car. It's sorta usable but not very.
from bash manpage: "completion-ignore-case (Off) - If set to On, readline performs filename matching and completion in a case-insensitive fashion.", also look at "colored-completion-prefix", "menu-complete" (does the cycle-through-options thing instead of listing options...), this things require learning a bit about "readline" and setting a ~/.inputrc file; for the prefix-search in history using the arrow keys, put this in your ~/.inputrc file: # Contextual history search with arrows "\e[A": history-search-backward "\e[B": history-search-forward then do "Ctrl-x Ctrl-r" to reread ~/.inputrc (or relogin, start a new terminal, etc.)
The speed issue doesn't seem relevant. Your points about ~ clutter seem valid, but that disease affects every shell user. And distro hopping is worse for it (it should be easier to distro hop). Zsh is the linga franca of future OSes, for better of worse. When Apple switched to zsh for their default shell, I decided to just switch on all my computers. For anyone reading, try to avoid the "oh my xxx" stuff. Instead, build up your features manually. You will spend more time but you'll learn more. Even after decades of shell usage I don't consider myself an expert.
Want more Linux content? Give me a follow over on Mastodon! fosstodon.org/@thelinuxcast
What about dash?
Sounds like the problem wasn't zsh, sounds like the problem was your shitty config
@TheLinuxCast is that a tutorial created? Available! ? please provide some updates...
Of course a tutorial on making bash "more useful" would be welcome.
Yeah. Sometimes you don't even know if some useful feature even exists.
How to memorize commands 104;
As someone who came from the UNIX world, I can tell you bash is a fantastic full featured shell compared to the Bourne sh shell we used back then.
I'm not a fan of spending days configuring things, I'm a simple man who enjoys things preconfigured, maybe with just a little tiny bit of tweaking. So when Manjaro gave me a beautiful zsh configuration out of the box, with good autocomplete, nice prompt with git info, showing timing and result code of each program I run, I was very happy and remain happy still. It works fast and well, so kudos to people who made it. Once you have a good working config, no reason to change it.
Show me your neovim config
@@codeman99-dev Hehe, I use Helix instead
Good for You and We respect that opinion.
@@codeman99-dev it's on astronvim GitHub
I know that a lot of people will go to zsh or fish because of the syntax highlighting and autocompletion which is nice. But bash actually has this as well, it is a project called blesh and it makes bash probably better than zsh and maybe even fish. This project is the reason ive been using bash for 3 years now.
yes, I actually used blesh before switch to zsh, the reason is blesh was slow. Definitely slower than zsh with syntax highlighting, autosuggestion
You don't actually need blesh to setup auto-complete with bash, it just helps to automate the process. I've been using auto-complete with bash for a couple of decades, though most distros now come with it setup with sane and useful defaults.
Tried it recently, the completions do seem better.
I started with bash (the reasonable shell 20 sth years ago), and when zsh and fish became a thing, I was really excited. New features, the next step, everything shiny, I'm in!!
And then I noticed that I was less productive, because I could do everything I wanted in bash, without learning the small and not so small differences between bash and the others.
So I went back to bash, found oh my bash, found blesh, and never looked back.
That said, I think zsh and fish really pushed bash related projects, which is good. Kudos to the devs on all sides.
i am really annoyed by fish, it is confusing when bash scripts dont work on it and this didnt happen to me but believe it or not someone i know who is a beginner with GNU/Linux accidentally broke his desktop environment to a completely black screen by trying to install fish and misconfiguring his system, i troubleshooted it for him and i think i remember the problem was he put "exec fish" at the top of his bashrc which was hanging the script his display manager used to start DEs. i wouldn't have done it like that so i made him delete that and reinstall fish a more normal way
@@tacokoneko For tiling window manager users that use fish, you can just have your terminal keybind as "alacritty -e fish" for example, and it will work just fine.
@@tacokoneko tbf, that's more a bash and de related error than a fish issue, but yes, it can lead to annoying problems. In my case, I use a lot of bash scripting directly in the command line, for loops, pipes, redirecting output etc., and if I had to learn al of that new, just to be confused again on the next computer I log into (which may not be under my control....)
Sooo, that wasnt fish problem per se, but just fucking up .bashrc. And I cant understand that " it is confusing when bash scripts dont work on it " . Do you mean setting fish as a login shell? @@tacokoneko
Currently on Fish. Yeah, it heavily leans _away_ from POSIX, but whatever. It's comfortable, and easier for me to restart configurations if I need to. I could pull up bash if I needed it for a very sensitive operation that calls for it anyhow. Anyways hope the summer's been treating you well. :)
@@phonewithoutquestion80 I switched to fish once I tried it's VI mode. Fish with starship has been great.
Bash is great and tends to be underrated by those who switch to zsh and fish for the "cool factor" instead of specific features, but to each their own. I spend most of my time in bash when I'm on a terminal as it's usually for working on a server and servers should generally follow the "less is more" approach so I don't normally install additional shells on them.
On my home PC I use zsh, but that's for tinkering, not serious work so any slowdowns from plugins really doesn't bother me with it. Bash is my work horse while others are for tinkering and fun.
Hey Matt, I used to use fish, but I got tired of some random POSIX thing not working and having to switch to bash for a single command, so I recently made the switch to zsh, replicating all the features of fish into zsh. Now I don't use oh my zsh, because it is just too slow. But even without it, there is a slight, but noticeable speed decrease compared to fish. I didn't even consider bash as an option, so now that you reminded me of it, I think I'll just try to configure bash in the same way, and hope for the best.
I prefer using bash on my workstations because its on most server I need to ssh into and my muscle memory is used to it.
+1 for the use of "muscle memory" 👏
But I like nushell more
nushell is really cool, if they had a better vi mode and abbreviations I would definitely use it. And it's still in pretty early stages
Another one for nushell. Fast, and easier for complex scripts.
@@RM-hn6ir Hi. Do you have ai issue with multi-line prompts?
drop a tutorial on the bash configuration, until that happens i am going to stay on zsh
I never really understood why zsh really took off. It doesn’t seem add much over bash or as much as something like fish.
Good video. Might be time to try bash again. I've never had any big complaints using zsh, but I have noticed slow startup speeds sometimes for whatever reason (even without oh-my-zsh).
Do you regenerate the compinit on each startup?
# generate compinit only every 8 hours
for _ in "$HOME"/.zcompdump(N.mh+8); do
compinit
bashcompinit
done
what??
i basically never noticed any slowdown... i am using zap-zsh.. just copied chis@machine one...
Zsh is my new friend literally just for completion. I don't need 17 plugins, i just want to see the git thing and completion and better history keeping
A few years ago we only had xterm and after urxvt, we must to configure all the presentation of a terminal emulator (prompt, colors, background, font, size, alias, etc) into bashrc or xrsesources. In other side, with Bash we learned script doing agenda, notes, editors, wget manager and thousand more things. We learned Bash we can.
I've used both over the last two decades. For servers at work, I leave everything default (even if that default is ksh). For scripting, I stay on bash for compatibility. For my personal computers, it's zsh with just the git plugin, and a pretty prompt on the right. (I like the left prompt to always be the same size, so current dir and branch go to the right)
I switched to zsh cause its also available on macos, so i can use the same config everywhere.
Completely agreed. Shouldn't I spend a little bit of time on learning about the previous reliable choices, how to use them properly, extending them and at last know how to deal with the issues I find and try to improve that entity's quality and share it with others. Thank you for the very eye opening podcast.
Fish for user interface and bash for scripting. I am surprised you say fish is weird. Fish is so easy and out of the box fully featured.
ksh for scripting and bash for interactive shell.
Fish scripting is superior in every way
@@5fr4ewq Nah....fish is not even POSIX compliant. It's friendly to use and that's it. Other than that, fish is just fish lmao.
Bro doesn't like pescatarians ... lmao
@@tobiadeniji6630 Fish is superior because it's not POSIX-like. No shell is POSIX compliant BTW, maybe aside dash.
For me it's because zsh broke too many of my configurations and scripts. I'm an old-school unix user starting form SunOS way back in 1998 and the Solaris, Tru64, HPUX before installing Linux on my own computer (these days I'm a mix of macOS and Linux). My sell configs and personal scripts start from those SunOS/Solaris days and have been with me for over 2 decades. I "finalized" my preferred terminal setup some time around 2015. Tried to configure zsh to fit with my config and spent 2 days doing it and failing. I gave up and switched back to bash. The only reason I used zsh in the first place? It's the default shell on newer macOS installs.
This is pretty much my experience as well. I switched away from alternate shells when I realized bash can already do all that. In chasing the KISS principle, I forgot actually keep things simple and keeping the default components.
I struggled with the shell until i experimented with openbsd and found ksh more clear and easier to grasp. A year later, i made a second attempt at fish and enjoyed the clarity of its syntax, structure and command set. they built in so much useful stuff while avoiding bloat.
therefore, self contained fish scripts can do most everyday things without needing to break out to bc, lua, etc.
4:36 You can do the same with Bash. You can also use the reverse history search which is very useful
I'd like the tutorial for personalizing bash that you mentioned
Zsh with starship, zoxide, fzf-tab complete, zsh-syntax highlighting, auto-suggestions and a few lesser known zstyle settings is insanely good... Maybe I'll post my config because I cannot use bash anymore... its noticeably worse as an interactive shell. I use it for scripting because its universal and ShellCheck / bash-language-server work with it. Oh-my-zsh is just horrible and it provides nothing of note. "plugins" are just sourcing zsh scripts and you can do that yourself. You also need to set you ZDOTDIR to somewhere else than home.
Do you have public dotfiles somewhere?
This is my exact setup
you can use fzf completion in bash, it's complitely different program has nothing to do with your shell.
starship - no comments. I just use ">" or "#", but you do you I guess ..
I don't know what's zoxide.
syntax highlighting - Do you code on the command line? Or are you visually impaired and can't distinguish among three, five words: what's the binary name, what's the positional parameter and its options?...
@@JamesSmith-ix5jd I'll just have to show y'all because the way you all use the terminal is so wild to me. I want my experience to be good because I constantly use it. Also it's not fzf that's special, is the zstyle and z complete options that make fzf tab complete special. You can easily auto fill paths and flags without having to guess if it's correct or not. I'll post a video when I get home
@@sweetbabyalaska Are you home yet?
Not really about the video, but the window manager looks fantastic.
I'm light years to achieve that. I'm stuck on DE XD
from bash manpage: "completion-ignore-case (Off) - If set to On, readline performs filename matching and completion in a case-insensitive fashion.", also look at "colored-completion-prefix", "menu-complete" (does the cycle-through-options thing instead of listing options...), this things require learning a bit about "readline" and setting a ~/.inputrc file; for the prefix-search in history using the arrow keys, put this in your ~/.inputrc file:
# Contextual history search with arrows
"\e[A": history-search-backward
"\e[B": history-search-forward
then do "Ctrl-x Ctrl-r" to reread ~/.inputrc (or relogin, start a new terminal, etc.)
From someone who transitioned from Windows 98 (Cygwin) to RedHat 1.0 then MacOS 9.5 due to BASH, I felt this video was fuzzy and warm. Currently on a MBA 13" M2 and still using BASH for a crap-load of reasons. I get weather info the same way I did 25 years ago, format it the same way, and it works. I get news headlines the same way I figured out 15 years ago and most RSS news feeds still work, and there they are!. My email notifications, server scripts, and so much more were figured out when I was younger, and if it ain't broke ... don't fix it. $0.02
I want a tutorial on customize bash
vim and bash because they're everywhere you go - and you need to be able to do it anywhere
Yeah, make a vid about how you added these features.
I switched back on macOS, too. The main reason was that I only switched to macOS to have a convenient platform with Bash.
I use zsh, but without any frameworks, instead I have my own framework like config which lazy-loads plugins and it’s super fast (at least to my eyes)
It is to a point that it’s really hard for me to switch shells (call it shell lock-in) 😅
Im the same, wrote everything i need for zsh except syntax highlighting and its super fast cause i set it up properly
@@alexstone691 glad to know, I like zsh for it “just works” way of getting things done. Plus all bash scripts are valid zsh scripts.
I still wonder what it takes to make it posix compliant and make it work with tools like shellcheck.
A tutorial on bash would be beneficial. Many thanks for your consideration.
6:04 for example,
`< filename.txt` to view file contents is a zsh thing, not POSIX. and bash doesn't have that.
I used Bash and refused to change for over a decade, and actually just switched to zsh in the past year. The plugins from Oh-My-Zsh are all over-engineered and need to be used sparingly. For the most part, it is better to just copy over the parts of them that you need into your .zshrc file. Sometimes I just want some extra completions for sub-commands of s specific program, and not 900 aliases, which is a common thing for zsh plugins.
Either way, I don't care what shell anyone uses. The point of Linux is freedom to choose, so I am happy that you are happy being back with Bash, and I am equally happy with the people still content using zsh, fish, etc. I am not a paid sponsor of Bash, therefore see little reason to tell people to switch to it.
Yeah, the "and here is why you should too" part confuse me. And he seems to not understand how to config zsh. Environment variables in the shell config file?? I find the whole video just very bad quality tbh.
As for me, I tend to use zsh in graphical interfaces (the translucant autocomplete is really nice) and bash in cli only situations, like debian servers and stuff, no need for zsh there.
I like fish along with OMF. I won't go back. The big downside is the minor scripting language differences.
I got tired of tinkering with my linux OS and reinstalled win 11 enterprise with telemetry disabled..... never looked back.........
You could have gotten tired of tinkering and just... you know... stopped tinkering and actually used the OS
I use windows as well, but didn't stop tinkering, I learned powershell and how to gut this OS to the bare minimum (30 services, 400MB RAM usage).
Once tinkerer forever tinkerer.
I use bash (always have) and it does have tab completion even for incomplete words. Have to check what I did to enable that cause I can't remember though.
I recently switched from Arch to Debian. I had long ago switched to zsh with a few useful plugin scripts but not using Oh my zsh or any other helper. Just syntax highlighting, history search, cli prompt etc. The new debian install was basic bash and while I intended not to install zsh this time, I found it's basic setup instantly annoying and I missed my tweaked setup.
As before, using the z shell doesn't mean foregoing bash scripting. All my scripts were always in bash. All I was using zsh for was the user shell.
Possibly I could have set up something similar in bash, but since all my configs were sitting in a backup, it was just easier to install zsh and restore the needed dot files than build a working set for bash that might give me only some of the functionality back.
Didn't Jack@Linux make some videos on how to do the same Zsh stuff in bash and some scripts? You might want to check them out. I use Zsh because I have prompts I like and have them rotate each time I open a terminal and the stuff you showed in the video. I think Jake figured out how to do that with a script, I might be wrong. 🤔
Thanks Matt!
LLAP 🖖
There are several Bash shell prompt generators on the net that can cut the time to make your personal one by hand probably in half or more.
I never had any slowness in zsh but I dont use any frameworks like OMZ. I just have syntax highlight and autocomplete plugins and everything else is in my .zshrc. If you use custom prompts like starship they can slow down any shell dramatically if you have lot going on there.
We use the Korn shell across our various unix flavours of dev machines at work so that would be my shell of choice at home too, however, ksh is marked as unstable in my Linux distribution, so in the interests of stability I too use Bash, however I have "set -o vi" in my .bashrc which enables command line editing in a way that is familiar to me.
there's also mksh which should be closer to ksh than bash, i think
If there is a shebang, the script will run with that program. That’s the whole point of shebang. OMG, the video shouts “i don’t know what the hack i am doing” 🤦♂️
I use Tilix, the Tiling Linux Terminal. Great to keep related work together in one tiled Window :)
Definitely would like a tutorial. Especially on the history search. I figured that out once, but never saved it in the bashrc for some reason and I haven’t been able to figure it out again.
If bash can get zsh's interactive tab complete, I'll come back
what's the "interactive tab complete"?, the cycle-through-options thing? if so, look at 'menu-complete' in bash's manpage, you replace the TAB function with that in your ~/.inputrc; also look at "colored-completion-prefix"
These zsh related files can be set to a different location quite easily, ```export ZSH_COMPDUMP=$HOME/.cache/.zcompdump-$HOST
export HISTFILE=~/.zsh_history```. I personally use the zsh thing where u tab through options a lot, like really a lot, if bash had that i would switch, but till then i stay with zsh and oh-my-zsh for sure, but still nice video, didnt knew that bash could do the thing with the history and non-case-sensitive tab completion.
I so so wanted to stick with bash, but a company laptop which is a Macbook is having ZSH by default. I don’t want to maintain separate dotfiles for both shells so I have to switch to ZSH. I set it up from scratch without oh-my-zsh and I can tell it’s much slower than bash.
Agreed. I still prefer zsh for select few things bash doesn't support, but it's not much(of what I use myself, it does support a good deal more though, just often not the general quoted stuff lol, where bash could same if configured). It's not slower for me, neither known as such generally, the opposite actually, but neither use ohmyzsh as you said.
My zsh startups in few miliseconds. Bash is slower for me. I use zsh-defer and pull only needed ozs plugins via my gotfile manager and source them manually with zsh-defer. Also I prefer to use zsh-autosuggestions, which is impossible on bash right now. Also zsh out of box has good color support, separate binaries/aliases/files during tab complete. If you spend some time and understand how zsh works iit give you much more power compare to old bash
If I recall correctly in my tests st+bash with very few patches were starting in ~40ms.
urxvt starts also in about 40ms (20ms if demonized)
zsh in something like alacritty can't start faster than these two, it is physically not possible, I can even feel the delay, which would suggest 100-200ms startup time, but I didn't bother testing it.
@@JamesSmith-ix5jd It is started immediately for me. Wezterm terminal on Swaywm Arch Linux. Zsh fully configured and bash also configured as well, but without plugins
Your shell design/theme looks great! Would you mind sharing the details with us?
I use oh my posh to get that setup. It's just the default theme.
ZSH is not compatible with my workflow. I resent the likes of Manjaro and Mint changing the default to zsh. It breaks things and it makes it harder to provide help to newbies (or not-so-newbies) as now you have to give extra commands to switch to a BASH session and back, which is an extra hurdle for them to trip over. Like you point out, the BASH prompt can be customized .. like mine, which makes it easy to see at a glance which machine and user account I'm logged in to.
What does Matt uses as his DE and WM? I can see he's using OpenSuse as the distro.
I like how simple & minimalistic the layout on his screen is.
He uses OpenSuse Tumbleweed and GNOME. Not sure about the WM
Please make a video showing how you moved those features to Bash 🚀 Awesome video!
I currently use zsh for interactive shell only and use bash for all the scripting.
Why did Apple make zsh the default in Mac OS then?
Because of licensing Issues
@@eyeYT Yup, Apple really hates the GPL and Bash switched to it a long time ago, hence newer versions of bash are not "compatible" as (god forbid), Apple would have to release the source code for everything shipped with an Apple product.
Great take, fully agreed
One reason I like using bash is the same as a reason I like using Vim: it (or something compatible with it) comes on almost every linux machine
Thanks for what you do, I enjoy it, it's great.
Been using bash for so long, I could not change even with all the sugar of other shells. Bash is just working
I've used both and love them both. But these days I just use zsh because the distro I mainly use for work uses zsh and it does the job I need it to and like the consistency.
Thank you for cd up. Sometimes better than ctrl+r.
I have been considering switching to zsh because o work on a project with some developers who work on Mac, and I keep forgetting that I have to test every bash script on MacOS to make sure I haven’t used any features that the native bash on MacOS will never have. If my scripts are all for zsh, then they will work the same on all platforms (that have zsh installed).
I haven’t actually tried making that switch or actually using zsh at all yet though. Does my reasoning seem right or wrong?
I really need this three tweaks. I'm using zsh only for this three feature.
It's bash really faster or it's your zsh configuration was bulky? I mean you're talking about noticable problems with cd-ing and omz so I guess the problem might be solved simply by turning some things off?
I personally find the zsh more useful by default especially on servers. Bash on newly created machine is just a pain. So I install zsh and... I don't even install plugins, it works okay already. So for me bare zsh is better then bare bash. And if I go with zsh in servers why should I do other way on personal machine?
Can you post your bash config ? Thank you!
Can we also get highlighted command suggestion like fish does when you start typing anything...
Like when you type something, suggest a command complition in different color, and if you misspelt then change color indicating that this is not a command
is your .bashrc with customisations available?
i use fish, catppuccin theme, on kitty. i go for maximum cat vibes.
I've pretty much exclusively used ZSH on Linux. I'd consider myself a rather advanced user, with over 100_000 executed commands logged, and probably like 1000+ hours of just fucking around with shell features and stupidly long pipelines at this point. My scripts are also pretty much all #!/bin/zsh, except the few that are so minimal and portable I can do #!/bin/sh for. I use stock ZSH, no patches, no plugins besides ZSH Syntax Highlighting, no frameworks, integration hooks for my terminal emulator (WezTerm) and history manager (Atuin), and then a 500 line handwritten config on my current machine (old one was 700. This is only counting my primary interactive configuration file.).
I tried BASH recently when I made a new user. It was an awful experience. BASH might largely be able to match what I do in ZSH, but ZSH is so much more sensible and just better, and really the only reason IMHO to ever use BASH over ZSH is that BASH is more widespread (and that the improvements of ZSH can cause significant bugs if trying to use it as BASH code). That's it. Otherwise there wouldn't even be a reason for me to have BASH on my machine, let alone actually use it. Also there are definite places where besides just having the better defaults, it has extremely useful functionality.
example complex ZSH command of mine from a few days ago (this one deletes a round of GNU cp's file backups if they're identical. Constructed this because duperemove wasn't working correctly):
```zsh
yes | for file in /run/user/1000/no-atime_mb/DH/norp/mir/**.\~#\~(.); do
prev_ver="${file:r}$(n="$(( "$(rgft1 '\.~(\d+)~$'
Since it. Has been 9 months and I haven't see a video of. Improving the bash terminal would this be in the pipeline for future video?
I used ble.sh github.com/akinomyoga/ble.sh for a while. I didn't make a video on it because while it's really good, it also was somewhat unstable.
Bash does everything I need. I've tried zsh briefly, but being a non-default shell it doesn't come preconfigured like bash and I didn't want to put in the effort to do it myself. And Bash is certainly better than ksh or csh. So no need to switch.
I switched from zsh because it was crashing on my not-so-complex git and docker scripts. Bash was rock solid. Regarding eye candy, I don’t need that either, my bash prompt is PS1=“\w ->” and that’s all I need, really.
I like Zsh features more, because they are easier to configure. In terms of speed of execution commands - they both are the same.
Also, I never used OZSH or any other ready to use "improver" of Zsh. Therefore I had never seen any performance issue of Zsh.
Anyway, shell scripts I use are written for POSIX compliant shell, I avoid writing scripts for Bash or Zsh. If I have trouble with POSIX compliant scripts - I just write script in Python.
I can't find how you did cd + up and showing the last command with cd, would love to see a tutorial of it.
i know its been 3 months since you posted this but i recommend using atuin great bash history tool
for the prefix-search in history using the arrow keys, put this in your ~/.inputrc file:
# Contextual history search with arrows
"\e[A": history-search-backward
"\e[B": history-search-forward
then do "Ctrl-x Ctrl-r" to reread ~/.inputrc (or relogin, start a new terminal, etc.)
check out the "READLINE" section of bash's manpage
The great thing about Bash is that it's already installed in nearly every Linux environment you'll come across (I'm sure someone could prove me wrong on that). Why should I use a shell that I'll need to install on every new system and every new VM I use?
Tbh. The main reason of why I switched to zsh, was to make the prompt look like that simple ~>. But if I can do it with bash too, and some other things, then I can also switch back to bash. Just like I turned off all plugins in vim, and just used basic vimrc commands, like you have shown in previous videos. I'm slowly coming back to defaults. I'll just now will have to see, how to uninstall oh-my-zsh and zsh, and then, how to do some of zsh things in bash, as I completely don't know any coding language.
Something like this in ~/.bashrc should do it: PS1='\W> '
@@jwisemanm This would give me this ~>, as a prompt? Quite simple. Thank you
@@paulj505 Yes, PS1 is the variable containing the prompt "string", \W is the special characters for "current directory" and displays ~ for $HOME. Use \w if you want the full path. If you want a literal tilde instead, just use PS1='~> '
I set up and configured everything I wanted in bash (autocomoletion mainly with blesh), but yhe result is very slow especially when it pulls suggestions (since I'm on wsl and blesh is very slow when path includes/mnt/c)
so now I'm on fish as interactive shell and if I ever need automations I'll just write script in bash or even non-shell language
the only thing that I really miss now from fish is !! macro but maybe that can be emulated
I stared out in sh and ksh back in the day so bash was a natural progression for me so I've always stuck with it. Like you say, many systems scripts I've crafted over time have started with #!/usr/bin/bash or similar so why would use zsh in my shell but I still tried it out particularly when I had to use a mac. Thats where I think zsh comes in as I believe, someone correct me but I believe mac froze the version of bash in their os, so you would always have an old ferclunkey version of bash on mac unless you brew installed a modern ( current ) one. I dont know for sure now as I've not checked, could be wrong on how it is right now. But I like concentraing on what is on most linux systems anyways so my productivity stays high. Learning shortcuts in bash like cntrl-r to find commands in the history work everywhere there is bash, I dont need zsh to be set up so why need to change my workstation to be different ? Interesting video, comment and expose of bash and its merits, thanks. I'm off to look at oh my bash now - you made me do it ! ;)
I have a question regarding bash and zsh scripting: if I work in an enterprise, should I rather use bash (for scripting) instead of zsh? (Some scripts using zsh are not running on bash?). Thank you for your answer 😀
Def stick to Bash. It's the most common shell especially on enterprise servers.
bash is most common and even with bash most people don't know advanced scripting, zsh has even more features, so if you write zsh scripts it's quite possible you'll end up being the only one maintaining them
Didn't know about Oh My BASH, but if you are into that stuff, there's also bash-it
In my opinion if one wants to switch then might aswell to fish instead of zsh since neither of them are POSIX compliant but fish is way lighter and faster.
I use fish anyways
IDK man. I mean, with the exception of the functions, or whatever, that actually require bash to work properly, I'm not sure why I'd need bash of zsh when fish exists.
very curious how you got zsh running slow i use it on very constrained systems and never noticed any performance issues
Oh my Zach slows it down.
Can Zsh's Esc-e shortcut be replicated on bash? That and the tab autoselect are what keep me on zsh. Though I would love to move back to bash as I think I've found commands that work in bash but not zsh because of Zsh's globbing/expansion features, and on bash ". " is equivalent to source but it is not on zsh
can you share that prompt? looks amazing
you should do a video comparing bash, zsh and fish.
I was thinking about this recently. I mostly use zsh as a themes manager, save for a few real plugins. On the real plug ins thing, I looked at what many of them are - premade aliases - if i am using it often i would just make my own with a name i will actually remember.
I am an avid fish enjoyer
I'm using fish and loving it! No interest in going back to bash and zsh again...
I will be thrilled if you do a video on how you ended up with a terminal like that. Also, a fan boy of Opensuse Tumbleweed (I know, don't mean anything). 😅
Thank you
:) saying something in internet doesn't need to mean anything... you have freedom to say what every you want...
how is opensuse?? is it better than fedora???
@vaisakhkm783
In my opinion, yes. But I will not use the word "better" here. I mean, Linux foundation in great, distributions are also amazing, and each of them offer what a selected group of users like and want. I tested and used Ubuntu, Fedora... but I found myself at home when I installed Opensuse from day one. Not that it was better or something like that, but it just worked the way I wanted with no hard work. I also appreciate the fact they added a powerful GUI software as YAST because it really helps manage our system the simplest way without the need to find each file through CLI. In spite of being down of software availability (even if we can add more support through snap and flatpak) ; yes, Opensuse (Tumbleweed) "better".
Honestly, I've never even needed the advanced features anyway, so Bash never even falsely felt lacking as a result. Of course, many of my terminal-use habits are derived from my earlier days when I was dicking around in DOS VMs, so a lot of methods I use are very not ambitious, but still. Bash works well.
Zsh scripting is a little different. That's why I stopped using it a few years ago. Everyone just has bash and yes you can make it do most of the cool stuff.
When I'm not in fish I feel disconnected or restricted. If you could make bash work and look like fish now that would be something. But your bash is like a 2 wheeled car. It's sorta usable but not very.
So...did we ever get a how-to on this?!
from bash manpage: "completion-ignore-case (Off) - If set to On, readline performs filename matching and completion in a case-insensitive fashion.", also look at "colored-completion-prefix", "menu-complete" (does the cycle-through-options thing instead of listing options...), this things require learning a bit about "readline" and setting a ~/.inputrc file; for the prefix-search in history using the arrow keys, put this in your ~/.inputrc file:
# Contextual history search with arrows
"\e[A": history-search-backward
"\e[B": history-search-forward
then do "Ctrl-x Ctrl-r" to reread ~/.inputrc (or relogin, start a new terminal, etc.)
The speed issue doesn't seem relevant. Your points about ~ clutter seem valid, but that disease affects every shell user. And distro hopping is worse for it (it should be easier to distro hop).
Zsh is the linga franca of future OSes, for better of worse. When Apple switched to zsh for their default shell, I decided to just switch on all my computers.
For anyone reading, try to avoid the "oh my xxx" stuff. Instead, build up your features manually. You will spend more time but you'll learn more. Even after decades of shell usage I don't consider myself an expert.