Skip to content

Instantly share code, notes, and snippets.

View bmorrisondev's full-sized avatar

Brian Morrison II bmorrisondev

View GitHub Profile
@bmorrisondev
bmorrisondev / .bmorc
Created August 19, 2025 17:49
My custom terminal rc file (sourced from ~/.zshrc)
# ==========================================
# CLI Tools Configuration
# ==========================================
# Aliases for better tools
alias ls='eza --color=always --group-directories-first -l'
alias ll='eza -alF --color=always --group-directories-first'
alias la='eza -al --color=always --group-directories-first'
alias l='eza -Fl --color=always --group-directories-first'
alias l.='eza -a | grep "^\."'
@bmorrisondev
bmorrisondev / build-prod.sh
Created July 7, 2025 14:23
Scripts to build a React Native app for iOS and ship to Test Flight
#!/bin/bash
FOLDER_PATH="./build"
# Create a build folder for artifacts
if [ ! -d "$FOLDER_PATH" ]; then
mkdir -p "$FOLDER_PATH"
fi
# Build the thing
@bmorrisondev
bmorrisondev / notion-sync.py
Created March 2, 2021 22:16
Sync Todoist Tasks to a Notion Database
from notion.client import NotionClient
import requests
import schedule
import time
from datetime import datetime
def get_todoist_tasks():
token = "todoist_token"
headers = {
@bmorrisondev
bmorrisondev / Set-NamecheapDdnsRecord.ps1
Last active June 25, 2025 16:40
Update a Dynamic DNS Record in Namecheap using PowerShell
function Set-NamecheapDdnsRecord {
<#
.SYNOPSIS
Update the IP address of a Dynamic DNS record in Namecheap.
.EXAMPLE
PS C:\> Set-NamecheapDdnsRecord -HostRecord www -Domain brianmorrison.me -ApiKey 12345678abcd -Ip 123.234.123.234
Updates the record for www.brianmorrison.me to 123.234.123.234
.NOTES
Author: Brian Morrison II
Date: 4/10/2019
@bmorrisondev
bmorrisondev / index.ts
Created May 27, 2025 20:12
A Supabase Edge Function to handle Clerk Webhooks
import { createClient } from 'npm:@supabase/supabase-js'
import { verifyWebhook } from 'npm:@clerk/backend/webhooks'
Deno.serve(async (req) => {
// Verify webhook signature
const webhookSecret = Deno.env.get('CLERK_WEBHOOK_SECRET')
if (!webhookSecret) {
return new Response('Webhook secret not configured', { status: 500 })
}
@bmorrisondev
bmorrisondev / registry_cleanup.sh
Created February 3, 2025 17:40
A script to automatically remove unused images from a microk8s registry
#!/bin/bash
# Set variables
REGISTRY_URL="localhost:32000"
get_in_use_images() {
microk8s kubectl get pods --all-namespaces -o jsonpath='{.items[*].spec.containers[*].image}' | tr ' ' '\n' | sort | uniq
}
get_registry_images() {
@bmorrisondev
bmorrisondev / http.ts
Created February 11, 2025 16:00
A Convex HTTP API to handle Clerk web-hooks
// convex/http.ts
import { httpRouter } from "convex/server";
import { httpAction } from "./_generated/server";
import { createWebhooksHandler } from "@brianmmdev/clerk-webhooks-handler";
import { api } from "./_generated/api";
// define the webhook handler
const handleClerkWebhook = httpAction(async (ctx, request) => {
const handler = createWebhooksHandler({
onUserCreated: async user => {
// Follow this setup guide to integrate the Deno language server with your editor:
// https://deno.land/manual/getting_started/setup_your_environment
// This enables autocomplete, go to definition, etc.
// Setup type definitions for built-in Supabase Runtime APIs
import "jsr:@supabase/functions-js/edge-runtime.d.ts"
import { createClient } from 'https://esm.sh/@supabase/supabase-js@2.39.3'
console.log("Hello from Functions!")
import { ReactNode } from "react"
import Navbar from "./Navbar"
import { useUser } from "@clerk/remix"
import { Toaster } from "./ui/toaster"
import Spinner from "./Spinner"
import { PosthogPageview } from "~/posthog/PosthogPageview"
import OnboardingDialog from "./OnboardingDialog"
import { useLoaderData } from "@remix-run/react"
import { clerkLoader } from "~/loaders"
import { useQuery } from "convex/react"
@bmorrisondev
bmorrisondev / convex.code-snippets
Created August 22, 2024 19:48
VSCode snippets to quickly generate Convex queries and mutations
{
"Convex Query": {
"prefix": "cvq",
"scope": "typescript",
"body": [
"export const ${1} = query({",
"\targs: {",
"\t\t${2}",
"\t},",
"\thandler: async (ctx, args) => {",