#!/usr/bin/env bash
# ABOUTME: Walker-dmenu settings menu that lists desktop files from /usr/share/settings-menu/.
# ABOUTME: Reads Name and Icon from .desktop files and launches the selected entry.

SETTINGS_DIR="/usr/share/settings-menu"

declare -A EXEC_MAP

get_name() {
    local lang
    lang=$(locale | grep "^LANG=" | cut -d= -f2 | cut -d_ -f1)
    local find="Name[$lang]="
    local name

    name=$(grep "^$find" "$1" | tail -1 | sed "s/^$find//" | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g')

    if [[ -z "$name" ]]; then
        name=$(grep "^Name=" "$1" | tail -1 | sed 's/^Name=//' | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g')
    fi

    echo "$name"
}

get_exec() {
    grep '^Exec=' "$1" | tail -1 | sed 's/^Exec=//' | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g'
}

entries=""
for file in "$SETTINGS_DIR"/*.desktop; do
    [[ -f "$file" ]] || continue
    name=$(get_name "$file")
    [[ -z "$name" ]] && continue
    EXEC_MAP["$name"]=$(get_exec "$file")
    entries+="$name\n"
done

chosen=$(echo -e "$entries" | sed '/^$/d' | sort | walker -d -p "⚙  Settings")

if [[ -n "$chosen" && -n "${EXEC_MAP[$chosen]}" ]]; then
    ${EXEC_MAP[$chosen]} &disown
fi
