4 releases (stable)
Uses new Rust 2021
|new 1.0.2||Sep 29, 2022|
|1.0.1||Sep 8, 2021|
|1.0.0||Aug 23, 2021|
|0.1.0||Jul 24, 2021|
#34 in Configuration
21 downloads per month
punktf - A cross-platform multi-target dotfiles manager
Yet another dotfile manager?!
Well, 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!
- Compile and deploy your dotfiles with one command across different platforms
- Use handlebar-like instructions to insert variables and compile sections conditionally
- Define pre- and post-hooks to customize the behavior with your own commands
- Create multiple profiles for different targets
- Works on Windows and Linux
Install punktf using Homebrew on Linux:
brew install michidk/tools/punktf
Install punktf from AUR on Arch Linux.
NOTE: As this builds
punktf from source an up-to-date rust installation is needed.
pikaur -S punktf
Install punktf using Chocolatey on Windows:
choco install punktf
Cargo & Crates.io
Install punktf using cargo and crates.io on Windows and Linux:
cargo install punktf
Building from source
punktf from source the following is needed:
- An up-to-date rust installation
- An installed nightly toolchain
# Clone git clone https://github.com/Shemnei/punktf cd punktf # Build (cargo) cargo build --release
To deploy a profile, use the
# deploy 'windows' profile `punktf` deploy windows # deploy (custom source folder) `punktf` --source /home/demo/mydotfiles deploy windows
--help flag to a given subcommand, will print usage instructions.
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:
- Paths specified with
- Paths specified by an environment variable
- The current working directory of the shell
The source folder should contain two sub-folders:
profiles\: Contains the
punktfprofile definitions (
dotfiles\: Contains folders and the actual dotfiles
punktf source folder structure:
+ profiles + windows.yaml + base.yaml + arch.json + dotfiles + .gitconfig + init.vim.win + base + demo.txt + linux + .bashrc + windows + alacritty.yml
punktf will deploy files too.
It can be set with:
- Environment variable
Profiles define which dotfiles should be used. They can be a
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.
Dotfile Repositories using punktf
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
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.