{
  pkgs,
  lib,
}: rec {
  # taken from https://github.com/NixOS/nixpkgs/blob/3650808d85dccbfa3be3d785dfd3ce33a757bd2c/pkgs/build-support/trivial-builders/default.nix#L335
  writeNuShellApplication = {
    name,
    text,
    runtimeInputs ? [],
    meta ? {},
    checkPhase ? null,
  }:
    writeTextFile {
      inherit name meta;
      executable = true;
      destination = "/bin/${name}";
      allowSubstitutes = true;
      preferLocalBuild = false;
      text =
        ''
          #!${pkgs.nushell}
        ''
        + lib.optionalString (runtimeInputs != []) ''

          $env.PATH = ($env.PATH | split row (char esep) | prepend '${lib.makeBinPath runtimeInputs}');
        ''
        + ''

          ${text}
        '';

      checkPhase =
        # GHC (=> shellcheck) isn't supported on some platforms (such as risc-v)
        # but we still want to use writeShellApplication on those platforms
        if checkPhase == null
        then ''
          runHook preCheck

          nu -c "nu-check -d $target"

          runHook postCheck
        ''
        else checkPhase;
    };
  packageNushellApplication = {
    name,
    path,
    runtimeInputs ? [],
    meta ? {},
    checkPhase ? null,
  }:
    writeNuShellApplication {
      inherit name runtimeInputs meta checkPhase;
      text = builtins.readFile path;
    };
}
