50 lines
1.6 KiB
Bash
Executable File
50 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Install rcalc launcher + icon for Wayland/XDG desktops (KDE, GNOME, …).
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
BIN="${ROOT}/dist/rcalc"
|
|
ICON_SRC="${ROOT}/assets/icon-256.png"
|
|
DESKTOP_SRC="${ROOT}/assets/rcalc.desktop"
|
|
|
|
if [[ ! -x "$BIN" ]]; then
|
|
echo "Building release binary…"
|
|
(cd "$ROOT" && cargo build --release)
|
|
# Prefer project dist/, else cargo target
|
|
if [[ -x "$ROOT/dist/rcalc" ]]; then
|
|
BIN="$ROOT/dist/rcalc"
|
|
else
|
|
BIN="$(find "$ROOT" /tmp/cursor-sandbox-cache -path '*/release/rcalc' -type f 2>/dev/null | head -1 || true)"
|
|
fi
|
|
fi
|
|
|
|
if [[ ! -x "$BIN" ]]; then
|
|
echo "error: binary not found; run: cargo build --release && cp target/release/rcalc dist/" >&2
|
|
exit 1
|
|
fi
|
|
|
|
APP_DIR="${HOME}/.local/share/applications"
|
|
ICON_DIR="${HOME}/.local/share/icons/hicolor/256x256/apps"
|
|
mkdir -p "$APP_DIR" "$ICON_DIR" "${HOME}/.local/bin"
|
|
|
|
cp -f "$ICON_SRC" "${ICON_DIR}/rcalc.png"
|
|
ln -sfn "$BIN" "${HOME}/.local/bin/rcalc"
|
|
|
|
# Rewrite Exec to absolute binary path
|
|
sed "s|^Exec=.*|Exec=${BIN}|" "$DESKTOP_SRC" \
|
|
| sed "s|^Path=.*|Path=${ROOT}|" \
|
|
> "${APP_DIR}/rcalc.desktop"
|
|
chmod 644 "${APP_DIR}/rcalc.desktop"
|
|
|
|
# Refresh caches (ignore failures on minimal setups)
|
|
update-desktop-database "$APP_DIR" 2>/dev/null || true
|
|
gtk-update-icon-cache -f -t "${HOME}/.local/share/icons/hicolor" 2>/dev/null || true
|
|
|
|
echo "Installed:"
|
|
echo " launcher: ${APP_DIR}/rcalc.desktop"
|
|
echo " icon: ${ICON_DIR}/rcalc.png"
|
|
echo " symlink: ${HOME}/.local/bin/rcalc"
|
|
echo
|
|
echo "On Wayland: quit rcalc if running, then start it from the app menu"
|
|
echo "(or: rcalc). The dock should show the custom icon."
|