Files
dotfiles/bin/setup-espanso.sh
2025-12-14 00:13:08 -05:00

238 lines
6.2 KiB
Bash
Executable File
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
# ============================================================================
# This script helps set up espanso with custom configurations
set -e
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
RED='\033[0;31m'
NC='\033[0m'
print_header() {
echo -e "\n${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}${NC} Espanso Setup Script ${BLUE}${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}\n"
}
print_step() {
echo -e "${GREEN}==>${NC} $1"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
ask_yes_no() {
local prompt="$1"
local default="${2:-y}"
if [[ "$default" == "y" ]]; then
prompt="$prompt [Y/n]: "
else
prompt="$prompt [y/N]: "
fi
read -p "$prompt" response
response=${response:-$default}
[[ "$response" =~ ^[Yy]$ ]]
}
check_espanso() {
if ! command -v espanso &> /dev/null; then
print_error "espanso is not installed"
echo "Install it from: https://espanso.org/install/"
echo "Or run the main dotfiles install script"
exit 1
fi
print_success "espanso is installed: $(espanso --version)"
}
show_espanso_status() {
print_step "Checking espanso status"
if espanso status | grep -q "running"; then
print_success "espanso service is running"
else
print_warning "espanso service is not running"
if ask_yes_no "Start espanso service?"; then
espanso service start
print_success "espanso service started"
fi
fi
}
personalize_config() {
print_step "Personalizing espanso configuration"
local personal_file="$HOME/.config/espanso/match/personal.yml"
if [ ! -f "$personal_file" ]; then
print_error "Personal config file not found: $personal_file"
return 1
fi
echo
echo "Let's personalize your espanso configuration!"
echo
read -p "Your full name: " fullname
read -p "Your email: " email
read -p "Your phone (optional): " phone
read -p "Your website (optional): " website
read -p "Your GitHub username (optional): " github
# Create a backup
cp "$personal_file" "$personal_file.backup"
# Update the personal.yml file
sed -i "s/your.email@example.com/$email/g" "$personal_file"
sed -i "s/Your Full Name/$fullname/g" "$personal_file"
if [ -n "$phone" ]; then
sed -i "s/+1 (555) 123-4567/$phone/g" "$personal_file"
fi
if [ -n "$website" ]; then
sed -i "s|https://yourwebsite.com|$website|g" "$personal_file"
fi
if [ -n "$github" ]; then
sed -i "s/yourusername/$github/g" "$personal_file"
fi
print_success "Personal configuration updated!"
print_warning "Backup saved to: $personal_file.backup"
}
install_packages() {
print_step "Installing espanso packages"
echo
echo "Available packages to install:"
echo " 1. emoji - Emoji snippets (e.g., :smile: → 😊)"
echo " 2. greek-letters - Greek letters (e.g., :alpha: → α)"
echo " 3. math - Math symbols (e.g., :sum: → ∑)"
echo " 4. accents - Accented characters"
echo " 5. all-emojis - Complete emoji collection"
echo
if ask_yes_no "Install emoji package?"; then
espanso install emoji --force
print_success "Emoji package installed"
fi
if ask_yes_no "Install greek-letters package?"; then
espanso install greek-letters --force
print_success "Greek letters package installed"
fi
if ask_yes_no "Install math package?"; then
espanso install math --force
print_success "Math package installed"
fi
}
list_installed_packages() {
print_step "Installed espanso packages"
echo
espanso package list
echo
}
show_usage_tips() {
print_step "Usage tips"
cat << EOF
${GREEN}Espanso Quick Start:${NC}
${YELLOW}Toggle espanso on/off:${NC}
ALT+SHIFT+E
${YELLOW}Open search menu:${NC}
ALT+SPACE
${YELLOW}Basic triggers (from base.yml):${NC}
:date → Current date (YYYY-MM-DD)
:time → Current time (HH:MM:SS)
:datetime → Full datetime
:shrug → ¯\\_(ツ)_/¯
:flip → (╯°□°)╯︵ ┻━┻
${YELLOW}Code snippets:${NC}
:bash → Bash script template
:python → Python script template
:mdcode → Markdown code block
${YELLOW}Git shortcuts:${NC}
:gst → git status
:gco → git checkout
:gcm → git commit -m ""
${YELLOW}Personal (customize in personal.yml):${NC}
:myemail → Your email
:myname → Your name
:sig → Email signature
${YELLOW}Espanso commands:${NC}
espanso status - Check if running
espanso restart - Restart service
espanso edit - Edit config
espanso log - View logs
espanso package list - List installed packages
espanso package install X - Install package
${YELLOW}Configuration files:${NC}
~/.config/espanso/config/default.yml - Main config
~/.config/espanso/match/base.yml - Base snippets
~/.config/espanso/match/personal.yml - Personal snippets
${GREEN}Create your own snippets!${NC}
Edit the YAML files above to add custom triggers.
EOF
}
main() {
print_header
check_espanso
show_espanso_status
echo
if ask_yes_no "Personalize your configuration?"; then
personalize_config
fi
echo
if ask_yes_no "Install additional espanso packages?"; then
install_packages
fi
echo
list_installed_packages
echo
show_usage_tips
echo
print_success "Espanso setup complete!"
echo
echo "Try typing ${YELLOW}:date${NC} in any application to test it!"
}
main "$@"