A clean, modular configuration for macOS and Linux development environments featuring:
- Zsh as primary shell (macOS) with bash compatibility
- Emacs with Magit and Claude CLI integration
- Git with useful aliases and ediff integration
- Modular shell configuration for easy customization
- π Fast shell startup with optimized configurations
- π¦ Modular design - mix and match components
- π§ Smart installer with backup and OS detection
- π¨ Clean separation of shell-agnostic and shell-specific configs
- π» Developer-focused with support for Rust, Go, Python, Node.js
- π€ AI-powered development with Claude CLI integration
# Clone the repository
git clone git@github.com:danome/dot-files.git ~/Development/repositories/dot-files
# Run installer
cd ~/Development/repositories/dot-files
chmod +x install.sh
./install.sh.
βββ .config/
β βββ shell/ # Shared shell configurations
β βββ aliases.sh # Common aliases
β βββ exports.sh # Environment variables
β βββ functions.sh # Utility functions
βββ .emacs.d/ # Emacs configuration
β βββ init.el # Main config
β βββ early-init.el # Performance optimizations
β βββ lisp/ # Custom elisp
βββ .zshrc # Zsh configuration
βββ .zprofile # Zsh login shell
βββ .zshenv # Zsh environment
βββ .bashrc_modern # Modern bash config
βββ .bash_profile # Bash login shell
βββ .gitconfig # Git configuration
βββ .gitignore_global # Global git ignores
βββ install.sh # Installation script
Create ~/.config/shell/local.sh for machine-specific configurations:
# Example local.sh
export WORK_DIR="$HOME/work"
alias myproject="cd $WORK_DIR/myproject"Create ~/.config/shell/development.sh for project-specific paths:
# Example development.sh
export PATH="$HOME/Development/tools:$PATH"
export GOPATH="$HOME/go"Create ~/.gitconfig.local for machine-specific git settings:
[user]
email = work@company.com
[core]
sshCommand = /usr/bin/ssh -i ~/.ssh/work_keye- Open standalone Emacs GUIec- Open standalone Emacs GUIet- Open terminal Emacs (emacs -nw)gs- Git statusll- Detailed file listingmkd- Make directory and cd into it- And many more (see
.config/shell/aliases.sh)
extract- Extract any archivebackup- Quick file backup with timestampgit-cleanup- Remove merged branches
On this Linux/Wayland setup, the Emacs daemon and emacsclient -c path is currently disabled because GUI client frames were unstable:
- tiny startup windows
- daemon restarts/crashes during normal GUI use
- TTN observe buffers interacting badly with daemon-backed GUI frames
The current stable baseline is standalone Emacs for GUI (e, ec) and emacs -nw for terminal (et). Re-enable the daemon only after confirming a concrete need and a stable client path.
The configuration includes:
- Magit for Git integration
- Claude CLI helpers for AI-powered development
- Company for auto-completion
- Projectile for project management
- Language support for Python, Go, Rust, TypeScript
C-c m m- Claude menuC-c m a- AI commit messageC-c m d- Generate documentationC-c m r- Refactor region
- Zsh 5.0+ (included)
- Homebrew (recommended)
- Emacs 27+ with
emacsclient - Git 2.20+
- Bash 4.0+ or Zsh 5.0+
- Emacs 27+
- Git 2.20+
The installer will:
- Detect your OS and shell
- Create timestamped backups of existing files
- Create symlinks to the repository files
- Check for required tools
- Provide next-step instructions
To uninstall, restore your original files from the backup directory shown during installation:
# The installer shows the backup location, typically:
# ~/.dotfiles-backup-YYYYMMDD-HHMMSS/Feel free to fork and submit pull requests. Keep changes modular and well-documented.
MIT License - see LICENSE file for details
This repository underwent a major modernization in January 2025. Here's what was changed:
| Area | Proposed Changes | Actual Implementation |
|---|---|---|
| 1. Core Shell Configuration | Create modular system with .config/shell/ directory for shared configs |
β
Created .config/shell/ with:β’ exports.sh - PATH management, environment variables, XDG settingsβ’ aliases.sh - 80+ aliases for git, emacs, system commandsβ’ functions.sh - Helper functions (extract, backup, emacs-daemon management) |
| 2. Emacs Configuration | Modernize with use-package, include boon-claude, add early-init, remove duplicates | β
Created: β’ early-init.el - Startup optimizations, GC tuningβ’ init_modern.el - Clean use-package based configβ’ lisp/boon-claude.el - Claude CLI integrationβ’ Kept old init.el (not replaced yet) |
| 3. Git Configuration | Add user-specific includes, global ignores, local settings support | β
Replaced .gitconfig with:β’ Modern aliases (30+ shortcuts) β’ Ediff integration for merge/diff β’ Include for ~/.gitconfig.localβ’ Created .gitignore_global with 99 lines of common ignores |
| 4. Development Tools | Add configs for starship, tmux, SSH template | β Not implemented - focused on core shell/editor configs instead |
| 5. Installation System | Rewrite with OS detection, backups, conflict detection, idempotent | β
Completely rewrote install.sh:β’ OS detection (macOS/Linux) β’ Timestamped backups β’ Color-coded output β’ Tool checking (git, emacs, cargo, claude) β’ Symlink management |
| 6. Files to Remove/Archive | Remove legacy conda, vagrant, nvm configs | β
Removed from new configs: β’ No conda initialization β’ No vagrant checks β’ No nvm references β’ Created .gitconfig.old, README.md.old as backups |
| 7. Documentation | Update README, add CHANGELOG, structure docs | β
Created: β’ New README.md - Complete rewrite with features, structure, customizationβ’ CHANGELOG.md - Version 2.0.0 documentationβ’ Clear installation/uninstallation instructions |
- Zsh Configuration: Created
.zshrc,.zprofile,.zshenv(not in original bash-centric repo) - Bash Modernization: Created
.bashrc_modernand.bash_profilefor Linux compatibility - Backup Strategy: Old files renamed with
.oldextension rather than deleted
The implementation closely followed the plan with the exception of development tool configs (starship, tmux) which can be added in a future update if needed.