Welcome to Linus

Linus is a minimal Jekyll theme built for personal blogs. It’s designed to get out of the way and let the writing breathe — no heavy JavaScript, no complex build pipelines, just a Gemfile and a text editor.

What’s included

Out of the box you get:

  • Pagination — posts are listed 12 per page
  • Archives — browseable by tag, category, month, and year
  • Feeds — both RSS and JSON Feed are generated automatically
  • Link posts — share links with optional commentary and rich previews
  • Multi-author support — define authors in _data/authors.yml
  • SEO tagsjekyll-seo-tag handles meta and Open Graph

Getting started

Install the gem and add it to your _config.yml:

theme: linus

Then run:

bundle install
bundle exec jekyll serve

Your site will be live at http://localhost:4000.

Customization

Drop a assets/css/theme.css into your site to override any styles — it’s loaded last. You can also add _includes/head.html, _includes/below-post.html, or _includes/end.html to inject content at specific spots in the layout without touching theme files.

On Writing with Plain Text

There’s something clarifying about writing in a format that has no toolbar. Markdown strips away the surface-level decision-making — bold or italic, which heading size, what font — and forces the question back to what the sentence is actually doing.

I’ve been writing in plain text for years now. Everything from notes to long drafts lives in .md files, version-controlled, backed up, portable across every device and editor I’ll ever use. The format will still open in 2040.

The tradeoff is that rich media requires a bit more intention. Embedding a video or adding a caption to an image takes a line of HTML, not a drag-and-drop. I’ve come to see that friction as a feature. It slows me down enough to ask whether the thing I’m adding actually belongs there.

The best writing tools are the ones that disappear while you work.

I keep coming back to this idea. A tool that stays invisible is one you’ve stopped fighting with. For me, that’s a plain text file and a consistent publishing workflow. It might be something else entirely for you.

Short Note

Switched from using bundle exec prefixes everywhere to setting BUNDLE_BIN in my shell config. Saves a few keystrokes per command, which adds up over a day of development. Small quality-of-life things compound.

Typography and the Web

Web typography has a reputation for being hard to get right. In practice, most of the work comes down to a handful of decisions made early: a readable typeface, a comfortable line length, and enough vertical rhythm that the page feels settled rather than cramped.

Line length

The classic guidance is 45–75 characters per line for body text. Much shorter and the eye is constantly wrapping; much longer and it struggles to track from the end of one line to the start of the next. This site keeps body text at around 420px, which lands in that range for most screen sizes.

Vertical rhythm

Spacing between elements should feel consistent — not identical, but proportional. Setting a base unit (say, 1rem or 1.5rem) and deriving margins and padding from it keeps things coherent without needing to hand-tune every element.

Typefaces

Linus ships with Atkinson Hyperlegible, a typeface developed by the Braille Institute with legibility as the primary goal. Each character is designed to be as distinct as possible — helpful for anyone with low vision, and quietly pleasant for everyone else.

body {
  font-family: "Atkinson Hyperlegible", system-ui, sans-serif;
  font-size: 1.125rem;
  line-height: 1.65;
}

The numbers are less important than the intention: make the text comfortable to read for a long stretch.

Using Categories and Tags

Linus supports both categories and tags, and they work a bit differently from each other.

Categories are high-level buckets — broad enough that most posts could fit into one or two. They get their own archive pages at /:name/ and can be assigned colors in _config.yml:

category_colors:
  - name: Links
    color: "#f0e68c"
  - name: Notes
    color: "#fa8072"

Tags are more granular and exploratory. Use them for topics you want to be able to browse across, knowing that the archive page at /tag/:name/ will pull everything together.

The practical difference: a post about a CSS trick might be categorized as Notes and tagged css and design. The category describes the post’s format; the tags describe its content.

Formatting Showcase

This post exercises the theme’s text formatting so you can see how everything looks together.

Headings

Heading 1

Heading 2

Heading 3

Prose

Regular paragraph text sits at 1.125rem with a line-height of 1.65. It should be comfortable to read at length without feeling either cramped or too airy. Links look like this and are underlined by default.

Bold text and italic text and inline code all work as expected. So does strikethrough.

Lists

Unordered:

  • First item
  • Second item
    • Nested item
    • Another nested item
  • Third item

Ordered:

  1. Write the first draft
  2. Let it sit overnight
  3. Edit with fresh eyes
  4. Publish

Blockquote

Typography is what language looks like.

— Ellen Lupton

Code block

module Jekyll
  class LinkPost < Generator
    def generate(site)
      site.posts.docs.each do |post|
        next unless post.data["source"]
        # fetch metadata and enrich the post
      end
    end
  end
end

Table

Feature Supported
RSS Feed Yes
JSON Feed Yes
Dark mode Via theme.css
Pagination Yes
Archives Yes

Horizontal rule


That covers the basics.