Managing dotfiles has always been a personal challenge for me. Whether it’s your shell configurations, editor settings, or various application configs, keeping them synchronized across multiple machines can be tedious. You can checkout my blog post and YouTube video on this subject.
After years of using various solutions, I decided to scratch my own itch and built DotMe - a modern dotfiles manager written in Rust.
The Problem
Like many developers, I maintain dotfiles across multiple machines - my personal workstation, work laptop, and various development environments. The typical workflow involves:
- Manually tracking which files need to be backed up
- Pulling git repositories with dotfiles
- Creating and managing symlinks
- Keeping everything in sync when updates happen
Most existing tools either felt too complex, too opinionated, or didn’t quite fit my workflow. I wanted something simple, fast, and flexible enough to handle different types of dotfile sources.
Here is DotMe
DotMe is a dotfiles manager that embraces simplicity while being powerful enough to handle real-world use cases. Built with Rust and leveraging async operations via Tokio, it’s designed to be fast and efficient.
Where where 3 major issues I wanted to solve:
- Managing the dotfiles easily (add, update, and remove)
- Simple by default CLI
- Each to use and guided experience
Thankfully I managed to solve all of these issues.
How to use it
You can install the CLI tool by using cargo to install it using:
cargo install dotme
Setup
Once installed, you can call the init subcommand to set everything up.
dotme init
This creates a folder in your home directory called .dotme which stores 3 things:
config.yml- Management filesymlinks.yml- List of all of the symlinks created and managed bydotmegit/- folder for store the remote git repos in
Lets first add a git repository containing my dotfiles.
dotme add https://github.com/GeekMasher/.dotfiles.git
This will clone the repository into the ~/.dotme/git/ folder and will be tracked in ~/.dotme/config.yml config file.
Dotfile repositories are typically slit up into different folders for different features (which is what I do).
So when the you add the repository dotme will ask you “which features” you want to use.
In my case I can select bash,dev,general,nvim,tmux.
The symlinks are created from these folders if they were applied on the home directory of the user.
Example:
Selecting bash for my repository will clone it to ~/.dotme/git/.dofiles/.
Inside this repo is the bashrc file bash/.bashrc.
This is them symlinked to ~/.bashrc if it doesn’t exist.
Updating
One of the key features I wanted to add was the ability to update / pull the changes. I use my public and private dotfiles for my personal laptop, servers, and my work laptop so I have all the things I liked across all my devices.
To update everything all you need to do is run:
dotme update
This command:
- Pulls the latest changes from all git repository sources
- This includes submodules
- Updates or creates symlinks to the configured destinations
- It all remove old symlinks if they are no longer needed
- Ensures everything is in sync
Removing Dotfiles
Interactive removal with selection:
dotme remove
Or remove a specific source:
dotme remove ~/.bashrc
The Vibe Coding Experience
I decided for this project that I would test out building it using “vide coding” or as I like to call it “typing fast what I want, sipping my coffee ☕ while AI does my job, and repeat”.
I’ll not be going into this blog post on how or what I used to vibe code this project but I like to point out my projects that I do use vides to code it. This is my first Open Source Project that used this technique to code a project and I was relatively impressed by the speed I could develop, test, run, and iterate on this project.
In the span of around 1-2hrs (if that) I had a finished tool that worked for all of my cases and I want very happy.
What’s Next
DotMe is currently at version 0.1.2 and solves my core use case, but there’s room for improvements (and I’m sure, bug fixes):
- Profile support (selecting a profile in a config file)
- Binaries in releases for all the major platforms (if people use it)
- Better symlink conflict resolution strategies
- Checking for dity git repos before removing it
- Prettier TUI (of cource, its 2026)
- Shell completions
The beauty of open source is that these features can evolve based on actual user needs.
Try It Out
DotMe is available on crates.io and the source code is on GitHub. If you’re looking for a straightforward way to manage your dotfiles without the complexity of larger frameworks, give it a try.
The project is MIT licensed, so feel free to fork it, contribute, or adapt it to your needs. Issues and pull requests are welcome!
Managing dotfiles doesn’t have to be complicated. Sometimes the best tool is the one you build yourself, exactly the way you need it.
DotMe is part of the 42ByteLabs suite of developer tools. Check out the repository for full documentation and examples.