From 29b3dee5af13e760f9fb2f555a96bd53ee3889d8 Mon Sep 17 00:00:00 2001 From: "Aaron D. Lee" Date: Thu, 25 Dec 2025 12:05:47 -0500 Subject: [PATCH] Dotfiles update 2025-12-25 12:05 --- refactor_backup/bin/dotfiles-compile.sh | 132 ------ refactor_backup/bin/dotfiles-doctor.sh | 184 --------- refactor_backup/bin/dotfiles-stats.sh | 80 ---- refactor_backup/bin/dotfiles-sync.sh | 169 -------- refactor_backup/bin/dotfiles-update.sh | 111 ------ refactor_backup/bin/dotfiles-vault.sh | 90 ----- refactor_backup/bin/dotfiles-version.sh | 102 ----- refactor_backup/setup/setup-espanso.sh | 317 --------------- refactor_backup/setup/setup-wizard.sh | 127 ------ refactor_backup/zsh/.zshrc | 377 ------------------ refactor_backup/zsh/.zshrc.zwc | Bin 20960 -> 0 bytes refactor_backup/zsh/aliases.zsh | 149 ------- refactor_backup/zsh/aliases.zsh.zwc | Bin 13072 -> 0 bytes .../zsh/functions/btrfs-helpers.zsh | 210 ---------- .../zsh/functions/btrfs-helpers.zsh.zwc | Bin 22128 -> 0 bytes .../zsh/functions/command-palette.zsh | 136 ------- .../zsh/functions/command-palette.zsh.zwc | Bin 15024 -> 0 bytes refactor_backup/zsh/functions/motd.zsh | 201 ---------- refactor_backup/zsh/functions/motd.zsh.zwc | Bin 15616 -> 0 bytes .../zsh/functions/password-manager.zsh | 84 ---- .../zsh/functions/password-manager.zsh.zwc | Bin 9648 -> 0 bytes .../zsh/functions/python-templates.zsh | 173 -------- .../zsh/functions/python-templates.zsh.zwc | Bin 13592 -> 0 bytes .../zsh/functions/smart-suggest.zsh | 82 ---- .../zsh/functions/smart-suggest.zsh.zwc | Bin 8880 -> 0 bytes refactor_backup/zsh/functions/snapper.zsh | 98 ----- refactor_backup/zsh/functions/snapper.zsh.zwc | Bin 11400 -> 0 bytes refactor_backup/zsh/functions/ssh-manager.zsh | 96 ----- .../zsh/functions/ssh-manager.zsh.zwc | Bin 10960 -> 0 bytes .../zsh/functions/systemd-helpers.zsh | 124 ------ .../zsh/functions/systemd-helpers.zsh.zwc | Bin 12936 -> 0 bytes .../zsh/functions/tmux-workspaces.zsh | 116 ------ .../zsh/functions/tmux-workspaces.zsh.zwc | Bin 13960 -> 0 bytes refactor_backup/zsh/lib/colors.zsh | 86 ---- refactor_backup/zsh/lib/colors.zsh.zwc | Bin 6000 -> 0 bytes refactor_backup/zsh/lib/config.zsh | 154 ------- refactor_backup/zsh/lib/config.zsh.zwc | Bin 11328 -> 0 bytes refactor_backup/zsh/lib/utils.zsh | 182 --------- refactor_backup/zsh/lib/utils.zsh.zwc | Bin 13856 -> 0 bytes refactor_backup/zsh/themes/adlee.zsh-theme | 134 ------- .../zsh/themes/adlee.zsh-theme.zwc | Bin 9496 -> 0 bytes 41 files changed, 3714 deletions(-) delete mode 100755 refactor_backup/bin/dotfiles-compile.sh delete mode 100755 refactor_backup/bin/dotfiles-doctor.sh delete mode 100755 refactor_backup/bin/dotfiles-stats.sh delete mode 100755 refactor_backup/bin/dotfiles-sync.sh delete mode 100755 refactor_backup/bin/dotfiles-update.sh delete mode 100755 refactor_backup/bin/dotfiles-vault.sh delete mode 100755 refactor_backup/bin/dotfiles-version.sh delete mode 100755 refactor_backup/setup/setup-espanso.sh delete mode 100755 refactor_backup/setup/setup-wizard.sh delete mode 100644 refactor_backup/zsh/.zshrc delete mode 100644 refactor_backup/zsh/.zshrc.zwc delete mode 100644 refactor_backup/zsh/aliases.zsh delete mode 100644 refactor_backup/zsh/aliases.zsh.zwc delete mode 100644 refactor_backup/zsh/functions/btrfs-helpers.zsh delete mode 100644 refactor_backup/zsh/functions/btrfs-helpers.zsh.zwc delete mode 100644 refactor_backup/zsh/functions/command-palette.zsh delete mode 100644 refactor_backup/zsh/functions/command-palette.zsh.zwc delete mode 100644 refactor_backup/zsh/functions/motd.zsh delete mode 100644 refactor_backup/zsh/functions/motd.zsh.zwc delete mode 100644 refactor_backup/zsh/functions/password-manager.zsh delete mode 100644 refactor_backup/zsh/functions/password-manager.zsh.zwc delete mode 100644 refactor_backup/zsh/functions/python-templates.zsh delete mode 100644 refactor_backup/zsh/functions/python-templates.zsh.zwc delete mode 100644 refactor_backup/zsh/functions/smart-suggest.zsh delete mode 100644 refactor_backup/zsh/functions/smart-suggest.zsh.zwc delete mode 100644 refactor_backup/zsh/functions/snapper.zsh delete mode 100644 refactor_backup/zsh/functions/snapper.zsh.zwc delete mode 100644 refactor_backup/zsh/functions/ssh-manager.zsh delete mode 100644 refactor_backup/zsh/functions/ssh-manager.zsh.zwc delete mode 100644 refactor_backup/zsh/functions/systemd-helpers.zsh delete mode 100644 refactor_backup/zsh/functions/systemd-helpers.zsh.zwc delete mode 100644 refactor_backup/zsh/functions/tmux-workspaces.zsh delete mode 100644 refactor_backup/zsh/functions/tmux-workspaces.zsh.zwc delete mode 100644 refactor_backup/zsh/lib/colors.zsh delete mode 100644 refactor_backup/zsh/lib/colors.zsh.zwc delete mode 100644 refactor_backup/zsh/lib/config.zsh delete mode 100644 refactor_backup/zsh/lib/config.zsh.zwc delete mode 100644 refactor_backup/zsh/lib/utils.zsh delete mode 100644 refactor_backup/zsh/lib/utils.zsh.zwc delete mode 100644 refactor_backup/zsh/themes/adlee.zsh-theme delete mode 100644 refactor_backup/zsh/themes/adlee.zsh-theme.zwc diff --git a/refactor_backup/bin/dotfiles-compile.sh b/refactor_backup/bin/dotfiles-compile.sh deleted file mode 100755 index 1912448..0000000 --- a/refactor_backup/bin/dotfiles-compile.sh +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env zsh -# ============================================================================ -# Dotfiles Compile - Pre-compile zsh files for faster loading -# ============================================================================ - -set -e - -DOTFILES_DIR="${DOTFILES_DIR:-$HOME/.dotfiles}" - -# Source shared colors and utils (provides DF_WIDTH) -source "$DOTFILES_DIR/zsh/lib/utils.zsh" 2>/dev/null || \ -source "$DOTFILES_DIR/zsh/lib/colors.zsh" 2>/dev/null || { - DF_GREEN=$'\033[0;32m' DF_YELLOW=$'\033[1;33m' 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' -} - -# Use DF_WIDTH from utils.zsh or default to 66 -typeset -g WIDTH="${DF_WIDTH:-66}" - -# ============================================================================ -# MOTD-style header -# ============================================================================ - -print_header() { - if declare -f df_print_header &>/dev/null; then - df_print_header "dotfiles-compile " - else - local user="${USER:-root}" - local hostname="${HOST:-$(hostname -s 2>/dev/null)}" - local datetime=$(date '+%a %b %d %H:%M') - local hline="" - for ((i=0; i/dev/null && \ - echo -e "${DF_GREEN}✓${DF_NC} Compiled: ${file##*/}" || \ - echo -e "${DF_YELLOW}⚠${DF_NC} Skipped: ${file##*/}" - else - echo -e "${DF_CYAN}○${DF_NC} Current: ${file##*/}" - fi - fi -} - -clean_compiled() { - echo "Removing compiled files..." - - local count=0 - - for zwc in "$DOTFILES_DIR"/**/*.zwc(N); do - rm -f "$zwc" - ((count++)) - done - - rm -f ~/.zshrc.zwc ~/.zshenv.zwc ~/.zprofile.zwc 2>/dev/null - - echo -e "${DF_GREEN}✓${DF_NC} Removed $count compiled files" -} - -compile_all() { - echo -e "${DF_CYAN}Compiling zsh files for faster startup...${DF_NC}" - echo - - echo "Core files:" - compile_file ~/.zshrc - compile_file ~/.zshenv - compile_file ~/.zprofile - echo - - echo "Dotfiles:" - compile_file "$DOTFILES_DIR/zsh/.zshrc" - compile_file "$DOTFILES_DIR/zsh/aliases.zsh" - - for file in "$DOTFILES_DIR/zsh/lib"/*.zsh(N); do - compile_file "$file" - done - - for file in "$DOTFILES_DIR/zsh/functions"/*.zsh(N); do - compile_file "$file" - done - - for file in "$DOTFILES_DIR/zsh/themes"/*.zsh-theme(N); do - compile_file "$file" - done - echo - - if [[ -d ~/.oh-my-zsh ]]; then - echo "Oh-My-Zsh (optional):" - compile_file ~/.oh-my-zsh/oh-my-zsh.sh - echo - fi - - echo -e "${DF_GREEN}✓${DF_NC} Compilation complete" - echo - echo "To measure startup time:" - echo " time zsh -i -c exit" - echo " hyperfine 'zsh -i -c exit' # More accurate" -} - -show_help() { - echo "Usage: dotfiles-compile.sh [OPTIONS]" - echo - echo "Compile zsh files to bytecode for faster shell startup." - echo - echo "Options:" - echo " (none) Compile all zsh files" - echo " --clean Remove all compiled (.zwc) files" - echo " --help Show this help" -} - -# ============================================================================ -# Main -# ============================================================================ - -print_header - -case "${1:-}" in - --clean|-c) clean_compiled ;; - --help|-h) show_help ;; - *) compile_all ;; -esac diff --git a/refactor_backup/bin/dotfiles-doctor.sh b/refactor_backup/bin/dotfiles-doctor.sh deleted file mode 100755 index 24e4ca3..0000000 --- a/refactor_backup/bin/dotfiles-doctor.sh +++ /dev/null @@ -1,184 +0,0 @@ -#!/usr/bin/env bash -# ============================================================================ -# Dotfiles Health Check (Arch/CachyOS) -# ============================================================================ -# Usage: -# dotfiles-doctor.sh # Run all checks -# dotfiles-doctor.sh --fix # Attempt automatic fixes -# dotfiles-doctor.sh --quick # Quick essential checks only -# ============================================================================ - -# ============================================================================ -# Source Configuration -# ============================================================================ -# utils.zsh sources config.zsh which sources dotfiles.conf -# This gives us access to all settings including DF_WIDTH, DOTFILES_VERSION, etc. - -_df_source_config() { - local locations=( - "${DOTFILES_HOME:-$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 if utils.zsh not found - DF_RED=$'\033[0;31m' DF_GREEN=$'\033[0;32m' DF_YELLOW=$'\033[1;33m' - 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_HOME="${DOTFILES_HOME:-$HOME/.dotfiles}" - DOTFILES_VERSION="${DOTFILES_VERSION:-unknown}" - DF_WIDTH="${DF_WIDTH:-66}" -} - -_df_source_config - -# ============================================================================ -# Parse Arguments -# ============================================================================ - -DO_FIX=false -QUICK_MODE=false -for arg in "$@"; do - case "$arg" in - --fix) DO_FIX=true ;; - --quick) QUICK_MODE=true ;; - --help|-h) - echo "Usage: dotfiles-doctor.sh [OPTIONS]" - echo "" - echo "Options:" - echo " --fix Attempt automatic fixes for issues" - echo " --quick Run quick essential checks only" - echo " --help Show this help" - exit 0 - ;; - esac -done - -# Track results -TOTAL_CHECKS=0 -PASSED_CHECKS=0 -FAILED_CHECKS=0 -WARNING_CHECKS=0 -FIXED_CHECKS=0 - -# ============================================================================ -# Header (uses DF_WIDTH from config) -# ============================================================================ - -print_header() { - if declare -f df_print_header &>/dev/null; then - df_print_header "dotfiles-doctor" - 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/dev/null; then - check_pass "Running CachyOS" - elif grep -qi "arch" /etc/os-release 2>/dev/null; then - check_pass "Running Arch Linux" - else - check_fail "Not running on Arch/CachyOS" - fi - else - check_fail "Not running on Linux" - fi - check_pass "Kernel: $(uname -r)" -} - -check_shell() { - print_section "Shell Configuration" - [[ -f "$HOME/.zshrc" ]] && check_pass "Zsh configuration exists" || check_fail "Zsh configuration missing" - [[ "$SHELL" == *"zsh"* ]] && check_pass "Zsh is default shell" || check_warn "Zsh is not default shell" - command -v zsh &>/dev/null && check_pass "Zsh version: $(zsh --version | awk '{print $2}')" -} - -check_symlinks() { - print_section "Symlinks" - for symlink in ~/.zshrc ~/.gitconfig ~/.vimrc ~/.tmux.conf; do - if [[ -L "$symlink" ]]; then - [[ -e "$symlink" ]] && check_pass "$(basename $symlink) → $(readlink $symlink)" || check_fail "$(basename $symlink) is broken" - elif [[ -f "$symlink" ]]; then - check_warn "$(basename $symlink) is regular file (not symlink)" - fi - done -} - -check_pacman() { - print_section "Package Manager" - command -v pacman &>/dev/null && check_pass "Pacman available" || { check_fail "Pacman not found"; return; } - command -v paru &>/dev/null && check_pass "AUR helper: paru" || \ - command -v yay &>/dev/null && check_pass "AUR helper: yay" || check_warn "No AUR helper installed" -} - -check_optional_tools() { - print_section "Optional Tools" - command -v fzf &>/dev/null && check_pass "fzf" || check_warn "fzf not installed" - command -v bat &>/dev/null && check_pass "bat" || check_warn "bat not installed" - command -v eza &>/dev/null && check_pass "eza" || check_warn "eza not installed" - command -v tmux &>/dev/null && check_pass "tmux" || check_warn "tmux not installed" -} - -check_dotfiles_dir() { - print_section "Dotfiles Directory" - [[ -d "$DOTFILES_HOME" ]] && check_pass "Dotfiles: $DOTFILES_HOME" || { check_fail "Dotfiles not found"; return; } - [[ -f "$DOTFILES_HOME/dotfiles.conf" ]] && check_pass "Config file exists" || check_warn "Config file missing" - [[ -d "$DOTFILES_HOME/.git" ]] && check_pass "Git repo initialized" || check_warn "Not a git repository" - check_pass "Version: $DOTFILES_VERSION" - check_pass "Display width: $DF_WIDTH" -} - -print_summary() { - local width="${DF_WIDTH:-66}" - echo "" - printf "${DF_CYAN}─%.0s${DF_NC}" $(seq 1 $width); echo "" - if [[ $FAILED_CHECKS -eq 0 ]]; then - echo -e "${DF_GREEN}✓${DF_NC} All checks passed ($PASSED_CHECKS/$TOTAL_CHECKS)" - else - echo -e "${DF_RED}✗${DF_NC} Issues found: $FAILED_CHECKS failed, $WARNING_CHECKS warnings" - fi - echo "" -} - -# ============================================================================ -# Main -# ============================================================================ - -main() { - print_header - check_os - check_pacman - check_shell - check_dotfiles_dir - check_symlinks - [[ "$QUICK_MODE" != true ]] && check_optional_tools - print_summary -} - -main "$@" diff --git a/refactor_backup/bin/dotfiles-stats.sh b/refactor_backup/bin/dotfiles-stats.sh deleted file mode 100755 index 3156113..0000000 --- a/refactor_backup/bin/dotfiles-stats.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env bash -# ============================================================================ -# Dotfiles Shell Analytics (Arch/CachyOS) -# ============================================================================ - -set -e - -readonly DOTFILES_HOME="${DOTFILES_HOME:-$HOME/.dotfiles}" - -# Source shared colors and utils (provides DF_WIDTH) -source "$DOTFILES_HOME/zsh/lib/utils.zsh" 2>/dev/null || \ -source "$DOTFILES_HOME/zsh/lib/colors.zsh" 2>/dev/null || { - DF_RED=$'\033[0;31m' DF_GREEN=$'\033[0;32m' DF_YELLOW=$'\033[1;33m' - DF_BLUE=$'\033[0;34m' DF_CYAN=$'\033[0;36m' DF_MAGENTA=$'\033[0;35m' - 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' -} - -# Use DF_WIDTH from utils.zsh or default to 66 -readonly WIDTH="${DF_WIDTH:-66}" - -# ============================================================================ -# MOTD-style header -# ============================================================================ - -print_header() { - if declare -f df_print_header &>/dev/null; then - df_print_header "dotfiles-stats " - else - local user="${USER:-root}" - local hostname="${HOSTNAME:-$(hostname -s 2>/dev/null)}" - local datetime=$(date '+%a %b %d %H:%M') - local hline="" && for ((i=0; i/dev/null; then - df_print_header "dotfiles-sync" - 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&2; } -print_warning() { echo -e "${DF_YELLOW}⚠${DF_NC} $1"; } -print_section() { echo ""; echo -e "${DF_BLUE}▶${DF_NC} $1"; } - -# ============================================================================ -# Sync Functions -# ============================================================================ - -check_git_repo() { - git -C "$DOTFILES_HOME" rev-parse --git-dir > /dev/null 2>&1 || { print_error "Not a git repository: $DOTFILES_HOME"; exit 1; } -} - -get_sync_status() { - cd "$DOTFILES_HOME" - local local_commits=$(git rev-list --count @{u}..HEAD 2>/dev/null || echo 0) - local remote_commits=$(git rev-list --count HEAD..@{u} 2>/dev/null || echo 0) - echo "$local_commits:$remote_commits" -} - -show_status() { - print_section "Sync Status" - cd "$DOTFILES_HOME" - print_status "Local branch: $(git rev-parse --abbrev-ref HEAD)" - print_status "Last commit: $(git log -1 --pretty=format:'%h - %s' 2>/dev/null || echo 'N/A')" - - local status=$(get_sync_status) - local local_commits="${status%:*}" - local remote_commits="${status#*:}" - - echo "" - [[ $local_commits -gt 0 ]] && print_warning "$local_commits commit(s) ahead of remote" - [[ $remote_commits -gt 0 ]] && print_warning "$remote_commits commit(s) behind remote" - [[ $local_commits -eq 0 && $remote_commits -eq 0 ]] && print_success "In sync with remote" -} - -show_status_short() { - cd "$DOTFILES_HOME" - local changes=$(git status --porcelain | wc -l) - local status=$(get_sync_status) - local local_commits="${status%:*}" - local remote_commits="${status#*:}" - - if [[ $changes -gt 0 ]]; then - echo -e " ${DF_YELLOW}⚠${DF_NC} Dotfiles: ${changes} local change(s) not pushed" - elif [[ $local_commits -gt 0 ]]; then - echo -e " ${DF_YELLOW}⚠${DF_NC} Dotfiles: ${local_commits} commit(s) not pushed" - elif [[ $remote_commits -gt 0 ]]; then - echo -e " ${DF_YELLOW}⚠${DF_NC} Dotfiles: ${remote_commits} commit(s) behind remote" - fi -} - -pull_changes() { - print_section "Pulling Changes" - cd "$DOTFILES_HOME" - print_status "Fetching from remote..." - git fetch origin - git pull origin && print_success "Changes pulled" || print_success "Already up to date" -} - -push_changes() { - local commit_msg="$1" - print_section "Pushing Changes" - cd "$DOTFILES_HOME" - - if ! git status --porcelain | grep -q .; then - print_warning "No local changes to push" - return - fi - - print_status "Staging changes..." - git add -A - - if [[ -z "$commit_msg" ]]; then - read -p "Commit message: " commit_msg - [[ -z "$commit_msg" ]] && { print_error "Commit cancelled"; return 1; } - fi - - git commit -m "$commit_msg" - git push origin - print_success "Changes pushed" -} - -# ============================================================================ -# Main -# ============================================================================ - -main() { - check_git_repo - - case "${1:-status}" in - status) - [[ "$2" == "-s" || "$2" == "--short" ]] && show_status_short || { print_header; show_status; } - ;; - push) - print_header; shift; push_changes "$*" - ;; - pull) - print_header; pull_changes - ;; - -s|--short) - show_status_short - ;; - *) - echo "Usage: $0 {status [-s]|push [message]|pull}" - exit 1 - ;; - esac -} - -main "$@" diff --git a/refactor_backup/bin/dotfiles-update.sh b/refactor_backup/bin/dotfiles-update.sh deleted file mode 100755 index 4959d26..0000000 --- a/refactor_backup/bin/dotfiles-update.sh +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env bash -# ============================================================================ -# Update Dotfiles Script -# ============================================================================ - -set -e - -SKIP_DEPS=true -PULL_ONLY=false - -for arg in "$@"; do - case "$arg" in - --skip-deps) SKIP_DEPS=true ;; - --with-deps) SKIP_DEPS=false ;; - --pull-only) PULL_ONLY=true ;; - --help|-h) - echo "Usage: dotfiles-update.sh [OPTIONS]" - echo "" - echo "Options:" - echo " --skip-deps Skip dependency check (default for updates)" - echo " --with-deps Run full dependency check" - echo " --pull-only Only git pull, don't re-run install script" - echo " --help Show this help message" - exit 0 - ;; - esac -done - -# 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" - DOTFILES_BRANCH="main" - DOTFILES_RAW_URL="https://raw.githubusercontent.com/adlee-was-taken/dotfiles/main" -fi - -# Source shared colors and utils (provides DF_WIDTH) -source "$DOTFILES_DIR/zsh/lib/utils.zsh" 2>/dev/null || \ -source "$DOTFILES_DIR/zsh/lib/colors.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_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' -} - -# Use DF_WIDTH from utils.zsh or default to 66 -readonly WIDTH="${DF_WIDTH:-66}" - -# ============================================================================ -# MOTD-style header -# ============================================================================ - -print_header() { - if declare -f df_print_header &>/dev/null; then - df_print_header "dotfiles-update" - else - local user="${USER:-root}" - local hostname="${HOSTNAME:-$(hostname -s 2>/dev/null)}" - local datetime=$(date '+%a %b %d %H:%M') - local hline="" && for ((i=0; i${DF_NC} $1"; } - -# ============================================================================ -# Main -# ============================================================================ - -print_header - -if [ ! -d "$DOTFILES_DIR" ]; then - print_error "Dotfiles directory not found: $DOTFILES_DIR" - exit 1 -fi - -cd "$DOTFILES_DIR" - -print_step "Updating dotfiles from repository..." -git pull origin "$DOTFILES_BRANCH" - -if [ $? -eq 0 ]; then - print_success "Dotfiles updated successfully" - - if [[ "$PULL_ONLY" == true ]]; then - echo - print_success "Pull complete (--pull-only mode)" - exit 0 - fi - - echo - print_success "Update complete!" - echo -e "Reload your shell: ${DF_CYAN}reload${DF_NC} or ${DF_CYAN}source ~/.zshrc${DF_NC}" -else - print_error "Failed to update dotfiles" - exit 1 -fi diff --git a/refactor_backup/bin/dotfiles-vault.sh b/refactor_backup/bin/dotfiles-vault.sh deleted file mode 100755 index 733bc24..0000000 --- a/refactor_backup/bin/dotfiles-vault.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env bash -# ============================================================================ -# Dotfiles Secrets Vault (Arch/CachyOS) -# ============================================================================ - -set -e - -readonly DOTFILES_HOME="${DOTFILES_HOME:-$HOME/.dotfiles}" -readonly VAULT_DIR="${HOME}/.dotfiles/vault" -readonly VAULT_FILE="${VAULT_DIR}/secrets.enc" - -# Source shared colors and utils (provides DF_WIDTH) -source "$DOTFILES_HOME/zsh/lib/utils.zsh" 2>/dev/null || \ -source "$DOTFILES_HOME/zsh/lib/colors.zsh" 2>/dev/null || { - DF_RED=$'\033[0;31m' DF_GREEN=$'\033[0;32m' DF_YELLOW=$'\033[1;33m' - 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' -} - -# Use DF_WIDTH from utils.zsh or default to 66 -readonly WIDTH="${DF_WIDTH:-66}" - -# ============================================================================ -# MOTD-style header -# ============================================================================ - -print_header() { - if declare -f df_print_header &>/dev/null; then - df_print_header "dotfiles-vault " - else - local user="${USER:-root}" - local hostname="${HOSTNAME:-$(hostname -s 2>/dev/null)}" - local datetime=$(date '+%a %b %d %H:%M') - local hline="" && for ((i=0; i&2; } -print_section() { echo ""; echo -e "${DF_BLUE}▶${DF_NC} $1"; } - -get_cipher() { - command -v age &> /dev/null && echo "age" || \ - command -v gpg &> /dev/null && echo "gpg" || \ - { print_error "No encryption tool available"; exit 1; } -} - -init_vault() { - print_section "Initializing Vault" - mkdir -p "$VAULT_DIR" - chmod 700 "$VAULT_DIR" - [[ ! -f "$VAULT_FILE" ]] && { echo "{}" > "$VAULT_FILE"; print_success "Vault initialized"; } || print_success "Vault exists" -} - -vault_list() { - print_section "Secrets" - [[ -f "$VAULT_FILE" ]] && cat "$VAULT_FILE" | grep -o '"[^"]*":' | sed 's/"//g;s/:$//' | while read key; do - echo -e " ${DF_CYAN}•${DF_NC} $key" - done || print_error "No vault file" - echo "" -} - -vault_status() { - print_section "Vault Status" - [[ -d "$VAULT_DIR" ]] || { echo -e " ${DF_YELLOW}⚠${DF_NC} Vault not initialized"; return; } - [[ -f "$VAULT_FILE" ]] || { echo -e " ${DF_YELLOW}⚠${DF_NC} Vault file not found"; return; } - echo -e " ${DF_CYAN}Location:${DF_NC} $VAULT_FILE" - echo -e " ${DF_CYAN}Encryption:${DF_NC} $(get_cipher)" - echo "" -} - -main() { - print_header - [[ ! -d "$VAULT_DIR" ]] && init_vault - case "${1:-list}" in - init) init_vault ;; - list|ls) vault_list ;; - status) vault_status ;; - *) echo "Usage: $0 {init|list|status}"; exit 1 ;; - esac -} - -main "$@" diff --git a/refactor_backup/bin/dotfiles-version.sh b/refactor_backup/bin/dotfiles-version.sh deleted file mode 100755 index c73d529..0000000 --- a/refactor_backup/bin/dotfiles-version.sh +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env bash -# ============================================================================ -# Dotfiles Version Checker -# ============================================================================ - -# ============================================================================ -# Source Configuration -# ============================================================================ - -_df_source_config() { - local locations=( - "${DOTFILES_HOME:-$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_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_LIGHT_GREEN=$'\033[38;5;82m' - DOTFILES_DIR="${DOTFILES_DIR:-$HOME/.dotfiles}" - DOTFILES_VERSION="${DOTFILES_VERSION:-unknown}" - DOTFILES_BRANCH="${DOTFILES_BRANCH:-main}" - DF_WIDTH="${DF_WIDTH:-66}" -} - -_df_source_config - -# ============================================================================ -# Parse Arguments -# ============================================================================ - -CHECK_ONLY=false -for arg in "$@"; do - case "$arg" in - --check|-c) CHECK_ONLY=true ;; - --help|-h) echo "Usage: dotfiles-version.sh [--check]"; exit 0 ;; - esac -done - -# ============================================================================ -# Header -# ============================================================================ - -print_header() { - if declare -f df_print_header &>/dev/null; then - df_print_header "dotfiles-version " - 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/dev/null || echo "unknown"; } || echo "not a git repo" -} - -get_local_date() { - [[ -d "${DOTFILES_DIR}/.git" ]] && { cd "$DOTFILES_DIR"; git log -1 --format="%ci" 2>/dev/null | cut -d' ' -f1 || echo "unknown"; } || echo "unknown" -} - -# ============================================================================ -# Main -# ============================================================================ - -main() { - local local_commit=$(get_local_commit) - local local_date=$(get_local_date) - - if [[ "$CHECK_ONLY" == true ]]; then - echo "Version: $DOTFILES_VERSION ($local_commit)" - exit 0 - fi - - print_header - - echo -e "${DF_CYAN}Local:${DF_NC}" - echo -e " Version: ${DF_GREEN}${DOTFILES_VERSION}${DF_NC}" - echo -e " Commit: ${local_commit}" - echo -e " Date: ${local_date}" - echo -e " Path: ${DOTFILES_DIR}" - echo -e " Branch: ${DOTFILES_BRANCH}" - echo -e " Width: ${DF_WIDTH}" - echo -} - -main "$@" diff --git a/refactor_backup/setup/setup-espanso.sh b/refactor_backup/setup/setup-espanso.sh deleted file mode 100755 index 6bc40b4..0000000 --- a/refactor_backup/setup/setup-espanso.sh +++ /dev/null @@ -1,317 +0,0 @@ -#!/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${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 "$@" diff --git a/refactor_backup/setup/setup-wizard.sh b/refactor_backup/setup/setup-wizard.sh deleted file mode 100755 index b893fee..0000000 --- a/refactor_backup/setup/setup-wizard.sh +++ /dev/null @@ -1,127 +0,0 @@ -#!/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/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 "$@" diff --git a/refactor_backup/zsh/.zshrc b/refactor_backup/zsh/.zshrc deleted file mode 100644 index d77513d..0000000 --- a/refactor_backup/zsh/.zshrc +++ /dev/null @@ -1,377 +0,0 @@ -# ============================================================================ -# ADLee's ZSH Configuration (Optimized) -# ============================================================================ -# Optimizations: -# - Deferred/lazy loading for heavy plugins -# - Parallel background loading where possible -# - Compiled zsh files (.zwc) for faster parsing -# - Minimal command -v checks (cached) -# ============================================================================ - -# --- Profiling (uncomment to debug slow startup) --- -# zmodload zsh/zprof - -# ============================================================================ -# Instant Prompt (show prompt immediately while loading continues) -# ============================================================================ - -# Cache command existence checks -typeset -gA _cmd_cache -_has_cmd() { - if [[ -z "${_cmd_cache[$1]+x}" ]]; then - _cmd_cache[$1]=$(command -v "$1" &>/dev/null && echo 1 || echo 0) - fi - [[ "${_cmd_cache[$1]}" == "1" ]] -} - -# ============================================================================ -# Core Settings (fast, no external calls) -# ============================================================================ - -export ZSH="$HOME/.oh-my-zsh" -export EDITOR='vim' -export VISUAL='vim' -export LANG=en_US.UTF-8 -export LC_ALL=en_US.UTF-8 -export PATH="$HOME/.local/bin:$PATH" - -# History (set early) -HISTSIZE=10000 -SAVEHIST=10000 -HISTFILE=~/.zsh_history -setopt SHARE_HISTORY APPEND_HISTORY EXTENDED_HISTORY -setopt HIST_IGNORE_ALL_DUPS HIST_FIND_NO_DUPS HIST_IGNORE_SPACE - -# ============================================================================ -# Theme Configuration -# ============================================================================ - -ZSH_THEME="adlee" - -# ============================================================================ -# Oh-My-Zsh Settings (before sourcing) -# ============================================================================ - -zstyle ':omz:update' mode reminder -zstyle ':omz:update' frequency 13 -COMPLETION_WAITING_DOTS="true" -HIST_STAMPS="yyyy-mm-dd" - -# Disable oh-my-zsh auto-update check on every load (slow) -DISABLE_AUTO_UPDATE="true" - -# ============================================================================ -# Plugins - Optimized Selection -# ============================================================================ -# Removed heavy plugins that aren't always needed -# kubectl, docker-compose loaded on-demand - -plugins=( - git - sudo - zsh-autosuggestions - zsh-syntax-highlighting -) - -# Conditionally add plugins only if tools exist -[[ -d "$HOME/.fzf" || -f "/usr/share/fzf/key-bindings.zsh" ]] && plugins+=(fzf) - -# ============================================================================ -# Load Oh-My-Zsh -# ============================================================================ - -source $ZSH/oh-my-zsh.sh - -# ============================================================================ -# Aliases (inline - no external checks during definition) -# ============================================================================ - -# Navigation -alias ..='cd ..' -alias ...='cd ../..' -alias ....='cd ../../..' -alias ~='cd ~' - -# Git shortcuts -alias g='git' -alias gs='git status' -alias ga='git add' -alias gc='git commit' -alias gp='git push' -alias gl='git pull' -alias gd='git diff' -alias gco='git checkout' -alias gb='git branch' -alias glog='git log --oneline --graph --decorate --all' - -# Docker shortcuts -alias d='docker' -alias dc='docker-compose' -alias dps='docker ps' -alias dpa='docker ps -a' -alias di='docker images' -alias dex='docker exec -it' - -# System -alias h='history' -alias c='clear' -alias rm='rm -i' -alias cp='cp -i' -alias mv='mv -i' -alias myip='curl -s ifconfig.me' -alias ports='netstat -tulanp' - -# ============================================================================ -# Deferred Alias Setup (runs after prompt displays) -# ============================================================================ - -_setup_tool_aliases() { - # eza/ls aliases - if _has_cmd eza; then - alias ls='eza --icons' - alias ll='eza -lah --icons' - alias la='eza -a --icons' - alias lt='eza --tree --level=2 --icons' - else - alias ll='ls -lah' - alias la='ls -A' - fi - - # bat/cat aliases - if _has_cmd batcat; then - alias cat='batcat --paging=never' - alias bat='batcat' - elif _has_cmd bat; then - alias cat='bat --paging=never' - fi -} - -# ============================================================================ -# Functions -# ============================================================================ - -push-it() { git add . && git commit -m "$1" && git push origin; } -mkcd() { mkdir -p "$1" && cd "$1"; } -ff() { find . -type f -iname "*$1*"; } -fdir() { find . -type d -iname "*$1*"; } -backup() { cp "$1" "$1.backup-$(date +%Y%m%d-%H%M%S)"; } - -extract() { - [[ ! -f "$1" ]] && { echo "'$1' is not a valid file"; return 1; } - case "$1" in - *.tar.bz2) tar xjf "$1" ;; - *.tar.gz) tar xzf "$1" ;; - *.bz2) bunzip2 "$1" ;; - *.rar) unrar x "$1" ;; - *.gz) gunzip "$1" ;; - *.tar) tar xf "$1" ;; - *.tbz2) tar xjf "$1" ;; - *.tgz) tar xzf "$1" ;; - *.zip) unzip "$1" ;; - *.Z) uncompress "$1" ;; - *.7z) 7z x "$1" ;; - *) echo "'$1' cannot be extracted via extract()" ;; - esac -} - -# ============================================================================ -# Key Bindings! -# ============================================================================ - -bindkey "^[[1;5C" forward-word -bindkey "^[[1;5D" backward-word -bindkey "^[[H" beginning-of-line -bindkey "^[[F" end-of-line -bindkey "^[[3~" delete-char - -# Alt+R to reload -function reload-zsh() { echo "Reloading ~/.zshrc ... "; source ~/.zshrc; zle reset-prompt} -zle -N reload-zsh -bindkey "^[r" reload-zsh - -# ============================================================================ -# FZF Configuration (deferred) -# ============================================================================ - -_setup_fzf() { - export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border' - if _has_cmd fd; then - export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git' - export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" - fi -} - -# ============================================================================ -# Lazy-loaded Tools -# ============================================================================ - -# NVM -export NVM_DIR="$HOME/.nvm" -if [[ -s "$NVM_DIR/nvm.sh" ]]; then - _load_nvm() { - unfunction nvm node npm npx 2>/dev/null - \. "$NVM_DIR/nvm.sh" - [[ -s "$NVM_DIR/bash_completion" ]] && \. "$NVM_DIR/bash_completion" - } - nvm() { _load_nvm; nvm "$@"; } - node() { _load_nvm; node "$@"; } - npm() { _load_nvm; npm "$@"; } - npx() { _load_nvm; npx "$@"; } -fi - -# Python virtualenvwrapper -export WORKON_HOME=$HOME/.virtualenvs -if [[ -f /usr/local/bin/virtualenvwrapper.sh ]]; then - _load_venv() { - unfunction workon mkvirtualenv rmvirtualenv 2>/dev/null - export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 - source /usr/local/bin/virtualenvwrapper.sh - } - workon() { _load_venv; workon "$@"; } - mkvirtualenv() { _load_venv; mkvirtualenv "$@"; } -fi - -# Rust cargo -[[ -f "$HOME/.cargo/env" ]] && source "$HOME/.cargo/env" - -# kubectl (lazy load - it's VERY slow to initialize) -if _has_cmd kubectl; then - kubectl() { - unfunction kubectl 2>/dev/null - source <(command kubectl completion zsh) - command kubectl "$@" - } -fi - -# ============================================================================ -# Dotfiles Configuration -# ============================================================================ - -_dotfiles_dir="$HOME/.dotfiles" - -# Load dotfiles.conf first (sets DOTFILES_DIR and other vars) -if [[ -f "$_dotfiles_dir/dotfiles.conf" ]]; then - source "$_dotfiles_dir/dotfiles.conf" -else - DOTFILES_DIR="$HOME/.dotfiles" - DOTFILES_BRANCH="main" -fi - -# Source shared colors library -[[ -f "$_dotfiles_dir/zsh/lib/colors.zsh" ]] && source "$_dotfiles_dir/zsh/lib/colors.zsh" - -# Source dotfiles aliases -[[ -f "$_dotfiles_dir/zsh/aliases.zsh" ]] && source "$_dotfiles_dir/zsh/aliases.zsh" - -# Load command-palette immediately (needed for keybindings) -[[ -f "$_dotfiles_dir/zsh/functions/command-palette.zsh" ]] && \ - source "$_dotfiles_dir/zsh/functions/command-palette.zsh" - -# ============================================================================ -# Deferred Loading (runs in background after prompt) -# ============================================================================ - -_deferred_load() { - # Setup tool aliases - _setup_tool_aliases - - # Setup FZF - _has_cmd fzf && _setup_fzf - - # ----------------------------------------------------------------------- - # Load all function files from functions directory - # Excludes command-palette.zsh (already loaded) and motd.zsh (loaded separately) - # ----------------------------------------------------------------------- - local func_dir="$_dotfiles_dir/zsh/functions" - if [[ -d "$func_dir" ]]; then - for func_file in "$func_dir"/*.zsh; do - [[ -f "$func_file" ]] || continue - - # Skip files that are loaded elsewhere - case "${func_file:t}" in - command-palette.zsh) continue ;; # Loaded early for keybindings - motd.zsh) continue ;; # Loaded after prompt - esac - - source "$func_file" - done - fi -} - -# ============================================================================ -# Background Tasks (truly async, won't block) -# ============================================================================ - -_background_tasks() { - # Check for dotfiles updates - if [[ "${DOTFILES_AUTO_SYNC_CHECK:-true}" == "true" ]]; then - $_dotfiles_dir/bin/dotfiles-sync.sh status -s 2> /dev/null - fi - _df_check_sys_updates -} - -_df_check_sys_updates() { - # Check number of available updates and export - if _has_cmd checkupdates; then - export UPDATE_PKG_COUNT=$(checkupdates 2>/dev/null | wc -l) - else - export UPDATE_PKG_COUNT=0 - fi -} - -# ============================================================================ -# Initialization Strategy -# ============================================================================ - -# Method 1: Use zsh-defer if available (best option) -if [[ -f "$_dotfiles_dir/zsh/plugins/zsh-defer/zsh-defer.plugin.zsh" ]]; then - source "$_dotfiles_dir/zsh/plugins/zsh-defer/zsh-defer.plugin.zsh" - zsh-defer _deferred_load - zsh-defer _background_tasks - zsh-defer -c '[[ -f "$_dotfiles_dir/zsh/functions/motd.zsh" ]] && source "$_dotfiles_dir/zsh/functions/motd.zsh" && show_motd' -else - # Method 2: Use sched for deferred loading (built-in) - # Runs after first prompt is displayed - zmodload zsh/sched 2>/dev/null - - _first_prompt_hook() { - # Remove this hook after first run - add-zsh-hook -d precmd _first_prompt_hook - - # Run deferred loading - _deferred_load - - # Show MOTD after prompt - if [[ -f "$_dotfiles_dir/zsh/functions/motd.zsh" ]]; then - source "$_dotfiles_dir/zsh/functions/motd.zsh" - case "${MOTD_STYLE:-compact}" in - compact) show_motd ;; - mini) show_motd_mini ;; - full) show_motd_full ;; - esac - fi - - # Background tasks - _background_tasks - } - - autoload -Uz add-zsh-hook - add-zsh-hook precmd _first_prompt_hook -fi - -# ============================================================================ -# OS-Specific -# ============================================================================ - -[[ "$(uname -s)" == "Darwin"* ]] && export HOMEBREW_NO_ANALYTICS=1 - -# ============================================================================ -# Local Configuration (always load - user overrides) -# ============================================================================ - -[[ -f ~/.zshrc.local ]] && source ~/.zshrc.local - -# ============================================================================ -# End - Profiling output (uncomment zprof at top to use) -# ============================================================================ -# zprof diff --git a/refactor_backup/zsh/.zshrc.zwc b/refactor_backup/zsh/.zshrc.zwc deleted file mode 100644 index 4e89c3026686c897b253a8d49f56b2a5a9bd5e79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20960 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/dev/null; then - "$script" "$@" - else - echo "Error: $script not found" >&2 - echo "Run the installer: ~/.dotfiles/install.sh" >&2 - return 1 - fi -} - -# --- Quality of Life Aliases --- -alias hist="history" - - -# --- Core Dotfiles Commands --- -alias dfdir='cd $HOME/.dotfiles' -alias c.='cd $HOME/.dotfiles' - -# Note: 'df' not aliased to avoid conflict with disk free utility - -# Doctor - health check -dfd() { _df_run dotfiles-doctor.sh "$@"; } -doctor() { _df_run dotfiles-doctor.sh "$@"; } -dffix() { _df_run dotfiles-doctor.sh --fix "$@"; } - -# Sync - multi-machine synchronization -dfs() { _df_run dotfiles-sync.sh "$@"; } -dfsync() { _df_run dotfiles-sync.sh "$@"; } -dfpush() { _df_run dotfiles-sync.sh push "${1:-Dotfiles update $(date '+%Y-%m-%d %H:%M')}"; } -dfpull() { _df_run dotfiles-sync.sh pull "$@"; } -dfstatus() { _df_run dotfiles-sync.sh status "$@"; } - -# Update - pull latest and reinstall -dfu() { _df_run dotfiles-update.sh "$@"; } -dfupdate() { _df_run dotfiles-update.sh "$@"; } - -# Version - check version info -dfv() { _df_run dotfiles-version.sh "$@"; } -dfversion() { _df_run dotfiles-version.sh "$@"; } - -# Stats - shell analytics (removed short 'stats' alias to force explicit usage) -dfstats() { _df_run dotfiles-stats.sh "$@"; } -tophist() { _df_run dotfiles-stats.sh --top "$@"; } -suggest() { _df_run dotfiles-stats.sh --suggest "$@"; } - -# Vault - secrets management -vault() { _df_run dotfiles-vault.sh "$@"; } -vls() { _df_run dotfiles-vault.sh list "$@"; } -vget() { _df_run dotfiles-vault.sh get "$@"; } -vset() { _df_run dotfiles-vault.sh set "$@"; } - -# Compile - compile zsh files for speed -dfcompile() { _df_run dotfiles-compile.sh "$@"; } - -# --- Quick Edit Aliases --- -alias v.zshrc='${EDITOR:-vim} ~/.zshrc' -alias v.conf='${EDITOR:-vim} ~/.dotfiles/dotfiles.conf' -alias v.edit='cd ~/.dotfiles && ${EDITOR:-vim} .' -alias v.alias='${EDITOR:-vim} ~/.dotfiles/zsh/aliases.zsh' -alias v.motd='${EDITOR:-vim} ~/.dotfiles/zsh/functions/motd.zsh' -alias v.theme='${EDITOR:-vim} ~/.dotfiles/zsh/themes/adlee.zsh-theme' - -# --- Reload Aliases --- -alias reload='source ~/.zshrc' -alias rl='source ~/.zshrc' - -# ============================================================================ -# Function Wrappers (for tab completion) -# ============================================================================ - -# Dotfiles main command with subcommands -dotfiles-cli() { - case "${1:-help}" in - doctor|doc|d) shift; _df_run dotfiles-doctor.sh "$@" ;; - sync|s) shift; _df_run dotfiles-sync.sh "$@" ;; - update|up|u) shift; _df_run dotfiles-update.sh "$@" ;; - version|ver|v) shift; _df_run dotfiles-version.sh "$@" ;; - stats|st) shift; _df_run dotfiles-stats.sh "$@" ;; - vault|vlt) shift; _df_run dotfiles-vault.sh "$@" ;; - compile|comp) shift; _df_run dotfiles-compile.sh "$@" ;; - edit|e) cd ~/.dotfiles && ${EDITOR:-vim} . ;; - cd) cd ~/.dotfiles ;; - help|--help|-h|*) - echo "Dotfiles CLI" - echo - echo "Usage: dotfiles-cli [args]" - echo - echo "Commands:" - echo " doctor, d Run health check (--fix to auto-repair)" - echo " sync, s Sync dotfiles across machines" - echo " update, u Pull latest and reinstall" - echo " version, v Show version info" - echo " stats, st Shell analytics dashboard" - echo " vault, vlt Secrets management" - echo " compile Compile zsh files for speed" - echo " edit, e Open dotfiles in editor" - echo " cd Change to dotfiles directory" - echo - echo "Aliases:" - echo " dfd, dffix, dfs, dfpush, dfpull, dfu, dfv, dfstats, vault" - echo - echo "Note: 'stats' alias removed - use 'dfstats' instead" - ;; - esac -} - -# Short alias for the CLI -alias dfc='dotfiles-cli' - -# Additional quality of life aliases/functions. - -# Use glow to "less" Markdown files: -alias glow='glow -p' -less() { - if ! command -v glow &>/dev/null; then - command less "$@" - return - fi - - if [[ $# -eq 1 && "$1" == *.md ]]; then - glow -p "$1" # -p for pager mode (like less) - else - command less "$@" - fi -} - -# Arch system upgrade with snapper pre/post -sys-update() { - local update_date=$(date -d "today" +"%Y-%m-%d %H:%M") - sudo snapper -c root create --description "System Update ${update_date}" --command "sudo pacman -Syu" - _df_check_sys_updates -} diff --git a/refactor_backup/zsh/aliases.zsh.zwc b/refactor_backup/zsh/aliases.zsh.zwc deleted file mode 100644 index 2118194cd91b41300e4267d8e38490de2ea5e073..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13072 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/dev/null || \ -source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null - -typeset -g BTRFS_DEFAULT_MOUNT="${BTRFS_DEFAULT_MOUNT:-/}" - -_btrfs_check() { - df_require_cmd btrfs btrfs-progs || return 1 - if ! df_is_btrfs; then - df_print_warning "Root filesystem is not btrfs" - return 1 - fi - return 0 -} - -btrfs-usage() { - _btrfs_check || return 1 - local mount="${1:-$BTRFS_DEFAULT_MOUNT}" - df_print_func_name "Btrfs Filesystem Usage: ${mount}" - sudo btrfs filesystem usage "$mount" -h -} - -btrfs-subs() { - _btrfs_check || return 1 - local mount="${1:-$BTRFS_DEFAULT_MOUNT}" - df_print_func_name "Btrfs Subvolumes" - df_print_section "Subvolume List" - sudo btrfs subvolume list "$mount" | while read -r line; do - local path=$(echo "$line" | awk '{print $NF}') - local id=$(echo "$line" | awk '{print $2}') - df_print_indent "● [$id] $path" - done - echo "" - df_print_section "Default Subvolume" - sudo btrfs subvolume get-default "$mount" -} - -btrfs-balance() { - _btrfs_check || return 1 - local mount="${1:-$BTRFS_DEFAULT_MOUNT}" - local usage="${2:-50}" - df_print_func_name "Btrfs Balance" - df_confirm_warning "This may take a while and use significant I/O" || return 0 - echo "" - df_print_step "Balancing data chunks with <${usage}% usage..." - sudo btrfs balance start -dusage="$usage" -musage="$usage" "$mount" -v - [[ $? -eq 0 ]] && df_print_success "Balance completed" || df_print_warning "Balance finished (may have been interrupted)" -} - -btrfs-balance-status() { - _btrfs_check || return 1 - df_print_func_name "Btrfs Balance Status" - sudo btrfs balance status "${1:-$BTRFS_DEFAULT_MOUNT}" -} - -btrfs-balance-cancel() { - _btrfs_check || return 1 - df_print_step "Cancelling balance..." - sudo btrfs balance cancel "${1:-$BTRFS_DEFAULT_MOUNT}" -} - -btrfs-scrub() { - _btrfs_check || return 1 - local mount="${1:-$BTRFS_DEFAULT_MOUNT}" - df_print_func_name "Btrfs Scrub" - local status=$(sudo btrfs scrub status "$mount" 2>/dev/null) - if echo "$status" | grep -q "running"; then - df_print_section "Scrub Status (running)" - echo "$status" | sed 's/^/ /' - return 0 - fi - df_print_warning "Scrub verifies data integrity and may take hours" - df_confirm "Start scrub?" || return 0 - df_print_step "Starting scrub..." - sudo btrfs scrub start "$mount" - echo "" - df_print_section "Scrub Status" - sudo btrfs scrub status "$mount" - df_print_info "Monitor with: btrfs-scrub-status" -} - -btrfs-scrub-status() { - _btrfs_check || return 1 - df_print_func_name "Btrfs Scrub Status" - sudo btrfs scrub status "${1:-$BTRFS_DEFAULT_MOUNT}" -} - -btrfs-scrub-cancel() { - _btrfs_check || return 1 - df_print_step "Cancelling scrub..." - sudo btrfs scrub cancel "${1:-$BTRFS_DEFAULT_MOUNT}" -} - -btrfs-defrag() { - _btrfs_check || return 1 - local target="${1:-.}" - [[ ! -e "$target" ]] && { df_print_error "Target not found: $target"; return 1; } - df_print_func_name "Btrfs Defragment" - if [[ -d "$target" ]]; then - df_print_warning "Recursive defrag on directory: $target" - df_confirm "Continue?" || return 0 - sudo btrfs filesystem defragment -r -v "$target" - else - df_print_step "Defragmenting: $target" - sudo btrfs filesystem defragment -v "$target" - fi - df_print_success "Defragmentation complete" -} - -btrfs-compress() { - _btrfs_check || return 1 - df_require_cmd compsize || return 1 - df_print_func_name "Btrfs Compression Statistics" - sudo compsize "${1:-$BTRFS_DEFAULT_MOUNT}" -} - -btrfs-info() { - _btrfs_check || return 1 - local mount="${1:-$BTRFS_DEFAULT_MOUNT}" - df_print_func_name "Btrfs Filesystem Information" - df_print_section "Filesystem Show" - sudo btrfs filesystem show "$mount" - echo "" - df_print_section "Filesystem df" - sudo btrfs filesystem df "$mount" - echo "" - df_print_section "Device Stats" - sudo btrfs device stats "$mount" -} - -btrfs-health() { - _btrfs_check || return 1 - local mount="${1:-$BTRFS_DEFAULT_MOUNT}" - df_print_func_name "Btrfs Health Check" - local issues=0 - - df_print_section "Device Errors" - local errors=$(sudo btrfs device stats "$mount" 2>/dev/null | grep -v " 0$" | grep -v "^$") - [[ -z "$errors" ]] && df_print_indent "✓ No errors" || { df_print_indent "✗ Errors detected:"; echo "$errors" | sed 's/^/ /'; ((issues++)); } - - echo "" - df_print_section "Space Allocation" - local used_pct=$(sudo btrfs filesystem usage "$mount" -b 2>/dev/null | grep "Used:" | head -1 | awk '{print $2}' | tr -d '%') - if [[ -n "$used_pct" ]]; then - (( used_pct >= 90 )) && { df_print_indent "✗ ${used_pct}% full - critical!"; ((issues++)); } || \ - (( used_pct >= 80 )) && df_print_indent "⚠ ${used_pct}% full" || df_print_indent "✓ ${used_pct}% used" - fi - - echo "" - df_print_section "Last Scrub" - local scrub=$(sudo btrfs scrub status "$mount" 2>/dev/null) - local scrub_date=$(echo "$scrub" | grep "Scrub started" | awk '{print $3, $4, $5}') - [[ -n "$scrub_date" ]] && df_print_indent "Last: $scrub_date" || df_print_indent "⚠ No scrub run yet" - - echo "" - (( issues == 0 )) && df_print_success "Filesystem healthy" || df_print_error "Found $issues issue(s)" -} - -btrfs-snap-usage() { - _btrfs_check || return 1 - df_print_func_name "Snapshot Disk Space Usage" - if [[ -d "/.snapshots" ]]; then - df_print_section "Snapshot Directory" - local size=$(timeout 10 sudo du -sh /.snapshots 2>/dev/null | cut -f1) - df_print_indent "${size:-Unable to calculate}" - echo "" - df_print_section "Individual Snapshots (top 10)" - timeout 30 sudo du -sh /.snapshots/*/ 2>/dev/null | sort -h | tail -10 | sed 's/^/ /' - else - df_print_warning "No /.snapshots directory found" - fi -} - -btrfs-maintain() { - _btrfs_check || return 1 - local mount="${1:-$BTRFS_DEFAULT_MOUNT}" - df_print_func_name "Btrfs Maintenance Routine" - echo "This will: health check, balance, scrub" - df_confirm_warning "This may take several hours" || return 0 - df_print_step "Step 1/3: Health Check" - btrfs-health "$mount" - df_print_step "Step 2/3: Balance" - sudo btrfs balance start -dusage=50 -musage=50 "$mount" - df_print_step "Step 3/3: Scrub" - sudo btrfs scrub start -B "$mount" - df_print_success "Maintenance complete" -} - -btrfs-help() { - df_print_func_name "Btrfs Helper Commands" - cat << 'EOF' - btrfs-usage [mount] Filesystem usage - btrfs-subs [mount] List subvolumes - btrfs-info [mount] Full filesystem info - btrfs-health [mount] Quick health check - btrfs-compress [path] Compression stats - btrfs-balance [mount] Start balance - btrfs-scrub [mount] Start scrub - btrfs-defrag Defragment - btrfs-snap-usage Snapshot space usage - btrfs-maintain [mount] Full maintenance -EOF -} - -alias btru='btrfs-usage' btrs='btrfs-subs' btrh='btrfs-health' btri='btrfs-info' btrc='btrfs-compress' diff --git a/refactor_backup/zsh/functions/btrfs-helpers.zsh.zwc b/refactor_backup/zsh/functions/btrfs-helpers.zsh.zwc deleted file mode 100644 index 05a56913141c203c402a6e452ed727439bd82ea2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22128 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 R&aF/dev/null || \ -source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null - -typeset -g PALETTE_HOTKEY="${PALETTE_HOTKEY:-^@}" -typeset -g PALETTE_HISTORY_SIZE=50 -typeset -g PALETTE_BOOKMARKS_FILE="$HOME/.dotfiles/.bookmarks" -typeset -g DOTFILES_DIR="${DOTFILES_DIR:-$HOME/.dotfiles}" - -typeset -g ICON_ALIAS="⚡" ICON_FUNC="λ" ICON_HIST="↺" ICON_DIR="📁" -typeset -g ICON_SCRIPT="⚙" ICON_ACTION="★" ICON_GIT="⎇" - -_palette_get_aliases() { - alias | sed 's/^alias //' | while IFS='=' read -r name cmd; do - cmd="${cmd#\'}"; cmd="${cmd%\'}"; cmd="${cmd#\"}"; cmd="${cmd%\"}" - printf "%s\t%s\t%s\t%s\n" "$ICON_ALIAS" "alias" "$name" "$cmd" - done -} - -_palette_get_functions() { - print -l ${(ok)functions} | grep -v "^_" | while read -r name; do - printf "%s\t%s\t%s\t%s\n" "$ICON_FUNC" "function" "$name" "" - done -} - -_palette_get_history() { - fc -ln -"$PALETTE_HISTORY_SIZE" 2>/dev/null | awk '!seen[$0]++' | while read -r cmd; do - [[ -n "$cmd" ]] && printf "%s\t%s\t%s\t%s\n" "$ICON_HIST" "history" "$cmd" "" - done -} - -_palette_get_bookmarks() { - [[ ! -f "$PALETTE_BOOKMARKS_FILE" ]] && return - while IFS='|' read -r name path desc; do - [[ "$name" =~ ^# || -z "$name" ]] && continue - printf "%s\t%s\t%s\t%s\n" "$ICON_DIR" "bookmark" "$name" "$path" - done < "$PALETTE_BOOKMARKS_FILE" -} - -_palette_get_actions() { - cat << 'EOF' -★ action reload-shell Reload zsh configuration -★ action edit-zshrc Edit ~/.zshrc -★ action dotfiles-update Update dotfiles -EOF - df_in_git_repo && cat << 'EOF' -⎇ git git-status Show git status -⎇ git git-pull Pull latest -⎇ git git-push Push commits -EOF -} - -_palette_run_action() { - case "$1" in - reload-shell) source ~/.zshrc; df_print_success "Shell reloaded" ;; - edit-zshrc) ${EDITOR:-vim} ~/.zshrc ;; - dotfiles-update) cd "$DOTFILES_DIR" && git pull ;; - git-status) git status ;; - git-pull) git pull ;; - git-push) git push ;; - *) df_print_error "Unknown action: $1" ;; - esac -} - -palette() { - df_require_cmd fzf || return 1 - local items=$(_palette_get_actions; _palette_get_aliases; _palette_get_functions; _palette_get_bookmarks; _palette_get_history) - local sel=$(echo "$items" | fzf --ansi --delimiter='\t' --with-nth=1,3,4 $(df_fzf_opts) --prompt='> ') - [[ -z "$sel" ]] && return - local type=$(echo "$sel" | cut -f2) name=$(echo "$sel" | cut -f3) detail=$(echo "$sel" | cut -f4) - case "$type" in - alias|history) print -z "$name" ;; - function) print -z "$name " ;; - bookmark) cd "$detail" && pwd ;; - action|git) _palette_run_action "$name" ;; - esac -} - -bookmark() { - local cmd="${1:-list}"; shift 2>/dev/null - case "$cmd" in - add) - local name="$1" path="${2:-$(pwd)}" desc="$3" - [[ -z "$name" ]] && { echo "Usage: bookmark add [path]"; return 1; } - df_ensure_file "$PALETTE_BOOKMARKS_FILE" "# Bookmarks: name|path|description" - grep -q "^${name}|" "$PALETTE_BOOKMARKS_FILE" 2>/dev/null && { - df_confirm "Overwrite '$name'?" || return 1 - grep -v "^${name}|" "$PALETTE_BOOKMARKS_FILE" > "${PALETTE_BOOKMARKS_FILE}.tmp" - mv "${PALETTE_BOOKMARKS_FILE}.tmp" "$PALETTE_BOOKMARKS_FILE" - } - echo "${name}|${path}|${desc}" >> "$PALETTE_BOOKMARKS_FILE" - df_print_success "Bookmarked: $name → $path" - ;; - delete|rm) - [[ -z "$1" ]] && { echo "Usage: bookmark delete "; return 1; } - grep -q "^${1}|" "$PALETTE_BOOKMARKS_FILE" 2>/dev/null || { df_print_error "Not found: $1"; return 1; } - grep -v "^${1}|" "$PALETTE_BOOKMARKS_FILE" > "${PALETTE_BOOKMARKS_FILE}.tmp" - mv "${PALETTE_BOOKMARKS_FILE}.tmp" "$PALETTE_BOOKMARKS_FILE" - df_print_success "Deleted: $1" - ;; - list|ls) - df_print_func_name "Bookmarks" - [[ ! -f "$PALETTE_BOOKMARKS_FILE" ]] && { df_print_info "No bookmarks"; return; } - while IFS='|' read -r name path desc; do - [[ "$name" =~ ^# || -z "$name" ]] && continue - df_print_indent "● $name → $path" - done < "$PALETTE_BOOKMARKS_FILE" - ;; - go) - [[ -z "$1" ]] && { echo "Usage: bookmark go "; return 1; } - local path=$(grep "^${1}|" "$PALETTE_BOOKMARKS_FILE" 2>/dev/null | cut -d'|' -f2) - [[ -n "$path" ]] && cd "$path" || df_print_error "Not found: $1" - ;; - *) echo "Usage: bookmark " ;; - esac -} - -bm() { - df_require_cmd fzf || return 1 - [[ ! -f "$PALETTE_BOOKMARKS_FILE" ]] && { df_print_info "No bookmarks"; return 1; } - local sel=$(grep -v "^#" "$PALETTE_BOOKMARKS_FILE" | grep -v "^$" | \ - fzf $(df_fzf_opts) --delimiter='|' --with-nth=1,2 --prompt='Bookmark > ') - [[ -n "$sel" ]] && cd "$(echo "$sel" | cut -d'|' -f2)" -} - -_palette_widget() { BUFFER=""; zle redisplay; palette; zle reset-prompt; } -zle -N _palette_widget -bindkey "$PALETTE_HOTKEY" _palette_widget - -alias p='palette' bml='bookmark list' bma='bookmark add' bmg='bookmark go' diff --git a/refactor_backup/zsh/functions/command-palette.zsh.zwc b/refactor_backup/zsh/functions/command-palette.zsh.zwc deleted file mode 100644 index b872726d66a84dbfdb25e187bcafe3b33de8f493..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15024 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 BdH(/dev/null || \ -source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null || { - # Fallback if utils.zsh not available - typeset -g DF_RESET=$'\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' - typeset -g DF_WIDTH="${DF_WIDTH:-66}" - typeset -g MOTD_STYLE="${MOTD_STYLE:-compact}" -} - -# ============================================================================ -# Optimized Info Gathering (using /proc directly) -# ============================================================================ - -_motd_uptime() { - local uptime_seconds=$(cut -d. -f1 /proc/uptime 2>/dev/null) - [[ -z "$uptime_seconds" ]] && { echo "?"; return; } - - local days=$((uptime_seconds / 86400)) - local hours=$(((uptime_seconds % 86400) / 3600)) - local mins=$(((uptime_seconds % 3600) / 60)) - - if (( days > 0 )); then - echo "${days}d${hours}h" - elif (( hours > 0 )); then - echo "${hours}h${mins}m" - else - echo "${mins}m" - fi -} - -_motd_load() { cut -d' ' -f1 /proc/loadavg 2>/dev/null || echo "?"; } - -_motd_mem() { - awk '/MemTotal/ {total=$2} /MemAvailable/ {avail=$2} END { - if (total > 0) { - used=(total-avail)/1024/1024 - total_gb=total/1024/1024 - printf "%.1fG/%.0fG", used, total_gb - } else { print "N/A" } - }' /proc/meminfo 2>/dev/null || echo "N/A" -} - -_motd_disk() { df -h / 2>/dev/null | awk 'NR==2 {print $3 "/" $2}' || echo "N/A"; } - -_motd_failed_services() { - local cache_file="/tmp/.motd-failed-${UID}" - local cache_age=300 - if [[ -f "$cache_file" ]]; then - local file_age=$(($(date +%s) - $(stat -c %Y "$cache_file" 2>/dev/null || echo 0))) - (( file_age < cache_age )) && { cat "$cache_file"; return; } - fi - local count=$(systemctl --failed --no-pager --no-legend 2>/dev/null | wc -l) - echo "$count" > "$cache_file" 2>/dev/null - echo "$count" -} - -_motd_updates() { echo "${UPDATE_PKG_COUNT:-0}"; } - -# ============================================================================ -# Box Drawing - Uses DF_WIDTH from config -# ============================================================================ - -_motd_line() { - local char="$1" - local width="${DF_WIDTH:-66}" - local line="" - for ((i=0; i/dev/null | awk -F" " '{print $1}') - local h_right="${datetime}" - local h_pad=$(((inner - ${#h_left} - ${#h_center} - ${#h_right}) / 2)) - local h_spaces="" - for ((i=0; i 0 )) && echo " ${DF_RED}⚠${DF_NC} ${failed} failed service(s)" - fi - - echo "" -} - -# ============================================================================ -# Mini Format (Single Line) -# ============================================================================ - -show_motd_mini() { - local hostname="${HOST:-$(hostname -s 2>/dev/null)}" - local uptime=$(_motd_uptime) - local load=$(_motd_load) - echo "${DF_LIGHT_BLUE}${hostname}${DF_NC} │ up ${uptime} │ load ${load}" -} - -# ============================================================================ -# Full Format (Extended Info) -# ============================================================================ - -show_motd_full() { - show_motd --force - - local width="${DF_WIDTH:-66}" - - echo "${DF_CYAN}System Details${DF_NC}" - printf "${DF_GREY}─%.0s${DF_NC}" $(seq 1 $width); echo "" - - echo " ${DF_DIM}Kernel:${DF_NC} $(uname -r)" - echo " ${DF_DIM}Shell:${DF_NC} ${SHELL##*/} ${ZSH_VERSION:-}" - - if [[ -f /etc/os-release ]]; then - local distro=$(grep '^PRETTY_NAME=' /etc/os-release | cut -d'"' -f2) - echo " ${DF_DIM}OS:${DF_NC} ${distro}" - fi - - if command -v pacman &>/dev/null; then - local pkg_count=$(pacman -Q 2>/dev/null | wc -l) - echo " ${DF_DIM}Packages:${DF_NC} ${pkg_count}" - fi - - echo "" -} - -# ============================================================================ -# Auto-display based on MOTD_STYLE from config -# ============================================================================ - -_motd_auto() { - case "${MOTD_STYLE:-compact}" in - full) show_motd_full ;; - mini) show_motd_mini ;; - none|off|false) ;; - *) show_motd ;; - esac -} - -# Run on source if ENABLE_MOTD is true -[[ "${ENABLE_MOTD:-true}" == "true" ]] && _motd_auto diff --git a/refactor_backup/zsh/functions/motd.zsh.zwc b/refactor_backup/zsh/functions/motd.zsh.zwc deleted file mode 100644 index 235f0dc2fdde230cf73e85e66da3f6cda6bbd30a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15616 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/dev/null || \ -source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null - -typeset -g PW_CLIP_TIME="${PW_CLIP_TIME:-45}" - -_pw_check() { - df_require_cmd lpass lastpass-cli || return 1 - if ! lpass status -q 2>/dev/null; then - df_print_warning "Not logged in" - df_print_step "Logging in..." - lpass login --trust "${LPASS_USER:-}" || { df_print_error "Login failed"; return 1; } - fi -} - -_pw_copy() { - local text="$1" label="${2:-Password}" - if df_cmd_exists wl-copy; then - echo -n "$text" | wl-copy - elif df_cmd_exists xclip; then - echo -n "$text" | xclip -selection clipboard - else - df_print_error "No clipboard tool (install wl-clipboard or xclip)" - return 1 - fi - df_print_success "$label copied (clears in ${PW_CLIP_TIME}s)" - (sleep "$PW_CLIP_TIME" && { wl-copy "" 2>/dev/null || xclip -selection clipboard < /dev/null 2>/dev/null; }) & -} - -pw() { - local cmd="${1:-search}" - case "$cmd" in - login) lpass login --trust "${LPASS_USER:-}" ;; - logout) lpass logout -f; df_print_success "Logged out" ;; - sync) _pw_check || return 1; df_print_step "Syncing..."; lpass sync; df_print_success "Synced" ;; - show) _pw_check || return 1; [[ -z "$2" ]] && { echo "Usage: pw show "; return 1; }; lpass show "$2" ;; - gen|generate) - local len="${2:-20}" - local pass=$(tr -dc 'A-Za-z0-9!@#$%^&*' < /dev/urandom | head -c "$len") - _pw_copy "$pass" "Generated password" - ;; - list|ls) _pw_check || return 1; df_print_func_name "Password Entries"; lpass ls --long ;; - search|*) - _pw_check || return 1 - local query="$1"; [[ "$cmd" == "search" ]] && query="$2" - if df_cmd_exists fzf && [[ -z "$query" ]]; then - local entry=$(lpass ls --format "%an (%au) [%ai]" 2>/dev/null | fzf $(df_fzf_opts) --prompt='Password > ') - [[ -z "$entry" ]] && return - local id=$(echo "$entry" | grep -oP '\[\K[^\]]+(?=\]$)') - local pass=$(lpass show --password "$id" 2>/dev/null) - [[ -n "$pass" ]] && _pw_copy "$pass" || df_print_error "Could not retrieve" - else - [[ -z "$query" ]] && { echo "Usage: pw "; return 1; } - local results=$(lpass ls --format "%an [%ai]" 2>/dev/null | grep -i "$query") - local count=$(echo "$results" | grep -c . 2>/dev/null || echo 0) - if (( count == 0 )); then - df_print_warning "No entries for: $query" - elif (( count == 1 )); then - local id=$(echo "$results" | grep -oP '\[\K[^\]]+(?=\]$)') - _pw_copy "$(lpass show --password "$id" 2>/dev/null)" - else - df_print_warning "Multiple entries:" - echo "$results" | while read -r l; do df_print_indent "$l"; done - fi - fi - ;; - help|--help|-h) - df_print_func_name "Password Manager" - cat << 'EOF' - pw Search and copy password - pw show Show entry details - pw list List all entries - pw gen [len] Generate password (default: 20) - pw sync Sync vault - pw login/logout Auth commands -EOF - ;; - esac -} - -alias pwc='pw' pws='pw show' pwg='pw gen' pwl='pw list' diff --git a/refactor_backup/zsh/functions/password-manager.zsh.zwc b/refactor_backup/zsh/functions/password-manager.zsh.zwc deleted file mode 100644 index 38fca1d3958e21ee56ef8438b1369d9c985a95ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9648 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 b<5J|#z1HSC_gdkFXn3z=ude?;@3sC3j8MeF diff --git a/refactor_backup/zsh/functions/python-templates.zsh b/refactor_backup/zsh/functions/python-templates.zsh deleted file mode 100644 index 038ef12..0000000 --- a/refactor_backup/zsh/functions/python-templates.zsh +++ /dev/null @@ -1,173 +0,0 @@ -# ============================================================================ -# Python Project Template Functions -# ============================================================================ - -source "${0:A:h}/../lib/utils.zsh" 2>/dev/null || \ -source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null - -typeset -g PY_PYTHON="${PY_PYTHON:-python3}" -typeset -g PY_VENV="${PY_VENV:-venv}" -typeset -g PY_GIT_INIT="${PY_GIT_INIT:-true}" - -_py_check_name() { - [[ -z "$1" ]] && { df_print_warning "Project name required"; return 1; } - [[ -d "$1" ]] && { df_print_warning "Directory '$1' exists"; return 1; } - return 0 -} - -_py_venv() { - df_print_step "Creating virtual environment" - "$PY_PYTHON" -m venv "$1/$PY_VENV" - df_print_success "Created: $PY_VENV" -} - -_py_gitignore() { - cat > "$1/.gitignore" << 'EOF' -__pycache__/ -*.py[cod] -*.so -build/ -dist/ -*.egg-info/ -venv/ -.venv/ -.env -*.log -.pytest_cache/ -.mypy_cache/ -EOF - df_print_success "Created .gitignore" -} - -_py_git() { - [[ "$PY_GIT_INIT" == "true" ]] && { cd "$1"; git init; git add .; git commit -m "Initial commit"; df_print_success "Git initialized"; } -} - -_py_next() { - echo "" - df_print_section "Next steps" - df_print_indent "cd $1" - df_print_indent "source $PY_VENV/bin/activate" -} - -py-new() { - _py_check_name "$1" || return 1 - df_print_func_name "Python Project: $1" - mkdir -p "$1"/{src,tests} - touch "$1/src/__init__.py" "$1/tests/__init__.py" - cat > "$1/src/main.py" << 'EOF' -#!/usr/bin/env python3 -def main(): - print("Hello!") - -if __name__ == "__main__": - main() -EOF - echo "# Dependencies" > "$1/requirements.txt" - _py_venv "$1"; _py_gitignore "$1"; _py_git "$1" - df_print_success "Created: $1" - _py_next "$1" -} - -py-flask() { - _py_check_name "$1" || return 1 - df_print_func_name "Flask Project: $1" - mkdir -p "$1"/{app/{templates,static},tests} - _py_venv "$1" - df_print_step "Installing Flask" - "$1/$PY_VENV/bin/pip" install flask -q - cat > "$1/app/__init__.py" << 'EOF' -from flask import Flask -def create_app(): - app = Flask(__name__) - from app.routes import main - app.register_blueprint(main) - return app -EOF - cat > "$1/app/routes.py" << 'EOF' -from flask import Blueprint, render_template -main = Blueprint('main', __name__) -@main.route('/') -def index(): - return render_template('index.html') -EOF - echo '

