function peers::list() {
  local dir
  dir="$(ctx::clients)"

  if [[ -z "$(ls -A "$dir"/*.conf 2>/dev/null)" ]]; then
    log::wg_list "No clients configured"
    return 0
  fi

  for conf in "${dir}"/*.conf; do
    local client_name
    client_name=$(basename "$conf" .conf)

    local ip
    ip=$(grep "^Address" "$conf" | awk '{print $3}' | cut -d'/' -f1)

    local public_key
    public_key=$(keys::public "$client_name" 2>/dev/null || echo "unknown")

    # Determine type from IP
    local type="unknown"
    for t in $(config::device_types); do
      local subnet
      subnet=$(config::subnet_for "$t")
      if string::starts_with "$ip" "$subnet"; then
        type="$t"
        break
      fi
    done

    printf "  %-30s %-15s %-10s %s\n" \
      "$client_name" "$ip" "$type" "$public_key"
  done