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

@@ -5,148 +5,75 @@
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'
# 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"; }
}
# Use DF_WIDTH from utils.zsh or default to 66
readonly WIDTH="${DF_WIDTH:-66}"
# ============================================================================
# MOTD-style header
# Helper Functions
# ============================================================================
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
local yn_prompt="[Y/n]"
[[ "$default" == "n" ]] && yn_prompt="[y/N]"
read -p "$prompt $yn_prompt: " response
response=${response:-$default}
[[ "$response" =~ ^[Yy]$ ]]
}
# ============================================================================
# Functions
# Espanso 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"
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
print_success "espanso is installed: $(espanso --version)"
df_print_success "espanso installed: $(espanso --version)"
}
show_espanso_status() {
print_step "Checking espanso status"
if espanso status | grep -q "running"; then
print_success "espanso service is running"
df_print_step "Checking espanso status"
if espanso status 2>/dev/null | grep -q "running"; then
df_print_success "espanso service is running"
else
print_warning "espanso service is not running"
df_print_warning "espanso service is not running"
if ask_yes_no "Start espanso service?"; then
espanso service start
print_success "espanso service started"
df_print_success "espanso service started"
fi
fi
}
personalize_config() {
print_step "Personalizing espanso configuration"
df_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..."
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
# ============================================================================
# Edit these with your own information
matches:
# Personal info
- trigger: "..myemail"
replace: "your.email@example.com"
@@ -162,122 +89,93 @@ matches:
- 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"
df_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}"
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
# 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"
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\""
df_print_success "Personal configuration updated!"
df_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
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
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() {
print_step "Usage tips"
df_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}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 → ¯\\_(ツ)_/¯
..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
${DF_YELLOW}Commands:${DF_NC}
espanso status Check if running
espanso restart Restart service
espanso log View logs
EOF
}
@@ -287,31 +185,24 @@ EOF
# ============================================================================
main() {
print_header
df_print_header "setup-espanso"
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
echo ""
ask_yes_no "Personalize your configuration?" && personalize_config
echo ""
ask_yes_no "Install additional packages?" && install_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!"
echo ""
df_print_success "Espanso setup complete!"
echo ""
echo "Try typing ${DF_YELLOW}..date${DF_NC} in any application to test!"
}
main "$@"