punktf
- A cross-platform multi-target dotfiles managerWell, yes, but hear me out: This project was driven by the personal need of having to manage several dotfiles for different machines/targets. You want the same experience everywhere: On your Windows workstation along with an Ubuntu WSL instance, your Debian server and your private Arch installation. This tool fixes that problem while being cross-platform and blazingly fast. You won't need multiple sets of dotfile configurations ever again!
Features:
Install punktf using Homebrew on Linux:
sh
brew install michidk/tools/punktf
Install punktf from AUR on Arch Linux.
To install it use your favorite AUR capable package manager (e.g. yay, pikaur):
NOTE: As this builds punktf
from source an up-to-date rust installation is needed.
sh
yay punktf
or
sh
pikaur -S punktf
Install punktf using Chocolatey on Windows:
sh
choco install punktf
Install punktf using cargo and crates.io on Windows and Linux:
sh
cargo install punktf
To install punktf
from source the following is needed:
```bash
git clone https://github.com/Shemnei/punktf cd punktf
cargo build --release ```
To deploy a profile, use the deploy
subcommand:
```sh
punktf
deploy windows
punktf
--source /home/demo/mydotfiles deploy windows
```
Adding the -h
/--help
flag to a given subcommand, will print usage instructions.
The punktf
source folder is the folder containing the dotfiles and punktf
profiles. We recommend setting the PUNKTF_SOURCE
environment variable so that the dotfiles can be compiled using punktf deploy <profile>
.
punktf
searches for the source folder in the following order:
-s
/--source
PUNKTF_SOURCE
The source folder should contain two sub-folders:
profiles\
: Contains the punktf
profile definitions (.yaml
or .json
)dotfiles\
: Contains folders and the actual dotfilesExample punktf
source folder structure:
ls
+ profiles
+ windows.yaml
+ base.yaml
+ arch.json
+ dotfiles
+ .gitconfig
+ init.vim.win
+ base
+ demo.txt
+ linux
+ .bashrc
+ windows
+ alacritty.yml
Determines where punktf
will deploy files too.
It can be set with:
target
in the punktf
profile filePUNKTF_TARGET
Profiles define which dotfiles should be used. They can be a .json
or .yaml
file.
Example punktf
profile:
```yaml variables: OS: "windows"
target: "C:\Users\Demo"
dotfiles: - path: "base" - path: "windows/alacritty.yml" target: path: "C:\Users\Demo\AppData\Local\alacritty.yml" merge: Ask ```
All properties are explained in the wiki.
Please refer to the wiki for the templating syntax.
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.