Use chezmoi with Watchman
chezmoi can be used with Watchman to automatically run chezmoi
apply whenever your source state changes, but there are some limitations
because Watchman runs actions in the background without a terminal.
Firstly, Watchman spawns a server which runs actions when file systems change.
This server reads its environment variables when it is started, typically on the
first invocation of the watchman command. If you use a password manager that
uses environment variables to persist login sessions, then you must login to
your password manager before you run the first watchman command, and your
session might eventually time out.
Secondly, Watchman runs processes without a terminal, and so cannot run
interactive processes. For chezmoi apply, you can use the --force flag to
suppress prompts to overwrite files that have been modified since chezmoi last
wrote them. However, if any other part of chezmoi apply is interactive, for
example if your password manager prompts for a password, then it will not work
with Watchman.
-
Tell watchman to watch your source directory:
CHEZMOI_SOURCE_PATH="$(chezmoi source-path)" watchman watch "${CHEZMOI_SOURCE_PATH}" -
Tell watchman to run
chezmoi apply --forcewhenever your source directory changes:watchman -j <<EOT ["trigger", "${CHEZMOI_SOURCE_PATH}", { "name": "chezmoi-apply", "command": ["chezmoi", "apply", "--force"] }] EOT
You can now make changes to your source directory and Watchman will run chezmoi
apply --force on each change.
To shutdown the Watchman server, run:
```sh
watchman shutdown-server
```