#!/bin/sh
# Fuzzy-pick a desktop app ID and copy to clipboard.
existing_dirs=""
for d in /usr/share/applications \
         /usr/local/share/applications \
         "$HOME/.local/share/applications" \
         /var/lib/flatpak/exports/share/applications \
         "$HOME/.local/share/flatpak/exports/share/applications" \
         /var/lib/snapd/desktop/applications; do
    [ -d "$d" ] && existing_dirs="$existing_dirs $d"
done

if [ -z "$existing_dirs" ]; then
    echo "No application directories found." >&2
    exit 1
fi

# word splitting of $existing_dirs is intended
# shellcheck disable=SC2086
chosen=$(
    fd --type f --extension desktop . $existing_dirs \
    | while IFS= read -r f; do
        app_id=$(basename "$f" .desktop)
        name=$(sed -n 's/^Name=//p' "$f" | head -n1)
        [ -z "$name" ] && name=$app_id
        printf '%s\t%s\n' "$name" "$app_id"
    done \
    | sort -u -t "$(printf '\t')" -k1 \
    | fzf \
        --delimiter='\t' \
        --with-nth=1,2 \
        --prompt="App ID › " \
        --height=50% \
        --layout=reverse \
        --border=rounded \
        --info=inline
)

[ -n "$chosen" ] || exit 0

app_id=$(printf '%s\n' "$chosen" | cut -f2)
printf '%s' "$app_id" | wl-copy
echo "Copied: $app_id"
