Skip to content

Instantly share code, notes, and snippets.

View themorgantown's full-sized avatar

Daniel themorgantown

View GitHub Profile
@themorgantown
themorgantown / .htaccess
Created September 19, 2025 18:38
Htaccess file for a Simply Static Export (assuming you're using relative urls during export and your static files have been uploaded to a /static/ folder). You can keep wordpress running in that root dir and just swap this in...
# Enable URL rewriting
RewriteEngine On
# Force HTTPS redirect
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Redirect ALL requests to the static directory
# Check if the requested file exists in /static/ first
#!/usr/bin/env python3
"""
Parallel IA downloader - creates individual download commands for each file
and runs them concurrently using the ia command line tool.
USAGE:
First install the Internet Archive command line tool:
curl -LOs https://archive.org/download/ia-pex/ia
chmod +x ia
# install concurrent futures if not already installed for concurrent downloads
@themorgantown
themorgantown / semplice.py
Created May 12, 2025 18:14
cleanup semplice small layouts (favor large layouts)
import json, re, pathlib
SMALL_KEYS = {"sm", "xs"}
def strip_small(obj):
if isinstance(obj, dict):
cleaned = {}
for k, v in obj.items():
# nuke breakpoint keys
if k in SMALL_KEYS:
@themorgantown
themorgantown / detect-transparency-image.js
Last active April 17, 2025 13:44
detect clicks on a non-transparent image (webp, png, avif, gif) in Hype. Multiple layered images supported. https://forums.tumult.com/t/detect-click-on-non-transparent-area-of-png/24769/
/*
* Clickable Transparency Library
* --------------------------------
* This script enables non-transparent parts of an image to be clickable.
* It works for both <img> elements and any element with a background image.
* For any element with the "clickable-transparency" class:
* - It changes the mouse cursor to 'pointer' over non-transparent areas and 'default' over transparent areas.
* - It prevents click propagation if a transparent area is clicked.
*
* Usage:
@themorgantown
themorgantown / js for head html.html
Created April 4, 2025 13:54
stop scrolling on full screen iPad documents
<script type="text/javascript">
/**
* No-Scroll Script for Hype Documents
* Prevents vertical scrolling on HYPE_document elements
* while preserving other touch gestures
*/
(function() {
// Store original touch positions
let startY;
// element - DOMHTMLElement that triggered this function being called
// event - event that triggered this function being called
function pinchablev2(hypeDocument, element, event) {
// if it's 'pinchable', let it resize outside of hype scene
// User configurable settings
var PINCHABLE_CONFIG = {
maxScale: 4, // Maximum zoom level
minScale: 1, // Minimum zoom level (enforced strictly)
@themorgantown
themorgantown / mysql_splitter_tool.py
Last active September 17, 2024 17:15
given a HUGE sql export, this script will split it up into individual tables and generate import statements for each table, like: mysql -u dbusername -p'dbpassword' database_name < table1
# usage:
# python3 splitter.py database_name dbusername dbpassword
import sys
import os
import re
import logging
def main():
@themorgantown
themorgantown / mullvadbase.mobileconfig
Created September 6, 2024 14:11
Mullvad Base DNS server mobileconfig
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>DNSSettings</key>
<dict>
<key>DNSProtocol</key>
@themorgantown
themorgantown / minify_apple_contacts_export.py
Created June 27, 2024 18:44
keeps name, tel, email, and address.
import vobject
import logging
from tqdm import tqdm
def minimize_vcf(input_file, output_file, fields_to_keep=None):
if fields_to_keep is None:
fields_to_keep = ['n', 'fn', 'tel', 'email', 'adr']
fields_to_keep = [field.lower() for field in fields_to_keep]
import http.server
import ssl
import socket
import os
import subprocess
HOST = f"{socket.gethostname()}"
PORT = 443
CERT_FILE = 'self-signed.cert'
KEY_FILE = 'self-signed.key'