Add README
This commit is contained in:
parent
a8edc8ee2b
commit
a2b6e0a185
1 changed files with 129 additions and 0 deletions
129
README.md
Normal file
129
README.md
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
Dotbot
|
||||||
|
======
|
||||||
|
|
||||||
|
Dotbot is a tool that bootstraps your dotfiles (it's a [Dot]files
|
||||||
|
[bo]o[t]strapper, get it?). It does *less* than you think, because version
|
||||||
|
control systems do more than you think.
|
||||||
|
|
||||||
|
Dotbot is designed to be lightweight and self-contained, with no external
|
||||||
|
dependencies and no installation required. Dotbot is easy to set up, and it's
|
||||||
|
easy to configure.
|
||||||
|
|
||||||
|
Dotbot is VCS-agnostic, and it doesn't make any attempt to manage your
|
||||||
|
dotfiles. Existing version control systems like git are pretty awesome at
|
||||||
|
doing this.
|
||||||
|
|
||||||
|
Dotbot can be a drop-in replacement for any other tool you were using to manage
|
||||||
|
your dotfiles.
|
||||||
|
|
||||||
|
Dotfiles Organization
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
A great way to organize your dotfiles is having all of them in a single
|
||||||
|
(isolated) git repository and symlinking files into place. You can add plugins
|
||||||
|
and stuff using git submodules. This whole symlinking business can be a bit of
|
||||||
|
trouble, but it's much better than just having your entire home directory under
|
||||||
|
source control, and Dotbot lets you have a one-click install process, so you
|
||||||
|
can have all the benefits of isolation without the annoyance of having to
|
||||||
|
manually copy or link files.
|
||||||
|
|
||||||
|
Dotbot itself is entirely self contained and requires no installation, so it's
|
||||||
|
not necessary to install any software before you provision a new machine! All
|
||||||
|
you have to do is download your dotfiles and then run `./install`.
|
||||||
|
|
||||||
|
Template
|
||||||
|
--------
|
||||||
|
|
||||||
|
To make life easier, you can fork the [template repository][1]. If you want,
|
||||||
|
you can rename it afterwards (to something like just `dotfiles`). If you're
|
||||||
|
looking for inspiration, the template repository contains links to dotfiles
|
||||||
|
repositories that use Dotbot.
|
||||||
|
|
||||||
|
If you prefer, instead of reading about how Dotbot works, you could refer to
|
||||||
|
the code in the template repository and get a feel for how to set things up,
|
||||||
|
learning by example.
|
||||||
|
|
||||||
|
|
||||||
|
Setup
|
||||||
|
-----
|
||||||
|
|
||||||
|
Dotbot is super easy to set up. This description is given in terms of git and
|
||||||
|
git submodules, but the procedure is similar for other VCSs.
|
||||||
|
|
||||||
|
You can add Dotbot to your dotfiles by running
|
||||||
|
`git submodule add https://github.com/anishathalye/dotbot`
|
||||||
|
from within your git repository.
|
||||||
|
|
||||||
|
To have a one-click (one-command) install, you can place a bootstrap install
|
||||||
|
shell script that calls Dotbot with the appropriate parameters. This script
|
||||||
|
simply passes its arguments to Dotbot, so the script itself will not have to be
|
||||||
|
updated once it's placed in the proper location (the Dotbot repository can be
|
||||||
|
updated independently).
|
||||||
|
|
||||||
|
An example bootstrap install shell script is given in
|
||||||
|
`tools/git-submodule/install` (and included below). The script assumes that the
|
||||||
|
configuration is located in `install.conf.json` and Dotbot is located in
|
||||||
|
`dotbot`. The script automatically makes sure that the correct version of
|
||||||
|
Dotbot is checked out in the submodule.
|
||||||
|
|
||||||
|
Adapting the bootstrap script for different situations (such as using a
|
||||||
|
different VCS) is fairly straightforward.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
CONFIG="install.conf.json"
|
||||||
|
DOTBOT_DIR="dotbot"
|
||||||
|
|
||||||
|
DOTBOT_BIN="bin/dotbot"
|
||||||
|
BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
|
cd "${BASEDIR}"
|
||||||
|
git submodule update --init --recursive ${DOTBOT_DIR}
|
||||||
|
|
||||||
|
"${BASEDIR}/${DOTBOT_DIR}/${DOTBOT_BIN}" -d "${BASEDIR}" -c "${CONFIG}" $@
|
||||||
|
```
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Dotbot uses json-formatted configuration files to let you specify how to set up
|
||||||
|
your dotfiles. Currently, Dotbot knows how to `link` files and execute `shell`
|
||||||
|
commands. Dotbot executes tasks in the order that they are specified in.
|
||||||
|
|
||||||
|
**Ideally, bootstrap configurations should be idempotent. That is, the
|
||||||
|
installer should be able to be run multiple times without causing any
|
||||||
|
problems.** This makes life easier.
|
||||||
|
|
||||||
|
Dotbot configuration files are json arrays of tasks, where each task is a
|
||||||
|
dictionary that contains a command name mapping to data for that command. For
|
||||||
|
`link`, you specify how files should be linked in a dictionary. For `shell`,
|
||||||
|
you specify an array consisting of commands, where each command is an array
|
||||||
|
consisting of the shell command as the first element and a description as the
|
||||||
|
second.
|
||||||
|
|
||||||
|
Dotbot is aware of a base directory (that is specified when running the
|
||||||
|
installer), so link targets can be specified relative to that, and shell
|
||||||
|
commands will be run in the base directory.
|
||||||
|
|
||||||
|
The configuration format is pretty simple, so here's an example to help you get
|
||||||
|
started. The convention for configuration file names is `install.conf.json`.
|
||||||
|
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"link": {
|
||||||
|
"~/.tmux.conf": "tmux.conf",
|
||||||
|
"~/.vimrc": "vimrc",
|
||||||
|
"~/.vim": "vim/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"shell": [
|
||||||
|
["git submodule update --init --recursive", "Installing submodules"]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
[1]: https://github.com/anishathalye/dotfiles_template
|
Loading…
Reference in a new issue