#!/bin/bash
set -euo pipefail

EXT_IP=$(dig +short myip.opendns.com @resolver1.opendns.com 2>/dev/null || echo "")

if [ -z "$EXT_IP" ]; then
    echo "Could not determine external IP - not changing layout"
    exit 0
else
    COUNTRY=$(geoiplookup "$EXT_IP" | head -1 | awk -F': ' '{print $2}' | cut -c1-2)

    case "$COUNTRY" in
        NO) LAYOUT="no" ;;
        DE|AT) LAYOUT="de" ;;
        FR) LAYOUT="fr" ;;
        SE) LAYOUT="se" ;;
        DK) LAYOUT="dk" ;;
        GB) LAYOUT="gb" ;;
        FI) LAYOUT="fi" ;;
        NL) LAYOUT="nl" ;;
        ES) LAYOUT="es" ;;
        IT) LAYOUT="it" ;;
        *)  LAYOUT="us" ;;
    esac
fi

CURRENT=$(grep '^XKBLAYOUT=' /etc/default/keyboard 2>/dev/null | cut -d'"' -f2 || echo "")

if [ "$CURRENT" != "$LAYOUT" ]; then
    sudo tee /etc/default/keyboard > /dev/null <<EOF
XKBMODEL="pc105"
XKBLAYOUT="$LAYOUT"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
EOF
    setupcon --force 2>/dev/null || true
    sudo loadkeys "$LAYOUT" 2>/dev/null || true
    echo "Keyboard layout set to: $LAYOUT (country: $COUNTRY)"
    swaymsg input type:keyboard xkb_layout "$LAYOUT" 2>/dev/null || true
else
    echo "Keyboard layout already correct: $LAYOUT"
fi