{"id":14064482,"url":"https://github.com/volllly/Dotted","last_synced_at":"2025-07-29T18:32:37.366Z","repository":{"id":115532074,"uuid":"173733996","full_name":"volllly/Dotted","owner":"volllly","description":"Cross platform dotfile managing and dev environment bootstrapping tool","archived":false,"fork":false,"pushed_at":"2023-12-15T08:53:10.000Z","size":61,"stargazers_count":24,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-23T10:34:54.912Z","etag":null,"topics":["cross-platform","dotfiles","dotfiles-manager","linux","macos","powershell","powershell-core","powershell-module","windows"],"latest_commit_sha":null,"homepage":"https://volllly.github.io/Dotted/","language":"PowerShell","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/volllly.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}},"created_at":"2019-03-04T11:41:15.000Z","updated_at":"2024-06-15T19:00:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"faec1024-84d2-4793-84d1-3c1b450ba7b5","html_url":"https://github.com/volllly/Dotted","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volllly%2FDotted","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volllly%2FDotted/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volllly%2FDotted/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volllly%2FDotted/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/volllly","download_url":"https://codeload.github.com/volllly/Dotted/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228040672,"owners_count":17860211,"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":["cross-platform","dotfiles","dotfiles-manager","linux","macos","powershell","powershell-core","powershell-module","windows"],"created_at":"2024-08-13T07:03:53.358Z","updated_at":"2024-12-04T03:30:54.411Z","avatar_url":"https://github.com/volllly.png","language":"PowerShell","readme":"\u003ca href=\"https://www.powershellgallery.com/packages/Dotted\" target=\"_blank\"\u003e![PowerShell Gallery Version](https://img.shields.io/powershellgallery/v/Dotted)\u003c/a\u003e\n\u003ca href=\"https://www.powershellgallery.com/packages/Dotted\" target=\"_blank\"\u003e![PowerShell Gallery](https://img.shields.io/powershellgallery/p/Dotted)\u003c/a\u003e\n\n\u003e # Project Status ⚠️\n\u003e \n\u003e This project is in maintainance mode. If there are any bugs I will do my best to fix them but no new features will be added.\n\u003e \n\u003e Im currently working on a successor to Dotted called [Rotz](https://github.com/volllly/rotz) which is written in rust. Rotz is compatible with Dotteds dotfile repos but\n\u003e aims to have better error handling and better ux as well as more features.\n\u003e \n\u003e See the [roadmap](https://github.com/users/volllly/projects/1/views/1) to get the status of Rotzs development.\n\n# Introduction\n\nDotted has three main functionalities. \n\n1. Linking dotfiles from a common repository to your system\n2. Installing the applications you need to start working on an new/empty machine\n3. Full Cross platform functionality\n\n# Story\n\nMy main OS is Windows and I was getting tired of manually installing and setting up my dev tools over and over again on a clean windows install.\n\nI started using [scoop](https://github.com/lukesampson/scoop/) as a package manager stand-in for the installing part and started looking into dotfile managers. There are some solutions but none of them fulfilled my need for easy and full cross platform support which is why I created my own dotfile manager. ([related xkcd](https://xkcd.com/927/))\n\n# Installation\n\nInstall the PowerShell module: \n\n```pwsh\nInstall-Module Dotted\n```\n\n## Requirements\n\n* [PowerShell](https://microsoft.com/PowerShell) \u003e= 5.x (PowerShell Core is supported)\n* [powershell-yaml](https://www.powershellgallery.com/packages/powershell-yaml/)\n\n## Run\n\nRun `Get-Command -Module Dotted` to see all commands Dotted has.\n\nYou can then use `Get-Help -Full \u003ccommand\u003e` to view the fill command help.\n\n\n\u003e ***Note:** You may need to run `Import-Module Dotted` (consider adding this to your `Profile.ps1`).*\n\u003e ***Note:** You may install the [powershell-yaml](https://www.powershellgallery.com/packages/powershell-yaml/) module `Install-Module powershell-yaml`.*\n\n## Getting Started\n\nIf you already have a `dotfiles` repo you can clone it with the `Clone-Dots` command.\n\nTo bootstrap your dev environment use `Install-Dots`.\n\nTo link your `dotfiles` use `Link-Dots`.\n\n---\n\n# Configuration\n\nDotted uses a git repo containing the`dotfiles` and [`yaml`](https://yaml.org/) files for configuration.\n\nThis git repo should be located at `~/.dotfiles`. Different paths can be specified using the `-DotfilesPath` cli flag or in the Dotted config file `~/.config/dotted/config.yaml` like this:\n\n```yaml\npath: ~./dotfiles\n```\n\nEach managed application has a subfolder containing its `dotfiles` and a `dot.yaml` file.\n\n\u003e ***Example:***\n\u003e ```\n\u003e └── vscode\n\u003e     ├── dot.yaml\n\u003e     ├── keybindings.json\n\u003e     └── settings.json\n\u003e ```\n\nThe file `dot.yaml` contains information about how to install and update the application and where to link the dotfiles.\n\n## `dot.yaml`\n\nThe `dot.yaml` file consists of four optional keys:\n\n| key        | requirement | function                                              |\n|------------|-------------|-------------------------------------------------------|\n| `links`    | `optional`  | Defines where to link which `dotfile`                 |\n| `installs` | `optional`  | Defines the install command and install dependencies. |\n| `updates`  | `optional`  | Defines the update command and update dependencies.   |\n| `depends`  | `optional`  | Defines dependencies this application needs to work.  |\n\n### `links`\n\nThe `links` section specifies where the dotfiles should be linked. **Command `Link-Dots`**\n\nIt consists of multiple `key: value` pairs where the `key` is the filename of the `dotfile` and the `value` is the link path.\n\n\u003e ***Example:***\n\u003e\n\u003e *`vscode/dot.yaml`*\n\u003e ```yaml\n\u003e ...\n\u003e links:\n\u003e   keybindings.json: ~\\AppData\\Roaming\\Code\\User\\keybindings.json\n\u003e   settings.json: ~\\AppData\\Roaming\\Code\\User\\settings.json\n\u003e ```\n\n### `installs`\n\nThe `installs` section contains the install command and optional install dependencies. **Command `Install-Dots`**\n\nIt can either be a `string` containing the install command or have two sub keys.\n\n| key       | requirement | function                           |\n|-----------|-------------|------------------------------------|\n| `cmd`     | `required`  | Contains the install command.      |\n| `depends` | `optional`  | Contains an array of dependencies. |\n\n\u003e ***Examples:***\n\u003e\n\u003e *`nodejs/dot.yaml`*\n\u003e ```yaml\n\u003e ...\n\u003e installs:\n\u003e   cmd: scoop install nodejs\n\u003e   depends: [scoop]\n\u003e ```\n\u003e *`scoop/dot.yaml`*\n\u003e\n\u003e ```yaml\n\u003e ...\n\u003e installs: iex (new-object net.webclient).downloadstring('https://get.scoop.sh')\n\u003e ```\n\n### `updates`\n\nThe `updates` section contains the update command and optional update dependencies. **Command `Update-Dots`**\n\nIt works exactly like the `installs` key described above.\n\n\u003e ***Example:***\n\u003e\n\u003e *`nodejs/dot.yaml`*\n\u003e ```yaml\n\u003e ...\n\u003e updates:\n\u003e   cmd: scoop update nodejs\n\u003e   depends: [scoop]\n\u003e ```\n\n### depends\n\nThe `depends` section contains an array of dependencies needed for the application to work correctly.\n\nThese dependencies will also be installed/updated when the application is installed/updated.\n\n\u003e ***Example:***\n\u003e\n\u003e *`zsh/dot.yaml`*\n\u003e ```yaml\n\u003e ...\n\u003e depends: [starship]\n\u003e ```\n\n## Defaults\n\nThe repo can also contain a default file `dots.yaml` in the root folder of the repo.\n\nThis file contains defaults which are automatically used for empty keys in the `dot.yaml` files.\n\nYou can use template strings (`{{ name }}`) to substitute the name of the application (the name of the folder the `dot.yaml` file is located in).\n\n\u003e ***Example:***\n\u003e\n\u003e *`dots.yaml`*\n\u003e ```yaml\n\u003e installs:\n\u003e   cmd: scoop install {{ name }}\n\u003e   depends:\n\u003e     - scoop\n\u003e     - extras\n\u003e updates:\n\u003e   cmd: scoop update {{ name }}\n\u003e   depends:\n\u003e     - scoop\n\u003e ```\n\n## OS Specifics\n\nYou can specify different behaviors per OS in all configuration files.\n\nDotted can differentiate between Windows, Linux and MacOS.\n\nTo specify OS Specific behavior you need to add top level keys named `linux`, `windows`, `darwin` (for MacOS) and `general` (applied to all OSs).\n\n\u003e ***Examples:***\n\u003e\n\u003e *`dots.yaml`*\n\u003e ```yaml\n\u003e windows:\n\u003e   installs:\n\u003e     cmd: scoop install {{ name }}\n\u003e     depends:\n\u003e       - scoop\n\u003e       - extras\n\u003e   updates:\n\u003e     cmd: scoop update {{ name }}\n\u003e     depends:\n\u003e       - scoop\n\u003e darwin:\n\u003e   installs:\n\u003e     cmd: brew install {{ name }}\n\u003e     depends:\n\u003e       - brew\n\u003e   updates:\n\u003e     cmd: brew upgrade {{ name }}\n\u003e     depends:\n\u003e       - brew\n\u003e ```\n\u003e *`neovim/dot.yaml`*\n\u003e ```yaml\n\u003e windows:\n\u003e   links:\n\u003e     ginit.vim: ~\\AppData\\Local\\nvim\\ginit.vim\n\u003e     init.vim: ~\\AppData\\Local\\nvim\\init.vim\n\u003e     \n\u003e global:\n\u003e   links:\n\u003e     ginit.vim: ~/.config/nvim/init.vim\n\u003e     init.vim: ~/.config/nvim/ginit.vim\n\u003e ```\n\nYou can also combine multiple OSs per key separating them with a `|`.\n\n\u003e ***Example:***\n\u003e\n\u003e *`dots.yaml`*\n\u003e ```yaml\n\u003e windows:\n\u003e   installs:\n\u003e     cmd: scoop install {{ name }}\n\u003e     depends:\n\u003e       - scoop\n\u003e       - extras\n\u003e darwin|linux:\n\u003e   installs:\n\u003e     cmd: brew install {{ name }}\n\u003e     depends:\n\u003e       - brew\n\u003e ```\n\n\n## Example Repository\n\nYou can see all of this functionality used in my [own dotfiles repository](https://github.com/volllly/.dotfiles).\n\n# Contribute\n\nFeel free to create pull requests and issues for bugs, features or questions. \n","funding_links":[],"categories":["PowerShell"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvolllly%2FDotted","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvolllly%2FDotted","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvolllly%2FDotted/lists"}