Dotfiles update 2025-12-25 12:04

This commit is contained in:
Aaron D. Lee
2025-12-25 12:04:56 -05:00
parent 4695b1e410
commit afb9c78c9b
71 changed files with 8163 additions and 758 deletions

View File

@@ -0,0 +1,208 @@
#!/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 "$@"

View File

@@ -0,0 +1,175 @@
#!/usr/bin/env bash
# ============================================================================
# Dotfiles Interactive Setup Wizard
# ============================================================================
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'
DF_BOLD=$'\033[1m' DF_DIM=$'\033[2m'
DOTFILES_HOME="${DOTFILES_HOME:-$HOME/.dotfiles}"
DOTFILES_VERSION="${DOTFILES_VERSION:-1.0.0}"
DF_WIDTH="${DF_WIDTH:-66}"
df_print_header() { echo "=== $1 ==="; }
df_print_success() { echo -e "${DF_GREEN}${DF_NC} $1"; }
}
# ============================================================================
# Gum Detection (for prettier TUI)
# ============================================================================
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
if [[ "$default" == "yes" ]]; then
gum confirm --default=yes "$prompt"
else
gum confirm --default=no "$prompt"
fi
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_choose() {
local prompt="$1"
shift
local options=("$@")
if [[ "$HAS_GUM" == true ]]; then
printf '%s\n' "${options[@]}" | gum choose --header "$prompt"
else
echo "$prompt"
local i=1
for opt in "${options[@]}"; do
echo " $i) $opt"
((i++))
done
read -p "Choice [1]: " choice
choice=${choice:-1}
echo "${options[$((choice-1))]}"
fi
}
# ============================================================================
# Wizard Steps
# ============================================================================
step_welcome() {
clear
df_print_header "setup-wizard"
echo -e "${DF_BOLD}Welcome to Dotfiles Setup Wizard${DF_NC}"
echo -e "${DF_DIM}Version: $DOTFILES_VERSION | Display Width: $DF_WIDTH${DF_NC}"
echo ""
wizard_confirm "Ready to begin?" || {
echo "Setup cancelled."
exit 0
}
}
step_user_info() {
echo ""
echo -e "${DF_BLUE}${DF_NC} Personal Information"
echo ""
USER_FULLNAME=$(wizard_input "Full Name" "${USER_FULLNAME:-}")
USER_EMAIL=$(wizard_input "Email" "${USER_EMAIL:-}")
USER_GITHUB=$(wizard_input "GitHub Username" "${USER_GITHUB:-}")
}
step_features() {
echo ""
echo -e "${DF_BLUE}${DF_NC} Feature Selection"
echo ""
MOTD_STYLE=$(wizard_choose "MOTD Style:" "compact" "mini" "full" "none")
wizard_confirm "Enable smart suggestions (typo correction)?" && ENABLE_SMART_SUGGESTIONS="true" || ENABLE_SMART_SUGGESTIONS="false"
wizard_confirm "Enable command palette (Ctrl+Space)?" && ENABLE_COMMAND_PALETTE="true" || ENABLE_COMMAND_PALETTE="false"
}
step_summary() {
echo ""
echo -e "${DF_GREEN}${DF_NC} Configuration Summary"
echo ""
echo " Name: $USER_FULLNAME"
echo " Email: $USER_EMAIL"
echo " GitHub: $USER_GITHUB"
echo " MOTD Style: $MOTD_STYLE"
echo " Smart Suggestions: $ENABLE_SMART_SUGGESTIONS"
echo " Command Palette: $ENABLE_COMMAND_PALETTE"
echo ""
if wizard_confirm "Save this configuration?"; then
save_config
df_print_success "Configuration saved!"
else
echo "Configuration not saved."
fi
}
save_config() {
local config_file="$DOTFILES_HOME/dotfiles.conf"
# Update values in config file
if [[ -f "$config_file" ]]; then
sed -i "s/^USER_FULLNAME=.*/USER_FULLNAME=\"$USER_FULLNAME\"/" "$config_file"
sed -i "s/^USER_EMAIL=.*/USER_EMAIL=\"$USER_EMAIL\"/" "$config_file"
sed -i "s/^USER_GITHUB=.*/USER_GITHUB=\"$USER_GITHUB\"/" "$config_file"
sed -i "s/^MOTD_STYLE=.*/MOTD_STYLE=\"$MOTD_STYLE\"/" "$config_file"
sed -i "s/^ENABLE_SMART_SUGGESTIONS=.*/ENABLE_SMART_SUGGESTIONS=\"$ENABLE_SMART_SUGGESTIONS\"/" "$config_file"
sed -i "s/^ENABLE_COMMAND_PALETTE=.*/ENABLE_COMMAND_PALETTE=\"$ENABLE_COMMAND_PALETTE\"/" "$config_file"
fi
}
step_next() {
echo ""
df_print_success "Setup Complete!"
echo ""
echo -e "${DF_DIM}Next steps:${DF_NC}"
echo " 1. Reload your shell: source ~/.zshrc"
echo " 2. Run health check: dfd"
echo " 3. Explore commands: dotfiles-cli help"
echo ""
}
# ============================================================================
# Main
# ============================================================================
main() {
step_welcome
step_user_info
step_features
step_summary
step_next
}
# Only run if executed directly (not sourced)
[[ "${BASH_SOURCE[0]}" == "${0}" ]] && main "$@"