1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
If you are like me, you probably store your dotfiles in a git repo and symlink them into the right places. However, this
always takes a considerable amount of time to do on a new system. In the past, I resorted to shell scripts to do my bidding,
but that was often machine-specific, wouldn't allow me to configure multiple machines without significant hassle, and was
generally a bit _clunky_.
# The solution: `dots`
`dots` is a machine-agnostic, fs-agnostic and structure-agnostic deployer for dotfiles stored in an arbitrary directory.
Written in rust, it's :sparkles: _blazingly fast_ :sparkles: and easy to use.
## Installation
To install `dots`, head over to [the releases page](https://github.com/maxbossing/dots/releases/latest) and choose the
appropriate option for your system. `dots` currently only supports linux, but in glibc and MUSL variants.
To build from source, simply clone and run `cargo build --release`.
## Usage
At the core, `dots` just symlinks arbitrary files and directories as specified by a configuration file. Refer to the [dots.toml](#dotstoml) section for an example.
To deploy a set of files, use `dots deploy`.
If you want to un-deploy a set of dots (removing the links created), you can use `dots unlink`
## dots.toml
By default, `dots` will look for a `dots.toml` file in the current directory.
Example `dots.toml`:
```toml
dots_dir = "/home/anon/dots" # If omitted, defaults to working directory
[[dot]]
src = "nvim" # Resolved against dots_dir
dest = ".config/nvim" # Resolved against $HOME
[[dot]]
src = "fish"
dest = ".config/fish"
[[dot]]
src = "tmux.conf"
dest = ".tmux.conf"
[[...]]
```
If you want to use a different file (for example a different machine but based on the same files), pass a path to the executable
```bash
dots deploy --config some_file.dots.toml
```
## Todo
- [x] Allow to "undeploy", eg. to automatically remove symlinks created by `dots`
## License
This is licensed under the [MIT](LICENSE) license.
|