Skip to content

Instantly share code, notes, and snippets.


Billie Thompson PurpleBooth

View GitHub Profile
PurpleBooth /
Last active Oct 4, 2021
How to use docker in without docker-desktop on mac using lima

First run ths script

Then add an environment variable so tools you use that use docker can find docker

## Add this to your bashrc if you want this to be permenant
export DOCKER_HOST=ssh://localhost:60006

This will need the lima vm for docker running, you can do that by running

PurpleBooth /
Last active Sep 17, 2021
Change your default branch on github without checkout anything out

Usage "$GITHUB_TOKEN" PurpleBooth/homebrew-repo

Does not delete the old default branch, or change where pull requests are based from, incase something breaks.

PurpleBooth /
Last active Dec 3, 2021
A github workflow pipeline for rust that does test, build and deploy windows, linux and mac, creates releases, and does SemVer Versioning, and releases to a homebrew tap


  • Automatically bump SemVer
  • Update a personal homebrew tap
  • Keep that pesky version in the Cargo.toml up to date
  • (From dependabot) Get new versions out as soon as possible


  • You don't want a changelog
PurpleBooth /
Created Apr 19, 2020
Reading git config from global and the containing repo in rust
#!/usr/bin/env run-cargo-script
//! This is a regular crate doc comment, but it also contains a partial
//! Cargo manifest. Note the use of a *fenced* code block, and the
//! `cargo` "language".
//! ```cargo
//! [dependencies]
//! git2 = "0.13"
//! ```
use futures::future::join_all;
use futures::StreamExt;
use reqwest::Client;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
struct ProjectsItem {
hash_id: String,
use std::collections::HashMap;
use futures::{stream, StreamExt};
use reqwest::Client;
use serde::{Deserialize, Serialize};
use std::error::Error;
#[derive(Serialize, Deserialize, Debug)]
struct ProjectsItem {
hash_id: String,
PurpleBooth / 1password
Last active Oct 22, 2020
Use sops to cache the one password vault session token because op is horrible to use
View 1password
#!/usr/bin/env bash
set -euo pipefail
OP_LOCATION="$(command -v op)"
mkdir -p "$CACHE_DIR"
PurpleBooth /
Last active Mar 20, 2020
Using Pandoc as a (github flavoured) Markdown formatter with wrapping support
#!/usr/bin/env fish
# You can do something similar in fish too
function gfmfmt
for I in $argv
set -lx TEMPORARY_FILE (mktemp -d)"/"(basename "$I")
pandoc --from=gfm --to=gfm --wrap=auto "$I" > "$TEMPORARY_FILE"
View test-doubles-in-jasmine.ts
// Create an object with hollow methods (does not need to implement everything)
const myTestDouble = {
exampleMethod: (): any => {
} as RealClass;
// Then to return something
spyOn(myTestDouble, 'exampleMethod').and.returnValue("Stubbed Value");
PurpleBooth /
Created Oct 26, 2019
Bowling Kata in rust but more functional


Create a class with 2 methods:

  • roll(self, pins)
  • score(self)

The rules for scoring are as follows

  • A game is 10 frames
  • Each frame can have up to 2 rolls
  • A spare is when you knock down all pins in a frame