dotty is a simple-to-use config and dotfiles manager with profile support, written in C++23
- Simple Configuration: Use a straightforward syntax to map source files to their destinations.
- Profile Management: Supports multiple configuration profiles (e.g.,
main,wm,terminal). - GitHub Integration: Creates & synces a GitHub repository for your dotfiles
Before building and using dotty, ensure you have the following installed:
- Dependencies:
- [xmake] (https://xmake.io/) - Dotty's build tool
- [GCC] (https://gcc.gnu.org) - Be sure the compiler is up-to-date
- [git] (https://git-scm.com/) - Git command line
- [github-cli] (https://cli.github.com/) For repository management
- [CLI11] (https://github.com/CLIUtils/CLI11) For command line parsing
- [readline] (https://github.com/JuliaAttic/readline) For user input
-
Clone the repository:
git clone https://github.com/Monjaris/dotty.git cd dotty -
Build dotty using xmake:
./build.sh
-
Install the binary:
xmake install
To set up dotty for the first time:
dotty initThis command will:
- Check for GitHub authentication.
- Prompt for a repository name and visibility.
- Initialize a local git repository in
~/.local/share/dotty/<profile-name>. - Create a corresponding repository on GitHub and push the initial commit.
dotty looks for configuration in ~/.config/dotty/<profile>/config.
The configuration file uses a simple mapping syntax:
"/path/to/source/file" >> "relative/path/in/storage"
Example:
"~/.bashrc" >> "shell/.bashrc"
"~/.config/nvim/init.lua" >> "nvim/init.lua"
To copy your local files into the dotty storage:
dotty writeThis will parse your config file and update the files in ~/.local/share/dotty/<profile-name> based on the mappings.
*.hpp: Headers that have (or are planned to have) implementation in a corresponding*.cpp.*.h: Headers that do not need a separate implementation file (templates, inline functions, constants, etc.).
- Variables/Constants/Members:
snake_case - Functions/Methods:
camelCase - Classes/Typedefs:
PascalCase - Macros / Constexprs:
UPPER_SNAKE_CASE
src/main.cpp: Entry point.src/core.h: Common utility functions and stream wrappers.src/common.h: Global definitions, types, and includes.
This project is licensed under the GNU AGPLv3 2026 Monjaris