{"id":18894938,"url":"https://github.com/davidde/dotcon","last_synced_at":"2026-05-06T01:32:53.966Z","repository":{"id":102181134,"uuid":"335667166","full_name":"davidde/dotcon","owner":"davidde","description":"Dotfile configuration manager","archived":false,"fork":false,"pushed_at":"2021-02-03T19:55:58.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-31T07:33:07.534Z","etag":null,"topics":["cli","configuration","dotfiles","dotfiles-manager","linux"],"latest_commit_sha":null,"homepage":"","language":"Python","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/davidde.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-MIT","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-02-03T15:22:48.000Z","updated_at":"2021-02-03T19:56:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"110a735c-2fcc-47ae-b924-a6266e793f14","html_url":"https://github.com/davidde/dotcon","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidde%2Fdotcon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidde%2Fdotcon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidde%2Fdotcon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidde%2Fdotcon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davidde","download_url":"https://codeload.github.com/davidde/dotcon/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239869224,"owners_count":19710486,"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":["cli","configuration","dotfiles","dotfiles-manager","linux"],"created_at":"2024-11-08T08:25:36.895Z","updated_at":"2026-02-27T16:30:14.107Z","avatar_url":"https://github.com/davidde.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dotfile configuration manager\n### :zap: Dotfile management made easy\n- Simple and consistent\n- Configurable yet intuitive\n- Minimal codebase owing to a few common sense conventions\n\n### :zap: There's no place like ... $HOME!\n- Bring your own dotfiles and feel right at home\n- Builds on the tool you already know: git\n- No need to change habits or learn anything new\n\n## Why another dotfile manager?\nMost other tools seem to be large and unintuitive for the simplest use cases. Dotcon was conceived to be easy and intuitive from the get-go, and *remain* that way as things grow; with minimal learning curve.\n\nThis is accomplished by establishing a few simple conventions. The main one being that everything that should be linked to $HOME resides in a directory with the same hierarchy as the real $HOME. This makes it trivial to link everything in place without complicated configs; everything **\"just works\"**, by default.\n\n## Directory conventions\nThese are the common directories and what they're used for:\n\n* `home`: Everything that should be symlinked to $HOME literally.\n* `lists`: All sorts of lists for automation purposes, e.g. packages and extensions.\n* `scripts`: Executable scripts. `chmod u+x`'ed and added to path.\n* `submodules`: All submodules conveniently in one place. If some submodule content needs to be symlinked to $HOME, it should simply be symlinked to `.dotfiles/home/`, from where Dotcon itself can take over.\n\nBy default, all files in the `.dotfiles/home/` directory will be linked to their equivalents in $HOME.  \nNaturally you can add any other directories, e.g.:\n* `dconf`\n* `bookmarks`\n* `etc`\n\nSince some directories (e.g. `/etc/`) can contain files unsuitable for public disclosure, Dotcon is capable of working with different dotfile directories. This way you can have both public and private dotfiles if you're so inclined.\n\n## Features\nDotcon's primary feature is **easy symlinking**.  \nThere is no need to maintain complicated configs; anything in `.dotfiles/home/` will be symlinked automatically to the right path.\n\n**Features that may be implemented:**\n* [x] Special unicode identifier (currently `⭐`/`U+2B50`) indicating which directories in `home` should be linked whole (instead of their individual files).  \n  E.g.:\n  - `~/.dotfiles/home/.config/vlc⭐/` links to `~/.config/vlc/`, while\n  - `~/.dotfiles/home/.config/vlc/` links its content files to the same files inside `~/.config/vlc/`\n* [ ] `-o, --overwrite` flag: To specify link overwriting behavior:\n  - `none`: Do not overwrite existing destination files.\n  - `all`: Overwrite all existing destination files.\n  - `prompt`: Prompt for each individual file.\n* [ ] `dotcon.toml` configuration file:\n  - To enable easier customization of defaults.\n  - To enable custom linking rules (`custom` dir next to `home`).\n* [ ] `hosts` directory: To enable device-specific linking rules.\n* [ ] ...\n\n## Installation\nNote you can easily testrun Dotcon without installing, by running `dotcon.py` directly:\n```bash\ngit clone https://github.com/davidde/dotcon.git\nchmod u+x ./dotcon/dotcon/dotcon.py\n./dotcon/dotcon/dotcon.py\n```\nTo use the `dotcon` command however, you'll need to either [install](#installing-from-source), or alias it to the binary:\n```bash\n# In ~/.zshrc or ~/.bashrc:\n\nalias dot='~/dotcon/dotcon/dotcon.py'\n# (Update paths to where you cloned)\n```\nThe reason we're using the more unique `dotcon` as command/name, is that there are already a plethora of commands like `dot` and `dotty`. Using e.g. `dot` as a command would conflict with the other `dot`s. However, if you're not using these commands, there is no reason *not* to alias to `dot`. The shorter the better, right?\n\n### Installing from source\n```bash\ngit clone https://github.com/davidde/dotcon.git \u0026\u0026 cd dotcon\npip install .\n```\nNow you can just run `dotcon` without complications.\n\n## Usage\n| dotcon [-h] [-d DIR] |\n|----------------------|\n\n\n**Optional arguments:**\n* `-h, --help`: Show help message and exit.\n* `-d DIR, --dir DIR`: Relative or absolute path to dotfile directory. Defaults to `~/.dotfiles`.\n\n**Examples:**\n* `dotcon`  \n  Symlink everything in `~/.dotfiles/home/` to its equivalent in `~`. By default, existing destination files are not overwritten.\n* `dotcon -d .dotfolder`  \n  Same, but for custom dotfiles location; symlink everything in `./.dotfolder/home/` to its equivalent in `~`.\n\n**Repo's using Dotcon:**\n* My very own [dotfiles](https://github.com/davidde/.dotfiles).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidde%2Fdotcon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavidde%2Fdotcon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidde%2Fdotcon/lists"}