Skip to content

Instantly share code, notes, and snippets.

@withakay
withakay / gist:2314d35ce44e9f9f92b80f8ff8014c89
Created January 29, 2024 12:06
pre-commit_commit-to-main-guard.sh
#!/bin/bash
# Setup:
# Assuming you don't alread have a global githooks dir
#
# mkdir -p ~/.githooks/
#
# Save this script to the above path.
# Make a shell script called `pre-commit` in the above path (touch ~/.githooks/pre-commit).
# Edit pre-commit script sp it calls this script from it e.g.
@withakay
withakay / azs.sh
Last active November 6, 2023 08:46
azs - An Azure subscription switcher bash script
#!/bin/bash
# A bash script to switch Azure subscriptions
# save this script as `azs` somewhere in your path and make it executable
# then you can run `azs` to see a list subscriptions and easily switch between them
show_help() {
echo "Usage: $0 [options]"
echo ""
echo "Options:"
@withakay
withakay / no-standard-secuyrity-groups.sh
Created July 5, 2023 08:54
AWS CLI: Get security groups that allow 0.0.0.0/0 on non standard ports (22, 80, 443 etc)
aws ec2 describe-security-groups --region "eu-west-1" \
--query 'SecurityGroups[?((IpPermissions.IpRanges.CidrIp == "0.0.0.0/0") || (IpPermissions.Ipv6Ranges.CidrIpv6 == "::/0"))]' \
--output json\
| jq '.[] | select(.IpPermissions[].FromPort | IN(3, 22, 80, 443) | not)'
@withakay
withakay / csvquery.sh
Last active June 23, 2023 10:48
Query CSV files with SQL from the command line easily, using SQLite
#!/bin/bash
set -eou pipefail
# Function to display usage instructions
display_usage() {
echo "This script uses SQLite3 to load a CSV file into memory and then query it with SQL, printing the results to stdout."
echo "The table name will be 'csv', so use that in your queries."
echo ""
echo "Usage: $0 -f|--file <file_path> [-q|--query <query>] [-p|--print-header] [-h|--header-fix]"
@withakay
withakay / git-cod
Created June 20, 2023 08:21
Git checkout default branch and pull. Optionally create a new working branch
#!/bin/bash
# Place this script in your path and make it executable
# Display the script's usage
display_usage() {
echo "Git Checkout Default Script"
echo "This git script will check out the default HEAD branch"
echo "and pull the latest from the remote. Optionally it will"
echo "create a new branch ready for you to work on."
@withakay
withakay / tf-module-version-pin.sh
Last active May 31, 2023 09:38
Terraform module version pin - search and replace
#!/bin/bash
# A script to search for all terraform files in a directory and replace
# the source attribute of any module references with a specific git ref tag/commit.
# This is useful for pinning a specific version of a module in a terraform project.
#
# Note:
# this script was tested on MacOS and may need to be modified for other platforms
# as the sed command may differ.
#
@withakay
withakay / .envrc
Created May 8, 2023 08:28
Direnv .envrc defaults for python
### My current .envrc defaults for defaults for a python project
# I use asdf to manage runtimes.
# Using asdf with direnv like this removes the
# annoying shims, which for me is more reliable
# less confusing and slightly faster
use asdf
unset PYTHONHOME
@withakay
withakay / doco-alias.sh
Created February 10, 2023 08:32
docker-compose alias
#!/usr/bin/env bash
#
# For use on systems where you might want a global alias to `docker compose`.
#
# If you just need an alias for your own user a shell alias in your profile probably makes more sense.
#
# If you need compatability with the docker-compose v1 container naming convention
# (with underscore delimiter _ over -), you can add the --compatability flag to the below commands.
#
@withakay
withakay / doubly_linked_list.py
Created November 8, 2022 16:28
Doubly Linked List 2 ways in python
from typing import Optional
from typing_extensions import Self
class Node:
def __init__(self, value: Optional[any] = None):
self.prev: Optional[Self] = None
self.next: Optional[Self] = None
self.value: any = value
@withakay
withakay / source-env.sh
Created September 8, 2022 09:43
Source from .env (dotenv) file
# if you want to export a .env file
# with a list of key values like
#
# `FOO=BAR`
#
# without prefixing them with `export` e.g.
#
# `export FOO=BAR`
#
# Do the following: