I've been tinkering with my dotfiles a lot recently, and wanted to show how I'm creating gists on the CLI these days.

UK EVENTAttend ffconf.org 2024

The conference for people who are passionate about the web. 8 amazing speakers with real human interaction and content you can't just read in a blog post or watch on a tiktok!

First, you'll need to install the gist application using brew install gist, then you're going to add a new function to your shell via your .zshrc (or .bashrc or whatever flavour you enjoy).

All newly created gists on the CLI will make use of the following flags:

  • create all gists as secret (-p)
  • copy the gist url to the clipboard (-c)
  • open the browser to the gist (-o)

The function that we create will extend the brew installed gist applications by supporting three modes for the CLI tool:

  1. $ gist filename.json — create a gist from the filename.json with the name filename.json
  2. $ cat filename.json | gist – create a new gist from STDIN
  3. $ gist – paste whatever's on the clipboard and create a new gist called paste.txt

This last one is fun and pretty much the reason I made this function. I tend to have something on my clipboard that I want to quickly share. I can now just type gist into my terminal and I'll make a gist, show me the page (so I get visual confirmation it worked) and it's already copied to my clipboard.

gist function

Copy and paste this bash function into your profile and you'll have the extended functionality that I described above.

function gist() {
  # if there's nothing piped on STDIN
  if [ -t 0 ]; then
    # and there's no arguments...
    if ((! $# )); then
      # take what's on the clipboard and paste it in a new gist
      command gist -Pcop -f paste.txt
    else
      # create a gist based on the arguments give
      command gist -cop $@
    fi
  else
    # otherwise, create a gist, with arguments, but use the
    # content from STDIN
    command gist -cop $@ < /dev/stdin
  fi
}

Hope that's useful. In fact, I've since evolved this script to pipe the output directly to the gitio command I have so I get short URL too!