Files
dotfiles/dotfiles-refactor/setup/setup-espanso.sh
2025-12-25 12:04:56 -05:00

209 lines
6.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# ============================================================================
# Espanso Setup and Configuration Script
# ============================================================================
set -e
# Source bootstrap
source "${DOTFILES_HOME:-$HOME/.dotfiles}/zsh/lib/bootstrap.zsh" 2>/dev/null || {
DF_GREEN=$'\033[0;32m' DF_YELLOW=$'\033[1;33m' DF_RED=$'\033[0;31m'
DF_BLUE=$'\033[0;34m' DF_CYAN=$'\033[0;36m' DF_NC=$'\033[0m'
DOTFILES_HOME="${DOTFILES_HOME:-$HOME/.dotfiles}"
df_print_header() { echo "=== $1 ==="; }
df_print_success() { echo -e "${DF_GREEN}${DF_NC} $1"; }
df_print_error() { echo -e "${DF_RED}${DF_NC} $1" >&2; }
df_print_warning() { echo -e "${DF_YELLOW}${DF_NC} $1"; }
df_print_step() { echo -e "${DF_GREEN}==>${DF_NC} $1"; }
}
# ============================================================================
# Helper Functions
# ============================================================================
ask_yes_no() {
local prompt="$1"
local default="${2:-y}"
local yn_prompt="[Y/n]"
[[ "$default" == "n" ]] && yn_prompt="[y/N]"
read -p "$prompt $yn_prompt: " response
response=${response:-$default}
[[ "$response" =~ ^[Yy]$ ]]
}
# ============================================================================
# Espanso Functions
# ============================================================================
check_espanso() {
if ! command -v espanso &>/dev/null; then
df_print_error "espanso is not installed"
echo "Install with: paru -S espanso-wayland # or espanso-x11"
exit 1
fi
df_print_success "espanso installed: $(espanso --version)"
}
show_espanso_status() {
df_print_step "Checking espanso status"
if espanso status 2>/dev/null | grep -q "running"; then
df_print_success "espanso service is running"
else
df_print_warning "espanso service is not running"
if ask_yes_no "Start espanso service?"; then
espanso service start
df_print_success "espanso service started"
fi
fi
}
personalize_config() {
df_print_step "Personalizing espanso configuration"
local personal_file="$HOME/.config/espanso/match/personal.yml"
if [[ ! -f "$personal_file" ]]; then
df_print_warning "Personal config not found, creating from template..."
mkdir -p "$(dirname "$personal_file")"
cat > "$personal_file" << 'EOF'
# ============================================================================
# Personal Espanso Snippets
# ============================================================================
matches:
- trigger: "..myemail"
replace: "your.email@example.com"
- trigger: "..myname"
replace: "Your Full Name"
- trigger: "..myphone"
replace: "+1 (555) 123-4567"
- trigger: "..myweb"
replace: "https://yourwebsite.com"
- trigger: "..mygithub"
replace: "https://github.com/yourusername"
- trigger: "..sig"
replace: |
Best regards,
Your Full Name
your.email@example.com
EOF
df_print_success "Created personal.yml template"
fi
echo ""
echo "Personalizing your espanso configuration"
echo "(Press Enter to keep existing values)"
echo ""
# Get current values or use config defaults
local fullname="${USER_FULLNAME:-}"
local email="${USER_EMAIL:-}"
local phone="${USER_PHONE:-}"
local website="${USER_WEBSITE:-}"
local github="${USER_GITHUB:-}"
[[ -z "$fullname" ]] && read -p "Your full name: " fullname
[[ -z "$email" ]] && read -p "Your email: " email
[[ -z "$phone" ]] && read -p "Your phone (optional): " phone
[[ -z "$website" ]] && read -p "Your website (optional): " website
[[ -z "$github" ]] && read -p "Your GitHub username (optional): " github
# Create backup
cp "$personal_file" "$personal_file.backup"
# Update values if provided
[[ -n "$email" ]] && sed -i "s/your.email@example.com/$email/g" "$personal_file"
[[ -n "$fullname" ]] && sed -i "s/Your Full Name/$fullname/g" "$personal_file"
[[ -n "$phone" ]] && sed -i "s/+1 (555) 123-4567/$phone/g" "$personal_file"
[[ -n "$website" ]] && sed -i "s|https://yourwebsite.com|$website|g" "$personal_file"
[[ -n "$github" ]] && sed -i "s/yourusername/$github/g" "$personal_file"
df_print_success "Personal configuration updated!"
df_print_warning "Backup saved to: $personal_file.backup"
}
install_packages() {
df_print_step "Installing espanso packages"
echo ""
echo "Available packages:"
echo " 1. emoji - Emoji snippets (:smile: → 😊)"
echo " 2. greek-letters - Greek letters (:alpha: → α)"
echo " 3. math - Math symbols (:sum: → ∑)"
echo ""
ask_yes_no "Install emoji package?" && {
espanso install emoji --force 2>/dev/null
df_print_success "Emoji package installed"
}
ask_yes_no "Install greek-letters package?" && {
espanso install greek-letters --force 2>/dev/null
df_print_success "Greek letters package installed"
}
ask_yes_no "Install math package?" && {
espanso install math --force 2>/dev/null
df_print_success "Math package installed"
}
}
show_usage_tips() {
df_print_step "Usage tips"
cat << EOF
${DF_GREEN}Espanso Quick Start:${DF_NC}
${DF_YELLOW}Toggle on/off:${DF_NC} ALT+SHIFT+E
${DF_YELLOW}Search menu:${DF_NC} ALT+SPACE
${DF_YELLOW}Basic triggers:${DF_NC}
..date → Current date (YYYY-MM-DD)
..time → Current time (HH:MM:SS)
..shrug → ¯\\_(ツ)_/¯
..myemail → Your email
${DF_YELLOW}Commands:${DF_NC}
espanso status Check if running
espanso restart Restart service
espanso log View logs
EOF
}
# ============================================================================
# Main
# ============================================================================
main() {
df_print_header "setup-espanso"
check_espanso
show_espanso_status
echo ""
ask_yes_no "Personalize your configuration?" && personalize_config
echo ""
ask_yes_no "Install additional packages?" && install_packages
echo ""
show_usage_tips
echo ""
df_print_success "Espanso setup complete!"
echo ""
echo "Try typing ${DF_YELLOW}..date${DF_NC} in any application to test!"
}
main "$@"