Thanks to visit codestin.com
Credit goes to github.com

Skip to content

A modular, portable dotfiles repository managed with GNU Stow, supporting local customizations for multiple environments and enhanced productivity.

License

Notifications You must be signed in to change notification settings

akshay-na/dotfiles

Repository files navigation

DotMate πŸ› οΈ β€” Your Companion for Effortless Dotfile Management

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.


🌟 What's Included

DotMate comes with a curated collection of configurations for popular development tools and utilities:

πŸ–₯️ Terminal & Shell

  • 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

🎨 Development Environment

  • 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

πŸ› οΈ Development Tools

  • 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

πŸ” Security & Authentication

  • SSH: Optimized SSH client configuration with socket management
  • GPG: GPG agent configuration for secure key management
  • Font Configuration: System-wide font management

πŸš€ System Utilities

  • The Fuck: Command correction utility
  • Font Management: Fontconfig with custom font installations
  • Cross-platform Support: macOS and Linux (Debian/Ubuntu) automation

πŸš€ Getting Started

Prerequisites

  • Linux: Debian/Ubuntu-based systems with apt package manager
  • macOS: macOS 10.15+ with Homebrew support
  • Windows: WSL2 with Ubuntu (recommended)

Step 1: Clone the Repository

git clone https://github.com/akshay-na/DotMate.git ~/dotfiles
cd ~/dotfiles

Step 2: Install DotMate

Run the complete setup with:

sudo apt install make  # On Linux
make install

This 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 stow

This skips tool installation and only creates symlinks for your dotfiles.


πŸ“‹ Available Commands

Core Operations

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

Selective Configuration

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"

🧩 Configuration Details

Shell Environment (.shell/)

  • 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

Neovim (.nvim/)

  • Plugin Manager: Lazy.nvim for fast plugin loading
  • Configuration: Lua-based configuration with modular structure
  • Code Formatting: Stylua integration for consistent code style

Terminal Configurations

  • Alacritty: Fast GPU-accelerated terminal with custom themes
  • WezTerm: Feature-rich terminal with custom keybindings and appearance

Development Tools

  • 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

System Integration

  • 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

πŸ”§ Customization

Local Overrides

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

Adding New Configurations

  1. Create a new directory in the repository root
  2. Add your configuration files
  3. Update .stowrc if needed to exclude certain files
  4. Use make stow CONFIGS="your_config" to apply

πŸ›‘οΈ Security Features

  • 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

πŸ”„ Update Management

Automatic Updates

DotMate includes an auto-update feature that notifies you of available updates:

make update

This command:

  • Backs up current configurations
  • Checks for repository updates
  • Reapplies all configurations
  • Maintains your local customizations

Manual Updates

# Pull latest changes
git pull origin main

# Reapply configurations
make stow

πŸ’‘ Tips & Best Practices

Performance Optimization

  • Lazy Loading: Shell plugins load asynchronously for faster startup
  • Conditional Loading: Tools only initialize when available
  • Background Updates: Non-blocking update checks

Troubleshooting

  • Broken Symlinks: Use make clean to remove broken symlinks
  • Permission Issues: Run make install to reset permissions
  • Backup Recovery: Check ~/dotfiles_backup/<timestamp>/ for previous configurations

Cross-Platform Usage

  • macOS: Full Homebrew integration with GUI app installation
  • Linux: Optimized for Debian/Ubuntu with apt package management
  • WSL: Full Linux compatibility with Windows integration

🀝 Contributing

DotMate is open-source and welcomes contributions!

How to Contribute

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test thoroughly
  5. Submit a pull request

Development Setup

# 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-feature

πŸ“œ License

DotMate is licensed under the GNU General Public License v3.0 (GPL-3.0). See the LICENSE file for full details.


πŸ™ Acknowledgments

  • 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.

About

A modular, portable dotfiles repository managed with GNU Stow, supporting local customizations for multiple environments and enhanced productivity.

Topics

Resources

License

Stars

Watchers

Forks