Flask

' > "$1/app/templates/index.html" - cat > "$1/app.py" << 'EOF' -#!/usr/bin/env python3 -from app import create_app -app = create_app() -if __name__ == '__main__': - app.run(debug=True) -EOF - echo "Flask>=3.0.0" > "$1/requirements.txt" - _py_gitignore "$1"; _py_git "$1" - df_print_success "Created: $1" - _py_next "$1" -} - -py-fastapi() { - _py_check_name "$1" || return 1 - df_print_func_name "FastAPI Project: $1" - mkdir -p "$1"/{app,tests} - _py_venv "$1" - df_print_step "Installing FastAPI" - "$1/$PY_VENV/bin/pip" install fastapi uvicorn -q - cat > "$1/app/main.py" << 'EOF' -from fastapi import FastAPI -app = FastAPI() -@app.get("/") -def root(): - return {"message": "Hello"} -@app.get("/health") -def health(): - return {"status": "ok"} -EOF - cat > "$1/run.py" << 'EOF' -#!/usr/bin/env python3 -import uvicorn -if __name__ == "__main__": - uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True) -EOF - echo -e "fastapi>=0.104.0\nuvicorn>=0.24.0" > "$1/requirements.txt" - _py_gitignore "$1"; _py_git "$1" - df_print_success "Created: $1" - df_print_info "Docs: http://localhost:8000/docs" - _py_next "$1" -} - -py-cli() { - _py_check_name "$1" || return 1 - df_print_func_name "CLI Project: $1" - mkdir -p "$1"/{src/$1,tests} - _py_venv "$1" - df_print_step "Installing click" - "$1/$PY_VENV/bin/pip" install click -q - echo '__version__ = "0.1.0"' > "$1/src/$1/__init__.py" - cat > "$1/src/$1/cli.py" << 'EOF' -#!/usr/bin/env python3 -import click -@click.group() -@click.version_option() -def cli(): - pass -@cli.command() -@click.argument('name', default='World') -def greet(name): - click.echo(f"Hello, {name}!") -if __name__ == '__main__': - cli() -EOF - echo "click>=8.1.0" > "$1/requirements.txt" - _py_gitignore "$1"; _py_git "$1" - df_print_success "Created: $1" - df_print_info "Install: pip install -e $1" - _py_next "$1" -} - -venv() { - [[ -d "venv" ]] && source venv/bin/activate && return - [[ -d ".venv" ]] && source .venv/bin/activate && return - df_print_error "No venv found" -} - -alias pynew='py-new' pyflask='py-flask' pyfast='py-fastapi' pycli='py-cli' diff --git a/refactor_backup/zsh/functions/python-templates.zsh.zwc b/refactor_backup/zsh/functions/python-templates.zsh.zwc deleted file mode 100644 index 44ce6255058943ad97c095c9bc6217512c3cd821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13592 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 diff --git a/refactor_backup/zsh/functions/smart-suggest.zsh b/refactor_backup/zsh/functions/smart-suggest.zsh deleted file mode 100644 index f17685b..0000000 --- a/refactor_backup/zsh/functions/smart-suggest.zsh +++ /dev/null @@ -1,82 +0,0 @@ -# ============================================================================ -# Smart Command Suggestions for Zsh -# ============================================================================ - -source "${0:A:h}/../lib/utils.zsh" 2>/dev/null || \ -source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null - -typeset -g SMART_SUGGEST_ENABLED=true -typeset -g SMART_SUGGEST_TRACK_FILE="$HOME/.cache/smart-suggest-track" - -typeset -gA TYPO_CORRECTIONS=( - [gti]="git" [gitt]="git" [got]="git" [gi]="git" - [gitst]="git st" [gits]="git s" [gitp]="git p" - [psuh]="push" [psull]="pull" [pul]="pull" - [stauts]="status" [comit]="commit" [commti]="commit" - [chekcout]="checkout" [branhc]="branch" [marge]="merge" - [dokcer]="docker" [doker]="docker" [dcoker]="docker" - [sl]="ls" [sls]="ls" [cta]="cat" [grpe]="grep" [gerp]="grep" - [mkdri]="mkdir" [chmdo]="chmod" [suod]="sudo" [sduo]="sudo" - [pytohn]="python" [pyhton]="python" [ndoe]="node" - [vmi]="vim" [cde]="code" [clera]="clear" [exti]="exit" -) - -typeset -gA COMMAND_PACKAGES=( - [htop]="htop" [tree]="tree" [jq]="jq" [fd]="fd" [rg]="ripgrep" - [bat]="bat" [eza]="eza" [fzf]="fzf" [tldr]="tldr" [ncdu]="ncdu" - [lazygit]="lazygit" [neofetch]="neofetch" [delta]="git-delta" -) - -_ss_track() { - local cmd="$1" - [[ ${#cmd} -lt 8 ]] && return - df_ensure_dir "$(dirname "$SMART_SUGGEST_TRACK_FILE")" - echo "$cmd" >> "$SMART_SUGGEST_TRACK_FILE" - local count=$(grep -Fc "$cmd" "$SMART_SUGGEST_TRACK_FILE" 2>/dev/null || echo 0) - if (( count >= 10 && count % 10 == 0 )); then - local existing=$(alias | grep -F "='$cmd'" | head -1 | cut -d= -f1) - [[ -n "$existing" ]] && df_print_info "You have alias: $existing" || \ - df_print_info "Consider: alias xyz='$cmd'" - fi -} - -command_not_found_handler() { - local cmd="$1"; shift - [[ "$SMART_SUGGEST_ENABLED" != true ]] && { echo "zsh: command not found: $cmd"; return 127; } - - df_print_error "Command not found: $cmd" - - local correction="${TYPO_CORRECTIONS[$cmd]}" - [[ -n "$correction" ]] && { df_print_info "Did you mean: $correction?"; df_print_indent "Run: $correction $@"; } - - local pkg="${COMMAND_PACKAGES[$cmd]}" - [[ -n "$pkg" ]] && df_print_info "Install: sudo pacman -S $pkg" - - return 127 -} - -fuck() { - local last=$(fc -ln -1 2>/dev/null | sed 's/^[[:space:]]*//') - local first="${last%% *}" - local fix="${TYPO_CORRECTIONS[$first]}" - [[ -n "$fix" ]] && { df_print_step "Running: ${last/$first/$fix}"; eval "${last/$first/$fix}"; } || df_print_warning "No fix for: $last" -} - -_ss_preexec() { _ss_track "$1"; } -_ss_precmd() { - local exit=$?; (( exit == 0 )) && return - local last=$(fc -ln -1 2>/dev/null | sed 's/^[[:space:]]*//') - [[ "${last%% *}" == "git" ]] && { - local sub=$(echo "$last" | awk '{print $2}') - local fix="${TYPO_CORRECTIONS[$sub]}" - [[ -n "$fix" ]] && df_print_info "Did you mean: git $fix?" - } -} - -_ss_setup() { - autoload -Uz add-zsh-hook - add-zsh-hook preexec _ss_preexec - add-zsh-hook precmd _ss_precmd -} - -[[ "$SMART_SUGGEST_ENABLED" == true ]] && _ss_setup diff --git a/refactor_backup/zsh/functions/smart-suggest.zsh.zwc b/refactor_backup/zsh/functions/smart-suggest.zsh.zwc deleted file mode 100644 index d7c3a2f32b952c83adc0472ea8ad5b1a943d5f05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8880 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 diff --git a/refactor_backup/zsh/functions/snapper.zsh b/refactor_backup/zsh/functions/snapper.zsh deleted file mode 100644 index 65b464f..0000000 --- a/refactor_backup/zsh/functions/snapper.zsh +++ /dev/null @@ -1,98 +0,0 @@ -# ============================================================================ -# Snapper Snapshot Functions for CachyOS/Arch with limine-snapper-sync -# ============================================================================ - -source "${0:A:h}/../lib/utils.zsh" 2>/dev/null || \ -source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null - -snap-create() { - local desc="$*" - local limine="/boot/limine.conf" - - df_print_func_name "Snapper Snapshot Creation" - - if [[ -z "$desc" ]]; then - df_print_warning "No description" - echo -n "Description: "; read desc - [[ -z "$desc" ]] && { df_print_error "Required"; return 1; } - fi - - [[ ! -f "$limine" ]] && { df_print_error "Limine not found: $limine"; return 1; } - - df_print_step "Checking limine.conf before snapshot" - local before=$(sudo grep -cP "^\\s*///\\d+\\s*│" "$limine" || echo "0") - df_print_success "Before: $before entries" - - df_print_step "Creating snapshot: \"$desc\"" - local num=$(sudo snapper -c root create --description "$desc" --print-number) - [[ -z "$num" ]] && { df_print_error "Failed"; return 1; } - df_print_success "Created: #$num" - - df_print_step "Triggering limine-snapper-sync..." - sudo systemctl start limine-snapper-sync.service && df_print_success "Triggered" || df_print_warning "May run automatically" - sleep 2 - - df_print_step "Validating" - local after=$(sudo grep -cP "^\\s*///\\d+\\s*│" "$limine" || echo "0") - - if sudo grep -qP "^\\s*///$num\\s*│" "$limine"; then - df_print_success "Snapshot #$num in limine.conf" - (( after > before )) && df_print_success "Added $((after - before)) entry" - else - df_print_error "Snapshot #$num NOT in limine.conf" - return 1 - fi - - echo "" - df_print_section "Summary" - df_print_indent "Number: #$num" - df_print_indent "Description: $desc" -} - -snap-list() { - local count="${1:-10}" - df_print_func_name "Snapper Snapshots (last $count)" - sudo snapper -c root list | tail -n "$((count + 1))" -} - -snap-show() { - [[ -z "$1" ]] && { echo "Usage: snap-show "; return 1; } - df_print_func_name "Snapshot #$1" - sudo snapper -c root list | grep "^\s*$1\s" - echo "" - df_print_section "In limine.conf" - sudo grep -qP "^\\s*///$1\\s*│" /boot/limine.conf && \ - sudo grep -P "^\\s*///$1\\s*│" /boot/limine.conf || df_print_warning "Not found" -} - -snap-delete() { - [[ -z "$1" ]] && { echo "Usage: snap-delete "; return 1; } - df_print_func_name "Delete Snapshot #$1" - - local before=$(sudo grep -cP "^\\s*///\\d+\\s*│" /boot/limine.conf || echo "0") - sudo snapper -c root delete "$1" && df_print_success "Deleted #$1" || { df_print_error "Failed"; return 1; } - - df_print_step "Syncing limine..." - sudo systemctl start limine-snapper-sync.service; sleep 2 - - sudo grep -qP "^\\s*///$1\\s*│" /boot/limine.conf && df_print_error "Still in limine!" || df_print_success "Removed from limine" -} - -snap-sync() { - df_print_func_name "Limine-Snapper-Sync" - df_print_step "Triggering sync..." - sudo systemctl start limine-snapper-sync.service && { sleep 2; df_print_success "Done"; } || df_print_error "Failed" -} - -snap-check() { - df_print_func_name "Limine Snapshot Entries" - local latest=$(sudo snapper -c root list | tail -n +3 | grep -v "^\s*0\s" | tail -1 | awk '{print $1}') - [[ -z "$latest" ]] && { df_print_warning "No snapshots"; return 1; } - df_print_info "Latest: #$latest" - sudo grep -qP "^\\s*///$latest\\s*│" /boot/limine.conf && \ - df_print_success "Latest in limine.conf" || df_print_error "Latest NOT in limine.conf" - local count=$(sudo grep -cP "^\\s*///\\d+\\s*│" /boot/limine.conf || echo "0") - df_print_info "Total entries: $count" -} - -alias snap='snap-create' snapls='snap-list' snaprm='snap-delete' snapcheck='snap-check' diff --git a/refactor_backup/zsh/functions/snapper.zsh.zwc b/refactor_backup/zsh/functions/snapper.zsh.zwc deleted file mode 100644 index 8e845a99203b429ca555b0c86d2fe7eb96c81629..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11400 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 diff --git a/refactor_backup/zsh/functions/ssh-manager.zsh b/refactor_backup/zsh/functions/ssh-manager.zsh deleted file mode 100644 index 7b0cb5c..0000000 --- a/refactor_backup/zsh/functions/ssh-manager.zsh +++ /dev/null @@ -1,96 +0,0 @@ -# ============================================================================ -# SSH Session Manager with Tmux Integration -# ============================================================================ - -source "${0:A:h}/../lib/utils.zsh" 2>/dev/null || \ -source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null - -typeset -g SSH_PROFILES_FILE="${SSH_PROFILES_FILE:-$HOME/.dotfiles/.ssh-profiles}" -typeset -g SSH_AUTO_TMUX="${SSH_AUTO_TMUX:-true}" -typeset -g SSH_TMUX_PREFIX="${SSH_TMUX_PREFIX:-ssh}" - -_ssh_init() { - df_ensure_file "$SSH_PROFILES_FILE" "# SSH Profiles: name|user@host|port|key|options|description" -} - -_ssh_parse() { - local line=$(grep "^${1}|" "$SSH_PROFILES_FILE" 2>/dev/null | head -1) - [[ -z "$line" ]] && return 1 - echo "$line" | cut -d'|' -f2- -} - -ssh-save() { - local name="$1" conn="$2" port="${3:-22}" key="${4:-}" opts="${5:-}" desc="${6:-}" - [[ -z "$name" || -z "$conn" ]] && { echo "Usage: ssh-save [port] [key] [opts] [desc]"; return 1; } - _ssh_init - grep -q "^${name}|" "$SSH_PROFILES_FILE" 2>/dev/null && { - df_confirm "Overwrite '$name'?" || return 1 - grep -v "^${name}|" "$SSH_PROFILES_FILE" > "${SSH_PROFILES_FILE}.tmp" - mv "${SSH_PROFILES_FILE}.tmp" "$SSH_PROFILES_FILE" - } - echo "${name}|${conn}|${port}|${key}|${opts}|${desc}" >> "$SSH_PROFILES_FILE" - df_print_success "Saved: $name → $conn" -} - -ssh-list() { - _ssh_init - df_print_func_name "SSH Profiles" - local found=false - while IFS='|' read -r name conn port key opts desc; do - [[ "$name" =~ ^# || -z "$name" ]] && continue - found=true - df_print_indent "● $name → $conn" - [[ "$port" != "22" && -n "$port" ]] && df_print_indent " Port: $port" - [[ -n "$desc" ]] && df_print_indent " $desc" - done < "$SSH_PROFILES_FILE" - [[ "$found" != true ]] && df_print_info "No profiles. Use: ssh-save name user@host" -} - -ssh-delete() { - [[ -z "$1" ]] && { echo "Usage: ssh-delete "; return 1; } - grep -q "^${1}|" "$SSH_PROFILES_FILE" 2>/dev/null || { df_print_error "Not found: $1"; return 1; } - grep -v "^${1}|" "$SSH_PROFILES_FILE" > "${SSH_PROFILES_FILE}.tmp" - mv "${SSH_PROFILES_FILE}.tmp" "$SSH_PROFILES_FILE" - df_print_success "Deleted: $1" -} - -ssh-connect() { - local name="$1" session="${2:-${SSH_TMUX_PREFIX}-${1}}" - [[ -z "$name" ]] && { ssh-list; return 1; } - _ssh_init - local data=$(_ssh_parse "$name") - [[ -z "$data" ]] && { df_print_error "Not found: $name"; return 1; } - - IFS='|' read -r conn port key opts desc <<< "$data" - df_print_step "Connecting: $name" - [[ -n "$desc" ]] && df_print_indent "$desc" - - local cmd="ssh" - [[ -n "$port" && "$port" != "22" ]] && cmd="$cmd -p $port" - [[ -n "$key" ]] && cmd="$cmd -i $key" - [[ -n "$opts" ]] && cmd="$cmd $opts" - cmd="$cmd $conn" - - if [[ "$SSH_AUTO_TMUX" == "true" ]]; then - df_print_info "Tmux session: $session" - eval "$cmd -t 'tmux attach -t $session 2>/dev/null || tmux new -s $session'" - else - eval "$cmd" - fi -} - -sshf() { - df_require_cmd fzf || return 1 - _ssh_init - local profiles=() - while IFS='|' read -r name conn port key opts desc; do - [[ "$name" =~ ^# || -z "$name" ]] && continue - profiles+=("$name|$name → $conn") - done < "$SSH_PROFILES_FILE" - [[ ${#profiles[@]} -eq 0 ]] && { df_print_info "No profiles"; return 1; } - local sel=$(printf '%s\n' "${profiles[@]}" | fzf $(df_fzf_opts) --delimiter='|' --with-nth=2 --prompt='SSH > ') - [[ -n "$sel" ]] && ssh-connect "${sel%%|*}" -} - -alias sshl='ssh-list' sshs='ssh-save' sshc='ssh-connect' sshd='ssh-delete' -_ssh_init diff --git a/refactor_backup/zsh/functions/ssh-manager.zsh.zwc b/refactor_backup/zsh/functions/ssh-manager.zsh.zwc deleted file mode 100644 index cf82341347df50d612964dd0c70779eedfaee402..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/refactor_backup/zsh/functions/systemd-helpers.zsh b/refactor_backup/zsh/functions/systemd-helpers.zsh deleted file mode 100644 index 2b7eba2..0000000 --- a/refactor_backup/zsh/functions/systemd-helpers.zsh +++ /dev/null @@ -1,124 +0,0 @@ -# ============================================================================ -# Systemd Integration for Arch/CachyOS -# ============================================================================ - -source "${0:A:h}/../lib/utils.zsh" 2>/dev/null || \ -source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null - -# Core shortcuts -sc() { sudo systemctl "$@"; } -scu() { systemctl --user "$@"; } - -scr() { - [[ -z "$1" ]] && { echo "Usage: scr "; return 1; } - df_print_step "Restarting $1..." - sudo systemctl restart "$1" && { df_print_success "Restarted"; sudo systemctl status "$1" --no-pager -l; } || df_print_error "Failed" -} - -sce() { - [[ -z "$1" ]] && { echo "Usage: sce "; return 1; } - df_print_step "Enabling $1..." - sudo systemctl enable --now "$1" && { df_print_success "Enabled"; sudo systemctl status "$1" --no-pager -l | head -15; } || df_print_error "Failed" -} - -scd() { - [[ -z "$1" ]] && { echo "Usage: scd "; return 1; } - df_print_step "Disabling $1..." - sudo systemctl disable --now "$1" && df_print_success "Disabled" || df_print_error "Failed" -} - -sclog() { - [[ -z "$1" ]] && { echo "Usage: sclog "; return 1; } - df_print_step "Following logs for $1 (Ctrl+C to exit)..." - sudo journalctl -xeu "$1" -f -n "${2:-50}" -} - -sclogs() { - [[ -z "$1" ]] && { echo "Usage: sclogs "; return 1; } - sudo journalctl -xeu "$1" -n "${2:-50}" --no-pager -} - -sc-failed() { - df_print_func_name "Failed Services" - df_print_section "System" - local sys=$(systemctl --failed --no-pager --no-legend 2>/dev/null) - [[ -z "$sys" ]] && df_print_indent "✓ None" || echo "$sys" | sed 's/^/ /' - echo "" - df_print_section "User" - local usr=$(systemctl --user --failed --no-pager --no-legend 2>/dev/null) - [[ -z "$usr" ]] && df_print_indent "✓ None" || echo "$usr" | sed 's/^/ /' -} - -sc-timers() { - df_print_func_name "Active Timers" - df_print_section "System" - systemctl list-timers --no-pager | head -15 - echo "" - df_print_section "User" - systemctl --user list-timers --no-pager 2>/dev/null | head -10 -} - -sc-boot() { - df_print_func_name "Boot Analysis" - df_print_section "Summary" - systemd-analyze - echo "" - df_print_section "Slowest (top 10)" - systemd-analyze blame --no-pager | head -10 | sed 's/^/ /' -} - -sc-search() { - [[ -z "$1" ]] && { echo "Usage: sc-search "; return 1; } - df_print_func_name "Service Search: $1" - systemctl list-unit-files --type=service --no-pager | grep -i "$1" -} - -sc-info() { - [[ -z "$1" ]] && { echo "Usage: sc-info "; return 1; } - df_print_func_name "Service: $1" - systemctl status "$1" --no-pager -l 2>/dev/null || sudo systemctl status "$1" --no-pager -l - echo "" - df_print_section "Unit File" - systemctl cat "$1" 2>/dev/null | head -30 -} - -# fzf interactive -if df_cmd_exists fzf; then - scf() { - local svc=$(systemctl list-units --type=service --no-pager --no-legend | \ - fzf $(df_fzf_opts) --prompt='Service > ' --preview='systemctl status {1} --no-pager' | awk '{print $1}') - [[ -z "$svc" ]] && return - df_print_info "Selected: $svc" - echo "[s]tatus [r]estart [l]ogs [e]nable [d]isable" - read -k 1 "act?Action: "; echo - case "$act" in - s) sudo systemctl status "$svc" --no-pager -l ;; - r) scr "$svc" ;; - l) sclog "$svc" ;; - e) sce "$svc" ;; - d) scd "$svc" ;; - esac - } -fi - -sc-help() { - df_print_func_name "Systemd Commands" - cat << 'EOF' - sc sudo systemctl - scu systemctl --user - scr Restart + status - sce Enable + start - scd Disable + stop - sclog Follow logs - sclogs Recent logs - sc-failed Failed services - sc-timers Active timers - sc-boot Boot analysis - sc-search Search services - sc-info Service details - scf Interactive (fzf) -EOF -} - -alias scs='sc status' scstart='sc start' scstop='sc stop' screload='sc daemon-reload' -alias jctl='journalctl' jctlf='journalctl -f' jctlb='journalctl -b' diff --git a/refactor_backup/zsh/functions/systemd-helpers.zsh.zwc b/refactor_backup/zsh/functions/systemd-helpers.zsh.zwc deleted file mode 100644 index c91258cf4ded1cac65061a8e04c4d98ddd6fb4e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12936 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/dev/null || \ -source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null - -typeset -g TW_TEMPLATES="${TW_TEMPLATES:-$HOME/.dotfiles/.tmux-templates}" -typeset -g TW_PREFIX="${TW_PREFIX:-work}" -typeset -g TW_DEFAULT="${TW_DEFAULT:-dev}" - -_tw_check() { df_require_cmd tmux || return 1; } - -_tw_init() { - df_ensure_dir "$TW_TEMPLATES" - [[ ! -f "$TW_TEMPLATES/dev.tmux" ]] && { - echo -e "# Dev layout\nsplit-window -h -p 50\nsplit-window -v -p 50\nselect-pane -t 0" > "$TW_TEMPLATES/dev.tmux" - echo -e "# Ops layout\nsplit-window -h\nsplit-window -v\nselect-pane -t 0\nsplit-window -v\nselect-pane -t 0" > "$TW_TEMPLATES/ops.tmux" - echo "# Full\n" > "$TW_TEMPLATES/full.tmux" - df_print_success "Created default templates" - } -} - -tw-templates() { - _tw_init - df_print_func_name "Tmux Templates" - for t in "$TW_TEMPLATES"/*.tmux; do - [[ -f "$t" ]] && df_print_indent "● $(basename "$t" .tmux)" - done - echo "" - df_print_info "Create: tw-create