Voxtype-Keybind-Omarchy/switch-voxtype-to-toggle.sh
28allday 6ef6c141ab Initial commit: Voxtype dictation mode switcher for Omarchy
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 18:11:43 +00:00

72 lines
2.7 KiB
Bash
Executable file

#!/bin/bash
# ==============================================================================
# Voxtype Toggle Mode Switcher for Omarchy
#
# Switches Omarchy's Voxtype dictation from the default push-to-talk
# (hold to dictate, release to stop) to toggle mode (press once to start,
# press again to stop).
#
# This is useful if you prefer not to hold a key while dictating, especially
# for longer dictation sessions.
#
# Changes the keybind from:
# Super+Ctrl+X (press) → Start dictation
# Super+Ctrl+X (release) → Stop dictation
# To:
# Super+Ctrl+X → Toggle dictation on/off
# ==============================================================================
set -euo pipefail
CONFIG_FILE="$HOME/.local/share/omarchy/default/hypr/bindings/utilities.conf"
BACKUP_FILE="$CONFIG_FILE.backup.$(date +%Y%m%d_%H%M%S)"
# Verify the config file exists before we try to modify it.
if [[ ! -f "$CONFIG_FILE" ]]; then
echo "Error: Config file not found at $CONFIG_FILE"
exit 1
fi
# Check that the # Dictation section exists
if ! grep -q '^# Dictation' "$CONFIG_FILE"; then
echo "Error: '# Dictation' section not found in config file"
exit 1
fi
# Create a timestamped backup so the user can restore their previous config.
cp "$CONFIG_FILE" "$BACKUP_FILE"
echo "Backup created at $BACKUP_FILE"
# Remove ALL existing voxtype bindings — both the press/release pair (push-to-talk)
# and any existing toggle binding. This makes the script idempotent (safe to run
# multiple times without duplicating bindings). Uses line-by-line deletion rather
# than range-based sed, which is safer if the config format changes.
sed -i '/^bindd.*SUPER CTRL, X.*voxtype record/d' "$CONFIG_FILE"
sed -i '/^binddr.*SUPER CTRL, X.*voxtype record/d' "$CONFIG_FILE"
# Add the new toggle binding after the # Dictation section marker.
# 'bindd' = bind with description. 'voxtype record toggle' tells voxtype
# to start if stopped, or stop if recording.
sed -i '/^# Dictation$/a bindd = SUPER CTRL, X, Toggle dictation, exec, voxtype record toggle' "$CONFIG_FILE"
# Verify the change was applied. If sed failed silently (e.g. the comment
# format changed), restore from backup rather than leaving a broken config.
if ! grep -q 'voxtype record toggle' "$CONFIG_FILE"; then
echo "Error: Failed to add new binding. Restoring backup..."
cp "$BACKUP_FILE" "$CONFIG_FILE"
exit 1
fi
echo "Updated voxtype binding to toggle mode."
echo ""
echo "Changed from:"
echo " Super+Ctrl+X (press) -> Start dictation"
echo " Super+Ctrl+X (release) -> Stop dictation"
echo ""
echo "To:"
echo " Super+Ctrl+X -> Toggle dictation on/off"
echo ""
echo "Reloading Hyprland config..."
hyprctl reload
echo "Done! Press Super+Ctrl+X to toggle dictation."