Skip to content

rsvinicius/dotme

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

29 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

dotme

CI Release Go Report Card License: MIT

A command-line tool to apply dotfiles from a Git repository to your current working directory.

πŸš€ Overview

dotme is a simple utility that helps you quickly set up your development environment by applying dotfiles from a Git repository. It only copies files and folders that start with a dot (.) from the root of the specified repository into your current directory.

✨ Features

  • Apply dotfiles from any Git repository with a single command
  • Only copies files and folders that start with a dot (.) at the repository root
  • Pattern-based filtering: Include or exclude specific dotfiles using glob patterns
  • Default pattern configuration: Set default include/exclude patterns for consistent behavior
  • Recursively copies contents of dotfiles folders
  • Cross-platform (Linux, macOS, Windows)
  • Save repositories with aliases for quick access
  • Clear terminal output with information about what was copied and ignored
  • Automatically cleans up temporary files after execution
  • Comprehensive test suite with high code coverage
  • Continuous integration and automated releases

πŸ“‹ Installation

From Binary Releases

Download the latest release archive for your platform from the Releases page and extract it.

Linux

# Download the tar.gz file (choose amd64 or arm64 according to your architecture)
curl -L https://github.com/rsvinicius/dotme/releases/download/v0.2.0/dotme_0.2.0_linux_amd64.tar.gz -o dotme.tar.gz

# Extract the archive
tar -xzf dotme.tar.gz

# Move the binary to a directory in your PATH (optional)
sudo mv dotme /usr/local/bin/

macOS

# Download the tar.gz file (choose amd64 or arm64 according to your architecture)
curl -L https://github.com/rsvinicius/dotme/releases/download/v0.2.0/dotme_0.2.0_darwin_amd64.tar.gz -o dotme.tar.gz

# Extract the archive
tar -xzf dotme.tar.gz

# Move the binary to a directory in your PATH (optional)
sudo mv dotme /usr/local/bin/

Windows

  1. Download the Windows zip file.
  2. Extract the zip file.
  3. Rename the extracted file to dotme.exe (optional).
  4. Add it to your PATH or place it in a directory that's already in your PATH.

From Source

# Clone the repository
git clone https://github.com/rsvinicius/dotme.git

# Change to the project directory
cd dotme

# Build the binary
go build -o dotme

# Install the binary to your PATH (optional)
go install

πŸ”§ Usage

Basic Usage

# Apply dotfiles from a Git repository
dotme https://github.com/your-username/dotfiles

# Save a repository with an alias
dotme -s my-dotfiles https://github.com/your-username/dotfiles

# Apply dotfiles using a saved alias
dotme -a my-dotfiles

# List all saved repository aliases
dotme list-aliases

# Remove a saved repository alias
dotme remove-alias my-dotfiles

# Display version information
dotme version

Pattern-Based Filtering

You can use include and exclude patterns to control which dotfiles are copied:

# Include only specific dotfiles
dotme --include=".vscode,.gitconfig" https://github.com/your-username/dotfiles

# Exclude specific dotfiles
dotme --exclude=".DS_Store" https://github.com/your-username/dotfiles

# Use glob patterns
dotme --include=".git*" https://github.com/your-username/dotfiles

# Combine include and exclude patterns
dotme --include=".git*,.vim*" --exclude=".DS_Store" https://github.com/your-username/dotfiles

Pattern Examples

  • Exact match: .gitconfig matches only .gitconfig
  • Glob patterns:
    • .git* matches .gitconfig, .gitignore, .github/, etc.
    • .vim* matches .vimrc, .vim/, etc.
    • .*rc matches .bashrc, .vimrc, .zshrc, etc.
  • Character classes: .git[ci]* matches .gitconfig and .gitignore

Configuration Management

# Set default patterns that will be used when no patterns are specified
dotme config set-default-patterns --include=".git*,.vim*" --exclude=".DS_Store"

# Show current configuration (aliases and default patterns)
dotme config show

# Apply dotfiles using default patterns (no need to specify patterns each time)
dotme https://github.com/your-username/dotfiles

Example Workflows

Basic Setup

# Apply all dotfiles from a repository
dotme https://github.com/your-username/dotfiles

Selective Setup

# Only copy Git and Vim configuration files
dotme --include=".git*,.vim*" https://github.com/your-username/dotfiles

# Copy all dotfiles except macOS metadata files
dotme --exclude=".DS_Store,.Trash*" https://github.com/your-username/dotfiles

Using Aliases and Default Patterns

# Save a repository with an alias
dotme -s work-setup https://github.com/company/dotfiles

# Set default patterns to exclude unwanted files
dotme config set-default-patterns --exclude=".DS_Store,.Trash*"

# Apply dotfiles using alias and default patterns
dotme -a work-setup

βš™οΈ How It Works

dotme performs the following steps:

  1. Clones the specified Git repository to a temporary directory
  2. Scans the root of the cloned repository for files and folders
  3. Applies pattern filtering (if specified) to determine which files to copy:
    • If include patterns are specified, only files matching those patterns are considered
    • If exclude patterns are specified, files matching those patterns are skipped
    • If no patterns are specified, all dotfiles (files starting with .) are copied
  4. Copies the filtered files/folders to your current working directory
    • For folders, it recursively copies all contents (regardless of whether the inner files start with a dot)
  5. Displays a summary of what was copied and what was ignored
  6. Shows active filters if any patterns were used
  7. Cleans up the temporary directory

πŸ§ͺ Development and Testing

The project follows a structured organization with clear separation of concerns:

dotme/
β”œβ”€β”€ cmd/                    # Command-line interface
β”œβ”€β”€ internal/               # Implementation code
β”‚   β”œβ”€β”€ alias/              # Repository alias management
β”‚   β”œβ”€β”€ fs/                 # File system operations
β”‚   β”œβ”€β”€ git/                # Git repository operations
β”‚   β”œβ”€β”€ patterns/           # Pattern matching and filtering
β”‚   └── dotfiles.go         # Integration layer
└── test/                   # Test code
    β”œβ”€β”€ alias/              # Alias tests
    β”œβ”€β”€ fs/                 # File system tests
    β”œβ”€β”€ patterns/           # Pattern matching tests
    └── mocks/              # Mock implementations

All tests can be run using:

go test ./...

πŸ”„ CI/CD

This project uses GitHub Actions for continuous integration and deployment:

  • CI pipeline runs on every push and pull request, performing tests, linting, and builds
  • Release workflow automatically creates releases when version tags are pushed
  • Cross-platform builds ensure compatibility across Linux, macOS, and Windows

🀝 Contributing

Contributions are welcome! Please check out our Contributing Guidelines for details.

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ“¦ Versioning

We use Semantic Versioning. For the versions available, see the tags on this repository.

About

A command-line tool to apply dotfiles from a Git repository to your current working directory

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Languages