docs: def install(name=None, pkgs=None, taps=None, options=None, **kwargs):
      '''
      Install the passed package(s) with ``brew install``
  
      name
          The name of the formula to be installed. Note that this parameter is
          ignored if "pkgs" is passed.
  
          CLI Example:
  
          .. code-block:: bash
  
              salt '*' pkg.install <package name>
  
      taps
          Unofficial GitHub repos to use when updating and installing formulas.
  
          CLI Example:
  
          .. code-block:: bash
  
              salt '*' pkg.install <package name> tap='<tap>'
              salt '*' pkg.install zlib taps='homebrew/dupes'
              salt '*' pkg.install php54 taps='["josegonzalez/php", "homebrew/dupes"]'
  
      options
          Options to pass to brew. Only applies to initial install. Due to how brew
          works, modifying chosen options requires a full uninstall followed by a
          fresh install. Note that if "pkgs" is used, all options will be passed
          to all packages. Unrecognized options for a package will be silently
          ignored by brew.
  
          CLI Example:
  
          .. code-block:: bash
  
              salt '*' pkg.install <package name> tap='<tap>'
              salt '*' pkg.install php54 taps='["josegonzalez/php", "homebrew/dupes"]' options='["--with-fpm"]'
  
      Multiple Package Installation Options:
  
      pkgs
          A list of formulas to install. Must be passed as a python list.
  
          CLI Example:
  
          .. code-block:: bash
  
              salt '*' pkg.install pkgs='["foo","bar"]'
  
  
      Returns a dict containing the new package names and versions::
  
          {'<package>': {'old': '<old-version>',
                         'new': '<new-version>'}}
  
      CLI Example:
  
      .. code-block:: bash
  
          salt '*' pkg.install 'package package package'
      '''
      try:
          pkg_params, pkg_type = __salt__['pkg_resource.parse_targets'](
              name, pkgs, kwargs.get('sources', {})
          )
      except MinionError as exc:
          raise CommandExecutionError(exc)
  
      if not pkg_params:
          return {}
  
      formulas = ' '.join(pkg_params)
      old = list_pkgs()
  
      # Ensure we've tapped the repo if necessary
      if taps:
          if not isinstance(taps, list):
              # Feels like there is a better way to allow for tap being
              # specified as both a string and a list
              taps = [taps]
  
          for tap in taps:
              _tap(tap)
  
      if options:
          cmd = 'install {0} {1}'.format(formulas, ' '.join(options))
      else:
          cmd = 'install {0}'.format(formulas)
  
      out = _call_brew(cmd)
      if out['retcode'] != 0 and out['stderr']:
          errors = [out['stderr']]
      else:
          errors = []
  
      __context__.pop('pkg.list_pkgs', None)
      new = list_pkgs()
      ret = salt.utils.data.compare_dicts(old, new)
  
      if errors:
          raise CommandExecutionError(
              'Problem encountered installing package(s)',
              info={'errors': errors, 'changes': ret}
          )
  
      return ret