{"id":37172288,"url":"https://github.com/rsvinicius/dotme","last_synced_at":"2026-01-14T20:08:57.291Z","repository":{"id":286207363,"uuid":"960711501","full_name":"rsvinicius/dotme","owner":"rsvinicius","description":"A command-line tool to apply dotfiles from a Git repository to your current working directory","archived":false,"fork":false,"pushed_at":"2025-08-08T00:59:23.000Z","size":22629,"stargazers_count":10,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-08T02:37:26.607Z","etag":null,"topics":["cli","command-line-interface","command-line-tool","devtool","go","golang","project-setup"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rsvinicius.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-04T23:13:42.000Z","updated_at":"2025-08-08T00:58:14.000Z","dependencies_parsed_at":"2025-08-08T02:36:01.306Z","dependency_job_id":null,"html_url":"https://github.com/rsvinicius/dotme","commit_stats":null,"previous_names":["rsvinicius/dotme"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/rsvinicius/dotme","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsvinicius%2Fdotme","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsvinicius%2Fdotme/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsvinicius%2Fdotme/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsvinicius%2Fdotme/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rsvinicius","download_url":"https://codeload.github.com/rsvinicius/dotme/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsvinicius%2Fdotme/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28434369,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T18:57:19.464Z","status":"ssl_error","status_checked_at":"2026-01-14T18:52:48.501Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","command-line-interface","command-line-tool","devtool","go","golang","project-setup"],"created_at":"2026-01-14T20:08:56.802Z","updated_at":"2026-01-14T20:08:57.279Z","avatar_url":"https://github.com/rsvinicius.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dotme\n\n[![CI](https://github.com/rsvinicius/dotme/actions/workflows/ci.yml/badge.svg)](https://github.com/rsvinicius/dotme/actions/workflows/ci.yml)\n[![Release](https://github.com/rsvinicius/dotme/actions/workflows/release.yml/badge.svg)](https://github.com/rsvinicius/dotme/actions/workflows/release.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/rsvinicius/dotme)](https://goreportcard.com/report/github.com/rsvinicius/dotme)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA command-line tool to apply dotfiles from a Git repository to your current working directory.\n\n## 🚀 Overview\n\n`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.\n\n## ✨ Features\n\n- Apply dotfiles from any Git repository with a single command\n- Only copies files and folders that start with a dot (`.`) at the repository root\n- **Pattern-based filtering**: Include or exclude specific dotfiles using glob patterns\n- **Default pattern configuration**: Set default include/exclude patterns for consistent behavior\n- Recursively copies contents of dotfiles folders\n- Cross-platform (Linux, macOS, Windows)\n- Save repositories with aliases for quick access\n- Clear terminal output with information about what was copied and ignored\n- Automatically cleans up temporary files after execution\n- Comprehensive test suite with high code coverage\n- Continuous integration and automated releases\n\n## 📋 Installation\n\n### From Binary Releases\n\nDownload the latest release archive for your platform from the [Releases](https://github.com/rsvinicius/dotme/releases) page and extract it.\n\n#### Linux\n\n```bash\n# Download the tar.gz file (choose amd64 or arm64 according to your architecture)\ncurl -L https://github.com/rsvinicius/dotme/releases/download/v0.2.0/dotme_0.2.0_linux_amd64.tar.gz -o dotme.tar.gz\n\n# Extract the archive\ntar -xzf dotme.tar.gz\n\n# Move the binary to a directory in your PATH (optional)\nsudo mv dotme /usr/local/bin/\n```\n\n#### macOS\n\n```bash\n# Download the tar.gz file (choose amd64 or arm64 according to your architecture)\ncurl -L https://github.com/rsvinicius/dotme/releases/download/v0.2.0/dotme_0.2.0_darwin_amd64.tar.gz -o dotme.tar.gz\n\n# Extract the archive\ntar -xzf dotme.tar.gz\n\n# Move the binary to a directory in your PATH (optional)\nsudo mv dotme /usr/local/bin/\n```\n\n#### Windows\n\n1. Download the [Windows zip file](https://github.com/rsvinicius/dotme/releases/download/v0.2.0/dotme_0.2.0_windows_amd64.zip).\n2. Extract the zip file.\n3. Rename the extracted file to `dotme.exe` (optional).\n4. Add it to your PATH or place it in a directory that's already in your PATH.\n\n### From Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/rsvinicius/dotme.git\n\n# Change to the project directory\ncd dotme\n\n# Build the binary\ngo build -o dotme\n\n# Install the binary to your PATH (optional)\ngo install\n```\n\n## 🔧 Usage\n\n### Basic Usage\n\n```bash\n# Apply dotfiles from a Git repository\ndotme https://github.com/your-username/dotfiles\n\n# Save a repository with an alias\ndotme -s my-dotfiles https://github.com/your-username/dotfiles\n\n# Apply dotfiles using a saved alias\ndotme -a my-dotfiles\n\n# List all saved repository aliases\ndotme list-aliases\n\n# Remove a saved repository alias\ndotme remove-alias my-dotfiles\n\n# Display version information\ndotme version\n```\n\n### Pattern-Based Filtering\n\nYou can use include and exclude patterns to control which dotfiles are copied:\n\n```bash\n# Include only specific dotfiles\ndotme --include=\".vscode,.gitconfig\" https://github.com/your-username/dotfiles\n\n# Exclude specific dotfiles\ndotme --exclude=\".DS_Store\" https://github.com/your-username/dotfiles\n\n# Use glob patterns\ndotme --include=\".git*\" https://github.com/your-username/dotfiles\n\n# Combine include and exclude patterns\ndotme --include=\".git*,.vim*\" --exclude=\".DS_Store\" https://github.com/your-username/dotfiles\n```\n\n#### Pattern Examples\n\n- **Exact match**: `.gitconfig` matches only `.gitconfig`\n- **Glob patterns**: \n  - `.git*` matches `.gitconfig`, `.gitignore`, `.github/`, etc.\n  - `.vim*` matches `.vimrc`, `.vim/`, etc.\n  - `.*rc` matches `.bashrc`, `.vimrc`, `.zshrc`, etc.\n- **Character classes**: `.git[ci]*` matches `.gitconfig` and `.gitignore`\n\n### Configuration Management\n\n```bash\n# Set default patterns that will be used when no patterns are specified\ndotme config set-default-patterns --include=\".git*,.vim*\" --exclude=\".DS_Store\"\n\n# Show current configuration (aliases and default patterns)\ndotme config show\n\n# Apply dotfiles using default patterns (no need to specify patterns each time)\ndotme https://github.com/your-username/dotfiles\n```\n\n### Example Workflows\n\n#### Basic Setup\n```bash\n# Apply all dotfiles from a repository\ndotme https://github.com/your-username/dotfiles\n```\n\n#### Selective Setup\n```bash\n# Only copy Git and Vim configuration files\ndotme --include=\".git*,.vim*\" https://github.com/your-username/dotfiles\n\n# Copy all dotfiles except macOS metadata files\ndotme --exclude=\".DS_Store,.Trash*\" https://github.com/your-username/dotfiles\n```\n\n#### Using Aliases and Default Patterns\n```bash\n# Save a repository with an alias\ndotme -s work-setup https://github.com/company/dotfiles\n\n# Set default patterns to exclude unwanted files\ndotme config set-default-patterns --exclude=\".DS_Store,.Trash*\"\n\n# Apply dotfiles using alias and default patterns\ndotme -a work-setup\n```\n\n## ⚙️ How It Works\n\n`dotme` performs the following steps:\n1. Clones the specified Git repository to a temporary directory\n2. Scans the root of the cloned repository for files and folders\n3. Applies pattern filtering (if specified) to determine which files to copy:\n   - If include patterns are specified, only files matching those patterns are considered\n   - If exclude patterns are specified, files matching those patterns are skipped\n   - If no patterns are specified, all dotfiles (files starting with `.`) are copied\n4. Copies the filtered files/folders to your current working directory\n   - For folders, it recursively copies all contents (regardless of whether the inner files start with a dot)\n5. Displays a summary of what was copied and what was ignored\n6. Shows active filters if any patterns were used\n7. Cleans up the temporary directory\n\n## 🧪 Development and Testing\n\nThe project follows a structured organization with clear separation of concerns:\n\n```\ndotme/\n├── cmd/                    # Command-line interface\n├── internal/               # Implementation code\n│   ├── alias/              # Repository alias management\n│   ├── fs/                 # File system operations\n│   ├── git/                # Git repository operations\n│   ├── patterns/           # Pattern matching and filtering\n│   └── dotfiles.go         # Integration layer\n└── test/                   # Test code\n    ├── alias/              # Alias tests\n    ├── fs/                 # File system tests\n    ├── patterns/           # Pattern matching tests\n    └── mocks/              # Mock implementations\n```\n\nAll tests can be run using:\n```bash\ngo test ./...\n```\n\n## 🔄 CI/CD\n\nThis project uses GitHub Actions for continuous integration and deployment:\n\n- **CI pipeline** runs on every push and pull request, performing tests, linting, and builds\n- **Release workflow** automatically creates releases when version tags are pushed\n- **Cross-platform builds** ensure compatibility across Linux, macOS, and Windows\n\n## 🤝 Contributing\n\nContributions are welcome! Please check out our [Contributing Guidelines](CONTRIBUTING.md) for details.\n\n## 📝 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 📦 Versioning\n\nWe use [Semantic Versioning](https://semver.org/). For the versions available, see the [tags on this repository](https://github.com/rsvinicius/dotme/tags).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frsvinicius%2Fdotme","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frsvinicius%2Fdotme","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frsvinicius%2Fdotme/lists"}