Select-menu options gain an optional third field rendered under the label, filtered alongside it, and returned with the selection. The plugin picker uses it to show every plugin's id and act on the id the selection hands back, replacing the duplicate-name label suffix. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
47 lines
1.4 KiB
Bash
Executable File
47 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# omarchy:summary=Pick a shell plugin to enable, disable, clone, or remove
|
|
# omarchy:group=menu
|
|
# omarchy:name=plugin
|
|
# omarchy:args=<enable|disable|clone|remove>
|
|
|
|
set -euo pipefail
|
|
|
|
PLUGIN_ICON=$'\U000f0431'
|
|
|
|
case "${1:-}" in
|
|
enable) filter='(.enabled | not)' ;;
|
|
disable) filter='.canDisable and .enabled' ;;
|
|
clone) filter='.firstParty and (.id as $id | ($plugins | map(.clonedFrom // "") | index($id)) == null)' ;;
|
|
remove) filter='(.firstParty | not)' ;;
|
|
*)
|
|
echo "Usage: omarchy-menu-plugin <enable|disable|clone|remove>" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
plugins=$(omarchy-plugin-list --json)
|
|
|
|
# The id rides along as row subtext: it tells same-named plugins apart on
|
|
# screen and comes back with the selection as the key to act on.
|
|
rows=$(jq -r --arg icon "$PLUGIN_ICON" \
|
|
". as \$plugins
|
|
| .[] | select($filter)
|
|
| \$icon + \"\\t\" + .name + \"\\t\" + .id" <<<"$plugins")
|
|
[[ -n $rows ]] || { omarchy-notification-send "No plugin to ${1}"; exit 0; }
|
|
|
|
selection=$(omarchy-menu-select "${1^} plugin" <<<"$rows") || exit 0
|
|
[[ -n $selection ]] || exit 0
|
|
|
|
id=$(cut -f2 <<<"$selection")
|
|
[[ -n $id ]] || exit 1
|
|
|
|
if [[ $1 == "clone" ]]; then
|
|
omarchy-launch-floating-terminal-with-presentation \
|
|
"omarchy-plugin-clone --edit $(printf '%q' "$id")"
|
|
elif [[ $1 == "remove" ]]; then
|
|
omarchy-launch-floating-terminal-with-presentation "omarchy-plugin-remove $(printf '%q' "$id")"
|
|
else
|
|
"omarchy-plugin-$1" "$id"
|
|
fi
|