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 filesystems 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 --force
whenever 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:
```console
$ watchman shutdown-server
```