These are all the things I wish existed.
Feel free to steal any of them (and please tell me if you build one! I'll definitely use it)

Sync 1Password with GitHub Actions secrets

I use 1Password as my source of truth for sensitive information. When I regenerate a token, I store it in 1Password for future use.

Some of these tokens are used by GitHub Actions as part of a suite of automations. I currently go through each repository/org and manually update the value.

What I'd like to be able to do, is run a script that pulls the value from 1Password and uses the GitHub API to update the secret value. Something like this:

sync-1p-gh-secrets --vault <vault> --item <item> --secret <secret_name> --org <org>

For example:

sync-1p-gh-secrets --vault ops --item "DockerHub" --secret DOCKERHUB_PASSWORD --org michael-test-org

Email auto-forwarder

There are certain emails that I always want to automatically forward on to another address, and am currently forwarding manually. e.g:

  • Emails from should be forwarded to TripIt
  • Emails from the nursery should be forwarded to my wife

I'd like to be able to filter on:

  • Addresses in To, CC and BCC
  • Email subject
  • Email body
  • Attachments (presence + file type)

I should be able to use any combination of To, CC and BCC when forwarding on the emails, and choose if I want to also forward on attachments.

Related links:

eInk Calendar

Our house runs on digital calendars, but sometimes it's nice to see what's coming up on a shared surface.

This usually means transcribing major events on to a paper calendar periodically.

I'd like to be able to automatically show events on a shared screen

Related links:

Unsubscribe dashboard

A UI that reads all emails in a folder and shows all emails with an unsubscribe link.

Provide a way to group by sender / subject / unsubscribe URL

I'd like to be able to choose which folder this runs in (minimum Inbox + Trash, but ideally any folder/label)

GitHub CLI Extension - Download Artifact

Download an artifact from the most recent run of a GitHub Actions workflow to the current directory.

gh fetch-artifact <workflow> <name>

Sample usage:

gh fetch-artifact "Build Docs PDF"

You'll need to use the workflows API and fetch the
workflow id where the name field matches the provided workflow name.

Related links:

Update AUR on Release using GitHub Actions

Updating an AUR package for a node based tool could be automated using GitHub Actions.

Each time a release is tagged, the pkgver and sha512sums fields in the PKGBUILD need updating, and the repo needs pushing to the

The sha512sum needs to be calculated from the published NPM package, so we'd need to wait until the version is available, download it from the registry and then calculate the checksum.

Related links:

Google Contacts <-> Social Images

Automatically update your contact's profile image based on social media.

Use the following data sources:

  • Gravatar (email)
  • Twitter
  • Instagram
  • Facebook
Related links:

Strip clipboard UTM parameters with Hammerspoon

Friends don't let friends share links with UTM parameters on them.

Hammerspoon provides tools to run code in response to the clipboard contents changing. It also provides tools to update the contents of the clipboard.

Putting these two things together we should be able to copy a link with UTM parameters, and by the time we paste again they should have been stripped from the clipboard.

Related links:

Kindle Highlights to `sqlite`

I'd like to browse my Kindle highlights using Datasette, which means getting them in to a sqlite database somehow.

My intention would be to build a kindle-highlights-to-sqlite CLI following the pattern that Simon W has started in the Dogsheep org

This tool must work for highlights on personal documents in addition to purchased books, which means we'll likely have to use My Clippings.txt as the data source. This can be accessed by connecting the Kindle with a USB cable and browsing the documents folder.

Related links:

ListenToTaxman CLI

Make ListenToTaxman usable from the CLI.

Output formats:

  • JSON
  • TSV

Also configure .listentotaxmanrc to configure values that rarely change e.g. "Repay Student Loan", "Pension Contribution"

Proposed usage:

# Show the gross + net wage per year, month and week on an income of £123,000
listentotaxman --time 'year,month,week' --fields 'gross,net' --output json 123000

Stretch goal: Runs 2 incomes through ListenToTaxman with the same inputs and calculates a % change for each row

Related links:

Newsletter Link Aggregator

A tool to find the most popular links within a set of newsletter subscriptions.


  • Specify the timeframe to search for newsletters (default 7 days)
  • Ability to specify a list of senders / subjects to match


  • Log in to email and fetch all newsletters based on the provided matching rules
  • Extract all URLs from the newsletter (excluding unsubscribe + "read in a browser" links)
  • Resolve the final URL of each URL
  • Strip any tracking parameters (UTM source)
  • Sort the URLs by number of occurances
  • Display URLs, highest count first

Stretch goal: Also show which newsletters the link was in, along with any comment provided by the newsletter author


Look for identical schemas in an OpenAPI document and automatically extract a component and rewrite the schema to use it.

It should be context aware, which means extracting requestBody, responseBody etc into the correct components section rather than using components.schemas for everything

Automatic Password Changes

A tool for automatically rotating passwords. Uses Puppeteer to log in through a browser and update your credentials.

My use case is for 1Password, but ideally it would work with any password manager that has a programmatic interface.


  • Read a single/all vaults from 1Password
  • Log in to a site and update the password with a generated password
  • Support OTP codes provided via 1Password
  • Adding a new site should be self contained in a single file

Initially I thought that each site would be a JavaScript file to execute, but if there are enough similarities we could make this YAML driven

Related links:

Plex Share/Unshare CLI

A CLI for sharing and unsharing specific libraries with users on Plex. Intended to disable sharing at specific times / when bandwidth is limited.

The script shown below looks like it works, but I'd like to package it up into a CLI:

# Share a specific library (defaults to all libraries) with a user
plex-library share [--library 1234567] <user_id>

Plex token, Server ID and libraries will be read from .plex.yml

Related links:

Run Alex using Spectral

Automatically check your JSON schema documents for inclusive language

Check any field that can contain text (including path, summary, description, examples, field names etc)

Related links:

Run spellcheck using Spectral

Automatically spellcheck your JSON schema documents

Check any field that can contain text (including path, summary, description, examples, field names etc)

Related links:

Create CBZ from Webcomic

Download and package webcomics into CBZ format for reading with ComicZeal

Related links:

yargs options generator

Generate Yargs options + argument definitions with a UI. Output the following configuration:

const packageDetails = require(path.join(__dirname, "package.json"));
"-a, --allow <actions>",
"comma separated list of actions to allow e.g. mheap/debug-action. May be a glob e.g. mheap/*"
"-v, --verbose",
Related links: