with import ./config.nix;
rec {
  foo-bar-baz = mkDerivation {
    name = "foo-bar-baz";
    builder = "/bin/sh";
    outputs = [ "out" ];
    args = [
      (
        builtins.toFile "builder.sh" ''
          #! /bin/sh

          touch $out
        ''
      )
    ];
  };

  runCommandHook.example = mkDerivation {
    name = "my-build-product";
    builder = "/bin/sh";
    outputs = [ "out" ];
    args = [
      (
        builtins.toFile "builder.sh" ''
          #! /bin/sh

          touch $out
          chmod +x $out
          # ... dunno ...
        ''
      )
    ];
  };

  runCommandHook.symlink = mkDerivation {
    name = "symlink-out";
    builder = "/bin/sh";
    outputs = [ "out" ];
    args = [
      (
        builtins.toFile "builder.sh" ''
          #! /bin/sh

          ln -s $1 $out
        ''
      )

      runCommandHook.example
    ];
  };

  runCommandHook.no-out = mkDerivation {
    name = "no-out";
    builder = "/bin/sh";
    outputs = [ "bin" ];
    args = [
      (
        builtins.toFile "builder.sh" ''
          #! /bin/sh
          mkdir $bin
        ''
      )
    ];
  };

  runCommandHook.out-is-directory = mkDerivation {
    name = "out-is-directory";
    builder = "/bin/sh";
    outputs = [ "out" ];
    args = [
      (
        builtins.toFile "builder.sh" ''
          #! /bin/sh

          mkdir $out
        ''
      )
    ];
  };

  runCommandHook.out-is-not-executable-file = mkDerivation {
    name = "out-is-directory";
    builder = "/bin/sh";
    outputs = [ "out" ];
    args = [
      (
        builtins.toFile "builder.sh" ''
          #! /bin/sh

          touch $out
        ''
      )
    ];
  };

  runCommandHook.symlink-non-executable = mkDerivation {
    name = "symlink-out";
    builder = "/bin/sh";
    outputs = [ "out" ];
    args = [
      (
        builtins.toFile "builder.sh" ''
          #! /bin/sh

          ln -s $1 $out
        ''
      )

      runCommandHook.out-is-not-executable-file
    ];
  };

  runCommandHook.symlink-directory = mkDerivation {
    name = "symlink-directory";
    builder = "/bin/sh";
    outputs = [ "out" ];
    args = [
      (
        builtins.toFile "builder.sh" ''
          #! /bin/sh

          ln -s $1 $out
        ''
      )

      runCommandHook.out-is-directory
    ];
  };

  runCommandHook.failed = mkDerivation {
    name = "failed";
    builder = "/bin/sh";
    outputs = [ "out" ];
    args = [
      (
        builtins.toFile "builder.sh" ''
          #! /bin/sh

          touch $out
          chmod +x $out

          exit 1
        ''
      )
    ];
  };

}