#!/bin/bash # Setup GPG key with all email identities # Usage: gpg-setup set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Configuration PRIMARY_NAME="Ray Andrew Sinurat" PRIMARY_EMAIL="raydreww@gmail.com" # Additional UIDs to add (name|email) ADDITIONAL_UIDS=( "Ray Andrew Sinurat|rayandrew@uchicago.edu" "Ray Andrew|raydreww@gmail.com" "Ray Andrew|rayandrew@uchicago.edu" "Ray A. O. Sinurat|raydreww@gmail.com" "Ray A. O. Sinurat|rayandrew@uchicago.edu" "Ray Andrew Obaja Sinurat|raydreww@gmail.com" "Ray Andrew Obaja Sinurat|rayandrew@uchicago.edu" ) # Check if key already exists if gpg --list-secret-keys "$PRIMARY_EMAIL" &>/dev/null; then echo "GPG key for $PRIMARY_EMAIL already exists." echo "" gpg --list-secret-keys --keyid-format LONG "$PRIMARY_EMAIL" echo "" read -p "Do you want to add missing UIDs to this key? [y/N] " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 0 fi else echo "Creating new GPG key for $PRIMARY_NAME <$PRIMARY_EMAIL>" echo "" echo "You will be prompted for a passphrase." echo "" gpg --full-generate-key --batch </dev/null | grep '^sec' | head -1 | sed 's/.*\/\([A-F0-9]*\) .*/\1/') if [[ -z $KEY_ID ]]; then echo "Error: Could not find key ID" exit 1 fi echo "" echo "Key ID: $KEY_ID" echo "" echo "Adding additional UIDs..." # Get existing UIDs EXISTING_UIDS=$(gpg --list-keys "$KEY_ID" 2>/dev/null | grep '^uid' | sed 's/.*] //') for uid in "${ADDITIONAL_UIDS[@]}"; do NAME="${uid%|*}" EMAIL="${uid#*|}" UID_STRING="$NAME <$EMAIL>" if echo "$EXISTING_UIDS" | grep -qF "$UID_STRING"; then echo " [skip] $UID_STRING (already exists)" else echo " [add] $UID_STRING" "$SCRIPT_DIR/gpg-add-uid" "$NAME" "$EMAIL" "$KEY_ID" 2>/dev/null || true fi done echo "" echo "Done! Final key:" echo "" gpg --list-keys --keyid-format LONG "$KEY_ID" echo "" echo "Update your neomutt config with:" echo " set pgp_sign_as = 0x$KEY_ID"