Home

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

feedbacksteeloverseerwatchexecentr
Indication of command starting✔️✔️CC
Indication of time✔️CCC
Clear screen between feedback✔️CCC
Gitignore-aware✔️✖️✔️
Named feedback loops✔️✖️
Configurable feedback loops✔️✔️
Cancelling previous runs that aren't done yet✔️✔️✔️
Long-form flags for every option✔️✔️✔️
CI integration✔️CCC
Indication of how long the loop took✔️CCC
Shell integration (Commands with pipes "just work")✔️✔️✔️C
Declare Env vars for configured loops✔️CCC
Declare working directory for configured loops✔️CCC
Arbitrary "files to watch" filters✔️✔️✔️C
Stdin-based "files to watch' filters✔️CC✔️

Hacking

  1. Enter a dev shell

    $ nix develop
    
  2. Start a feedback loop

    feedback install
    
  3. Make your changes

  4. Make sure CI will pass

    nix flake check
    
  5. Make a PR to development.