Welcome to the lab.

Brett’s Favorites 2021

I’m late getting my “Top Apps of 2021” post out. I almost wasn’t going to do it this year, mostly out of just being frequently and excessively tired of late. But I figured I’d keep it short and make it manageable, and at least let you know what I think are the cream of the crop Mac apps this year. This is nowhere close to a comprehensive list of apps I like, but rather apps I love that were new or substantially updated in 2021.

I’m forgoing1 iOS apps because I just haven’t found anything new that blew me away this year2.

Many of the apps below are available on Setapp. If you want to check it out and get access to 100+ awesome Mac apps (and some iOS companions) for a low monthly subscription, here’s my affiliate link. I get a little something if you sign up, and if you happen to use my apps through Setapp, I also get a piece of your monthly payment, which I think is nicer than switching an app like Marked 2 to a subscription model on its own.

And we’re off.

CleanShot X
This is the best screenshot app I’ve ever used. Everything about it is elegant, intuitive, and powerful. Available on Setapp.
I can’t use Fantastical with my work calendar (employer limitations), but Dato at least puts my calendar in my menu bar with some handy features, including “Join Zoom Call” buttons that actually work. Solid app and one I use daily.
BTT always makes my list, and is always improving. I couldn’t begin to enumerate all the new features Andreas has added in the last year. If you’re looking for one of the best Mac automation/enhancement tools out there, this is it. Available on Setapp.
Back from the dead, Kaleidoscope is under new management and active development and remains my favorite tool for file and directory diffs, as well as resolving merge conflicts.
A bunch of improvements last year in this top-notch Git GUI. And I highly recommend the tutorials that they put out on their website — they’re a great way to learn more about areas of git you might not be well-versed in.
I love iTerm so hard. I’ve tried other terminals, but iTerm packs so many awesome features in that nothing else can really come close.
Hook had a big year in 2021. As I’ve said before, it’s a bit hard to explain in a couple of sentences, but if you want to always have relevant files and documents at your fingertips while you’re working without spending time searching, it’s worth learning how Hook can help.
If you edit podcasts (or even video), you have to try Descript. It generates transcriptions automatically, and then you can edit the audio/video just by cutting and pasting the text. They’ve added a host of effects and audio tools this year, and just released an M1-optimized version.
I pay to upgrade ScreenFlow regularly, and it’s pretty much always worth it. If you need to create screencasts, whether long presentations or 5 second gifs, ScreenFlow is hands down the best tool for the job.
It’s just one of my favorites. It keeps your menu bar clean. The new features in version 4 are outstanding.
It’s not new, but I just started using this one in 2021. It regularly scans all of your installed apps, Mac App Store and direct versions, and lets you know when updates are available. It makes installing them easy, and can do batch updates at the click of a button. Regularly updated and improved.
Brand new in 2021, this is an awesome tool from Tyler Hall for performing a wide array of operations on text. It comes with System Services (or Quick Actions or whatever macOS is calling them now) you can set up for easy keyboard control, and is fully extensible with JavaScript. If you dig a little, you can even learn how to include your own System Services in the array of available operations.
This one didn’t have any major updates in 2021, but it’s still solid and I use it often enough that I thought it worth mentioning. It’s the easiest way to edit launchd jobs for running background tasks on your Mac. I don’t know what ever happened to Lingon, but this is better anyway.

That’s it (for now). Short and sweet. I might do a second installment if time allows, but for now have a great 2022!

  1. Today I learned that there’s a difference between “foregoing” and “forgoing” (other than an “e”). Glad I caught that one. Would have looked mighty silly. 

  2. To be fair, I do not do a lot on iOS other than social media, email, text messaging, and games. Which I guess is a lot, but other than games, none of those areas are rife with competitors and new ideas. 

A fuzzy cd command for Fish

This is not a Christmas post. I kind of forgot it was Christmas Eve until my mom called just now. So I edited this post to start with “Merry Christmas.” I hope that brings cheer to your life.

I’m constantly playing with ways to make navigating in Terminal easier. I’ve been doing it for years. Tools like z, fasd, jump, bashmarks, cdargs, and dozens more always appeal to me. My latest experiment has been creating an all-purpose cd command that combines some of my favorite navigation methods.

Fair warning, this only applies to the Fish shell. I’m sure you could duplicate it in any shell, but I haven’t the time.

This trick comprises several of my other tools, including a custom version of jump, and my own fuzzy directory search. Add fasd and mix in some fzf for good measure.

Web Excursions for December 20, 2021

Web excursions brought to you in partnership with Udemy. Learn Anything.

