A Jekyll blog theme that looks and works like a macOS desktop — Dock, Finder, Spotlight, Terminal and more, on GitHub Pages
See the codeA Jekyll blog that looks and works like a macOS desktop. Posts open as documents, the post list lives in Finder, and the Dock, menu bar and Spotlight all behave the way you'd expect on a Mac.
ls, cat, open, neofetch…), Calendar, Games (your projects), Spotify (a YouTube-backed album player) and System Settingsprefers-reduced-motion and prefers-reduced-transparency support, keyboard navigation everywhere, and a phone layout![]() | ![]() |
<your-username>.github.io for a site at https://<your-username>.github.io._config.yml: at least title, author, email and url, then the desktop: block at the bottom.main and / (root), and save._posts/ with your own.A minute later your desktop is online.
Everything personal is in _config.yml and _data/. You never need to touch the JavaScript.
_config.yml| Key | What it does |
|---|---|
title | Blog name: browser tab, About This Mac, Obsidian vault, Terminal |
author | Your name: lock screen, About This Mac, Mail, the © line |
email | Address the Mail app sends visitors' messages to. Leave it empty to turn Send off |
url, baseurl | Your site's address. baseurl only if it lives in a sub-path like /blog |
description | Default description for search engines and link previews |
timezone | Post dates and URLs are counted in this time zone |
wallpaper, wallpaper_2x, wallpaper_dark, wallpaper_dark_2x, wallpaper_tone | The default wallpaper. wallpaper_tone: dark makes menu-bar text white |
wallpaper_color, wallpaper_grid | Optional: a solid color instead of a picture, or the Linux-command grid |
desktop:
username: guest # Terminal prompt and whoami
hostname: Ephemeris # Terminal prompt host
wifi: Home-5G # Wi-Fi network shown as connected
weather: # desktop widget (Open-Meteo, no API key)
city: Cupertino
latitude: 37.3230
longitude: -122.0322
coins: [BTC-USD, ETH-USD] # Notification Center widget (Coinbase). [] hides it
about_category: Personal Blog # "Category" row in About This Mac
druid: false # keep false (an app from the original blog, not included)
jekyll serve doesn't reload _config.yml while it runs, so restart it after editing.
_data/| File | What it holds |
|---|---|
categories.yml | Post categories: name, icon, color, plus ko (extra search words) |
about_me.yml | The pinned "about me" note in Notes. {posts} and {latest} are filled in |
projects.yml | Your projects, shown as app icons in Games. Icons go in assets/images/apps/ |
music.yml | The album the Spotify app plays: artwork plus YouTube video ids |
Create _posts/YYYY-MM-DD-title.md:
---
layout: minimal_post
title: "My first post"
categories: [notes]
date: 2026-09-03 10:00:00 +0900
description: "One line for Finder, Spotlight and link previews."
---
Hello, desktop!
categories takes one slug from _data/categories.yml.## and ### headings become the table of contents in the Preview sidebar.assets/images/ and point the wallpaper* keys at them. Visitors can still pick another one in System Settings.assets/images/dock/<app>-128.png and -256.png (macOS-style rounded squares with their margins)._sass/mac/_tokens.scss. Dark mode overrides are in _sass/mac/_dark.scss.bundle install
bundle exec jekyll serve # http://localhost:4000
The music player won't play on 127.0.0.1 because of YouTube's embed rules. Use localhost.
| Folder | What it does |
|---|---|
tools/og | Bakes 1200×630 share thumbnails into assets/og/ for each post: cd tools/og && npm install && node generate.mjs |
tools/demo | Records docs/demo.gif from a running dev server (needs Chrome and ffmpeg): cd tools/demo && npm install && node record.mjs |
tools/genie | Rebuilds the vendored html-to-image used by the genie effect |
The latest Chrome, Edge, Safari and Firefox on desktop and mobile. It uses CSS backdrop-filter, individual transform properties (scale, translate) and ES modules.
The theme's code is released under the MIT License. Fonts, third-party images and services keep their own terms. See NOTICE.md.
This is an independent fan project, not affiliated with Apple Inc. Apple, macOS, Finder and related names and logos are trademarks of Apple Inc. The bundled macOS wallpaper and icons belong to Apple and their respective owners. They're fine for a personal blog, but replace them with your own artwork for any commercial use.
A Jekyll blog theme that looks and works like a macOS desktop — Dock, Finder, Spotlight, Terminal and more, on GitHub Pages
See the codeA Jekyll blog that looks and works like a macOS desktop. Posts open as documents, the post list lives in Finder, and the Dock, menu bar and Spotlight all behave the way you'd expect on a Mac.
ls, cat, open, neofetch…), Calendar, Games (your projects), Spotify (a YouTube-backed album player) and System Settingsprefers-reduced-motion and prefers-reduced-transparency support, keyboard navigation everywhere, and a phone layout![]() | ![]() |
<your-username>.github.io for a site at https://<your-username>.github.io._config.yml: at least title, author, email and url, then the desktop: block at the bottom.main and / (root), and save._posts/ with your own.A minute later your desktop is online.
Everything personal is in _config.yml and _data/. You never need to touch the JavaScript.
_config.yml| Key | What it does |
|---|---|
title | Blog name: browser tab, About This Mac, Obsidian vault, Terminal |
author | Your name: lock screen, About This Mac, Mail, the © line |
email | Address the Mail app sends visitors' messages to. Leave it empty to turn Send off |
url, baseurl | Your site's address. baseurl only if it lives in a sub-path like /blog |
description | Default description for search engines and link previews |
timezone | Post dates and URLs are counted in this time zone |
wallpaper, wallpaper_2x, wallpaper_dark, wallpaper_dark_2x, wallpaper_tone | The default wallpaper. wallpaper_tone: dark makes menu-bar text white |
wallpaper_color, wallpaper_grid | Optional: a solid color instead of a picture, or the Linux-command grid |
desktop:
username: guest # Terminal prompt and whoami
hostname: Ephemeris # Terminal prompt host
wifi: Home-5G # Wi-Fi network shown as connected
weather: # desktop widget (Open-Meteo, no API key)
city: Cupertino
latitude: 37.3230
longitude: -122.0322
coins: [BTC-USD, ETH-USD] # Notification Center widget (Coinbase). [] hides it
about_category: Personal Blog # "Category" row in About This Mac
druid: false # keep false (an app from the original blog, not included)
jekyll serve doesn't reload _config.yml while it runs, so restart it after editing.
_data/| File | What it holds |
|---|---|
categories.yml | Post categories: name, icon, color, plus ko (extra search words) |
about_me.yml | The pinned "about me" note in Notes. {posts} and {latest} are filled in |
projects.yml | Your projects, shown as app icons in Games. Icons go in assets/images/apps/ |
music.yml | The album the Spotify app plays: artwork plus YouTube video ids |
Create _posts/YYYY-MM-DD-title.md:
---
layout: minimal_post
title: "My first post"
categories: [notes]
date: 2026-09-03 10:00:00 +0900
description: "One line for Finder, Spotlight and link previews."
---
Hello, desktop!
categories takes one slug from _data/categories.yml.## and ### headings become the table of contents in the Preview sidebar.assets/images/ and point the wallpaper* keys at them. Visitors can still pick another one in System Settings.assets/images/dock/<app>-128.png and -256.png (macOS-style rounded squares with their margins)._sass/mac/_tokens.scss. Dark mode overrides are in _sass/mac/_dark.scss.bundle install
bundle exec jekyll serve # http://localhost:4000
The music player won't play on 127.0.0.1 because of YouTube's embed rules. Use localhost.
| Folder | What it does |
|---|---|
tools/og | Bakes 1200×630 share thumbnails into assets/og/ for each post: cd tools/og && npm install && node generate.mjs |
tools/demo | Records docs/demo.gif from a running dev server (needs Chrome and ffmpeg): cd tools/demo && npm install && node record.mjs |
tools/genie | Rebuilds the vendored html-to-image used by the genie effect |
The latest Chrome, Edge, Safari and Firefox on desktop and mobile. It uses CSS backdrop-filter, individual transform properties (scale, translate) and ES modules.
The theme's code is released under the MIT License. Fonts, third-party images and services keep their own terms. See NOTICE.md.
This is an independent fan project, not affiliated with Apple Inc. Apple, macOS, Finder and related names and logos are trademarks of Apple Inc. The bundled macOS wallpaper and icons belong to Apple and their respective owners. They're fine for a personal blog, but replace them with your own artwork for any commercial use.