{"owner":"twpayne","repo":"chezmoi","hasSkills":true,"totalSkillsCount":57,"totalTokensCount":14827,"categories":["command-prompt","anthropic-skill"],"hasMcp":false,"mcpConfig":null,"found":["assets/chezmoi.io/docs/reference/commands/add.md","assets/chezmoi.io/docs/reference/commands/age-keygen.md","assets/chezmoi.io/docs/reference/commands/age.md","assets/chezmoi.io/docs/reference/commands/apply.md","assets/chezmoi.io/docs/reference/commands/archive.md","assets/chezmoi.io/docs/reference/commands/cat-config.md","assets/chezmoi.io/docs/reference/commands/cat.md","assets/chezmoi.io/docs/reference/commands/cd.md","assets/chezmoi.io/docs/reference/commands/chattr.md","assets/chezmoi.io/docs/reference/commands/completion.md","assets/chezmoi.io/docs/reference/commands/data.md","assets/chezmoi.io/docs/reference/commands/decrypt.md","assets/chezmoi.io/docs/reference/commands/destroy.md","assets/chezmoi.io/docs/reference/commands/diff.md","assets/chezmoi.io/docs/reference/commands/docker.md","assets/chezmoi.io/docs/reference/commands/doctor.md","assets/chezmoi.io/docs/reference/commands/dump-config.md","assets/chezmoi.io/docs/reference/commands/dump.md","assets/chezmoi.io/docs/reference/commands/edit-config-template.md","assets/chezmoi.io/docs/reference/commands/edit-config.md","assets/chezmoi.io/docs/reference/commands/edit-encrypted.md","assets/chezmoi.io/docs/reference/commands/edit.md","assets/chezmoi.io/docs/reference/commands/encrypt.md","assets/chezmoi.io/docs/reference/commands/execute-template.md","assets/chezmoi.io/docs/reference/commands/forget.md","assets/chezmoi.io/docs/reference/commands/generate.md","assets/chezmoi.io/docs/reference/commands/git.md","assets/chezmoi.io/docs/reference/commands/help.md","assets/chezmoi.io/docs/reference/commands/ignored.md","assets/chezmoi.io/docs/reference/commands/import.md","assets/chezmoi.io/docs/reference/commands/index.md","assets/chezmoi.io/docs/reference/commands/init.md","assets/chezmoi.io/docs/reference/commands/license.md","assets/chezmoi.io/docs/reference/commands/list.md","assets/chezmoi.io/docs/reference/commands/manage.md","assets/chezmoi.io/docs/reference/commands/managed.md","assets/chezmoi.io/docs/reference/commands/merge-all.md","assets/chezmoi.io/docs/reference/commands/merge.md","assets/chezmoi.io/docs/reference/commands/podman.md","assets/chezmoi.io/docs/reference/commands/purge.md","assets/chezmoi.io/docs/reference/commands/push.md","assets/chezmoi.io/docs/reference/commands/re-add.md","assets/chezmoi.io/docs/reference/commands/secret.md","assets/chezmoi.io/docs/reference/commands/source-path.md","assets/chezmoi.io/docs/reference/commands/ssh.md","assets/chezmoi.io/docs/reference/commands/state.md","assets/chezmoi.io/docs/reference/commands/status.md","assets/chezmoi.io/docs/reference/commands/target-path.md","assets/chezmoi.io/docs/reference/commands/unmanage.md","assets/chezmoi.io/docs/reference/commands/unmanaged.md","assets/chezmoi.io/docs/reference/commands/update.md","assets/chezmoi.io/docs/reference/commands/upgrade.md","assets/chezmoi.io/docs/reference/commands/verify.md","assets/chezmoi.io/docs/user-guide/tools/diff.md","assets/chezmoi.io/docs/user-guide/tools/editor.md","assets/chezmoi.io/docs/user-guide/tools/http-or-socks5-proxy.md","assets/chezmoi.io/docs/user-guide/tools/merge.md"],"skills":{"assets/chezmoi.io/docs/reference/commands/add.md":"# `add` *target*...\n\nAdd *target*s to the source state. If any target is already in the source\nstate, then its source state is replaced with its current state in the\ndestination directory.\n\n## Flags\n\n### `-a`, `--autotemplate`\n\nAutomatically generate a template by replacing strings that match variable\nvalues from the `data` section of the config file with their respective config\nnames as a template string. Longer substitutions occur before shorter ones.\nThis implies the `--template` option.\n\n!!! warning\n\n    `--autotemplate` uses a greedy algorithm which occasionally generates\n    templates with unwanted variable substitutions. Carefully review any\n    templates it generates.\n\n### `--create`\n\nAdd files that should exist, irrespective of their contents.\n\nSets the `create_` source state attribute on the added file.\n\nA file will be created with the given contents if the file does not exist.\nIf the file already exists, then its contents will not be changed.\nThis allows for managing files with an initial state but should not be changed\nby chezmoi afterwards.\n\n### `--encrypt`\n\n> Configuration: `add.encrypt`\n\nEncrypt files using the defined encryption method.\n\n### `--exact`\n\nSet the `exact` attribute on added directories.\n\n!!! warning\n\n    Directories with the `exact` attributes are statefully synced between target and source directories.\n    When running `re-add`, any files deleted from the `exact` target directory will be removed from the source directory.\n    Likewise, any files added to the `exact` target directory, will be added to the source directory\n\n### `--follow`\n\nIf the last part of a target is a symlink, add the target of the symlink\ninstead of the symlink itself.\n\n### `--new`\n\nCreate a new file if the target does not exist.\n\n### `-p`, `--prompt`\n\nInteractively prompt before adding each file.\n\n### `-q`, `--quiet`\n\nSuppress warnings about adding ignored entries.\n\n### `--secrets` `ignore`|`warning`|`error`\n\n> Configuration: `add.secrets`\n\nAction to take when a secret is found when adding a file. The default is\n`warning`.\n\n### `-T`, `--template`\n\nSet the `template` attribute on added files and symlinks.\n\n### `--template-symlinks`\n\n> Configuration: `add.templateSymlinks`\n\nWhen adding symlink to an absolute path in the source directory or destination\ndirectory, create a symlink template with `.chezmoi.sourceDir` or\n`.chezmoi.homeDir`. This is useful for creating portable absolute symlinks.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-f`, `--force`\n\nAdd *target*s, even if doing so would cause a source template to be\noverwritten.\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi add ~/.bashrc\nchezmoi add ~/.gitconfig --template\nchezmoi add ~/.ssh/id_rsa --encrypt\nchezmoi add ~/.vim --recursive\nchezmoi add ~/.oh-my-zsh --exact --recursive\n```\n\n## Notes\n\n!!! bug\n\n    `chezmoi add` will fail if the entry being added is in a directory\n    implicitly created by an [external][external]. See [issue #1574][issue-1574]\n    for details.\n\n!!! warning\n\n    `chezmoi add --exact --recursive DIR` works in predictable but surprising\n    ways and its use is not recommended for nested directories without taking\n    precautions.\n\n    If you have not previously added any files from `~/.config` to chezmoi and\n    run `chezmoi add --exact --recursive ~/.config/nvim`, chezmoi will consider\n    all files under `~/.config` to be managed, and any file *not* in\n    `~/.config/nvim` will be removed on your next `chezmoi apply`. This is\n    because `~/.config/nvim` is added as:\n\n    ```text\n    exact_dot_config/\n        exact_nvim/\n          exact_lua/\n            …\n          …\n    ```\n\n    To prevent this, add a `.keep` file *first* before adding the subdirectory\n    recursively.\n\n    ```sh\n    touch ~/.config/.keep\n    chezmoi add ~/.config/.keep\n    chezmoi add --recursive --exact ~/.config/nvim\n    ```\n\n    See [issue #4223][issue-4223] for details.\n\n[external]: /reference/special-files/chezmoiexternal-format.md\n[issue-1574]: https://github.com/twpayne/chezmoi/issues/1574\n[issue-4223]: https://github.com/twpayne/chezmoi/issues/4223\n","assets/chezmoi.io/docs/reference/commands/age-keygen.md":"# `age-keygen` [*identity-file*]\n\nGenerate an age identity or convert an age identity to an age recipient.\n\n## Flags\n\n### `--pq`\n\nGenerate a post-quantum key pair.\n\n### `-y`, `--convert`\n\nRead an identity file *identity-file* or the standard input and print its\nrecipient instead of generating an age identity.\n\n## Examples\n\n```sh\nchezmoi age-keygen\nchezmoi age-keygen -o identity.txt\nchezmoi age-keygen -y identity.txt\n```\n","assets/chezmoi.io/docs/reference/commands/age.md":"# `age`\n\n<!-- markdownlint-disable no-duplicate-heading -->\n\nInteract with age's passphrase-based encryption.\n\n## Subcommands\n\n### `age encrypt` [*file*...]\n\nEncrypt file or standard input.\n\n#### `-p`, `--passphrase`\n\nDecrypt with a passphrase.\n\n### `age decrypt` [*file*...]\n\nDecrypt file or standard input.\n\n#### `-p`, `--passphrase`\n\nDecrypt with a passphrase.\n\n## Examples\n\n```sh\nchezmoi age encrypt --passphrase plaintext.txt > ciphertext.txt\nchezmoi age decrypt --passphrase ciphertext.txt > decrypted-ciphertext.txt\n```\n","assets/chezmoi.io/docs/reference/commands/apply.md":"# `apply` [*target*...]\n\nEnsure that *target*... are in the target state, updating them if necessary. If\nno targets are specified, the state of all targets are ensured. If a target has\nbeen modified since chezmoi last wrote it then the user will be prompted if\nthey want to overwrite the file.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n### `--source-path`\n\nSpecify targets by source path, rather than target path. This is useful for\napplying changes after editing.\n\n## Examples\n\n```sh\nchezmoi apply\nchezmoi apply --dry-run --verbose\nchezmoi apply ~/.bashrc\n```\n","assets/chezmoi.io/docs/reference/commands/archive.md":"# `archive` [*target*....]\n\nGenerate an archive of the target state, or only the targets specified. This\ncan be piped into `tar` to inspect the target state.\n\n## Flags\n\n### `-f`, `--format` *format*\n\nWrite the archive in *format*. If `--output` is set the format is guessed from\nthe extension, otherwise the default is `tar`.\n\n| Supported formats |\n| ----------------- |\n| `tar`             |\n| `tar.gz`          |\n| `tgz`             |\n| `zip`             |\n\n### `-z`, `--gzip`\n\nCompress the archive with gzip. This is automatically set if the format is\n`tar.gz` or `tgz` and is ignored if the format is `zip`.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi archive | tar tvf -\nchezmoi archive --output=dotfiles.tar.gz\nchezmoi archive --output=dotfiles.zip\n```\n","assets/chezmoi.io/docs/reference/commands/cat-config.md":"# `cat-config`\n\nPrint the configuration file.\n\n## Examples\n\n```sh\nchezmoi cat-config\n```\n","assets/chezmoi.io/docs/reference/commands/cat.md":"# `cat` *target*...\n\nWrite the target contents of *target*s to stdout. *target*s must be files,\nscripts, or symlinks. For files, the target file contents are written. For\nscripts, the script's contents are written. For symlinks, the target is\nwritten.\n\n## Examples\n\n```sh\nchezmoi cat ~/.bashrc\n```\n","assets/chezmoi.io/docs/reference/commands/cd.md":"# `cd` [*path*]\n\nLaunch a shell in the working tree (typically the source directory). chezmoi\nwill launch the command set by the `cd.command` configuration variable with any\nextra arguments specified by `cd.args`. If this is not set, chezmoi will\nattempt to detect your shell and finally fall back to an OS-specific default.\n\nIf the optional argument *path* is present, the shell will be launched in the\nsource directory corresponding to *path*.\n\nThe shell will have various `CHEZMOI*` environment variables set, as for\nscripts.\n\n!!! hint\n\n    This does not change the current directory of the current shell. To do\n    that, instead use:\n\n    ```console\n    $ cd $(chezmoi source-path)\n    ```\n\n## Examples\n\n```sh\nchezmoi cd\nchezmoi cd ~\nchezmoi cd ~/.config\n```\n","assets/chezmoi.io/docs/reference/commands/chattr.md":"# `chattr` *modifier* *target*...\n\nChange the attributes and/or type of *target*s. *modifier* specifies what to\nmodify.\n\nSee [attributes][attributes] for a description of each attribute.\n\nAdd attributes by specifying them or their abbreviations directly, optionally\nprefixed with a plus sign (`+`). Remove attributes by prefixing them or their\nattributes with the string `no` or a minus sign (`-`). The available attribute\nmodifiers and their abbreviations are:\n\n| Attribute modifier | Abbreviation |\n| ------------------ | ------------ |\n| `after`            | `a`          |\n| `before`           | `b`          |\n| `empty`            | `e`          |\n| `encrypted`        | *none*       |\n| `exact`            | *none*       |\n| `executable`       | `x`          |\n| `external`         | *none*       |\n| `once`             | `o`          |\n| `onchange`         | *none*       |\n| `private`          | `p`          |\n| `readonly`         | `r`          |\n| `remove`           | *none*       |\n| `template`         | `t`          |\n\nThe type of a target can be changed using a type modifier:\n\n| Type modifier |\n| ------------- |\n| `create`      |\n| `modify`      |\n| `script`      |\n| `symlink`     |\n\nThe negative form of type modifiers, e.g. `nocreate`, changes the target to be\na regular file if it is of that type, otherwise the type is left unchanged.\n\nMultiple modifications may be specified by separating them with a comma (`,`).\nIf you use the `-`*modifier* form then you must put *modifier* after a `--` to\nprevent chezmoi from interpreting `-`*modifier* as an option.\n\n## Common flags\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-false\"\n\n## Examples\n\n```sh\nchezmoi chattr template ~/.bashrc\nchezmoi chattr noempty ~/.profile\nchezmoi chattr private,template ~/.netrc\nchezmoi chattr -- -x ~/.zshrc\nchezmoi chattr +create,+private ~/.kube/config\n```\n\n[attributes]: /reference/source-state-attributes.md\n","assets/chezmoi.io/docs/reference/commands/completion.md":"# `completion` *shell*\n\nGenerate shell completion code for the specified shell (`bash`, `fish`,\n`powershell`, or `zsh`).\n\n## Examples\n\n```sh\nchezmoi completion bash\nchezmoi completion fish --output=~/.config/fish/completions/chezmoi.fish\n```\n","assets/chezmoi.io/docs/reference/commands/data.md":"# `data`\n\nWrite the computed template data to stdout.\n\n## Common flags\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n## Examples\n\n```sh\nchezmoi data\nchezmoi data --format=yaml\n```\n","assets/chezmoi.io/docs/reference/commands/decrypt.md":"# `decrypt` [*file*...]\n\nDecrypt *file*s using chezmoi's configured encryption. If no files are given,\ndecrypt the standard input. The decrypted result is written to the standard\noutput or a file if the `--output` flag is set.\n","assets/chezmoi.io/docs/reference/commands/destroy.md":"# `destroy` *target*...\n\nRemove *target* from the source state, the destination directory, and the state.\n\n!!! danger\n\n    The `destroy` command permanently removes files both from your home\n    directory and chezmoi's source directory.\n\n    Only run `chezmoi destroy` if you have a separate backup of your home\n    directory and your source directory.\n\n    If you want chezmoi to stop managing the file use [`forget`][forget-command]\n    instead.\n\n    If you want to remove all traces of chezmoi from your system use\n    [`purge`][purge-command] instead.\n\n## Common flags\n\n### `--force`\n\nDestroy without prompting.\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-false\"\n\n[forget-command]: /reference/commands/forget.md\n[purge-command]: /reference/commands/purge.md\n","assets/chezmoi.io/docs/reference/commands/diff.md":"# `diff` [*target*...]\n\nPrint the difference between the target state and the destination state for\n*target*s. If no targets are specified, print the differences for all targets.\n\nIf a `diff.pager` command is set in the configuration file then the output will\nbe piped into it.\n\nIf `diff.command` is set then it will be invoked to show individual file\ndifferences with `diff.args` passed as arguments. Each element of `diff.args`\nis interpreted as a template with the variables `.Destination` and `.Target`\navailable corresponding to the path of the file in the source and target state\nrespectively. The default value of `diff.args` is\n`[\"{{ .Destination }}\", \"{{ .Target }}\"]`. If `diff.args` does not contain any\ntemplate arguments then `{{ .Destination }}` and `{{ .Target }}` will be\nappended automatically.\n\n## Flags\n\n### `--pager` *pager*\n\n> Configuration: `diff.pager`\n\nPager to use for output.\n\n### `--reverse`\n\n> Configuration: `diff.reverse`\n\nReverse the direction of the diff, i.e. show the changes to the target required\nto match the destination.\n\n### `--script-contents`\n\nShow script contents, defaults to `true`.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-false\"\n\n## Examples\n\n```sh\nchezmoi diff\nchezmoi diff ~/.bashrc\n```\n","assets/chezmoi.io/docs/reference/commands/docker.md":"# `docker`\n\n<!-- markdownlint-disable no-duplicate-heading -->\n\n!!! Hint\n\n    To use [podman](https://podman.io/) instead of Docker, set the\n    `docker.command` configuration variable to `podman`. You can also\n    use the [`chezmoi podman` command][podman-command] instead of\n    `chezmoi docker`.\n\nInstall chezmoi, run [`chezmoi init --apply`][init-command], and optionally\nexecute your shell in [Docker](https://docker.com/) containers.\n\n## Subcommands\n\n### `exec` *container-id* *init-args*...\n\nInstall chezmoi, run [`chezmoi init --apply *init-args*`][init-command], and\nexecute your shell in the existing Docker container *container-id*.\n\n#### Flags\n\n##### `-i`, `--interactive`\n\nKeep stdin open even if not attached.\n\n##### `-p`, `--package-manager` *package-manager*\n\nInstall chezmoi using *package-manager*, if possible. Valid values for\n*package-manager* include `apk`, `apt-get`, `brew`, `dnf`, `nix-env`, `pacman`,\n`port`, `pkg`, `rpm`, `snap`, `xbps-install`, and `zypper`. Otherwise, fall back\nto `curl` or `wget` installation. If neither `curl` nor `wget` are installed\nthen install them with *package-manager*.\n\n##### `-s`, `--shell`\n\nAfter installing chezmoi, initializing your dotfiles, execute your shell. This\nis the default.\n\n### `run` *image-id* *init-args*...\n\nCreate a new Docker container using *image-id*, and in it, install chezmoi, run\n[`chezmoi init --apply *init-args*`][init-command], and execute your shell.\n\n#### Flags\n\n##### `-p`, `--package-manager` *package-manager*\n\nInstall chezmoi using *package-manager*, if possible. Valid values for\n*package-manager* include `apk`, `apt-get`, `brew`, `dnf`, `nix-env`, `pacman`,\n`port`, `pkg`, `rpm`, `snap`, `xbps-install`, and `zypper`. Otherwise, fall back\nto `curl` or `wget` installation. If neither `curl` nor `wget` are installed\nthen install them with *package-manager*.\n\n## Examples\n\n```sh\nchezmoi docker exec $CONTAINER_ID $YOUR_GITHUB_USERNAME\nchezmoi docker run -p apk alpine:latest $YOUR_GITHUB_USERNAME\n```\n\n[init-command]: /reference/commands/init.md\n[podman-command]: /reference/commands/podman.md\n","assets/chezmoi.io/docs/reference/commands/doctor.md":"# `doctor`\n\nCheck for potential problems.\n\n## Flags\n\n### `--no-network`\n\nDo not use any network connections.\n\n## Examples\n\n```sh\nchezmoi doctor\n```\n","assets/chezmoi.io/docs/reference/commands/dump-config.md":"# `dump-config`\n\nDump the configuration.\n\n## Common flags\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n## Examples\n\n```sh\nchezmoi dump-config\n```\n","assets/chezmoi.io/docs/reference/commands/dump.md":"# `dump` [*target*...]\n\nDump the target state of *target*s. If no targets are specified, then the\nentire target state.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi dump ~/.bashrc\nchezmoi dump --format=yaml\n```\n","assets/chezmoi.io/docs/reference/commands/edit-config-template.md":"# `edit-config-template`\n\nEdit the configuration file template. If no configuration file template exists,\nthen a new one is created with the contents of the current config file.\n\n## Examples\n\n```sh\nchezmoi edit-config-template\n```\n","assets/chezmoi.io/docs/reference/commands/edit-config.md":"# `edit-config`\n\nEdit the configuration file.\n\n## Examples\n\n```sh\nchezmoi edit-config\n```\n","assets/chezmoi.io/docs/reference/commands/edit-encrypted.md":"# `edit-encrypted` *filename*...\n\nEdit the encrypted files *filename*s.\n\nEach *filename* is decrypted to a temporary directory, the editor is invoked on\nthe decrypted files. After the editor returns, each the decrypted file is\nre-encrypted.\n\n## Examples\n\n  ```sh\n  chezmoi edit-encrypted encrypted_file\n  ```\n","assets/chezmoi.io/docs/reference/commands/edit.md":"# `edit` [*target*...]\n\nEdit the source state of *target*s, which must be files or symlinks. If no\ntargets are given then the working tree of the source directory is opened.\n\nEncrypted files are decrypted to a private temporary directory and the editor\nis invoked with the decrypted file. When the editor exits the edited decrypted\nfile is re-encrypted and replaces the original file in the source state.\n\nIf the operating system supports hard links, then the edit command invokes the\neditor with filenames which match the target filename, unless the\n`edit.hardlink` configuration variable is set to `false` or the\n`--hardlink=false` command line flag is set. Templates preserve their `.tmpl`\nextension so editors can highlight them as templates.\n\n!!! hint\n\n    Depending on your editor, you can set the format of a file in the file itself\n    using a [modeline][modelines]. This can be useful if you want to syntax\n    highlight a template as a different format.\n\n## Flags\n\n### `-a`, `--apply`\n\n> Configuration: `edit.apply`\n\nApply the target immediately after editing. This is ignored if there are no\ntargets, and does not apply scripts.\n\n### `--hardlink` *bool*\n\n> Configuration: `edit.hardlink`\n\nInvoke the editor with a hard link to the source file with a name matching the\ntarget filename. This can help the editor determine the type of the file\ncorrectly. This is the default.\n\n!!! hint\n\n    Creating hardlinks is not possible between different filesystems. Hence,\n    if your [`tempDir`][tempdir] resides on a different filesystem (e.g. a\n    [tmpfs][tmpfs], which is sometimes used for `/tmp`), this will not work.\n\n### `--watch`\n\n> Configuration: `edit.watch`\n\nAutomatically apply changes when files are saved, with the following limitations:\n\n* Only available when `chezmoi edit` is invoked with arguments (i.e.\n  argument-free `chezmoi edit` is not supported).\n* All edited files are applied when any file is saved.\n* Only the edited files are watched, not any dependent files (e.g.\n  `.chezmoitemplates` and `include`d files in templates are not watched).\n* Only works on operating systems supported by [fsnotify][fsnotify].\n* Only works if `edit.hardlink` is enabled and works.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n## Examples\n\n  ```sh\n  chezmoi edit ~/.bashrc\n  chezmoi edit ~/.bashrc --apply\n  chezmoi edit\n  ```\n\n[fsnotify]: https://github.com/fsnotify/fsnotify\n[modelines]: https://vimhelp.org/options.txt.html#auto-setting\n[tempdir]: /reference/configuration-file/variables.md#tempdir\n[tmpfs]: https://en.wikipedia.org/wiki/Tmpfs\n","assets/chezmoi.io/docs/reference/commands/encrypt.md":"# `encrypt` [*file*...]\n\nEncrypt *file*s using chezmoi's configured encryption. If no files are given,\nencrypt the standard input. The encrypted result is written to the standard\noutput or a file if the `--output` flag is set.\n","assets/chezmoi.io/docs/reference/commands/execute-template.md":"# `execute-template` [*template*...]\n\nExecute *template*s. This is useful for [testing templates][testing] or for\ncalling chezmoi from other scripts. *templates* are interpreted as literal\ntemplates, with no whitespace added to the output between arguments. If no\ntemplates are specified, the template is read from stdin.\n\n## Flags\n\n### `-f`, `--file`\n\nTreat the arguments as filenames, not literal templates.\n\n### `-i`, `--init`\n\nInclude simulated functions only available during `chezmoi init`.\n\n### `--left-delimiter` *delimiter*\n\nSet the left template delimiter.\n\n### `--promptBool` *pairs*\n\nSimulate the `promptBool` template function with a function that returns values\nfrom *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value* pairs. If\n`promptBool` is called with a *prompt* that does not match any of *pairs*, then\nit returns false.\n\n### `--promptChoice` *pairs*\n\nSimulate the `promptChoice` template function with a function that returns\nvalues from *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value*\npairs. If `promptChoice` is called with a *prompt* that does not match any of\n*pairs*, then it returns *prompt* unchanged.\n\n### `--promptInt` *pairs*\n\nSimulate the `promptInt` template function with a function that returns values\nfrom *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value* pairs. If\n`promptInt` is called with a *prompt* that does not match any of *pairs*, then\nit returns zero.\n\n### `--promptMultichoice` *pairs*\n\nSimulate the `promptMultichoice` template function with a function that returns\nvalues from *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value*\npairs. If `promptMultichoice` is called with a *prompt* that does not match any\nof *pairs*, then it returns *prompt* as an array.\n\n### `-p`, `--promptString` *pairs*\n\nSimulate the `promptString` template function with a function that returns\nvalues from *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value*\npairs. If `promptString` is called with a *prompt* that does not match any of\n*pairs*, then it returns *prompt* unchanged.\n\n### `--right-delimiter` *delimiter*\n\nSet the right template delimiter.\n\n### `--stdinisatty` *bool*\n\nSimulate the `stdinIsATTY` function by returning *bool*.\n\n### `--with-stdin`\n\nIf run with arguments, then set `.chezmoi.stdin` to the contents of the standard\ninput.\n\n## Examples\n\n```sh\nchezmoi execute-template '{{ .chezmoi.sourceDir }}'\nchezmoi execute-template '{{ .chezmoi.os }}' / '{{ .chezmoi.arch }}'\necho '{{ .chezmoi | toJson }}' | chezmoi execute-template\nchezmoi execute-template --init --promptString email=me@home.org < ~/.local/share/chezmoi/.chezmoi.toml.tmpl\n```\n\n[testing]: /user-guide/templating.md#testing-templates\n","assets/chezmoi.io/docs/reference/commands/forget.md":"# `forget` *target*...\n\nRemove *target*s from the source state, i.e. stop managing them. *target*s must\nhave entries in the source state. They cannot be externals.\n\n## Examples\n\n```sh\nchezmoi forget ~/.bashrc\n```\n","assets/chezmoi.io/docs/reference/commands/generate.md":"# `generate` *output*\n\nGenerates *output* for use with chezmoi. The currently supported *output*s are:\n\n| Output                  | Description                                                                   |\n| ----------------------- | ----------------------------------------------------------------------------- |\n| `git-commit-message`    | A git commit message, describing the changes to the source directory.         |\n| `install.sh`            | An install script, suitable for use with GitHub Codespaces                    |\n| `install-init-shell.sh` | A script which installs chezmoi, runs `chezmoi init`, and executes your shell |\n\n## Examples\n\n```sh\nchezmoi generate install.sh > install.sh\nchezmoi git -- commit -m \"$(chezmoi generate git-commit-message)\"\nchezmoi generate install-init-shell.sh $YOUR_GITHUB_USERNAME\n```\n","assets/chezmoi.io/docs/reference/commands/git.md":"# `git` [*arg*...]\n\nRun `git` *args* in the working tree (typically the source directory).\n\n!!! note\n\n    Flags in *args* must occur after `--` to prevent chezmoi from interpreting\n    them.\n\n## Examples\n\n```sh\nchezmoi git add .\nchezmoi git add dot_gitconfig\nchezmoi git -- commit -m \"Add .gitconfig\"\n```\n","assets/chezmoi.io/docs/reference/commands/help.md":"# `help` [*command*...]\n\nPrint the help associated with *command*, or general help if no command is\ngiven.\n","assets/chezmoi.io/docs/reference/commands/ignored.md":"# `ignored`\n\nPrint the list of entries ignored by chezmoi.\n\n## Common flags\n\n### `-0`, `--nul-path-separator`\n\n--8<-- \"common-flags/nul-path-separator.md\"\n\n### `-t`, `--tree`\n\n--8<-- \"common-flags/tree.md\"\n\n## Examples\n\n```sh\nchezmoi ignored\n```\n","assets/chezmoi.io/docs/reference/commands/import.md":"# `import` *filename*\n\nImport the source state from an archive file in to a directory in the source\nstate. This is primarily used to make subdirectories of your home directory\nexactly match the contents of a downloaded archive. You will generally always\nwant to set the `--destination`, `--exact`, and `--remove-destination` flags.\n\nThe supported archive formats are `rar`, `tar`, `tar.gz`, `tgz`, `tar.bz2`,\n`tbz2`, `txz`, `tar.zst`, and `zip`.\n\n## Flags\n\n### `-d`, `--destination` *directory*\n\nSet the destination (in the source state) where the archive will be imported.\n\n### `--exact`\n\nSet the `exact` attribute on all imported directories.\n\n### `-r`, `--remove-destination`\n\nRemove destination (in the source state) before importing.\n\n### `--strip-components` *n*\n\nStrip *n* leading components from paths.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n## Examples\n\n```sh\ncurl -s -L -o ${TMPDIR}/oh-my-zsh-master.tar.gz https://github.com/ohmyzsh/ohmyzsh/archive/master.tar.gz\nmkdir -p $(chezmoi source-path)/dot_oh-my-zsh\nchezmoi import --strip-components 1 --destination ~/.oh-my-zsh ${TMPDIR}/oh-my-zsh-master.tar.gz\n```\n","assets/chezmoi.io/docs/reference/commands/index.md":"# Commands\n\nThis section provides documentation for chezmoi commands and their arguments.\n\nAll commands accept [global flags][global], though some flags may have no effect\non certain commands. Many commands also share [common flags][common].\n\n[global]: /reference/command-line-flags/global.md\n[common]: /reference/command-line-flags/common.md\n","assets/chezmoi.io/docs/reference/commands/init.md":"# `init` [*repo*]\n\nSetup the source directory, generate the config file, and optionally update the\ndestination directory to match the target state. This is done in the following\norder:\n\n1. The source directory is initialized. If chezmoi does not detect a Git\n   repository in the source directory, chezmoi will clone the provided *repo*\n   into the source directory. If no *repo* is provided, chezmoi will initialize\n   a new Git repository.\n\n2. If the initialized source directory contains a `.chezmoi.$FORMAT.tmpl` file,\n   a new configuration file will be created using that file as a template.\n\n3. If the `--apply` flag is provided, `chezmoi apply` is run.\n\n4. If the `--purge` flag is provided, chezmoi will remove the source, config,\n   and cache directories.\n\n5. If the `--purge-binary` is passed, chezmoi will attempt to remove its own\n   binary.\n\nBy default, if *repo* is given, chezmoi will guess the full git repo URL, using\nHTTPS by default, or SSH if the `--ssh` option is specified, according to the\nfollowing patterns:\n\n| Pattern            | HTTPS Repo                                  | SSH repo                           |\n| ------------------ | ------------------------------------------- | ---------------------------------- |\n| `user`             | `https://user@github.com/user/dotfiles.git` | `git@github.com:user/dotfiles.git` |\n| `user/repo`        | `https://user@github.com/user/repo.git`     | `git@github.com:user/repo.git`     |\n| `site/user/repo`   | `https://user@site/user/repo.git`           | `git@site:user/repo.git`           |\n| `sr.ht/~user`      | `https://user@git.sr.ht/~user/dotfiles`     | `git@git.sr.ht:~user/dotfiles.git` |\n| `sr.ht/~user/repo` | `https://user@git.sr.ht/~user/repo`         | `git@git.sr.ht:~user/repo.git`     |\n\nTo disable git repo URL guessing, pass the `--guess-repo-url=false` option.\n\n!!! info\n\n    If you are using a different version control system, there are different\n    steps [required for repo initialization][alt-vcs]. To prevent chezmoi from\n    trying to clone or create a Git repository, add an empty `.git` directory to\n    the source directory.\n\n    ```sh\n    mkdir -p ~/.local/share/chezmoi/.git\n    ```\n\n--8<-- \"config-format.md\"\n\n## Flags\n\n### `-a`, `--apply`\n\nRun `chezmoi apply` after checking out the repo and creating the config file.\n\n### `--branch` *branch*\n\nCheck out *branch* instead of the default branch.\n\n### `-C`, `--config-path` *path*\n\nWrite the generated config file to *path* instead of the default location.\n\n### `--data` *bool*\n\nInclude existing template data when creating the config file. This defaults to\n`true`. Set this to `false` to simulate creating the config file with no\nexisting template data.\n\n### `-d`, `--depth` *depth*\n\nClone the repo with depth *depth*.\n\n### `--git-lfs` *bool*\n\nRun `git lfs pull` after cloning the repo.\n\n### `-g`, `--guess-repo-url` *bool*\n\nGuess the repo URL from the *repo* argument. This defaults to `true`.\n\n### `--one-shot`\n\n`--one-shot` is the equivalent of `--apply`, `--depth=1`, `--force`, `--purge`,\nand `--purge-binary`. It attempts to install your dotfiles with chezmoi and then\nremove all traces of chezmoi from the system. This is useful for setting up\ntemporary environments (e.g. Docker containers).\n\n### `--prompt`\n\nForce the `prompt*Once` template functions to prompt.\n\n### `--promptBool` *pairs*\n\nPopulate the `promptBool` template function with values from *pairs*. *pairs* is\na comma-separated list of *prompt*`=`*value* pairs. If `promptBool` is called\nwith a *prompt* that does not match any of *pairs*, then it prompts the user for\na value.\n\n### `--promptChoice` *pairs*\n\nPopulate the `promptChoice` template function with values from *pairs*. *pairs*\nis a comma-separated list of *prompt*`=`*value* pairs. If `promptChoice` is\ncalled with a *prompt* that does not match any of *pairs*, then it prompts the\nuser for a value.\n\n### `--promptDefaults`\n\nMake all `prompt*` template function calls with a default value return that\ndefault value instead of prompting.\n\n### `--promptInt` *pairs*\n\nPopulate the `promptInt` template function with values from *pairs*. *pairs* is\na comma-separated list of *prompt*`=`*value* pairs. If `promptInt` is called\nwith a *prompt* that does not match any of *pairs*, then it prompts the user for\na value.\n\n### `--promptMultichoice` *pairs*\n\nPopulate the `promptMultichoice` template function with values from *pairs*.\n*pairs* is a comma-separated list of *prompt*`=`*value*[`/`*value*] pairs. If\n`promptMultichoice` is called with a *prompt* that does not match any of\n*pairs*, then it prompts the user for values.\n\n### `--promptString` *pairs*\n\nPopulate the `promptString` template function with values from *pairs*. *pairs*\nis a comma-separated list of *prompt*`=`*value* pairs. If `promptString` is\ncalled with a *prompt* that does not match any of *pairs*, then it prompts the\nuser for a value.\n\n### `-p`, `--purge`\n\nRemove the source and config directories after applying.\n\n### `-P`, `--purge-binary`\n\nAttempt to remove the chezmoi binary after applying.\n\n### `--recurse-submodules` *bool*\n\nRecursively clone submodules. This defaults to `true`.\n\n### `--revision` *revision*\n\nCheck out the repo at *revision*.\n\n### `--ssh`\n\nGuess an SSH repo URL instead of an HTTPS repo.\n\n### `--tag` *tag*\n\nCheck out the repo at *tag*.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n## Examples\n\n```sh\nchezmoi init user\nchezmoi init user --apply\nchezmoi init user --apply --purge\nchezmoi init user/dots\nchezmoi init codeberg.org/user\nchezmoi init gitlab.com/user\n```\n\n[alt-vcs]: /user-guide/advanced/customize-your-source-directory.md#use-a-different-version-control-system-to-git\n","assets/chezmoi.io/docs/reference/commands/license.md":"# `license`\n\nPrint chezmoi's license.\n\n## Examples\n\n```sh\nchezmoi license\n```\n","assets/chezmoi.io/docs/reference/commands/list.md":"# `list`\n\n`list` is an alias for [`managed`][managed-command].\n\n[managed-command]: /reference/commands/managed.md\n","assets/chezmoi.io/docs/reference/commands/manage.md":"# `manage` *target*...\n\n`manage` is an alias for [`add`][add-command] for symmetry with\n[`unmanage`][unmanage-command].\n\n[add-command]: /reference/commands/add.md\n[unmanage-command]: /reference/commands/unmanage.md\n","assets/chezmoi.io/docs/reference/commands/managed.md":"# `managed` [*path*...]\n\nList all managed entries in the destination directory under all *path*s in\nalphabetical order. When no *path*s are supplied, list all managed entries in\nthe destination directory in alphabetical order.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `-0`, `--nul-path-separator`\n\n--8<-- \"common-flags/nul-path-separator.md\"\n\n### `-p`, `--path-style` *style*\n\n--8<-- \"common-flags/path-style.md:all\"\n\n### `-t`, `--tree`\n\n--8<-- \"common-flags/tree.md\"\n\n## Examples\n\n```sh\nchezmoi managed\nchezmoi managed --include=files\nchezmoi managed --include=files,symlinks\nchezmoi managed -i dirs\nchezmoi managed -i dirs,files\nchezmoi managed -i files ~/.config\nchezmoi managed --exclude=encrypted --path-style=source-relative\n```\n","assets/chezmoi.io/docs/reference/commands/merge-all.md":"# `merge-all`\n\nPerform a three-way merge for file whose actual state does not match its target\nstate. The merge is performed with [`chezmoi merge`][merge-command].\n\n## Common flags\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi merge-all\n```\n\n[merge-command]: /reference/commands/merge.md\n","assets/chezmoi.io/docs/reference/commands/merge.md":"# `merge` *target*...\n\nPerform a three-way merge between the destination state, the target state, and\nthe source state for each *target*. The merge tool is defined by the\n`merge.command` configuration variable, and defaults to `vimdiff`. If multiple\ntargets are specified the merge tool is invoked separately and sequentially for\neach target. If the target state cannot be computed (for example if source is a\ntemplate containing errors or an encrypted file that cannot be decrypted) a\ntwo-way merge is performed instead.\n\nThe order of arguments to `merge.command` is set by `merge.args`. Each argument\nis interpreted as a template with the variables `.Destination`, `.Source`, and\n`.Target` available corresponding to the path of the file in the destination\nstate, the source state, and the target state respectively. The default value\nof `merge.args` is `[\"{{ .Destination }}\", \"{{ .Source }}\", \"{{ .Target }}\"]`.\nIf `merge.args` does not contain any template arguments then `{{ .Destination\n}}`, `{{ .Source }}`, and `{{ .Target }}` will be appended automatically.\n\n## Examples\n\n```sh\nchezmoi merge ~/.bashrc\n```\n","assets/chezmoi.io/docs/reference/commands/podman.md":"# `podman`\n\n`podman` is an alias for [`docker`][docker-command].\n\n[docker-command]: /reference/commands/docker.md\n","assets/chezmoi.io/docs/reference/commands/purge.md":"# `purge`\n\nRemove chezmoi's configuration, state, and source directory, but leave the\ntarget state intact.\n\n## Flags\n\n### `-P`, `--binary`\n\nPurge chezmoi binary.\n\n## Common flags\n\n### `--force`\n\nRemove without prompting.\n\n## Examples\n\n```sh\nchezmoi purge\nchezmoi purge --force\n```\n","assets/chezmoi.io/docs/reference/commands/push.md":"# `push`\n\nPush all changes to your dotfiles repo by running `git add`, `git commit`, and\n`git push` in the source directory.\n\n## Examples\n\n```sh\nchezmoi push\n```\n","assets/chezmoi.io/docs/reference/commands/re-add.md":"# `re-add` [*target*...]\n\nRe-add modified files in the target state, preserving any `encrypted_`\nattributes. chezmoi will not overwrite templates, and all entries that are\neither externals or not files are ignored. Directories are recursed into by\ndefault.\n\nIf no *target*s are specified then all modified files are re-added. If one or\nmore *target*s are given then only those targets are re-added.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--re-encrypt`\n\nRe-encrypt encrypted files.\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi re-add\nchezmoi re-add ~/.bashrc\nchezmoi re-add --recursive=false ~/.config/git\n```\n\n## Notes\n\n!!! hint\n\n    If you want to re-add a single file unconditionally, use `chezmoi add --force` instead.\n","assets/chezmoi.io/docs/reference/commands/secret.md":"# `secret`\n\n<!-- markdownlint-disable no-duplicate-heading -->\n\nVerify chezmoi's integration with the [system's keyring][keyring].\n\n## Subcommands\n\n### `secret keyring delete`\n\n#### `--service` *string*\n\nName of the service.\n\n#### `--user` *string*\n\nName of the user.\n\n### `secret keyring get`\n\n#### `--service` *string*\n\nName of the service.\n\n#### `--user` *string*\n\nName of the user.\n\n### `secret keyring set`\n\n#### `--service` *string*\n\nName of the service.\n\n#### `--user` *string*\n\nName of the user.\n\n#### `--value` *string*\n\nNew value.\n\n## Examples\n\n```sh\nchezmoi secret keyring set --service=service --user=user --value=password\nchezmoi secret keyring get --service=service --user=user\nchezmoi secret keyring delete --service=service --user=user\n```\n\n## Notes\n\n!!! warning\n\n    On FreeBSD, the `secret keyring` command is only available if chezmoi was\n    compiled with cgo enabled. The official release binaries of chezmoi are\n    **not** compiled with cgo enabled, and `secret keyring` command is not\n    available.\n\n[keyring]: /user-guide/password-managers/keychain-and-windows-credentials-manager.md\n","assets/chezmoi.io/docs/reference/commands/source-path.md":"# `source-path` [*target*...]\n\nPrint the path to each target's source state. If no targets are specified then\nprint the source directory.\n\n## Examples\n\n```sh\nchezmoi source-path\nchezmoi source-path ~/.bashrc\n```\n","assets/chezmoi.io/docs/reference/commands/ssh.md":"# `ssh` *host* *init-args*...\n\nSSH to *host*, install chezmoi, run `chezmoi init --apply *init-args*`, and\nexecutes your shell.\n\n!!! Warning\n\n    `ssh` is an potentially destructive command.\n\n## Flags\n\n### `-p`, `--package-manager` *package-manager*\n\nInstall chezmoi using *package-manager*, if possible. Valid values for\n*package-manager* include `apk`, `apt-get`, `brew`, `dnf`, `nix-env`, `pacman`,\n`port`, `pkg`, `rpm`, `snap`, `xbps-install`, and `zypper`. Otherwise, fall back\nto `curl` or `wget` installation. If neither `curl` nor `wget` are installed\nthen install them with *package-manager*.\n\n### `-s`, `--shell`\n\nAfter installing chezmoi, initializing your dotfiles, execute your shell. This\nis the default.\n\n## Examples\n\n```sh\nchezmoi ssh $HOSTNAME $YOUR_GITHUB_USERNAME\nchezmoi ssh $HOSTNAME -- --one-shot $YOUR_GITHUB_USERNAME\n```\n","assets/chezmoi.io/docs/reference/commands/state.md":"# `state`\n\nManipulate the persistent state.\n\n!!! hint\n\n    To get a full list of subcommands run:\n\n    ```console\n    $ chezmoi state help\n    ```\n\n## Subcommands\n\n### `data`\n\nPrint the raw data in the persistent state.\n\n### `delete`\n\nDelete a value from the persistent state.\n\n### `delete-bucket`\n\nDelete a bucket from the persistent state.\n\n### `dump`\n\nGenerate a dump of the persistent state.\n\n### `get`\n\nGet a value from the persistent state.\n\n### `get-bucket`\n\nGet a bucket from the persistent state.\n\n### `reset`\n\nReset the persistent state.\n\n### `set`\n\nSet a value from the persistent state\n\n## Examples\n\n```sh\nchezmoi state data\nchezmoi state delete --bucket=$BUCKET --key=$KEY\nchezmoi state delete-bucket --bucket=$BUCKET\nchezmoi state dump\nchezmoi state get --bucket=$BUCKET --key=$KEY\nchezmoi state get-bucket --bucket=$BUCKET\nchezmoi state set --bucket=$BUCKET --key=$KEY --value=$VALUE\nchezmoi state reset\n```\n","assets/chezmoi.io/docs/reference/commands/status.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Fstatus.md -->","assets/chezmoi.io/docs/reference/commands/target-path.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Ftarget-path.md -->","assets/chezmoi.io/docs/reference/commands/unmanage.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Funmanage.md -->","assets/chezmoi.io/docs/reference/commands/unmanaged.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Funmanaged.md -->","assets/chezmoi.io/docs/reference/commands/update.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Fupdate.md -->","assets/chezmoi.io/docs/reference/commands/upgrade.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Fupgrade.md -->","assets/chezmoi.io/docs/reference/commands/verify.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Fverify.md -->","assets/chezmoi.io/docs/user-guide/tools/diff.md":"# Diff\n\n## Use a custom diff tool\n\nBy default, chezmoi uses a built-in diff. You can use a custom tool by setting\nthe `diff.command` and `diff.args` configuration variables. The elements of\n`diff.args` are interpreted as templates with the variables `.Destination` and\n`.Target` containing filenames of the file in the destination state and the\ntarget state respectively. For example, to use [meld][meld], specify:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    command = \"meld\"\n    args = [\"--diff\", \"{{ .Destination }}\", \"{{ .Target }}\"]\n```\n<!-- /example-formats -->\n\n!!! hint\n\n    If you generate your config file from a config file template, then you'll\n    need to escape the `{{` and `}}` as `{{ \"{{\" }}` and `{{ \"}}\" }}`. That way\n    your generated config file contains the `{{` and `}}` you expect.\n\n## Use VSCode as the diff tool\n\nTo use [VSCode][vscode] as the diff tool, add the following to your config:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    command = \"code\"\n    args = [\"--wait\", \"--diff\"]\n```\n<!-- /example-formats -->\n\n## Use delta as the diff tool\n\nTo use [delta][delta] as the diff tool you must set `diff.pager` to delta, for\nexample:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    pager = \"delta\"\n```\n<!-- /example-formats -->\n\n## Don't show scripts in the diff output\n\nBy default, [`chezmoi diff`][diff-command] will show all changes, including the\ncontents of scripts that will be run. You can exclude scripts from the diff\noutput by setting the `diff.exclude` configuration variable in your\nconfiguration file, for example:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    exclude = [\"scripts\"]\n```\n<!-- /example-formats -->\n\n## Don't show externals in the diff output\n\nTo exclude diffs from externals, either pass the `--exclude=externals` flag or\nset `diff.exclude` to `[\"externals\"]` in your config file.\n\n## Customize the diff pager\n\nYou can change the diff format, and/or pipe the output into a pager of your\nchoice by setting `diff.pager` configuration variable. For example, to use\n[`diff-so-fancy`][fancy] specify:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    pager = \"diff-so-fancy\"\n```\n<!-- /example-formats -->\n\nThe pager can be disabled using the `--no-pager` flag or by setting `diff.pager`\nto an empty string.\n\n## Show human-friendly diffs for binary files\n\nSimilar to git, chezmoi includes a \"textconv\" feature that can transform file\ncontents before passing them to the diff program. This is primarily useful for\ngenerating human-readable diffs of binary files.\n\nFor example, to show diffs of macOS `.plist` files, add the following to your\nconfiguration file:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[[textconv]]\n    pattern = \"**/*.plist\"\n    command = \"plutil\"\n    args = [\"-convert\", \"xml1\", \"-o\", \"-\", \"-\"]\n```\n<!-- /example-formats -->\n\nThis will pipe all `.plist` files through `plutil -convert xml1 -o - -` before\nshowing differences.\n\n[meld]: https://meldmerge.org/\n[vscode]: https://code.visualstudio.com/\n[delta]: https://dandavison.github.io/delta/\n[fancy]: https://github.com/so-fancy/diff-so-fancy\n[diff-command]: /reference/commands/diff.md\n","assets/chezmoi.io/docs/user-guide/tools/editor.md":"# Editor\n\n## Use your preferred editor with `chezmoi edit` and `chezmoi edit-config`\n\nBy default, chezmoi will use your preferred editor as defined by the `$VISUAL`\nor `$EDITOR` environment variables, falling back to a default editor depending\non your operating system (`vi` on UNIX-like operating systems, `notepad.exe` on\nWindows).\n\nYou can configure chezmoi to use your preferred editor by either setting the\n`$EDITOR` environment variable or setting the `edit.command` variable in your\nconfiguration file.\n\nThe editor command must only return when you have finished editing the files.\nchezmoi will emit a warning if your editor command returns too quickly.\n\nIn the specific case of using [VSCode][vscode] or [Codium][codium] as your\neditor, you must pass the `--wait` flag, for example, in your shell config:\n\n```bash\nexport EDITOR=\"code --wait\"\n```\n\nOr in chezmoi's configuration file:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[edit]\n    command = \"code\"\n    args = [\"--wait\"]\n```\n<!-- /example-formats -->\n\n!!! warning\n\n    If you use [Helix][helix], you must use Helix 25.01 or later.\n\n## Use chezmoi with VIM\n\n[`github.com/alker0/chezmoi.vim`][alker0] provides syntax highlighting for files\nmanaged by chezmoi, including for templates.\n\n[`github.com/Lilja/vim-chezmoi`][lilja] works with `chezmoi edit` to apply the\nedited dotfile on save.\n\n[`github.com/xvzc/chezmoi.nvim`][xvzc] allows you to edit your chezmoi-managed\nfiles and automatically apply.\n\nAlternatively, you can use an `autocmd` to run [`chezmoi apply`][apply-command]\nwhenever you save a dotfile, but you must disable [`chezmoi\nedit`][edit-command]'s hardlinking:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[edit]\n    hardlink = false\n```\n<!-- /example-formats -->\n\n```vim title=\"~/.vimrc\"\nautocmd BufWritePost ~/.local/share/chezmoi/* ! chezmoi apply --source-path \"%\"\n```\n\n## Use chezmoi with emacs\n\n[`github.com/tuh8888/chezmoi.el`][tuh8888] provides convenience functions for\ninteracting with chezmoi from Emacs, and is available in [MELPA][melpa].\n\n[vscode]: https://code.visualstudio.com/\n[codium]: https://vscodium.com/\n[alker0]: https://github.com/alker0/chezmoi.vim\n[lilja]: https://github.com/Lilja/vim-chezmoi\n[xvzc]: https://github.com/xvzc/chezmoi.nvim\n[tuh8888]: https://github.com/tuh8888/chezmoi.el\n[melpa]: https://melpa.org/#/chezmoi\n[helix]: https://helix-editor.com/\n[apply-command]: /reference/commands/apply.md\n[edit-command]: /reference/commands/edit.md\n","assets/chezmoi.io/docs/user-guide/tools/http-or-socks5-proxy.md":"# HTTP or SOCKS5 proxy\n\nchezmoi supports HTTP, HTTPS, and SOCKS5 proxies. Set the `HTTP_PROXY`,\n`HTTPS_PROXY`, and `NO_PROXY` environment variables, or their lowercase\nequivalents, for example:\n\n```sh\nHTTP_PROXY=socks5://127.0.0.1:1080 chezmoi apply --refresh-externals\n```\n","assets/chezmoi.io/docs/user-guide/tools/merge.md":"# Merge\n\n## What is the merge command\n\nWhen running [`chezmoi apply --interactive`][apply-command], chezmoi computes\nthe desired state (the target) from your source. If applying would change a file\non disk - i.e. the destination differs from the target, usually because you\nedited the live file directly - a prompt appears to either overwrite, diff,\nskip.\n\nChoosing merge is chezmoi's analog of resolving a git conflict by hand - except\nit reconciles **three** states, not two:\n\n1. **.Destination** - the file on your system.\n\n2. **.Source** - the file in your chezmoi repo (the source of truth).\n\n3. **.Target** - the desired state, computed by rendering the source (templates\n   applied, etc.).\n\n## Use a custom merge command\n\nBy default, chezmoi uses `vimdiff`. You can use a custom command by setting the\n`merge.command` and `merge.args` configuration variables. The elements of\n`merge.args` are interpreted as templates with the variables `.Destination`,\n`.Source`, and `.Target` containing filenames of the file in the destination\nstate, source state, and target state respectively. For example, to use\n[neovim's diff mode][nvim], specify:\n\n=== \"TOML\"\n\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[merge]\n    command = \"nvim\"\n    args = [\n        \"-d\",\n        \"{{ .Destination }}\",\n        \"{{ .Source }}\",\n        \"{{ .Target }}\"\n    ]\n```\n\n=== \"YAML\"\n\n```yaml title=\"~/.config/chezmoi/chezmoi.yaml\"\nmerge:\n  command: nvim\n  args:\n  - -d\n  - \"{{ .Destination }}\"\n  - \"{{ .Source }}\"\n  - \"{{ .Target }}\"\n```\n\n=== \"JSON\"\n\n```json title=\"~/.config/chezmoi/chezmoi.json\"\n{\n    \"merge\": {\n        \"command\": \"nvim\",\n        \"args\": [\n            \"-d\",\n            \"{{ .Destination }}\",\n            \"{{ .Source }}\",\n            \"{{ .Target }}\"\n        ]\n    }\n}\n```\n\n!!! hint\n\n    If you generate your config file from a config file template, then you'll\n    need to escape the `{{` and `}}`. That way your generated config file\n    contains the `{{` and `}}` you expect.\n\n    === \"TOML\"\n\n        ```text title=\"~/.local/share/chezmoi/chezmoi.toml.tmpl\"\n        [merge]\n            command = \"nvim\"\n            args = [\n                \"-d\",\n                {{ printf \"%q\" \"{{ .Destination }}\" }},\n                {{ printf \"%q\" \"{{ .Source }}\" }},\n                {{ printf \"%q\" \"{{ .Target }}\" }},\n            ]\n        ```\n\n    === \"YAML\"\n\n        ```text title=\"~/.local/share/chezmoi/chezmoi.yaml.tmpl\"\n        merge:\n          command: nvim\n          args:\n          - -d\n          - {{ printf \"%q\" \"{{ .Destination }}\" }}\n          - {{ printf \"%q\" \"{{ .Source }}\" }}\n          - {{ printf \"%q\" \"{{ .Target }}\" }}\n        ```\n\n    === \"JSON\"\n\n        ```text title=\"~/.local/share/chezmoi/chezmoi.json.tmpl\"\n        {\n            \"merge\": {\n                \"command\": \"nvim\",\n                \"args\": [\n                    \"-d\",\n                    {{ printf \"%q\" \"{{ .Destination }}\" }},\n                    {{ printf \"%q\" \"{{ .Source }}\" }},\n                    {{ printf \"%q\" \"{{ .Target }}\" }}\n                ]\n            }\n        }\n        ```\n\n## Use Beyond Compare as the merge tool\n\nTo use [Beyond Compare][bcomp] as the merge tool, add the following to your config:\n\n=== \"TOML\"\n\n    ```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n    [merge]\n        command = \"bcomp\"\n        args = [\n            \"{{ .Destination }}\",\n            \"{{ .Source }}\",\n            \"{{ .Target }}\",\n            \"{{ .Source }}\"\n        ]\n    ```\n\n=== \"YAML\"\n\n    ```yaml title=\"~/.config/chezmoi/chezmoi.yaml\"\n    merge:\n      command: \"bcomp\"\n      args:\n      - \"{{ .Destination }}\"\n      - \"{{ .Source }}\"\n      - \"{{ .Target }}\"\n      - \"{{ .Source }}\"\n    ```\n\n=== \"JSON\"\n\n    ```json title=\"~/.config/chezmoi/chezmoi.json\"\n    {\n        \"merge\": {\n            \"command\": \"bcomp\",\n            \"args\": [\n                \"{{ .Destination }}\",\n                \"{{ .Source }}\",\n                \"{{ .Target }}\",\n                \"{{ .Source }}\"\n            ]\n        }\n    }\n    ```\n\n## Use VSCode as the merge tool\n\nTo use [VSCode][vscode] as the merge tool, add the following to your config:\n\n=== \"TOML\"\n\n    ```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n    [merge]\n    command = \"bash\"\n    args = [\n        \"-c\",\n        \"cp {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} && code --new-window --wait --merge {{ .Destination | quote }} {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} {{ .Source | quote }}\",\n    ]\n    ```\n\n=== \"YAML\"\n\n    ```yaml title=\"~/.config/chezmoi/chezmoi.yaml\"\n    merge:\n      command: \"bash\"\n      args:\n      - \"-c\"\n      - \"cp {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} && code --new-window --wait --merge {{ .Destination | quote }} {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} {{ .Source | quote }}\"\n    ```\n\n=== \"JSON\"\n\n    ```json title=\"~/.config/chezmoi.chezmoi.json\"\n    {\n        \"merge\": {\n            \"command\": \"bash\",\n            \"args\": [\n                \"-c\",\n                \"cp {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} && code --new-window --wait --merge {{ .Destination | quote }} {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} {{ .Source | quote }}\",\n            ]\n        }\n    }\n    ```\n\n[bcomp]: https://www.scootersoftware.com/\n[nvim]: https://neovim.io/doc/user/diff.html\n[vscode]: https://code.visualstudio.com/\n[apply-command]: /reference/commands/apply.md\n"},"files":{"assets/chezmoi.io/docs/reference/commands/add.md":"# `add` *target*...\n\nAdd *target*s to the source state. If any target is already in the source\nstate, then its source state is replaced with its current state in the\ndestination directory.\n\n## Flags\n\n### `-a`, `--autotemplate`\n\nAutomatically generate a template by replacing strings that match variable\nvalues from the `data` section of the config file with their respective config\nnames as a template string. Longer substitutions occur before shorter ones.\nThis implies the `--template` option.\n\n!!! warning\n\n    `--autotemplate` uses a greedy algorithm which occasionally generates\n    templates with unwanted variable substitutions. Carefully review any\n    templates it generates.\n\n### `--create`\n\nAdd files that should exist, irrespective of their contents.\n\nSets the `create_` source state attribute on the added file.\n\nA file will be created with the given contents if the file does not exist.\nIf the file already exists, then its contents will not be changed.\nThis allows for managing files with an initial state but should not be changed\nby chezmoi afterwards.\n\n### `--encrypt`\n\n> Configuration: `add.encrypt`\n\nEncrypt files using the defined encryption method.\n\n### `--exact`\n\nSet the `exact` attribute on added directories.\n\n!!! warning\n\n    Directories with the `exact` attributes are statefully synced between target and source directories.\n    When running `re-add`, any files deleted from the `exact` target directory will be removed from the source directory.\n    Likewise, any files added to the `exact` target directory, will be added to the source directory\n\n### `--follow`\n\nIf the last part of a target is a symlink, add the target of the symlink\ninstead of the symlink itself.\n\n### `--new`\n\nCreate a new file if the target does not exist.\n\n### `-p`, `--prompt`\n\nInteractively prompt before adding each file.\n\n### `-q`, `--quiet`\n\nSuppress warnings about adding ignored entries.\n\n### `--secrets` `ignore`|`warning`|`error`\n\n> Configuration: `add.secrets`\n\nAction to take when a secret is found when adding a file. The default is\n`warning`.\n\n### `-T`, `--template`\n\nSet the `template` attribute on added files and symlinks.\n\n### `--template-symlinks`\n\n> Configuration: `add.templateSymlinks`\n\nWhen adding symlink to an absolute path in the source directory or destination\ndirectory, create a symlink template with `.chezmoi.sourceDir` or\n`.chezmoi.homeDir`. This is useful for creating portable absolute symlinks.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-f`, `--force`\n\nAdd *target*s, even if doing so would cause a source template to be\noverwritten.\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi add ~/.bashrc\nchezmoi add ~/.gitconfig --template\nchezmoi add ~/.ssh/id_rsa --encrypt\nchezmoi add ~/.vim --recursive\nchezmoi add ~/.oh-my-zsh --exact --recursive\n```\n\n## Notes\n\n!!! bug\n\n    `chezmoi add` will fail if the entry being added is in a directory\n    implicitly created by an [external][external]. See [issue #1574][issue-1574]\n    for details.\n\n!!! warning\n\n    `chezmoi add --exact --recursive DIR` works in predictable but surprising\n    ways and its use is not recommended for nested directories without taking\n    precautions.\n\n    If you have not previously added any files from `~/.config` to chezmoi and\n    run `chezmoi add --exact --recursive ~/.config/nvim`, chezmoi will consider\n    all files under `~/.config` to be managed, and any file *not* in\n    `~/.config/nvim` will be removed on your next `chezmoi apply`. This is\n    because `~/.config/nvim` is added as:\n\n    ```text\n    exact_dot_config/\n        exact_nvim/\n          exact_lua/\n            …\n          …\n    ```\n\n    To prevent this, add a `.keep` file *first* before adding the subdirectory\n    recursively.\n\n    ```sh\n    touch ~/.config/.keep\n    chezmoi add ~/.config/.keep\n    chezmoi add --recursive --exact ~/.config/nvim\n    ```\n\n    See [issue #4223][issue-4223] for details.\n\n[external]: /reference/special-files/chezmoiexternal-format.md\n[issue-1574]: https://github.com/twpayne/chezmoi/issues/1574\n[issue-4223]: https://github.com/twpayne/chezmoi/issues/4223\n","assets/chezmoi.io/docs/reference/commands/age-keygen.md":"# `age-keygen` [*identity-file*]\n\nGenerate an age identity or convert an age identity to an age recipient.\n\n## Flags\n\n### `--pq`\n\nGenerate a post-quantum key pair.\n\n### `-y`, `--convert`\n\nRead an identity file *identity-file* or the standard input and print its\nrecipient instead of generating an age identity.\n\n## Examples\n\n```sh\nchezmoi age-keygen\nchezmoi age-keygen -o identity.txt\nchezmoi age-keygen -y identity.txt\n```\n","assets/chezmoi.io/docs/reference/commands/age.md":"# `age`\n\n<!-- markdownlint-disable no-duplicate-heading -->\n\nInteract with age's passphrase-based encryption.\n\n## Subcommands\n\n### `age encrypt` [*file*...]\n\nEncrypt file or standard input.\n\n#### `-p`, `--passphrase`\n\nDecrypt with a passphrase.\n\n### `age decrypt` [*file*...]\n\nDecrypt file or standard input.\n\n#### `-p`, `--passphrase`\n\nDecrypt with a passphrase.\n\n## Examples\n\n```sh\nchezmoi age encrypt --passphrase plaintext.txt > ciphertext.txt\nchezmoi age decrypt --passphrase ciphertext.txt > decrypted-ciphertext.txt\n```\n","assets/chezmoi.io/docs/reference/commands/apply.md":"# `apply` [*target*...]\n\nEnsure that *target*... are in the target state, updating them if necessary. If\nno targets are specified, the state of all targets are ensured. If a target has\nbeen modified since chezmoi last wrote it then the user will be prompted if\nthey want to overwrite the file.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n### `--source-path`\n\nSpecify targets by source path, rather than target path. This is useful for\napplying changes after editing.\n\n## Examples\n\n```sh\nchezmoi apply\nchezmoi apply --dry-run --verbose\nchezmoi apply ~/.bashrc\n```\n","assets/chezmoi.io/docs/reference/commands/archive.md":"# `archive` [*target*....]\n\nGenerate an archive of the target state, or only the targets specified. This\ncan be piped into `tar` to inspect the target state.\n\n## Flags\n\n### `-f`, `--format` *format*\n\nWrite the archive in *format*. If `--output` is set the format is guessed from\nthe extension, otherwise the default is `tar`.\n\n| Supported formats |\n| ----------------- |\n| `tar`             |\n| `tar.gz`          |\n| `tgz`             |\n| `zip`             |\n\n### `-z`, `--gzip`\n\nCompress the archive with gzip. This is automatically set if the format is\n`tar.gz` or `tgz` and is ignored if the format is `zip`.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi archive | tar tvf -\nchezmoi archive --output=dotfiles.tar.gz\nchezmoi archive --output=dotfiles.zip\n```\n","assets/chezmoi.io/docs/reference/commands/cat-config.md":"# `cat-config`\n\nPrint the configuration file.\n\n## Examples\n\n```sh\nchezmoi cat-config\n```\n","assets/chezmoi.io/docs/reference/commands/cat.md":"# `cat` *target*...\n\nWrite the target contents of *target*s to stdout. *target*s must be files,\nscripts, or symlinks. For files, the target file contents are written. For\nscripts, the script's contents are written. For symlinks, the target is\nwritten.\n\n## Examples\n\n```sh\nchezmoi cat ~/.bashrc\n```\n","assets/chezmoi.io/docs/reference/commands/cd.md":"# `cd` [*path*]\n\nLaunch a shell in the working tree (typically the source directory). chezmoi\nwill launch the command set by the `cd.command` configuration variable with any\nextra arguments specified by `cd.args`. If this is not set, chezmoi will\nattempt to detect your shell and finally fall back to an OS-specific default.\n\nIf the optional argument *path* is present, the shell will be launched in the\nsource directory corresponding to *path*.\n\nThe shell will have various `CHEZMOI*` environment variables set, as for\nscripts.\n\n!!! hint\n\n    This does not change the current directory of the current shell. To do\n    that, instead use:\n\n    ```console\n    $ cd $(chezmoi source-path)\n    ```\n\n## Examples\n\n```sh\nchezmoi cd\nchezmoi cd ~\nchezmoi cd ~/.config\n```\n","assets/chezmoi.io/docs/reference/commands/chattr.md":"# `chattr` *modifier* *target*...\n\nChange the attributes and/or type of *target*s. *modifier* specifies what to\nmodify.\n\nSee [attributes][attributes] for a description of each attribute.\n\nAdd attributes by specifying them or their abbreviations directly, optionally\nprefixed with a plus sign (`+`). Remove attributes by prefixing them or their\nattributes with the string `no` or a minus sign (`-`). The available attribute\nmodifiers and their abbreviations are:\n\n| Attribute modifier | Abbreviation |\n| ------------------ | ------------ |\n| `after`            | `a`          |\n| `before`           | `b`          |\n| `empty`            | `e`          |\n| `encrypted`        | *none*       |\n| `exact`            | *none*       |\n| `executable`       | `x`          |\n| `external`         | *none*       |\n| `once`             | `o`          |\n| `onchange`         | *none*       |\n| `private`          | `p`          |\n| `readonly`         | `r`          |\n| `remove`           | *none*       |\n| `template`         | `t`          |\n\nThe type of a target can be changed using a type modifier:\n\n| Type modifier |\n| ------------- |\n| `create`      |\n| `modify`      |\n| `script`      |\n| `symlink`     |\n\nThe negative form of type modifiers, e.g. `nocreate`, changes the target to be\na regular file if it is of that type, otherwise the type is left unchanged.\n\nMultiple modifications may be specified by separating them with a comma (`,`).\nIf you use the `-`*modifier* form then you must put *modifier* after a `--` to\nprevent chezmoi from interpreting `-`*modifier* as an option.\n\n## Common flags\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-false\"\n\n## Examples\n\n```sh\nchezmoi chattr template ~/.bashrc\nchezmoi chattr noempty ~/.profile\nchezmoi chattr private,template ~/.netrc\nchezmoi chattr -- -x ~/.zshrc\nchezmoi chattr +create,+private ~/.kube/config\n```\n\n[attributes]: /reference/source-state-attributes.md\n","assets/chezmoi.io/docs/reference/commands/completion.md":"# `completion` *shell*\n\nGenerate shell completion code for the specified shell (`bash`, `fish`,\n`powershell`, or `zsh`).\n\n## Examples\n\n```sh\nchezmoi completion bash\nchezmoi completion fish --output=~/.config/fish/completions/chezmoi.fish\n```\n","assets/chezmoi.io/docs/reference/commands/data.md":"# `data`\n\nWrite the computed template data to stdout.\n\n## Common flags\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n## Examples\n\n```sh\nchezmoi data\nchezmoi data --format=yaml\n```\n","assets/chezmoi.io/docs/reference/commands/decrypt.md":"# `decrypt` [*file*...]\n\nDecrypt *file*s using chezmoi's configured encryption. If no files are given,\ndecrypt the standard input. The decrypted result is written to the standard\noutput or a file if the `--output` flag is set.\n","assets/chezmoi.io/docs/reference/commands/destroy.md":"# `destroy` *target*...\n\nRemove *target* from the source state, the destination directory, and the state.\n\n!!! danger\n\n    The `destroy` command permanently removes files both from your home\n    directory and chezmoi's source directory.\n\n    Only run `chezmoi destroy` if you have a separate backup of your home\n    directory and your source directory.\n\n    If you want chezmoi to stop managing the file use [`forget`][forget-command]\n    instead.\n\n    If you want to remove all traces of chezmoi from your system use\n    [`purge`][purge-command] instead.\n\n## Common flags\n\n### `--force`\n\nDestroy without prompting.\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-false\"\n\n[forget-command]: /reference/commands/forget.md\n[purge-command]: /reference/commands/purge.md\n","assets/chezmoi.io/docs/reference/commands/diff.md":"# `diff` [*target*...]\n\nPrint the difference between the target state and the destination state for\n*target*s. If no targets are specified, print the differences for all targets.\n\nIf a `diff.pager` command is set in the configuration file then the output will\nbe piped into it.\n\nIf `diff.command` is set then it will be invoked to show individual file\ndifferences with `diff.args` passed as arguments. Each element of `diff.args`\nis interpreted as a template with the variables `.Destination` and `.Target`\navailable corresponding to the path of the file in the source and target state\nrespectively. The default value of `diff.args` is\n`[\"{{ .Destination }}\", \"{{ .Target }}\"]`. If `diff.args` does not contain any\ntemplate arguments then `{{ .Destination }}` and `{{ .Target }}` will be\nappended automatically.\n\n## Flags\n\n### `--pager` *pager*\n\n> Configuration: `diff.pager`\n\nPager to use for output.\n\n### `--reverse`\n\n> Configuration: `diff.reverse`\n\nReverse the direction of the diff, i.e. show the changes to the target required\nto match the destination.\n\n### `--script-contents`\n\nShow script contents, defaults to `true`.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-false\"\n\n## Examples\n\n```sh\nchezmoi diff\nchezmoi diff ~/.bashrc\n```\n","assets/chezmoi.io/docs/reference/commands/docker.md":"# `docker`\n\n<!-- markdownlint-disable no-duplicate-heading -->\n\n!!! Hint\n\n    To use [podman](https://podman.io/) instead of Docker, set the\n    `docker.command` configuration variable to `podman`. You can also\n    use the [`chezmoi podman` command][podman-command] instead of\n    `chezmoi docker`.\n\nInstall chezmoi, run [`chezmoi init --apply`][init-command], and optionally\nexecute your shell in [Docker](https://docker.com/) containers.\n\n## Subcommands\n\n### `exec` *container-id* *init-args*...\n\nInstall chezmoi, run [`chezmoi init --apply *init-args*`][init-command], and\nexecute your shell in the existing Docker container *container-id*.\n\n#### Flags\n\n##### `-i`, `--interactive`\n\nKeep stdin open even if not attached.\n\n##### `-p`, `--package-manager` *package-manager*\n\nInstall chezmoi using *package-manager*, if possible. Valid values for\n*package-manager* include `apk`, `apt-get`, `brew`, `dnf`, `nix-env`, `pacman`,\n`port`, `pkg`, `rpm`, `snap`, `xbps-install`, and `zypper`. Otherwise, fall back\nto `curl` or `wget` installation. If neither `curl` nor `wget` are installed\nthen install them with *package-manager*.\n\n##### `-s`, `--shell`\n\nAfter installing chezmoi, initializing your dotfiles, execute your shell. This\nis the default.\n\n### `run` *image-id* *init-args*...\n\nCreate a new Docker container using *image-id*, and in it, install chezmoi, run\n[`chezmoi init --apply *init-args*`][init-command], and execute your shell.\n\n#### Flags\n\n##### `-p`, `--package-manager` *package-manager*\n\nInstall chezmoi using *package-manager*, if possible. Valid values for\n*package-manager* include `apk`, `apt-get`, `brew`, `dnf`, `nix-env`, `pacman`,\n`port`, `pkg`, `rpm`, `snap`, `xbps-install`, and `zypper`. Otherwise, fall back\nto `curl` or `wget` installation. If neither `curl` nor `wget` are installed\nthen install them with *package-manager*.\n\n## Examples\n\n```sh\nchezmoi docker exec $CONTAINER_ID $YOUR_GITHUB_USERNAME\nchezmoi docker run -p apk alpine:latest $YOUR_GITHUB_USERNAME\n```\n\n[init-command]: /reference/commands/init.md\n[podman-command]: /reference/commands/podman.md\n","assets/chezmoi.io/docs/reference/commands/doctor.md":"# `doctor`\n\nCheck for potential problems.\n\n## Flags\n\n### `--no-network`\n\nDo not use any network connections.\n\n## Examples\n\n```sh\nchezmoi doctor\n```\n","assets/chezmoi.io/docs/reference/commands/dump-config.md":"# `dump-config`\n\nDump the configuration.\n\n## Common flags\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n## Examples\n\n```sh\nchezmoi dump-config\n```\n","assets/chezmoi.io/docs/reference/commands/dump.md":"# `dump` [*target*...]\n\nDump the target state of *target*s. If no targets are specified, then the\nentire target state.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi dump ~/.bashrc\nchezmoi dump --format=yaml\n```\n","assets/chezmoi.io/docs/reference/commands/edit-config-template.md":"# `edit-config-template`\n\nEdit the configuration file template. If no configuration file template exists,\nthen a new one is created with the contents of the current config file.\n\n## Examples\n\n```sh\nchezmoi edit-config-template\n```\n","assets/chezmoi.io/docs/reference/commands/edit-config.md":"# `edit-config`\n\nEdit the configuration file.\n\n## Examples\n\n```sh\nchezmoi edit-config\n```\n","assets/chezmoi.io/docs/reference/commands/edit-encrypted.md":"# `edit-encrypted` *filename*...\n\nEdit the encrypted files *filename*s.\n\nEach *filename* is decrypted to a temporary directory, the editor is invoked on\nthe decrypted files. After the editor returns, each the decrypted file is\nre-encrypted.\n\n## Examples\n\n  ```sh\n  chezmoi edit-encrypted encrypted_file\n  ```\n","assets/chezmoi.io/docs/reference/commands/edit.md":"# `edit` [*target*...]\n\nEdit the source state of *target*s, which must be files or symlinks. If no\ntargets are given then the working tree of the source directory is opened.\n\nEncrypted files are decrypted to a private temporary directory and the editor\nis invoked with the decrypted file. When the editor exits the edited decrypted\nfile is re-encrypted and replaces the original file in the source state.\n\nIf the operating system supports hard links, then the edit command invokes the\neditor with filenames which match the target filename, unless the\n`edit.hardlink` configuration variable is set to `false` or the\n`--hardlink=false` command line flag is set. Templates preserve their `.tmpl`\nextension so editors can highlight them as templates.\n\n!!! hint\n\n    Depending on your editor, you can set the format of a file in the file itself\n    using a [modeline][modelines]. This can be useful if you want to syntax\n    highlight a template as a different format.\n\n## Flags\n\n### `-a`, `--apply`\n\n> Configuration: `edit.apply`\n\nApply the target immediately after editing. This is ignored if there are no\ntargets, and does not apply scripts.\n\n### `--hardlink` *bool*\n\n> Configuration: `edit.hardlink`\n\nInvoke the editor with a hard link to the source file with a name matching the\ntarget filename. This can help the editor determine the type of the file\ncorrectly. This is the default.\n\n!!! hint\n\n    Creating hardlinks is not possible between different filesystems. Hence,\n    if your [`tempDir`][tempdir] resides on a different filesystem (e.g. a\n    [tmpfs][tmpfs], which is sometimes used for `/tmp`), this will not work.\n\n### `--watch`\n\n> Configuration: `edit.watch`\n\nAutomatically apply changes when files are saved, with the following limitations:\n\n* Only available when `chezmoi edit` is invoked with arguments (i.e.\n  argument-free `chezmoi edit` is not supported).\n* All edited files are applied when any file is saved.\n* Only the edited files are watched, not any dependent files (e.g.\n  `.chezmoitemplates` and `include`d files in templates are not watched).\n* Only works on operating systems supported by [fsnotify][fsnotify].\n* Only works if `edit.hardlink` is enabled and works.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n## Examples\n\n  ```sh\n  chezmoi edit ~/.bashrc\n  chezmoi edit ~/.bashrc --apply\n  chezmoi edit\n  ```\n\n[fsnotify]: https://github.com/fsnotify/fsnotify\n[modelines]: https://vimhelp.org/options.txt.html#auto-setting\n[tempdir]: /reference/configuration-file/variables.md#tempdir\n[tmpfs]: https://en.wikipedia.org/wiki/Tmpfs\n","assets/chezmoi.io/docs/reference/commands/encrypt.md":"# `encrypt` [*file*...]\n\nEncrypt *file*s using chezmoi's configured encryption. If no files are given,\nencrypt the standard input. The encrypted result is written to the standard\noutput or a file if the `--output` flag is set.\n","assets/chezmoi.io/docs/reference/commands/execute-template.md":"# `execute-template` [*template*...]\n\nExecute *template*s. This is useful for [testing templates][testing] or for\ncalling chezmoi from other scripts. *templates* are interpreted as literal\ntemplates, with no whitespace added to the output between arguments. If no\ntemplates are specified, the template is read from stdin.\n\n## Flags\n\n### `-f`, `--file`\n\nTreat the arguments as filenames, not literal templates.\n\n### `-i`, `--init`\n\nInclude simulated functions only available during `chezmoi init`.\n\n### `--left-delimiter` *delimiter*\n\nSet the left template delimiter.\n\n### `--promptBool` *pairs*\n\nSimulate the `promptBool` template function with a function that returns values\nfrom *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value* pairs. If\n`promptBool` is called with a *prompt* that does not match any of *pairs*, then\nit returns false.\n\n### `--promptChoice` *pairs*\n\nSimulate the `promptChoice` template function with a function that returns\nvalues from *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value*\npairs. If `promptChoice` is called with a *prompt* that does not match any of\n*pairs*, then it returns *prompt* unchanged.\n\n### `--promptInt` *pairs*\n\nSimulate the `promptInt` template function with a function that returns values\nfrom *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value* pairs. If\n`promptInt` is called with a *prompt* that does not match any of *pairs*, then\nit returns zero.\n\n### `--promptMultichoice` *pairs*\n\nSimulate the `promptMultichoice` template function with a function that returns\nvalues from *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value*\npairs. If `promptMultichoice` is called with a *prompt* that does not match any\nof *pairs*, then it returns *prompt* as an array.\n\n### `-p`, `--promptString` *pairs*\n\nSimulate the `promptString` template function with a function that returns\nvalues from *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value*\npairs. If `promptString` is called with a *prompt* that does not match any of\n*pairs*, then it returns *prompt* unchanged.\n\n### `--right-delimiter` *delimiter*\n\nSet the right template delimiter.\n\n### `--stdinisatty` *bool*\n\nSimulate the `stdinIsATTY` function by returning *bool*.\n\n### `--with-stdin`\n\nIf run with arguments, then set `.chezmoi.stdin` to the contents of the standard\ninput.\n\n## Examples\n\n```sh\nchezmoi execute-template '{{ .chezmoi.sourceDir }}'\nchezmoi execute-template '{{ .chezmoi.os }}' / '{{ .chezmoi.arch }}'\necho '{{ .chezmoi | toJson }}' | chezmoi execute-template\nchezmoi execute-template --init --promptString email=me@home.org < ~/.local/share/chezmoi/.chezmoi.toml.tmpl\n```\n\n[testing]: /user-guide/templating.md#testing-templates\n","assets/chezmoi.io/docs/reference/commands/forget.md":"# `forget` *target*...\n\nRemove *target*s from the source state, i.e. stop managing them. *target*s must\nhave entries in the source state. They cannot be externals.\n\n## Examples\n\n```sh\nchezmoi forget ~/.bashrc\n```\n","assets/chezmoi.io/docs/reference/commands/generate.md":"# `generate` *output*\n\nGenerates *output* for use with chezmoi. The currently supported *output*s are:\n\n| Output                  | Description                                                                   |\n| ----------------------- | ----------------------------------------------------------------------------- |\n| `git-commit-message`    | A git commit message, describing the changes to the source directory.         |\n| `install.sh`            | An install script, suitable for use with GitHub Codespaces                    |\n| `install-init-shell.sh` | A script which installs chezmoi, runs `chezmoi init`, and executes your shell |\n\n## Examples\n\n```sh\nchezmoi generate install.sh > install.sh\nchezmoi git -- commit -m \"$(chezmoi generate git-commit-message)\"\nchezmoi generate install-init-shell.sh $YOUR_GITHUB_USERNAME\n```\n","assets/chezmoi.io/docs/reference/commands/git.md":"# `git` [*arg*...]\n\nRun `git` *args* in the working tree (typically the source directory).\n\n!!! note\n\n    Flags in *args* must occur after `--` to prevent chezmoi from interpreting\n    them.\n\n## Examples\n\n```sh\nchezmoi git add .\nchezmoi git add dot_gitconfig\nchezmoi git -- commit -m \"Add .gitconfig\"\n```\n","assets/chezmoi.io/docs/reference/commands/help.md":"# `help` [*command*...]\n\nPrint the help associated with *command*, or general help if no command is\ngiven.\n","assets/chezmoi.io/docs/reference/commands/ignored.md":"# `ignored`\n\nPrint the list of entries ignored by chezmoi.\n\n## Common flags\n\n### `-0`, `--nul-path-separator`\n\n--8<-- \"common-flags/nul-path-separator.md\"\n\n### `-t`, `--tree`\n\n--8<-- \"common-flags/tree.md\"\n\n## Examples\n\n```sh\nchezmoi ignored\n```\n","assets/chezmoi.io/docs/reference/commands/import.md":"# `import` *filename*\n\nImport the source state from an archive file in to a directory in the source\nstate. This is primarily used to make subdirectories of your home directory\nexactly match the contents of a downloaded archive. You will generally always\nwant to set the `--destination`, `--exact`, and `--remove-destination` flags.\n\nThe supported archive formats are `rar`, `tar`, `tar.gz`, `tgz`, `tar.bz2`,\n`tbz2`, `txz`, `tar.zst`, and `zip`.\n\n## Flags\n\n### `-d`, `--destination` *directory*\n\nSet the destination (in the source state) where the archive will be imported.\n\n### `--exact`\n\nSet the `exact` attribute on all imported directories.\n\n### `-r`, `--remove-destination`\n\nRemove destination (in the source state) before importing.\n\n### `--strip-components` *n*\n\nStrip *n* leading components from paths.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n## Examples\n\n```sh\ncurl -s -L -o ${TMPDIR}/oh-my-zsh-master.tar.gz https://github.com/ohmyzsh/ohmyzsh/archive/master.tar.gz\nmkdir -p $(chezmoi source-path)/dot_oh-my-zsh\nchezmoi import --strip-components 1 --destination ~/.oh-my-zsh ${TMPDIR}/oh-my-zsh-master.tar.gz\n```\n","assets/chezmoi.io/docs/reference/commands/index.md":"# Commands\n\nThis section provides documentation for chezmoi commands and their arguments.\n\nAll commands accept [global flags][global], though some flags may have no effect\non certain commands. Many commands also share [common flags][common].\n\n[global]: /reference/command-line-flags/global.md\n[common]: /reference/command-line-flags/common.md\n","assets/chezmoi.io/docs/reference/commands/init.md":"# `init` [*repo*]\n\nSetup the source directory, generate the config file, and optionally update the\ndestination directory to match the target state. This is done in the following\norder:\n\n1. The source directory is initialized. If chezmoi does not detect a Git\n   repository in the source directory, chezmoi will clone the provided *repo*\n   into the source directory. If no *repo* is provided, chezmoi will initialize\n   a new Git repository.\n\n2. If the initialized source directory contains a `.chezmoi.$FORMAT.tmpl` file,\n   a new configuration file will be created using that file as a template.\n\n3. If the `--apply` flag is provided, `chezmoi apply` is run.\n\n4. If the `--purge` flag is provided, chezmoi will remove the source, config,\n   and cache directories.\n\n5. If the `--purge-binary` is passed, chezmoi will attempt to remove its own\n   binary.\n\nBy default, if *repo* is given, chezmoi will guess the full git repo URL, using\nHTTPS by default, or SSH if the `--ssh` option is specified, according to the\nfollowing patterns:\n\n| Pattern            | HTTPS Repo                                  | SSH repo                           |\n| ------------------ | ------------------------------------------- | ---------------------------------- |\n| `user`             | `https://user@github.com/user/dotfiles.git` | `git@github.com:user/dotfiles.git` |\n| `user/repo`        | `https://user@github.com/user/repo.git`     | `git@github.com:user/repo.git`     |\n| `site/user/repo`   | `https://user@site/user/repo.git`           | `git@site:user/repo.git`           |\n| `sr.ht/~user`      | `https://user@git.sr.ht/~user/dotfiles`     | `git@git.sr.ht:~user/dotfiles.git` |\n| `sr.ht/~user/repo` | `https://user@git.sr.ht/~user/repo`         | `git@git.sr.ht:~user/repo.git`     |\n\nTo disable git repo URL guessing, pass the `--guess-repo-url=false` option.\n\n!!! info\n\n    If you are using a different version control system, there are different\n    steps [required for repo initialization][alt-vcs]. To prevent chezmoi from\n    trying to clone or create a Git repository, add an empty `.git` directory to\n    the source directory.\n\n    ```sh\n    mkdir -p ~/.local/share/chezmoi/.git\n    ```\n\n--8<-- \"config-format.md\"\n\n## Flags\n\n### `-a`, `--apply`\n\nRun `chezmoi apply` after checking out the repo and creating the config file.\n\n### `--branch` *branch*\n\nCheck out *branch* instead of the default branch.\n\n### `-C`, `--config-path` *path*\n\nWrite the generated config file to *path* instead of the default location.\n\n### `--data` *bool*\n\nInclude existing template data when creating the config file. This defaults to\n`true`. Set this to `false` to simulate creating the config file with no\nexisting template data.\n\n### `-d`, `--depth` *depth*\n\nClone the repo with depth *depth*.\n\n### `--git-lfs` *bool*\n\nRun `git lfs pull` after cloning the repo.\n\n### `-g`, `--guess-repo-url` *bool*\n\nGuess the repo URL from the *repo* argument. This defaults to `true`.\n\n### `--one-shot`\n\n`--one-shot` is the equivalent of `--apply`, `--depth=1`, `--force`, `--purge`,\nand `--purge-binary`. It attempts to install your dotfiles with chezmoi and then\nremove all traces of chezmoi from the system. This is useful for setting up\ntemporary environments (e.g. Docker containers).\n\n### `--prompt`\n\nForce the `prompt*Once` template functions to prompt.\n\n### `--promptBool` *pairs*\n\nPopulate the `promptBool` template function with values from *pairs*. *pairs* is\na comma-separated list of *prompt*`=`*value* pairs. If `promptBool` is called\nwith a *prompt* that does not match any of *pairs*, then it prompts the user for\na value.\n\n### `--promptChoice` *pairs*\n\nPopulate the `promptChoice` template function with values from *pairs*. *pairs*\nis a comma-separated list of *prompt*`=`*value* pairs. If `promptChoice` is\ncalled with a *prompt* that does not match any of *pairs*, then it prompts the\nuser for a value.\n\n### `--promptDefaults`\n\nMake all `prompt*` template function calls with a default value return that\ndefault value instead of prompting.\n\n### `--promptInt` *pairs*\n\nPopulate the `promptInt` template function with values from *pairs*. *pairs* is\na comma-separated list of *prompt*`=`*value* pairs. If `promptInt` is called\nwith a *prompt* that does not match any of *pairs*, then it prompts the user for\na value.\n\n### `--promptMultichoice` *pairs*\n\nPopulate the `promptMultichoice` template function with values from *pairs*.\n*pairs* is a comma-separated list of *prompt*`=`*value*[`/`*value*] pairs. If\n`promptMultichoice` is called with a *prompt* that does not match any of\n*pairs*, then it prompts the user for values.\n\n### `--promptString` *pairs*\n\nPopulate the `promptString` template function with values from *pairs*. *pairs*\nis a comma-separated list of *prompt*`=`*value* pairs. If `promptString` is\ncalled with a *prompt* that does not match any of *pairs*, then it prompts the\nuser for a value.\n\n### `-p`, `--purge`\n\nRemove the source and config directories after applying.\n\n### `-P`, `--purge-binary`\n\nAttempt to remove the chezmoi binary after applying.\n\n### `--recurse-submodules` *bool*\n\nRecursively clone submodules. This defaults to `true`.\n\n### `--revision` *revision*\n\nCheck out the repo at *revision*.\n\n### `--ssh`\n\nGuess an SSH repo URL instead of an HTTPS repo.\n\n### `--tag` *tag*\n\nCheck out the repo at *tag*.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n## Examples\n\n```sh\nchezmoi init user\nchezmoi init user --apply\nchezmoi init user --apply --purge\nchezmoi init user/dots\nchezmoi init codeberg.org/user\nchezmoi init gitlab.com/user\n```\n\n[alt-vcs]: /user-guide/advanced/customize-your-source-directory.md#use-a-different-version-control-system-to-git\n","assets/chezmoi.io/docs/reference/commands/license.md":"# `license`\n\nPrint chezmoi's license.\n\n## Examples\n\n```sh\nchezmoi license\n```\n","assets/chezmoi.io/docs/reference/commands/list.md":"# `list`\n\n`list` is an alias for [`managed`][managed-command].\n\n[managed-command]: /reference/commands/managed.md\n","assets/chezmoi.io/docs/reference/commands/manage.md":"# `manage` *target*...\n\n`manage` is an alias for [`add`][add-command] for symmetry with\n[`unmanage`][unmanage-command].\n\n[add-command]: /reference/commands/add.md\n[unmanage-command]: /reference/commands/unmanage.md\n","assets/chezmoi.io/docs/reference/commands/managed.md":"# `managed` [*path*...]\n\nList all managed entries in the destination directory under all *path*s in\nalphabetical order. When no *path*s are supplied, list all managed entries in\nthe destination directory in alphabetical order.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `-0`, `--nul-path-separator`\n\n--8<-- \"common-flags/nul-path-separator.md\"\n\n### `-p`, `--path-style` *style*\n\n--8<-- \"common-flags/path-style.md:all\"\n\n### `-t`, `--tree`\n\n--8<-- \"common-flags/tree.md\"\n\n## Examples\n\n```sh\nchezmoi managed\nchezmoi managed --include=files\nchezmoi managed --include=files,symlinks\nchezmoi managed -i dirs\nchezmoi managed -i dirs,files\nchezmoi managed -i files ~/.config\nchezmoi managed --exclude=encrypted --path-style=source-relative\n```\n","assets/chezmoi.io/docs/reference/commands/merge-all.md":"# `merge-all`\n\nPerform a three-way merge for file whose actual state does not match its target\nstate. The merge is performed with [`chezmoi merge`][merge-command].\n\n## Common flags\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi merge-all\n```\n\n[merge-command]: /reference/commands/merge.md\n","assets/chezmoi.io/docs/reference/commands/merge.md":"# `merge` *target*...\n\nPerform a three-way merge between the destination state, the target state, and\nthe source state for each *target*. The merge tool is defined by the\n`merge.command` configuration variable, and defaults to `vimdiff`. If multiple\ntargets are specified the merge tool is invoked separately and sequentially for\neach target. If the target state cannot be computed (for example if source is a\ntemplate containing errors or an encrypted file that cannot be decrypted) a\ntwo-way merge is performed instead.\n\nThe order of arguments to `merge.command` is set by `merge.args`. Each argument\nis interpreted as a template with the variables `.Destination`, `.Source`, and\n`.Target` available corresponding to the path of the file in the destination\nstate, the source state, and the target state respectively. The default value\nof `merge.args` is `[\"{{ .Destination }}\", \"{{ .Source }}\", \"{{ .Target }}\"]`.\nIf `merge.args` does not contain any template arguments then `{{ .Destination\n}}`, `{{ .Source }}`, and `{{ .Target }}` will be appended automatically.\n\n## Examples\n\n```sh\nchezmoi merge ~/.bashrc\n```\n","assets/chezmoi.io/docs/reference/commands/podman.md":"# `podman`\n\n`podman` is an alias for [`docker`][docker-command].\n\n[docker-command]: /reference/commands/docker.md\n","assets/chezmoi.io/docs/reference/commands/purge.md":"# `purge`\n\nRemove chezmoi's configuration, state, and source directory, but leave the\ntarget state intact.\n\n## Flags\n\n### `-P`, `--binary`\n\nPurge chezmoi binary.\n\n## Common flags\n\n### `--force`\n\nRemove without prompting.\n\n## Examples\n\n```sh\nchezmoi purge\nchezmoi purge --force\n```\n","assets/chezmoi.io/docs/reference/commands/push.md":"# `push`\n\nPush all changes to your dotfiles repo by running `git add`, `git commit`, and\n`git push` in the source directory.\n\n## Examples\n\n```sh\nchezmoi push\n```\n","assets/chezmoi.io/docs/reference/commands/re-add.md":"# `re-add` [*target*...]\n\nRe-add modified files in the target state, preserving any `encrypted_`\nattributes. chezmoi will not overwrite templates, and all entries that are\neither externals or not files are ignored. Directories are recursed into by\ndefault.\n\nIf no *target*s are specified then all modified files are re-added. If one or\nmore *target*s are given then only those targets are re-added.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--re-encrypt`\n\nRe-encrypt encrypted files.\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi re-add\nchezmoi re-add ~/.bashrc\nchezmoi re-add --recursive=false ~/.config/git\n```\n\n## Notes\n\n!!! hint\n\n    If you want to re-add a single file unconditionally, use `chezmoi add --force` instead.\n","assets/chezmoi.io/docs/reference/commands/secret.md":"# `secret`\n\n<!-- markdownlint-disable no-duplicate-heading -->\n\nVerify chezmoi's integration with the [system's keyring][keyring].\n\n## Subcommands\n\n### `secret keyring delete`\n\n#### `--service` *string*\n\nName of the service.\n\n#### `--user` *string*\n\nName of the user.\n\n### `secret keyring get`\n\n#### `--service` *string*\n\nName of the service.\n\n#### `--user` *string*\n\nName of the user.\n\n### `secret keyring set`\n\n#### `--service` *string*\n\nName of the service.\n\n#### `--user` *string*\n\nName of the user.\n\n#### `--value` *string*\n\nNew value.\n\n## Examples\n\n```sh\nchezmoi secret keyring set --service=service --user=user --value=password\nchezmoi secret keyring get --service=service --user=user\nchezmoi secret keyring delete --service=service --user=user\n```\n\n## Notes\n\n!!! warning\n\n    On FreeBSD, the `secret keyring` command is only available if chezmoi was\n    compiled with cgo enabled. The official release binaries of chezmoi are\n    **not** compiled with cgo enabled, and `secret keyring` command is not\n    available.\n\n[keyring]: /user-guide/password-managers/keychain-and-windows-credentials-manager.md\n","assets/chezmoi.io/docs/reference/commands/source-path.md":"# `source-path` [*target*...]\n\nPrint the path to each target's source state. If no targets are specified then\nprint the source directory.\n\n## Examples\n\n```sh\nchezmoi source-path\nchezmoi source-path ~/.bashrc\n```\n","assets/chezmoi.io/docs/reference/commands/ssh.md":"# `ssh` *host* *init-args*...\n\nSSH to *host*, install chezmoi, run `chezmoi init --apply *init-args*`, and\nexecutes your shell.\n\n!!! Warning\n\n    `ssh` is an potentially destructive command.\n\n## Flags\n\n### `-p`, `--package-manager` *package-manager*\n\nInstall chezmoi using *package-manager*, if possible. Valid values for\n*package-manager* include `apk`, `apt-get`, `brew`, `dnf`, `nix-env`, `pacman`,\n`port`, `pkg`, `rpm`, `snap`, `xbps-install`, and `zypper`. Otherwise, fall back\nto `curl` or `wget` installation. If neither `curl` nor `wget` are installed\nthen install them with *package-manager*.\n\n### `-s`, `--shell`\n\nAfter installing chezmoi, initializing your dotfiles, execute your shell. This\nis the default.\n\n## Examples\n\n```sh\nchezmoi ssh $HOSTNAME $YOUR_GITHUB_USERNAME\nchezmoi ssh $HOSTNAME -- --one-shot $YOUR_GITHUB_USERNAME\n```\n","assets/chezmoi.io/docs/reference/commands/state.md":"# `state`\n\nManipulate the persistent state.\n\n!!! hint\n\n    To get a full list of subcommands run:\n\n    ```console\n    $ chezmoi state help\n    ```\n\n## Subcommands\n\n### `data`\n\nPrint the raw data in the persistent state.\n\n### `delete`\n\nDelete a value from the persistent state.\n\n### `delete-bucket`\n\nDelete a bucket from the persistent state.\n\n### `dump`\n\nGenerate a dump of the persistent state.\n\n### `get`\n\nGet a value from the persistent state.\n\n### `get-bucket`\n\nGet a bucket from the persistent state.\n\n### `reset`\n\nReset the persistent state.\n\n### `set`\n\nSet a value from the persistent state\n\n## Examples\n\n```sh\nchezmoi state data\nchezmoi state delete --bucket=$BUCKET --key=$KEY\nchezmoi state delete-bucket --bucket=$BUCKET\nchezmoi state dump\nchezmoi state get --bucket=$BUCKET --key=$KEY\nchezmoi state get-bucket --bucket=$BUCKET\nchezmoi state set --bucket=$BUCKET --key=$KEY --value=$VALUE\nchezmoi state reset\n```\n","assets/chezmoi.io/docs/reference/commands/status.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Fstatus.md -->","assets/chezmoi.io/docs/reference/commands/target-path.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Ftarget-path.md -->","assets/chezmoi.io/docs/reference/commands/unmanage.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Funmanage.md -->","assets/chezmoi.io/docs/reference/commands/unmanaged.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Funmanaged.md -->","assets/chezmoi.io/docs/reference/commands/update.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Fupdate.md -->","assets/chezmoi.io/docs/reference/commands/upgrade.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Fupgrade.md -->","assets/chezmoi.io/docs/reference/commands/verify.md":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Fverify.md -->","assets/chezmoi.io/docs/user-guide/tools/diff.md":"# Diff\n\n## Use a custom diff tool\n\nBy default, chezmoi uses a built-in diff. You can use a custom tool by setting\nthe `diff.command` and `diff.args` configuration variables. The elements of\n`diff.args` are interpreted as templates with the variables `.Destination` and\n`.Target` containing filenames of the file in the destination state and the\ntarget state respectively. For example, to use [meld][meld], specify:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    command = \"meld\"\n    args = [\"--diff\", \"{{ .Destination }}\", \"{{ .Target }}\"]\n```\n<!-- /example-formats -->\n\n!!! hint\n\n    If you generate your config file from a config file template, then you'll\n    need to escape the `{{` and `}}` as `{{ \"{{\" }}` and `{{ \"}}\" }}`. That way\n    your generated config file contains the `{{` and `}}` you expect.\n\n## Use VSCode as the diff tool\n\nTo use [VSCode][vscode] as the diff tool, add the following to your config:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    command = \"code\"\n    args = [\"--wait\", \"--diff\"]\n```\n<!-- /example-formats -->\n\n## Use delta as the diff tool\n\nTo use [delta][delta] as the diff tool you must set `diff.pager` to delta, for\nexample:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    pager = \"delta\"\n```\n<!-- /example-formats -->\n\n## Don't show scripts in the diff output\n\nBy default, [`chezmoi diff`][diff-command] will show all changes, including the\ncontents of scripts that will be run. You can exclude scripts from the diff\noutput by setting the `diff.exclude` configuration variable in your\nconfiguration file, for example:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    exclude = [\"scripts\"]\n```\n<!-- /example-formats -->\n\n## Don't show externals in the diff output\n\nTo exclude diffs from externals, either pass the `--exclude=externals` flag or\nset `diff.exclude` to `[\"externals\"]` in your config file.\n\n## Customize the diff pager\n\nYou can change the diff format, and/or pipe the output into a pager of your\nchoice by setting `diff.pager` configuration variable. For example, to use\n[`diff-so-fancy`][fancy] specify:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    pager = \"diff-so-fancy\"\n```\n<!-- /example-formats -->\n\nThe pager can be disabled using the `--no-pager` flag or by setting `diff.pager`\nto an empty string.\n\n## Show human-friendly diffs for binary files\n\nSimilar to git, chezmoi includes a \"textconv\" feature that can transform file\ncontents before passing them to the diff program. This is primarily useful for\ngenerating human-readable diffs of binary files.\n\nFor example, to show diffs of macOS `.plist` files, add the following to your\nconfiguration file:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[[textconv]]\n    pattern = \"**/*.plist\"\n    command = \"plutil\"\n    args = [\"-convert\", \"xml1\", \"-o\", \"-\", \"-\"]\n```\n<!-- /example-formats -->\n\nThis will pipe all `.plist` files through `plutil -convert xml1 -o - -` before\nshowing differences.\n\n[meld]: https://meldmerge.org/\n[vscode]: https://code.visualstudio.com/\n[delta]: https://dandavison.github.io/delta/\n[fancy]: https://github.com/so-fancy/diff-so-fancy\n[diff-command]: /reference/commands/diff.md\n","assets/chezmoi.io/docs/user-guide/tools/editor.md":"# Editor\n\n## Use your preferred editor with `chezmoi edit` and `chezmoi edit-config`\n\nBy default, chezmoi will use your preferred editor as defined by the `$VISUAL`\nor `$EDITOR` environment variables, falling back to a default editor depending\non your operating system (`vi` on UNIX-like operating systems, `notepad.exe` on\nWindows).\n\nYou can configure chezmoi to use your preferred editor by either setting the\n`$EDITOR` environment variable or setting the `edit.command` variable in your\nconfiguration file.\n\nThe editor command must only return when you have finished editing the files.\nchezmoi will emit a warning if your editor command returns too quickly.\n\nIn the specific case of using [VSCode][vscode] or [Codium][codium] as your\neditor, you must pass the `--wait` flag, for example, in your shell config:\n\n```bash\nexport EDITOR=\"code --wait\"\n```\n\nOr in chezmoi's configuration file:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[edit]\n    command = \"code\"\n    args = [\"--wait\"]\n```\n<!-- /example-formats -->\n\n!!! warning\n\n    If you use [Helix][helix], you must use Helix 25.01 or later.\n\n## Use chezmoi with VIM\n\n[`github.com/alker0/chezmoi.vim`][alker0] provides syntax highlighting for files\nmanaged by chezmoi, including for templates.\n\n[`github.com/Lilja/vim-chezmoi`][lilja] works with `chezmoi edit` to apply the\nedited dotfile on save.\n\n[`github.com/xvzc/chezmoi.nvim`][xvzc] allows you to edit your chezmoi-managed\nfiles and automatically apply.\n\nAlternatively, you can use an `autocmd` to run [`chezmoi apply`][apply-command]\nwhenever you save a dotfile, but you must disable [`chezmoi\nedit`][edit-command]'s hardlinking:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[edit]\n    hardlink = false\n```\n<!-- /example-formats -->\n\n```vim title=\"~/.vimrc\"\nautocmd BufWritePost ~/.local/share/chezmoi/* ! chezmoi apply --source-path \"%\"\n```\n\n## Use chezmoi with emacs\n\n[`github.com/tuh8888/chezmoi.el`][tuh8888] provides convenience functions for\ninteracting with chezmoi from Emacs, and is available in [MELPA][melpa].\n\n[vscode]: https://code.visualstudio.com/\n[codium]: https://vscodium.com/\n[alker0]: https://github.com/alker0/chezmoi.vim\n[lilja]: https://github.com/Lilja/vim-chezmoi\n[xvzc]: https://github.com/xvzc/chezmoi.nvim\n[tuh8888]: https://github.com/tuh8888/chezmoi.el\n[melpa]: https://melpa.org/#/chezmoi\n[helix]: https://helix-editor.com/\n[apply-command]: /reference/commands/apply.md\n[edit-command]: /reference/commands/edit.md\n","assets/chezmoi.io/docs/user-guide/tools/http-or-socks5-proxy.md":"# HTTP or SOCKS5 proxy\n\nchezmoi supports HTTP, HTTPS, and SOCKS5 proxies. Set the `HTTP_PROXY`,\n`HTTPS_PROXY`, and `NO_PROXY` environment variables, or their lowercase\nequivalents, for example:\n\n```sh\nHTTP_PROXY=socks5://127.0.0.1:1080 chezmoi apply --refresh-externals\n```\n","assets/chezmoi.io/docs/user-guide/tools/merge.md":"# Merge\n\n## What is the merge command\n\nWhen running [`chezmoi apply --interactive`][apply-command], chezmoi computes\nthe desired state (the target) from your source. If applying would change a file\non disk - i.e. the destination differs from the target, usually because you\nedited the live file directly - a prompt appears to either overwrite, diff,\nskip.\n\nChoosing merge is chezmoi's analog of resolving a git conflict by hand - except\nit reconciles **three** states, not two:\n\n1. **.Destination** - the file on your system.\n\n2. **.Source** - the file in your chezmoi repo (the source of truth).\n\n3. **.Target** - the desired state, computed by rendering the source (templates\n   applied, etc.).\n\n## Use a custom merge command\n\nBy default, chezmoi uses `vimdiff`. You can use a custom command by setting the\n`merge.command` and `merge.args` configuration variables. The elements of\n`merge.args` are interpreted as templates with the variables `.Destination`,\n`.Source`, and `.Target` containing filenames of the file in the destination\nstate, source state, and target state respectively. For example, to use\n[neovim's diff mode][nvim], specify:\n\n=== \"TOML\"\n\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[merge]\n    command = \"nvim\"\n    args = [\n        \"-d\",\n        \"{{ .Destination }}\",\n        \"{{ .Source }}\",\n        \"{{ .Target }}\"\n    ]\n```\n\n=== \"YAML\"\n\n```yaml title=\"~/.config/chezmoi/chezmoi.yaml\"\nmerge:\n  command: nvim\n  args:\n  - -d\n  - \"{{ .Destination }}\"\n  - \"{{ .Source }}\"\n  - \"{{ .Target }}\"\n```\n\n=== \"JSON\"\n\n```json title=\"~/.config/chezmoi/chezmoi.json\"\n{\n    \"merge\": {\n        \"command\": \"nvim\",\n        \"args\": [\n            \"-d\",\n            \"{{ .Destination }}\",\n            \"{{ .Source }}\",\n            \"{{ .Target }}\"\n        ]\n    }\n}\n```\n\n!!! hint\n\n    If you generate your config file from a config file template, then you'll\n    need to escape the `{{` and `}}`. That way your generated config file\n    contains the `{{` and `}}` you expect.\n\n    === \"TOML\"\n\n        ```text title=\"~/.local/share/chezmoi/chezmoi.toml.tmpl\"\n        [merge]\n            command = \"nvim\"\n            args = [\n                \"-d\",\n                {{ printf \"%q\" \"{{ .Destination }}\" }},\n                {{ printf \"%q\" \"{{ .Source }}\" }},\n                {{ printf \"%q\" \"{{ .Target }}\" }},\n            ]\n        ```\n\n    === \"YAML\"\n\n        ```text title=\"~/.local/share/chezmoi/chezmoi.yaml.tmpl\"\n        merge:\n          command: nvim\n          args:\n          - -d\n          - {{ printf \"%q\" \"{{ .Destination }}\" }}\n          - {{ printf \"%q\" \"{{ .Source }}\" }}\n          - {{ printf \"%q\" \"{{ .Target }}\" }}\n        ```\n\n    === \"JSON\"\n\n        ```text title=\"~/.local/share/chezmoi/chezmoi.json.tmpl\"\n        {\n            \"merge\": {\n                \"command\": \"nvim\",\n                \"args\": [\n                    \"-d\",\n                    {{ printf \"%q\" \"{{ .Destination }}\" }},\n                    {{ printf \"%q\" \"{{ .Source }}\" }},\n                    {{ printf \"%q\" \"{{ .Target }}\" }}\n                ]\n            }\n        }\n        ```\n\n## Use Beyond Compare as the merge tool\n\nTo use [Beyond Compare][bcomp] as the merge tool, add the following to your config:\n\n=== \"TOML\"\n\n    ```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n    [merge]\n        command = \"bcomp\"\n        args = [\n            \"{{ .Destination }}\",\n            \"{{ .Source }}\",\n            \"{{ .Target }}\",\n            \"{{ .Source }}\"\n        ]\n    ```\n\n=== \"YAML\"\n\n    ```yaml title=\"~/.config/chezmoi/chezmoi.yaml\"\n    merge:\n      command: \"bcomp\"\n      args:\n      - \"{{ .Destination }}\"\n      - \"{{ .Source }}\"\n      - \"{{ .Target }}\"\n      - \"{{ .Source }}\"\n    ```\n\n=== \"JSON\"\n\n    ```json title=\"~/.config/chezmoi/chezmoi.json\"\n    {\n        \"merge\": {\n            \"command\": \"bcomp\",\n            \"args\": [\n                \"{{ .Destination }}\",\n                \"{{ .Source }}\",\n                \"{{ .Target }}\",\n                \"{{ .Source }}\"\n            ]\n        }\n    }\n    ```\n\n## Use VSCode as the merge tool\n\nTo use [VSCode][vscode] as the merge tool, add the following to your config:\n\n=== \"TOML\"\n\n    ```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n    [merge]\n    command = \"bash\"\n    args = [\n        \"-c\",\n        \"cp {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} && code --new-window --wait --merge {{ .Destination | quote }} {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} {{ .Source | quote }}\",\n    ]\n    ```\n\n=== \"YAML\"\n\n    ```yaml title=\"~/.config/chezmoi/chezmoi.yaml\"\n    merge:\n      command: \"bash\"\n      args:\n      - \"-c\"\n      - \"cp {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} && code --new-window --wait --merge {{ .Destination | quote }} {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} {{ .Source | quote }}\"\n    ```\n\n=== \"JSON\"\n\n    ```json title=\"~/.config/chezmoi.chezmoi.json\"\n    {\n        \"merge\": {\n            \"command\": \"bash\",\n            \"args\": [\n                \"-c\",\n                \"cp {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} && code --new-window --wait --merge {{ .Destination | quote }} {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} {{ .Source | quote }}\",\n            ]\n        }\n    }\n    ```\n\n[bcomp]: https://www.scootersoftware.com/\n[nvim]: https://neovim.io/doc/user/diff.html\n[vscode]: https://code.visualstudio.com/\n[apply-command]: /reference/commands/apply.md\n"},"items":[{"name":"diff.md","path":"assets/chezmoi.io/docs/user-guide/tools/diff.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/user-guide/tools/diff.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Diff\n\n## Use a custom diff tool\n\nBy default, chezmoi uses a built-in diff. You can use a custom tool by setting\nthe `diff.command` and `diff.args` configuration variables. The elements of\n`diff.args` are interpreted as templates with the variables `.Destination` and\n`.Target` containing filenames of the file in the destination state and the\ntarget state respectively. For example, to use [meld][meld], specify:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    command = \"meld\"\n    args = [\"--diff\", \"{{ .Destination }}\", \"{{ .Target }}\"]\n```\n<!-- /example-formats -->\n\n!!! hint\n\n    If you generate your config file from a config file template, then you'll\n    need to escape the `{{` and `}}` as `{{ \"{{\" }}` and `{{ \"}}\" }}`. That way\n    your generated config file contains the `{{` and `}}` you expect.\n\n## Use VSCode as the diff tool\n\nTo use [VSCode][vscode] as the diff tool, add the following to your config:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    command = \"code\"\n    args = [\"--wait\", \"--diff\"]\n```\n<!-- /example-formats -->\n\n## Use delta as the diff tool\n\nTo use [delta][delta] as the diff tool you must set `diff.pager` to delta, for\nexample:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    pager = \"delta\"\n```\n<!-- /example-formats -->\n\n## Don't show scripts in the diff output\n\nBy default, [`chezmoi diff`][diff-command] will show all changes, including the\ncontents of scripts that will be run. You can exclude scripts from the diff\noutput by setting the `diff.exclude` configuration variable in your\nconfiguration file, for example:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    exclude = [\"scripts\"]\n```\n<!-- /example-formats -->\n\n## Don't show externals in the diff output\n\nTo exclude diffs from externals, either pass the `--exclude=externals` flag or\nset `diff.exclude` to `[\"externals\"]` in your config file.\n\n## Customize the diff pager\n\nYou can change the diff format, and/or pipe the output into a pager of your\nchoice by setting `diff.pager` configuration variable. For example, to use\n[`diff-so-fancy`][fancy] specify:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    pager = \"diff-so-fancy\"\n```\n<!-- /example-formats -->\n\nThe pager can be disabled using the `--no-pager` flag or by setting `diff.pager`\nto an empty string.\n\n## Show human-friendly diffs for binary files\n\nSimilar to git, chezmoi includes a \"textconv\" feature that can transform file\ncontents before passing them to the diff program. This is primarily useful for\ngenerating human-readable diffs of binary files.\n\nFor example, to show diffs of macOS `.plist` files, add the following to your\nconfiguration file:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[[textconv]]\n    pattern = \"**/*.plist\"\n    command = \"plutil\"\n    args = [\"-convert\", \"xml1\", \"-o\", \"-\", \"-\"]\n```\n<!-- /example-formats -->\n\nThis will pipe all `.plist` files through `plutil -convert xml1 -o - -` before\nshowing differences.\n\n[meld]: https://meldmerge.org/\n[vscode]: https://code.visualstudio.com/\n[delta]: https://dandavison.github.io/delta/\n[fancy]: https://github.com/so-fancy/diff-so-fancy\n[diff-command]: /reference/commands/diff.md\n","isInternal":false,"tokens":885,"sizeBytes":3323},{"name":"editor.md","path":"assets/chezmoi.io/docs/user-guide/tools/editor.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/user-guide/tools/editor.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Editor\n\n## Use your preferred editor with `chezmoi edit` and `chezmoi edit-config`\n\nBy default, chezmoi will use your preferred editor as defined by the `$VISUAL`\nor `$EDITOR` environment variables, falling back to a default editor depending\non your operating system (`vi` on UNIX-like operating systems, `notepad.exe` on\nWindows).\n\nYou can configure chezmoi to use your preferred editor by either setting the\n`$EDITOR` environment variable or setting the `edit.command` variable in your\nconfiguration file.\n\nThe editor command must only return when you have finished editing the files.\nchezmoi will emit a warning if your editor command returns too quickly.\n\nIn the specific case of using [VSCode][vscode] or [Codium][codium] as your\neditor, you must pass the `--wait` flag, for example, in your shell config:\n\n```bash\nexport EDITOR=\"code --wait\"\n```\n\nOr in chezmoi's configuration file:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[edit]\n    command = \"code\"\n    args = [\"--wait\"]\n```\n<!-- /example-formats -->\n\n!!! warning\n\n    If you use [Helix][helix], you must use Helix 25.01 or later.\n\n## Use chezmoi with VIM\n\n[`github.com/alker0/chezmoi.vim`][alker0] provides syntax highlighting for files\nmanaged by chezmoi, including for templates.\n\n[`github.com/Lilja/vim-chezmoi`][lilja] works with `chezmoi edit` to apply the\nedited dotfile on save.\n\n[`github.com/xvzc/chezmoi.nvim`][xvzc] allows you to edit your chezmoi-managed\nfiles and automatically apply.\n\nAlternatively, you can use an `autocmd` to run [`chezmoi apply`][apply-command]\nwhenever you save a dotfile, but you must disable [`chezmoi\nedit`][edit-command]'s hardlinking:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[edit]\n    hardlink = false\n```\n<!-- /example-formats -->\n\n```vim title=\"~/.vimrc\"\nautocmd BufWritePost ~/.local/share/chezmoi/* ! chezmoi apply --source-path \"%\"\n```\n\n## Use chezmoi with emacs\n\n[`github.com/tuh8888/chezmoi.el`][tuh8888] provides convenience functions for\ninteracting with chezmoi from Emacs, and is available in [MELPA][melpa].\n\n[vscode]: https://code.visualstudio.com/\n[codium]: https://vscodium.com/\n[alker0]: https://github.com/alker0/chezmoi.vim\n[lilja]: https://github.com/Lilja/vim-chezmoi\n[xvzc]: https://github.com/xvzc/chezmoi.nvim\n[tuh8888]: https://github.com/tuh8888/chezmoi.el\n[melpa]: https://melpa.org/#/chezmoi\n[helix]: https://helix-editor.com/\n[apply-command]: /reference/commands/apply.md\n[edit-command]: /reference/commands/edit.md\n","isInternal":false,"tokens":720,"sizeBytes":2511},{"name":"http-or-socks5-proxy.md","path":"assets/chezmoi.io/docs/user-guide/tools/http-or-socks5-proxy.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/user-guide/tools/http-or-socks5-proxy.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# HTTP or SOCKS5 proxy\n\nchezmoi supports HTTP, HTTPS, and SOCKS5 proxies. Set the `HTTP_PROXY`,\n`HTTPS_PROXY`, and `NO_PROXY` environment variables, or their lowercase\nequivalents, for example:\n\n```sh\nHTTP_PROXY=socks5://127.0.0.1:1080 chezmoi apply --refresh-externals\n```\n","isInternal":false,"tokens":83,"sizeBytes":274},{"name":"merge.md","path":"assets/chezmoi.io/docs/user-guide/tools/merge.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/user-guide/tools/merge.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Merge\n\n## What is the merge command\n\nWhen running [`chezmoi apply --interactive`][apply-command], chezmoi computes\nthe desired state (the target) from your source. If applying would change a file\non disk - i.e. the destination differs from the target, usually because you\nedited the live file directly - a prompt appears to either overwrite, diff,\nskip.\n\nChoosing merge is chezmoi's analog of resolving a git conflict by hand - except\nit reconciles **three** states, not two:\n\n1. **.Destination** - the file on your system.\n\n2. **.Source** - the file in your chezmoi repo (the source of truth).\n\n3. **.Target** - the desired state, computed by rendering the source (templates\n   applied, etc.).\n\n## Use a custom merge command\n\nBy default, chezmoi uses `vimdiff`. You can use a custom command by setting the\n`merge.command` and `merge.args` configuration variables. The elements of\n`merge.args` are interpreted as templates with the variables `.Destination`,\n`.Source`, and `.Target` containing filenames of the file in the destination\nstate, source state, and target state respectively. For example, to use\n[neovim's diff mode][nvim], specify:\n\n=== \"TOML\"\n\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[merge]\n    command = \"nvim\"\n    args = [\n        \"-d\",\n        \"{{ .Destination }}\",\n        \"{{ .Source }}\",\n        \"{{ .Target }}\"\n    ]\n```\n\n=== \"YAML\"\n\n```yaml title=\"~/.config/chezmoi/chezmoi.yaml\"\nmerge:\n  command: nvim\n  args:\n  - -d\n  - \"{{ .Destination }}\"\n  - \"{{ .Source }}\"\n  - \"{{ .Target }}\"\n```\n\n=== \"JSON\"\n\n```json title=\"~/.config/chezmoi/chezmoi.json\"\n{\n    \"merge\": {\n        \"command\": \"nvim\",\n        \"args\": [\n            \"-d\",\n            \"{{ .Destination }}\",\n            \"{{ .Source }}\",\n            \"{{ .Target }}\"\n        ]\n    }\n}\n```\n\n!!! hint\n\n    If you generate your config file from a config file template, then you'll\n    need to escape the `{{` and `}}`. That way your generated config file\n    contains the `{{` and `}}` you expect.\n\n    === \"TOML\"\n\n        ```text title=\"~/.local/share/chezmoi/chezmoi.toml.tmpl\"\n        [merge]\n            command = \"nvim\"\n            args = [\n                \"-d\",\n                {{ printf \"%q\" \"{{ .Destination }}\" }},\n                {{ printf \"%q\" \"{{ .Source }}\" }},\n                {{ printf \"%q\" \"{{ .Target }}\" }},\n            ]\n        ```\n\n    === \"YAML\"\n\n        ```text title=\"~/.local/share/chezmoi/chezmoi.yaml.tmpl\"\n        merge:\n          command: nvim\n          args:\n          - -d\n          - {{ printf \"%q\" \"{{ .Destination }}\" }}\n          - {{ printf \"%q\" \"{{ .Source }}\" }}\n          - {{ printf \"%q\" \"{{ .Target }}\" }}\n        ```\n\n    === \"JSON\"\n\n        ```text title=\"~/.local/share/chezmoi/chezmoi.json.tmpl\"\n        {\n            \"merge\": {\n                \"command\": \"nvim\",\n                \"args\": [\n                    \"-d\",\n                    {{ printf \"%q\" \"{{ .Destination }}\" }},\n                    {{ printf \"%q\" \"{{ .Source }}\" }},\n                    {{ printf \"%q\" \"{{ .Target }}\" }}\n                ]\n            }\n        }\n        ```\n\n## Use Beyond Compare as the merge tool\n\nTo use [Beyond Compare][bcomp] as the merge tool, add the following to your config:\n\n=== \"TOML\"\n\n    ```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n    [merge]\n        command = \"bcomp\"\n        args = [\n            \"{{ .Destination }}\",\n            \"{{ .Source }}\",\n            \"{{ .Target }}\",\n            \"{{ .Source }}\"\n        ]\n    ```\n\n=== \"YAML\"\n\n    ```yaml title=\"~/.config/chezmoi/chezmoi.yaml\"\n    merge:\n      command: \"bcomp\"\n      args:\n      - \"{{ .Destination }}\"\n      - \"{{ .Source }}\"\n      - \"{{ .Target }}\"\n      - \"{{ .Source }}\"\n    ```\n\n=== \"JSON\"\n\n    ```json title=\"~/.config/chezmoi/chezmoi.json\"\n    {\n        \"merge\": {\n            \"command\": \"bcomp\",\n            \"args\": [\n                \"{{ .Destination }}\",\n                \"{{ .Source }}\",\n                \"{{ .Target }}\",\n                \"{{ .Source }}\"\n            ]\n        }\n    }\n    ```\n\n## Use VSCode as the merge tool\n\nTo use [VSCode][vscode] as the merge tool, add the following to your config:\n\n=== \"TOML\"\n\n    ```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n    [merge]\n    command = \"bash\"\n    args = [\n        \"-c\",\n        \"cp {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} && code --new-window --wait --merge {{ .Destination | quote }} {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} {{ .Source | quote }}\",\n    ]\n    ```\n\n=== \"YAML\"\n\n    ```yaml title=\"~/.config/chezmoi/chezmoi.yaml\"\n    merge:\n      command: \"bash\"\n      args:\n      - \"-c\"\n      - \"cp {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} && code --new-window --wait --merge {{ .Destination | quote }} {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} {{ .Source | quote }}\"\n    ```\n\n=== \"JSON\"\n\n    ```json title=\"~/.config/chezmoi.chezmoi.json\"\n    {\n        \"merge\": {\n            \"command\": \"bash\",\n            \"args\": [\n                \"-c\",\n                \"cp {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} && code --new-window --wait --merge {{ .Destination | quote }} {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} {{ .Source | quote }}\",\n            ]\n        }\n    }\n    ```\n\n[bcomp]: https://www.scootersoftware.com/\n[nvim]: https://neovim.io/doc/user/diff.html\n[vscode]: https://code.visualstudio.com/\n[apply-command]: /reference/commands/apply.md\n","isInternal":false,"tokens":1413,"sizeBytes":5420},{"name":"add.md","path":"assets/chezmoi.io/docs/reference/commands/add.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/add.md","title":"Command: /add","category":"command-prompt","format":"markdown","content":"# `add` *target*...\n\nAdd *target*s to the source state. If any target is already in the source\nstate, then its source state is replaced with its current state in the\ndestination directory.\n\n## Flags\n\n### `-a`, `--autotemplate`\n\nAutomatically generate a template by replacing strings that match variable\nvalues from the `data` section of the config file with their respective config\nnames as a template string. Longer substitutions occur before shorter ones.\nThis implies the `--template` option.\n\n!!! warning\n\n    `--autotemplate` uses a greedy algorithm which occasionally generates\n    templates with unwanted variable substitutions. Carefully review any\n    templates it generates.\n\n### `--create`\n\nAdd files that should exist, irrespective of their contents.\n\nSets the `create_` source state attribute on the added file.\n\nA file will be created with the given contents if the file does not exist.\nIf the file already exists, then its contents will not be changed.\nThis allows for managing files with an initial state but should not be changed\nby chezmoi afterwards.\n\n### `--encrypt`\n\n> Configuration: `add.encrypt`\n\nEncrypt files using the defined encryption method.\n\n### `--exact`\n\nSet the `exact` attribute on added directories.\n\n!!! warning\n\n    Directories with the `exact` attributes are statefully synced between target and source directories.\n    When running `re-add`, any files deleted from the `exact` target directory will be removed from the source directory.\n    Likewise, any files added to the `exact` target directory, will be added to the source directory\n\n### `--follow`\n\nIf the last part of a target is a symlink, add the target of the symlink\ninstead of the symlink itself.\n\n### `--new`\n\nCreate a new file if the target does not exist.\n\n### `-p`, `--prompt`\n\nInteractively prompt before adding each file.\n\n### `-q`, `--quiet`\n\nSuppress warnings about adding ignored entries.\n\n### `--secrets` `ignore`|`warning`|`error`\n\n> Configuration: `add.secrets`\n\nAction to take when a secret is found when adding a file. The default is\n`warning`.\n\n### `-T`, `--template`\n\nSet the `template` attribute on added files and symlinks.\n\n### `--template-symlinks`\n\n> Configuration: `add.templateSymlinks`\n\nWhen adding symlink to an absolute path in the source directory or destination\ndirectory, create a symlink template with `.chezmoi.sourceDir` or\n`.chezmoi.homeDir`. This is useful for creating portable absolute symlinks.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-f`, `--force`\n\nAdd *target*s, even if doing so would cause a source template to be\noverwritten.\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi add ~/.bashrc\nchezmoi add ~/.gitconfig --template\nchezmoi add ~/.ssh/id_rsa --encrypt\nchezmoi add ~/.vim --recursive\nchezmoi add ~/.oh-my-zsh --exact --recursive\n```\n\n## Notes\n\n!!! bug\n\n    `chezmoi add` will fail if the entry being added is in a directory\n    implicitly created by an [external][external]. See [issue #1574][issue-1574]\n    for details.\n\n!!! warning\n\n    `chezmoi add --exact --recursive DIR` works in predictable but surprising\n    ways and its use is not recommended for nested directories without taking\n    precautions.\n\n    If you have not previously added any files from `~/.config` to chezmoi and\n    run `chezmoi add --exact --recursive ~/.config/nvim`, chezmoi will consider\n    all files under `~/.config` to be managed, and any file *not* in\n    `~/.config/nvim` will be removed on your next `chezmoi apply`. This is\n    because `~/.config/nvim` is added as:\n\n    ```text\n    exact_dot_config/\n        exact_nvim/\n          exact_lua/\n            …\n          …\n    ```\n\n    To prevent this, add a `.keep` file *first* before adding the subdirectory\n    recursively.\n\n    ```sh\n    touch ~/.config/.keep\n    chezmoi add ~/.config/.keep\n    chezmoi add --recursive --exact ~/.config/nvim\n    ```\n\n    See [issue #4223][issue-4223] for details.\n\n[external]: /reference/special-files/chezmoiexternal-format.md\n[issue-1574]: https://github.com/twpayne/chezmoi/issues/1574\n[issue-4223]: https://github.com/twpayne/chezmoi/issues/4223\n","isInternal":false,"tokens":1051,"sizeBytes":4246},{"name":"age-keygen.md","path":"assets/chezmoi.io/docs/reference/commands/age-keygen.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/age-keygen.md","title":"Command: /age-keygen","category":"command-prompt","format":"markdown","content":"# `age-keygen` [*identity-file*]\n\nGenerate an age identity or convert an age identity to an age recipient.\n\n## Flags\n\n### `--pq`\n\nGenerate a post-quantum key pair.\n\n### `-y`, `--convert`\n\nRead an identity file *identity-file* or the standard input and print its\nrecipient instead of generating an age identity.\n\n## Examples\n\n```sh\nchezmoi age-keygen\nchezmoi age-keygen -o identity.txt\nchezmoi age-keygen -y identity.txt\n```\n","isInternal":false,"tokens":111,"sizeBytes":424},{"name":"age.md","path":"assets/chezmoi.io/docs/reference/commands/age.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/age.md","title":"Command: /age","category":"command-prompt","format":"markdown","content":"# `age`\n\n<!-- markdownlint-disable no-duplicate-heading -->\n\nInteract with age's passphrase-based encryption.\n\n## Subcommands\n\n### `age encrypt` [*file*...]\n\nEncrypt file or standard input.\n\n#### `-p`, `--passphrase`\n\nDecrypt with a passphrase.\n\n### `age decrypt` [*file*...]\n\nDecrypt file or standard input.\n\n#### `-p`, `--passphrase`\n\nDecrypt with a passphrase.\n\n## Examples\n\n```sh\nchezmoi age encrypt --passphrase plaintext.txt > ciphertext.txt\nchezmoi age decrypt --passphrase ciphertext.txt > decrypted-ciphertext.txt\n```\n","isInternal":false,"tokens":122,"sizeBytes":527},{"name":"apply.md","path":"assets/chezmoi.io/docs/reference/commands/apply.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/apply.md","title":"Command: /apply","category":"command-prompt","format":"markdown","content":"# `apply` [*target*...]\n\nEnsure that *target*... are in the target state, updating them if necessary. If\nno targets are specified, the state of all targets are ensured. If a target has\nbeen modified since chezmoi last wrote it then the user will be prompted if\nthey want to overwrite the file.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n### `--source-path`\n\nSpecify targets by source path, rather than target path. This is useful for\napplying changes after editing.\n\n## Examples\n\n```sh\nchezmoi apply\nchezmoi apply --dry-run --verbose\nchezmoi apply ~/.bashrc\n```\n","isInternal":false,"tokens":241,"sizeBytes":851},{"name":"archive.md","path":"assets/chezmoi.io/docs/reference/commands/archive.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/archive.md","title":"Command: /archive","category":"command-prompt","format":"markdown","content":"# `archive` [*target*....]\n\nGenerate an archive of the target state, or only the targets specified. This\ncan be piped into `tar` to inspect the target state.\n\n## Flags\n\n### `-f`, `--format` *format*\n\nWrite the archive in *format*. If `--output` is set the format is guessed from\nthe extension, otherwise the default is `tar`.\n\n| Supported formats |\n| ----------------- |\n| `tar`             |\n| `tar.gz`          |\n| `tgz`             |\n| `zip`             |\n\n### `-z`, `--gzip`\n\nCompress the archive with gzip. This is automatically set if the format is\n`tar.gz` or `tgz` and is ignored if the format is `zip`.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi archive | tar tvf -\nchezmoi archive --output=dotfiles.tar.gz\nchezmoi archive --output=dotfiles.zip\n```\n","isInternal":false,"tokens":313,"sizeBytes":1074},{"name":"cat-config.md","path":"assets/chezmoi.io/docs/reference/commands/cat-config.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/cat-config.md","title":"Command: /cat-config","category":"command-prompt","format":"markdown","content":"# `cat-config`\n\nPrint the configuration file.\n\n## Examples\n\n```sh\nchezmoi cat-config\n```\n","isInternal":false,"tokens":24,"sizeBytes":89},{"name":"cat.md","path":"assets/chezmoi.io/docs/reference/commands/cat.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/cat.md","title":"Command: /cat","category":"command-prompt","format":"markdown","content":"# `cat` *target*...\n\nWrite the target contents of *target*s to stdout. *target*s must be files,\nscripts, or symlinks. For files, the target file contents are written. For\nscripts, the script's contents are written. For symlinks, the target is\nwritten.\n\n## Examples\n\n```sh\nchezmoi cat ~/.bashrc\n```\n","isInternal":false,"tokens":81,"sizeBytes":298},{"name":"cd.md","path":"assets/chezmoi.io/docs/reference/commands/cd.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/cd.md","title":"Command: /cd","category":"command-prompt","format":"markdown","content":"# `cd` [*path*]\n\nLaunch a shell in the working tree (typically the source directory). chezmoi\nwill launch the command set by the `cd.command` configuration variable with any\nextra arguments specified by `cd.args`. If this is not set, chezmoi will\nattempt to detect your shell and finally fall back to an OS-specific default.\n\nIf the optional argument *path* is present, the shell will be launched in the\nsource directory corresponding to *path*.\n\nThe shell will have various `CHEZMOI*` environment variables set, as for\nscripts.\n\n!!! hint\n\n    This does not change the current directory of the current shell. To do\n    that, instead use:\n\n    ```console\n    $ cd $(chezmoi source-path)\n    ```\n\n## Examples\n\n```sh\nchezmoi cd\nchezmoi cd ~\nchezmoi cd ~/.config\n```\n","isInternal":false,"tokens":190,"sizeBytes":763},{"name":"chattr.md","path":"assets/chezmoi.io/docs/reference/commands/chattr.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/chattr.md","title":"Command: /chattr","category":"command-prompt","format":"markdown","content":"# `chattr` *modifier* *target*...\n\nChange the attributes and/or type of *target*s. *modifier* specifies what to\nmodify.\n\nSee [attributes][attributes] for a description of each attribute.\n\nAdd attributes by specifying them or their abbreviations directly, optionally\nprefixed with a plus sign (`+`). Remove attributes by prefixing them or their\nattributes with the string `no` or a minus sign (`-`). The available attribute\nmodifiers and their abbreviations are:\n\n| Attribute modifier | Abbreviation |\n| ------------------ | ------------ |\n| `after`            | `a`          |\n| `before`           | `b`          |\n| `empty`            | `e`          |\n| `encrypted`        | *none*       |\n| `exact`            | *none*       |\n| `executable`       | `x`          |\n| `external`         | *none*       |\n| `once`             | `o`          |\n| `onchange`         | *none*       |\n| `private`          | `p`          |\n| `readonly`         | `r`          |\n| `remove`           | *none*       |\n| `template`         | `t`          |\n\nThe type of a target can be changed using a type modifier:\n\n| Type modifier |\n| ------------- |\n| `create`      |\n| `modify`      |\n| `script`      |\n| `symlink`     |\n\nThe negative form of type modifiers, e.g. `nocreate`, changes the target to be\na regular file if it is of that type, otherwise the type is left unchanged.\n\nMultiple modifications may be specified by separating them with a comma (`,`).\nIf you use the `-`*modifier* form then you must put *modifier* after a `--` to\nprevent chezmoi from interpreting `-`*modifier* as an option.\n\n## Common flags\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-false\"\n\n## Examples\n\n```sh\nchezmoi chattr template ~/.bashrc\nchezmoi chattr noempty ~/.profile\nchezmoi chattr private,template ~/.netrc\nchezmoi chattr -- -x ~/.zshrc\nchezmoi chattr +create,+private ~/.kube/config\n```\n\n[attributes]: /reference/source-state-attributes.md\n","isInternal":false,"tokens":499,"sizeBytes":1934},{"name":"completion.md","path":"assets/chezmoi.io/docs/reference/commands/completion.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/completion.md","title":"Command: /completion","category":"command-prompt","format":"markdown","content":"# `completion` *shell*\n\nGenerate shell completion code for the specified shell (`bash`, `fish`,\n`powershell`, or `zsh`).\n\n## Examples\n\n```sh\nchezmoi completion bash\nchezmoi completion fish --output=~/.config/fish/completions/chezmoi.fish\n```\n","isInternal":false,"tokens":67,"sizeBytes":242},{"name":"data.md","path":"assets/chezmoi.io/docs/reference/commands/data.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/data.md","title":"Command: /data","category":"command-prompt","format":"markdown","content":"# `data`\n\nWrite the computed template data to stdout.\n\n## Common flags\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n## Examples\n\n```sh\nchezmoi data\nchezmoi data --format=yaml\n```\n","isInternal":false,"tokens":64,"sizeBytes":204},{"name":"decrypt.md","path":"assets/chezmoi.io/docs/reference/commands/decrypt.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/decrypt.md","title":"Command: /decrypt","category":"command-prompt","format":"markdown","content":"# `decrypt` [*file*...]\n\nDecrypt *file*s using chezmoi's configured encryption. If no files are given,\ndecrypt the standard input. The decrypted result is written to the standard\noutput or a file if the `--output` flag is set.\n","isInternal":false,"tokens":54,"sizeBytes":227},{"name":"destroy.md","path":"assets/chezmoi.io/docs/reference/commands/destroy.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/destroy.md","title":"Command: /destroy","category":"command-prompt","format":"markdown","content":"# `destroy` *target*...\n\nRemove *target* from the source state, the destination directory, and the state.\n\n!!! danger\n\n    The `destroy` command permanently removes files both from your home\n    directory and chezmoi's source directory.\n\n    Only run `chezmoi destroy` if you have a separate backup of your home\n    directory and your source directory.\n\n    If you want chezmoi to stop managing the file use [`forget`][forget-command]\n    instead.\n\n    If you want to remove all traces of chezmoi from your system use\n    [`purge`][purge-command] instead.\n\n## Common flags\n\n### `--force`\n\nDestroy without prompting.\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-false\"\n\n[forget-command]: /reference/commands/forget.md\n[purge-command]: /reference/commands/purge.md\n","isInternal":false,"tokens":191,"sizeBytes":786},{"name":"diff.md","path":"assets/chezmoi.io/docs/reference/commands/diff.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/diff.md","title":"Command: /diff","category":"command-prompt","format":"markdown","content":"# `diff` [*target*...]\n\nPrint the difference between the target state and the destination state for\n*target*s. If no targets are specified, print the differences for all targets.\n\nIf a `diff.pager` command is set in the configuration file then the output will\nbe piped into it.\n\nIf `diff.command` is set then it will be invoked to show individual file\ndifferences with `diff.args` passed as arguments. Each element of `diff.args`\nis interpreted as a template with the variables `.Destination` and `.Target`\navailable corresponding to the path of the file in the source and target state\nrespectively. The default value of `diff.args` is\n`[\"{{ .Destination }}\", \"{{ .Target }}\"]`. If `diff.args` does not contain any\ntemplate arguments then `{{ .Destination }}` and `{{ .Target }}` will be\nappended automatically.\n\n## Flags\n\n### `--pager` *pager*\n\n> Configuration: `diff.pager`\n\nPager to use for output.\n\n### `--reverse`\n\n> Configuration: `diff.reverse`\n\nReverse the direction of the diff, i.e. show the changes to the target required\nto match the destination.\n\n### `--script-contents`\n\nShow script contents, defaults to `true`.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-false\"\n\n## Examples\n\n```sh\nchezmoi diff\nchezmoi diff ~/.bashrc\n```\n","isInternal":false,"tokens":397,"sizeBytes":1519},{"name":"docker.md","path":"assets/chezmoi.io/docs/reference/commands/docker.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/docker.md","title":"Command: /docker","category":"command-prompt","format":"markdown","content":"# `docker`\n\n<!-- markdownlint-disable no-duplicate-heading -->\n\n!!! Hint\n\n    To use [podman](https://podman.io/) instead of Docker, set the\n    `docker.command` configuration variable to `podman`. You can also\n    use the [`chezmoi podman` command][podman-command] instead of\n    `chezmoi docker`.\n\nInstall chezmoi, run [`chezmoi init --apply`][init-command], and optionally\nexecute your shell in [Docker](https://docker.com/) containers.\n\n## Subcommands\n\n### `exec` *container-id* *init-args*...\n\nInstall chezmoi, run [`chezmoi init --apply *init-args*`][init-command], and\nexecute your shell in the existing Docker container *container-id*.\n\n#### Flags\n\n##### `-i`, `--interactive`\n\nKeep stdin open even if not attached.\n\n##### `-p`, `--package-manager` *package-manager*\n\nInstall chezmoi using *package-manager*, if possible. Valid values for\n*package-manager* include `apk`, `apt-get`, `brew`, `dnf`, `nix-env`, `pacman`,\n`port`, `pkg`, `rpm`, `snap`, `xbps-install`, and `zypper`. Otherwise, fall back\nto `curl` or `wget` installation. If neither `curl` nor `wget` are installed\nthen install them with *package-manager*.\n\n##### `-s`, `--shell`\n\nAfter installing chezmoi, initializing your dotfiles, execute your shell. This\nis the default.\n\n### `run` *image-id* *init-args*...\n\nCreate a new Docker container using *image-id*, and in it, install chezmoi, run\n[`chezmoi init --apply *init-args*`][init-command], and execute your shell.\n\n#### Flags\n\n##### `-p`, `--package-manager` *package-manager*\n\nInstall chezmoi using *package-manager*, if possible. Valid values for\n*package-manager* include `apk`, `apt-get`, `brew`, `dnf`, `nix-env`, `pacman`,\n`port`, `pkg`, `rpm`, `snap`, `xbps-install`, and `zypper`. Otherwise, fall back\nto `curl` or `wget` installation. If neither `curl` nor `wget` are installed\nthen install them with *package-manager*.\n\n## Examples\n\n```sh\nchezmoi docker exec $CONTAINER_ID $YOUR_GITHUB_USERNAME\nchezmoi docker run -p apk alpine:latest $YOUR_GITHUB_USERNAME\n```\n\n[init-command]: /reference/commands/init.md\n[podman-command]: /reference/commands/podman.md\n","isInternal":false,"tokens":574,"sizeBytes":2090},{"name":"doctor.md","path":"assets/chezmoi.io/docs/reference/commands/doctor.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/doctor.md","title":"Command: /doctor","category":"command-prompt","format":"markdown","content":"# `doctor`\n\nCheck for potential problems.\n\n## Flags\n\n### `--no-network`\n\nDo not use any network connections.\n\n## Examples\n\n```sh\nchezmoi doctor\n```\n","isInternal":false,"tokens":38,"sizeBytes":148},{"name":"dump-config.md","path":"assets/chezmoi.io/docs/reference/commands/dump-config.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/dump-config.md","title":"Command: /dump-config","category":"command-prompt","format":"markdown","content":"# `dump-config`\n\nDump the configuration.\n\n## Common flags\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n## Examples\n\n```sh\nchezmoi dump-config\n```\n","isInternal":false,"tokens":53,"sizeBytes":171},{"name":"dump.md","path":"assets/chezmoi.io/docs/reference/commands/dump.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/dump.md","title":"Command: /dump","category":"command-prompt","format":"markdown","content":"# `dump` [*target*...]\n\nDump the target state of *target*s. If no targets are specified, then the\nentire target state.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi dump ~/.bashrc\nchezmoi dump --format=yaml\n```\n","isInternal":false,"tokens":195,"sizeBytes":593},{"name":"edit-config-template.md","path":"assets/chezmoi.io/docs/reference/commands/edit-config-template.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/edit-config-template.md","title":"Command: /edit-config-template","category":"command-prompt","format":"markdown","content":"# `edit-config-template`\n\nEdit the configuration file template. If no configuration file template exists,\nthen a new one is created with the contents of the current config file.\n\n## Examples\n\n```sh\nchezmoi edit-config-template\n```\n","isInternal":false,"tokens":49,"sizeBytes":231},{"name":"edit-config.md","path":"assets/chezmoi.io/docs/reference/commands/edit-config.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/edit-config.md","title":"Command: /edit-config","category":"command-prompt","format":"markdown","content":"# `edit-config`\n\nEdit the configuration file.\n\n## Examples\n\n```sh\nchezmoi edit-config\n```\n","isInternal":false,"tokens":24,"sizeBytes":90},{"name":"edit-encrypted.md","path":"assets/chezmoi.io/docs/reference/commands/edit-encrypted.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/edit-encrypted.md","title":"Command: /edit-encrypted","category":"command-prompt","format":"markdown","content":"# `edit-encrypted` *filename*...\n\nEdit the encrypted files *filename*s.\n\nEach *filename* is decrypted to a temporary directory, the editor is invoked on\nthe decrypted files. After the editor returns, each the decrypted file is\nre-encrypted.\n\n## Examples\n\n  ```sh\n  chezmoi edit-encrypted encrypted_file\n  ```\n","isInternal":false,"tokens":73,"sizeBytes":309},{"name":"edit.md","path":"assets/chezmoi.io/docs/reference/commands/edit.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/edit.md","title":"Command: /edit","category":"command-prompt","format":"markdown","content":"# `edit` [*target*...]\n\nEdit the source state of *target*s, which must be files or symlinks. If no\ntargets are given then the working tree of the source directory is opened.\n\nEncrypted files are decrypted to a private temporary directory and the editor\nis invoked with the decrypted file. When the editor exits the edited decrypted\nfile is re-encrypted and replaces the original file in the source state.\n\nIf the operating system supports hard links, then the edit command invokes the\neditor with filenames which match the target filename, unless the\n`edit.hardlink` configuration variable is set to `false` or the\n`--hardlink=false` command line flag is set. Templates preserve their `.tmpl`\nextension so editors can highlight them as templates.\n\n!!! hint\n\n    Depending on your editor, you can set the format of a file in the file itself\n    using a [modeline][modelines]. This can be useful if you want to syntax\n    highlight a template as a different format.\n\n## Flags\n\n### `-a`, `--apply`\n\n> Configuration: `edit.apply`\n\nApply the target immediately after editing. This is ignored if there are no\ntargets, and does not apply scripts.\n\n### `--hardlink` *bool*\n\n> Configuration: `edit.hardlink`\n\nInvoke the editor with a hard link to the source file with a name matching the\ntarget filename. This can help the editor determine the type of the file\ncorrectly. This is the default.\n\n!!! hint\n\n    Creating hardlinks is not possible between different filesystems. Hence,\n    if your [`tempDir`][tempdir] resides on a different filesystem (e.g. a\n    [tmpfs][tmpfs], which is sometimes used for `/tmp`), this will not work.\n\n### `--watch`\n\n> Configuration: `edit.watch`\n\nAutomatically apply changes when files are saved, with the following limitations:\n\n* Only available when `chezmoi edit` is invoked with arguments (i.e.\n  argument-free `chezmoi edit` is not supported).\n* All edited files are applied when any file is saved.\n* Only the edited files are watched, not any dependent files (e.g.\n  `.chezmoitemplates` and `include`d files in templates are not watched).\n* Only works on operating systems supported by [fsnotify][fsnotify].\n* Only works if `edit.hardlink` is enabled and works.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n## Examples\n\n  ```sh\n  chezmoi edit ~/.bashrc\n  chezmoi edit ~/.bashrc --apply\n  chezmoi edit\n  ```\n\n[fsnotify]: https://github.com/fsnotify/fsnotify\n[modelines]: https://vimhelp.org/options.txt.html#auto-setting\n[tempdir]: /reference/configuration-file/variables.md#tempdir\n[tmpfs]: https://en.wikipedia.org/wiki/Tmpfs\n","isInternal":false,"tokens":659,"sizeBytes":2705},{"name":"encrypt.md","path":"assets/chezmoi.io/docs/reference/commands/encrypt.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/encrypt.md","title":"Command: /encrypt","category":"command-prompt","format":"markdown","content":"# `encrypt` [*file*...]\n\nEncrypt *file*s using chezmoi's configured encryption. If no files are given,\nencrypt the standard input. The encrypted result is written to the standard\noutput or a file if the `--output` flag is set.\n","isInternal":false,"tokens":54,"sizeBytes":227},{"name":"execute-template.md","path":"assets/chezmoi.io/docs/reference/commands/execute-template.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/execute-template.md","title":"Command: /execute-template","category":"command-prompt","format":"markdown","content":"# `execute-template` [*template*...]\n\nExecute *template*s. This is useful for [testing templates][testing] or for\ncalling chezmoi from other scripts. *templates* are interpreted as literal\ntemplates, with no whitespace added to the output between arguments. If no\ntemplates are specified, the template is read from stdin.\n\n## Flags\n\n### `-f`, `--file`\n\nTreat the arguments as filenames, not literal templates.\n\n### `-i`, `--init`\n\nInclude simulated functions only available during `chezmoi init`.\n\n### `--left-delimiter` *delimiter*\n\nSet the left template delimiter.\n\n### `--promptBool` *pairs*\n\nSimulate the `promptBool` template function with a function that returns values\nfrom *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value* pairs. If\n`promptBool` is called with a *prompt* that does not match any of *pairs*, then\nit returns false.\n\n### `--promptChoice` *pairs*\n\nSimulate the `promptChoice` template function with a function that returns\nvalues from *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value*\npairs. If `promptChoice` is called with a *prompt* that does not match any of\n*pairs*, then it returns *prompt* unchanged.\n\n### `--promptInt` *pairs*\n\nSimulate the `promptInt` template function with a function that returns values\nfrom *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value* pairs. If\n`promptInt` is called with a *prompt* that does not match any of *pairs*, then\nit returns zero.\n\n### `--promptMultichoice` *pairs*\n\nSimulate the `promptMultichoice` template function with a function that returns\nvalues from *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value*\npairs. If `promptMultichoice` is called with a *prompt* that does not match any\nof *pairs*, then it returns *prompt* as an array.\n\n### `-p`, `--promptString` *pairs*\n\nSimulate the `promptString` template function with a function that returns\nvalues from *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value*\npairs. If `promptString` is called with a *prompt* that does not match any of\n*pairs*, then it returns *prompt* unchanged.\n\n### `--right-delimiter` *delimiter*\n\nSet the right template delimiter.\n\n### `--stdinisatty` *bool*\n\nSimulate the `stdinIsATTY` function by returning *bool*.\n\n### `--with-stdin`\n\nIf run with arguments, then set `.chezmoi.stdin` to the contents of the standard\ninput.\n\n## Examples\n\n```sh\nchezmoi execute-template '{{ .chezmoi.sourceDir }}'\nchezmoi execute-template '{{ .chezmoi.os }}' / '{{ .chezmoi.arch }}'\necho '{{ .chezmoi | toJson }}' | chezmoi execute-template\nchezmoi execute-template --init --promptString email=me@home.org < ~/.local/share/chezmoi/.chezmoi.toml.tmpl\n```\n\n[testing]: /user-guide/templating.md#testing-templates\n","isInternal":false,"tokens":704,"sizeBytes":2713},{"name":"forget.md","path":"assets/chezmoi.io/docs/reference/commands/forget.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/forget.md","title":"Command: /forget","category":"command-prompt","format":"markdown","content":"# `forget` *target*...\n\nRemove *target*s from the source state, i.e. stop managing them. *target*s must\nhave entries in the source state. They cannot be externals.\n\n## Examples\n\n```sh\nchezmoi forget ~/.bashrc\n```\n","isInternal":false,"tokens":58,"sizeBytes":213},{"name":"generate.md","path":"assets/chezmoi.io/docs/reference/commands/generate.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/generate.md","title":"Command: /generate","category":"command-prompt","format":"markdown","content":"# `generate` *output*\n\nGenerates *output* for use with chezmoi. The currently supported *output*s are:\n\n| Output                  | Description                                                                   |\n| ----------------------- | ----------------------------------------------------------------------------- |\n| `git-commit-message`    | A git commit message, describing the changes to the source directory.         |\n| `install.sh`            | An install script, suitable for use with GitHub Codespaces                    |\n| `install-init-shell.sh` | A script which installs chezmoi, runs `chezmoi init`, and executes your shell |\n\n## Examples\n\n```sh\nchezmoi generate install.sh > install.sh\nchezmoi git -- commit -m \"$(chezmoi generate git-commit-message)\"\nchezmoi generate install-init-shell.sh $YOUR_GITHUB_USERNAME\n```\n","isInternal":false,"tokens":161,"sizeBytes":836},{"name":"git.md","path":"assets/chezmoi.io/docs/reference/commands/git.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/git.md","title":"Command: /git","category":"command-prompt","format":"markdown","content":"# `git` [*arg*...]\n\nRun `git` *args* in the working tree (typically the source directory).\n\n!!! note\n\n    Flags in *args* must occur after `--` to prevent chezmoi from interpreting\n    them.\n\n## Examples\n\n```sh\nchezmoi git add .\nchezmoi git add dot_gitconfig\nchezmoi git -- commit -m \"Add .gitconfig\"\n```\n","isInternal":false,"tokens":88,"sizeBytes":305},{"name":"help.md","path":"assets/chezmoi.io/docs/reference/commands/help.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/help.md","title":"Command: /help","category":"command-prompt","format":"markdown","content":"# `help` [*command*...]\n\nPrint the help associated with *command*, or general help if no command is\ngiven.\n","isInternal":false,"tokens":26,"sizeBytes":107},{"name":"ignored.md","path":"assets/chezmoi.io/docs/reference/commands/ignored.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/ignored.md","title":"Command: /ignored","category":"command-prompt","format":"markdown","content":"# `ignored`\n\nPrint the list of entries ignored by chezmoi.\n\n## Common flags\n\n### `-0`, `--nul-path-separator`\n\n--8<-- \"common-flags/nul-path-separator.md\"\n\n### `-t`, `--tree`\n\n--8<-- \"common-flags/tree.md\"\n\n## Examples\n\n```sh\nchezmoi ignored\n```\n","isInternal":false,"tokens":78,"sizeBytes":246},{"name":"import.md","path":"assets/chezmoi.io/docs/reference/commands/import.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/import.md","title":"Command: /import","category":"command-prompt","format":"markdown","content":"# `import` *filename*\n\nImport the source state from an archive file in to a directory in the source\nstate. This is primarily used to make subdirectories of your home directory\nexactly match the contents of a downloaded archive. You will generally always\nwant to set the `--destination`, `--exact`, and `--remove-destination` flags.\n\nThe supported archive formats are `rar`, `tar`, `tar.gz`, `tgz`, `tar.bz2`,\n`tbz2`, `txz`, `tar.zst`, and `zip`.\n\n## Flags\n\n### `-d`, `--destination` *directory*\n\nSet the destination (in the source state) where the archive will be imported.\n\n### `--exact`\n\nSet the `exact` attribute on all imported directories.\n\n### `-r`, `--remove-destination`\n\nRemove destination (in the source state) before importing.\n\n### `--strip-components` *n*\n\nStrip *n* leading components from paths.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n## Examples\n\n```sh\ncurl -s -L -o ${TMPDIR}/oh-my-zsh-master.tar.gz https://github.com/ohmyzsh/ohmyzsh/archive/master.tar.gz\nmkdir -p $(chezmoi source-path)/dot_oh-my-zsh\nchezmoi import --strip-components 1 --destination ~/.oh-my-zsh ${TMPDIR}/oh-my-zsh-master.tar.gz\n```\n","isInternal":false,"tokens":340,"sizeBytes":1230},{"name":"index.md","path":"assets/chezmoi.io/docs/reference/commands/index.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/index.md","title":"Command: /index","category":"command-prompt","format":"markdown","content":"# Commands\n\nThis section provides documentation for chezmoi commands and their arguments.\n\nAll commands accept [global flags][global], though some flags may have no effect\non certain commands. Many commands also share [common flags][common].\n\n[global]: /reference/command-line-flags/global.md\n[common]: /reference/command-line-flags/common.md\n","isInternal":false,"tokens":71,"sizeBytes":343},{"name":"init.md","path":"assets/chezmoi.io/docs/reference/commands/init.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/init.md","title":"Command: /init","category":"command-prompt","format":"markdown","content":"# `init` [*repo*]\n\nSetup the source directory, generate the config file, and optionally update the\ndestination directory to match the target state. This is done in the following\norder:\n\n1. The source directory is initialized. If chezmoi does not detect a Git\n   repository in the source directory, chezmoi will clone the provided *repo*\n   into the source directory. If no *repo* is provided, chezmoi will initialize\n   a new Git repository.\n\n2. If the initialized source directory contains a `.chezmoi.$FORMAT.tmpl` file,\n   a new configuration file will be created using that file as a template.\n\n3. If the `--apply` flag is provided, `chezmoi apply` is run.\n\n4. If the `--purge` flag is provided, chezmoi will remove the source, config,\n   and cache directories.\n\n5. If the `--purge-binary` is passed, chezmoi will attempt to remove its own\n   binary.\n\nBy default, if *repo* is given, chezmoi will guess the full git repo URL, using\nHTTPS by default, or SSH if the `--ssh` option is specified, according to the\nfollowing patterns:\n\n| Pattern            | HTTPS Repo                                  | SSH repo                           |\n| ------------------ | ------------------------------------------- | ---------------------------------- |\n| `user`             | `https://user@github.com/user/dotfiles.git` | `git@github.com:user/dotfiles.git` |\n| `user/repo`        | `https://user@github.com/user/repo.git`     | `git@github.com:user/repo.git`     |\n| `site/user/repo`   | `https://user@site/user/repo.git`           | `git@site:user/repo.git`           |\n| `sr.ht/~user`      | `https://user@git.sr.ht/~user/dotfiles`     | `git@git.sr.ht:~user/dotfiles.git` |\n| `sr.ht/~user/repo` | `https://user@git.sr.ht/~user/repo`         | `git@git.sr.ht:~user/repo.git`     |\n\nTo disable git repo URL guessing, pass the `--guess-repo-url=false` option.\n\n!!! info\n\n    If you are using a different version control system, there are different\n    steps [required for repo initialization][alt-vcs]. To prevent chezmoi from\n    trying to clone or create a Git repository, add an empty `.git` directory to\n    the source directory.\n\n    ```sh\n    mkdir -p ~/.local/share/chezmoi/.git\n    ```\n\n--8<-- \"config-format.md\"\n\n## Flags\n\n### `-a`, `--apply`\n\nRun `chezmoi apply` after checking out the repo and creating the config file.\n\n### `--branch` *branch*\n\nCheck out *branch* instead of the default branch.\n\n### `-C`, `--config-path` *path*\n\nWrite the generated config file to *path* instead of the default location.\n\n### `--data` *bool*\n\nInclude existing template data when creating the config file. This defaults to\n`true`. Set this to `false` to simulate creating the config file with no\nexisting template data.\n\n### `-d`, `--depth` *depth*\n\nClone the repo with depth *depth*.\n\n### `--git-lfs` *bool*\n\nRun `git lfs pull` after cloning the repo.\n\n### `-g`, `--guess-repo-url` *bool*\n\nGuess the repo URL from the *repo* argument. This defaults to `true`.\n\n### `--one-shot`\n\n`--one-shot` is the equivalent of `--apply`, `--depth=1`, `--force`, `--purge`,\nand `--purge-binary`. It attempts to install your dotfiles with chezmoi and then\nremove all traces of chezmoi from the system. This is useful for setting up\ntemporary environments (e.g. Docker containers).\n\n### `--prompt`\n\nForce the `prompt*Once` template functions to prompt.\n\n### `--promptBool` *pairs*\n\nPopulate the `promptBool` template function with values from *pairs*. *pairs* is\na comma-separated list of *prompt*`=`*value* pairs. If `promptBool` is called\nwith a *prompt* that does not match any of *pairs*, then it prompts the user for\na value.\n\n### `--promptChoice` *pairs*\n\nPopulate the `promptChoice` template function with values from *pairs*. *pairs*\nis a comma-separated list of *prompt*`=`*value* pairs. If `promptChoice` is\ncalled with a *prompt* that does not match any of *pairs*, then it prompts the\nuser for a value.\n\n### `--promptDefaults`\n\nMake all `prompt*` template function calls with a default value return that\ndefault value instead of prompting.\n\n### `--promptInt` *pairs*\n\nPopulate the `promptInt` template function with values from *pairs*. *pairs* is\na comma-separated list of *prompt*`=`*value* pairs. If `promptInt` is called\nwith a *prompt* that does not match any of *pairs*, then it prompts the user for\na value.\n\n### `--promptMultichoice` *pairs*\n\nPopulate the `promptMultichoice` template function with values from *pairs*.\n*pairs* is a comma-separated list of *prompt*`=`*value*[`/`*value*] pairs. If\n`promptMultichoice` is called with a *prompt* that does not match any of\n*pairs*, then it prompts the user for values.\n\n### `--promptString` *pairs*\n\nPopulate the `promptString` template function with values from *pairs*. *pairs*\nis a comma-separated list of *prompt*`=`*value* pairs. If `promptString` is\ncalled with a *prompt* that does not match any of *pairs*, then it prompts the\nuser for a value.\n\n### `-p`, `--purge`\n\nRemove the source and config directories after applying.\n\n### `-P`, `--purge-binary`\n\nAttempt to remove the chezmoi binary after applying.\n\n### `--recurse-submodules` *bool*\n\nRecursively clone submodules. This defaults to `true`.\n\n### `--revision` *revision*\n\nCheck out the repo at *revision*.\n\n### `--ssh`\n\nGuess an SSH repo URL instead of an HTTPS repo.\n\n### `--tag` *tag*\n\nCheck out the repo at *tag*.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n## Examples\n\n```sh\nchezmoi init user\nchezmoi init user --apply\nchezmoi init user --apply --purge\nchezmoi init user/dots\nchezmoi init codeberg.org/user\nchezmoi init gitlab.com/user\n```\n\n[alt-vcs]: /user-guide/advanced/customize-your-source-directory.md#use-a-different-version-control-system-to-git\n","isInternal":false,"tokens":1527,"sizeBytes":5767},{"name":"license.md","path":"assets/chezmoi.io/docs/reference/commands/license.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/license.md","title":"Command: /license","category":"command-prompt","format":"markdown","content":"# `license`\n\nPrint chezmoi's license.\n\n## Examples\n\n```sh\nchezmoi license\n```\n","isInternal":false,"tokens":24,"sizeBytes":78},{"name":"list.md","path":"assets/chezmoi.io/docs/reference/commands/list.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/list.md","title":"Command: /list","category":"command-prompt","format":"markdown","content":"# `list`\n\n`list` is an alias for [`managed`][managed-command].\n\n[managed-command]: /reference/commands/managed.md\n","isInternal":false,"tokens":30,"sizeBytes":114},{"name":"manage.md","path":"assets/chezmoi.io/docs/reference/commands/manage.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/manage.md","title":"Command: /manage","category":"command-prompt","format":"markdown","content":"# `manage` *target*...\n\n`manage` is an alias for [`add`][add-command] for symmetry with\n[`unmanage`][unmanage-command].\n\n[add-command]: /reference/commands/add.md\n[unmanage-command]: /reference/commands/unmanage.md\n","isInternal":false,"tokens":59,"sizeBytes":215},{"name":"managed.md","path":"assets/chezmoi.io/docs/reference/commands/managed.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/managed.md","title":"Command: /managed","category":"command-prompt","format":"markdown","content":"# `managed` [*path*...]\n\nList all managed entries in the destination directory under all *path*s in\nalphabetical order. When no *path*s are supplied, list all managed entries in\nthe destination directory in alphabetical order.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `-0`, `--nul-path-separator`\n\n--8<-- \"common-flags/nul-path-separator.md\"\n\n### `-p`, `--path-style` *style*\n\n--8<-- \"common-flags/path-style.md:all\"\n\n### `-t`, `--tree`\n\n--8<-- \"common-flags/tree.md\"\n\n## Examples\n\n```sh\nchezmoi managed\nchezmoi managed --include=files\nchezmoi managed --include=files,symlinks\nchezmoi managed -i dirs\nchezmoi managed -i dirs,files\nchezmoi managed -i files ~/.config\nchezmoi managed --exclude=encrypted --path-style=source-relative\n```\n","isInternal":false,"tokens":273,"sizeBytes":915},{"name":"merge-all.md","path":"assets/chezmoi.io/docs/reference/commands/merge-all.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/merge-all.md","title":"Command: /merge-all","category":"command-prompt","format":"markdown","content":"# `merge-all`\n\nPerform a three-way merge for file whose actual state does not match its target\nstate. The merge is performed with [`chezmoi merge`][merge-command].\n\n## Common flags\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi merge-all\n```\n\n[merge-command]: /reference/commands/merge.md\n","isInternal":false,"tokens":108,"sizeBytes":389},{"name":"merge.md","path":"assets/chezmoi.io/docs/reference/commands/merge.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/merge.md","title":"Command: /merge","category":"command-prompt","format":"markdown","content":"# `merge` *target*...\n\nPerform a three-way merge between the destination state, the target state, and\nthe source state for each *target*. The merge tool is defined by the\n`merge.command` configuration variable, and defaults to `vimdiff`. If multiple\ntargets are specified the merge tool is invoked separately and sequentially for\neach target. If the target state cannot be computed (for example if source is a\ntemplate containing errors or an encrypted file that cannot be decrypted) a\ntwo-way merge is performed instead.\n\nThe order of arguments to `merge.command` is set by `merge.args`. Each argument\nis interpreted as a template with the variables `.Destination`, `.Source`, and\n`.Target` available corresponding to the path of the file in the destination\nstate, the source state, and the target state respectively. The default value\nof `merge.args` is `[\"{{ .Destination }}\", \"{{ .Source }}\", \"{{ .Target }}\"]`.\nIf `merge.args` does not contain any template arguments then `{{ .Destination\n}}`, `{{ .Source }}`, and `{{ .Target }}` will be appended automatically.\n\n## Examples\n\n```sh\nchezmoi merge ~/.bashrc\n```\n","isInternal":false,"tokens":252,"sizeBytes":1116},{"name":"podman.md","path":"assets/chezmoi.io/docs/reference/commands/podman.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/podman.md","title":"Command: /podman","category":"command-prompt","format":"markdown","content":"# `podman`\n\n`podman` is an alias for [`docker`][docker-command].\n\n[docker-command]: /reference/commands/docker.md\n","isInternal":false,"tokens":31,"sizeBytes":114},{"name":"purge.md","path":"assets/chezmoi.io/docs/reference/commands/purge.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/purge.md","title":"Command: /purge","category":"command-prompt","format":"markdown","content":"# `purge`\n\nRemove chezmoi's configuration, state, and source directory, but leave the\ntarget state intact.\n\n## Flags\n\n### `-P`, `--binary`\n\nPurge chezmoi binary.\n\n## Common flags\n\n### `--force`\n\nRemove without prompting.\n\n## Examples\n\n```sh\nchezmoi purge\nchezmoi purge --force\n```\n","isInternal":false,"tokens":77,"sizeBytes":281},{"name":"push.md","path":"assets/chezmoi.io/docs/reference/commands/push.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/push.md","title":"Command: /push","category":"command-prompt","format":"markdown","content":"# `push`\n\nPush all changes to your dotfiles repo by running `git add`, `git commit`, and\n`git push` in the source directory.\n\n## Examples\n\n```sh\nchezmoi push\n```\n","isInternal":false,"tokens":46,"sizeBytes":162},{"name":"re-add.md","path":"assets/chezmoi.io/docs/reference/commands/re-add.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/re-add.md","title":"Command: /re-add","category":"command-prompt","format":"markdown","content":"# `re-add` [*target*...]\n\nRe-add modified files in the target state, preserving any `encrypted_`\nattributes. chezmoi will not overwrite templates, and all entries that are\neither externals or not files are ignored. Directories are recursed into by\ndefault.\n\nIf no *target*s are specified then all modified files are re-added. If one or\nmore *target*s are given then only those targets are re-added.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--re-encrypt`\n\nRe-encrypt encrypted files.\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi re-add\nchezmoi re-add ~/.bashrc\nchezmoi re-add --recursive=false ~/.config/git\n```\n\n## Notes\n\n!!! hint\n\n    If you want to re-add a single file unconditionally, use `chezmoi add --force` instead.\n","isInternal":false,"tokens":243,"sizeBytes":893},{"name":"secret.md","path":"assets/chezmoi.io/docs/reference/commands/secret.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/secret.md","title":"Command: /secret","category":"command-prompt","format":"markdown","content":"# `secret`\n\n<!-- markdownlint-disable no-duplicate-heading -->\n\nVerify chezmoi's integration with the [system's keyring][keyring].\n\n## Subcommands\n\n### `secret keyring delete`\n\n#### `--service` *string*\n\nName of the service.\n\n#### `--user` *string*\n\nName of the user.\n\n### `secret keyring get`\n\n#### `--service` *string*\n\nName of the service.\n\n#### `--user` *string*\n\nName of the user.\n\n### `secret keyring set`\n\n#### `--service` *string*\n\nName of the service.\n\n#### `--user` *string*\n\nName of the user.\n\n#### `--value` *string*\n\nNew value.\n\n## Examples\n\n```sh\nchezmoi secret keyring set --service=service --user=user --value=password\nchezmoi secret keyring get --service=service --user=user\nchezmoi secret keyring delete --service=service --user=user\n```\n\n## Notes\n\n!!! warning\n\n    On FreeBSD, the `secret keyring` command is only available if chezmoi was\n    compiled with cgo enabled. The official release binaries of chezmoi are\n    **not** compiled with cgo enabled, and `secret keyring` command is not\n    available.\n\n[keyring]: /user-guide/password-managers/keychain-and-windows-credentials-manager.md\n","isInternal":false,"tokens":284,"sizeBytes":1110},{"name":"source-path.md","path":"assets/chezmoi.io/docs/reference/commands/source-path.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/source-path.md","title":"Command: /source-path","category":"command-prompt","format":"markdown","content":"# `source-path` [*target*...]\n\nPrint the path to each target's source state. If no targets are specified then\nprint the source directory.\n\n## Examples\n\n```sh\nchezmoi source-path\nchezmoi source-path ~/.bashrc\n```\n","isInternal":false,"tokens":54,"sizeBytes":212},{"name":"ssh.md","path":"assets/chezmoi.io/docs/reference/commands/ssh.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/ssh.md","title":"Command: /ssh","category":"command-prompt","format":"markdown","content":"# `ssh` *host* *init-args*...\n\nSSH to *host*, install chezmoi, run `chezmoi init --apply *init-args*`, and\nexecutes your shell.\n\n!!! Warning\n\n    `ssh` is an potentially destructive command.\n\n## Flags\n\n### `-p`, `--package-manager` *package-manager*\n\nInstall chezmoi using *package-manager*, if possible. Valid values for\n*package-manager* include `apk`, `apt-get`, `brew`, `dnf`, `nix-env`, `pacman`,\n`port`, `pkg`, `rpm`, `snap`, `xbps-install`, and `zypper`. Otherwise, fall back\nto `curl` or `wget` installation. If neither `curl` nor `wget` are installed\nthen install them with *package-manager*.\n\n### `-s`, `--shell`\n\nAfter installing chezmoi, initializing your dotfiles, execute your shell. This\nis the default.\n\n## Examples\n\n```sh\nchezmoi ssh $HOSTNAME $YOUR_GITHUB_USERNAME\nchezmoi ssh $HOSTNAME -- --one-shot $YOUR_GITHUB_USERNAME\n```\n","isInternal":false,"tokens":242,"sizeBytes":845},{"name":"state.md","path":"assets/chezmoi.io/docs/reference/commands/state.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/state.md","title":"Command: /state","category":"command-prompt","format":"markdown","content":"# `state`\n\nManipulate the persistent state.\n\n!!! hint\n\n    To get a full list of subcommands run:\n\n    ```console\n    $ chezmoi state help\n    ```\n\n## Subcommands\n\n### `data`\n\nPrint the raw data in the persistent state.\n\n### `delete`\n\nDelete a value from the persistent state.\n\n### `delete-bucket`\n\nDelete a bucket from the persistent state.\n\n### `dump`\n\nGenerate a dump of the persistent state.\n\n### `get`\n\nGet a value from the persistent state.\n\n### `get-bucket`\n\nGet a bucket from the persistent state.\n\n### `reset`\n\nReset the persistent state.\n\n### `set`\n\nSet a value from the persistent state\n\n## Examples\n\n```sh\nchezmoi state data\nchezmoi state delete --bucket=$BUCKET --key=$KEY\nchezmoi state delete-bucket --bucket=$BUCKET\nchezmoi state dump\nchezmoi state get --bucket=$BUCKET --key=$KEY\nchezmoi state get-bucket --bucket=$BUCKET\nchezmoi state set --bucket=$BUCKET --key=$KEY --value=$VALUE\nchezmoi state reset\n```\n","isInternal":false,"tokens":242,"sizeBytes":923},{"name":"status.md","path":"assets/chezmoi.io/docs/reference/commands/status.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/status.md","title":"Command: /status","category":"command-prompt","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Fstatus.md -->","isInternal":false,"tokens":383,"sizeBytes":1446},{"name":"target-path.md","path":"assets/chezmoi.io/docs/reference/commands/target-path.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/target-path.md","title":"Command: /target-path","category":"command-prompt","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Ftarget-path.md -->","isInternal":false,"tokens":64,"sizeBytes":242},{"name":"unmanage.md","path":"assets/chezmoi.io/docs/reference/commands/unmanage.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/unmanage.md","title":"Command: /unmanage","category":"command-prompt","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Funmanage.md -->","isInternal":false,"tokens":58,"sizeBytes":223},{"name":"unmanaged.md","path":"assets/chezmoi.io/docs/reference/commands/unmanaged.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/unmanaged.md","title":"Command: /unmanaged","category":"command-prompt","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Funmanaged.md -->","isInternal":false,"tokens":206,"sizeBytes":670},{"name":"update.md","path":"assets/chezmoi.io/docs/reference/commands/update.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/update.md","title":"Command: /update","category":"command-prompt","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Fupdate.md -->","isInternal":false,"tokens":289,"sizeBytes":990},{"name":"upgrade.md","path":"assets/chezmoi.io/docs/reference/commands/upgrade.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/upgrade.md","title":"Command: /upgrade","category":"command-prompt","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Fupgrade.md -->","isInternal":false,"tokens":392,"sizeBytes":1999},{"name":"verify.md","path":"assets/chezmoi.io/docs/reference/commands/verify.md","rawUrl":"https://raw.githubusercontent.com/twpayne/chezmoi/HEAD/assets/chezmoi.io/docs/reference/commands/verify.md","title":"Command: /verify","category":"command-prompt","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/twpayne/chezmoi?path=assets%2Fchezmoi.io%2Fdocs%2Freference%2Fcommands%2Fverify.md -->","isInternal":false,"tokens":192,"sizeBytes":634}],"systemPromptSnippet":"<yakaai_skills repo=\"twpayne/chezmoi\">\n<!-- File: assets/chezmoi.io/docs/user-guide/tools/diff.md (Tokens: ~885 | Category: anthropic-skill) -->\n# Diff\n\n## Use a custom diff tool\n\nBy default, chezmoi uses a built-in diff. You can use a custom tool by setting\nthe `diff.command` and `diff.args` configuration variables. The elements of\n`diff.args` are interpreted as templates with the variables `.Destination` and\n`.Target` containing filenames of the file in the destination state and the\ntarget state respectively. For example, to use [meld][meld], specify:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    command = \"meld\"\n    args = [\"--diff\", \"{{ .Destination }}\", \"{{ .Target }}\"]\n```\n<!-- /example-formats -->\n\n!!! hint\n\n    If you generate your config file from a config file template, then you'll\n    need to escape the `{{` and `}}` as `{{ \"{{\" }}` and `{{ \"}}\" }}`. That way\n    your generated config file contains the `{{` and `}}` you expect.\n\n## Use VSCode as the diff tool\n\nTo use [VSCode][vscode] as the diff tool, add the following to your config:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    command = \"code\"\n    args = [\"--wait\", \"--diff\"]\n```\n<!-- /example-formats -->\n\n## Use delta as the diff tool\n\nTo use [delta][delta] as the diff tool you must set `diff.pager` to delta, for\nexample:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    pager = \"delta\"\n```\n<!-- /example-formats -->\n\n## Don't show scripts in the diff output\n\nBy default, [`chezmoi diff`][diff-command] will show all changes, including the\ncontents of scripts that will be run. You can exclude scripts from the diff\noutput by setting the `diff.exclude` configuration variable in your\nconfiguration file, for example:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    exclude = [\"scripts\"]\n```\n<!-- /example-formats -->\n\n## Don't show externals in the diff output\n\nTo exclude diffs from externals, either pass the `--exclude=externals` flag or\nset `diff.exclude` to `[\"externals\"]` in your config file.\n\n## Customize the diff pager\n\nYou can change the diff format, and/or pipe the output into a pager of your\nchoice by setting `diff.pager` configuration variable. For example, to use\n[`diff-so-fancy`][fancy] specify:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[diff]\n    pager = \"diff-so-fancy\"\n```\n<!-- /example-formats -->\n\nThe pager can be disabled using the `--no-pager` flag or by setting `diff.pager`\nto an empty string.\n\n## Show human-friendly diffs for binary files\n\nSimilar to git, chezmoi includes a \"textconv\" feature that can transform file\ncontents before passing them to the diff program. This is primarily useful for\ngenerating human-readable diffs of binary files.\n\nFor example, to show diffs of macOS `.plist` files, add the following to your\nconfiguration file:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[[textconv]]\n    pattern = \"**/*.plist\"\n    command = \"plutil\"\n    args = [\"-convert\", \"xml1\", \"-o\", \"-\", \"-\"]\n```\n<!-- /example-formats -->\n\nThis will pipe all `.plist` files through `plutil -convert xml1 -o - -` before\nshowing differences.\n\n[meld]: https://meldmerge.org/\n[vscode]: https://code.visualstudio.com/\n[delta]: https://dandavison.github.io/delta/\n[fancy]: https://github.com/so-fancy/diff-so-fancy\n[diff-command]: /reference/commands/diff.md\n\n<!-- File: assets/chezmoi.io/docs/user-guide/tools/editor.md (Tokens: ~720 | Category: anthropic-skill) -->\n# Editor\n\n## Use your preferred editor with `chezmoi edit` and `chezmoi edit-config`\n\nBy default, chezmoi will use your preferred editor as defined by the `$VISUAL`\nor `$EDITOR` environment variables, falling back to a default editor depending\non your operating system (`vi` on UNIX-like operating systems, `notepad.exe` on\nWindows).\n\nYou can configure chezmoi to use your preferred editor by either setting the\n`$EDITOR` environment variable or setting the `edit.command` variable in your\nconfiguration file.\n\nThe editor command must only return when you have finished editing the files.\nchezmoi will emit a warning if your editor command returns too quickly.\n\nIn the specific case of using [VSCode][vscode] or [Codium][codium] as your\neditor, you must pass the `--wait` flag, for example, in your shell config:\n\n```bash\nexport EDITOR=\"code --wait\"\n```\n\nOr in chezmoi's configuration file:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[edit]\n    command = \"code\"\n    args = [\"--wait\"]\n```\n<!-- /example-formats -->\n\n!!! warning\n\n    If you use [Helix][helix], you must use Helix 25.01 or later.\n\n## Use chezmoi with VIM\n\n[`github.com/alker0/chezmoi.vim`][alker0] provides syntax highlighting for files\nmanaged by chezmoi, including for templates.\n\n[`github.com/Lilja/vim-chezmoi`][lilja] works with `chezmoi edit` to apply the\nedited dotfile on save.\n\n[`github.com/xvzc/chezmoi.nvim`][xvzc] allows you to edit your chezmoi-managed\nfiles and automatically apply.\n\nAlternatively, you can use an `autocmd` to run [`chezmoi apply`][apply-command]\nwhenever you save a dotfile, but you must disable [`chezmoi\nedit`][edit-command]'s hardlinking:\n\n<!-- example-formats -->\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[edit]\n    hardlink = false\n```\n<!-- /example-formats -->\n\n```vim title=\"~/.vimrc\"\nautocmd BufWritePost ~/.local/share/chezmoi/* ! chezmoi apply --source-path \"%\"\n```\n\n## Use chezmoi with emacs\n\n[`github.com/tuh8888/chezmoi.el`][tuh8888] provides convenience functions for\ninteracting with chezmoi from Emacs, and is available in [MELPA][melpa].\n\n[vscode]: https://code.visualstudio.com/\n[codium]: https://vscodium.com/\n[alker0]: https://github.com/alker0/chezmoi.vim\n[lilja]: https://github.com/Lilja/vim-chezmoi\n[xvzc]: https://github.com/xvzc/chezmoi.nvim\n[tuh8888]: https://github.com/tuh8888/chezmoi.el\n[melpa]: https://melpa.org/#/chezmoi\n[helix]: https://helix-editor.com/\n[apply-command]: /reference/commands/apply.md\n[edit-command]: /reference/commands/edit.md\n\n<!-- File: assets/chezmoi.io/docs/user-guide/tools/http-or-socks5-proxy.md (Tokens: ~83 | Category: anthropic-skill) -->\n# HTTP or SOCKS5 proxy\n\nchezmoi supports HTTP, HTTPS, and SOCKS5 proxies. Set the `HTTP_PROXY`,\n`HTTPS_PROXY`, and `NO_PROXY` environment variables, or their lowercase\nequivalents, for example:\n\n```sh\nHTTP_PROXY=socks5://127.0.0.1:1080 chezmoi apply --refresh-externals\n```\n\n<!-- File: assets/chezmoi.io/docs/user-guide/tools/merge.md (Tokens: ~1413 | Category: anthropic-skill) -->\n# Merge\n\n## What is the merge command\n\nWhen running [`chezmoi apply --interactive`][apply-command], chezmoi computes\nthe desired state (the target) from your source. If applying would change a file\non disk - i.e. the destination differs from the target, usually because you\nedited the live file directly - a prompt appears to either overwrite, diff,\nskip.\n\nChoosing merge is chezmoi's analog of resolving a git conflict by hand - except\nit reconciles **three** states, not two:\n\n1. **.Destination** - the file on your system.\n\n2. **.Source** - the file in your chezmoi repo (the source of truth).\n\n3. **.Target** - the desired state, computed by rendering the source (templates\n   applied, etc.).\n\n## Use a custom merge command\n\nBy default, chezmoi uses `vimdiff`. You can use a custom command by setting the\n`merge.command` and `merge.args` configuration variables. The elements of\n`merge.args` are interpreted as templates with the variables `.Destination`,\n`.Source`, and `.Target` containing filenames of the file in the destination\nstate, source state, and target state respectively. For example, to use\n[neovim's diff mode][nvim], specify:\n\n=== \"TOML\"\n\n```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n[merge]\n    command = \"nvim\"\n    args = [\n        \"-d\",\n        \"{{ .Destination }}\",\n        \"{{ .Source }}\",\n        \"{{ .Target }}\"\n    ]\n```\n\n=== \"YAML\"\n\n```yaml title=\"~/.config/chezmoi/chezmoi.yaml\"\nmerge:\n  command: nvim\n  args:\n  - -d\n  - \"{{ .Destination }}\"\n  - \"{{ .Source }}\"\n  - \"{{ .Target }}\"\n```\n\n=== \"JSON\"\n\n```json title=\"~/.config/chezmoi/chezmoi.json\"\n{\n    \"merge\": {\n        \"command\": \"nvim\",\n        \"args\": [\n            \"-d\",\n            \"{{ .Destination }}\",\n            \"{{ .Source }}\",\n            \"{{ .Target }}\"\n        ]\n    }\n}\n```\n\n!!! hint\n\n    If you generate your config file from a config file template, then you'll\n    need to escape the `{{` and `}}`. That way your generated config file\n    contains the `{{` and `}}` you expect.\n\n    === \"TOML\"\n\n        ```text title=\"~/.local/share/chezmoi/chezmoi.toml.tmpl\"\n        [merge]\n            command = \"nvim\"\n            args = [\n                \"-d\",\n                {{ printf \"%q\" \"{{ .Destination }}\" }},\n                {{ printf \"%q\" \"{{ .Source }}\" }},\n                {{ printf \"%q\" \"{{ .Target }}\" }},\n            ]\n        ```\n\n    === \"YAML\"\n\n        ```text title=\"~/.local/share/chezmoi/chezmoi.yaml.tmpl\"\n        merge:\n          command: nvim\n          args:\n          - -d\n          - {{ printf \"%q\" \"{{ .Destination }}\" }}\n          - {{ printf \"%q\" \"{{ .Source }}\" }}\n          - {{ printf \"%q\" \"{{ .Target }}\" }}\n        ```\n\n    === \"JSON\"\n\n        ```text title=\"~/.local/share/chezmoi/chezmoi.json.tmpl\"\n        {\n            \"merge\": {\n                \"command\": \"nvim\",\n                \"args\": [\n                    \"-d\",\n                    {{ printf \"%q\" \"{{ .Destination }}\" }},\n                    {{ printf \"%q\" \"{{ .Source }}\" }},\n                    {{ printf \"%q\" \"{{ .Target }}\" }}\n                ]\n            }\n        }\n        ```\n\n## Use Beyond Compare as the merge tool\n\nTo use [Beyond Compare][bcomp] as the merge tool, add the following to your config:\n\n=== \"TOML\"\n\n    ```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n    [merge]\n        command = \"bcomp\"\n        args = [\n            \"{{ .Destination }}\",\n            \"{{ .Source }}\",\n            \"{{ .Target }}\",\n            \"{{ .Source }}\"\n        ]\n    ```\n\n=== \"YAML\"\n\n    ```yaml title=\"~/.config/chezmoi/chezmoi.yaml\"\n    merge:\n      command: \"bcomp\"\n      args:\n      - \"{{ .Destination }}\"\n      - \"{{ .Source }}\"\n      - \"{{ .Target }}\"\n      - \"{{ .Source }}\"\n    ```\n\n=== \"JSON\"\n\n    ```json title=\"~/.config/chezmoi/chezmoi.json\"\n    {\n        \"merge\": {\n            \"command\": \"bcomp\",\n            \"args\": [\n                \"{{ .Destination }}\",\n                \"{{ .Source }}\",\n                \"{{ .Target }}\",\n                \"{{ .Source }}\"\n            ]\n        }\n    }\n    ```\n\n## Use VSCode as the merge tool\n\nTo use [VSCode][vscode] as the merge tool, add the following to your config:\n\n=== \"TOML\"\n\n    ```toml title=\"~/.config/chezmoi/chezmoi.toml\"\n    [merge]\n    command = \"bash\"\n    args = [\n        \"-c\",\n        \"cp {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} && code --new-window --wait --merge {{ .Destination | quote }} {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} {{ .Source | quote }}\",\n    ]\n    ```\n\n=== \"YAML\"\n\n    ```yaml title=\"~/.config/chezmoi/chezmoi.yaml\"\n    merge:\n      command: \"bash\"\n      args:\n      - \"-c\"\n      - \"cp {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} && code --new-window --wait --merge {{ .Destination | quote }} {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} {{ .Source | quote }}\"\n    ```\n\n=== \"JSON\"\n\n    ```json title=\"~/.config/chezmoi.chezmoi.json\"\n    {\n        \"merge\": {\n            \"command\": \"bash\",\n            \"args\": [\n                \"-c\",\n                \"cp {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} && code --new-window --wait --merge {{ .Destination | quote }} {{ .Target | quote }} {{ printf \\\"%s.base\\\" .Target | quote }} {{ .Source | quote }}\",\n            ]\n        }\n    }\n    ```\n\n[bcomp]: https://www.scootersoftware.com/\n[nvim]: https://neovim.io/doc/user/diff.html\n[vscode]: https://code.visualstudio.com/\n[apply-command]: /reference/commands/apply.md\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/add.md (Tokens: ~1051 | Category: command-prompt) -->\n# `add` *target*...\n\nAdd *target*s to the source state. If any target is already in the source\nstate, then its source state is replaced with its current state in the\ndestination directory.\n\n## Flags\n\n### `-a`, `--autotemplate`\n\nAutomatically generate a template by replacing strings that match variable\nvalues from the `data` section of the config file with their respective config\nnames as a template string. Longer substitutions occur before shorter ones.\nThis implies the `--template` option.\n\n!!! warning\n\n    `--autotemplate` uses a greedy algorithm which occasionally generates\n    templates with unwanted variable substitutions. Carefully review any\n    templates it generates.\n\n### `--create`\n\nAdd files that should exist, irrespective of their contents.\n\nSets the `create_` source state attribute on the added file.\n\nA file will be created with the given contents if the file does not exist.\nIf the file already exists, then its contents will not be changed.\nThis allows for managing files with an initial state but should not be changed\nby chezmoi afterwards.\n\n### `--encrypt`\n\n> Configuration: `add.encrypt`\n\nEncrypt files using the defined encryption method.\n\n### `--exact`\n\nSet the `exact` attribute on added directories.\n\n!!! warning\n\n    Directories with the `exact` attributes are statefully synced between target and source directories.\n    When running `re-add`, any files deleted from the `exact` target directory will be removed from the source directory.\n    Likewise, any files added to the `exact` target directory, will be added to the source directory\n\n### `--follow`\n\nIf the last part of a target is a symlink, add the target of the symlink\ninstead of the symlink itself.\n\n### `--new`\n\nCreate a new file if the target does not exist.\n\n### `-p`, `--prompt`\n\nInteractively prompt before adding each file.\n\n### `-q`, `--quiet`\n\nSuppress warnings about adding ignored entries.\n\n### `--secrets` `ignore`|`warning`|`error`\n\n> Configuration: `add.secrets`\n\nAction to take when a secret is found when adding a file. The default is\n`warning`.\n\n### `-T`, `--template`\n\nSet the `template` attribute on added files and symlinks.\n\n### `--template-symlinks`\n\n> Configuration: `add.templateSymlinks`\n\nWhen adding symlink to an absolute path in the source directory or destination\ndirectory, create a symlink template with `.chezmoi.sourceDir` or\n`.chezmoi.homeDir`. This is useful for creating portable absolute symlinks.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-f`, `--force`\n\nAdd *target*s, even if doing so would cause a source template to be\noverwritten.\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi add ~/.bashrc\nchezmoi add ~/.gitconfig --template\nchezmoi add ~/.ssh/id_rsa --encrypt\nchezmoi add ~/.vim --recursive\nchezmoi add ~/.oh-my-zsh --exact --recursive\n```\n\n## Notes\n\n!!! bug\n\n    `chezmoi add` will fail if the entry being added is in a directory\n    implicitly created by an [external][external]. See [issue #1574][issue-1574]\n    for details.\n\n!!! warning\n\n    `chezmoi add --exact --recursive DIR` works in predictable but surprising\n    ways and its use is not recommended for nested directories without taking\n    precautions.\n\n    If you have not previously added any files from `~/.config` to chezmoi and\n    run `chezmoi add --exact --recursive ~/.config/nvim`, chezmoi will consider\n    all files under `~/.config` to be managed, and any file *not* in\n    `~/.config/nvim` will be removed on your next `chezmoi apply`. This is\n    because `~/.config/nvim` is added as:\n\n    ```text\n    exact_dot_config/\n        exact_nvim/\n          exact_lua/\n            …\n          …\n    ```\n\n    To prevent this, add a `.keep` file *first* before adding the subdirectory\n    recursively.\n\n    ```sh\n    touch ~/.config/.keep\n    chezmoi add ~/.config/.keep\n    chezmoi add --recursive --exact ~/.config/nvim\n    ```\n\n    See [issue #4223][issue-4223] for details.\n\n[external]: /reference/special-files/chezmoiexternal-format.md\n[issue-1574]: https://github.com/twpayne/chezmoi/issues/1574\n[issue-4223]: https://github.com/twpayne/chezmoi/issues/4223\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/age-keygen.md (Tokens: ~111 | Category: command-prompt) -->\n# `age-keygen` [*identity-file*]\n\nGenerate an age identity or convert an age identity to an age recipient.\n\n## Flags\n\n### `--pq`\n\nGenerate a post-quantum key pair.\n\n### `-y`, `--convert`\n\nRead an identity file *identity-file* or the standard input and print its\nrecipient instead of generating an age identity.\n\n## Examples\n\n```sh\nchezmoi age-keygen\nchezmoi age-keygen -o identity.txt\nchezmoi age-keygen -y identity.txt\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/age.md (Tokens: ~122 | Category: command-prompt) -->\n# `age`\n\n<!-- markdownlint-disable no-duplicate-heading -->\n\nInteract with age's passphrase-based encryption.\n\n## Subcommands\n\n### `age encrypt` [*file*...]\n\nEncrypt file or standard input.\n\n#### `-p`, `--passphrase`\n\nDecrypt with a passphrase.\n\n### `age decrypt` [*file*...]\n\nDecrypt file or standard input.\n\n#### `-p`, `--passphrase`\n\nDecrypt with a passphrase.\n\n## Examples\n\n```sh\nchezmoi age encrypt --passphrase plaintext.txt > ciphertext.txt\nchezmoi age decrypt --passphrase ciphertext.txt > decrypted-ciphertext.txt\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/apply.md (Tokens: ~241 | Category: command-prompt) -->\n# `apply` [*target*...]\n\nEnsure that *target*... are in the target state, updating them if necessary. If\nno targets are specified, the state of all targets are ensured. If a target has\nbeen modified since chezmoi last wrote it then the user will be prompted if\nthey want to overwrite the file.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n### `--source-path`\n\nSpecify targets by source path, rather than target path. This is useful for\napplying changes after editing.\n\n## Examples\n\n```sh\nchezmoi apply\nchezmoi apply --dry-run --verbose\nchezmoi apply ~/.bashrc\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/archive.md (Tokens: ~313 | Category: command-prompt) -->\n# `archive` [*target*....]\n\nGenerate an archive of the target state, or only the targets specified. This\ncan be piped into `tar` to inspect the target state.\n\n## Flags\n\n### `-f`, `--format` *format*\n\nWrite the archive in *format*. If `--output` is set the format is guessed from\nthe extension, otherwise the default is `tar`.\n\n| Supported formats |\n| ----------------- |\n| `tar`             |\n| `tar.gz`          |\n| `tgz`             |\n| `zip`             |\n\n### `-z`, `--gzip`\n\nCompress the archive with gzip. This is automatically set if the format is\n`tar.gz` or `tgz` and is ignored if the format is `zip`.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi archive | tar tvf -\nchezmoi archive --output=dotfiles.tar.gz\nchezmoi archive --output=dotfiles.zip\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/cat-config.md (Tokens: ~24 | Category: command-prompt) -->\n# `cat-config`\n\nPrint the configuration file.\n\n## Examples\n\n```sh\nchezmoi cat-config\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/cat.md (Tokens: ~81 | Category: command-prompt) -->\n# `cat` *target*...\n\nWrite the target contents of *target*s to stdout. *target*s must be files,\nscripts, or symlinks. For files, the target file contents are written. For\nscripts, the script's contents are written. For symlinks, the target is\nwritten.\n\n## Examples\n\n```sh\nchezmoi cat ~/.bashrc\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/cd.md (Tokens: ~190 | Category: command-prompt) -->\n# `cd` [*path*]\n\nLaunch a shell in the working tree (typically the source directory). chezmoi\nwill launch the command set by the `cd.command` configuration variable with any\nextra arguments specified by `cd.args`. If this is not set, chezmoi will\nattempt to detect your shell and finally fall back to an OS-specific default.\n\nIf the optional argument *path* is present, the shell will be launched in the\nsource directory corresponding to *path*.\n\nThe shell will have various `CHEZMOI*` environment variables set, as for\nscripts.\n\n!!! hint\n\n    This does not change the current directory of the current shell. To do\n    that, instead use:\n\n    ```console\n    $ cd $(chezmoi source-path)\n    ```\n\n## Examples\n\n```sh\nchezmoi cd\nchezmoi cd ~\nchezmoi cd ~/.config\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/chattr.md (Tokens: ~499 | Category: command-prompt) -->\n# `chattr` *modifier* *target*...\n\nChange the attributes and/or type of *target*s. *modifier* specifies what to\nmodify.\n\nSee [attributes][attributes] for a description of each attribute.\n\nAdd attributes by specifying them or their abbreviations directly, optionally\nprefixed with a plus sign (`+`). Remove attributes by prefixing them or their\nattributes with the string `no` or a minus sign (`-`). The available attribute\nmodifiers and their abbreviations are:\n\n| Attribute modifier | Abbreviation |\n| ------------------ | ------------ |\n| `after`            | `a`          |\n| `before`           | `b`          |\n| `empty`            | `e`          |\n| `encrypted`        | *none*       |\n| `exact`            | *none*       |\n| `executable`       | `x`          |\n| `external`         | *none*       |\n| `once`             | `o`          |\n| `onchange`         | *none*       |\n| `private`          | `p`          |\n| `readonly`         | `r`          |\n| `remove`           | *none*       |\n| `template`         | `t`          |\n\nThe type of a target can be changed using a type modifier:\n\n| Type modifier |\n| ------------- |\n| `create`      |\n| `modify`      |\n| `script`      |\n| `symlink`     |\n\nThe negative form of type modifiers, e.g. `nocreate`, changes the target to be\na regular file if it is of that type, otherwise the type is left unchanged.\n\nMultiple modifications may be specified by separating them with a comma (`,`).\nIf you use the `-`*modifier* form then you must put *modifier* after a `--` to\nprevent chezmoi from interpreting `-`*modifier* as an option.\n\n## Common flags\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-false\"\n\n## Examples\n\n```sh\nchezmoi chattr template ~/.bashrc\nchezmoi chattr noempty ~/.profile\nchezmoi chattr private,template ~/.netrc\nchezmoi chattr -- -x ~/.zshrc\nchezmoi chattr +create,+private ~/.kube/config\n```\n\n[attributes]: /reference/source-state-attributes.md\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/completion.md (Tokens: ~67 | Category: command-prompt) -->\n# `completion` *shell*\n\nGenerate shell completion code for the specified shell (`bash`, `fish`,\n`powershell`, or `zsh`).\n\n## Examples\n\n```sh\nchezmoi completion bash\nchezmoi completion fish --output=~/.config/fish/completions/chezmoi.fish\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/data.md (Tokens: ~64 | Category: command-prompt) -->\n# `data`\n\nWrite the computed template data to stdout.\n\n## Common flags\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n## Examples\n\n```sh\nchezmoi data\nchezmoi data --format=yaml\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/decrypt.md (Tokens: ~54 | Category: command-prompt) -->\n# `decrypt` [*file*...]\n\nDecrypt *file*s using chezmoi's configured encryption. If no files are given,\ndecrypt the standard input. The decrypted result is written to the standard\noutput or a file if the `--output` flag is set.\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/destroy.md (Tokens: ~191 | Category: command-prompt) -->\n# `destroy` *target*...\n\nRemove *target* from the source state, the destination directory, and the state.\n\n!!! danger\n\n    The `destroy` command permanently removes files both from your home\n    directory and chezmoi's source directory.\n\n    Only run `chezmoi destroy` if you have a separate backup of your home\n    directory and your source directory.\n\n    If you want chezmoi to stop managing the file use [`forget`][forget-command]\n    instead.\n\n    If you want to remove all traces of chezmoi from your system use\n    [`purge`][purge-command] instead.\n\n## Common flags\n\n### `--force`\n\nDestroy without prompting.\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-false\"\n\n[forget-command]: /reference/commands/forget.md\n[purge-command]: /reference/commands/purge.md\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/diff.md (Tokens: ~397 | Category: command-prompt) -->\n# `diff` [*target*...]\n\nPrint the difference between the target state and the destination state for\n*target*s. If no targets are specified, print the differences for all targets.\n\nIf a `diff.pager` command is set in the configuration file then the output will\nbe piped into it.\n\nIf `diff.command` is set then it will be invoked to show individual file\ndifferences with `diff.args` passed as arguments. Each element of `diff.args`\nis interpreted as a template with the variables `.Destination` and `.Target`\navailable corresponding to the path of the file in the source and target state\nrespectively. The default value of `diff.args` is\n`[\"{{ .Destination }}\", \"{{ .Target }}\"]`. If `diff.args` does not contain any\ntemplate arguments then `{{ .Destination }}` and `{{ .Target }}` will be\nappended automatically.\n\n## Flags\n\n### `--pager` *pager*\n\n> Configuration: `diff.pager`\n\nPager to use for output.\n\n### `--reverse`\n\n> Configuration: `diff.reverse`\n\nReverse the direction of the diff, i.e. show the changes to the target required\nto match the destination.\n\n### `--script-contents`\n\nShow script contents, defaults to `true`.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-false\"\n\n## Examples\n\n```sh\nchezmoi diff\nchezmoi diff ~/.bashrc\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/docker.md (Tokens: ~574 | Category: command-prompt) -->\n# `docker`\n\n<!-- markdownlint-disable no-duplicate-heading -->\n\n!!! Hint\n\n    To use [podman](https://podman.io/) instead of Docker, set the\n    `docker.command` configuration variable to `podman`. You can also\n    use the [`chezmoi podman` command][podman-command] instead of\n    `chezmoi docker`.\n\nInstall chezmoi, run [`chezmoi init --apply`][init-command], and optionally\nexecute your shell in [Docker](https://docker.com/) containers.\n\n## Subcommands\n\n### `exec` *container-id* *init-args*...\n\nInstall chezmoi, run [`chezmoi init --apply *init-args*`][init-command], and\nexecute your shell in the existing Docker container *container-id*.\n\n#### Flags\n\n##### `-i`, `--interactive`\n\nKeep stdin open even if not attached.\n\n##### `-p`, `--package-manager` *package-manager*\n\nInstall chezmoi using *package-manager*, if possible. Valid values for\n*package-manager* include `apk`, `apt-get`, `brew`, `dnf`, `nix-env`, `pacman`,\n`port`, `pkg`, `rpm`, `snap`, `xbps-install`, and `zypper`. Otherwise, fall back\nto `curl` or `wget` installation. If neither `curl` nor `wget` are installed\nthen install them with *package-manager*.\n\n##### `-s`, `--shell`\n\nAfter installing chezmoi, initializing your dotfiles, execute your shell. This\nis the default.\n\n### `run` *image-id* *init-args*...\n\nCreate a new Docker container using *image-id*, and in it, install chezmoi, run\n[`chezmoi init --apply *init-args*`][init-command], and execute your shell.\n\n#### Flags\n\n##### `-p`, `--package-manager` *package-manager*\n\nInstall chezmoi using *package-manager*, if possible. Valid values for\n*package-manager* include `apk`, `apt-get`, `brew`, `dnf`, `nix-env`, `pacman`,\n`port`, `pkg`, `rpm`, `snap`, `xbps-install`, and `zypper`. Otherwise, fall back\nto `curl` or `wget` installation. If neither `curl` nor `wget` are installed\nthen install them with *package-manager*.\n\n## Examples\n\n```sh\nchezmoi docker exec $CONTAINER_ID $YOUR_GITHUB_USERNAME\nchezmoi docker run -p apk alpine:latest $YOUR_GITHUB_USERNAME\n```\n\n[init-command]: /reference/commands/init.md\n[podman-command]: /reference/commands/podman.md\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/doctor.md (Tokens: ~38 | Category: command-prompt) -->\n# `doctor`\n\nCheck for potential problems.\n\n## Flags\n\n### `--no-network`\n\nDo not use any network connections.\n\n## Examples\n\n```sh\nchezmoi doctor\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/dump-config.md (Tokens: ~53 | Category: command-prompt) -->\n# `dump-config`\n\nDump the configuration.\n\n## Common flags\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n## Examples\n\n```sh\nchezmoi dump-config\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/dump.md (Tokens: ~195 | Category: command-prompt) -->\n# `dump` [*target*...]\n\nDump the target state of *target*s. If no targets are specified, then the\nentire target state.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-f`, `--format` `json`|`yaml`\n\n--8<-- \"common-flags/format.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n### `-P`, `--parent-dirs`\n\n--8<-- \"common-flags/parent-dirs.md\"\n\n### `-r`, `--recursive`\n\n--8<-- \"common-flags/recursive.md:default-true\"\n\n## Examples\n\n```sh\nchezmoi dump ~/.bashrc\nchezmoi dump --format=yaml\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/edit-config-template.md (Tokens: ~49 | Category: command-prompt) -->\n# `edit-config-template`\n\nEdit the configuration file template. If no configuration file template exists,\nthen a new one is created with the contents of the current config file.\n\n## Examples\n\n```sh\nchezmoi edit-config-template\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/edit-config.md (Tokens: ~24 | Category: command-prompt) -->\n# `edit-config`\n\nEdit the configuration file.\n\n## Examples\n\n```sh\nchezmoi edit-config\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/edit-encrypted.md (Tokens: ~73 | Category: command-prompt) -->\n# `edit-encrypted` *filename*...\n\nEdit the encrypted files *filename*s.\n\nEach *filename* is decrypted to a temporary directory, the editor is invoked on\nthe decrypted files. After the editor returns, each the decrypted file is\nre-encrypted.\n\n## Examples\n\n  ```sh\n  chezmoi edit-encrypted encrypted_file\n  ```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/edit.md (Tokens: ~659 | Category: command-prompt) -->\n# `edit` [*target*...]\n\nEdit the source state of *target*s, which must be files or symlinks. If no\ntargets are given then the working tree of the source directory is opened.\n\nEncrypted files are decrypted to a private temporary directory and the editor\nis invoked with the decrypted file. When the editor exits the edited decrypted\nfile is re-encrypted and replaces the original file in the source state.\n\nIf the operating system supports hard links, then the edit command invokes the\neditor with filenames which match the target filename, unless the\n`edit.hardlink` configuration variable is set to `false` or the\n`--hardlink=false` command line flag is set. Templates preserve their `.tmpl`\nextension so editors can highlight them as templates.\n\n!!! hint\n\n    Depending on your editor, you can set the format of a file in the file itself\n    using a [modeline][modelines]. This can be useful if you want to syntax\n    highlight a template as a different format.\n\n## Flags\n\n### `-a`, `--apply`\n\n> Configuration: `edit.apply`\n\nApply the target immediately after editing. This is ignored if there are no\ntargets, and does not apply scripts.\n\n### `--hardlink` *bool*\n\n> Configuration: `edit.hardlink`\n\nInvoke the editor with a hard link to the source file with a name matching the\ntarget filename. This can help the editor determine the type of the file\ncorrectly. This is the default.\n\n!!! hint\n\n    Creating hardlinks is not possible between different filesystems. Hence,\n    if your [`tempDir`][tempdir] resides on a different filesystem (e.g. a\n    [tmpfs][tmpfs], which is sometimes used for `/tmp`), this will not work.\n\n### `--watch`\n\n> Configuration: `edit.watch`\n\nAutomatically apply changes when files are saved, with the following limitations:\n\n* Only available when `chezmoi edit` is invoked with arguments (i.e.\n  argument-free `chezmoi edit` is not supported).\n* All edited files are applied when any file is saved.\n* Only the edited files are watched, not any dependent files (e.g.\n  `.chezmoitemplates` and `include`d files in templates are not watched).\n* Only works on operating systems supported by [fsnotify][fsnotify].\n* Only works if `edit.hardlink` is enabled and works.\n\n## Common flags\n\n### `-x`, `--exclude` *types*\n\n--8<-- \"common-flags/exclude.md\"\n\n### `-i`, `--include` *types*\n\n--8<-- \"common-flags/include.md\"\n\n### `--init`\n\n--8<-- \"common-flags/init.md\"\n\n## Examples\n\n  ```sh\n  chezmoi edit ~/.bashrc\n  chezmoi edit ~/.bashrc --apply\n  chezmoi edit\n  ```\n\n[fsnotify]: https://github.com/fsnotify/fsnotify\n[modelines]: https://vimhelp.org/options.txt.html#auto-setting\n[tempdir]: /reference/configuration-file/variables.md#tempdir\n[tmpfs]: https://en.wikipedia.org/wiki/Tmpfs\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/encrypt.md (Tokens: ~54 | Category: command-prompt) -->\n# `encrypt` [*file*...]\n\nEncrypt *file*s using chezmoi's configured encryption. If no files are given,\nencrypt the standard input. The encrypted result is written to the standard\noutput or a file if the `--output` flag is set.\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/execute-template.md (Tokens: ~704 | Category: command-prompt) -->\n# `execute-template` [*template*...]\n\nExecute *template*s. This is useful for [testing templates][testing] or for\ncalling chezmoi from other scripts. *templates* are interpreted as literal\ntemplates, with no whitespace added to the output between arguments. If no\ntemplates are specified, the template is read from stdin.\n\n## Flags\n\n### `-f`, `--file`\n\nTreat the arguments as filenames, not literal templates.\n\n### `-i`, `--init`\n\nInclude simulated functions only available during `chezmoi init`.\n\n### `--left-delimiter` *delimiter*\n\nSet the left template delimiter.\n\n### `--promptBool` *pairs*\n\nSimulate the `promptBool` template function with a function that returns values\nfrom *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value* pairs. If\n`promptBool` is called with a *prompt* that does not match any of *pairs*, then\nit returns false.\n\n### `--promptChoice` *pairs*\n\nSimulate the `promptChoice` template function with a function that returns\nvalues from *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value*\npairs. If `promptChoice` is called with a *prompt* that does not match any of\n*pairs*, then it returns *prompt* unchanged.\n\n### `--promptInt` *pairs*\n\nSimulate the `promptInt` template function with a function that returns values\nfrom *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value* pairs. If\n`promptInt` is called with a *prompt* that does not match any of *pairs*, then\nit returns zero.\n\n### `--promptMultichoice` *pairs*\n\nSimulate the `promptMultichoice` template function with a function that returns\nvalues from *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value*\npairs. If `promptMultichoice` is called with a *prompt* that does not match any\nof *pairs*, then it returns *prompt* as an array.\n\n### `-p`, `--promptString` *pairs*\n\nSimulate the `promptString` template function with a function that returns\nvalues from *pairs*. *pairs* is a comma-separated list of *prompt*`=`*value*\npairs. If `promptString` is called with a *prompt* that does not match any of\n*pairs*, then it returns *prompt* unchanged.\n\n### `--right-delimiter` *delimiter*\n\nSet the right template delimiter.\n\n### `--stdinisatty` *bool*\n\nSimulate the `stdinIsATTY` function by returning *bool*.\n\n### `--with-stdin`\n\nIf run with arguments, then set `.chezmoi.stdin` to the contents of the standard\ninput.\n\n## Examples\n\n```sh\nchezmoi execute-template '{{ .chezmoi.sourceDir }}'\nchezmoi execute-template '{{ .chezmoi.os }}' / '{{ .chezmoi.arch }}'\necho '{{ .chezmoi | toJson }}' | chezmoi execute-template\nchezmoi execute-template --init --promptString email=me@home.org < ~/.local/share/chezmoi/.chezmoi.toml.tmpl\n```\n\n[testing]: /user-guide/templating.md#testing-templates\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/forget.md (Tokens: ~58 | Category: command-prompt) -->\n# `forget` *target*...\n\nRemove *target*s from the source state, i.e. stop managing them. *target*s must\nhave entries in the source state. They cannot be externals.\n\n## Examples\n\n```sh\nchezmoi forget ~/.bashrc\n```\n\n<!-- File: assets/chezmoi.io/docs/reference/commands/generate.md (Tokens: ~161 | Category: command-prompt) -->\n# `generate` *output*\n\nGenerates *output* for use with chezmoi. The currently supported *output*s are:\n\n| Output                  | Description                                                                   |\n| ----------------------- | ----------------------------------------------------------------------------- |\n| `git-commit-message`    | A git commit message, describing the changes to the source directory.         |\n| `install.sh`            | An install script, suitable for use with GitHub Codespaces                    |\n| `install-init-shell.sh` | A script which installs chezmoi, runs `chezmoi init`, and executes your shell |\n\n## Examples\n\n```sh\nchezmoi generate install.sh > install.sh\nchezmoi git -- commit -m \"$(chezmoi generate git-commit-message)\"\nchezmoi generate install-init-shell.sh $YOUR_GITHUB_USERNAME\n```\n\n<!-- ... +27 more modular skills available via /api/skills/twpayne/chezmoi?path={path} -->\n</yakaai_skills>"}