rubyrubygemsjekyllstatic-siteyaml-front-matter

I am unable to set default front matter for drafts or posts when using Jekyll-compose


I have installed the jekyll-compose gem to streamline creating pages, posts etc. In the documentation. I have it working (i.e using the CLI commands I am able to generate, drafts, posts and pages).

However when I generate a post for example, I want it to have certain variables in the front matter. There is functionality mentioned in the ReadMe of Jekyll Compose that says you can set front matter defaults for posts and for drafts.

I have followed the instructions by adding the required lines in the config.yaml of my site, however posts and drafts that I generate using jekyll-compose do not generate with the variables I want.

Jekyll-compose states that if you want default front matter variables you need add something like this to your _config.yaml:

jekyll_compose:
  default_front_matter:
    drafts:
      description:
      image:
      category:
      tags:
    posts:
      description:
      image:
      category:
      tags:
      published: false
      sitemap: false

I have tried both their default config above and also my own below

jekyll_compose:
  default_front_matter:
    drafts:
      main_img_url:
      author_name:
      categories:
      description:
    posts:
      main_img_url:
      author_name:
      categories:
      description:

But neither work when I generate a new post or draft. There are no error messages which makes it difficult to debug.

Originally my Jekyll version was at 3.7.0, I thought it might be an problem of a Jekyll version being too old. However this problem persisted when I updated Jekyll to 3.8.6.

It also does not work when I put default values for my custom variables, i.e:

jekyll_compose:
  default_front_matter:
    drafts:
        main_img_url: "https://images-we-got-pop.imgix.net/website/blog/pop-logo-small.png"
        author_name: "Me"
        categories: "general"
        description: "Description"
    posts:
        main_img_url: "https://images-we-got-pop.imgix.net/website/blog/pop-logo-small.png"
        author_name: "Me"
        categories: "general"
        description: "Description"

My _config file looks like this:

title: Title
email: your-email@domain.com
description: > # this means to ignore newlines until "baseurl:"
  Write an awesome description for your new site here. You can edit this
  line in _config.yml. It will appear in your document head meta (for
  Google search results) and in your feed.xml site description.
baseurl: "" # the subpath of your site, e.g. /blog
url: "" # the base hostname & protocol for your site, e.g. http://example.com
twitter_username: name
github_username:  name

# Build settings
markdown: kramdown
theme: minima
plugins:
  - jekyll-feed
  - jekyll-paginate-v2
exclude:
  - Gemfile
  - Gemfile.lock
  - Makefile
  - README.md

permalink: /pages/:year/:month/:day/:title/

jekyll_compose:
  default_front_matter:
    drafts:
      main_img_url:
      author_name:
      categories:
      description:
    posts:
      main_img_url:
      author_name:
      categories:
      description:

future: true

pagination:
  enabled: true
  sort_reverse: true
  trail:
    before: 1
    after: 1

and my Gemfile looks like this:

source "https://rubygems.org"
ruby RUBY_VERSION

gem "jekyll", "3.8.6"

# This is the default theme for new Jekyll sites. You may change this to anything you like.
gem "minima", "~> 2.0"

# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
# gem "github-pages", group: :jekyll_plugins

# If you have any plugins, put them here!
group :jekyll_plugins do
   gem "jekyll-feed", "~> 0.6"
   gem "jekyll-paginate-v2", "~> 1.9"
   gem 'jekyll-compose', "~> 0.11"
end

I am expecting my custom front matter to appear in my newly generated posts:

---
title: this-is-a-new-post
date: 2019-10-09 10:45 +0100
main_img_url:
author_name:
categories:
description:
---

But I only get the standard ones that get created with the post/draft, eg:

---
title: this-is-a-new-post
date: 2019-10-09 10:45 +0100
---

Any ideas??


Solution

  • Ok I managed to fix this myself after seeing the syntax for the custom variables was different on GH compared to what I found when digging into the jekyll-compose post creation methods on rubydoc.info.

    Basically there was PR that changed the syntax merged in to master but not yet released, hence why I was having difficulty getting it to work

    The current syntax as of the latest release:

    jekyll_compose:
      draft_default_front_matter:
        description:
        image:
        category:
        tags:
      post_default_front_matter:
        description:
        image:
        category:
        tags:
        published: false
        sitemap: false
    

    Compared to the config structure illustrated in the Readme and on master in the jekyll-compose repo, but had't been released at the time when I looked at the docs:

    jekyll_compose:
      default_front_matter:
        drafts:
          description:
          image:
          category:
          tags:
        posts:
          description:
          image:
          category:
          tags:
          published: false
          sitemap: false