aboutsummaryrefslogtreecommitdiff
path: root/dmenu-edit-config
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukasz.kasprzak@pm.me>2026-01-29 01:27:17 +0100
committerLukasz Kasprzak <lukasz.kasprzak@pm.me>2026-01-29 01:27:17 +0100
commit70e6d80c2d367480478eacf46363ee88a0e994ff (patch)
tree3585660271002a776a8756994c92f8e546f98044 /dmenu-edit-config
parent646bb0d8df0e720c966dc2992dcf7fe1154d17cf (diff)
downloadbin-70e6d80c2d367480478eacf46363ee88a0e994ff.tar.gz
bin-70e6d80c2d367480478eacf46363ee88a0e994ff.zip
added lots of new dmenu scripts
Diffstat (limited to 'dmenu-edit-config')
-rwxr-xr-xdmenu-edit-config52
1 files changed, 52 insertions, 0 deletions
diff --git a/dmenu-edit-config b/dmenu-edit-config
new file mode 100755
index 0000000..47705e1
--- /dev/null
+++ b/dmenu-edit-config
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+# Optional dmenu theming
+# shellcheck disable=SC1090
+[[ -r "${HOME}/.local/bin/dmenu-theming" ]] && . "${HOME}/.local/bin/dmenu-theming"
+
+DMENU="${DMENU:-dmenu}"
+PROMPT="${PROMPT:-Config: }"
+EDITOR_CMD="${EDITOR_CMD:-vim}"
+TERM_CMD="${TERM_CMD:-st -e}" # change to "alacritty -e" / "kitty -e" / "wezterm start --" if needed
+INDEX="${INDEX:-${HOME}/.config/dmenu/configs.tsv}"
+
+[[ -r "$INDEX" ]] || { printf "ERROR: cannot read %s\n" "$INDEX" >&2; exit 1; }
+
+# Build menu: show label, keep path as hidden second field
+menu="$(
+ awk -F'\t' 'NF>=2 {print $1 "\t" $2}' "$INDEX"
+)"
+
+picked="$(
+ printf "%s\n" "$menu" \
+ | ${DMENU} -i -l 20 -p "$PROMPT" ${lines:-} ${colors:-} ${font:-} \
+ || true
+)"
+[[ -n "$picked" ]] || exit 0
+
+path="$(printf "%s" "$picked" | awk -F'\t' '{print $2}')"
+[[ -n "$path" ]] || exit 0
+
+# Expand ~ manually (awk won’t expand it)
+path="${path/#\~/$HOME}"
+
+# If path is relative, treat it as relative to $HOME
+case "$path" in
+ /*) : ;;
+ *) path="${HOME}/${path}" ;;
+esac
+
+# Decide whether we need sudo (simple heuristic: /etc, /usr, /var, /run)
+needs_sudo=0
+case "$path" in
+ /etc/*|/usr/*|/var/*|/run/*) needs_sudo=1 ;;
+esac
+
+# Open in terminal editor (no eval)
+if [[ $needs_sudo -eq 1 ]]; then
+ exec ${TERM_CMD} sudo -E "$EDITOR_CMD" "$path"
+else
+ exec ${TERM_CMD} "$EDITOR_CMD" "$path"
+fi
+