{"id":25835642,"url":"https://github.com/vvhybe/dome","last_synced_at":"2026-04-17T11:31:49.420Z","repository":{"id":279707926,"uuid":"939528020","full_name":"vvhybe/dome","owner":"vvhybe","description":"DOME minimalist dotfiles manager written in Bash","archived":false,"fork":false,"pushed_at":"2025-03-03T16:21:05.000Z","size":359,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-05T02:02:52.319Z","etag":null,"topics":["bash","dome","dotfile","dotfiles","dotfiles-manager","pkg","script"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vvhybe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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-02-26T17:25:05.000Z","updated_at":"2025-03-01T22:41:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"2520d2cb-adc3-4030-8d32-380fbb2f868a","html_url":"https://github.com/vvhybe/dome","commit_stats":null,"previous_names":["vvhybe/dome"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/vvhybe/dome","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvhybe%2Fdome","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvhybe%2Fdome/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvhybe%2Fdome/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvhybe%2Fdome/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vvhybe","download_url":"https://codeload.github.com/vvhybe/dome/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvhybe%2Fdome/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31927717,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T10:35:34.458Z","status":"ssl_error","status_checked_at":"2026-04-17T10:35:09.472Z","response_time":62,"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":["bash","dome","dotfile","dotfiles","dotfiles-manager","pkg","script"],"created_at":"2025-03-01T01:27:18.260Z","updated_at":"2026-04-17T11:31:49.414Z","avatar_url":"https://github.com/vvhybe.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"![DOME](dome.svg)\n\n---\n\n# dome\n\n**dome** is a minimalist dotfiles manager written in Bash that offers bidirectional syncing between your home directory and a Git-based dotfiles repository. It features Git integration, conflict detection/resolution (via custom hooks), pre/post-sync hooks, and an innovative distro-aware file mapping mechanism.\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n- [Requirements](#requirements)\n- [Installation](#installation)\n- [Configuration](#configuration)\n- [Usage](#usage)\n- [Syncing Mechanism](#syncing-mechanism)\n- [Hooks and Customizations](#hooks-and-customizations)\n- [Troubleshooting](#troubleshooting)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Overview\n\n`dome` is designed to be simple, robust, and unobtrusive. It allows you to keep your dotfiles (such as `.bashrc`, Neovim or tmux configurations) in a Git repository and mirror them with your home directory. With integrated distro-aware mapping, you can even manage variations in configuration (e.g. different aliases or paths) for different Linux distributions.\n\n## Features\n\n- **Bidirectional Syncing:** Keep your home and repository in perfect sync.\n- **Git Integration:** Pull updates and push changes to your remote repository seamlessly.\n- **Conflict Detection \u0026 Resolution:** Automatically detect conflicts and resolve them with your preferred merge tool via hooks.\n- **Distro-Aware File Mapping:** Define distro-specific variants of your dotfiles using a simple YAML mapping.\n- **Hooks:** Run custom commands before or after sync operations to automate tasks.\n- **Force Home-based Repository:** The local dotfiles repository is always located under `$HOME`, regardless of the current working directory.\n- **Backup Management:** Automatically create backups (organized by distro) during syncing—unless explicitly disabled.\n\n## Requirements\n\n- **Bash:** The script is written in Bash and intended for Unix-like systems.\n- **git:** For managing your dotfiles repository.\n- **yq:** For parsing YAML configuration files.\n- **Merge Tool (Optional):** For conflict resolution (e.g., `meld`).\n\n\u003e [!NOTE]\n\u003e Although earlier versions referenced `rsync`, **dome** no longer depends on it.\n\n## Installation\n\n\u003e [!NOTE]\n\u003e Ensure that `~/bin/` is in your **$PATH**\n\nRun:\n```bash\ncurl -fsSL https://raw.githubusercontent.com/vvhybe/dome/main/install.sh | bash\n```\n\n\u003e [!TIP]\n\u003e To install the latest version of `dome`, or install a specific release (e.g. `v1.0.0`):\n\nUSE:\n```bash\ncurl -fsSL https://raw.githubusercontent.com/vvhybe/dome/main/install.sh | bash -s -- --tag=v0.2.0\n```\n\n\u003e [!TIP]\n\u003e You can suppress installation output with the flag `--silent` or `-s`.\n\n## Initialize dome\n\nRun the initialization command to set up the configuration and clone your `dotfiles` repository.\n**Important**: When using a custom path (via `-p`), the repository will be forced to reside under `$HOME`. For example, running:\n\n```bash\ndome init -p my-dotfiles\n```\nwill clone your repository into `$HOME/my-dotfiles`. If the specified folder already exists (and isn’t empty), dome will fall back to using the existing directory.\n\n```bash\ndome init\n```\n\n## Configuration\n\nThe main configuration file is located at [`~/.config/dome/config.yaml`](config.yaml). This file contains settings for:\nRepository Settings\n\n- **repo**: URL of your dotfiles Git repository.\n- **branch**: The branch to use (e.g., main).\n- **local_path**: The local path where your repository will be cloned. Note: This path is always forced to be under $HOME.\n\nDistro Files Mapping\n\nDefine mappings to handle distro-specific configurations. For example:\n\n```yaml\ndistro_files:\n  .bashrc:\n    arch: \".bashrc.arch\"\n    debian: \".bashrc.debian\"\n\n```\n\nIn this example, if you're running an Arch-based system, dome will use `.bashrc.arch` from your repository to update `~/.bashrc.`\n\n## Hooks\n\nCustomize actions before and after syncing, pushing, and pulling:\n\n```yaml\nhooks:\n  conflict_resolver: \"meld\"\n  pre_sync: \"echo 'Starting sync...'\"\n  post_sync: \"notify-send 'Dotfiles synced!'\"\n  pre_pull: \"echo 'Pulling updates...'\"\n  post_pull: \"echo 'Updates pulled.'\"\n  pre_push: \"echo 'Preparing to push...'\"\n  post_push: \"echo 'Push complete.'\"\n```\n\n## Usage\n\nRun dome with the following commands:\n\n- Initialize:\n  ```bash\n  dome init\n  ```\n  \n  Sets up the configuration and clones the repository into a home-based folder.\n  \n- Bidirectional Sync:\n  \n  ```bash\n  dome sync\n  ```\n\n  Syncs dotfiles between your repository and your home directory while applying distro-aware mappings.\n  \n    - Use `-s` for snapshot mode (files are copied instead of symlinked).\n    - Use `-n` to disable backup creation.\n    - Use `-v` for verbose output (detailed table output will list synced and backed up files).\n\n- Pull Updates:\n\n  ```bash\n  dome pull\n  ```\n  \n  Pulls the latest changes from the remote repository.\n\n- Push Changes:\n\n  ```bash\n  dome push\n  ```\n  \n  Pushes your local changes to the remote repository.\n  \n\u003e [!NOTE]\n\u003e To push your changes, first commit them using Git. Then use dome push so that pre/post hooks are executed.\n\n- Revert Backups:\n\n  ```bash\n  dome revert\n  ```\n  \n  Restores dotfiles from the latest backup in your distro’s backup directory (located at `~/.config/dome/backups/\u003cdistro\u003e/`). You may also specify a backup directory explicitly.\n\n- Help \u0026 Version:\n\n  ```bash\n  dome -h   # Show help message\n  dome -v   # Show version information\n  ```\n\n## Syncing Mechanism\n\ndome maintains a true two-way mirror of your tracked dotfiles:\n\n  1. **Repo → Home Sync**: \n  A “merged” view is created where distro-specific files (as defined in the `distro_files` mapping) are mapped to their common names before syncing to your home directory. If a file already exists at the destination, it is backed up (unless disabled) into a distro-organized backup folder (`$HOME/.config/dome/backups/\u003cdistro\u003e/bak_\u003ctimestamp\u003e_\u003cRANDOM\u003e`).\n\n  2. **Home → Repo Sync**:\n  Only files that are already tracked in the repository are updated. Changes to files in your home directory are synced back into their corresponding distro-specific files in the repository.\n\nThis mechanism ensures that only the dotfiles you want tracked are synchronized, keeping unrelated files safe.\n\n## Hooks and Customizations\n\nCustomize your workflow using hooks:\n\n  - **Conflict Resolver**: Specify your preferred merge tool (e.g., meld) for resolving conflicts.\n  - **Pre-sync Hook**: Runs before the syncing process begins.\n  - **Post-sync Hook**: Runs after syncing completes.\n  - **Pre-pull Hook**: Runs before pulling changes from the remote.\n  - **Post-pull Hook**: Runs immediately after changes are pulled.\n  - **Pre-push Hook**: Runs before pushing changes (ensure changes are committed first).\n  - **Post-push Hook**: Runs after pushing changes.\n\nThese hooks are defined in the YAML configuration and executed automatically during their respective operations.\n\n## Troubleshooting\n\n  - Repository Location:\n    If you specify a custom path using `-p`, remember that the repository will be cloned under `$HOME` (e.g., `$HOME/my-dotfiles`). If the folder exists and is not empty, dome will fall back to that directory.\n\n  - Backup Issues:\n    When running `dome sync` with verbose output (`-v`), the tool displays the backup actions in a table. If no backups are created (for example, when using the `-n` flag), the backup column will remain empty.\n\n  - Permission Issues:\n    If you encounter permission errors during syncing, ensure that you have the appropriate read/write permissions and avoid running dome with sudo.\n\n  - Dependency Issues:\n    Verify that `git` and `yq` are installed and available in your `$PATH`.\n\n## Contributing\n\nContributions to dome are welcome! Please fork the repository, create pull requests, and open issues if you have suggestions or encounter bugs. Follow the repository's contribution guidelines.\n\n## License\n\ndome is distributed under the [GPL-3.0 License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvvhybe%2Fdome","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvvhybe%2Fdome","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvvhybe%2Fdome/lists"}