Trying fish and zsh as default shell
Julia Evans’ post about fish shell relate to what I have been doing in the past few weeks.
I’ve always been quite conservative when it comes to the tools I use. For more than two decades, I’ve been using bash as my default shell, never really bothering to explore alternatives. Same goes for vim - I avoid plugins like the plague. My .vimrc
is a modest 10 lines, with set wildmenu
being probably the most “advanced” setting in there.
Why this approach? Simple. When you hop from system to system, server to server, you don’t want to depend on custom setups that might not be there. Muscle memory for vanilla tools serves you well in the long run.
The AI-Powered Shift
But here’s the thing - with the advancement in generative AI, trying new things has become so much less intimidating these days. Need to configure something? Just ask a chatbot a few questions and you get what you need. No more spending hours reading documentation or forum posts.
So I thought, why not embrace some of the cool stuff I’ve been missing out on?
First Stop: Fish Shell on Remote Dev Machine
I decided to start small. Changed my shell to fish on my remote development machine, and honestly, I was impressed with the out-of-the-box experience. The autocompletion is really helpful - it suggests commands based on your history and it actually makes sense most of the time.
But there’s a catch. Fish isn’t POSIX compliant, which means all my bash aliases and functions needed a rewrite. For a remote dev machine with minimal custom configurations, this wasn’t a big deal. But it made me think twice about my laptop setup.
Zsh for the Laptop
My laptop has accumulated quite a few bash functions and aliases over the years. Rewriting everything for fish felt like more work than I wanted to take on. So I decided to try zsh instead.
To get zsh to the level of fish’s user experience, you need oh-my-zsh plugins and some other setups. But as I mentioned, a few questions to X’s Grok was all I needed to get everything configured properly. The best part? My existing bash functions and aliases still work without any modifications.
Current Setup
For now, I’m keeping this hybrid approach:
- Fish shell on my remote dev server
- Zsh on my laptop
Both give me the modern shell features I was missing with bash, while working within the constraints of each environment.
I’m also experimenting with tmux instead of GNU screen, but that’s probably a topic for another post.