Welcome to DotMate, a comprehensive dotfiles management system that provides a streamlined solution for managing and syncing configurations across multiple systems. Whether you're setting up a new machine, organizing configurations, or maintaining consistency across environments, DotMate simplifies the entire process with automated tool installation, intelligent backups, and seamless configuration management.
DotMate comes with a curated collection of configurations for popular development tools and utilities:
- Shell Configurations: Zsh, Bash with optimized settings, aliases, and functions
- Terminal Emulators: Alacritty, WezTerm with custom themes and configurations
- Shell Tools: Starship prompt, Zinit plugin manager, Zoxide for smart directory jumping
- Terminal Multiplexer: Tmux with optimized configuration
- Editor: Neovim with Lazy.nvim plugin manager and custom configurations
- IDE: Cursor editor with custom rules and MCP configuration
- Fonts: Caskaydia Cove and Mono Nerd Fonts for optimal terminal experience
- Version Control: Git with global configurations, attributes, and commit templates
- Package Managers:
- Mise for runtime management (Node.js, Python, Go, etc.)
- NPM with custom configurations
- Yarn with optimized settings
- Container Tools: Podman with optimized container configurations
- Database: DBGate with custom settings
- SSH: Optimized SSH client configuration with socket management
- GPG: GPG agent configuration for secure key management
- Font Configuration: System-wide font management
- The Fuck: Command correction utility
- Font Management: Fontconfig with custom font installations
- Cross-platform Support: macOS and Linux (Debian/Ubuntu) automation
- Linux: Debian/Ubuntu-based systems with
aptpackage manager - macOS: macOS 10.15+ with Homebrew support
- Windows: WSL2 with Ubuntu (recommended)
git clone https://github.com/akshay-na/DotMate.git ~/dotfiles
cd ~/dotfilesRun the complete setup with:
sudo apt install make # On Linux
make installThis command:
- Detects your operating system and installs appropriate tools
- Installs essential development tools via Homebrew (macOS) or apt (Linux)
- Backs up existing configurations to prevent data loss
- Creates symlinks for all configurations using GNU Stow
- Sets up development runtimes via Mise
- Configures fonts and system preferences
Need only the configurations? Use:
make stowThis skips tool installation and only creates symlinks for your dotfiles.
| Command | Description |
|---|---|
make install |
Complete setup: install tools + create symlinks |
make stow |
Create symlinks for all configurations |
make stow CONFIGS="git nvim shell" |
Create symlinks for specific tools only |
make unstow |
Remove all symlinks |
make unstow CONFIGS="git nvim" |
Remove symlinks for specific tools |
make backup |
Backup existing configurations |
make update |
Check for updates and reapply configurations |
make clean |
Clean up broken symlinks |
make help |
Show all available commands |
Apply only the configurations you need:
# Set up just Git and Neovim
make stow CONFIGS="git nvim"
# Set up shell and terminal configurations
make stow CONFIGS="shell alacritty wezterm"
# Set up development tools
make stow CONFIGS="mise node python"- Zsh: Optimized with Zinit plugin manager, syntax highlighting, autosuggestions
- Bash: Compatible configuration with common aliases and functions
- Common: Shared environment variables, paths, and tool initializations
- Aliases: Comprehensive collection of useful command shortcuts
- Functions: Custom shell functions for development workflows
- Plugin Manager: Lazy.nvim for fast plugin loading
- Configuration: Lua-based configuration with modular structure
- Code Formatting: Stylua integration for consistent code style
- Alacritty: Fast GPU-accelerated terminal with custom themes
- WezTerm: Feature-rich terminal with custom keybindings and appearance
- Mise: Runtime version management for multiple languages
- Git: Global configuration with useful aliases and templates
- Node.js: NPM and Yarn configurations for package management
- Python: Pip configuration and virtual environment setup
- Fonts: Nerd Fonts for terminal and development tools
- SSH: Optimized client configuration with socket management
- GPG: Secure key management and agent configuration
- Podman: Container runtime with optimized settings
Create local configuration files to override defaults without affecting the repository:
| Configuration | Local Override File |
|---|---|
.gitconfig |
~/.gitconfig_local |
starship.toml |
~/.config/starship_local.toml |
.zshrc |
~/.zshrc_local |
.bashrc |
~/.bashrc_local |
.commonrc |
~/.commonrc_local |
.aliases |
~/.aliases_local |
.functions |
~/.functions_local |
Example: Add custom Starship prompt configuration:
# Create local override
cp ~/.config/starship/starship.toml ~/.config/starship_local.toml
# Edit local file with your customizations
nano ~/.config/starship_local.toml- Create a new directory in the repository root
- Add your configuration files
- Update
.stowrcif needed to exclude certain files - Use
make stow CONFIGS="your_config"to apply
- Automatic Permissions: Sets correct permissions for SSH and GPG directories
- Secure Backups: Timestamped backups prevent accidental data loss
- Isolated Configurations: Each tool's configuration is isolated and manageable
- Permission Management: Strict file permissions for sensitive configurations
DotMate includes an auto-update feature that notifies you of available updates:
make updateThis command:
- Backs up current configurations
- Checks for repository updates
- Reapplies all configurations
- Maintains your local customizations
# Pull latest changes
git pull origin main
# Reapply configurations
make stow- Lazy Loading: Shell plugins load asynchronously for faster startup
- Conditional Loading: Tools only initialize when available
- Background Updates: Non-blocking update checks
- Broken Symlinks: Use
make cleanto remove broken symlinks - Permission Issues: Run
make installto reset permissions - Backup Recovery: Check
~/dotfiles_backup/<timestamp>/for previous configurations
- macOS: Full Homebrew integration with GUI app installation
- Linux: Optimized for Debian/Ubuntu with apt package management
- WSL: Full Linux compatibility with Windows integration
DotMate is open-source and welcomes contributions!
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
# Clone your fork
git clone https://github.com/your-username/DotMate.git
cd DotMate
# Set up upstream
git remote add upstream https://github.com/akshay-na/DotMate.git
# Create feature branch
git checkout -b feature/your-featureDotMate is licensed under the GNU General Public License v3.0 (GPL-3.0). See the LICENSE file for full details.
- GNU Stow: For elegant symlink management
- Homebrew: For cross-platform package management
- Mise: For runtime version management
- Nerd Fonts: For beautiful terminal typography
- Zinit: For fast Zsh plugin management
Take the hassle out of dotfile management and development environment setup with DotMate! π
Get organized, stay consistent, and make development a breeze across all your machines.