436 lines
14 KiB
Markdown
436 lines
14 KiB
Markdown
# ADLee's Dotfiles (Arch/CachyOS)
|
||
|
||
Personal configuration files for a fast, productive dev environment on **Arch Linux** and **CachyOS**.
|
||
|
||
[](https://opensource.org/licenses/MIT)
|
||
[](https://www.zsh.org/)
|
||
[](https://archlinux.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** | Two-line prompt with 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 and get insights |
|
||
| **Secrets Vault** | Encrypted storage for API keys and sensitive data |
|
||
| **LastPass CLI** | Unified password manager integration |
|
||
| **Dotfiles Sync** | Keep configuration in sync across machines |
|
||
| **Snapper Integration** | Btrfs snapshot management with limine-snapper-sync |
|
||
| **Tmux Workspaces** | Project templates with pre-configured layouts |
|
||
| **SSH Manager** | Save and manage SSH connections with tmux integration |
|
||
|
||
## 🚀 Quick Start
|
||
|
||
### One-liner Install
|
||
```bash
|
||
git clone https://github.com/adlee-was-taken/dotfiles.git ~/.dotfiles && cd ~/.dotfiles && ./install.sh
|
||
```
|
||
|
||
### 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
|
||
```
|
||
|
||
## 📋 System Requirements
|
||
|
||
- **OS:** Arch Linux or CachyOS
|
||
- **Editors:** Vim (required), Neovim (optional)
|
||
- **Password Manager:** LastPass
|
||
- **Shell:** Zsh (installed by script)
|
||
- **Package Manager:** Pacman (built-in)
|
||
|
||
## 📁 Repository Layout
|
||
|
||
```
|
||
dotfiles/
|
||
├── install.sh # Main installer script
|
||
├── dotfiles.conf # Central configuration
|
||
├── zsh/
|
||
│ ├── .zshrc # Shell configuration
|
||
│ ├── aliases.zsh # Command aliases
|
||
│ ├── themes/adlee.zsh-theme # Prompt theme
|
||
│ └── functions/
|
||
│ ├── command-palette.zsh # Ctrl+Space launcher
|
||
│ ├── motd.zsh # System info display
|
||
│ ├── smart-suggest.zsh # Typo correction
|
||
│ ├── password-manager.zsh # LastPass integration
|
||
│ ├── snapper.zsh # Btrfs snapshots
|
||
│ ├── ssh-manager.zsh # SSH profiles
|
||
│ ├── tmux-workspaces.zsh # Workspace templates
|
||
│ └── python-templates.zsh # Python project scaffolding
|
||
├── vim/.vimrc # Vim configuration
|
||
├── nvim/ # Neovim configuration
|
||
├── tmux/.tmux.conf # Tmux configuration
|
||
├── git/.gitconfig.template # Git configuration template
|
||
└── bin/ # Scripts (symlinked 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 # Encrypted secrets manager
|
||
└── dotfiles-version.sh # Version info
|
||
```
|
||
|
||
## 🎮 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, recent commands, bookmarks, git commands, quick actions
|
||
|
||
**Keybindings:**
|
||
- `Enter` - Execute command
|
||
- `Ctrl+E` - Edit before running
|
||
- `Ctrl+Y` - Copy to clipboard
|
||
|
||
### Directory Bookmarks
|
||
|
||
```bash
|
||
bookmark projects ~/projects # Save bookmark
|
||
bookmark list # List all
|
||
jump projects # Go to bookmark
|
||
j # Fuzzy select
|
||
```
|
||
|
||
## 🔧 Smart Suggestions
|
||
|
||
Automatic typo correction for 100+ common mistakes:
|
||
|
||
```bash
|
||
$ gti status
|
||
✗ Command not found: gti
|
||
→ Did you mean: git?
|
||
|
||
$ dokcer ps
|
||
✗ Command not found: dokcer
|
||
→ Did you mean: docker?
|
||
```
|
||
|
||
Alias recommendations for frequently typed commands:
|
||
|
||
```bash
|
||
💡 Tip: You've typed 'git status' 50 times
|
||
Consider adding: alias gs='git status'
|
||
```
|
||
|
||
## 📊 Shell Analytics
|
||
|
||
```bash
|
||
dotfiles-stats.sh # Full dashboard
|
||
# or use aliases:
|
||
dfstats
|
||
stats
|
||
```
|
||
|
||
```
|
||
╔═══════════════════════════════════════════════════════════════════╗
|
||
║ Shell Analytics Dashboard ║
|
||
╠═══════════════════════════════════════════════════════════════════╣
|
||
║ Total commands: 4,832 ║
|
||
║ Unique commands: 847 ║
|
||
║ ║
|
||
║ Top Commands ║
|
||
║ git 847 ████████████████████████░░░░░░ ║
|
||
║ cd 412 ████████████░░░░░░░░░░░░░░░░░░ ║
|
||
║ ls 398 ███████████░░░░░░░░░░░░░░░░░░░ ║
|
||
╚═══════════════════════════════════════════════════════════════════╝
|
||
```
|
||
|
||
## 🔐 Secrets Vault
|
||
|
||
Encrypted storage for API keys and tokens:
|
||
|
||
```bash
|
||
vault set GITHUB_TOKEN ghp_xxxxxxxxxxxx
|
||
vault set AWS_SECRET_KEY # Prompts for 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
|
||
|
||
LastPass CLI for unified password management:
|
||
|
||
```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)
|
||
```
|
||
|
||
### Install LastPass CLI
|
||
|
||
```bash
|
||
# Via AUR with paru (recommended)
|
||
paru -S lastpass-cli
|
||
|
||
# Or with yay
|
||
yay -S lastpass-cli
|
||
```
|
||
|
||
## 🖥️ Dynamic MOTD
|
||
|
||
System info displayed on shell startup:
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────────┐
|
||
│ ✦ alee@battlestation Mon Dec 15 14:30 │
|
||
├──────────────────────────────────────────────────────────────┤
|
||
│ ▲ up:4d 7h ◆ load:0.45 ◇ mem:8.2/32G ⊡ 234G free │
|
||
└──────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
Shows: uptime, load average, memory usage, disk space
|
||
|
||
**Configuration:**
|
||
```bash
|
||
ENABLE_MOTD="true" # Enable MOTD
|
||
MOTD_STYLE="compact" # compact (box), mini (single line), or off
|
||
```
|
||
|
||
## 🎨 Zsh Theme
|
||
|
||
```
|
||
┌[user@hostname]─[~/projects ⎇ main *]
|
||
└%
|
||
```
|
||
|
||
**Features:**
|
||
- Two-line prompt for clarity
|
||
- Git integration (branch name with dirty indicator `*`)
|
||
- Command timer (shows elapsed time for commands >10s)
|
||
- Smart path truncation
|
||
- Root detection (red for root, blue for users)
|
||
|
||
## 🔄 Dotfiles Sync
|
||
|
||
Keep configuration synchronized across machines:
|
||
|
||
```bash
|
||
dotfiles-sync.sh # Interactive sync
|
||
dotfiles-sync.sh --status # Show sync 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 notifications of available updates.
|
||
|
||
## 📸 Snapper Integration
|
||
|
||
Btrfs snapshot management for Arch with limine bootloader:
|
||
|
||
```bash
|
||
snap-create "Before system update" # Create snapshot
|
||
snap-list 20 # List recent snapshots
|
||
snap-check-limine # Verify boot menu sync
|
||
snap-delete 42 # Delete snapshot
|
||
snap-validate-service # Check service status
|
||
```
|
||
|
||
Auto-syncs with `limine-snapper-sync` for boot menu entries.
|
||
|
||
**Install on CachyOS/Arch:**
|
||
```bash
|
||
paru -S limine-snapper-sync
|
||
sudo systemctl enable limine-snapper-sync.service
|
||
```
|
||
|
||
## 🎯 Tmux Workspace Manager
|
||
|
||
Pre-configured layouts for different workflows:
|
||
|
||
```bash
|
||
tw-create myproject dev # Create dev workspace
|
||
tw myproject # Quick attach or create
|
||
tw-list # List active workspaces
|
||
tw-save my-custom-layout # Save current layout as template
|
||
tw-sync # Toggle pane sync for multi-server
|
||
twf # Fuzzy search workspaces
|
||
```
|
||
|
||
**Available Templates:**
|
||
- `dev` - Vim (50%) + terminal (25%) + logs (25%)
|
||
- `ops` - 4-pane monitoring grid
|
||
- `ssh-multi` - 4 panes for multi-server management
|
||
- `debug` - 2 panes: main (70%) + helper (30%)
|
||
- `full` - Single full-screen pane
|
||
- `review` - Side-by-side code review panes
|
||
|
||
## 🌐 SSH Session Manager
|
||
|
||
Save and manage SSH connections with automatic tmux integration:
|
||
|
||
```bash
|
||
ssh-save prod user@prod.example.com 22 ~/.ssh/prod_key
|
||
ssh-connect prod # Auto-creates/attaches tmux session
|
||
ssh-list # List all profiles
|
||
sshf # Fuzzy search and connect
|
||
ssh-sync-dotfiles prod # Deploy dotfiles to remote
|
||
```
|
||
|
||
## 🐍 Python Project Templates
|
||
|
||
Quick project scaffolding with virtual environments:
|
||
|
||
```bash
|
||
py-new myproject # Basic Python project
|
||
py-django myblog # Django web app
|
||
py-flask myapp # Flask web app
|
||
py-fastapi myapi # FastAPI REST API
|
||
py-data analysis # Data science project
|
||
py-cli mytool # CLI tool with Click
|
||
```
|
||
|
||
All include virtual environment setup, git initialization, and project structure.
|
||
|
||
## ⌨️ 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 |
|
||
| `pw` | LastPass password manager | Get/list passwords |
|
||
| `tw` | Tmux workspace manager | Quick workspace access |
|
||
| `reload` | `source ~/.zshrc` | Reload shell config |
|
||
|
||
## 🩺 Health Check
|
||
|
||
```bash
|
||
dotfiles-doctor.sh # Run diagnostics
|
||
dotfiles-doctor.sh --fix # Auto-fix issues
|
||
# Aliases: dfd, doctor, dffix
|
||
```
|
||
|
||
Checks: symlinks, zsh plugins, git config, optional tools, and more
|
||
|
||
## ⚙️ Configuration
|
||
|
||
Edit `~/.dotfiles/dotfiles.conf` to customize:
|
||
|
||
```bash
|
||
# Identity
|
||
USER_FULLNAME="Your Name"
|
||
USER_EMAIL="you@example.com"
|
||
USER_GITHUB="yourusername"
|
||
|
||
# Features
|
||
INSTALL_ZSH_PLUGINS="true"
|
||
INSTALL_FZF="ask"
|
||
INSTALL_NEOVIM="ask"
|
||
SET_ZSH_DEFAULT="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
|
||
```
|
||
|
||
## 🗑️ Uninstalling
|
||
|
||
```bash
|
||
./install.sh --uninstall # Remove symlinks
|
||
./install.sh --uninstall --purge # Also delete ~/.dotfiles
|
||
```
|
||
|
||
## 📚 Documentation
|
||
|
||
- [SETUP_GUIDE.md](docs/SETUP_GUIDE.md) - Detailed installation and configuration
|
||
- [ESPANSO.md](docs/ESPANSO.md) - Text expansion snippets reference
|
||
- [SNAPPER.md](docs/SNAPPER.md) - Btrfs snapshot management guide
|
||
- [SSH_TMUX_INTEGRATION.md](docs/SSH_TMUX_INTEGRATION.md) - SSH + Tmux workflow
|
||
|
||
## 🛠️ Install Options
|
||
|
||
```bash
|
||
./install.sh # Standard install
|
||
./install.sh --wizard # Interactive TUI wizard
|
||
./install.sh --skip-deps # Re-run without checking deps
|
||
./install.sh --uninstall # Remove symlinks
|
||
./install.sh --help # Show all options
|
||
```
|
||
|
||
## 🤝 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
|
||
**Repository:** https://github.com/adlee-was-taken/dotfiles
|
||
**Arch/CachyOS Only Edition**
|