Awesome
Feedback loop
A general purpose tool to set up good feedback loops and share them with your team.
Features
Run feedback loops
Use the feedback
command to set up a feedback loop for your work.
For example, if you are working on a nix build, you might use this feedback loop:
feedback -- nix-build
Usually feedback
will correctly figure out which files to watch and which
files not to watch, but you can also configure this more precisely.
Declarative feedback loops
You can declare feedback loops in the feedback.yaml
configuration file to share them with your team.
For example, this gives you a flake-based feedback loop:
loops:
check: nix flake check -L
Then you can just run this command, and not have to remember the full incantation:
feedback check
To see the full reference of options of the configuration file, run feedback --help
.
CI Integration
When sharing feedback loops with team members, it is important that no one breaks another's workflow.
You can use feedback-test
to test out the feedback loops in a one-shot manner, so you can check that they still work on CI.
See feedback-test --help
for more details.
Installation
Try it out
nix run github:NorfairKing/feedback
Install globally
Add this to your system flake:
{
inputs = {
feedback.url = "github:NorfairKing/feedback";
};
outputs = { nixpkgs, feedback, ... }:
let system = "x86_64-linux";
in {
nixosConfigurations.example = nixpkgs.lib.nixosSystem {
inherit system;
modules = [
{ environment.systemPackages = [ feedback.packages.${system}.default ]; }
];
};
};
}
Comparison with other tools
feedback | steeloverseer | watchexec | entr | |
---|---|---|---|---|
Indication of command starting | ✔️ | ✔️ | C | C |
Indication of time | ✔️ | C | C | C |
Clear screen between feedback | ✔️ | C | C | C |
Gitignore-aware | ✔️ | ✖️ | ✔️ | ✖ |
Named feedback loops | ✔️ | ✖️ | ✖ | ✖ |
Configurable feedback loops | ✔️ | ✔️ | ✖ | ✖ |
Cancelling previous runs that aren't done yet | ✔️ | ✔️ | ✔️ | ✖ |
Long-form flags for every option | ✔️ | ✔️ | ✔️ | ✖ |
CI integration | ✔️ | C | C | C |
Indication of how long the loop took | ✔️ | C | C | C |
Shell integration (Commands with pipes "just work") | ✔️ | ✔️ | ✔️ | C |
Declare Env vars for configured loops | ✔️ | C | C | C |
Declare working directory for configured loops | ✔️ | C | C | C |
Arbitrary "files to watch" filters | ✔️ | ✔️ | ✔️ | C |
Stdin-based "files to watch' filters | ✔️ | C | C | ✔️ |
- ✔️: Supported
- C: Possible but you have to write some code yourself
- 🚧: Under development
- ✖️: Not supported
- ?: I don't know.
Hacking
-
Enter a dev shell
$ nix develop
-
Start a feedback loop
feedback install
-
Make your changes
-
Make sure CI will pass
nix flake check
-
Make a PR to
development
.