"Restructuring, deprecating, blah blah."

This commit is contained in:
Aaron D. Lee
2025-12-15 21:31:14 -05:00
parent 9d632c16ed
commit 9673a1cb94
13 changed files with 467 additions and 390 deletions

View File

@@ -58,19 +58,26 @@ dotfiles/
├── dotfiles.conf # Central configuration ├── dotfiles.conf # Central configuration
├── zsh/ ├── zsh/
│ ├── .zshrc # Shell config │ ├── .zshrc # Shell config
│ ├── aliases.zsh # Dotfiles command aliases
│ ├── themes/adlee.zsh-theme │ ├── themes/adlee.zsh-theme
│ └── functions/ │ └── functions/
│ ├── snapper.zsh # Btrfs snapshots │ ├── snapper.zsh # Btrfs snapshots
│ ├── smart-suggest.zsh # Typo correction │ ├── smart-suggest.zsh # Typo correction
── command-palette.zsh ── command-palette.zsh
│ ├── motd.zsh # Dynamic MOTD
│ └── password-manager.zsh
├── espanso/ # Text expansion ├── espanso/ # Text expansion
│ └── match/base.yml # 100+ snippets │ └── match/base.yml # 100+ snippets
├── bin/ # Utility scripts ├── bin/ # Core scripts (linked to ~/.local/bin)
│ ├── setup-wizard.sh # TUI installer
│ ├── dotfiles-doctor.sh # Health checker │ ├── dotfiles-doctor.sh # Health checker
│ ├── dotfiles-sync.sh # Multi-machine sync │ ├── dotfiles-sync.sh # Multi-machine sync
│ ├── shell-stats.sh # Analytics │ ├── dotfiles-stats.sh # Shell analytics
── vault.sh # Secrets manager ── dotfiles-update.sh # Update dotfiles
│ ├── dotfiles-vault.sh # Secrets manager
│ └── dotfiles-version.sh # Version info
├── setup/ # Setup scripts (not linked)
│ ├── setup-wizard.sh # TUI installer
│ └── setup-espanso.sh # Espanso personalization
├── git/.gitconfig.template ├── git/.gitconfig.template
├── vim/.vimrc ├── vim/.vimrc
├── tmux/.tmux.conf ├── tmux/.tmux.conf
@@ -142,7 +149,10 @@ Running: git status
## 📊 Shell Analytics ## 📊 Shell Analytics
```bash ```bash
shell-stats.sh dotfiles-stats.sh
# or use aliases:
dfstats
stats
``` ```
``` ```
@@ -160,10 +170,10 @@ shell-stats.sh
``` ```
```bash ```bash
shell-stats.sh --suggest # Alias suggestions dotfiles-stats.sh --suggest # Alias suggestions
shell-stats.sh --heatmap # Activity by hour dotfiles-stats.sh --heatmap # Activity by hour
shell-stats.sh --git # Git breakdown dotfiles-stats.sh --git # Git breakdown
shell-stats.sh --dirs # Most visited directories dotfiles-stats.sh --dirs # Most visited directories
``` ```
## 🔐 Secrets Vault ## 🔐 Secrets Vault
@@ -176,6 +186,7 @@ vault set AWS_SECRET_KEY # Prompts (hidden input)
vault get GITHUB_TOKEN vault get GITHUB_TOKEN
vault list # Shows keys only vault list # Shows keys only
vault delete OLD_KEY vault delete OLD_KEY
# Full command: dotfiles-vault.sh
``` ```
Export to environment: Export to environment:
@@ -275,6 +286,7 @@ Full list: [docs/ESPANSO.md](docs/ESPANSO.md)
```bash ```bash
dotfiles-doctor.sh # Run diagnostics dotfiles-doctor.sh # Run diagnostics
dotfiles-doctor.sh --fix # Auto-fix issues dotfiles-doctor.sh --fix # Auto-fix issues
# Aliases: dfd, doctor, dffix
``` ```
``` ```
@@ -318,17 +330,37 @@ DOTFILES_AUTO_SYNC_CHECK="true"
## 🔄 Updating ## 🔄 Updating
```bash ```bash
cd ~/.dotfiles && git pull && ./install.sh dotfiles-update.sh
# or # or aliases:
update-dotfiles.sh dfu
dfupdate
``` ```
Check version: Check version:
```bash ```bash
dotfiles-version.sh dotfiles-version.sh
# or: dfv
``` ```
## 🎯 Command Aliases
All dotfiles commands have convenient aliases:
| Alias | Command | Description |
|-------|---------|-------------|
| `dfd` | `dotfiles-doctor.sh` | Health check |
| `dffix` | `dotfiles-doctor.sh --fix` | Auto-fix issues |
| `dfs` | `dotfiles-sync.sh` | Sync dotfiles |
| `dfpush` | `dotfiles-sync.sh --push` | Push changes |
| `dfpull` | `dotfiles-sync.sh --pull` | Pull changes |
| `dfu` | `dotfiles-update.sh` | Update dotfiles |
| `dfv` | `dotfiles-version.sh` | Version info |
| `dfstats` | `dotfiles-stats.sh` | Shell analytics |
| `vault` | `dotfiles-vault.sh` | Secrets manager |
| `reload` | `source ~/.zshrc` | Reload shell |
| `dfc` | `dotfiles-cli` | CLI with subcommands |
## 🗑️ Uninstalling ## 🗑️ Uninstalling
```bash ```bash

