# show labels and uuids of disk devices
emulate -L zsh
setopt extendedglob

local -a -U disks
local -A mountinfo

disks=( /dev/disk/by-id/*(N@:A) )

if (( ${#disks} == 0 )); then
    printf 'No disks detected.\n'
    return 1
fi

if [[ -r /proc/mounts ]]; then
    for cline in "${(f)$(</proc/mounts)[@]}"; do
        mountinfo["${cline[(w)1]:A}"]="${cline[(w)2,-1]}"
    done
fi

for dev in "$disks[@]"; do
    print ${fg_bold[red]}${dev}${reset_color} \
          /dev/disk/by-label/*(@e/'[[ ${REPLY:A} == $dev ]] && REPLY=${fg[blue]}LABEL=${REPLY:t}${reset_color}'/N) \
          /dev/disk/by-uuid/*(@e/'[[ ${REPLY:A} == $dev ]] && REPLY=${fg[green]}UUID=${REPLY:t}${reset_color}'/N)
    if [[ -n "${mountinfo["$dev"]}" ]]; then
        print -f " Mount: %s -t %s -o %s\n" \
                 ${mountinfo["$dev"][(w)1]} \
                 ${mountinfo["$dev"][(w)2]} \
                 "${mountinfo["$dev"][(w)3,-5]}"
    fi
    for sysdevsize in \
        /sys/block/${dev:t}/size(N) \
        /sys/block/${${dev:t}%%<->}/${dev:t}/size(N)
    do
        print -f "  Size: %.3f GiB (%d Byte)\n" \
                 $(($(<$sysdevsize)/(2.0*1024.0*1024.0))) \
                 $(($(<$sysdevsize)*512))
    done

    print -f "    Id: %s\n" /dev/disk/by-id/*(@e/'[[ ${REPLY:A} == $dev ]]'/N:t)
done
