All my Fish functions

Posted by Brett Terpstra on

[Tweet]

I think I’ve wrapped up my conversion to Fish for the time being. I can honestly say that now that I’m past the tinkering phase, I’m more productive in Fish than I was in Bash. Which is no small claim, I was pretty good at Bash.

In the process of the transition I created quite a collection of functions and completion scripts, so I figured I’d make them available on the off chance that someone else is taking the same journey and/or is curious.

The full collection is up on GitHub, with descriptions of all the folders and every function. I diligently added a --description to every function in the source, then wrote a script to list them all with their descriptions. That script is in the repo, too.

Most of these came from my Bash setup, some even saw some improvements over their predecessors. You’ll even recognize some of them from my Shell Tricks posts. There are a few highlights:

  • All of the files in functions go in the auto-load folder, so none of them actually have to sit in memory while you’re using the shell. Lots of functions, little consequence.
  • All of the app shortcuts (Acorn, TaskPaper, Tower, etc.) have completion commands that work very nicely. These are located in the completions directory, which is also auto-loaded.
  • The mkdir command handles deep creation of intermediate directories (-p) and asks if you want to cd into the final target after it’s run. The prompt takes a single key (y/n) and can be dismissed with return. While there are some downsides, I generally like Fish’s read command.
  • There’s a bash folder with some of my more involved bash scripts that I’ve been successfully running from Fish without issue. editscript, reiki, na, etc.
  • A smart cat shadow function that uses bat except when it’s a Markdown file, in which case it uses mdless.
  • The cdd command is pretty sweet for jumping deep into a directory tree with fuzzy matching (and fzf selection when there are multiple matches)
  • fix takes search and replace arguments to fix up the last command you ran.
  • cl re-runs the last command and copies the output to the clipboard
  • I ported imdown, imgsize, my horizontal rule functions, aspell tools, and more. Plus a slew of little math utilities like calc, sum, and percentoff.

If you’re just starting to play around with Fish, this should be a great way to see what’s possible and get started with porting your own setup. If you’re a long-time Fish user, you’ll probably be able to tell me where all I went wrong (which I’m totally open to), but maybe you’ll find some inspiration, too?

Check out the full collection at github.com/ttscoff/fish_files.