Files
MeshTerm/scripts/cardputer-zero/launcher-entry.sh
T
Jean-Pierre MartineauandClaude Opus 5.5 99b991707e Comments of the scripts and the packaging files are in ASD-STE100
The Python scripts, the packaging code, and the full-line comments of the
shell scripts. Heredocs, marker lines, licence lines, and code do not
change. The help text of type-text.py now starts with a complete STE
sentence, and uart1-mux.py now says three writes, as the code does.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 21:37:03 -04:00

65 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
# SPDX-License-Identifier: Apache-2.0
# launcher-entry -- put MeshTerm on the app launcher of the Cardputer Zero, from a checkout.
#
# Usage: scripts/cardputer-zero/launcher-entry.sh [install|remove]
#
# The stock launcher (APPLaunch) lists the entries that it finds in
# /usr/share/APPLaunch/applications. An entry with Terminal=false gets the display and the
# keyboard for itself. The launcher names them in APPLAUNCH_LINUX_FBDEV_DEVICE and
# APPLAUNCH_LINUX_KEYBOARD_DEVICE. This is how `python -m meshterm.emulator` knows that it
# must draw on the display and not open a window. If the user holds Esc for three seconds,
# the app still ends. The launcher sends SIGTERM, and MeshTerm treats it as a quit.
#
# This is the entry for developers. Run it from a source checkout that has its venv at
# .venv (refer to docs/devices/cardputer-zero.md). It writes into /usr/share, so it asks
# sudo for the two files and for nothing else. Then it restarts the launcher, so that the
# icon appears. A package from a store will replace it, and `remove` takes it out again.
set -eu
HERE=$(cd "$(dirname "$0")" && pwd)
CHECKOUT=$(cd "$HERE/../.." && pwd)
PYTHON="$CHECKOUT/.venv/bin/python"
APPS=/usr/share/APPLaunch/applications
IMAGES=/usr/share/APPLaunch/share/images
case "${1:-install}" in
install)
if [ ! -d "$APPS" ]; then
echo "no $APPS here -- this is for the Cardputer Zero's stock launcher" >&2
exit 1
fi
if ! "$PYTHON" -c "import meshterm.emulator" 2>/dev/null; then
echo "$PYTHON can't import MeshTerm -- make the venv first:" >&2
echo " python3 -m venv .venv && .venv/bin/pip install -e '.[spi]'" >&2
exit 1
fi
entry=$(mktemp)
cat >"$entry" <<EOF
[Desktop Entry]
Name=MeshTerm
Exec=$PYTHON -m meshterm.emulator
Icon=share/images/meshterm.png
Terminal=false
Type=Application
EOF
sudo install -m 644 "$entry" "$APPS/meshterm.desktop"
sudo install -m 644 "$HERE/meshterm.png" "$IMAGES/meshterm.png"
rm -f "$entry"
echo "installed $APPS/meshterm.desktop (runs $PYTHON)"
;;
remove)
sudo rm -f "$APPS/meshterm.desktop" "$IMAGES/meshterm.png"
echo "removed MeshTerm from the launcher"
;;
*)
echo "usage: $0 [install|remove]" >&2
exit 2
;;
esac
if [ "${1:-install}" = install ] && [ ! -f "$HOME/.meshterm/fonts/ter-u12n.bdf" ]; then
echo "fetch the screen's font once: $CHECKOUT/.venv/bin/meshterm emulate --fetch-fonts"
fi
systemctl --user restart APPLaunch.service 2>/dev/null || echo "restart the launcher to see the change"