First-time setup.
A single evening.

Run dotstate with no arguments and it launches into a guided setup. This page walks through the same flow — useful if you'd rather understand the choices before you make them.

Launch

$ dotstate

The TUI opens in welcome mode. There's one important decision to make up front: how do you want to store your dotfiles?

Choose a repository mode

Create for me (GitHub)

dotstate creates a private dotstate-storage repo on your GitHub account and manages it for you. Requires a GitHub token. The easiest path if you don't already have a dotfiles repo.

Use my own repository

Point dotstate at any existing git repo you own — on GitHub, GitLab, Bitbucket, self-hosted Gitea, or anywhere else. Uses your system's git credentials. No token required.

GitHub-managed mode

Pick this if you want dotstate to handle the repo creation. You'll be asked for a GitHub token — dotstate supports both fine-grained and classic tokens.

Fine-grained tokens (recommended)

Create one at github.com/settings/personal-access-tokens/new.

PermissionAccessWhy
AdministrationRead & writeTo create the dotstate-storage repository
ContentsRead & writeTo sync your dotfiles to and from the repository
MetadataRead-onlyIncluded automatically by GitHub
For initial setup, grant access to All repositories. Once dotstate has created the storage repo, regenerate the token and restrict it to that repo only.

Classic tokens

Create one at github.com/settings/tokens. Required scope: repo (full control of private repositories).

Storing the token

You can provide the token in two ways:

Bring-your-own mode

Pick this if you already have a dotfiles repo anywhere, or if you'd rather not give dotstate a token. Provide the clone URL — SSH or HTTPS — and dotstate clones into ~/.config/dotstate/storage/.

# Any of these work:
git@github.com:you/dotfiles.git
https://gitlab.com/you/dotfiles.git
https://git.selfhosted.example/you/dotfiles.git

Your system's git credentials are used for push and pull, just as they are for any other repo.

Create your first profile

After the repo is ready, dotstate prompts for a profile name. Pick something descriptive — personal, work, or the hostname of this machine. You can always add more later. See profiles & inheritance for how to organize multiple.

Adopt your first files

The main menu opens. Navigate to Manage Files, and pick the dotfiles you want to adopt. dotstate moves each into the repo and creates a symlink in its place — so your tools keep finding them at the usual paths, and version control watches for changes.

Sync

Go to Sync with Remote — or run dotstate sync — to commit, pull, and push. That's it. Your dotfiles are now backed up and ready to be pulled down on another machine with dotstate activate.

Next

Read the quick start for a five-minute tour, or jump to package management to track CLI tools alongside your dotfiles.