|
|
| (2 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 |
| * Smart git commit with LLM integration
| |
| * UV Python package management | | * UV Python package management |
|
| |
|
| '''Notable Aliases:''' | | '''Notable Aliases:''' |
| alias l='lsd -lah' # Enhanced ls with icons
| | <pre> |
| alias c='clear && refresh' # Clear and refresh
| | alias l='lsd -lah' # Enhanced ls with icons |
| alias m='neomutt' # Email client
| | alias c='clear && refresh' # Clear and refresh |
| alias ei='email-insights' # AI email analysis
| | alias m='neomutt' # Email client |
| alias commit='...' # LLM-powered git commits
| | alias ei='email-insights' # AI email analysis |
| | </pre> |
|
| |
|
| === Startup Script (.startup.sh) === | | === CIPHER Morning Ritual (Dec 2025) === |
| AI-powered Message of the Day system providing contextual information: | | AI-powered daily planning system that runs on first terminal boot. |
|
| |
|
| '''Components:''' | | '''Location:''' <code>~/.dotfiles/bin/morning-ritual</code> |
| * '''Tasks''' - Integration with Things CLI
| |
| * '''Calendar''' - icalBuddy for today's events
| |
| * '''Recent Work''' - Git repositories from ~/code
| |
| * '''Recent Notes''' - Obsidian markdown files
| |
| * '''Email Summary''' - AI-filtered unread messages
| |
| * '''AI Insights''' - Personalized productivity suggestions (cached 3hr)
| |
|
| |
|
| '''Intelligence Features:''' | | '''What it does:''' |
| * Filters out financial spam automatically
| | CIPHER analyzes your entire context and suggests 12 pomodoros RANKED BY PRIORITY. Pick your top 3 via fzf multi-select. |
| * Categorizes emails (🤖 dev, ⚠️ urgent, 📅 calendar)
| |
| * Skips in tmux sessions unless forced
| |
| * Background email sync
| |
| * Zen mode aware
| |
|
| |
|
| === Zen Mode (.zen-mode.sh) === | | '''Context gathered:''' |
| System-wide minimal interface toggle:
| | * Things.app tasks (Today + Anytime lists) |
| * Hides menu bars and dock
| | * Calendar events via icalBuddy |
| * Disables notifications
| | * Recent git activity across ~/code |
| * Creates `/tmp/.zen-mode-state` flag
| | * Command history patterns |
| * Integrates with tmux, nvim, and startup script
| | * 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 |
| * Subtle arrow indicators for active pane
| |
| * Prefix indicator: ◼ (when active) | | * Prefix indicator: ◼ (when active) |
|
| |
|
| '''Key Bindings:''' | | '''Key Bindings:''' |
| Prefix: C-a
| | <pre> |
| Windows: Alt+h/l (prev/next)
| | Prefix: C-a |
| Panes: hjkl (vim-style)
| | Windows: Alt+h/l (prev/next) |
| Resize: HJKL (capital letters)
| | Panes: hjkl (vim-style) |
| Split: - (horizontal), _ (vertical)
| | Resize: HJKL (capital letters) |
| | Split: - (horizontal), _ (vertical) |
| | </pre> |
|
| |
|
| == Email System == | | === 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) |
|
| |
|
| === Neomutt + mbsync ===
| | '''Pane Capture:''' |
| Complete email workflow with AI enhancement:
| | * '''C-a C-y''' → Yank entire pane to clipboard |
| | * '''C-a M-y''' → Yank last 200 lines to clipboard |
|
| |
|
| '''Setup:'''
| | === Mermaid-ASCII Integration (Sept 2025) === |
| * mbsync for Gmail IMAP sync
| | Send ASCII diagrams to tmux panes. |
| * Neomutt as terminal email client
| |
| * Keychain integration for secure auth
| |
| * Background auto-sync
| |
|
| |
|
| '''AI Features:''' | | '''Functions:''' |
| * Email subject filtering and cleanup | | * <code>send-mermaid <pane></code> - Send diagram to pane |
| * Automatic categorization | | * <code>test-mermaid [pane]</code> - Quick test (defaults to 0:6.2) |
| * Spam/financial email removal | | * <code>setup-diagram-listener <pane></code> - Auto-refresh display |
| * Inbox insights and priority analysis
| |
| * Per-email AI summarization (Press 'S')
| |
|
| |
|
| '''Workflow:''' | | '''Critical rules:''' |
| m # Open neomutt
| | * Use multiline syntax (not semicolons) |
| ei # AI inbox analysis
| | * Always use <code>-a</code> flag for ASCII-only mode |
| 1-4 # Quick filters (unread, replied, sent, flagged)
| | <pre> |
| / # Search
| | echo "graph TD |
| gg/G # First/last email
| | A[Start] --> B[Process] |
| S # AI summarize current email
| | 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. |
| * Auto dark/light mode switching
| |
| * Zen mode integration
| |
| * Minimal statusline
| |
| * Hardtime plugin for vim skill building
| |
| | |
| === Git Integration ===
| |
| * Smart commit messages via LLM
| |
| * Git status in sketchybar
| |
| * LFS support for large files
| |
| * Conventional commit formatting
| |
| | |
| == 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)
| |
| | |
| == Application Configurations ==
| |
|
| |
|
| === Ghostty Terminal ===
| | '''0.11 Features (Nov 2025):''' |
| Modern terminal emulator settings:
| | * Built-in LSP auto-completion (opt-in) |
| * Opacity and blur effects | | * Async treesitter parsing |
| * Font: SF Mono | | * Virtual lines for diagnostics |
| * Theme synchronization | | * Shell prompt jumping with [[ and ]] in terminal |
| * Performance optimizations | |
|
| |
|
| === Sketchybar === | | === Essential Plugins (Nov 2025) === |
| macOS menu bar replacement:
| |
| * Git status indicators
| |
| * Battery with percentage
| |
| * Productivity metrics
| |
| * Claude usage tracking
| |
| * Minimal aesthetic matching tmux
| |
|
| |
|
| === File Management ===
| | '''oil.nvim''' - Filesystem as a buffer |
| * '''Yazi''' - Terminal file manager without color distractions
| | <pre> |
| * '''Btop''' - System monitor with transparent background
| | - Open parent directory |
| | <CR> Open file/directory |
| | g. Toggle hidden files |
| | </pre> |
|
| |
|
| == Automation & Intelligence ==
| | '''vim-tmux-navigator''' - Seamless navigation |
| | <pre> |
| | Ctrl-h/j/k/l Move between nvim splits AND tmux panes |
| | </pre> |
|
| |
|
| === LLM Integration ===
| | '''tmux-thumbs''' - Vimium-style hints |
| AI enhancement throughout the system:
| | <pre> |
| * Startup insights with CIPHER persona
| | prefix + Space Show letter hints on visible text |
| * Email categorization and summarization
| | </pre> |
| * Commit message generation
| |
| * Context-aware suggestions
| |
|
| |
|
| === Background Processes ===
| | '''nvim-dap''' - Debugging |
| * Email sync every 60 seconds
| | <pre> |
| * Git status updates
| | <leader>db Toggle breakpoint |
| * Theme synchronization
| | <leader>dc Start/continue |
| * Cache management (3-hour cycles)
| | <leader>di Step into |
| | <leader>do Step over |
| | </pre> |
|
| |
|
| == Installation & Sync ==
| | '''kulala.nvim''' - HTTP client |
| | <pre> |
| | <CR> Execute request under cursor |
| | [r / ]r Jump between requests |
| | <leader>rc Copy as cURL |
| | </pre> |
|
| |
|
| Repository: https://github.com/ejfox/dotfiles
| | '''git-conflict.nvim''' - Merge conflicts |
| | <pre> |
| | co Choose ours |
| | ct Choose theirs |
| | cb Choose both |
| | [x / ]x Jump between conflicts |
| | </pre> |
|
| |
|
| '''Setup Process:'''
| | === Vulpes Shader System (Nov 2025) === |
| git clone https://github.com/ejfox/dotfiles.git ~/.dotfiles
| | Custom GLSL shaders for Ghostty terminal. |
| cd ~/.dotfiles
| |
| ./sync-dotfiles.sh
| |
|
| |
|
| '''Dependencies:''' | | '''Location:''' <code>~/.config/ghostty/shaders/</code> |
| * Oh My Zsh + Powerlevel10k
| |
| * Homebrew packages (neomutt, mbsync, llm, etc.)
| |
| * LLM CLI tool with OpenAI API
| |
| * Things app for task management
| |
| * Obsidian for note-taking
| |
|
| |
|
| == Security Notes ==
| | '''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 |
|
| |
|
| * No secrets committed to repository
| | '''Reload:''' Cmd+Shift+, in Ghostty |
| * Passwords stored in macOS Keychain
| |
| * App-specific passwords for Gmail
| |
| * Secure email authentication via keychain lookup commands
| |
|
| |
|
| == Recent Updates == | | === mini.animate (Nov 2025) === |
| | '''Location:''' <code>~/.config/nvim/lua/plugins/mini-animate.lua</code> |
|
| |
|
| Latest improvements include:
| | Subtle animations: |
| * Email system with AI filtering | | * Cursor: 80ms cubic easing |
| * Rbenv migration from RVM | | * Resize: 60ms cubic |
| * Enhanced startup script with email integration | | * Open/Close: 60ms cubic |
| * Monochrome neomutt configuration | | * Scroll: DISABLED |
| * Background sync automation
| |
| * Improved repo detection in startup
| |
|
| |
|
| == The Daily Workflow Field Guide == | | == Sketchybar == |
|
| |
|
| ''A survival manual for your future self when you inevitably forget how your own terminal works.'' | | === CIPHER Coach (Nov 2025) === |
| | '''Location:''' <code>~/.config/sketchybar/plugins/next_event.sh</code> |
|
| |
|
| === The Daily Workflow ===
| | When no calendar events in next 4 hours, shows CIPHER-selected task from Things. |
|
| |
|
| When you open a terminal, your startup script automatically runs a custom dashboard that shows you everything you need to know right now. It pulls from Things for your tasks, icalBuddy for calendar events, scans your ~/code directory for recent git repos, checks Obsidian for recent notes, and gives you an AI-powered email summary that filters out all the financial spam automatically.
| | '''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 |
|
| |
|
| The AI (using your CIPHER persona) gives you cryptic but helpful daily insights cached for 3 hours. If you're in a tmux session, it won't spam you with this info unless you explicitly run `~/.startup.sh --force`.
| | === Battery Fade Effect === |
| | '''Location:''' <code>~/.config/sketchybar/plugins/battery.sh</code> |
|
| |
|
| === Your Custom Commands ===
| | Smooth gradient from black to red as battery drains (20min → 0min). |
|
| |
|
| When you want to check email, just type `m` to open neomutt. Inside neomutt, press `1` to see only unread emails, `2` for emails you've replied to, `3` to jump to sent mail, `4` for flagged items, and `0` to show everything. If an email looks important but you don't want to read the whole thing, press `S` to get an AI summary.
| | == Modern CLI Tools == |
|
| |
|
| For deeper email analysis when you have a pile of unread messages, run `ei` (email-insights). This feeds your recent email subjects to the AI and gives you a prioritized breakdown of what actually needs your attention versus what's just noise.
| | 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) |
|
| |
|
| Your git workflow is enhanced with an AI-powered commit command. Just type `commit` and it'll analyze your staged changes, generate 10 different commit message options using conventional commit format, and let you pick one with fzf. No more staring at a blank commit message prompt.
| | == Email System == |
|
| |
|
| === Terminal Navigation === | | === Neomutt + mbsync === |
| | Complete email workflow with AI enhancement: |
|
| |
|
| Your tmux setup is designed to be completely monochrome and distraction-free. The prefix key is `C-a` (not the default C-b). Use `Alt+h` and `Alt+l` to switch between windows quickly without hitting the prefix. For panes, it's pure vim: `hjkl` to navigate, `HJKL` (capital) to resize. Split with `-` for horizontal or `_` for vertical.
| | '''Setup:''' |
| | * mbsync for Gmail IMAP sync |
| | * Neomutt as terminal email client |
| | * Keychain integration for secure auth |
|
| |
|
| The status bar shows geometric symbols for pane counts: ⚌ for 2 panes, ☰ for 3, ⚍ for 4, etc. When you're using the prefix key, you'll see a ◼ indicator. The whole thing is centered like your code editor and completely theme-agnostic.
| | '''AI Features:''' |
| | * <code>ei</code> - Email insights and priority analysis |
| | * <code>S</code> in neomutt - AI summarize current email |
| | * Automatic categorization and spam filtering |
|
| |
|
| === Zen Mode System === | | == Security == |
|
| |
|
| When you need deep focus, run `~/.zen-mode.sh` to hide the dock, menu bar, and disable notifications system-wide. This creates a `/tmp/.zen-mode-state` file that all your other tools check for. Your startup script won't show, tmux and nvim know to be extra minimal, and everything just gets out of your way. Run the script again to toggle back.
| | === Secrets Management === |
| | * Secrets in <code>~/.env</code> (gitignored) |
| | * App passwords in macOS Keychain |
| | * Wiki credentials in <code>~/.claude-secrets</code> |
|
| |
|
| === Email System Deep Dive === | | === Security Cleanup (Nov 2025) === |
| | 9 API keys scrubbed from git history: |
| | * Anthropic, OpenRouter, OpenAI keys |
| | * Twitter OAuth tokens |
| | * Supabase anon key |
|
| |
|
| Your email setup is a three-part system: mbsync pulls from Gmail in the background, neomutt provides the interface, and AI processes everything to keep you sane.
| | == Installation == |
|
| |
|
| The background sync happens automatically, but you can manually sync with `Ctrl+S` inside neomutt. Your startup script shows a smart summary that categorizes emails: 🤖 for dev notifications (GitHub, CI failures), ⚠️ for urgent items, 📅 for calendar stuff, and → for normal emails. Financial emails, payment failures, and subscription spam are automatically filtered out.
| | Repository: https://github.com/ejfox/dotfiles |
| | |
| The AI email summarization happens in two places. The startup summary processes recent email subjects and cleans up encoding artifacts while filtering spam. The deeper `ei` command analyzes patterns in your inbox and suggests workflows for handling everything efficiently.
| |
| | |
| Inside neomutt, everything is monochrome to match your tmux aesthetic. No colors, just reverse highlighting for the current selection. Raw emails are shown in chronological order with no threading - pure and simple. Auto-mark-read is enabled so emails mark themselves read as you scroll past them.
| |
| | |
| === Shell Customizations ===
| |
| | |
| Your zsh is heavily customized but loads fast through lazy loading. Tools like conda, zoxide, and atuin only initialize when you first use them. Your PATH prioritizes modern replacements: `lsd` instead of `ls`, `bat` instead of `cat`, `dust` instead of `du`.
| |
| | |
| The `c` command doesn't just clear the screen - it clears and runs your refresh function. The `l` command gives you a detailed directory listing with icons and human-readable sizes. When you want to jump directories, just type `z` followed by part of a path name - zoxide will figure out where you meant to go.
| |
| | |
| Your Ruby environment uses rbenv instead of RVM (you migrated away from RVM chaos). Python uses uv for everything - it's aliased to replace pip, pip3, python, and venv commands with helpful reminders to use uv instead.
| |
| | |
| === Modern CLI Arsenal ===
| |
| | |
| You've replaced most traditional Unix commands with modern alternatives. `lsd` gives you colored ls output with file type icons. `bat` provides syntax highlighting when viewing files. `dust` shows disk usage visually instead of boring du output. `duf` presents disk free information with actual graphs. `btop` replaces top with a modern TUI that looks like a sci-fi interface.
| |
| | |
| These aren't just aliases - they're fundamental workflow changes. When you `cat` a code file, you get syntax highlighting automatically. When you `ls` a directory, you see file types at a glance. When you check disk usage, you get immediate visual understanding instead of scanning numbers.
| |
| | |
| === Development Environment ===
| |
| | |
| Your nvim setup is LazyVim with minimal customizations. It auto-detects light/dark mode and switches themes accordingly. Zen mode integration means it goes completely minimal when you're in focus mode. The statusline is stripped down to essentials only.
| |
| | |
| Sketchybar replaces the default macOS menu bar with custom widgets. It shows git status for your current directory, battery percentage, and tracks how much you're using Claude API. Everything matches your minimal aesthetic - no flashy colors or animations.
| |
| | |
| === The AI Integration Layer ===
| |
| | |
| Throughout your system, AI provides contextual assistance without being intrusive. The startup script uses your CIPHER persona to give daily insights. Email processing removes spam and categorizes everything intelligently. Git commits get smart suggestions based on your actual changes.
| |
| | |
| The key is that AI enhances your workflow without taking over. It filters noise, suggests actions, and provides context - but you're always in control. When the LLM is unavailable, everything falls back to sensible defaults.
| |
| | |
| === File and Process Management ===
| |
| | |
| Yazi handles file management in the terminal with vim-like navigation but no distracting colors. Everything is about content and structure, not visual candy. Btop monitors system processes with transparency effects that integrate with your desktop.
| |
| | |
| For search, ripgrep (rg) handles text searching with blazing speed. The startup script uses it extensively to scan through your email and notes quickly.
| |
| | |
| === Backup and Recovery ===
| |
| | |
| Your entire setup is version controlled in the dotfiles repo. The sync script handles symlinking everything to the right places. If you're setting up a new machine or recovering from a system wipe, just clone the repo and run the sync script.
| |
| | |
| All secrets are in macOS Keychain, never committed to git. Email authentication goes through keychain lookup commands. Your app passwords and API keys are safely stored in the system keychain and retrieved dynamically.
| |
| | |
| === Troubleshooting Your Own System ===
| |
| | |
| If neomutt throws library errors, run `brew reinstall neomutt` to fix dependency issues. If the startup script seems slow, check if the AI reflection cache is stale - it's in `/tmp/startup_cache/reflection_cache.txt` and refreshes every 3 hours.
| |
| | |
| If email isn't syncing, manually run `mbsync gmail` to see error messages. The most common issue is keychain access - make sure your app password is stored correctly with the security command.
| |
| | |
| When tmux keybindings feel wrong, remember your prefix is `C-a`, not the default `C-b`. If you're getting weird characters in terminal output, check that your TERM variable is set to "xterm-256color".
| |
| | |
| === The Philosophy in Practice ===
| |
| | |
| Everything in your setup follows the principle of minimal visual noise with maximum functional density. Colors are used sparingly and meaningfully. Animations are disabled. Information is presented geometrically and consistently across all tools.
| |
| | |
| The goal is a computing environment that stays out of your way but provides powerful capabilities when needed. AI handles the tedious filtering and categorization. Modern tools provide better UX than their Unix ancestors. Everything is designed for your future self to understand and maintain.
| |
|
| |
|
| When you inevitably customize something new, follow the same principles: monochrome where possible, geometric symbols for status, intelligent defaults, and always provide a way to get back to baseline functionality.
| | <pre> |
| | git clone https://github.com/ejfox/dotfiles.git ~/.dotfiles |
| | cd ~/.dotfiles |
| | ./sync-dotfiles.sh |
| | </pre> |
|
| |
|
| == The Meta-Philosophy: Why This Madness == | | == The Philosophy == |
|
| |
|
| === 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. |
| Your setup isn't minimal for aesthetic reasons - it's minimal because every visual element that isn't essential is cognitive load. When you're deep in code or writing, your brain shouldn't be parsing bright colors, processing animations, or filtering visual noise. The monochrome approach across tmux, neomutt, and your terminal isn't about looking cool - it's about keeping your visual cortex available for the actual work.
| |
| | |
| The geometric symbols (◆ ◇ ○ ▪) aren't decoration. They're information dense and instantly recognizable without language processing. Your brain can distinguish between ◆ (task) and ◇ (repo) faster than it can read "Task:" and "Repository:". The symbols create a visual vocabulary that operates below conscious thought.
| |
|
| |
|
| === 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 AI integration throughout your system serves a specific psychological function: it handles the anxiety-inducing task of triage. Email anxiety comes from not knowing what's important in the pile. Your AI filtering removes that uncertainty by automatically categorizing and surfacing what actually needs attention.
| |
| | |
| The startup script's daily dashboard prevents the morning anxiety spiral of "what did I forget to do?" by presenting a complete contextual picture immediately. You don't have to remember to check Things, or icalBuddy, or scan your recent repos - the system remembers for you and presents it as a unified briefing. | |
|
| |
|
| === 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. |
| Your shortcuts and aliases prioritize immediate access over complete functionality. `m` for email, `c` for clear-and-refresh, `ei` for email insights - these aren't trying to be comprehensive commands. They're muscle memory shortcuts for the 80% use case. When you need the full power of neomutt or a complex git operation, you can still access it, but the common actions happen with minimal keystrokes.
| |
| | |
| This extends to the AI commit messages. The goal isn't perfect commit messages - it's removing the friction of writing commit messages so you actually commit more frequently. Small, frequent commits with "good enough" messages are better than perfect commits that never happen because writing them is annoying.
| |
|
| |
|
| === 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. |
| Your monochrome approach isn't just about minimalism - it's about sustainability. Color themes go out of style. Dark mode and light mode preferences change. New operating systems introduce new design languages. By building everything around geometric shapes and reverse highlighting instead of specific colors, your setup remains functional and coherent regardless of the underlying theme.
| |
| | |
| When macOS introduces some new design paradigm in three years, your tmux will still look intentional. When you switch between light and dark mode, everything still works visually. You've decoupled your information architecture from the aesthetic fashions of the moment.
| |
|
| |
|
| === 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. |
|
| |
|
| The AI integration follows a specific principle: smart filtering and summarization, but human decision-making. The system never makes choices for you - it presents better information so you can make better choices. Email gets categorized and filtered, but you still decide what to read. Git commit messages get suggested, but you pick which one to use.
| | ---- |
| | |
| This prevents the learned helplessness that comes from over-automation. You remain in control of your tools rather than becoming dependent on them. The AI handles the tedious work of pattern recognition and information processing, but the creative and decision-making work stays human.
| |
| | |
| === Mechanical Sympathy for Digital Tools ===
| |
| | |
| Your approach treats software like physical tools that need maintenance and understanding. Just as a craftsperson knows their tools intimately, you've configured your digital environment to be predictable, maintainable, and extensible. Every customization has a clear purpose and can be easily modified or removed.
| |
| | |
| The symlink approach to dotfiles, the keychain-based authentication, the modular AI components - these aren't just technical choices. They reflect a philosophy that your computing environment should be something you understand and control, not a black box that occasionally breaks in mysterious ways.
| |
| | |
| === Sustainable Productivity ===
| |
| | |
| The entire system is designed around the recognition that productivity isn't about working harder - it's about reducing friction for the work that matters. Every automation, every shortcut, every piece of AI integration serves the goal of getting repetitive or anxiety-inducing tasks out of your way so you can focus on creative and analytical work.
| |
| | |
| The zen mode system acknowledges that sometimes the productivity system itself becomes a distraction. When you need deep focus, everything gets out of the way. The tools are there when you need them, invisible when you don't.
| |
| | |
| === Preparedness for Cognitive Shifts ===
| |
| | |
| Your documentation approach (like this field guide) acknowledges that you won't always remember why you made certain choices. Future you might have different priorities, different cognitive patterns, or simply different muscle memory. By documenting not just what each piece does but why it exists and how it fits into the broader philosophy, you're giving your future self the context needed to modify the system intelligently rather than just breaking things.
| |
| | |
| The setup is designed to be understandable by someone who thinks like you but doesn't remember the specific decisions. It's cognitive continuity across time.
| |
| | |
| === Technology as Extension of Thought ===
| |
| | |
| Ultimately, your dotfiles configuration treats your computing environment as an extension of your cognitive processes. The terminal isn't just a tool you use - it's part of how you think about problems. The AI integration isn't separate from your intelligence - it's an extension that handles the pattern matching and information filtering that your brain would otherwise have to do manually.
| |
| | |
| This is why the aesthetic choices matter as much as the functional ones. A cluttered, inconsistent, or unpredictable interface creates cognitive friction. A clean, consistent, predictable interface becomes transparent, letting you focus on the actual work rather than the meta-work of managing your tools.
| |
| | |
| The geometric minimalism, the AI filtering, the keyboard-driven workflows, the monochrome aesthetic - these aren't separate features. They're all part of creating a computing environment that amplifies human intelligence rather than competing with it for attention.
| |
| | |
| --- | |
| [[Category:Configuration]] | | [[Category:Configuration]] |
| [[Category:Terminal]] | | [[Category:Technical Systems]] |
| [[Category:Productivity]]
| |
| [[Category:Documentation]] | | [[Category:Documentation]] |
| | |
| | {{Navbox Technical}} |
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)
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:
send-mermaid <pane> - Send diagram to pane
test-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
-a flag 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
prefix + Space Show letter hints on visible text
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)
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 analysis
S in 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
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.