{ pkgs, }:
pkgs.writeShellApplication {
  name = "runbg";
  runtimeInputs = with pkgs; [
    coreutils # Provides `basename`, `which`, etc.
    bash # Provides the Bash shell
    util-linux # Provides `tty`
  ];
  text = ''
    #!/usr/bin/env bash

    [ $# -eq 0 ] && {  # $# is number of args
        echo "$(basename "$0"): missing command" >&2
        exit 1
    }
    prog="$(which "$1")"  # see below
    [ -z "$prog" ] && {
        echo "$(basename "$0"): unknown command: $1" >&2
        exit 1
    }
    shift  # remove $1, now $prog, from args
    tty -s && exec </dev/null      # if stdin is a terminal, redirect from null
    tty -s <&1 && exec >/dev/null  # if stdout is a terminal, redirect to null
    tty -s <&2 && exec 2>&1        # stderr to stdout (which might not be null)
    "$prog" "$@" &  # $@ is all args
  '';
}
