# All of the development-related shtick for this project is over here.
{ inputs, ... }: {
  flake.lib = import ../../lib { lib = inputs.nixpkgs.lib; };

  perSystem = { config, lib, pkgs, ... }: {
    apps = {
      run-workflow-with-vm =
        let
          inputsArgs = lib.mapAttrsToList
            (name: source:
              let
                name' = if (name == "self") then "config" else name;
              in
              "'${name'}=${source}'")
            inputs;
          script = pkgs.callPackage ../../apps/run-workflow-with-vm {
            inputs = inputsArgs;
          };
        in
        {
          type = "app";
          program = "${script}/bin/run-workflow-with-vm";
        };
    };

    # No amount of formatters will make this codebase nicer but it sure does
    # feel like it does.
    formatter = pkgs.treefmt;

    # My several development shells for usual type of projects. This is much
    # more preferable than installing all of the packages at the system
    # configuration (or even home environment).
    devShells = import ../../shells { inherit pkgs; } // {
      default = import ../../shell.nix { inherit pkgs; };
      docs = import ../../docs/shell.nix { inherit pkgs; };
    };
  };
}