{"id":13895082,"url":"https://github.com/hypnoglow/dotbro","last_synced_at":"2025-09-14T19:21:20.881Z","repository":{"id":8789197,"uuid":"59766391","full_name":"hypnoglow/dotbro","owner":"hypnoglow","description":"Dotbro - simple yet effective dotfiles manager.","archived":false,"fork":false,"pushed_at":"2022-05-20T22:20:36.000Z","size":83,"stargazers_count":22,"open_issues_count":8,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-03T17:21:34.425Z","etag":null,"topics":["dotfiles","dotfiles-install","dotfiles-manager","routines"],"latest_commit_sha":null,"homepage":null,"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/hypnoglow.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-05-26T16:33:28.000Z","updated_at":"2025-06-03T07:33:59.000Z","dependencies_parsed_at":"2022-09-02T13:50:28.374Z","dependency_job_id":null,"html_url":"https://github.com/hypnoglow/dotbro","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/hypnoglow/dotbro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hypnoglow%2Fdotbro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hypnoglow%2Fdotbro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hypnoglow%2Fdotbro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hypnoglow%2Fdotbro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hypnoglow","download_url":"https://codeload.github.com/hypnoglow/dotbro/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hypnoglow%2Fdotbro/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275153484,"owners_count":25414637,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-14T02:00:10.474Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["dotfiles","dotfiles-install","dotfiles-manager","routines"],"created_at":"2024-08-06T18:01:58.795Z","updated_at":"2025-09-14T19:21:20.851Z","avatar_url":"https://github.com/hypnoglow.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# dotbro - simple yet effective dotfiles manager.\n\n[![GitHub Actions](https://github.com/hypnoglow/dotbro/actions/workflows/main.yaml/badge.svg?branch=master)](https://github.com/hypnoglow/dotbro/actions)\n[![Go Report Card](https://goreportcard.com/badge/github.com/hypnoglow/dotbro)](https://goreportcard.com/report/github.com/hypnoglow/dotbro)\n[![codebeat badge](https://codebeat.co/badges/4c0586d0-1771-4751-b332-c9f0582ccddd)](https://codebeat.co/projects/github-com-hypnoglow-dotbro)\n\nDotbro is a tool which helps you install and keep your dotfiles up to date.\n\n## tl;dr\n\nCreate simple [config](#configuration). Run dotbro first time:\n    \n    dotbro --config path/to/your/config.toml\n    \nNext time just execute:\n\n    dotbro\n\n# Dotfiles? What?\n\nRead about dotfiles on [GitHub page](https://dotfiles.github.io/).\nI think [this article](https://medium.com/@webprolific/getting-started-with-dotfiles-43c3602fd789#.h8k6sagzb) by Lars Kappert will give you enough understanding.\nSo, if you don't have your dotfiles repository yet, it's time to create it. Next, read further to explore an easy way to manage your dotfiles. \n\n# Motivation\n\nDotfiles are generally stored in VCS and symlinked from repo directory to your `$HOME` - this is one of the best patterns because you can track changes easily and commit them to your dotfiles repo. However, this pattern does not offer you any way to install your dotfiles, so often people end up writing their own script e.g. in bash, which is not good for long-term purposes (I know that because I had one).\n\nThis tool was made to deal with dotfiles installation, so you don't waste your time writing your install scripts and focus only on your dotfiles themselves.\n\nDotbro takes on the routine. The main task - installing your dotfiles in one command on any of your machines.\n\n# Features\n\n#### Simple configuration file\n\nAll you need is simple [configuration file](#configuration) in JSON or TOML format.\n\nThe other benefit is you do not need any special tooling if you use multiple different operation systems, e.g Linux and OS X.\nYou can use one single dotfiles repository with multiple dotbro's configuration files inside - one for each OS.\nWhat can be easier?\n\n#### Clear mapping\n\nYou may want to (or you do already) store your dotfiles in a neat way using named directories like `bash/bashrc`.\nObviously, you want to symlink it to proper place `$HOME/.bashrc`.\nThis is easily done by writing such string in `[mapping]` section:\n```\n\"bash/bashrc\" = \".bashrc\"\n```\n\n#### Specify the configuration file only once\n\nFirst time you run dotbro, specify the config file.\nDotbro remembers path to this file and use it in further runs.\n\n#### Cleans dead symlinks\n\nDotbro cleans broken symlinks in your `$HOME` (or your another destination path).\n\n#### Add command\n\nDotbro can automate routine of adding files to your dotfiles repo with one single\ncommand. It does a backup copy, moves the file and creates a symlink to your file.\nAfter that you only need to add this file to your dotbro config (*I'm working on automation of this*) and commit that file to your repo.\n\n# Configuration\n\nConfiguration can be either TOML or JSON file.\nTOML is peferred, because it's a bit clearer and allows comments.\nHowever, JSON is good option for configs without mapping, it's short and simple.\n\nExample of a simple configuration file in TOML format:\n```toml\n# Dotbro configuration file.\n#\n# Some points:\n# - Almost all options have default value.\n# - You can use $ENV_VARIABLE in paths.\n\n[directories]\n\n# Directory of your dotfiles repository.\n# Default: directory of this config.\ndotfiles = \"$HOME/dotfiles\"\n\n# Destination directory - your dotfiles will be linked there.\n# Default: $HOME\ndestination = \"$HOME\"\n\n# Backup directory - your original files will be backuped there.\n# Default: $HOME/.dotfiles~\nbackup = \"$HOME/.dotfiles~\"\n\n[mapping]\n\n# Binaries\n\"bin\" = \"bin\"\n\n# ZSH\n\"zsh/zprofile\" = \".zprofile\"\n\"zsh/zshrc\" = \".zshrc\"\n\"zsh/zshrc.d\" = \".zshrc.d\"\n\"zsh/zlogin\" = \".zlogin\"\n\n# Vim\n\"vim/vimrc\" = \".vimrc\"\n\n\"git/commit_template\" = \".gitcommit\"\n\"git/config\" = \".gitconfig\"\n\"git/excludes\" = \".gitexcludes\"\n\n\"i3\" = \".i3\"\n\".keynavrc\" = \".keynavrc\"\n\".screenrc\" = \".screenrc\"\n```\n\nSee more examples in [config_examples](https://github.com/hypnoglow/dotbro/tree/master/config_examples) directory of this repo.\n\n### Options\n\nConfig has 3 sections:\n- directories\n- mapping\n- files\n\n#### Directories\n\nOption | Description | Example | Default\n--- | --- | --- | ---\ndotfiles | Directory of your dotfiles repository. | `$HOME/dotfiles` | Directory of your config file.\nsources | Directory relative to `dotfiles` where dotfiles are stored. You want to set this option if you keep your dotfiles in a subdirectory of your repo. By default this is empty, assuming your dotfiles are on the first level of `dotfiles` directory. | `src` | none\ndestination | Your dotfiles will be linked there. | `$HOME` | `$HOME`\nbackup | Your original files will be backuped there. | `$HOME/backups/dotfiles` | `$HOME/.dotfiles~`\n\n#### Mapping\n\nEach option here represents source file and destination file.  \nExample: your dotfiles directory is `$HOME/dotfiles`. In that directory, you have folder `vim` and file `vimrc` in that folder, so path is `$HOME/dotfiles/vim/vimrc`.\nIn `directories` section you have already specified `dotfiles = \"$HOME/dotfiles\"`. So to install your `vimrc` properly you need to specify such line in mapping section:\n```\n\"vim/vimrc\" = \".vimrc\"\n```\n\nAlso, mapping is optional. If you do not specify any mapping, `dotbro` will symlink all files from your dotfiles directory to your destination directory respectively. If you do want this approach, but want some files to be excluded, see [Files](#files) section.\n\n#### Files\n\nAs said above, this section is for symlinking all dotfiles without mapping specification.\n\nOption | Description | Example | Default\n--- | --- | --- | ---\nexcludes | Files to exclude from being installed | `excludes = [\"README.md\", \"dotbro.toml\"]` | none\n\nSumming up, your config without mapping will look like this:\n```toml\n# Dotbro configuration file.\n\n[directories]\n\ndotfiles = \"$HOME/dotfiles\"\n\n[mapping]\n\nexcludes = [\n    \"README.md\",\n    \"dotbro.toml\"\n]\n```\n\n# Install dotbro\n\n### Using [Go](https://go.dev/doc/install) tools:\n\n    go install github.com/hypnoglow/dotbro@latest\n\nThis downloads the source code, builds and installs the latest version of dotbro.\nThen you can use `dotbro` command right away.\n\n### Arch Linux\n\n`dotbro` package is available in AUR:\n\nhttps://aur.archlinux.org/packages/dotbro/\n\n### Precompiled binary\n\nComing soon ...\n\n# Usage\n\nTake a look at usage info running:\n\n    dotbro --help\n\nIf you haven't prepared your config file yet, it's time to do it.\nWhen your config is ready, run:\n\n    dotbro -c \u003cconfig-path\u003e\n\nThis installs your dotfiles.\n\nFurther runs you can omit config path parameter - dotbro have remembered it for you.\nSo just run:\n\n    dotbro\n\nTo move a file to your dotfiles, perform an `add` command:\n\n    dotbro add ./path-to-file\n\n# Issues\n\nIf you experience any problems, please submit an issue and attach dotbro log file,\nwhich can be found at `$HOME/.dotbro/dotbro.log`.\n\n# License\n\n[MIT](https://github.com/hypnoglow/dotbro/blob/master/LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhypnoglow%2Fdotbro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhypnoglow%2Fdotbro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhypnoglow%2Fdotbro/lists"}