# WIP: badm - But Another Dotfiles Manager

[](https://actions-badge.atrox.dev/jakeschurch/badm/goto)
[](https://crates.io/crates/badm)
[](https://docs.rs/badm)

[](LICENSE)
`badm` is "But Another [Dotfiles](https://en.wikipedia.org/wiki/Hidden_file_and_hidden_directory) Manager".
## How it works
badm stores your dotfiles in a directory that replicates the directory hierarchy of the dotfiles' original path, and creates symlinks to their original paths. This creates a standardized approach for managing, deploying, and sharing dotfiles among different systems and users.
### Quick Demo
- ferris has created a directory to store their dotfiles at `~/.dots`
- `badm set-dir ~/.dots` sets the BADM dotfiles dir at `~/.dots`
- badm will search for a badm config file at one of the two valid locations: `$HOME` and `$XDG_CONFIG_HOME`. If the config file not found, badm will create it under `$HOME`
<pre>
/home
└── ferris
└── .dots
├── .badm.toml
└── .gitconfig
</pre>
- to store `~/.gitconfig` as a dotfile, ferris runs `badm stow ~/.gitconfig` _(relative paths work as well)_
- badm replicates the path of the dotfile under the `~/.dots` directory
- the dotfile is moved to this new path in the set dotfiles directory and symlinked at its original path which points to its new path
<pre>
/home
└── ferris
├── .badm.toml
├── .dots
│ └── home
│ └── ferris
│ └── .gitconfig
└── .gitconfig -> /home/ferris/.dots/home/ferris/.gitconfig
</pre>
## WIP: Getting Started/Installation
TODO: will populate for v1.0.0 release
## Commands
* `badm set-dir <DIRECTORY>` - set dotfiles directory location, if the location is not created BADM has the ability to create one for you
* `badm stow <FILE>` - store a file in the dotfiles directory, create a symlink at the original source of the stowed file.
* REVIEW: recursive flag?
* `badm deploy <FILE>` - for new configurations, create symlinks in directories relative to the dotfile's directory hierarchy. Directories to replicate the stored dotfile's directory structure will be created if not found.
* `badm remove <FILE>` - remove the stored file from the dotfiles directory and replace the symlink with the original file
## Roadmap
- [ ] Command-line tool with ability to:
- [x] create/set dotfiles directory (v0.3.0)
- [ ] store dotfiles in badm directory
- [ ] deploy/setup dotfiles from badm directory to new systems
- [ ] remove dotfiles from badm directory
- [x] Use [TOML](https://en.wikipedia.org/wiki/TOML) file for persistent configuration
- [ ] [Glob](https://en.wikipedia.org/wiki/Glob_(programming)) wildcards are supported (`*`, `?`)
- [ ] Support exclude patterns
- [ ] Support system-specific dotfiles
- [ ] Support multiple dotfiles directories (?)
## Contributing
Pull requests, issues/feature requests, and bug reports are welcome!
## Similar Projects
- [GNU Stow](https://www.gnu.org/software/stow/)
- [YADM](https://www.yadm.io)
## License
This project is made available under the MIT license. See the [LICENSE](LICENSE) file for more information.