Entree

What is it?

Entree is something I brewed up in my spare time over the course of 2 evenings.

It utilises the entr watcher which if you haven’t heard of it, is a very simple and lightweight way to watch for changes and do something on change.

Entree was partially inspired by funzzy. I saw that they were versioning their watchers and realised that’s something I wanted too, but I wanted it with entr.

While I do have a slight love for Rust (what funzzy is written in), I didn’t want to use yet another reinvention of the wheel. entr has been around for a while and is battle-tested. Besides that, my attempts with funzzy were not so funzzy.

How does it work?

It has a file named an .entreerc which follows a very strict format of

[watcher-name]
find . | entr stuff

i.e.

The watcher name on one line, and the command on the next line.

My .entreerc looks like this, it’s very small because I don’t actually use many watchers…heh.

[mort-test-integration]
rg '' -l | entr npm run build && mort -f test/fixtures/no-usages.css

[detect-dead-css]
ls ~/programs/mort/test/fixtures/*.css | entr mort -vvf /_

The code for entree is written in bash which allows some pretty beautiful things to happen. I get some nice tab-completion This was actually my first time making anything with tab-completion and it was much easier than I thought, I managed to get command completion and sub-command completion in, a very easy installation process and of course, the powers of the shell!

One of the nicer things about using the shell for this is I automatically get arguments injected into the command, meaning that all of my watchers are now able to take command line arguments.

e.g.

[watcher-name]
find . | entr $2

Running this with:

entree watch watcher-name ls

Will execute ls on every change of the current directory, pretty neat and very modular.

Why would I ever want this?

If you constantly spin up the same watchers, and want to share them across machines, then you probably want a way of remembering your watchers, that’s what this is.