Profile
Profiles can be either a json
or yaml
file.
Paths
All paths that are given via the profile can have system/environment variables embedded.
They start with a $
and then the name (e.g. $HOME
).
Optionally they can also be enclosed with braces (e.g. ${HOME}
).
This syntax is both valid/used for unix and windows systems (instead of windows %...%
syntax).
Additionally, paths can start with a ~
which corresponds to the user home directory:
Unix
:/home/test
($HOME
)Windows
:C:\Users\test
Layout
Yaml
# Optional: Other profiles which will be used as base for this one. The order in which they are specified matters, the higher up the higher the priority for overwrites of values.
# Default: None
extends:
- base_profile_name
# Optional: Variables for all `dotfiles`
# Default: None
# DON'T add '-' infront of the variable names (e.g. - OS: "linux")
variables:
RUSTC_PATH: "/usr/bin/rustc"
OS: "linux"
# Optional: Content transformer. These will take the content of a dotfile, process it and return a new version of it.
transformers:
- LineTerminator: CRLF
# Optional: Target path of config dir; used when no specific deploy_location was given
# Default: `$PUNKTF_TARGET`
target: "/home/demo/.config"
# Optional: Hooks which are executed once before the deployment.
# Default: None
pre_hooks:
- echo "Foo"
# Optional: Hooks which are executed once after the deployment.
# Default: None
post_hooks:
- echo "Bar"
# `dotfiles` to be deployed
dotfiles:
# Relative path in `dotfiles/`
- path: init.vim.win
# Optional: Alternative name for the dotfile. This name will be used instead of [`Dotfile::path`] when
# deploying. If this is set and the dotfile is a folder, it will be deployed under the given
# name and not in the root source directory.
# Default: None
rename: init.vim
# Optional: Alternative deploy target path. This will be used instead of [`Profile::target`] when
# deploying.
# Default: None
overwrite_target: "/home/demo/.config/nvim"
# Optional: Custom variables for the specific file (same as above)
# Default: None
variables: []
# Optional: Content transformer. These will take the content of a dotfile, process it and return a new version of it.
transformers:
- LineTerminator: CRLF
# Optional: Merge operation/kind (like: Ask, Keep, Overwrite)
# Default: Overwrite
merge: Overwrite
# Optional: Whether this file is a template or not (skips template actions (replace, ..) if not)
# Default: true
template: false
# Optional: Higher priority `dotfile` is allowed to overwrite lower priority one
# Default: None
priority: 2
# Symlinks to be created
links:
# Absolute path to target of the link
- source_path: "$HOME/configurations"
# Absolute path to the source of the link
target_path: "~/.config"
# Optional: Will replace existing symlink at target (overwrite). But only if the file at the target is a symlink.
# Default: true
replace: false
Json
{
"extends": [
"base_profile_name"
],
"variables": {
"RUSTC_PATH": "/usr/bin/rustc",
"OS": "linux",
//, ...
},
"transformers": [
{ "LineTerminator": "CRLF" }
],
"target": "/home/demo/.config",
"pre_hooks": ["echo \"Foo\""],
"post_hooks": ["echo \"Bar\""],
"dotfiles": [
{
"path": "init.vim.linux",
"rename": "init.vim",
"overwrite_target": "/home/demo/.config/nvim"
"variables": {
//...
},
"transformers": [
{ "LineTerminator": "CRLF" }
],
"merge": "Overwrite",
"template": false,
"priority": 2,
}
//, ...
]
}