Skip to content

Instantly share code, notes, and snippets.

@shawnyeager
shawnyeager / architecture.md
Last active February 23, 2026 11:22
BUD-XX: Reciprocal Mirroring for Blossom — Draft Architecture (seeking feedback)

BUD-XX: Reciprocal Mirroring for Blossom

Status: Draft — seeking feedback from Blossom and Nostr developers Date: 2026-02-22

The Problem

Blossom has solid primitives for mirroring — PUT /mirror is lightweight, client-driven, and works well. A client can already upload a blob and mirror it to N servers with N simple HTTP calls. That part scales fine.

What's missing is reciprocity and accountability:

@shawnyeager
shawnyeager / swearjar-SKILL.md
Created February 20, 2026 01:48
Swear Jar — an OpenClaw skill that posts to Nostr every time the user curses
name description metadata
swear-jar
Detects profanity in user messages and posts a public note to Nostr via nostr-social. Every curse word costs a post.
openclaw
requires
bins
nostr-social

Swear Jar

Every time the user curses at you, post a note to Nostr calling them out. Public accountability. No mercy.

@shawnyeager
shawnyeager / framework-esp-corruption.md
Created January 28, 2026 04:42
Framework 13: firmware update corrupts ESP FAT filesystem

Framework 13: Firmware Update Corrupts ESP (FAT Filesystem)

After a recent firmware update on a Framework Laptop 13, the EFI System Partition (ESP) can end up with a corrupted FAT filesystem. This is a UEFI/firmware issue, not distro-specific.

Symptoms

Anything that writes to /boot fails with read-only errors. The kernel log (journalctl -k) confirms the corruption:

FAT-fs (nvme0n1p1): Volume was not properly unmounted. Some data may be corrupt.
@shawnyeager
shawnyeager / opencode-systemd-tailscale.md
Last active March 9, 2026 05:27
Run OpenCode as a persistent systemd service with Tailscale access

OpenCode Web Server Setup

Run OpenCode as a persistent background service, accessible from any device via Tailscale.

Why?

  • Access from anywhere — Start a task from your phone, check results from your laptop
  • Sessions persist — Close the browser, come back later, your session is still there
  • Multiple clients — Terminal TUI and browser can connect to the same session simultaneously
  • Survives crashes — systemd restarts the server automatically
@shawnyeager
shawnyeager / claude.md
Last active January 19, 2026 22:24
OpenCode agent to bypass Anthropic's 'You are OpenCode' block. Install: `cp claude.md ~/.config/opencode/agents/claude.md` and tab to `claude` in OpenCode
description mode model tools
Claude Code-compatible agent for Anthropic OAuth
primary
anthropic/claude-opus-4-5
write edit bash
true
true
true
@shawnyeager
shawnyeager / metabolic-workspace-guide.md
Last active January 15, 2026 20:32
Metabolic Workspace: CLI/Neovim Implementation based on Joan Westenberg's concept

Metabolic Workspace: CLI/Neovim Implementation

Based on Joan Westenberg's Metabolic Workspace.


The Problem with Most Note Systems

You've probably tried this before: Notion, Obsidian, Roam, whatever. You set up folders, tags, bidirectional links. You clip articles. You highlight passages. You build an elaborate archive.

@shawnyeager
shawnyeager / lnurl-proxy-guide.md
Created November 27, 2025 22:27
Faster Lightning Address Payments with Netlify Edge Functions

Faster Lightning Address Payments with Netlify Edge Functions

Problem: Using HTTP redirects for Lightning Address (sats@example.comuser@getalby.com) adds 200-500ms latency because wallets must follow the redirect before fetching the LNURL-pay response.

Solution: Replace redirects with an Edge Function proxy that fetches from Alby server-side and returns the response directly.

How it works

Before (redirect):
@shawnyeager
shawnyeager / omarchy-dynamic-monitor-management.md
Last active November 14, 2025 12:16
Omarchy Dynamic Monitor Management

Omarchy Dynamic Monitor Management

Disable laptop displays when external monitor is connected OR lid is closed. Works automatically with hotplug detection.

The Setup

Three files:

  1. monitor-manager.sh - Script with laptop display configs and logic
  2. monitors.conf - Defines all displays + runs script on reload/lid events
@shawnyeager
shawnyeager / convert_jekyll_to_prose.py
Created May 4, 2025 02:20
Convert Jekyll-formatted markdown files to prose.sh format.
#!/usr/bin/env python3
"""
Convert Jekyll-formatted markdown files to prose.sh format.
This script transforms Jekyll blog posts to prose.sh format with the following enhancements:
1. Processes all .md files in the current directory
2. Creates a 'prose.sh' subdirectory for output files
3. Transforms front matter:
- Removes Jekyll-specific fields like layout
- Preserves title, date, description (with markdown removed)
@shawnyeager
shawnyeager / convert_drafts_to_obsidian.py
Created April 2, 2025 14:38
Python script to convert Drafts app export in JSON format to a drop-in-ready folder of Obsidian markdown files
import json
import os
import re
import argparse
def sanitize_filename(title):
"""Convert a title into a safe filename by replacing invalid characters, preserving spaces."""
# Replace invalid filesystem characters with spaces
invalid_chars = r'[\/:*?"<>|]'
sanitized = re.sub(invalid_chars, ' ', title.strip())