209 lines
6.3 KiB
Bash
209 lines
6.3 KiB
Bash
#!/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 "$@"
|