---
title: The Faster Shell
slug: the-faster-shell
published_date: 2025-12-24T04:55:00+00:00
tags: nvim, tech
publish: true
make_discoverable: true
is_page: false
---

> tldr: I switched from `fish` to plain old `bash` because it's fast and does what I need it to do

2 years ago, me and my roommate decided to learn vim. We built our very own neovim configs, learned about LSPs, and built a compiler in OCaml. It felt amazing and was also one of my favorite memories from Caltech.

This led me down a certain road. I spent a lot of time trying the latest cutting edge tools: eza, fzf, zoxide, bash -> zsh -> fish, tmux, emacs, (+many more). Some things stuck. Others didn't. 

In this post, I'll talk about my shell.

Like most users, I started out with zsh (the default shell on my Mac and also my Pop OS Linux box). I had an oh-my-zsh bloaty setup complete with all the bells and whistles:
- completions
- inlay hints & suggestions
- highlighting and fancy command coloring
- whatever else comes packaged in these zsh setups

I hated how much config bloat came with the shell, so I tried fish. Fish is great. It worked out of the box. I didn't have to really install any plugins and the shell had even nicer tab completions.

Now, we come to the real reason I switched back to bash. Coming from i3 on my Pop OS box, it feels sluggish to use my mac without a window manager. So, I use Yabai with skhd (for keybinds) on my Mac which allows me to quickly swap between workspaces.

alt-1 for example will go to workspace "1" or my browser main workspace. alt-s will go to my "Slack" workspace and alt-m will go to the "Music" workspace which usually has spotify open. This workflow is a non-negotiable for me. I've built up the muscle memory so my code will always be on alt-2 or alt-3. My apps are just one keypress away. I can never go back to the old "dragging my windows aroung" or "swiping between desktops" workflow.

Now, what's wrong with fish? It's slower than bash. In my case, noticeably slower. `skhd` routes all commands through your shell, so when I have a couple windows open on multiple (5+) workspaces, switching between workspaces becomes painfully slow. I hit alt-1 and wait a second before it eventually switches over to workspace 1. I looked into it and tracked down the problem to this exact GitHub issue: [asmvik/skhd#42](https://github.com/asmvik/skhd/issues/42) where user @rubensf explains he had the same issue as me.

Shells like fish and a bloated oh-my-zsh installation have startup overhead (loading all sorts of plugins and extra functionality). The solution to my problem was to just launch skhd with `SHELL=/bin/bash skhd`, forcing it to use bash to execute commands instead of the slower fish. This **instantly** fixed my delay issue.

I don't need clever highlighting in my max 30 character commands. I don't need auto-suggestions; I have ctrl-R. I don't need any plugins.

All I need is a fast shell that lets me run commands. I'd like it to look decent and give me basic git branch/status info, both of which I can do with [starship](https://starship.rs/) and 1 line of config. I don't need a package manager for my shell. It's just a shell.

I'm sure I could have different profiles for interactive and non-interactive shell instances, and maybe this could help me squeeze out more performance from these other shells. But why go through all that pain for syntax highlighting and autosuggestions? I don't want or need them. `zsh` might be faster in some array/loop procedures, but this doesn't affect me or my use-cases.

So now, I just use bash.