{"id":24490391,"url":"https://github.com/armandphilippot/dotig","last_synced_at":"2026-05-04T16:37:31.443Z","repository":{"id":42630637,"uuid":"375701980","full_name":"ArmandPhilippot/dotig","owner":"ArmandPhilippot","description":"A dotfiles manager using Git.","archived":false,"fork":false,"pushed_at":"2024-06-17T09:56:17.000Z","size":421,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-13T07:42:36.330Z","etag":null,"topics":["dotfiles","dotfiles-manager","git"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/ArmandPhilippot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2021-06-10T13:11:10.000Z","updated_at":"2024-06-17T09:56:14.000Z","dependencies_parsed_at":"2024-06-17T11:10:53.634Z","dependency_job_id":"7d8c4ecd-a54a-461d-98cf-7f54daa1c5ba","html_url":"https://github.com/ArmandPhilippot/dotig","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArmandPhilippot%2Fdotig","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArmandPhilippot%2Fdotig/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArmandPhilippot%2Fdotig/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArmandPhilippot%2Fdotig/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ArmandPhilippot","download_url":"https://codeload.github.com/ArmandPhilippot/dotig/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243670579,"owners_count":20328496,"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","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-manager","git"],"created_at":"2025-01-21T17:17:59.788Z","updated_at":"2026-05-04T16:37:31.432Z","avatar_url":"https://github.com/ArmandPhilippot.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dotig\n\n![License](https://img.shields.io/github/license/ArmandPhilippot/dotig?color=blue\u0026colorA=4c4f56\u0026label=License\u0026style=flat-square) ![Version](https://img.shields.io/github/package-json/v/ArmandPhilippot/dotig?color=blue\u0026colorA=4c4f56\u0026label=Version\u0026style=flat-square)\n\nA dotfiles manager to quickly setup your machine \u0026 synchronize your dotfiles.\n\n\u003e [!WARNING]\n\u003e This package is deprecated. I'm now using [chezmoi](https://www.chezmoi.io/) and I don't plan to maintain this package anymore.\n\n## Description\n\nDotig is a shell script, Bash actually, to manage your dotfiles and backup them with Git. If offers a menu or a CLI allowing you to:\n* add new dotfiles (relative and absolute paths are supported) and create automatically the symbolic links\n* update the symbolic links and remove the broken ones\n* commit all changes\n* push the changes\n* pull your remote changes to keep your dotfiles up-to-date\n* update the Git submodules (if you use them)\n* remove the symlinks (by replacing them with a copy of your dotfiles)\n* display a dirty files list by category (i.e. modified, deleted...)\n* check for Dotig updates\n* print Dotig version\n* print Dotig help\n\nThe script also check your repo status to let you know if pull/push are needed or if your repo is dirty.\n\nDotig stands for Dot(files) + gi(t) (inverted). I wanted a short name to avoid creating an alias. I also wanted a name not used by other projects (\"*dotman*\" is common for example).\n\n## Requirements\n\nDotig needs:\n* [Git](https://git-scm.com/)\n* Bash\n* GNU/Linux\n* GNU Coreutils\n* `curl` (optional: used to check for Dotig updates)\n\nIf you want to backup your dotfiles, and since you're here, I assume Git is not a problem.\n\n**Regarding GNU/Linux:** I do not have a Mac at my disposal to test and to make Dotig compatible. Also, I have not yet tested on BSD systems.\n\n**Regarding GNU Coreutils:** I tried to make Dotig portable by avoiding some GNU Coreutils but there are still incompatible commands or options.\n\n## Structure\n\nDotig is based on [XDG Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) with extra environment variables to make the tool more portable.\n\nIf you have not set these environment variables and if your distribution does not provide some default, Dotig define some defaults for you. Then, it creates the appropriate directories inside your dotfiles repository when you add some dotfiles.\n\n`$DOTFILES` corresponds to your dotfiles repository. See [Configuration](#configuration).\n\n|(Custom) XDG Specification|`$HOME` default paths|Repo paths|\n|---|---|---|\n|`XDG_BIN_HOME`|`~/.local/bin`|`$DOTFILES/home/xdg_bin`|\n|`XDG_CACHE_HOME`|`~/.cache`|`$DOTFILES/home/xdg_cache`|\n|`XDG_CONFIG_HOME`|`~/.config`|`$DOTFILES/home/xdg_config`|\n|`XDG_DATA_HOME`|`~/.local/share`|`$DOTFILES/home/xdg_data`|\n|`XDG_LIB_HOME`|`~/.local/lib`|`$DOTFILES/home/xdg_lib`|\n|`XDG_STATE_HOME`|`~/.local/state`|`$DOTFILES/home/xdg_state`|\n\nThis is useful if you use different paths on two different distributions. For example:\n* your first distribution can use `XDG_CONFIG_HOME=$HOME/.config`\n* the second can use `XDG_CONFIG_HOME=$HOME/.local/etc`\n\nDotig can also copy files that are not in XDG paths. In this case, it will add your repository path before the file path. With one exception for HOME: `/home/username` is replaced with `/home`.\n\nFor example:\n|File path|Copy path|\n|---|---|\n|`~/.ssh/config`|`$DOTFILES/home/.ssh/config`|\n|`/etc/nanorc`|`$DOTFILES/etc/nanorc`|\n\nIf you add files that are not in your `$HOME`, Dotig will copy them but no symbolic link will be created. It does not use administrator rights. So, you can backup these files but you will have to manage their integration yourself.\n\nThe behavior is the same for updating and deleting symlinks.\n\nYou can also safely put some files (like a custom init script or a readme) at the root of your dotfiles repository. Dotig won't touch them except for Git features:\n* they will be included in your repo status.\n* if they are modified and you use Dotig to make a commit, they will be added to this commit.\n## Install\n\nDownload `dotig` then make sure it is executable:\n\n```bash\nchmod +x dotig\n```\n\n## Usage\n\nFrom the directory containing Dotig:\n```bash\n./dotig\n```\n\nOr, if it is in your `PATH`, simply:\n```bash\ndotig\n```\n\nThen, let you guide with the menu. Or, you can also use Dotig via CLI.\n\nIf it is the first time you run Dotig, you may want to use `--interactive` and `--verbose` options. See [CLI options](#options). It is not required, but this way you can understand what is done.\n\n## CLI\n\nIf you want to use Dotig from CLI, it is recommended to set the `DOTFILES` environment variable. See [Configuration](#configuration).\n### Commands\n\n|Commands|Usage|Description|\n|---|---|---|\n|`add`|`dotig add`\u003cbr /\u003e`dotig add \u003cfiles\u003e`|Add new dotfiles and create symlinks.|\n|`update`|`dotig update`|Update symlinks and remove broken ones.|\n|`rm`|`dotig rm`|Replace symlinks with the original files.|\n|`commit`|`dotig commit`|Git commit all changes.|\n|`push`|`dotig push`|Git push all changes.|\n|`pull`|`dotig pull`|Git pull your remote changes.|\n|`submodule`|`dotig submodule`|Update all your Git submodules.|\n|`status`|`dotig status`|Show the repo status (dirty files or if push/pull is needed).|\n|`version`|`dotig version`|Show Dotig version and check for new release.|\n\n### Global Options\n\n|Options|Usage|Description|\n|---|---|---|\n|`-i`\u003cbr /\u003e`--interactive`|`dotig -i`\u003cbr /\u003e`dotig --interactive`|Interactive mode. Helpful to configure your repo or to print additional dialogs.|\n|`-h`\u003cbr /\u003e`--help`|`dotig -h`\u003cbr /\u003e`dotig --help`|Show Dotig help.|\n|`-s`\u003cbr /\u003e`--status`|`dotig -s`\u003cbr /\u003e`dotig --status`|Print a summary of the repo status before Dotig menu.|\n|`-p`\u003cbr /\u003e`--private`|`dotig -p`\u003cbr /\u003e`dotig --private`|Use your private dotfiles repository instead of the default one.|\n|`-v`\u003cbr /\u003e`--verbose`|`dotig -v`\u003cbr /\u003e`dotig --verbose`|Verbose mode. Explain what is done.|\n\nSome options, like `--verbose`, `--private` or `--interactive` can be used before or after the command. Result will be the same.\n\nExample:\n```\ndotig -v \u003ccommand\u003e\ndotig \u003ccommand\u003e -v\n```\n\n### Other options\n\nEach command also has its own options. You can see them with: `dotig \u003ccommand\u003e -h` or `dotig \u003ccommand\u003e --help`.\n\n## Configuration\n\nYou can add Dotig manually to your `PATH` to execute it from everywhere or, according to your distribution, simply add the file to `$HOME/.local/bin` (which may be in your `PATH` by default).\n\nIn order for the script to remember your dotfiles directory, you may want to define an environment variable `DOTFILES` in your shell configuration files (like `~/.profile` for Bash or `~/.zshenv` for Zsh).\n\nExample:\n\n```bash\nexport DOTFILES=\"$HOME/.dotfiles\"\n```\n\nSometimes we also need to manage secrets (i.e. credentials for example) or we do not want to share some dotfiles. So Dotig allows you to manage a secondary repository. To do so, you need to define an environment variable `DOTFILES_PRIVATE` the same way as `DOTFILES`.\n\nExample:\n\n```bash\nexport DOTFILES_PRIVATE=\"$HOME/.private-dotfiles\"\n```\n\n## Motivation\n\nI know it already exists a lot of solution to manage the dotfiles like bare repository, [chezmoi](https://github.com/twpayne/chezmoi) or [dotbot](https://github.com/anishathalye/dotbot) for example. I tested some of them but I'm not satisfied. So, I decided to create my own script to manage **my dotfiles the way I wanted**. As the features grew, I thought that the script could be helpful to others. So, Dotig is born.\n\nAt first, I wanted a solution that include Git and GNU Stow. Finally, I realized that I didn't need GNU Stow. It was easier to create the symlinks \"manually\" and it allowed me to keep the desired structure. And, that way, it takes away a dependency and makes the script more portable.\n\nHowever, for now, as you can see in [Requirements](#requirements), the compatibility with other OS is not guaranteed. But, it is a possible development.\n\n## Disclaimer\n\n### Compatibility\n\nI have only tested on Manjaro Linux 21, Debian 10, Ubuntu 20 and Fedora 34. So:\n* maybe there are some requirements not listed\n* a different behavior is possible depending on your distribution and the version of the tools used (options can be different or missing)\n\n### Migration\n\nDotig does not manage migration from or to another tool. So, if your dotfiles repository already contains some paths you will have to adjust the paths manually to keep your repo clean.\n\n**For example:** if you have a `$DOTFILES/.config/nano/nanorc`, you may want to change the path to `$DOTFILES/home/xdg_config/nano/nanorc` (and vice versa if you want to switch from Dotig to another tool).\n\n## License\n\nThis project is open-source and it is licensed under the [MIT license](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farmandphilippot%2Fdotig","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farmandphilippot%2Fdotig","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farmandphilippot%2Fdotig/lists"}