91
aliases.zsh Normal file
View File

@@ -0,0 +1,91 @@
# ============================================================================
# Dotfiles Command Aliases
# ============================================================================
# Convenient shortcuts for dotfiles management scripts
#
# Source this file in .zshrc (already included by default)
# ============================================================================
# --- Core Dotfiles Commands ---
alias dotfiles='cd ~/.dotfiles'
alias df='cd ~/.dotfiles'
# Doctor - health check
alias dfd='dotfiles-doctor.sh'
alias doctor='dotfiles-doctor.sh'
alias dffix='dotfiles-doctor.sh --fix'
# Sync - multi-machine synchronization
alias dfs='dotfiles-sync.sh'
alias dfsync='dotfiles-sync.sh'
alias dfpush='dotfiles-sync.sh --push'
alias dfpull='dotfiles-sync.sh --pull'
alias dfstatus='dotfiles-sync.sh --status'
# Update - pull latest and reinstall
alias dfu='dotfiles-update.sh'
alias dfupdate='dotfiles-update.sh'
# Version - check version info
alias dfv='dotfiles-version.sh'
alias dfversion='dotfiles-version.sh'
# Stats - shell analytics
alias dfstats='dotfiles-stats.sh'
alias stats='dotfiles-stats.sh'
alias tophist='dotfiles-stats.sh --top'
alias suggest='dotfiles-stats.sh --suggest'
# Vault - secrets management
alias vault='dotfiles-vault.sh'
alias vls='dotfiles-vault.sh list'
alias vget='dotfiles-vault.sh get'
alias vset='dotfiles-vault.sh set'
# --- Quick Edit Aliases ---
alias zshrc='${EDITOR:-vim} ~/.zshrc'
alias dfconf='${EDITOR:-vim} ~/.dotfiles/dotfiles.conf'
alias dfedit='cd ~/.dotfiles && ${EDITOR:-vim} .'
# --- 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; dotfiles-doctor.sh "$@" ;;
sync|s) shift; dotfiles-sync.sh "$@" ;;
update|up|u) shift; dotfiles-update.sh "$@" ;;
version|ver|v) shift; dotfiles-version.sh "$@" ;;
stats|st) shift; dotfiles-stats.sh "$@" ;;
vault|vlt) shift; dotfiles-vault.sh "$@" ;;
edit|e) cd ~/.dotfiles && ${EDITOR:-vim} . ;;
cd) cd ~/.dotfiles ;;
help|--help|-h|*)
echo "Dotfiles CLI"
echo
echo "Usage: dotfiles-cli <command> [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 " 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"
;;
esac
}
# Short alias for the CLI
alias dfc='dotfiles-cli'

View File

