Dotfiles update 2025-12-25 12:04
This commit is contained in:
317
refactor_backup/setup/setup-espanso.sh
Executable file
317
refactor_backup/setup/setup-espanso.sh
Executable file
@@ -0,0 +1,317 @@
|
||||
#!/usr/bin/env bash
|
||||
# ============================================================================
|
||||
# Espanso Setup and Configuration Script
|
||||
# ============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# ============================================================================
|
||||
# Load Configuration
|
||||
# ============================================================================
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
DOTFILES_CONF="${SCRIPT_DIR}/../dotfiles.conf"
|
||||
[[ -f "$DOTFILES_CONF" ]] || DOTFILES_CONF="$HOME/.dotfiles/dotfiles.conf"
|
||||
|
||||
if [[ -f "$DOTFILES_CONF" ]]; then
|
||||
source "$DOTFILES_CONF"
|
||||
else
|
||||
DOTFILES_DIR="$HOME/.dotfiles"
|
||||
USER_FULLNAME=""
|
||||
USER_EMAIL=""
|
||||
USER_PHONE=""
|
||||
USER_WEBSITE=""
|
||||
USER_GITHUB=""
|
||||
fi
|
||||
|
||||
# ============================================================================
|
||||
# Colors
|
||||
# ============================================================================
|
||||
|
||||
# Source shared colors and utils (provides DF_WIDTH)
|
||||
source "$DOTFILES_DIR/zsh/lib/utils.zsh" 2>/dev/null || \
|
||||
source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null || \
|
||||
source "$DOTFILES_DIR/zsh/lib/colors.zsh" 2>/dev/null || \
|
||||
source "$HOME/.dotfiles/zsh/lib/colors.zsh" 2>/dev/null || {
|
||||
typeset -g DF_NC=$'\033[0m' DF_BOLD=$'\033[1m' DF_DIM=$'\033[2m'
|
||||
typeset -g DF_BLUE=$'\033[38;5;39m' DF_CYAN=$'\033[38;5;51m'
|
||||
typeset -g DF_GREEN=$'\033[38;5;82m' DF_YELLOW=$'\033[38;5;220m'
|
||||
typeset -g DF_RED=$'\033[38;5;196m' DF_GREY=$'\033[38;5;242m' DF_NC=$'\033[0m'
|
||||
typeset -g DF_LIGHT_BLUE=$'\033[38;5;39m' DF_LIGHT_GREEN=$'\033[38;5;82m'
|
||||
}
|
||||
|
||||
# Use DF_WIDTH from utils.zsh or default to 66
|
||||
readonly WIDTH="${DF_WIDTH:-66}"
|
||||
|
||||
# ============================================================================
|
||||
# MOTD-style header
|
||||
# ============================================================================
|
||||
|
||||
print_header() {
|
||||
local user="${USER:-root}"
|
||||
local hostname="${HOSTNAME:-$(hostname -s 2>/dev/null)}"
|
||||
local script_name="setup-espanso"
|
||||
local datetime=$(date '+%a %b %d %H:%M')
|
||||
|
||||
local hline=""
|
||||
for ((i=0; i<WIDTH; i++)); do hline+="═"; done
|
||||
local inner=$((WIDTH - 2))
|
||||
|
||||
# Header content
|
||||
local h_left="✦ ${user}@${hostname}"
|
||||
local h_center="${script_name}"
|
||||
local h_right="${datetime}"
|
||||
local h_pad=$(((inner - ${#h_left} - ${#h_center} - ${#h_right}) / 2))
|
||||
local h_spaces=""
|
||||
for ((i=0; i<h_pad; i++)); do h_spaces+=" "; done
|
||||
|
||||
echo ""
|
||||
echo -e "${DF_GREY}╒${hline}╕${DF_NC}"
|
||||
echo -e "${DF_GREY}│${DF_NC} ${DF_BOLD}${DF_LIGHT_BLUE}${h_left}${DF_NC}${h_spaces}${DF_LIGHT_GREEN}${h_center}${h_spaces}${DF_NC}${DF_BOLD}${h_right}${DF_NC} ${DF_GREY}│${DF_NC}"
|
||||
echo -e "${DF_GREY}╘${hline}╛${DF_NC}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
print_step() {
|
||||
echo -e "${DF_GREEN}==>${DF_NC} $1"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "${DF_GREEN}✓${DF_NC} $1"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${DF_YELLOW}⚠${DF_NC} $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${DF_RED}✗${DF_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]$ ]]
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# Functions
|
||||
# ============================================================================
|
||||
|
||||
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_warning "Personal config file not found, creating from template..."
|
||||
mkdir -p "$(dirname "$personal_file")"
|
||||
cat > "$personal_file" << 'EOF'
|
||||
# ============================================================================
|
||||
# Personal Espanso Snippets
|
||||
# ============================================================================
|
||||
# Edit these with your own information
|
||||
|
||||
matches:
|
||||
# Personal info
|
||||
- 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"
|
||||
|
||||
# Email signature
|
||||
- trigger: "..sig"
|
||||
replace: |
|
||||
Best regards,
|
||||
Your Full Name
|
||||
your.email@example.com
|
||||
|
||||
# Address (customize as needed)
|
||||
- trigger: "..myaddr"
|
||||
replace: |
|
||||
123 Main Street
|
||||
City, ST 12345
|
||||
EOF
|
||||
print_success "Created personal.yml template"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Let's personalize your espanso configuration!"
|
||||
echo "(Press Enter to keep existing/default values)"
|
||||
echo
|
||||
|
||||
# Use config values as defaults, prompt for any missing
|
||||
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
|
||||
[[ -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"
|
||||
|
||||
print_success "Personal configuration updated!"
|
||||
print_warning "Backup saved to: $personal_file.backup"
|
||||
|
||||
# Suggest updating dotfiles.conf for future installs
|
||||
echo
|
||||
echo -e "${DF_BLUE}Tip:${DF_NC} Add these to dotfiles.conf for future installs:"
|
||||
echo " USER_FULLNAME=\"$fullname\""
|
||||
echo " USER_EMAIL=\"$email\""
|
||||
[[ -n "$github" ]] && echo " USER_GITHUB=\"$github\""
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
${DF_GREEN}Espanso Quick Start:${DF_NC}
|
||||
|
||||
${DF_YELLOW}Toggle espanso on/off:${DF_NC}
|
||||
ALT+SHIFT+E
|
||||
|
||||
${DF_YELLOW}Open 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 → ¯\\_(ツ)_/¯
|
||||
..gstat → git status
|
||||
..myemail → Your email
|
||||
|
||||
${DF_YELLOW}Espanso commands:${DF_NC}
|
||||
espanso status - Check if running
|
||||
espanso restart - Restart service
|
||||
espanso log - View logs
|
||||
|
||||
${DF_YELLOW}Configuration files:${DF_NC}
|
||||
~/.config/espanso/match/base.yml - Main snippets
|
||||
~/.config/espanso/match/personal.yml - Your personal snippets
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# Main
|
||||
# ============================================================================
|
||||
|
||||
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 ${DF_YELLOW}..date${DF_NC} in any application to test it!"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
127
refactor_backup/setup/setup-wizard.sh
Executable file
127
refactor_backup/setup/setup-wizard.sh
Executable file
@@ -0,0 +1,127 @@
|
||||
#!/usr/bin/env bash
|
||||
# ============================================================================
|
||||
# Dotfiles Interactive Setup Wizard
|
||||
# ============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# ============================================================================
|
||||
# Source Configuration
|
||||
# ============================================================================
|
||||
|
||||
_df_source_config() {
|
||||
local locations=(
|
||||
"${DOTFILES_DIR:-$HOME/.dotfiles}/zsh/lib/utils.zsh"
|
||||
"$HOME/.dotfiles/zsh/lib/utils.zsh"
|
||||
)
|
||||
for loc in "${locations[@]}"; do
|
||||
[[ -f "$loc" ]] && { source "$loc"; return 0; }
|
||||
done
|
||||
|
||||
# Fallback defaults
|
||||
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'
|
||||
DF_GREY=$'\033[38;5;242m' DF_LIGHT_BLUE=$'\033[38;5;39m'
|
||||
DF_BOLD=$'\033[1m' DF_DIM=$'\033[2m' DF_LIGHT_GREEN=$'\033[38;5;82m'
|
||||
DOTFILES_DIR="${DOTFILES_DIR:-$HOME/.dotfiles}"
|
||||
DOTFILES_VERSION="${DOTFILES_VERSION:-1.0.0}"
|
||||
DF_WIDTH="${DF_WIDTH:-66}"
|
||||
}
|
||||
|
||||
_df_source_config
|
||||
|
||||
# ============================================================================
|
||||
# Header
|
||||
# ============================================================================
|
||||
|
||||
print_header() {
|
||||
if declare -f df_print_header &>/dev/null; then
|
||||
df_print_header "setup-wizard"
|
||||
else
|
||||
local user="${USER:-root}"
|
||||
local hostname="${HOSTNAME:-$(hostname -s 2>/dev/null)}"
|
||||
local datetime=$(date '+%a %b %d %H:%M')
|
||||
local width="${DF_WIDTH:-66}"
|
||||
local hline="" && for ((i=0; i<width; i++)); do hline+="═"; done
|
||||
|
||||
echo ""
|
||||
echo -e "${DF_GREY}╒${hline}╕${DF_NC}"
|
||||
echo -e "${DF_GREY}│${DF_NC} ${DF_BOLD}${DF_LIGHT_BLUE}✦ ${user}@${hostname}${DF_NC} ${DF_LIGHT_GREEN}setup-wizard${DF_NC} ${datetime} ${DF_GREY}│${DF_NC}"
|
||||
echo -e "${DF_GREY}╘${hline}╛${DF_NC}"
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# Gum Detection
|
||||
# ============================================================================
|
||||
|
||||
HAS_GUM=false
|
||||
command -v gum &>/dev/null && HAS_GUM=true
|
||||
|
||||
wizard_confirm() {
|
||||
local prompt="$1"
|
||||
local default="${2:-yes}"
|
||||
if [[ "$HAS_GUM" == true ]]; then
|
||||
[[ "$default" == "yes" ]] && gum confirm --default=yes "$prompt" || gum confirm --default=no "$prompt"
|
||||
else
|
||||
local yn_prompt="[Y/n]"
|
||||
[[ "$default" == "no" ]] && yn_prompt="[y/N]"
|
||||
read -p "$prompt $yn_prompt: " response
|
||||
response=${response:-${default:0:1}}
|
||||
[[ "$response" =~ ^[Yy] ]]
|
||||
fi
|
||||
}
|
||||
|
||||
wizard_input() {
|
||||
local prompt="$1"
|
||||
local default="$2"
|
||||
if [[ "$HAS_GUM" == true ]]; then
|
||||
gum input --placeholder "$default" --value "$default" --prompt "$prompt: "
|
||||
else
|
||||
read -p "$prompt [$default]: " response
|
||||
echo "${response:-$default}"
|
||||
fi
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# Wizard Steps
|
||||
# ============================================================================
|
||||
|
||||
step_welcome() {
|
||||
clear
|
||||
print_header
|
||||
echo -e "${DF_BOLD}Welcome to Dotfiles Setup Wizard${DF_NC}"
|
||||
echo -e "${DF_DIM}Version: $DOTFILES_VERSION | Width: $DF_WIDTH${DF_NC}"
|
||||
echo
|
||||
wizard_confirm "Ready to begin?" || { echo "Cancelled."; exit 0; }
|
||||
}
|
||||
|
||||
step_user_info() {
|
||||
echo -e "\n${DF_BLUE}▶${DF_NC} Personal Information"
|
||||
USER_FULLNAME=$(wizard_input "Full Name" "${USER_FULLNAME:-}")
|
||||
USER_EMAIL=$(wizard_input "Email" "${USER_EMAIL:-}")
|
||||
USER_GITHUB=$(wizard_input "GitHub Username" "${USER_GITHUB:-}")
|
||||
}
|
||||
|
||||
step_summary() {
|
||||
echo -e "\n${DF_GREEN}✓${DF_NC} Setup Complete!"
|
||||
echo
|
||||
echo " Name: $USER_FULLNAME"
|
||||
echo " Email: $USER_EMAIL"
|
||||
echo " GitHub: $USER_GITHUB"
|
||||
echo
|
||||
echo -e "${DF_DIM}Run 'source ~/.zshrc' to apply changes.${DF_NC}"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# Main
|
||||
# ============================================================================
|
||||
|
||||
main() {
|
||||
step_welcome
|
||||
step_user_info
|
||||
step_summary
|
||||
}
|
||||
|
||||
[[ "${BASH_SOURCE[0]}" == "${0}" ]] && main "$@"
|
||||
Reference in New Issue
Block a user