- Split
.claude/settings.jsoninto per-profile files:profiles/personal/claude-settings.json(with obsidian/anthropic skills) andprofiles/work/claude-settings.json(minimal, onlytypescript-lsp) install.shno longer symlinks a shared.claude/settings.json; each profile supplies its own- Deleted the now-unused shared
.claude/settings.json
- Enterprise (work) account blocks the obsidian/anthropic skill marketplaces, so those plugin entries live only in the personal profile to avoid startup warnings at work
- Kept
typescript-lsp@claude-plugins-officialenabled in both profiles (official marketplace, unlikely to be blocked) — adjust if enterprise flags it - Plugin-split via profile rather than a jq-merge step: duplication is ~5 lines of
model/statusLineand keeps install.sh simple
- After pulling on any existing machine, re-run
./install.sh <profile>to repoint~/.claude/settings.jsonat the new profile file - On fresh machine: after
install.sh, startclaudeand run/plugin marketplace add kepano/obsidian-skills,/plugin marketplace add pablo-mano/Obsidian-CLI-skill,/plugin marketplace add anthropics/skillsto actually fetch the plugin contents (the settings file only declares which are enabled)
- Added Emacs MCP server integration for external Claude Code sessions
- MCP tools server starts at Emacs startup on fixed port 21567
my/claude-code-register-projectregisters project context via emacsclient- Shell wrapper
claude()in .zshrc auto-registers project and passes--mcp-config
- Claude Code in terminal now has access to Emacs tools: imenu, xref, tree-sitter, project info
- Use shell wrapper + emacsclient instead of static
.mcp.json— each project needs its own session ID - Graceful fallback: if Emacs isn't running, Claude Code launches without MCP tools
- Modernized Emacs config: moved
.emacs→.emacs.d/init.el, replaced third-party packages with Emacs 30 built-ins and lighter alternatives- Ivy/Counsel/Smex → Vertico + Orderless + Marginalia + Consult + Embark
- Company → Corfu + Cape
- lsp-mode/Flycheck/Tide → Eglot + Flymake
- Projectile → project.el (kept
C-c pprefix) - git-gutter → diff-hl
- Enabled tree-sitter modes, which-key, completion-preview, editorconfig
- Added claude-code-ide.el (eat terminal backend) for running Claude Code in Emacs
- Installed tree-sitter grammars (10 languages), language servers (pyright, typescript-language-server, bash-language-server), ripgrep
- Skip gptel — Claude Code subscription doesn't include API credits, and Claude Code CLI is sufficient
- Use ABI-14 grammar versions — Emacs 30.2 doesn't support ABI 15 from tree-sitter 0.26.x yet
- Use eat over vterm — pure elisp, no compilation needed
- claude-code-ide TUI redraws entire screen on each interaction — inherent to React/Ink, no config fix
- NODE_PATH env var for prettier.el may be stale
- Reviewed .emacs configuration for bugs, stale config, and missing packages
- Compared installed elpa packages against what's referenced in config
- Diagnosed startup warnings: dired
--diredflag (macOS BSD ls), stale projectile .elc, ivy package-not-found on MELPA
- Fixed broken company use-package parenthesization (
:configblock was orphaned outside the form) - Removed deprecated
company-lsp(lsp-mode has built-in company integration since 2020) - Removed dead Marmalade package repo, switched GNU and MELPA to HTTPS
- Added
use-package-always-ensure tglobally, removed redundant per-package:ensure t - Replaced
fill-column-indicatorpackage with built-indisplay-fill-column-indicator-mode(Emacs 27+) - Replaced deprecated
lsp-prefer-flymakewithlsp-diagnostics-provider :flycheck - Made
tide-format-before-savebuffer-local to typescript modes (was running globally on all saves) - Fixed
filladapthook typo (outline-mode-hook→outline-mode), fixedsmex:afterquoting - Removed XEmacs compatibility shim and references
- Removed Dropbox/TaskTracking functions (
tasks,projects,completed) andC-c ckeybinding - Removed all C/C++ support: clang-format, cmake-mode, clangd config, bsoncxx include path, .h/.hh auto-mode
- Removed redundant
(require 'reftex)before its use-package block - Cleaned up all commented-out package blocks and stale
package-selected-packages - Added
dired-use-ls-dired nilfor macOS - Simplified
ask-before-closing(removed Emacs <21 branch)
- Remove C/C++ and clang support entirely — user no longer uses them
- Remove Dropbox/TaskTracking — stale paths with old macOS capitalization, no longer in use
- Keep smex and counsel config even though not currently installed — user may want them
- Many packages in config are not installed in elpa (forge, magit, counsel, smex, lsp-mode, etc.) — need
M-x package-install-selected-packagesafterM-x package-refresh-contents - Stale
.elcfiles in elpa — runM-x byte-recompile-directoryon~/.emacs.d/elpa/ - NODE_PATH env var for prettier.el workaround may be stale — worth checking if still needed
- Tested dotfiles setup: verified shell, symlinks, plugins, git identity, completions
- Diagnosed
compinit: insecure directorieswarning — caused by/opt/homebrew/sharegroup-write permissions - Diagnosed starship prompt overwriting output inside Claude Code's terminal
- Researched Claude Code status line, plugins, hooks, skills, and MCP extensibility
- Fixed compinit warning: added
-uflag to skip insecure directory check (standard Homebrew fix) - Disabled starship inside Claude Code by gating on
$CLAUDECODEenv var - Added Claude Code status line showing model, context %, git branch/status, and rate limits
- Added
.claude/statusline.shto repo andinstall.sh
- Use
compinit -urather than fixing/opt/homebrew/sharepermissions — permissions are set by Homebrew and would revert on updates - Disable starship entirely in Claude Code rather than tweaking starship config — simpler and avoids all rendering issues
- Rate limit data comes from Claude Code's built-in session JSON, no need for external API calls
- Consider adding notification hook (desktop alert when Claude needs input)
- Consider adding custom skills (e.g.,
/test-installto validate dotfiles setup) - Status line rate limit fields only appear for Claude.ai subscribers — will be empty for API users
- Compared repo state (
~/src/configand~/config) against actual home directory dotfiles - Identified which tools are still installed (starship, pyenv, emacs) vs removed (gdb, tmate, thefuck, tmux)
- Found symlinks pointing to
~/config/with uncommitted local changes in .emacs, .bashrc, .bash_profile - Found
~/.gitsymlink making home directory appear to be a git repo - Current
~/.zshrcwas nearly empty (just LM Studio PATH) — repo version had good structure but many dead references
- Committed uncommitted changes in
~/config/(emacs: disable yasnippet/ivy/golint, add TIDE; bash: add brew/LM Studio PATH) - Consolidated two repo clones: repointed all symlinks from
~/config/to~/src/config/, backed up~/config/to~/backups/dotfiles-2026-03-23/ - Removed
~/.gitsymlink - Pruned 9 obsolete files: .bashrc, .bash_profile, .bash_local_osx, .bash_logout, .gdbinit, .tmate.conf, .config/thefuck/settings.py, install_config.sh, install_config_mac.sh
- Rewrote .zshrc: removed dead references (bash-isms, EC2, thefuck, old paths), added homebrew, proper zsh history options, .zshrc.local sourcing
- Updated .gitconfig: removed MongoDB email, added
[include]for profile-specific identity, fixedconfictStyletypo - Added profiles/ directory with personal and work configurations
- Added .claude/CLAUDE.md and settings.json to version control
- Wrote new install.sh that takes a profile name argument
- Updated README.md
- Installed zsh-autosuggestions, zsh-syntax-highlighting, zsh-completions via homebrew and added to .zshrc
- Changed default shell from bash to zsh (
chsh -s /bin/zsh)
- Use
~/src/configas the single repo location (user wants all repos in ~/src) - Delete bash files entirely rather than keeping as reference — all useful content captured in .zshrc
- Keep .tmux.conf symlinked even though tmux isn't installed (harmless, ready for future use)
- Use versioned profiles/ directory for machine-specific config rather than untracked local files — user wants everything in version control
- Git identity (email) comes from profile-specific .gitconfig.local via
[include], not hardcoded in shared .gitconfig
- Work profile has placeholder files — fill in when starting new job
~/backups/dotfiles-2026-03-23/contains old~/config/backup — can be removed once satisfied- Could add more files to profiles/ as needs arise (e.g., .claude/ overrides per machine)