piotrmurach/tty: Toolkit for developing sleek command line apps.
Toolkit for developing sleek command line utilities with Ruby. The toolkit itself is cool, but the components it includes are awesome and can be used in any project (each one is an individual gem). Great tools for everything from command line progress bars to rendering Markdown in the Terminal.
jorgebucaran/autopair.fish: Auto-complete matching pairs in the Fish command line.
Another useful Fish plugin. It gives you auto-pairing of quotes and braces, intelligently deletes empty pairs, and you can type over closing elements. Just like in your favorite Markdown editors… Also see pisces, which is pretty much the same thing, as far as I can tell.
acomagu/fish-async-prompt: Make your prompt asynchronous to improve the reactivity.
I love the Fish shell. One thing that bugs me but which I kind of just learned to live with is that a prompt with the same amount of shenanigans I ran in Bash or Zsh would take an extra second to display in Fish. I got used to it. But then I found this plugin that makes your prompt command async. It displays the previous prompt immediately, and then updates it in place once your prompt commands (left and right) run. Perfect if you have a custom prompt and don’t want to switch to a prompt package…
IlanCosman/tide: The ultimate Fish prompt.
The fish-async-prompt plugin is excellent if you want to use your own prompt commands, but if you want an easy-to-configure async prompt with all the niceties (git status, ssh context, command execution time, etc.), Tide is a pretty great option. I added the asdf items and I think I’m switching from my convoluted custom prompt setup to this now. I don’t know all the history, but I’m pretty sure this is a port of powerlevel10k.
romkatv/zsh4humans: A turnkey configuration for Zsh
I don’t want zsh users to feel left out. Here’s a turnkey configuration for Zsh that includes great plugins and the same powerlevel10k prompt that Tide for Fish pulls from. Installed zsh4humans on top of oh-my-zsh without any issue, in case you’re wondering.
Descript - All-in-one audio/video editing, as easy as a doc.
I’ve mentioned Descript a bunch of times, but I’m adding it to Web Excursions because they’ve added so many amazing features since the last time I linked it that I really think any podcaster/youtuber/screencaster who’s not using it should check it out again.

Short description: Edit your audio and video by editing the transcription (which it also generates). Select text, hit delete, media file is cleanly edited automatically. Descript now has a full suite of audio plugins (limiter, compressor, hi/lo cut, multiple EQs) as well as some wizardry to boost and level audio without a single dial to fiddle. If you’re spending an hour or more every week editing a show, you really need to see this.

Udemy Banner

Git better with fzf and Fish

You’ve probably heard me mention fzf before. It’s an amazing command line tool created by Junegunn Choi. It takes a list of data and turns it into a command line menu with fuzzy searching, multi-select, and can even preview each item in whatever way is appropriate. I’ve been using it in all kinds of scripts — where I used to have rudimentary numbered menus, I now have much friendlier and more flexible terminal navigation.

fzf is available via Homebrew, just run brew install fzf. See man fzf for very good documentation.

One great example of how fzf can change your command line life is the set of keybindings for git shared by the author. With these set up you can, for example, start typing a git command that requires a commit hash, hit Ctrl-G Ctrl-H, and get a searchable menu of all your commits. Select the one you’re looking for and the menu closes and the commit’s hash is inserted in your command. It’s crazy handy.

Bunch 1.4.6

Bunch 1.4.6 is out now for automatic update (Bunch->Check for Updates) and for download. It’s been in beta for a couple months, and I’ve added some cool new stuff in the process. See the changelog for a full list of new features, fixes, and improvements.

First, I got a bunch of requests for a feature that would quit all open apps, so I’ve added a (quit everything) command. It will quit all apps that appear in the Dock, leaving menu bar apps alone. You can add exceptions by running (quit everything except iTerm, nvUltra). (It also accepts a variety of syntax such as (kill all) and (burn everything), just for fun.)

I got a couple of special requests for new frontmatter keys. You can now use title prefix: to add a prefix to a Bunch’s menu item title, which is handy because you can apply it to multiple Bunches using folder.frontmatter or @tag.frontmatter. Tag some Bunches with tags: work and then create @work.frontmatter in your Bunch folder containing a title prefix: 💼 and all of your work Bunches will get a briefcase icon before their title in the menu.

There’s also an ignore if: key (with ignore unless: counterpart) that will hide a specific Bunch/folder/tag from the menu based on logic. It can be a UUID string or any logic condition. By the way, all if/unless keys now accept any logic conditions Bunch can handle.

There’s also a couple of new logic conditions: file PATH exists and file PATH contains, which replaces the old trigger file functionality. Now you can perform actions based on whether any file exists, and if it’s a text file, you can test whether it contains a string.

Get the latest version on the downloads page. Enjoy!

Doing 2.0

I’ve pushed Doing 2.0 out to the world. It’s the result of a year or so of tinkering on and off, with some extra love recently, and it comprises enough refactoring, fixes, and improvements to truly warrant the major version bump.

I’ve had a few manic episodes in recent months that have found me obsessively coding on personal projects for hours at a time. I’ve put out new releases of Marked 2 and Bunch, updated multiple open source projects, and spent a ton of time on projects at the day job. So much so that it’s been… (glances at homepage)… a month since I blogged.

I work on myriad projects, but Doing is always the common denominator. No matter what project I find myself hacking away at, I’m constantly tracking my time and progress using Doing. (I even use git commit hooks to add entries to my log whenever I make a commit in one of my projects.) And when I’m in “obsessive coding mode,” every time I use Doing, I think of new things I wish it could do. (Things I wish Doing did? Was doing?) Anyway, a thousand side-tracks to work on Doing have culminated in the first major version bump since its initial release.

To catch you up, Doing is my command line tool for tracking what I’m spending my time on. It has tools for adding entries, tagging them, searching them, tracking time, and outputting reports in various formats. It stores all of this in a plain text file using (slightly proprietary) TaskPaper formatting, easy to port and parse elsewhere.

The project page on this site used to have documentation for all of Doing’s commands and options, but trying to continue fitting it all on one page got very unruly. The documentation has been reorganized and moved to the Doing wiki on GitHub. (If you just want an overview of all possible commands, I did a little RDOC->Markdown conversion to generate an All Commands wiki page.)

There’s so much new stuff that I can’t fit it all into an announcement post like this. Read on for the highlights, though.

If you’d rather play than read, just run gem install doing to get the latest version (2.0.11 as of this writing). Then run doing help to see all available commands, and run doing help COMMAND to get info on each one. I’ve tried to keep it as self-documenting as possible.