Dotfiles: Difference between revisions
Restore complete documentation with all sections |
Fix inaccuracies: remove nonexistent tmux bindings (C-a K/S), add usage logging, update file structure, fix tips.txt path |
||
| (6 intermediate revisions by the same user not shown) | |||
| Line 25: | Line 25: | ||
* Modern CLI aliases (lsd, bat, dust, duf, btop) | * Modern CLI aliases (lsd, bat, dust, duf, btop) | ||
* Lazy-loaded tools (conda, zoxide, atuin) for performance | * Lazy-loaded tools (conda, zoxide, atuin) for performance | ||
* UV Python package management | * UV Python package management | ||
'''Notable Aliases:''' | '''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 | 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 == | == Terminal & Multiplexer == | ||
| Line 69: | Line 114: | ||
* Geometric pane count indicators (⚌ ☰ ⚍ ⚏ ☷) | * Geometric pane count indicators (⚌ ☰ ⚍ ⚏ ☷) | ||
* Centered window list | * Centered window list | ||
* Prefix indicator: ◼ (when active) | * Prefix indicator: ◼ (when active) | ||
'''Key Bindings:''' | '''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: | |||
'''Active Popups:''' | |||
* '''C-a g''' → Lazygit popup in current directory (85% screen) | |||
* '''C-a ?''' → Tips cheatsheet via fzf popup | |||
* '''C-a Space''' → Open pane scrollback in nvim | |||
''Note: Yazi and scratch terminal popups were removed. tmux-thumbs is disabled.'' | |||
=== 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 == | == Development Environment == | ||
=== Neovim === | === Neovim (0.11+) === | ||
LazyVim configuration with minimal aesthetics | 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 (DISABLED) | |||
<pre> | |||
Currently disabled. C-a Space opens scrollback in nvim instead. | |||
</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) | |||
=== Usage Logging System (Jan 2026) === | |||
Tracks shell/nvim/tmux activity for pattern analysis. | |||
'''Quick Commands:''' | |||
<pre> | |||
usage-summary # Today's stats | |||
usage-summary 2025-01-20 # Specific day | |||
usage-analyze # Pattern analysis (last 7 days) | |||
</pre> | |||
'''Log Location:''' <code>~/.local/share/usage-logs/{shell,nvim,tmux}/YYYY-MM-DD.jsonl</code> | |||
'''What's Captured:''' | |||
* Shell: commands, duration, exit codes, directory changes | |||
* Nvim: file opens/saves, mode durations, LSP events | |||
* Tmux: pane/window operations, mode changes | |||
'''Use Cases:''' | |||
* Find alias candidates (frequent commands) | |||
* Identify hot files for quick-access | |||
* Analyze editing patterns (insert vs normal time) | |||
=== | === tips.txt - Videogame Loading Screen Vibes === | ||
'''Location:''' <code>~/.dotfiles/docs/tips.txt</code> | '''[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> | |||
=== | === File Structure (Jan 2026) === | ||
<pre> | |||
~/.dotfiles/ | |||
├── .zshrc, .tmux.conf # Shell configs at root | |||
├── .config/ # XDG app configs (nvim, ghostty, yazi, lazygit) | |||
├── bin/ # Custom scripts (ai-commit, morning-ritual, usage-*) | |||
├── lib/ # Shared shell libraries | |||
├── docs/ # Secondary documentation | |||
│ ├── tips.txt # Keybinding cheatsheet | |||
│ ├── WORKFLOWS.md # CLI pipelines | |||
│ └── HISTORY.md # Changelog | |||
├── README.md # Main documentation | |||
└── CLAUDE.md # AI assistant context | |||
</pre> | |||
''Note: Legacy directories (.atom, .vim, .subversion) removed Jan 2026.'' | |||
== The Philosophy == | |||
== The | |||
=== Minimalism as Cognitive Offloading === | === 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 === | === Automation as Anxiety Reduction === | ||
AI handles triage. Email filtering removes uncertainty. The startup dashboard prevents "what did I forget?" anxiety. | |||
The startup | |||
=== Immediacy Over Perfection === | === 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 === | === Theme Agnosticism as Future-Proofing === | ||
Monochrome and geometric symbols remain functional regardless of OS design changes. Decoupled from aesthetic fashions. | |||
=== Intelligence at the Edges === | === Intelligence at the Edges === | ||
AI handles pattern recognition and filtering. Human decision-making stays human. The system never makes choices for you. | |||
---- | |||
''Last updated: January 26, 2026'' | |||
[[Category:Configuration]] | [[Category:Configuration]] | ||
[[Category: | [[Category:Technical Systems]] | ||
[[Category:Documentation]] | [[Category:Documentation]] | ||
{{Navbox Technical}} | |||
Latest revision as of 16:57, 26 January 2026
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:
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
CIPHER Morning Ritual (Dec 2025)
AI-powered daily planning system that runs on first terminal boot.
Location: ~/.dotfiles/bin/morning-ritual
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:
.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
CIPHER personality: Terse, insightful, William Gibson meets Unix philosophy. Dry wit with competence. Geometric symbols: ◆ ◇ ○ ●
Usage:
morning-ritual # Force run rm /tmp/morning_ritual/last_run && morning-ritual # Reset today
AI-Powered Git Commits (Dec 2025)
Location: ~/.dotfiles/bin/ai-commit
Usage: In lazygit, press a key after staging files.
Flow:
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
Lazygit config: ~/.config/lazygit/config.yml
customCommands:
- key: "a"
context: "files"
description: "AI commit (fzf + Claude)"
subprocess: true
command: 'MSG=$(ai-commit) && git commit -m "$MSG"'
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:
Prefix: C-a Windows: Alt+h/l (prev/next) Panes: hjkl (vim-style) Resize: HJKL (capital letters) Split: - (horizontal), _ (vertical)
Tmux 2025 Popup Workflows (Nov 2025)
Modern popup workflows that float over your pane layout:
Active Popups:
- C-a g → Lazygit popup in current directory (85% screen)
- C-a ? → Tips cheatsheet via fzf popup
- C-a Space → Open pane scrollback in nvim
Note: Yazi and scratch terminal popups were removed. tmux-thumbs is disabled.
Mermaid-ASCII Integration (Sept 2025)
Send ASCII diagrams to tmux panes.
Functions:
send-mermaid <pane>- Send diagram to panetest-mermaid [pane]- Quick test (defaults to 0:6.2)setup-diagram-listener <pane>- Auto-refresh display
Critical rules:
- Use multiline syntax (not semicolons)
- Always use
-aflag for ASCII-only mode
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
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
- Open parent directory <CR> Open file/directory g. Toggle hidden files
vim-tmux-navigator - Seamless navigation
Ctrl-h/j/k/l Move between nvim splits AND tmux panes
tmux-thumbs - Vimium-style hints (DISABLED)
Currently disabled. C-a Space opens scrollback in nvim instead.
nvim-dap - Debugging
<leader>db Toggle breakpoint <leader>dc Start/continue <leader>di Step into <leader>do Step over
kulala.nvim - HTTP client
<CR> Execute request under cursor [r / ]r Jump between requests <leader>rc Copy as cURL
git-conflict.nvim - Merge conflicts
co Choose ours ct Choose theirs cb Choose both [x / ]x Jump between conflicts
Vulpes Shader System (Nov 2025)
Custom GLSL shaders for Ghostty terminal.
Location: ~/.config/ghostty/shaders/
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: ~/.config/nvim/lua/plugins/mini-animate.lua
Subtle animations:
- Cursor: 80ms cubic easing
- Resize: 60ms cubic
- Open/Close: 60ms cubic
- Scroll: DISABLED
Sketchybar
CIPHER Coach (Nov 2025)
Location: ~/.config/sketchybar/plugins/next_event.sh
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: ~/.config/sketchybar/plugins/battery.sh
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)
Usage Logging System (Jan 2026)
Tracks shell/nvim/tmux activity for pattern analysis.
Quick Commands:
usage-summary # Today's stats usage-summary 2025-01-20 # Specific day usage-analyze # Pattern analysis (last 7 days)
Log Location: ~/.local/share/usage-logs/{shell,nvim,tmux}/YYYY-MM-DD.jsonl
What's Captured:
- Shell: commands, duration, exit codes, directory changes
- Nvim: file opens/saves, mode durations, LSP events
- Tmux: pane/window operations, mode changes
Use Cases:
- Find alias candidates (frequent commands)
- Identify hot files for quick-access
- Analyze editing patterns (insert vs normal time)
tips.txt - Videogame Loading Screen Vibes
Location: ~/.dotfiles/docs/tips.txt | View full tips.txt on GitHub Gist
All custom shortcuts organized by category. Type tip 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.
| Alias | Command | Description |
|---|---|---|
v |
nvim | Just nvim |
n |
nvim . | Open current directory with oil.nvim browser |
vs |
fzf + bat preview | Fuzzy find files with syntax-highlighted preview |
vg |
ripgrep + fzf | Grep file contents, fuzzy find match, open file |
o |
fd + fzf (Obsidian) | Obsidian vault fuzzy finder, sorted by modification time |
r |
fd + fzf (~/code) | Recent files across ALL projects (the game changer) |
The r command:
- Searches entire
~/codedirectory 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:
website2/components/Header.vue - 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:
ei- Email insights and priority analysisSin neomutt - AI summarize current email- Automatic categorization and spam filtering
Security
Secrets Management
- Secrets in
~/.env(gitignored) - App passwords in macOS Keychain
- Wiki credentials in
~/.claude-secrets
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
git clone https://github.com/ejfox/dotfiles.git ~/.dotfiles cd ~/.dotfiles ./sync-dotfiles.sh
File Structure (Jan 2026)
~/.dotfiles/ ├── .zshrc, .tmux.conf # Shell configs at root ├── .config/ # XDG app configs (nvim, ghostty, yazi, lazygit) ├── bin/ # Custom scripts (ai-commit, morning-ritual, usage-*) ├── lib/ # Shared shell libraries ├── docs/ # Secondary documentation │ ├── tips.txt # Keybinding cheatsheet │ ├── WORKFLOWS.md # CLI pipelines │ └── HISTORY.md # Changelog ├── README.md # Main documentation └── CLAUDE.md # AI assistant context
Note: Legacy directories (.atom, .vim, .subversion) removed Jan 2026.
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.
Last updated: January 26, 2026
| ⚡ Technical | |
|---|---|
| Core | Technical · CLI · Dotfiles · Nvim · SSH · VPS |
| Tools | Sketchybar · ArchiveBox · ThinkPad Linux |
| Systems | Automation · Personal APIs · Quantified Self |
| Reference | Runbooks · New Computer Runbook · Syntax guide |