Shell Game: Trying out Fish

Largely prompted1 by Brett Terpstra’s post on trying fish, I decided to give this whimsical shell another try.

I’ve been messing with shell configurations for a long while now. It looks like I switched to zsh in 2013 in Polka2.

I think that it’s been a couple of versions since I tried fish… I think that I was initially turned off by the fact that I couldn’t figure out how to configure it, and it was just so… chatty. Having been used to the terseness of bash and zsh, the extra messaging and completions seemed juvenile. Here’s another swing at it.

Good: Configuration

I’ve slimmed down my zsh config to be basically five things:

  • Sensible config. The bare minimum to get path, history, etc.)
  • Prompt. I want some information about where I am on the system, including VCS info.3
  • asdf. I use asdf to install all my languages and packages.
  • fasd. Jumping between folders and such. Not to be confused with asdf, I’ve become utterly reliant on fasd to move around quickly.
  • FZF. Pretty similar to fasd, but I use it a good bit.

My fish install is… really short. I’m using fisher to install packages, and then using a fishfile to configure four out of the five.


That is really pretty much it. I kind of like that.

Weird: Colors

Fish has a distinction between colors and prompt theme that I still don’t really understand.

I found in github’s code search some poor soul on the same quest as I, who hardcoded gruvbox’s colors into fish fish_variables file, which you can also configure via a GUI when you run fish_config colors. It’s pretty close.

I suppose there’s some way to just remove the colors and have them inherit from the terminal, although it is nice that you can use whatever color you want.

Weird (but good): Functions and Variables

I like what little I know about how fish loads functions when it needs them rather than on startup… my fish setup seems to be a lot faster than my zsh so far.

I do have problems with plugins putting user/computer specific information into the fish_variables file. I would prefer my config to be fairly transferrable between computers. As it is, I’ve just uninstalled such plugins, including the one for FZF. We’ll see if I miss it.

Ironically, fish’s ability to hotload from functions leads to weird behavior… I removed a plugin from one pane in tmux, then switching to another pane in tmux caused parts of the files to be rewritten and reloaded. Just something to keep in mind.

As I write, Brett has decided to stick with it and so will I. It anecdotally seems faster than my (admittedly naive) zsh setup, and it’s fun trying something new. I do trip up not getting access to FZF’s history search and bash/zsh’s !$ syntax for accessing the last token… but maybe not having those crutches will lead me down new paths.

  1. See what I did there? 

  2. Polka is the old version of my dotfiles, currently not being kept up to date 

  3. Getting the current git status and more is often the hardest part… git status can be surprisingly slow. 

  • 2020-06-18 14:26:02 -0500

    Move everything to CST

    Don't know why I didn't do that before. It caused _no_ end of

  • 2019-11-14 19:21:38 -0600

    Remove Tag: programming

    `code` is the same tag and has more coverage.

  • 2019-11-12 08:58:25 -0600

    Change four -> five

    I miscounted how many things I was doing in my zsh. * facepalm *

  • 2019-11-11 20:12:10 -0600

    New post: Trying Fish