#!/bin/bash

# Copyright (C) 2013-2025 Marcin Krol <hawk@tld-linux.org>
# All Rights Reserved

if [ "$(basename "${0}" 2>/dev/null)" != "lsdev" ]; then
  echo "-------------------------------------------------------------------------------"
  printf "| %-35s | %-10s | %-10s | %-11s |\n" "Device" "Type" "Size" "FS type"
  echo "-------------------------------------------------------------------------------"
fi

lsblk -r -n -b -o type,size,fstype,kname,name | sed -e 's/^/"/g; s/$/"/g; s/ /" "/g;' | sort -k 5 -u | while read dev_type dev_size dev_fs dev_kname dev_name; do
  dev_type=$(echo "${dev_type}" | sed -e 's/"//g;' 2>/dev/null)
  dev_size=$(echo "${dev_size}" | sed -e 's/"//g;' 2>/dev/null)
  dev_fs=$(echo "${dev_fs}" | sed -e 's/"//g;' 2>/dev/null)
  dev_kname=$(echo "${dev_kname}" | sed -e 's/"//g;' 2>/dev/null)
  dev_name=$(echo "${dev_name}" | sed -e 's/"//g;' 2>/dev/null)
  if [ -n "${1}" ] && [ "${1}" != "${dev_type}" ]; then
    continue
  fi
  if echo "${dev_fs}" | grep -q "raid"; then
    dev_fs=""
  fi
  if [ "$(basename "${0}" 2>/dev/null)" = "lsdev" ]; then
    echo "${dev_kname}"
  else
    printf "| %-35s | %-10s | %-10s | %-11s |\n" "${dev_name}" "${dev_type}" "$(echo "scale=1; ${dev_size} / 1024 / 1024 / 1024;" | bc -l | sed -e 's/^\./0./') GB" "${dev_fs}"
  fi
done

if [ "$(basename "${0}" 2>/dev/null)" != "lsdev" ]; then
  echo "-------------------------------------------------------------------------------"
fi
