run arbitrary commands easily when files change