# conf - a simple dotfile management tool ## Motivation I've used many tools to manage my dotfiles over the years. I've used a repo with an install script, GNU stow, and most recently, Ansible. Conf is an attempt to take the good parts of each approach and build a highly specific yet flexible tool for dotfile management. ## Installation go get git.sr.ht/~benburwell/conf ## Usage To start using conf, you'll need to specify a source directory. This is currently done through an environment variable. For example, to use a repository at ~/projects/dotfiles, use: * `CONF_SOURCE=~/projects/dotfiles` Now, you can start adopting dotfiles for conf to manage. Let's start with `.vimrc`: ``` $ conf adopt .vimrc ``` You can run this command from anywhere on your system, and conf will place a copy of your `~/.vimrc` file into `$CONF_SOURCE/templates/.vimrc`. Open up `$CONF_SOURCE/templates/.vimrc`, make a change, and then run `conf apply .vimrc`. You'll see that conf has updated your vimrc file with your latest changes. Like `conf adopt`, this command can be run from anywhere on your system; `.vimrc` in this case is relative to `$CONF_SOURCE`, not to your current directory. If you typically use Vim, you may wish to add the following to your .vimrc: ```vimscript au BufWritePost ~/dotfiles/templates/* call ConfApply(expand('%:p')) function! ConfApply(name) let l:rel = substitute(a:name, "^".expand("~/dotfiles/templates/"), "", "") silent execute "!conf apply " . l:rel endfunction ``` Any time you write changes to a file in your dotfiles, conf will automatically apply them. You may have noticed that your source dotfiles are in a directory named "templates". This is because you can use Go's templating engine to enhance your dotfiles. For example, you may want to include OS-dependent behavior: ``` {{ if eq OS "darwin" }} export OPENER=open {{ else }} export OPENER=xdg-open {{ end }} ``` The following variables are available for you: * `OS` * `Arch` * `Hostname` * `Home` If you want to define your own variables, you may do so in `$CONF_SOURCE/vars.toml` and they will be available under `.Vars`.