punktf
- A 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:
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.
yay punktf
or
pikaur -S punktf
Install punktf using Scoop on Windows:
scoop bucket add shemnei https://github.com/Shemnei/scoop-bucket
scoop install punktf
Install punktf using Chocolatey on Windows:
choco install punktf
Install punktf using cargo and crates.io on Windows and Linux:
cargo install punktf
To install punktf
from source the following is needed:
# Clone
git clone https://github.com/Shemnei/punktf
cd punktf
# Build (cargo)
cargo build --release
To deploy a profile, use the deploy
subcommand:
# deploy 'windows' profile
punktf deploy --profile windows
# deploy (custom source folder)
punktf deploy --source /home/demo/mydotfiles --profile 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:
+ 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:
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
links:
- source_path: "C:\\Users\\Demo\\Dotfiles\\test.txt"
target_path: "C:\\Users\\Demo\\test.txt"
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.