# dotinstall
A library to build dotfile installers.
Disclaimer: I created this pretty much entirely for personal use, so features are things that I personally find useful. If you have a use case that isn't covered, file an issue or open a PR and I'll be happy to add it
## Example
There are some things that I want to have whenever I move to a new system. For example, some packages from the system's package manager, some tools via `cargo install`, and I want certain directory structures to exist.
`dotinstall` provides a DSL for automating some of these tasks in a (slightly) platform-independent way:
```rust
use dotinstall::{installer, Context};
fn main() {
// create an `Installer`, defined below
let installer = Installer::new();
// `Context` contains various metadata about the local system
let ctx = Context::init();
installer.install(&ctx).unwrap();
}
installer! {
packages {
"alacritty",
"neovim",
"build-essential" => {
pacman = "base-devel" // on arch systems, use the name `base-devel` instead
}
};
cargo {
"ripgrep",
"exa",
};
ensure {
"~/.local/bin" // ensure this directory exists
};
exec "post-install.sh"; // arbitrary script
}
```
This will do largely what you'd expect, in the order it is written:
- installs `alacritty`, `neovim` and `build-essential` (or `base-devel` on Arch) via `apt`/`pacman`
- `cargo install ripgrep` and `cargo install exa`
- creates the directory `~/.local/bin`
- runs `post-install.sh`
I plan to make this more feature rich and extensible as/when I have time
## License
Licensed under either of
* Apache License, Version 2.0
([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license
([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
## Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.