#!/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