Welcome To My Blog

  •  Wed 01 May 2013
  •  Category: pelican
  • I've started experimenting with a static blog in the hope that this will encourage me to post on a more frequently . I've decided to go with pelican as it's written in python, set up and has good documentation and I'm using github pages for hosting.

    Getting Started

    First, I created a virtualenv for the project and installed the main requirements.

    mkvirtualenv chrisdev-blog
    pip install pelican
    

    I then used pelican-quickstart to create the skeleton of my project

    pelican-quickstart
    

    Since I was going to host on Github I felt that I did not need the generated Makefile, and all the other helper scripts. Instead, I created a settings file that initially looked like this:

    AUTHOR = 'Christopher Clarke'
    DEFAULT_DATE_FORMAT = '%A, %B %d, %Y'
    DISQUS_SITENAME = 'chrisdev'
    GITHUB_URL = 'https://github.com/chrisdev/chrisdev-blog'
    GOOGLE_ANALYTICS=''
    SITEURL = 'http://blog.chrisdev.com'
    FEED_DOMAIN = SITEURL
    SITENAME = 'TheChrisDev Blog'
    SOCIAL = (('twitter', 'http://twitter.com/realchrisdev'),
              ('github', 'https://github.com/chrisdev'),
              ('facebook', 'http://www.facebook.com/chrisdevtt'),)
    TAG_FEED_ATOM = 'feeds/%s.atom.xml'
    TIMEZONE = "America/Port_of_Spain"
    TWITTER_USERNAME = 'realchrisdev'
    

    To generate the site I created a test rst file in the content directory and ran the following:

    pelican content -s settings.py -o .
    

    To view the generated site just open the index file in your browser or if you are on a Mac

    open index.html
    

    Theming The Blog

    By default pelican will theme your site using notmyidea. But I wanted to use a theme based on Zurb Foundation 4. Fortunately, the official pelican-themes repository already contained a Foundation 4 theme called tuxlite_zf. This is a minimalist theme with a main column and a right sidebar. That I felt would provide a good starting point for a custom theme. To install the pelican-themes we simply cloned the repository to our local machine.

    git clone https://github.com/getpelican/pelican-themes ~/Development/pelican-themes
    

    We then copied the tuxlite_zf theme folder to a new folder chrisdev_zf so that we could customize it. Next, we edited settings.py file to include this line:

    THEME = "../pelican-themes/chrisdev_zf"
    

    Finall, we regenerated the site as before to confirm that tuxlite_zf was indeed generating a Foundation 4 site.

    Customization with SASS and Compass

    The best way to customize a Foundation 4 site is to use Sass and Compass

    This normally means that ruby needs to be installed on your system. If you are on a Mac then you are in luck since a fairly recent version of ruby ships with Mountain Lion. Update your ruby installation and install Foundation 4 and all the necessary dependencies i.e. Sass and Compass .

    sudo gem update --system
    sudo gem install compass
    sudo gem install zurb-foundation
    

    Next create a project for your custom theme.

    compass create custom-foundation4 -r zurb-foundation --using foundation
    

    You can view index.html in your browser confirm that your project is a standard Foundation 4 site. Next, you will want to start by making changes to the Scsss files and use with compass to generate css output.

    The Foundation folks have made this easy for us as you can modify almost any Foundation CSS component by editing _settings.scss file which is located in the sass folder of the custom-foundation project. For example, to change the colors of the Top-nav we made the following changes to _settings.scss

    $topbar-dropdown-bg: #3498db;
    $topbar-dropdown-toggle-alpha: 0.1;
    $dropdown-label-color: #fff;
    

    Next run

    compass compile
    

    You can also set compass in watch mode so that it will watch for saves and compile each time you save an Scss file. Additionally, you can also configure compass to generate compressed code by editing the 'config.rb' and uncommenting

    output_style =  :compressed # or :compressed expanded or :nested or
    

    Once you are satisfied, you can copy app.css as foundation.css to your custom pelican-theme's static directory.

    Once you have gained more experience with compass/sass you will want to target particular CSS components to modify them instead of regenerating the entire foundation.css every time you make a few changes to components. To achieve this we simply created a new scss called style.scss and imported just those components that we wished to modify. So as in the example above where we just wanted to change the top-nav colors we just add the following lines to style.sccs

    $topbar-dropdown-bg: #3498db;
    $topbar-dropdown-toggle-alpha: 0.1;
    $dropdown-label-color: #fff;
    
    @import "foundation/components/grid";
    @import "foundation/components/top-bar";
    

    Note, you need to define the new colors etc. before you import the foundation components.

    As before, compile the style.css and copy this to the static directory of your pelican theme.

    Deployment On Github

    I started by creating a repository on my github called chrisdev.github.com. The use of my github account name as the first part of the repository name was necessary to indicate that this was a special repository for serving User or Organization html pages from the master branch of a repository. The site would be viewable at http://chrisdev.github.io.

    Next in the the directory where I created the pelican blog I ran the followig

    git init
    git add .
    git commit -m "initial commit"
    git remote add origin git@github.com:chrisdev/chrisdev.github.com.git
    

    To update the site I just have to push to the origin

    git push -u origin master
    

    I also set up a custom domain for the blog at http://blog.chrisdev.com by simply setting up a CNAME record in my DNS to set blog.chrisdev.com as an alias for chrisdev.github.com. I also had to add a file to the github repository called CNAME which contained a sigle line with the alias i.e blog.chrisdev.com.

    Comments

    comments powered by Disqus
    comments powered by Disqus