docs: def list_str(list_, **listkw):
      r"""
      Makes a pretty list string
  
      Args:
          list_ (list): input list
          **listkw: nl, newlines, packed, truncate, nobr, nobraces, itemsep,
                    trailing_sep, truncatekw, strvals, recursive,
                    indent_, precision, use_numpy, with_dtype, force_dtype,
                    stritems, strkeys, align, explicit, sorted_, key_order,
                    key_order_metric, maxlen
  
      Returns:
          str: retstr
  
      CommandLine:
          python -m utool.util_str --test-list_str
          python -m utool.util_str --exec-list_str --truncate=True
          python -m utool.util_str --exec-list_str --truncate=0
  
  
      Example:
          >>> # ENABLE_DOCTEST
          >>> from utool.util_str import *  # NOQA
          >>> import utool as ut
          >>> list_ = [[(('--verbose-qt', '--verbqt'), 1, False, ''),
          >>>           (('--verbose-qt', '--verbqt'), 1, False, ''),
          >>>           (('--verbose-qt', '--verbqt'), 1, False, ''),
          >>>           (('--verbose-qt', '--verbqt'), 1, False, '')],
          >>>          [(['--nodyn'], 1, False, ''), (['--nodyn'], 1, False, '')]]
          >>> listkw = {'nl':  2}
          >>> result = list_str(list_, **listkw)
          >>> print(result)
          [
              [
                  (('--verbose-qt', '--verbqt'), 1, False, ''),
                  (('--verbose-qt', '--verbqt'), 1, False, ''),
                  (('--verbose-qt', '--verbqt'), 1, False, ''),
                  (('--verbose-qt', '--verbqt'), 1, False, ''),
              ],
              [
                  (['--nodyn'], 1, False, ''),
                  (['--nodyn'], 1, False, ''),
              ],
          ]
      """
      import utool as ut
  
      newlines = listkw.pop('nl', listkw.pop('newlines', 1))
      packed = listkw.pop('packed', False)
      truncate = listkw.pop('truncate', False)
      listkw['nl'] = _rectify_countdown_or_bool(newlines)
      listkw['truncate'] = _rectify_countdown_or_bool(truncate)
      listkw['packed'] = _rectify_countdown_or_bool(packed)
  
      nobraces = listkw.pop('nobr', listkw.pop('nobraces', False))
  
      itemsep = listkw.get('itemsep', ' ')
      # Doesn't actually put in trailing comma if on same line
      trailing_sep = listkw.get('trailing_sep', True)
      with_comma = True
  
      itemstr_list = get_itemstr_list(list_, **listkw)
      is_tuple = isinstance(list_, tuple)
      is_set = isinstance(list_, (set, frozenset, ut.oset))
      is_onetup = isinstance(list_, (tuple)) and len(list_) <= 1
      if nobraces:
          lbr, rbr = '', ''
      elif is_tuple:
          lbr, rbr  = '(', ')'
      elif is_set:
          lbr, rbr  = '{', '}'
      else:
          lbr, rbr  = '[', ']'
  
      if len(itemstr_list) == 0:
          newlines = False
  
      if newlines is not False and (newlines is True or newlines > 0):
          sep = ',\n' if with_comma else '\n'
          if nobraces:
              body_str = sep.join(itemstr_list)
              if trailing_sep:
                  body_str += ','
              retstr = body_str
          else:
              if packed:
                  # DEPRICATE?
                  joinstr = sep + itemsep * len(lbr)
                  body_str = joinstr.join([itemstr for itemstr in itemstr_list])
                  if trailing_sep:
                      body_str += ','
                  braced_body_str = (lbr + '' + body_str + '' + rbr)
              else:
                  body_str = sep.join([
                      ut.indent(itemstr) for itemstr in itemstr_list])
                  if trailing_sep:
                      body_str += ','
                  braced_body_str = (lbr + '\n' + body_str + '\n' + rbr)
              retstr = braced_body_str
      else:
          sep = ',' + itemsep if with_comma else itemsep
          body_str = sep.join(itemstr_list)
          if is_onetup:
              body_str += ','
          retstr  = (lbr + body_str +  rbr)
  
      # TODO: rectify with dict_truncate
      do_truncate = truncate is not False and (truncate is True or truncate == 0)
      if do_truncate:
          truncatekw = listkw.get('truncatekw', {})
          retstr = truncate_str(retstr, **truncatekw)
      return retstr