Skip to content

Instantly share code, notes, and snippets.

View jamonholmgren's full-sized avatar

Jamon Holmgren jamonholmgren

View GitHub Profile
mkdir -p "$HOME/homebrew"
git clone https://github.com/Homebrew/brew "$HOME/homebrew/.linuxbrew/Homebrew"
mkdir -p "$HOME/homebrew/bin"
ln -s "$HOME/homebrew/.linuxbrew/Homebrew/bin/brew" "$HOME/homebrew/bin/brew"
# Homebrew (per-user)
eval "$($HOME/homebrew/bin/brew shellenv)"
# Put casks in your user ~/Applications so we never need sudo
export HOMEBREW_CASK_OPTS="--appdir=$HOME/Applications"
mkdir -p "$HOME/Applications"
# Reload shell
@jamonholmgren
jamonholmgren / iphone-x-screen-unresponsive.md
Last active August 12, 2025 03:10
Here's how to reinstall iOS on an iPhone X when the screen is unresponsive (but still works otherwise).

How to reinstall iOS on an iPhone X where the touchscreen is unresponsive

My daughter's iPhone X got into a state where the touchscreen didn't respond to any touches. We force-restarted it several times by doing the "Up Volume, Down Volume, Hold Power" sequence, but it did not work -- the touchscreen stayed unresponsive.

I plugged it into my Mac with a lightning cable and went to Finder (because iTunes isn't available anymore). Clicking on the iPhone asks me to Trust it, but clicking Trust just results in a spinner. I think it wanted me to log into the iphone and tap Trust there, but of course I can't -- the touchscreen wasn't responding.

Trust me bro

So, I figured out this alternative sequence.

@jamonholmgren
jamonholmgren / 0-README.md
Last active August 6, 2025 13:45
Probably one of my more cursed spelunking expeditions. Run Objective-C from a string passed in from JavaScript.

Running Objective-C (sorta) from JavaScript directly

To do this:

const result = invokeObjC(`[[NSString stringWithString:[[[@[@"One", @"Two", @"Three"] mutableCopy] addObject:@"Four"] componentsJoinedByString:@" | "]] uppercaseString]`)
console.log(result) // "ONE | TWO | THREE | FOUR"

I don't know how useful this will be. But ... it was enjoyable to play with!

🧠 bit – A Human-Centered Git Wrapper

bit is a clean, intuitive layer over Git that uses plain English and readable tags to simplify common version control tasks.

  • No flags
  • No staging
  • No Git-isms
  • Just clean, natural workflows

@jamonholmgren
jamonholmgren / npm-vs-yarn-vs-bun-install-benchmarking.md
Last active July 29, 2025 18:40
npm vs yarn vs bun install benchmarking for ignite-cli

NPM vs Yarn -- install time benchmarking with Ignite CLI

Benchmark Results (average of 5 runs)

Test Scenario Lock Cache Yarn 4 Node 22 Node 24 Bun 1.2
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Earth and Moon 3D Simulation</title>
<style>
body {
margin: 0;
font-family: Arial, sans-serif;
@jamonholmgren
jamonholmgren / react-native-macos-start.md
Last active May 20, 2025 11:29
Getting started with react-native-macos (as of May 2, 2025 -- version 0.78.3)

Getting started with react-native-macos

React Native for macOS is a really powerful implementation of React Native for building Mac apps, but the RN macos documentation (as of today) is straight up wrong and won't work.

Here's how to spin one up!

Prerequisites

This assumes you are on a Mac and have installed all the prerequisites for RN iOS.

@jamonholmgren
jamonholmgren / react-native-macos-release-notes-0.79.0.md
Created April 9, 2025 18:47
This is just a sample release note for react-native-macos

React Native for macOS 0.79 released!

We are happy to announce that React Native macOS 0.79 is now available! This brings us in alignment with the main React Native version.

Highlights

  • Faster Metro startup time
  • JSC is now a community package
  • Swift-Compatible native modules
  • Removed remote JS debugging
@jamonholmgren
jamonholmgren / Trees.gd
Created March 15, 2025 23:14
Godot 4.4 MultiMeshInstance3D Tree scattering implementation
@tool
class_name Trees extends MultiMeshInstance3D
# Dimensions of the area to scatter the trees
@export var width: float = 2000.0
@export var height: float = 2000.0
@export var terrain: Terrain3D = null
@export var tree_spread_region_size: float = 20000.0
@jamonholmgren
jamonholmgren / 0-JamminList.md
Last active March 3, 2025 06:55
Easily maintain lists of items in regular UI nodes or GridContainers in Godot 4.x with JamminList

JamminList

In Godot's 2D UI, I often find myself needing to dynamically add and subtract rows of data (such as in a multiplayer lobby system, an inventory system, etc).

JamminList makes updating lists and grids really easy! Build your UI and provide a template row (and an optional header row), along with a function to update every item in the list/grid, and then let JamminList do the rest.

JamminList.update_list(nodes: Array[Node], items: Array[Variant], header: bool, update_func: Callable)

Example: