|
|
| Line 1: |
Line 1: |
| = EJ Fox Dotfiles Configuration =
| |
|
| |
|
| Personal terminal environment optimized for minimalist productivity and AI-enhanced workflows.
| |
|
| |
| == Overview ==
| |
|
| |
| A comprehensive dotfiles configuration emphasizing geometric aesthetics, functional minimalism, and modern CLI tools. Built around the philosophy of distraction-free computing with intelligent automation.
| |
|
| |
| === Core Philosophy ===
| |
| * '''Geometric symbols''' throughout interface (◆ ◇ ○ ▪ ─)
| |
| * '''Theme-agnostic''' design (adapts to light/dark mode automatically)
| |
| * '''Zen mode''' for deep focus across all applications
| |
| * '''Modern CLI tools''' replacing legacy Unix commands
| |
| * '''AI integration''' for context-aware assistance
| |
|
| |
| == Shell Configuration ==
| |
|
| |
| === ZSH (.zshrc) ===
| |
| Primary shell configuration with modern enhancements:
| |
|
| |
| '''Key Features:'''
| |
| * Oh My Zsh with Powerlevel10k prompt
| |
| * Ruby environment via rbenv (replaced RVM)
| |
| * Email workflow integration
| |
| * Modern CLI aliases (lsd, bat, dust, duf, btop)
| |
| * Lazy-loaded tools (conda, zoxide, atuin) for performance
| |
| * UV Python package management
| |
|
| |
| '''Notable Aliases:'''
| |
| <pre>
| |
| alias l='lsd -lah' # Enhanced ls with icons
| |
| alias c='clear && refresh' # Clear and refresh
| |
| alias m='neomutt' # Email client
| |
| alias ei='email-insights' # AI email analysis
| |
| </pre>
| |
|
| |
| === CIPHER Morning Ritual (Dec 2025) ===
| |
| AI-powered daily planning system that runs on first terminal boot.
| |
|
| |
| '''Location:''' <code>~/.dotfiles/bin/morning-ritual</code>
| |
|
| |
| '''What it does:'''
| |
| CIPHER analyzes your entire context and suggests 12 pomodoros RANKED BY PRIORITY. Pick your top 3 via fzf multi-select.
| |
|
| |
| '''Context gathered:'''
| |
| * Things.app tasks (Today + Anytime lists)
| |
| * Calendar events via icalBuddy
| |
| * Recent git activity across ~/code
| |
| * Command history patterns
| |
| * GitHub notifications, PRs awaiting review
| |
| * Obsidian week note + 5 recent docs
| |
| * Day/time energy state (weekend vs weekday)
| |
|
| |
| '''Architecture:'''
| |
| <pre>
| |
| .startup.sh runs on first boot
| |
| ↓
| |
| Gather ALL context (Things, calendar, git, Obsidian, GitHub)
| |
| ↓
| |
| Send to Claude CLI with CIPHER persona
| |
| ↓
| |
| fzf with 12 ranked pomodoros (#01-#12)
| |
| ↓
| |
| TAB to multi-select, Enter to accept
| |
| ↓
| |
| Selected tasks added to Things inbox
| |
| </pre>
| |
|
| |
| '''CIPHER personality:''' Terse, insightful, William Gibson meets Unix philosophy. Dry wit with competence. Geometric symbols: ◆ ◇ ○ ●
| |
|
| |
| '''Usage:'''
| |
| <pre>
| |
| morning-ritual # Force run
| |
| rm /tmp/morning_ritual/last_run && morning-ritual # Reset today
| |
| </pre>
| |
|
| |
| === AI-Powered Git Commits (Dec 2025) ===
| |
| '''Location:''' <code>~/.dotfiles/bin/ai-commit</code>
| |
|
| |
| '''Usage:''' In lazygit, press '''a''' key after staging files.
| |
|
| |
| '''Flow:'''
| |
| <pre>
| |
| Stage files in lazygit (space)
| |
| ↓
| |
| Hit 'a' key
| |
| ↓
| |
| ai-commit gathers: staged diff, branch name, recent commits
| |
| ↓
| |
| Claude returns 3 conventional commit messages
| |
| ↓
| |
| fzf with diff preview (60% right pane)
| |
| ↓
| |
| Select message, commit executes
| |
| </pre>
| |
|
| |
| '''Lazygit config:''' <code>~/.config/lazygit/config.yml</code>
| |
| <pre>
| |
| customCommands:
| |
| - key: "a"
| |
| context: "files"
| |
| description: "AI commit (fzf + Claude)"
| |
| subprocess: true
| |
| command: 'MSG=$(ai-commit) && git commit -m "$MSG"'
| |
| </pre>
| |
|
| |
| == Terminal & Multiplexer ==
| |
|
| |
| === Tmux (.tmux.conf) ===
| |
| Minimalist terminal multiplexer configuration:
| |
|
| |
| '''Visual Design:'''
| |
| * No colors (theme-agnostic)
| |
| * Geometric pane count indicators (⚌ ☰ ⚍ ⚏ ☷)
| |
| * Centered window list
| |
| * Prefix indicator: ◼ (when active)
| |
|
| |
| '''Key Bindings:'''
| |
| <pre>
| |
| Prefix: C-a
| |
| Windows: Alt+h/l (prev/next)
| |
| Panes: hjkl (vim-style)
| |
| Resize: HJKL (capital letters)
| |
| Split: - (horizontal), _ (vertical)
| |
| </pre>
| |
|
| |
| === Tmux 2025 Popup Workflows (Nov 2025) ===
| |
| Modern popup workflows that float over your pane layout:
| |
|
| |
| '''Popups:'''
| |
| * '''C-a g''' → Lazygit popup in current directory
| |
| * '''C-a K''' → Yazi file manager popup
| |
| * '''C-a S''' → Scratch terminal toggle (persistent)
| |
|
| |
| '''Pane Capture:'''
| |
| * '''C-a C-y''' → Yank entire pane to clipboard
| |
| * '''C-a M-y''' → Yank last 200 lines to clipboard
| |
|
| |
| === Mermaid-ASCII Integration (Sept 2025) ===
| |
| Send ASCII diagrams to tmux panes.
| |
|
| |
| '''Functions:'''
| |
| * <code>send-mermaid <pane></code> - Send diagram to pane
| |
| * <code>test-mermaid [pane]</code> - Quick test (defaults to 0:6.2)
| |
| * <code>setup-diagram-listener <pane></code> - Auto-refresh display
| |
|
| |
| '''Critical rules:'''
| |
| * Use multiline syntax (not semicolons)
| |
| * Always use <code>-a</code> flag for ASCII-only mode
| |
| <pre>
| |
| echo "graph TD
| |
| A[Start] --> B[Process]
| |
| B --> C[End]" | mermaid-ascii -a > /tmp/diagram.txt
| |
| tmux send-keys -t 0:6.2 "cat /tmp/diagram.txt" Enter
| |
| </pre>
| |
|
| |
| == Development Environment ==
| |
|
| |
| === Neovim (0.11+) ===
| |
| LazyVim configuration with minimal aesthetics.
| |
|
| |
| '''0.11 Features (Nov 2025):'''
| |
| * Built-in LSP auto-completion (opt-in)
| |
| * Async treesitter parsing
| |
| * Virtual lines for diagnostics
| |
| * Shell prompt jumping with [[ and ]] in terminal
| |
|
| |
| === Essential Plugins (Nov 2025) ===
| |
|
| |
| '''oil.nvim''' - Filesystem as a buffer
| |
| <pre>
| |
| - Open parent directory
| |
| <CR> Open file/directory
| |
| g. Toggle hidden files
| |
| </pre>
| |
|
| |
| '''vim-tmux-navigator''' - Seamless navigation
| |
| <pre>
| |
| Ctrl-h/j/k/l Move between nvim splits AND tmux panes
| |
| </pre>
| |
|
| |
| '''tmux-thumbs''' - Vimium-style hints
| |
| <pre>
| |
| prefix + Space Show letter hints on visible text
| |
| </pre>
| |
|
| |
| '''nvim-dap''' - Debugging
| |
| <pre>
| |
| <leader>db Toggle breakpoint
| |
| <leader>dc Start/continue
| |
| <leader>di Step into
| |
| <leader>do Step over
| |
| </pre>
| |
|
| |
| '''kulala.nvim''' - HTTP client
| |
| <pre>
| |
| <CR> Execute request under cursor
| |
| [r / ]r Jump between requests
| |
| <leader>rc Copy as cURL
| |
| </pre>
| |
|
| |
| '''git-conflict.nvim''' - Merge conflicts
| |
| <pre>
| |
| co Choose ours
| |
| ct Choose theirs
| |
| cb Choose both
| |
| [x / ]x Jump between conflicts
| |
| </pre>
| |
|
| |
| === Vulpes Shader System (Nov 2025) ===
| |
| Custom GLSL shaders for Ghostty terminal.
| |
|
| |
| '''Location:''' <code>~/.config/ghostty/shaders/</code>
| |
|
| |
| '''Stack (order matters):'''
| |
| # '''cursor-blaze-vulpes.glsl''' - Hot pink cursor trail (#ff268c)
| |
| # '''bloom-vulpes.glsl''' - Red-selective glow effect
| |
| # '''vignette-subtle.glsl''' - Subtle edge darkening
| |
| # '''tft-subtle.glsl''' - LCD subpixel effect
| |
|
| |
| '''Reload:''' Cmd+Shift+, in Ghostty
| |
|
| |
| === mini.animate (Nov 2025) ===
| |
| '''Location:''' <code>~/.config/nvim/lua/plugins/mini-animate.lua</code>
| |
|
| |
| Subtle animations:
| |
| * Cursor: 80ms cubic easing
| |
| * Resize: 60ms cubic
| |
| * Open/Close: 60ms cubic
| |
| * Scroll: DISABLED
| |
|
| |
| == Sketchybar ==
| |
|
| |
| === CIPHER Coach (Nov 2025) ===
| |
| '''Location:''' <code>~/.config/sketchybar/plugins/next_event.sh</code>
| |
|
| |
| When no calendar events in next 4 hours, shows CIPHER-selected task from Things.
| |
|
| |
| '''Features:'''
| |
| * Shows next timed event with countdown
| |
| * Skips all-day events
| |
| * CIPHER mode picks most joyful task when calendar is clear
| |
| * Caches messages, updates when tasks change
| |
|
| |
| === Battery Fade Effect ===
| |
| '''Location:''' <code>~/.config/sketchybar/plugins/battery.sh</code>
| |
|
| |
| Smooth gradient from black to red as battery drains (20min → 0min).
| |
|
| |
| == Modern CLI Tools ==
| |
|
| |
| Replacements for traditional Unix commands:
| |
| * '''lsd''' → ls (with icons and colors)
| |
| * '''bat''' → cat (syntax highlighting)
| |
| * '''dust''' → du (disk usage visualization)
| |
| * '''duf''' → df (disk free with graphs)
| |
| * '''btop''' → top (modern system monitor)
| |
| * '''zoxide''' → cd (smart directory jumping)
| |
| * '''atuin''' → history (encrypted shell history)
| |
|
| |
| === tips.txt - Videogame Loading Screen Vibes ===
| |
| '''Location:''' <code>~/tips.txt</code> (symlinked from dotfiles) | '''[https://gist.github.com/ejfox/36c37cb4a9ae4bb3e18fe0b4636eedde View full tips.txt on GitHub Gist]'''
| |
|
| |
| All custom shortcuts organized by category. Type <code>tip</code> to see a random one.
| |
|
| |
| '''What's in it:'''
| |
| * All nvim fuzzy finder aliases (v, n, vs, vg, o, r)
| |
| * Oil.nvim filesystem editing tricks
| |
| * Complete tmux keybindings (pane selection M-1 through M-9)
| |
| * LSP navigation shortcuts
| |
| * Merge conflict resolution keys
| |
| * Git/GitHub utilities (ghpub, ??, commit)
| |
| * Clipboard/JSON tools (pbjson, jcurl, showcase)
| |
| * Python uv commands
| |
| * IRC commands
| |
|
| |
| ''Why it goes hard:'' Quick reference for commands you forget. CIPHER bot can read these for contextual suggestions.
| |
|
| |
| === CLI Nvim Fuzzy Finder Aliases ===
| |
| Single-letter commands that open nvim with fuzzy finding built in. Search happens at CLI level before nvim opens.
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| ! Alias !! Command !! Description
| |
| |-
| |
| | <code>v</code> || nvim || Just nvim
| |
| |-
| |
| | <code>n</code> || nvim . || Open current directory with oil.nvim browser
| |
| |-
| |
| | <code>vs</code> || fzf + bat preview || Fuzzy find files with syntax-highlighted preview
| |
| |-
| |
| | <code>vg</code> || ripgrep + fzf || Grep file contents, fuzzy find match, open file
| |
| |-
| |
| | <code>o</code> || fd + fzf (Obsidian) || Obsidian vault fuzzy finder, sorted by modification time
| |
| |-
| |
| | <code>r</code> || fd + fzf (~/code) || Recent files across ALL projects (the game changer)
| |
| |}
| |
|
| |
| '''The <code>r</code> command:'''
| |
| * Searches entire <code>~/code</code> directory for recently edited files
| |
| * Includes: .js .ts .vue .md .jsx .tsx .css .scss .py .go .rs
| |
| * Excludes all build artifacts (node_modules, dist, build, etc)
| |
| * Shows clean paths: <code>website2/components/Header.vue</code>
| |
| * Jump back to ANY file across ANY project instantly
| |
|
| |
| '''Why it goes hard:'''
| |
| * Search happens BEFORE nvim opens (faster workflow)
| |
| * Preview shows you what you're opening (no guessing)
| |
| * Uses tools already installed (fzf, bat, ripgrep)
| |
| * Single letter commands = muscle memory
| |
| * Ctrl-C out safely, nvim won't open empty
| |
|
| |
| == Email System ==
| |
|
| |
| === Neomutt + mbsync ===
| |
| Complete email workflow with AI enhancement:
| |
|
| |
| '''Setup:'''
| |
| * mbsync for Gmail IMAP sync
| |
| * Neomutt as terminal email client
| |
| * Keychain integration for secure auth
| |
|
| |
| '''AI Features:'''
| |
| * <code>ei</code> - Email insights and priority analysis
| |
| * <code>S</code> in neomutt - AI summarize current email
| |
| * Automatic categorization and spam filtering
| |
|
| |
| == Security ==
| |
|
| |
| === Secrets Management ===
| |
| * Secrets in <code>~/.env</code> (gitignored)
| |
| * App passwords in macOS Keychain
| |
| * Wiki credentials in <code>~/.claude-secrets</code>
| |
|
| |
| === Security Cleanup (Nov 2025) ===
| |
| 9 API keys scrubbed from git history:
| |
| * Anthropic, OpenRouter, OpenAI keys
| |
| * Twitter OAuth tokens
| |
| * Supabase anon key
| |
|
| |
| == Installation ==
| |
|
| |
| Repository: https://github.com/ejfox/dotfiles
| |
|
| |
| <pre>
| |
| git clone https://github.com/ejfox/dotfiles.git ~/.dotfiles
| |
| cd ~/.dotfiles
| |
| ./sync-dotfiles.sh
| |
| </pre>
| |
|
| |
| == The Philosophy ==
| |
|
| |
| === Minimalism as Cognitive Offloading ===
| |
| Every visual element that isn't essential is cognitive load. The monochrome approach keeps your visual cortex available for actual work.
| |
|
| |
| === Automation as Anxiety Reduction ===
| |
| AI handles triage. Email filtering removes uncertainty. The startup dashboard prevents "what did I forget?" anxiety.
| |
|
| |
| === Immediacy Over Perfection ===
| |
| Shortcuts prioritize immediate access over complete functionality. Small, frequent commits with "good enough" messages beat perfect commits that never happen.
| |
|
| |
| === Theme Agnosticism as Future-Proofing ===
| |
| Monochrome and geometric symbols remain functional regardless of OS design changes. Decoupled from aesthetic fashions.
| |
|
| |
| === Intelligence at the Edges ===
| |
| AI handles pattern recognition and filtering. Human decision-making stays human. The system never makes choices for you.
| |
|
| |
| ----
| |
| [[Category:Configuration]]
| |
| [[Category:Technical Systems]]
| |
| [[Category:Documentation]]
| |
|
| |
| {{Navbox Technical}}
| |