Files
dotfiles/README.md
2025-12-15 21:31:14 -05:00

408 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ADLee's Dotfiles
Personal configuration files for a fast, consistent dev environment across Linux/macOS.
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Shell](https://img.shields.io/badge/Shell-Zsh-green.svg)](https://www.zsh.org/)
```
┌[alee@battlestation]─[~/.dotfiles ⎇ main]
└%
```
## ✨ Features
| Feature | Description |
|---------|-------------|
| **Setup Wizard** | Beautiful TUI installer with feature selection |
| **Dynamic MOTD** | System info on shell start (uptime, CPU, memory, updates) |
| **Zsh Theme** | Git status, command timer, root detection |
| **Command Palette** | Raycast-style fuzzy launcher (Ctrl+Space) |
| **Smart Suggestions** | Typo correction + alias recommendations |
| **Shell Analytics** | Track command usage, get insights |
| **Secrets Vault** | Encrypted storage for API keys |
| **Password Managers** | Unified CLI for 1Password, LastPass, Bitwarden |
| **Dotfiles Sync** | Auto-sync across machines |
| **Espanso** | 100+ text expansion snippets |
| **Snapper** | Btrfs snapshot helpers (Arch/CachyOS) |
## 🚀 Quick Start
### One-liner Install
```bash
curl -fsSL https://raw.githubusercontent.com/adlee-was-taken/dotfiles/main/install.sh | bash
```
### Interactive Wizard (Recommended)
```bash
git clone https://github.com/adlee-was-taken/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./install.sh --wizard
```
### Standard Install
```bash
git clone https://github.com/adlee-was-taken/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./install.sh
```
## 📁 Repository Layout
```
dotfiles/
├── install.sh # Main installer
├── dotfiles.conf # Central configuration
├── zsh/
│ ├── .zshrc # Shell config
│ ├── aliases.zsh # Dotfiles command aliases
│ ├── themes/adlee.zsh-theme
│ └── functions/
│ ├── snapper.zsh # Btrfs snapshots
│ ├── smart-suggest.zsh # Typo correction
│ ├── command-palette.zsh
│ ├── motd.zsh # Dynamic MOTD
│ └── password-manager.zsh
├── espanso/ # Text expansion
│ └── match/base.yml # 100+ snippets
├── bin/ # Core scripts (linked to ~/.local/bin)
│ ├── dotfiles-doctor.sh # Health checker
│ ├── dotfiles-sync.sh # Multi-machine sync
│ ├── dotfiles-stats.sh # Shell analytics
│ ├── 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
├── vim/.vimrc
├── tmux/.tmux.conf
└── docs/
```
## 🎮 Command Palette
Press **Ctrl+Space** or **Ctrl+P** to open the fuzzy command launcher:
```
╭──────────────────────────────────────────╮
git │
├──────────────────────────────────────────┤
│ ⎇ git status │
│ ⎇ git pull main │
│ ⚡ gs (alias → git status) │
│ ↺ git commit -m "..." │
│ ★ Edit .zshrc │
╰──────────────────────────────────────────╯
```
**Searches:** aliases, functions, history, bookmarks, git commands, docker commands, quick actions
**Keybindings:**
- `Enter` - Execute
- `Ctrl+E` - Edit before running
- `Ctrl+Y` - Copy to clipboard
### Directory Bookmarks
```bash
bookmark projects ~/projects # Save
bookmark list # List all
jump projects # Go to bookmark
j # Fuzzy select
```
## 🔧 Smart Suggestions
Automatic typo correction:
```bash
$ gti status
✗ Command not found: gti
→ Did you mean: git?
$ dokcer ps
✗ Command not found: dokcer
→ Did you mean: docker?
```
Alias recommendations:
```bash
💡 Tip: You've typed 'docker-compose up -d' 15 times
Consider adding: alias dcu='docker-compose up -d'
```
Quick fix with `fuck`:
```bash
$ gti status
✗ Command not found: gti
$ fuck
Running: git status
```
## 📊 Shell Analytics
```bash
dotfiles-stats.sh
# or use aliases:
dfstats
stats
```
```
╔═══════════════════════════════════════════════════════════════════╗
║ Shell Analytics Dashboard ║
╠═══════════════════════════════════════════════════════════════════╣
║ Total commands: 4,832 ║
║ Unique commands: 847 ║
║ ║
║ Top Commands ║
║ git 847 ████████████████████████░░░░░░ ║
║ cd 412 ████████████░░░░░░░░░░░░░░░░░░ ║
║ ls 398 ███████████░░░░░░░░░░░░░░░░░░░ ║
╚═══════════════════════════════════════════════════════════════════╝
```
```bash
dotfiles-stats.sh --suggest # Alias suggestions
dotfiles-stats.sh --heatmap # Activity by hour
dotfiles-stats.sh --git # Git breakdown
dotfiles-stats.sh --dirs # Most visited directories
```
## 🔐 Secrets Vault
Encrypted storage for API keys and tokens:
```bash
vault set GITHUB_TOKEN ghp_xxxxxxxxxxxx
vault set AWS_SECRET_KEY # Prompts (hidden input)
vault get GITHUB_TOKEN
vault list # Shows keys only
vault delete OLD_KEY
# Full command: dotfiles-vault.sh
```
Export to environment:
```bash
eval $(vault shell) # Load all secrets
```
Uses `age` or `gpg` encryption. Secrets auto-load on shell start.
## 🔑 Password Manager Integration
Unified CLI for 1Password, LastPass, and Bitwarden:
```bash
pw list # List all items
pw get github # Get password
pw get github username # Get specific field
pw otp github # Get TOTP code
pw copy aws # Copy password to clipboard
pw search mail # Search items
pwf # Fuzzy search + copy (requires fzf)
```
Supports:
- **1Password** (`op`) - `INSTALL_1PASSWORD="true"`
- **LastPass** (`lpass`) - `INSTALL_LASTPASS="true"`
- **Bitwarden** (`bw`) - `INSTALL_BITWARDEN="true"`
## 🖥️ Dynamic MOTD
System info displayed on shell start:
```
┌──────────────────────────────────────────────────────────────┐
│ ✦ alee@battlestation Mon Dec 15 14:30│
├──────────────────────────────────────────────────────────────┤
│ ▲ up:4d 7h ◆ cpu:12% ◇ mem:8.2/32G ⊡ 234G free │
├──────────────────────────────────────────────────────────────┤
│ ◉4 containers ⎇2 dirty ↑3 updates ●dotfiles:✓ │
└──────────────────────────────────────────────────────────────┘
```
Configure in `dotfiles.conf`:
```bash
ENABLE_MOTD="true"
MOTD_STYLE="compact" # compact, mini, or off
```
## 🔄 Dotfiles Sync
Keep dotfiles synchronized across machines:
```bash
dotfiles-sync.sh # Interactive sync
dotfiles-sync.sh --status # Show status
dotfiles-sync.sh --push # Push changes
dotfiles-sync.sh --pull # Pull changes
dotfiles-sync.sh --watch 300 # Auto-sync every 5 min
```
On shell start, you'll see:
```
⚠ Dotfiles: 3 update(s) available
Run: dotfiles-sync.sh --pull
```
## ⌨️ Espanso Snippets
All triggers use `..` prefix:
| Category | Examples |
|----------|----------|
| **Date/Time** | `..date` → 2025-12-15, `..ts` → ISO timestamp |
| **Git** | `..gstat`, `..gcm`, `..branch` (current branch) |
| **Docker** | `..dps`, `..dcup`, `..dlog` |
| **Symbols** | `..shrug` → ¯\\\_(ツ)\_/¯, `..check` → ✓ |
| **Code** | `..bash` → script template, `..python` → main template |
Full list: [docs/ESPANSO.md](docs/ESPANSO.md)
## 🎨 Theme Features
```
┌[user@hostname]─[~/projects ⎇ main *]
└%
```
- **Git integration** Branch name with dirty indicator (`*`)
- **Command timer** Shows elapsed time for commands >10s
- **Smart paths** Truncates long directories
- **Root detection** Red prompt for root, blue for users
## 🩺 Health Check
```bash
dotfiles-doctor.sh # Run diagnostics
dotfiles-doctor.sh --fix # Auto-fix issues
# Aliases: dfd, doctor, dffix
```
```
━━━ Symlinks ━━━
✓ Symlink valid: .zshrc
✓ Symlink valid: .gitconfig
✓ Symlink valid: adlee.zsh-theme
━━━ Zsh Plugins ━━━
✓ Plugin installed: zsh-autosuggestions
✓ Plugin installed: zsh-syntax-highlighting
━━━ Summary ━━━
Passed: 12
Warnings: 1
Failed: 0
```
## ⚙️ Configuration
All settings in `dotfiles.conf`:
```bash
# Identity
USER_FULLNAME="Your Name"
USER_EMAIL="you@example.com"
GIT_USER_NAME="" # Falls back to USER_FULLNAME
# Features
INSTALL_ZSH_PLUGINS="true"
INSTALL_FZF="ask"
INSTALL_ESPANSO="ask"
# Advanced
ENABLE_SMART_SUGGESTIONS="true"
ENABLE_COMMAND_PALETTE="true"
ENABLE_VAULT="true"
DOTFILES_AUTO_SYNC_CHECK="true"
```
## 🔄 Updating
```bash
dotfiles-update.sh
# or aliases:
dfu
dfupdate
```
Check version:
```bash
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
```bash
./install.sh --uninstall # Remove symlinks
./install.sh --uninstall --purge # Also delete ~/.dotfiles
```
## 📚 Documentation
- [Setup Guide](docs/SETUP_GUIDE.md) - Detailed installation instructions
- [Espanso Reference](docs/ESPANSO.md) - All text expansion snippets
- [Snapper Guide](docs/SNAPPER.md) - Btrfs snapshot management
## 🛠️ Install Options
```bash
./install.sh # Standard install
./install.sh --wizard # Interactive TUI
./install.sh --skip-deps # Skip dependency check
./install.sh --uninstall # Remove symlinks
./install.sh --help # All options
```
## 📋 Requirements
- **OS:** Linux (Ubuntu, Arch, Fedora) or macOS
- **Shell:** Zsh (installed automatically)
- **Optional:** fzf (for command palette), age/gpg (for vault)
## 🤝 Forking
1. Fork the repo
2. Edit `dotfiles.conf` with your settings
3. Customize files as needed
4. The installer will use your fork's URLs
## 📄 License
MIT See [LICENSE](LICENSE)
---
**Author:** Aaron D. Lee
**Repo:** https://github.com/adlee-was-taken/dotfiles