{"id":17835716,"url":"https://github.com/shemnei/punktf","last_synced_at":"2025-05-15T10:06:52.599Z","repository":{"id":38109049,"uuid":"388874900","full_name":"Shemnei/punktf","owner":"Shemnei","description":"⚡ A cross-platform multi-target dotfiles manager","archived":false,"fork":false,"pushed_at":"2024-12-04T18:32:00.000Z","size":895,"stargazers_count":288,"open_issues_count":11,"forks_count":8,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-05-15T10:06:10.440Z","etag":null,"topics":["archlinux","cli","dotfile","dotfiles","dotfiles-manager","hacktoberfest","linux","rust"],"latest_commit_sha":null,"homepage":"https://shemnei.github.io/punktf/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Shemnei.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-23T17:18:38.000Z","updated_at":"2025-05-10T12:40:56.000Z","dependencies_parsed_at":"2024-11-17T13:01:57.422Z","dependency_job_id":"cdff2465-116f-4ff2-8e34-01a5a35fab23","html_url":"https://github.com/Shemnei/punktf","commit_stats":{"total_commits":566,"total_committers":5,"mean_commits":113.2,"dds":"0.16784452296819785","last_synced_commit":"306efa5a0c2eb901f57cef49f62e4aee6cc42ee9"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shemnei%2Fpunktf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shemnei%2Fpunktf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shemnei%2Fpunktf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Shemnei%2Fpunktf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Shemnei","download_url":"https://codeload.github.com/Shemnei/punktf/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254319720,"owners_count":22051073,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archlinux","cli","dotfile","dotfiles","dotfiles-manager","hacktoberfest","linux","rust"],"created_at":"2024-10-27T20:24:29.693Z","updated_at":"2025-05-15T10:06:47.575Z","avatar_url":"https://github.com/Shemnei.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `punktf` - A multi-target dotfiles manager\n[![MIT License](https://img.shields.io/crates/l/punktf)](https://choosealicense.com/licenses/mit/) [![Continuous Integration](https://img.shields.io/github/check-runs/Shemnei/punktf/main\n)](https://github.com/Shemnei/punktf/actions) [![rust docs](https://docs.rs/punktf-lib/badge.svg)](https://docs.rs/punktf-lib/latest/punktf_lib/) [![Crates.io](https://img.shields.io/crates/v/punktf)](https://crates.io/crates/punktf) [![Homebrew](https://img.shields.io/badge/homebrew-available-blue?style=flat)](https://github.com/michidk/homebrew-tools/blob/main/Formula/punktf.rb) [![AUR](https://img.shields.io/aur/version/punktf)](https://aur.archlinux.org/packages/punktf) [![Chocolatey](https://img.shields.io/chocolatey/v/punktf?include_prereleases)](https://community.chocolatey.org/packages/punktf)\n\n## Yet another dotfile manager?!\n\nWell, 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!\n\nFeatures:\n\n- Compile and deploy your dotfiles with one command across different platforms\n- Use handlebar-like instructions to insert variables and compile sections conditionally\n- Define pre- and post-hooks to customize the behavior with your own commands\n- Create multiple profiles for different targets\n- Works on Windows and Linux\n\n## Installation\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/punktf.svg)](https://repology.org/project/punktf/versions)\n\n### [Homebrew](https://brew.sh/)\n\nInstall [punktf using Homebrew](https://github.com/michidk/homebrew-tools/blob/main/Formula/punktf.rb) on Linux:\n\n```sh\nbrew install michidk/tools/punktf\n```\n\n### [AUR](https://aur.archlinux.org/)\n\nInstall [punktf from AUR](https://aur.archlinux.org/packages/punktf) on Arch Linux.\n\nTo install it use your favorite AUR capable package manager (e.g. [yay](https://github.com/Jguer/yay), [pikaur](https://github.com/actionless/pikaur)):\n\n**NOTE:** As this builds `punktf` from source an up-to-date rust installation is needed.\n\n```sh\nyay punktf\n```\n\nor\n\n```sh\npikaur -S punktf\n```\n\n### [Scoop](https://scoop.sh/)\n\nInstall [punktf using Scoop](https://github.com/Shemnei/scoop-bucket/blob/main/bucket/punktf.json) on Windows:\n\n```sh\nscoop bucket add shemnei https://github.com/Shemnei/scoop-bucket\n\nscoop install punktf\n```\n\n### [Chocolatey](https://chocolatey.org/)\n\nInstall [punktf using Chocolatey](https://community.chocolatey.org/packages/punktf) on Windows:\n\n```sh\nchoco install punktf\n```\n\n### [Cargo \u0026 Crates.io](https://crates.io/)\n\nInstall [punktf using cargo and crates.io](https://crates.io/crates/punktf) on Windows and Linux:\n\n```sh\ncargo install punktf\n```\n\n## Building from source\n\nTo install `punktf` from source the following is needed:\n\n- An up-to-date rust installation\n- An installed nightly toolchain\n\n```bash\n# Clone\ngit clone https://github.com/Shemnei/punktf\ncd punktf\n\n# Build (cargo)\ncargo build --release\n```\n\n## Usage\n\n### Commands\n\nTo deploy a profile, use the `deploy` subcommand:\n\n```sh\n# deploy 'windows' profile\npunktf deploy --profile windows\n\n# deploy (custom source folder)\npunktf deploy --source /home/demo/mydotfiles --profile windows\n```\n\nAdding the `-h`/`--help` flag to a given subcommand, will print usage instructions.\n\n### Source Folder\n\nThe `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 \u003cprofile\u003e`.\n\n`punktf` searches for the source folder in the following order:\n\n1. Paths specified with `-s`/`--source`\n2. Paths specified by an environment variable `PUNKTF_SOURCE`\n3. The current working directory of the shell\n\nThe source folder should contain two sub-folders:\n\n- `profiles\\`: Contains the `punktf` profile definitions (`.yaml` or `.json`)\n- `dotfiles\\`: Contains folders and the actual dotfiles\n\nExample `punktf` source folder structure:\n\n```ls\n+ profiles\n  + windows.yaml\n  + base.yaml\n  + arch.json\n+ dotfiles\n  + .gitconfig\n  + init.vim.win\n  + base\n    + demo.txt\n  + linux\n    + .bashrc\n  + windows\n    + alacritty.yml\n```\n\n### Target\n\nDetermines where `punktf` will deploy files too.\nIt can be set with:\n\n1. Variable `target` in the `punktf` profile file\n2. Environment variable `PUNKTF_TARGET`\n\n### Profiles\n\nProfiles define which dotfiles should be used. They can be a `.json` or `.yaml` file.\n\nExample `punktf` profile:\n\n```yaml\nvariables:\n  OS: \"windows\"\n\ntarget: \"C:\\\\Users\\\\Demo\"\n\ndotfiles:\n  - path: \"base\"\n  - path: \"windows/alacritty.yml\"\n    target:\n      path: \"C:\\\\Users\\\\Demo\\\\AppData\\\\Local\\\\alacritty.yml\"\n    merge: Ask\n\nlinks:\n  - source_path: \"C:\\\\Users\\\\Demo\\\\Dotfiles\\\\test.txt\"\n    target_path: \"C:\\\\Users\\\\Demo\\\\test.txt\"\n```\n\nAll properties are explained [in the wiki](https://shemnei.github.io/punktf/chapter/reference_guide/concepts/profile.html).\n\n## Templates\n\nPlease refer to the [wiki](https://shemnei.github.io/punktf/chapter/reference_guide/concepts/dotfile/template.html) for the templating syntax.\n\n## License\n\nLicensed under either of\n\n * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or https://www.apache.org/licenses/LICENSE-2.0)\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or https://opensource.org/licenses/MIT)\n\nat your option.\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally\nsubmitted for inclusion in the work by you, as defined in the Apache-2.0\nlicense, shall be dual licensed as above, without any additional terms\nor conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshemnei%2Fpunktf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshemnei%2Fpunktf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshemnei%2Fpunktf/lists"}