Files
omarchy-pkgs/pkgbuilds/superwhisper-bin/setup-user
T
David Heinemeier Hansson 7d2c7c50af Package Superwhisper with upstream beta tracking (#854)
* Package Superwhisper with upstream beta tracking

* Seed fresh Superwhisper shortcuts before daemon startup

* Refresh checksum for Superwhisper user setup

* Fix Superwhisper panel setup and packaging review findings

* Read shell replies when retrying Superwhisper panel setup

* Exclude Superwhisper portable menu integration
2026-10-08 20:29:07 +02:00

100 lines
3.6 KiB
Bash

#!/bin/bash
set -euo pipefail
config_home="${XDG_CONFIG_HOME:-$HOME/.config}"
data_home="${XDG_DATA_HOME:-$HOME/.local/share}"
backup_suffix=".before-opr.$(date +%s%N)"
# Retire the portable install's wrappers and unit overrides. Keep its versioned
# binaries, preferences, history and models so the change is reversible.
launcher="$HOME/.local/bin/superwhisper"
mkdir -p "$HOME/.local/bin"
if [[ -f $launcher && ! -L $launcher ]] && grep -Fq 'superwhisper/app/current/run.sh' "$launcher"; then
mv "$launcher" "$launcher$backup_suffix"
ln -s /usr/bin/superwhisper "$launcher"
fi
if [[ ! -e $launcher && ! -L $launcher ]]; then
ln -s /usr/bin/superwhisper "$launcher"
fi
current="$data_home/superwhisper/app/current"
if [[ -L $current && $(readlink "$current") != "/opt/superwhisper" ]]; then
mv "$current" "$current$backup_suffix"
ln -s /opt/superwhisper "$current"
elif [[ ! -e $current && ! -L $current ]]; then
mkdir -p "${current%/*}"
ln -s /opt/superwhisper "$current"
fi
unit="$config_home/systemd/user/superwhisper.service"
if [[ -f $unit ]] && grep -Fq 'ExecStart=%h/.local/bin/superwhisper daemon' "$unit"; then
mv "$unit" "$unit$backup_suffix"
fi
systemctl --user disable --now superwhisper-update.timer 2>/dev/null || true
# Seed a fresh profile before the daemon starts. Its upstream Right Alt hold
# conflicts with Omarchy's own bindings and prevents sequential CLI changes.
preferences="$config_home/superwhisper/preferences.json"
if [[ ! -e $preferences ]]; then
mkdir -p "${preferences%/*}"
(
umask 077
printf '%s\n' '{"toggleRecordingShortcut":"Alt+Space","pushToTalkShortcut":"","cancelRecordingShortcut":"Escape"}' > "$preferences"
)
fi
systemctl --user daemon-reload
systemctl --user enable --now superwhisper.service
systemctl --user restart superwhisper.service
ready=false
for (( attempt = 0; attempt < 50; attempt++ )); do
if superwhisper status >/dev/null 2>&1; then
ready=true
break
fi
sleep 0.1
done
if [[ $ready != "true" ]]; then
echo "Superwhisper did not become ready. Check systemctl --user status superwhisper.service." >&2
exit 1
fi
xdg-mime default superwhisper-url.desktop x-scheme-handler/superwhisper
# Link the vendor's panel and agent guide to the packaged payload. They update
# with pacman; no copy of the application or private updater is installed.
plugins="$config_home/omarchy/plugins"
panel_pending="$config_home/superwhisper/omarchy-panel.pending"
if [[ ! -e $plugins/superwhisper-panel && ! -L $plugins/superwhisper-panel ]]; then
touch "$panel_pending"
fi
mkdir -p "$plugins" "$HOME/.agents/skills"
ln -sfn /opt/superwhisper/assets/omarchy-plugin/superwhisper-panel "$plugins/superwhisper-panel"
ln -sfn /opt/superwhisper/assets/agent-skill/superwhisper "$HOME/.agents/skills/superwhisper"
for agent in .claude .codex .pi/agent; do
if [[ -d $HOME/$agent ]]; then
mkdir -p "$HOME/$agent/skills"
ln -sfn /opt/superwhisper/assets/agent-skill/superwhisper "$HOME/$agent/skills/superwhisper"
fi
done
omarchy-shell -q shell rescanPlugins
if [[ -f $panel_pending ]]; then
for (( attempt = 0; attempt < 50; attempt++ )); do
placement=$(omarchy-shell shell putBarWidget superwhisper.panel '{"section":"right"}' 2>/dev/null) || placement=""
if [[ $placement == "ok" ]]; then
rm "$panel_pending"
break
elif [[ -z $placement ]]; then
break
fi
sleep 0.1
done
if [[ -f $panel_pending ]]; then
echo "Superwhisper is ready; panel setup will retry next time setup-user runs." >&2
fi
fi
# A running input method discovers the packaged text-commit addon on restart.
if systemctl --user -q is-active omarchy-fcitx5.service; then
systemctl --user restart omarchy-fcitx5.service
fi