@@ -1,347 +0,0 @@
#!/usr/bin/env bash
# ============================================================================
# ADLee Theme System-wide Deployment Script
# ============================================================================
# Deploys the zsh theme system-wide via symlinks
#
# Usage:
# sudo ./deploy-zshtheme-systemwide.sh # Interactive mode
# sudo ./deploy-zshtheme-systemwide.sh --all # All users with oh-my-zsh
# sudo ./deploy-zshtheme-systemwide.sh --current # Current user + root only
# sudo ./deploy-zshtheme-systemwide.sh --status # Show deployment status
# sudo ./deploy-zshtheme-systemwide.sh --force # Force replace existing links
set -euo pipefail
# ============================================================================
# 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"
ZSH_THEME_NAME="adlee"
fi
# ============================================================================
# Configuration
# ============================================================================
MASTER_THEME_DIR="/usr/local/share/zsh/themes"
THEME_FILE="${ZSH_THEME_NAME}.zsh-theme"
MASTER_THEME_PATH="${MASTER_THEME_DIR}/${THEME_FILE}"
SOURCE_THEME="${DOTFILES_DIR}/zsh/themes/${THEME_FILE}"
FORCE_REPLACE=false
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# ============================================================================
# Helper Functions
# ============================================================================
print_success() { echo -e "${GREEN}${NC} $1"; }
print_warning() { echo -e "${YELLOW}${NC} $1"; }
print_error() { echo -e "${RED}${NC} $1"; }
print_info() { echo -e "${CYAN}${NC} $1"; }
print_step() { echo -e "\n${GREEN}==>${NC} $1"; }
print_header() {
echo -e "\n${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}${NC} ${ZSH_THEME_NAME} Theme System-wide Deployment ${BLUE}${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}\n"
}
check_root() {
if [[ $EUID -ne 0 ]]; then
print_error "This script must be run as root (use sudo)"
echo "Usage: sudo $0 [--all|--current|--status]"
exit 1
fi
}
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]$ ]]
}
is_system_symlink() {
local path="$1"
[[ -L "$path" ]] && [[ "$(readlink -f "$path")" == "$MASTER_THEME_PATH" ]]
}
is_local_symlink() {
local path="$1"
if [[ -L "$path" ]]; then
local target=$(readlink -f "$path")
[[ "$target" == *"/.dotfiles/"* ]]
else
return 1
fi
}
get_link_status() {
local path="$1"
if [[ ! -e "$path" ]] && [[ ! -L "$path" ]]; then
echo "not_present"
elif is_system_symlink "$path"; then
echo "system_link"
elif is_local_symlink "$path"; then
echo "local_link"
elif [[ -f "$path" ]] && [[ ! -L "$path" ]]; then
echo "regular_file"
elif [[ -L "$path" ]]; then
echo "other_link"
else
echo "unknown"
fi
}
# ============================================================================
# Setup Functions
# ============================================================================
setup_master_location() {
print_step "Setting up master theme location"
[[ ! -d "$MASTER_THEME_DIR" ]] && mkdir -p "$MASTER_THEME_DIR" && print_success "Created: $MASTER_THEME_DIR"
local source_file=""
[[ -f "$SOURCE_THEME" ]] && source_file="$SOURCE_THEME"
[[ -z "$source_file" && -f "$THEME_FILE" ]] && source_file="$THEME_FILE"
[[ -z "$source_file" && -f "$HOME/.oh-my-zsh/themes/$THEME_FILE" ]] && source_file="$HOME/.oh-my-zsh/themes/$THEME_FILE"
if [[ -f "$MASTER_THEME_PATH" ]]; then
print_info "Master theme exists: $MASTER_THEME_PATH"
if [[ -n "$source_file" ]] && ! diff -q "$source_file" "$MASTER_THEME_PATH" &>/dev/null; then
print_warning "Source differs from master"
if ask_yes_no "Update master theme?"; then
cp "$source_file" "$MASTER_THEME_PATH"
chmod 644 "$MASTER_THEME_PATH"
print_success "Master theme updated"
fi
fi
else
if [[ -z "$source_file" ]]; then
print_error "Theme file not found. Check these locations:"
echo " - $SOURCE_THEME"
echo " - ./$THEME_FILE"
exit 1
fi
cp "$source_file" "$MASTER_THEME_PATH"
chmod 644 "$MASTER_THEME_PATH"
print_success "Copied theme to master location"
fi
}
get_users_with_tty() {
local users=()
[[ -d "/root/.oh-my-zsh" ]] && users+=("root")
while IFS=: read -r username _ uid _ _ home_dir _; do
[[ $uid -lt 1000 ]] && continue
[[ -d "$home_dir/.oh-my-zsh" ]] && users+=("$username")
done < /etc/passwd
echo "${users[@]}"
}
get_current_user() {
if [[ -n "${SUDO_USER:-}" ]]; then
echo "$SUDO_USER"
else
while IFS=: read -r username _ uid _ _ home_dir _; do
if [[ $uid -ge 1000 ]] && [[ -d "$home_dir/.oh-my-zsh" ]]; then
echo "$username"
return
fi
done < /etc/passwd
fi
}
select_users() {
local mode="$1"
local users=()
case "$mode" in
all)
users=($(get_users_with_tty))
;;
current)
local current_user=$(get_current_user)
[[ -n "$current_user" ]] && users=("$current_user")
[[ -d "/root/.oh-my-zsh" ]] && users+=("root")
;;
interactive)
local all_users=($(get_users_with_tty))
[[ ${#all_users[@]} -eq 0 ]] && { print_error "No users with oh-my-zsh found"; exit 1; }
echo "Users with oh-my-zsh:"
for i in "${!all_users[@]}"; do
echo " $((i+1)). ${all_users[$i]}"
done
echo
if ask_yes_no "Deploy to all users?"; then
users=("${all_users[@]}")
else
local current_user=$(get_current_user)
[[ -n "$current_user" ]] && users=("$current_user") && print_info "Selected: $current_user"
[[ -d "/root/.oh-my-zsh" ]] && ask_yes_no "Include root?" && users+=("root")
fi
;;
esac
echo "${users[@]}"
}
deploy_for_user() {
local username="$1"
local home_dir=$([[ "$username" == "root" ]] && echo "/root" || eval echo "~$username")
[[ ! -d "$home_dir" ]] && { print_warning "Home not found: $username"; return 1; }
[[ ! -d "$home_dir/.oh-my-zsh" ]] && { print_warning "oh-my-zsh not installed: $username"; return 1; }
local theme_link="$home_dir/.oh-my-zsh/themes/$THEME_FILE"
local status=$(get_link_status "$theme_link")
case "$status" in
system_link)
[[ "$FORCE_REPLACE" != true ]] && { print_success "Already system-wide: $username"; return 0; }
print_info "Recreating link: $username"
;;
local_link) print_info "Converting local → system: $username" ;;
regular_file) print_warning "Replacing file → system: $username" ;;
*) print_info "Creating link: $username" ;;
esac
mkdir -p "$home_dir/.oh-my-zsh/themes"
rm -f "$theme_link"
ln -sf "$MASTER_THEME_PATH" "$theme_link"
[[ "$username" != "root" ]] && chown -h "$username:$(id -gn "$username" 2>/dev/null || echo "$username")" "$theme_link" 2>/dev/null || true
is_system_symlink "$theme_link" && print_success "Deployed: $username" || { print_error "Failed: $username"; return 1; }
}
show_deployment_status() {
print_step "Deployment status"
local users=($(get_users_with_tty))
[[ ${#users[@]} -eq 0 ]] && { print_warning "No users with oh-my-zsh"; return; }
echo
printf "%-20s %-20s %s\n" "User" "Status" "Details"
printf "%-20s %-20s %s\n" "----" "------" "-------"
for user in "${users[@]}"; do
local home_dir=$([[ "$user" == "root" ]] && echo "/root" || eval echo "~$user")
local theme_path="$home_dir/.oh-my-zsh/themes/$THEME_FILE"
local status=$(get_link_status "$theme_path")
case "$status" in
system_link) printf "%-20s ${GREEN}%-20s${NC} %s\n" "$user" "System-wide ✓" "$MASTER_THEME_PATH" ;;
local_link) printf "%-20s ${YELLOW}%-20s${NC} %s\n" "$user" "Local symlink" "$(readlink "$theme_path")" ;;
regular_file) printf "%-20s ${CYAN}%-20s${NC} %s\n" "$user" "Regular file" "(standalone)" ;;
not_present) printf "%-20s ${RED}%-20s${NC}\n" "$user" "Not installed" ;;
*) printf "%-20s ${RED}%-20s${NC}\n" "$user" "Unknown" ;;
esac
done
echo
}
show_summary() {
echo
echo "============================================================================"
echo "Master theme: $MASTER_THEME_PATH"
echo
echo "To update theme globally:"
echo " sudo cp $SOURCE_THEME $MASTER_THEME_PATH"
echo
echo "Check status: sudo $0 --status"
echo "============================================================================"
}
# ============================================================================
# Main
# ============================================================================
main() {
local mode="interactive"
local status_only=false
for arg in "$@"; do
case "$arg" in
--all) mode="all" ;;
--current) mode="current" ;;
--force) FORCE_REPLACE=true ;;
--status|-s) status_only=true ;;
--help|-h)
echo "Usage: sudo $0 [OPTIONS]"
echo
echo "Options:"
echo " --all Deploy to all users with oh-my-zsh"
echo " --current Deploy to current user and root"
echo " --force Force replacement of existing links"
echo " --status Show current deployment status"
echo " --help Show this help"
exit 0
;;
*) print_error "Unknown option: $arg"; exit 1 ;;
esac
done
print_header
check_root
if [[ "$status_only" == true ]]; then
show_deployment_status
exit 0
fi
show_deployment_status
setup_master_location
local users=($(select_users "$mode"))
[[ ${#users[@]} -eq 0 ]] && { print_error "No users selected"; exit 1; }
print_step "Deploying to ${#users[@]} user(s): ${users[*]}"
[[ "$FORCE_REPLACE" == true ]] && print_warning "Force mode enabled"
ask_yes_no "Proceed?" || { print_warning "Cancelled"; exit 0; }
echo
local ok=0 fail=0
for user in "${users[@]}"; do
deploy_for_user "$user" && ((ok++)) || ((fail++))
done
echo
[[ $fail -eq 0 ]] && print_success "Complete! ($ok/${#users[@]})" || print_warning "Done with errors ($ok ok, $fail failed)"
show_deployment_status
show_summary
}
main "$@"

View File

@@ -254,14 +254,20 @@ fuck # Re-run last command with typo fixed
### Shell Analytics ### Shell Analytics
```bash ```bash
shell-stats.sh # Full dashboard dotfiles-stats.sh # Full dashboard
shell-stats.sh --top 20 # Top 20 commands dotfiles-stats.sh --top 20 # Top 20 commands
shell-stats.sh --suggest # Alias recommendations dotfiles-stats.sh --suggest # Alias recommendations
shell-stats.sh --heatmap # Activity by hour dotfiles-stats.sh --heatmap # Activity by hour
shell-stats.sh --dirs # Most visited directories dotfiles-stats.sh --dirs # Most visited directories
shell-stats.sh --git # Git command breakdown dotfiles-stats.sh --git # Git command breakdown
shell-stats.sh --docker # Docker command breakdown dotfiles-stats.sh --docker # Docker command breakdown
shell-stats.sh --export # Export as JSON dotfiles-stats.sh --export # Export as JSON
# Aliases
dfstats # Full dashboard
stats # Full dashboard
tophist # Top commands
suggest # Alias suggestions
``` ```
### Secrets Vault ### Secrets Vault
@@ -269,14 +275,22 @@ shell-stats.sh --export # Export as JSON
Encrypted storage using `age` or `gpg`: Encrypted storage using `age` or `gpg`:
```bash ```bash
vault set KEY "value" # Store (or prompt for value) dotfiles-vault.sh set KEY "value" # Store (or prompt for value)
vault get KEY # Retrieve dotfiles-vault.sh get KEY # Retrieve
vault list # Show all keys dotfiles-vault.sh list # Show all keys
vault delete KEY # Remove dotfiles-vault.sh delete KEY # Remove
vault shell # Print as export statements dotfiles-vault.sh shell # Print as export statements
vault export backup.enc # Backup encrypted vault dotfiles-vault.sh export backup.enc # Backup encrypted vault
vault import backup.enc # Restore vault dotfiles-vault.sh import backup.enc # Restore vault
vault status # Show vault info dotfiles-vault.sh status # Show vault info
# Aliases (defined in aliases.zsh)
vault set KEY "value"
vault get KEY
vault list
vls # vault list
vget KEY # vault get
vset KEY # vault set
``` ```
**Auto-loading:** Secrets are automatically loaded into your environment on shell start. **Auto-loading:** Secrets are automatically loaded into your environment on shell start.
@@ -291,6 +305,13 @@ dotfiles-sync.sh --pull # Pull remote changes
dotfiles-sync.sh --diff # Show local changes dotfiles-sync.sh --diff # Show local changes
dotfiles-sync.sh --watch 300 # Auto-sync every 5 minutes dotfiles-sync.sh --watch 300 # Auto-sync every 5 minutes
dotfiles-sync.sh --log # Show sync history dotfiles-sync.sh --log # Show sync history
# Aliases
dfs # Interactive sync
dfsync # Interactive sync
dfpush # Push changes
dfpull # Pull changes
dfstatus # Show status
``` ```
**Auto-check:** On shell start, you'll be notified of available updates. **Auto-check:** On shell start, you'll be notified of available updates.
@@ -380,6 +401,63 @@ motd # Alias for show_motd
--- ---
## Command Aliases
All dotfiles commands have convenient aliases defined in `~/.dotfiles/zsh/aliases.zsh`:
### Core Commands
| Alias | Full Command | Description |
|-------|--------------|-------------|
| `dotfiles` / `df` | `cd ~/.dotfiles` | Go to dotfiles directory |
| `dfd` / `doctor` | `dotfiles-doctor.sh` | Run health check |
| `dffix` | `dotfiles-doctor.sh --fix` | Auto-fix issues |
| `dfs` / `dfsync` | `dotfiles-sync.sh` | Interactive sync |
| `dfpush` | `dotfiles-sync.sh --push` | Push local changes |
| `dfpull` | `dotfiles-sync.sh --pull` | Pull remote changes |
| `dfstatus` | `dotfiles-sync.sh --status` | Show sync status |
| `dfu` / `dfupdate` | `dotfiles-update.sh` | Update dotfiles |
| `dfv` / `dfversion` | `dotfiles-version.sh` | Show version |
| `dfstats` / `stats` | `dotfiles-stats.sh` | Shell analytics |
| `tophist` | `dotfiles-stats.sh --top` | Top commands |
| `suggest` | `dotfiles-stats.sh --suggest` | Alias suggestions |
### Vault Commands
| Alias | Full Command | Description |
|-------|--------------|-------------|
| `vault` | `dotfiles-vault.sh` | Vault CLI |
| `vls` | `dotfiles-vault.sh list` | List secrets |
| `vget` | `dotfiles-vault.sh get` | Get secret |
| `vset` | `dotfiles-vault.sh set` | Set secret |
### Quick Edit
| Alias | Description |
|-------|-------------|
| `zshrc` | Edit ~/.zshrc |
| `dfconf` | Edit dotfiles.conf |
| `dfedit` | Open dotfiles in editor |
| `reload` / `rl` | Reload shell config |
### CLI Wrapper
The `dotfiles-cli` (alias: `dfc`) provides a unified interface:
```bash
dfc doctor # Run health check
dfc sync # Sync dotfiles
dfc update # Update dotfiles
dfc version # Show version
dfc stats # Shell analytics
dfc vault # Secrets manager
dfc edit # Open in editor
dfc cd # Go to dotfiles dir
dfc help # Show help
```
---
## Customization ## Customization
### Adding Aliases ### Adding Aliases
@@ -596,7 +674,42 @@ chsh -s /bin/bash
| `~/.dotfiles/vim/.vimrc` | `~/.vimrc` | | `~/.dotfiles/vim/.vimrc` | `~/.vimrc` |
| `~/.dotfiles/tmux/.tmux.conf` | `~/.tmux.conf` | | `~/.dotfiles/tmux/.tmux.conf` | `~/.tmux.conf` |
| `~/.dotfiles/espanso/` | `~/.config/espanso` | | `~/.dotfiles/espanso/` | `~/.config/espanso` |
| `~/.dotfiles/bin/*` | `~/.local/bin/*` | | `~/.dotfiles/bin/dotfiles-*.sh` | `~/.local/bin/dotfiles-*.sh` |
### Directory Structure
```
~/.dotfiles/
├── bin/ # Core scripts (symlinked to ~/.local/bin)
│ ├── dotfiles-doctor.sh
│ ├── dotfiles-stats.sh
│ ├── dotfiles-sync.sh
│ ├── dotfiles-update.sh
│ ├── dotfiles-vault.sh
│ └── dotfiles-version.sh
├── setup/ # Setup scripts (not symlinked)
│ ├── setup-wizard.sh
│ └── setup-espanso.sh
├── zsh/
│ ├── .zshrc
│ ├── aliases.zsh # Dotfiles command aliases
│ ├── themes/
│ │ └── adlee.zsh-theme
│ └── functions/
│ ├── command-palette.zsh
│ ├── motd.zsh
│ ├── password-manager.zsh
│ ├── smart-suggest.zsh
│ └── snapper.zsh
├── espanso/
│ └── match/
│ ├── base.yml
│ └── personal.yml
├── vault/ # Encrypted secrets (gitignored)
├── docs/
├── dotfiles.conf
└── install.sh
```
### Key Files ### Key Files
@@ -604,9 +717,12 @@ chsh -s /bin/bash
|------|---------| |------|---------|
| `dotfiles.conf` | Central configuration | | `dotfiles.conf` | Central configuration |
| `zsh/.zshrc` | Main shell config | | `zsh/.zshrc` | Main shell config |
| `zsh/aliases.zsh` | Command aliases |
| `zsh/themes/adlee.zsh-theme` | Prompt theme | | `zsh/themes/adlee.zsh-theme` | Prompt theme |
| `zsh/functions/smart-suggest.zsh` | Typo correction | | `zsh/functions/smart-suggest.zsh` | Typo correction |
| `zsh/functions/command-palette.zsh` | Fuzzy launcher | | `zsh/functions/command-palette.zsh` | Fuzzy launcher |
| `zsh/functions/motd.zsh` | Dynamic MOTD |
| `zsh/functions/password-manager.zsh` | Password manager integration |
| `espanso/match/base.yml` | Text expansion snippets | | `espanso/match/base.yml` | Text expansion snippets |
| `espanso/match/personal.yml` | Personal snippets | | `espanso/match/personal.yml` | Personal snippets |
| `vault/` | Encrypted secrets (gitignored) | | `vault/` | Encrypted secrets (gitignored) |

View File

@@ -697,6 +697,98 @@ install_optional_tools() {
fi fi
} }
install_password_managers() {
print_step "Password manager CLI tools"
# 1Password CLI
if ! command -v op &> /dev/null; then
if should_install "$INSTALL_1PASSWORD" "1Password CLI (op)"; then
case "$OS" in
ubuntu|debian)
curl -sS https://downloads.1password.com/linux/keys/1password.asc | sudo gpg --dearmor --output /usr/share/keyrings/1password-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/1password-archive-keyring.gpg] https://downloads.1password.com/linux/debian/$(dpkg --print-architecture) stable main" | sudo tee /etc/apt/sources.list.d/1password.list
sudo apt update && sudo apt install -y 1password-cli
;;
fedora|rhel|centos)
sudo rpm --import https://downloads.1password.com/linux/keys/1password.asc
sudo sh -c 'echo -e "[1password]\nname=1Password Stable Channel\nbaseurl=https://downloads.1password.com/linux/rpm/stable/\$basearch\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://downloads.1password.com/linux/keys/1password.asc" > /etc/yum.repos.d/1password.repo'
sudo dnf install -y 1password-cli
;;
arch|cachyos)
if command -v paru &>/dev/null; then
paru -S --noconfirm 1password-cli
elif command -v yay &>/dev/null; then
yay -S --noconfirm 1password-cli
else
print_warning "Install 1password-cli from AUR manually"
fi
;;
macos)
brew install --cask 1password-cli
;;
esac
command -v op &>/dev/null && print_success "1Password CLI installed"
fi
else
print_success "1Password CLI already installed"
fi
# LastPass CLI
if ! command -v lpass &> /dev/null; then
if should_install "$INSTALL_LASTPASS" "LastPass CLI (lpass)"; then
case "$OS" in
ubuntu|debian)
sudo apt-get install -y lastpass-cli
;;
fedora|rhel|centos)
sudo dnf install -y lastpass-cli
;;
arch|cachyos)
sudo pacman -S --noconfirm lastpass-cli
;;
macos)
brew install lastpass-cli
;;
esac
command -v lpass &>/dev/null && print_success "LastPass CLI installed"
fi
else
print_success "LastPass CLI already installed"
fi
# Bitwarden CLI
if ! command -v bw &> /dev/null; then
if should_install "$INSTALL_BITWARDEN" "Bitwarden CLI (bw)"; then
case "$OS" in
ubuntu|debian|fedora|rhel|centos)
if command -v npm &>/dev/null; then
sudo npm install -g @bitwarden/cli
else
print_warning "Bitwarden CLI requires npm. Install Node.js first."
fi
;;
arch|cachyos)
if command -v paru &>/dev/null; then
paru -S --noconfirm bitwarden-cli
elif command -v yay &>/dev/null; then
yay -S --noconfirm bitwarden-cli
else
sudo pacman -S --noconfirm bitwarden-cli 2>/dev/null || {
[[ -x "$(command -v npm)" ]] && sudo npm install -g @bitwarden/cli
}
fi
;;
macos)
brew install bitwarden-cli
;;
esac
command -v bw &>/dev/null && print_success "Bitwarden CLI installed"
fi
else
print_success "Bitwarden CLI already installed"
fi
}
# ============================================================================ # ============================================================================
# Main # Main
# ============================================================================ # ============================================================================
@@ -736,6 +828,7 @@ main() {
link_espanso_config link_espanso_config
set_zsh_default set_zsh_default
install_optional_tools install_optional_tools
install_password_managers
echo echo
print_success "Installation complete!" print_success "Installation complete!"
@@ -744,10 +837,14 @@ main() {
echo " 1. Restart your terminal or run: exec zsh" echo " 1. Restart your terminal or run: exec zsh"
echo " 2. Your old configs are backed up in: $BACKUP_DIR" echo " 2. Your old configs are backed up in: $BACKUP_DIR"
echo " 3. Customize settings in: $DOTFILES_DIR/dotfiles.conf" echo " 3. Customize settings in: $DOTFILES_DIR/dotfiles.conf"
echo " 4. Run 'dotfiles-doctor.sh' to verify installation" echo " 4. Run 'dfd' or 'dotfiles-doctor.sh' to verify installation"
echo echo
echo -e "${BLUE}To update dotfiles in the future:${NC}" echo -e "${BLUE}Useful commands:${NC}"
echo " cd ~/.dotfiles && git pull && ./install.sh" echo " dfd / doctor - Health check"
echo " dfs / dfsync - Sync dotfiles"
echo " dfu / dfupdate - Update dotfiles"
echo " dfstats / stats - Shell analytics"
echo " vault - Secrets manager"
echo echo
echo -e "${BLUE}To uninstall:${NC}" echo -e "${BLUE}To uninstall:${NC}"
echo " ./install.sh --uninstall" echo " ./install.sh --uninstall"

View File

@@ -110,12 +110,14 @@ alias di='docker images'
alias dex='docker exec -it' alias dex='docker exec -it'
# System shortcuts # System shortcuts
alias reload='source ~/.zshrc'
alias zshconfig='vim ~/.zshrc'
alias themeconfig='vim ~/.oh-my-zsh/themes/adlee.zsh-theme'
alias h='history' alias h='history'
alias c='clear' alias c='clear'
# --- Source Dotfiles Aliases ---
if [[ -f "$HOME/.dotfiles/zsh/aliases.zsh" ]]; then
source "$HOME/.dotfiles/zsh/aliases.zsh"
fi
# Safe operations # Safe operations
alias rm='rm -i' alias rm='rm -i'
alias cp='cp -i' alias cp='cp -i'
@@ -325,8 +327,8 @@ fi
# --- Vault Integration --- # --- Vault Integration ---
# Source vault secrets into environment (if vault exists and has secrets) # Source vault secrets into environment (if vault exists and has secrets)
if command -v vault.sh &>/dev/null && [[ -f "$HOME/.dotfiles/vault/secrets.enc" ]]; then if command -v dotfiles-vault.sh &>/dev/null && [[ -f "$HOME/.dotfiles/vault/secrets.enc" ]]; then
eval "$(vault.sh shell 2>/dev/null)" || true eval "$(dotfiles-vault.sh shell 2>/dev/null)" || true
fi fi
# --- Password Manager Integration --- # --- Password Manager Integration ---

91
zsh/aliases.zsh Normal file
View File

@@ -0,0 +1,91 @@
# ============================================================================
# Dotfiles Command Aliases
# ============================================================================
# Convenient shortcuts for dotfiles management scripts
#
# Source this file in .zshrc (already included by default)
# ============================================================================
# --- Core Dotfiles Commands ---
alias dotfiles='cd ~/.dotfiles'
alias df='cd ~/.dotfiles'
# Doctor - health check
alias dfd='dotfiles-doctor.sh'
alias doctor='dotfiles-doctor.sh'
alias dffix='dotfiles-doctor.sh --fix'
# Sync - multi-machine synchronization
alias dfs='dotfiles-sync.sh'
alias dfsync='dotfiles-sync.sh'
alias dfpush='dotfiles-sync.sh --push'
alias dfpull='dotfiles-sync.sh --pull'
alias dfstatus='dotfiles-sync.sh --status'
# Update - pull latest and reinstall
alias dfu='dotfiles-update.sh'
alias dfupdate='dotfiles-update.sh'
# Version - check version info
alias dfv='dotfiles-version.sh'
alias dfversion='dotfiles-version.sh'
# Stats - shell analytics
alias dfstats='dotfiles-stats.sh'
alias stats='dotfiles-stats.sh'
alias tophist='dotfiles-stats.sh --top'
alias suggest='dotfiles-stats.sh --suggest'
# Vault - secrets management
alias vault='dotfiles-vault.sh'
alias vls='dotfiles-vault.sh list'
alias vget='dotfiles-vault.sh get'
alias vset='dotfiles-vault.sh set'
# --- Quick Edit Aliases ---
alias zshrc='${EDITOR:-vim} ~/.zshrc'
alias dfconf='${EDITOR:-vim} ~/.dotfiles/dotfiles.conf'
alias dfedit='cd ~/.dotfiles && ${EDITOR:-vim} .'
# --- 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; dotfiles-doctor.sh "$@" ;;
sync|s) shift; dotfiles-sync.sh "$@" ;;
update|up|u) shift; dotfiles-update.sh "$@" ;;
version|ver|v) shift; dotfiles-version.sh "$@" ;;
stats|st) shift; dotfiles-stats.sh "$@" ;;
vault|vlt) shift; dotfiles-vault.sh "$@" ;;
edit|e) cd ~/.dotfiles && ${EDITOR:-vim} . ;;
cd) cd ~/.dotfiles ;;
help|--help|-h|*)
echo "Dotfiles CLI"
echo
echo "Usage: dotfiles-cli <command> [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 " 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"
;;
esac
}
# Short alias for the CLI
alias dfc='dotfiles-cli'

View File

@@ -1,5 +0,0 @@
#!/usr/bin/env bash
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting