110 lines
4.2 KiB
Bash
Executable File
110 lines
4.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# Install the alanfortlink.clipboard Omarchy shell plugin from this repo.
|
|
#
|
|
# - symlinks the repo root (the plugin folder) into ~/.config/omarchy/plugins/alanfortlink.clipboard
|
|
# - rescans + enables it (shell.json gets plugins[] entry; the built-in
|
|
# omarchy.clipboard is recorded in disabledPlugins[] and routed here)
|
|
# - checks and installs dependencies transparently (QR/OCR degrade without them)
|
|
# - binds SUPER+SHIFT+V and ALT+SHIFT+V to the clone-aware source id (with backup)
|
|
set -euo pipefail
|
|
|
|
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PLUGIN_DIR="$REPO_DIR"
|
|
PLUGINS_DIR="$HOME/.config/omarchy/plugins"
|
|
PLUGIN_ID="alanfortlink.clipboard"
|
|
BINDINGS="$HOME/.config/hypr/bindings.conf"
|
|
|
|
echo "==> Checking dependencies"
|
|
SKIP_DEPS=false
|
|
for a in "$@"; do [[ $a == --skip-deps ]] && SKIP_DEPS=true; done
|
|
missing=()
|
|
command -v python3 >/dev/null 2>&1 || missing+=("python3")
|
|
command -v jq >/dev/null 2>&1 || missing+=("jq")
|
|
command -v wl-copy >/dev/null 2>&1 || missing+=("wl-clipboard")
|
|
command -v wtype >/dev/null 2>&1 || missing+=("wtype")
|
|
command -v zbarimg >/dev/null 2>&1 || missing+=("zbar") # QR decode
|
|
command -v tesseract >/dev/null 2>&1 || missing+=("tesseract") # OCR search
|
|
if [[ $SKIP_DEPS == true ]]; then
|
|
echo " skipped (--skip-deps)"
|
|
elif (( ${#missing[@]} > 0 )); then
|
|
echo " installing missing packages (nothing hidden): ${missing[*]}"
|
|
omarchy pkg add "${missing[@]}" || echo " WARNING: install failed — QR/OCR degrade gracefully without them"
|
|
else
|
|
echo " all present: wl-clipboard, jq, python3, wtype, zbar, tesseract"
|
|
fi
|
|
|
|
echo "==> Linking plugin into $PLUGINS_DIR/$PLUGIN_ID"
|
|
mkdir -p "$PLUGINS_DIR"
|
|
ln -sTfn "$PLUGIN_DIR" "$PLUGINS_DIR/$PLUGIN_ID"
|
|
# On other machines, install directly from git instead:
|
|
# omarchy plugin add <this-repo-git-url> --enable
|
|
chmod +x "$PLUGIN_DIR"/capture.py "$PLUGIN_DIR"/paste-entry.sh "$PLUGIN_DIR"/open-entry.sh
|
|
|
|
echo "==> Rescanning shell plugins"
|
|
omarchy-shell shell rescanPlugins >/dev/null
|
|
discovered=0
|
|
for _ in $(seq 1 40); do
|
|
if omarchy-plugin-list --json | jq -e --arg id "$PLUGIN_ID" 'any(.[]; .id == $id)' >/dev/null 2>&1; then
|
|
discovered=1
|
|
break
|
|
fi
|
|
sleep 0.05
|
|
done
|
|
if [[ $discovered != 1 ]]; then
|
|
echo "ERROR: plugin was not discovered by the shell" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "==> Enabling $PLUGIN_ID (replaces built-in omarchy.clipboard)"
|
|
omarchy plugin enable "$PLUGIN_ID"
|
|
|
|
echo "==> Binding SUPER+SHIFT+V and ALT+SHIFT+V to the clipboard source"
|
|
# Always target the built-in source id. Omarchy routes it to this clone while
|
|
# installed, then automatically routes it back to the built-in after removal.
|
|
rebound=0
|
|
if [[ -f $HOME/.config/hypr/bindings.lua ]]; then
|
|
LUA="$HOME/.config/hypr/bindings.lua"
|
|
tmp=$(mktemp)
|
|
python3 - "$LUA" >"$tmp" <<'PY'
|
|
import re, sys
|
|
text = open(sys.argv[1]).read()
|
|
command = "omarchy-shell shell toggle omarchy.clipboard"
|
|
for chord in ("SUPER + SHIFT + V", "ALT + SHIFT + V"):
|
|
line = f'o.bind("{chord}", "Clipboard manager (clipboard-history)", "{command}")'
|
|
pattern = re.compile(r'^\s*o\.bind\("' + re.escape(chord) + r'".*$', re.M)
|
|
if pattern.search(text):
|
|
text = pattern.sub(line, text, count=1)
|
|
else:
|
|
text = text.rstrip() + "\n" + line + "\n"
|
|
sys.stdout.write(text)
|
|
PY
|
|
if ! cmp -s "$LUA" "$tmp"; then
|
|
cp "$LUA" "$LUA.bak.$(date +%s)"
|
|
mv "$tmp" "$LUA"
|
|
echo " updated bindings.lua (backup created)"
|
|
else
|
|
rm -f "$tmp"
|
|
echo " bindings.lua already correct"
|
|
fi
|
|
rebound=1
|
|
elif [[ -f $HOME/.config/hypr/bindings.conf ]]; then
|
|
CONF="$HOME/.config/hypr/bindings.conf"
|
|
cp "$CONF" "$CONF.bak.$(date +%s)"
|
|
sed -i '/^bindd = \(SUPER\|ALT\) SHIFT, V, /d' "$CONF"
|
|
printf '%s\n' \
|
|
'bindd = SUPER SHIFT, V, Clipboard manager, exec, omarchy-shell shell toggle omarchy.clipboard' \
|
|
'bindd = ALT SHIFT, V, Clipboard manager, exec, omarchy-shell shell toggle omarchy.clipboard' >>"$CONF"
|
|
echo " updated bindings.conf (backup created)"
|
|
rebound=1
|
|
fi
|
|
if (( rebound )); then
|
|
hyprctl reload >/dev/null
|
|
else
|
|
echo "ERROR: no live Hyprland bindings file found" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo
|
|
echo "Done. Press SUPER+SHIFT+V (or ALT+SHIFT+V) to open the clipboard picker."
|
|
echo "Edit code in $REPO_DIR; run 'omarchy-shell shell rescanPlugins' after changes."
|