Skip to content

Instantly share code, notes, and snippets.

View agoose77's full-sized avatar
🏠
Working from home

Angus Hollands agoose77

🏠
Working from home
View GitHub Profile
@agoose77
agoose77 / find-nodegroup-ami.sh
Last active August 7, 2026 21:45
Find the AMI details for a deployed managed nodegroup on AWS
#!/usr/bin/env bash
: "${nodegroup:?Need nodegroup}"
: "${region:?Need region}"
: "${cluster:?Need cluster}"
# Get the autoscaling group name from the EKS node pool
autoscaling_group_name=$(aws --region "${region}" eks describe-nodegroup --cluster-name "${cluster}" --nodegroup-name "${nodegroup}" --output json | jq '.nodegroup.resources.autoScalingGroups | last | .name' -r)
# Determine the ASG launch template for this ASG
launch_template_name=$(aws --region "${region}" autoscaling describe-auto-scaling-groups --auto-scaling-group-names "${autoscaling_group_name}" | jq '.AutoScalingGroups | last | .MixedInstancesPolicy.LaunchTemplate.LaunchTemplateSpecification.LaunchTemplateName' -r )
# Now query the image ID for that template
@agoose77
agoose77 / controller.py
Created July 28, 2026 12:51
Deployment controller
#!/usr/bin/env python
import argparse
from kubernetes import client, config
from kubernetes.client.exceptions import NotFoundException
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("replicas", type=int)
parser.add_argument("--deployment", default="node-placeholder")
import argparse
import collections
import csv
import escapism
import string
import sys
def escape_email(email):
return escapism.escape(email, safe=safe_chars, escape_char="-").lower()
@agoose77
agoose77 / flake.nix
Created June 3, 2026 10:48
Docker image in Flake
{
description = "nbgitpuller";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
outputs = {
self,
nixpkgs,
xterm_colors = [
# colors 0..15: 16 basic colors
(0x00, 0x00, 0x00), # 0
(0xCD, 0x00, 0x00), # 1
(0x00, 0xCD, 0x00), # 2
(0xCD, 0xCD, 0x00), # 3
(0x00, 0x00, 0xEE), # 4
(0xCD, 0x00, 0xCD), # 5
(0x00, 0xCD, 0xCD), # 6
(0xE5, 0xE5, 0xE5), # 7
@agoose77
agoose77 / README.md
Created March 27, 2026 14:07
Generate nbgitpuller-aware permalinks

Modify user-direct URLs to include permalinks

This script takes two URLs, the permalink URL for a hub profile, and a user-direct URL (e.g. an nbgitpuller URL), and fuses them together.

python ./permalink.py <USER-URL> <PERMALINK-URL>

The output is the fixed URL.

Basic JupyterHub CLI

Spin up named servers from a CLI

python jupyterhub-cli.py --server <SERVER-NAME> --profile-option="profile=<PROFILE-SLUG>" https://my-hub.com/hub/api/ <API-TOKEN>

You can use this with xargs to spin up several servers.

@agoose77
agoose77 / flake.lock
Last active February 13, 2026 11:47
MyST Flake
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1770841267,
"narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae",
"type": "github"
@agoose77
agoose77 / README.md
Created January 22, 2026 16:19
Start a JupyterHub from the CLI

I always feel like state machines can quickly become a lot of pain. Although I have had my reservations about the Python case/match feature, it's a perfect fit for this.

@agoose77
agoose77 / social-cats.js
Created January 22, 2026 14:56
Google Meet custom reacts
// ==UserScript==
// @name Custom Meet GIFs
// @namespace http://tampermonkey.net/
// @version 2026-01-22
// @description try to take over the world!
// @author You
// @match https://meet.google.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=google.com
// @grant none
// ==/UserScript==