diff --git a/README.md b/README.md index 49cb2b9..377aff0 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,16 @@ # Personal Nix Configuration -A simple Nix configuration for macOS using nix-darwin and home-manager. Largely generated by Claude Code. +A comprehensive Nix configuration for macOS using nix-darwin and home-manager, featuring a modern development environment with vim-centric workflows and beautiful aesthetics. Largely generated and maintained with Claude Code. -## Quick Install +## ✨ Features + +- **🎨 Beautiful UI**: Gruvbox dark theme across all applications +- **⌨️ Vim-centric**: Consistent vim keybindings throughout the stack +- **🚀 Modern CLI**: Enhanced tools with fuzzy finding, syntax highlighting, and smart completion +- **📦 Modular Design**: Separate configuration files for easy maintenance +- **🔄 Portable**: Reproducible across machines with a single command + +## 🚀 Quick Install Install directly from GitHub without cloning: @@ -14,26 +22,228 @@ sudo darwin-rebuild switch --flake github:Logan-Lin/nix-config home-manager switch --flake github:Logan-Lin/nix-config#yanlin ``` -## What's Included +## 📁 Configuration Architecture -- **nix-darwin**: System-level macOS configuration -- **home-manager**: User environment and dotfiles -- **Neovim**: Configured with treesitter, file explorer, and gruvbox theme -- **Tmux**: Vim-like keybindings with gruvbox colors -- **Packages**: LaTeX, Python, btop, fonts, and development tools +``` +. +├── flake.nix # Main flake configuration and package definitions +├── nvim.nix # Neovim configuration with plugins and keymaps +├── tmux.nix # Tmux setup with vim-like navigation +├── zsh.nix # Zsh with Powerlevel10k and modern CLI tools +├── p10k.zsh # Powerlevel10k theme configuration (managed by Nix) +└── tmux.sh # Tmux session automation script +``` -## Usage +## 🛠️ Software Configurations +### 📝 Neovim + +**Theme**: Gruvbox dark with hard contrast +**Leader Key**: `` + +#### Key Features: +- **File Explorer**: nvim-tree with dotfile filtering +- **Syntax Highlighting**: Treesitter with all grammar support +- **Git Integration**: vim-fugitive for git operations +- **Status Line**: lualine with gruvbox theme and relative paths +- **System Clipboard**: Seamless integration for copy/paste + +#### Keybindings: + +| Key | Mode | Action | +|-----|------|--------| +| `e` | Normal | Toggle file explorer | +| `w` | Normal | Save file | +| `q` | Normal | Quit | +| `y` | Normal/Visual | Copy to system clipboard | +| `p` | Normal/Visual | Paste from system clipboard | +| `gs` | Normal | Git status | +| `gd` | Normal | Git diff | +| `gc` | Normal | Git commit | +| `gp` | Normal | Git push | + +### 🖥️ Tmux + +**Prefix Key**: `Ctrl+a` (instead of default `Ctrl+b`) +**Theme**: Gruvbox dark with visual prefix indicator + +#### Key Features: +- **Prefix Indicator**: Shows `` in status bar when prefix is active +- **Vim-like Navigation**: hjkl for pane movement +- **Smart Splitting**: Maintains current directory when creating panes +- **Copy Mode**: System clipboard integration with pbcopy + +#### Keybindings: + +| Key | Action | +|-----|--------| +| `Ctrl+a` | Prefix key | +| `Ctrl+a |` | Split window vertically | +| `Ctrl+a -` | Split window horizontally | +| `Ctrl+a h/j/k/l` | Navigate panes (vim-style) | +| `Ctrl+a H/J/K/L` | Resize panes | +| `Ctrl+a r` | Reload tmux config | +| `Ctrl+a Ctrl+a` | Quick pane cycling | + +#### Copy Mode (Ctrl+a [): +| Key | Action | +|-----|--------| +| `v` | Begin selection | +| `y` | Copy selection to system clipboard | +| `r` | Toggle rectangle selection | + +### 🐚 Zsh with Powerlevel10k + +**Theme**: Powerlevel10k lean style with 2-line prompt +**Vim Mode**: Enabled with visual indicators + +#### Key Features: +- **Smart Completion**: Case-insensitive with menu selection +- **Autosuggestions**: Fish-like command suggestions +- **Syntax Highlighting**: Real-time command syntax highlighting +- **History Management**: Shared history with deduplication +- **Vim Mode Indicators**: Cursor shape changes and prompt symbols + +#### Vim Mode Indicators: +- **Insert Mode**: Line cursor `|` + `❯` prompt (green) +- **Normal Mode**: Block cursor `█` + `❮` prompt +- **Fast Switching**: 10ms escape timeout for responsive mode changes + +#### Vim Mode Keybindings: +| Key | Mode | Action | +|-----|------|--------| +| `Esc` | Insert | Switch to normal mode | +| `i/a/I/A` | Normal | Switch to insert mode | +| `k/j` | Normal | History search backward/forward | +| `/` | Normal | History incremental search backward | +| `?` | Normal | History incremental search forward | +| `Ctrl+Right/Left` | Insert | Word movement | + +#### Aliases: + +**Navigation:** ```bash -# Update and switch configuration +l, ll, la # Enhanced ls commands +.., ..., .... # Quick directory navigation +home, config # Jump to common directories +nix-config # Jump to nix configuration +``` + +**Git:** +```bash +g, gs, ga, gc, gp, gl, gd, gco, gb # Git shortcuts +glog # Beautiful git log with graph +``` + +**Modern CLI:** +```bash +cat → bat # Syntax highlighted file viewing +find → fd # Fast file finding +grep → rg # Ripgrep for fast searching +top → btop # Beautiful system monitor +``` + +**Nix:** +```bash +hm # home-manager shortcut +hms # Quick home-manager switch +``` + +### 🌟 Git Visualization + +**Tool**: gitui +**Purpose**: Beautiful, interactive TUI for git operations + +Launch with `gitui` in any git repository for: +- Interactive commit graph visualization +- Diff viewing and staging +- Branch management +- Vim-like navigation (j/k for movement, h/l for tabs) + +## 📦 Included Packages + +### Development Tools +- **Python 3.12**: With pip and virtualenv +- **LaTeX**: Full TeXLive distribution +- **Claude Code**: AI-powered coding assistant +- **Git UI**: Beautiful git graph visualization + +### CLI Utilities +- **fzf**: Fuzzy finder for files, commands, and history +- **fd**: Fast, user-friendly alternative to find +- **ripgrep (rg)**: Fast text search +- **bat**: Syntax-highlighted cat replacement +- **btop**: Modern system monitor +- **zoxide**: Smart cd with frecency algorithm + +### Fonts +- **Nerd Fonts**: FiraCode and JetBrains Mono with icon support + +## 🔄 Usage & Workflow + +### Daily Workflow +1. **Terminal**: Beautiful zsh with vim mode and modern tools +2. **Tmux**: Session management with vim navigation +3. **Neovim**: Code editing with git integration +4. **Git UI**: Visual git operations and branch management + +### Environment Management +```bash +# Refresh shell environment after nix changes +exec zsh + +# Update and rebuild configuration nix flake update sudo darwin-rebuild switch --flake . home-manager switch --flake .#yanlin + +# Quick home-manager rebuild +hms ``` -## Machines +### Clipboard Integration +The configuration provides seamless clipboard integration: +- **Neovim**: `y/p` for system clipboard +- **Tmux**: Copy mode automatically uses system clipboard +- **Terminal**: Standard Cmd+C/V works everywhere -- `iMac` - iMac configuration -- `mba` - MacBook Air configuration +## 💻 Machine Configurations -For now, both machines use the same base configuration with potential for machine-specific customizations. +- **`iMac`**: iMac configuration +- **`MacBook-Air`**: MacBook Air configuration + +Both machines use the same base configuration with potential for machine-specific customizations. + +### Machine-specific Usage: +```bash +# For MacBook Air +sudo darwin-rebuild switch --flake .#MacBook-Air + +# For iMac +sudo darwin-rebuild switch --flake .#iMac +``` + +## 🎯 Workflow Optimization + +### Cross-Application Consistency +- **Vim keybindings**: Available in zsh, tmux, and neovim +- **Gruvbox theme**: Consistent dark theme across all applications +- **Leader key patterns**: Space-based shortcuts in neovim +- **System clipboard**: Unified clipboard access across all tools + +### Productivity Features +- **Fast fuzzy finding**: fzf integration in zsh and file operations +- **Smart completion**: Context-aware completions with history +- **Visual indicators**: Mode indicators, prefix indicators, and status information +- **Modern replacements**: Enhanced versions of common CLI tools + +## 🚀 Getting Started + +1. **Install**: Use the quick install commands above +2. **Refresh**: Run `exec zsh` to load the new shell +3. **Configure**: Powerlevel10k will auto-configure on first run +4. **Explore**: Try the keybindings and modern CLI tools + +--- + +*Generated and maintained with [Claude Code](https://claude.ai/code) 🤖*