code: func (f *Folder) format(prefix string, last bool, maxDepth, curDepth int) string {
  	if maxDepth > 0 && curDepth > maxDepth {
  		return ""
  	}
  
  	out := &bytes.Buffer{}
  	// only the root node has no prefix
  	if !f.Root {
  		// all other nodes inherit their ancestors prefix
  		out = bytes.NewBufferString(prefix)
  		// adding either an L or a T, depending if this is the last node
  		// or not
  		if last {
  			_, _ = out.WriteString(symLeaf)
  		} else {
  			_, _ = out.WriteString(symBranch)
  		}
  		// the next levels prefix needs to be extended depending if
  		// this is the last node in a group or not
  		if last {
  			prefix += symEmpty
  		} else {
  			prefix += symVert
  		}
  	}
  
  	// any mount will be colored and include the on-disk path
  	if f.IsMount() {
  		_, _ = out.WriteString(colMount(f.Name + " (" + f.Path + ")"))
  	} else {
  		_, _ = out.WriteString(colDir(f.Name))
  	}
  	// mark templates
  	if f.HasTpl {
  		_, _ = out.WriteString(" " + colTpl("(template)"))
  	}
  	// finish this folders output
  	_, _ = out.WriteString("\n")
  	// let our children format themselves
  	for i, key := range sortedFolders(f.Folders) {
  		last := i == len(f.Folders)-1 && len(f.Files) < 1
  		_, _ = out.WriteString(f.Folders[key].format(prefix, last, maxDepth, curDepth+1))
  	}
  	for i, key := range sortedFiles(f.Files) {
  		last := i == len(f.Files)-1
  		_, _ = out.WriteString(f.Files[key].format(prefix, last, maxDepth, curDepth+1))
  	}
  	return out.String()
  }
docs: // format returns a pretty printed string of all nodes in and below
  // this node, e.g. ├── baz