aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: f72ae709c079bbe8a3f2c3d5d23379bb5a9fa442 (plain)
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
59
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`
- [ ] Absolute Paths in dest field

## License
This is licensed under the [MIT](LICENSE) license.