nix/bin/gpg-setup
2025-12-03 20:09:09 -06:00

93 lines
2.3 KiB
Bash
Executable file

#!/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 <<EOF
Key-Type: RSA
Key-Length: 4096
Subkey-Type: RSA
Subkey-Length: 4096
Name-Real: $PRIMARY_NAME
Name-Email: $PRIMARY_EMAIL
Expire-Date: 2y
%ask-passphrase
%commit
EOF
echo ""
echo "Primary key created!"
fi
# Get key ID
KEY_ID=$(gpg --list-secret-keys --keyid-format LONG "$PRIMARY_EMAIL" 2>/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"