docs: def tarbell_install_blueprint(command, args):
      """
      Install a project template.
      """
      with ensure_settings(command, args) as settings:
          name = None
          error = None
          template_url = args.get(0)
          matches = [template for template in settings.config["project_templates"] if template.get("url") == template_url]
          tempdir = tempfile.mkdtemp()
  
          if matches:
              puts("\n{0} already exists. Nothing more to do.\n".format(
                  colored.yellow(template_url)
              ))
              sys.exit()
  
          try:
              puts("\nInstalling {0}".format(colored.cyan(template_url)))
              puts("\n- Cloning repo")
              git = sh.git.bake(_cwd=tempdir, _tty_in=True, _tty_out=False, _err_to_out=True)
              puts(git.clone(template_url, '.'))
  
              _install_requirements(tempdir)
  
              filename, pathname, description = imp.find_module('blueprint', [tempdir])
              blueprint = imp.load_module('blueprint', filename, pathname, description)
              puts("\n- Found _blueprint/blueprint.py")
              name = blueprint.NAME
              puts("\n- Name specified in blueprint.py: {0}".format(colored.yellow(name)))
              settings.config["project_templates"].append({"name": name, "url": template_url})
              settings.save()
  
          except AttributeError:
              name = template_url.split("/")[-1]
              error = "\n- No name specified in blueprint.py, using '{0}'".format(colored.yellow(name))
  
          except ImportError:
              error = 'No blueprint.py found'
  
          except sh.ErrorReturnCode_128 as e:
              if e.stdout.strip('\n').endswith('Device not configured'):
                  error = 'Git tried to prompt for a username or password.\n\nTarbell doesn\'t support interactive sessions. Please configure ssh key access to your Git repository. (See https://help.github.com/articles/generating-ssh-keys/)'
              else:
                  error = 'Not a valid repository or Tarbell project'
          finally:
              _delete_dir(tempdir)
              if error:
                  show_error(error)
              else:
                  puts("\n+ Added new project template: {0}".format(colored.yellow(name)))