# This is the default format. 
# For more see: http://jekyllrb.com/docs/permalinks/
permalink: /:categories/:year/:month/:day/:title 

exclude: [".rvmrc", ".rbenv-version", "README.md", "Rakefile", "changelog.md", "vendor", "node_modules", "scss"]
pygments: true
markdown: redcarpet
redcarpet:
  extensions: ["tables"]
encoding: utf-8

# Themes are encouraged to use these universal variables 
# so be sure to set them if your theme uses them.
#
title : Apache Zeppelin (incubating)
tagline: Simplify bigdata analytics
author :
  name : The Apache Software Foundation
  email : dev@zeppelin.incubator.apache.org
  github : apache
  twitter : ASF
  feedburner : feedname

# The production_url is only used when full-domain names are needed
# such as sitemap.txt 
# Most places will/should use BASE_PATH to make the urls
#
# If you have set a CNAME (pages.github.com) set your custom domain here.
# Else if you are pushing to username.github.io, replace with your username.
# Finally if you are pushing to a GitHub project page, include the project name at the end.
#
production_url : http://zeppelin.incubator.apache.org
# All Jekyll-Bootstrap specific configurations are namespaced into this hash
#
JB :
  version : 0.3.0

  # All links will be namespaced by BASE_PATH if defined.
  # Links in your website should always be prefixed with {{BASE_PATH}}
  # however this value will be dynamically changed depending on your deployment situation.
  #
  # CNAME (http://yourcustomdomain.com)
  #   DO NOT SET BASE_PATH 
  #   (urls will be prefixed with "/" and work relatively)
  #
  # GitHub Pages (http://username.github.io)
  #   DO NOT SET BASE_PATH 
  #   (urls will be prefixed with "/" and work relatively)
  #
  # GitHub Project Pages (http://username.github.io/project-name)
  #
  #   A GitHub Project site exists in the `gh-pages` branch of one of your repositories.
  #  REQUIRED! Set BASE_PATH to: http://username.github.io/project-name
  #
  # CAUTION:
  #   - When in Localhost, your site will run from root "/" regardless of BASE_PATH
  #   - Only the following values are falsy: ["", null, false]
  #   - When setting BASE_PATH it must be a valid url.
  #     This means always setting the protocol (http|https) or prefixing with "/"
  BASE_PATH : /docs/0.6.0-incubating-SNAPSHOT

  # By default, the asset_path is automatically defined relative to BASE_PATH plus the enabled theme.
  # ex: [BASE_PATH]/assets/themes/[THEME-NAME]
  #
  # Override this by defining an absolute path to assets here.
  # ex: 
  #   http://s3.amazonaws.com/yoursite/themes/watermelon
  #   /assets
  #
  ASSET_PATH : false

  # These paths are to the main pages Jekyll-Bootstrap ships with.
  # Some JB helpers refer to these paths; change them here if needed.
  #
  archive_path: /archive.html
  categories_path : /categories.html
  tags_path : /tags.html
  atom_path : /atom.xml
  rss_path : /rss.xml

  # Settings for comments helper
  # Set 'provider' to the comment provider you want to use.
  # Set 'provider' to false to turn commenting off globally.
  #
  comments :
    provider : disqus
    disqus :
      short_name : jekyllbootstrap
    livefyre :
      site_id : 123
    intensedebate :
      account : 123abc
    facebook :
      appid : 123
      num_posts: 5
      width: 580
      colorscheme: light
   
  # Settings for analytics helper
  # Set 'provider' to the analytics provider you want to use.
  # Set 'provider' to false to turn analytics off globally.
  #        
  analytics :
    provider : google_universal
    google_classic : 
        tracking_id : 'UA-45176241-2'
    google_universal : 
        tracking_id : 'UA-45176241-5'
        domain : 'zeppelin.incubator.apache.org'
    getclicky :
      site_id : 
    mixpanel :
        token : '_MIXPANEL_TOKEN_'
    piwik :
        baseURL : 'myserver.tld/piwik' # Piwik installation address (without protocol)
        idsite : '1'                   # the id of the site on Piwik

  # Settings for sharing helper. 
  # Sharing is for things like tweet, plusone, like, reddit buttons etc.
  # Set 'provider' to the sharing provider you want to use.
  # Set 'provider' to false to turn sharing off globally.
  #
  sharing :
    provider : false
    
  # Settings for all other include helpers can be defined by creating 
  # a hash with key named for the given helper. ex:
  #
  #   pages_list :
  #     provider : "custom"   
  #
  # Setting any helper's provider to 'custom' will bypass the helper code
  # and include your custom code. Your custom file must be defined at:
  #   ./_includes/custom/[HELPER]
  # where [HELPER] is the name of the helper you are overriding.
  
