Dotfile manager.
bash
cargo install polk
```bash
polk setup github:dylanmckay
polk setup github:dylanmckay/otherdotfiles ```
```bash
polk setup github:dylanmckay
polk grab --user bob github:bob67
polk shell --user bob
polk link --user bob
polk update
polk unlink ```
```bash
polk forget
polk info ```
A repository would generally look something like this
.
..
.bashrc
.rspec
.tmux.conf
.tmux.linux.conf
.vim
.config/awesome/config.lua
README.md
Here is a table of how dotfiles within a repository map to symlinks in $HOME
.
| File | Symlink |
| ----------------------------- | ---------------------------------------------------------- |
| .bashrc
| ~/.bashrc -> ~/<dotfiles repository path>/.bashrc
|
| .tmux.conf
| ~/.tmux.conf -> ~/<dotfiles repository path>/.tmux.conf
|
| .config/awesome/config.lua
| ~/.config/awesome/config.lua -> ~/<dotfiles repository path>/.config/awesome/config.lua
|
As you can see in the above table, if a dotfile resides in a subdirectory(s), those directories
will get created in $HOME
and then a symlink to the dotfile will be created within the subdirectories.
It is not possible with this tool to symlink an entire directory within a dotfiles repository to $HOME
.
If this were possible, applications would/could write new files into the repository, which isn't good.
Dotfiles can mention required features in their filenames. These dotfiles will be conditionally symlinked depending on the current system.
When a dotfile is linked, all feature flags are substituted with the feature name. For example,
linux
will become os
, x86
will become arch
, and unix
will become family
.
Because of this, it is possible to source OS or arch specific dotfiles the same way across all
architectures.
Examples
| File | Symlink | Note |
| ----------------------------- | ---------------------- | --------------------------------------- |
| .tmux.conf
| ~/.tmux.conf
| No feature flags, will always be linked |
| .tmux.linux.conf
| ~/.tmux.os.conf
| Will only be linked on Linux |
| .tmux.linux.x86.conf
| ~/.tmux.os.arch.conf
| Will only be linked on x86 Linux |