Compare commits

...

74 Commits
v3.1.0 ... main

Author SHA1 Message Date
Cotes Chung
7ad088be90 Update readme 2026-03-28 09:40:46 +08:00
GitHub Actions
92429f5f77 Update critical file(s) according to Chirpy v7.5.0 2026-03-15 20:15:23 +00:00
GitHub Actions
18bee92873 Update critical file(s) according to Chirpy v7.4.1 2025-10-26 21:50:06 +00:00
GitHub Actions
0fad01a57b Update critical file(s) according to Chirpy v7.4.0 2025-10-19 23:17:12 +00:00
GitHub Actions
1d4e1a21b4 Update critical file(s) according to Chirpy v7.3.1 2025-07-26 12:25:29 +00:00
GitHub Actions
051518182c Update critical file(s) according to Chirpy v7.3.0 2025-05-18 13:20:07 +00:00
GitHub Actions
46e2bdfa6e Update critical file(s) according to Chirpy v7.2.4 2024-12-21 19:23:15 +00:00
GitHub Actions
1d4d35af85 Update critical file(s) according to Chirpy v7.2.3 2024-12-15 13:06:48 +00:00
GitHub Actions
aa0fd48ad0 Update critical file(s) according to Chirpy v7.2.2 2024-12-06 17:07:40 +00:00
GitHub Actions
333ce4603e Update critical file(s) according to Chirpy v7.2.1 2024-12-05 13:34:44 +00:00
GitHub Actions
59ad287fb0 Update critical file(s) according to Chirpy v7.2.0 2024-11-28 09:00:29 +00:00
GitHub Actions
7ab45bd41f Update critical file(s) according to Chirpy v7.1.1 2024-09-23 12:05:45 +00:00
GitHub Actions
6ae7825809 Update critical file(s) according to Chirpy v7.1.0 2024-09-01 12:45:16 +00:00
GitHub Actions
00252fd7b8 Update critical file(s) according to Chirpy v7.0.1 2024-05-18 11:02:10 +00:00
GitHub Actions
32f4cbe2f7 Update critical file(s) according to Chirpy v7.0.0 2024-05-11 08:16:14 +00:00
GitHub Actions
88378f6169 Update critical file(s) according to Chirpy v6.5.5 2024-03-23 18:32:27 +00:00
GitHub Actions
586b285258 Update critical file(s) according to Chirpy v6.5.4 2024-03-22 19:45:34 +00:00
GitHub Actions
c403568b4c Update critical file(s) according to Chirpy v6.5.3 2024-03-07 20:15:44 +00:00
GitHub Actions
b8605de1ba Update critical file(s) according to Chirpy v6.5.2 2024-02-29 19:53:46 +00:00
GitHub Actions
953dbb08e3 Update critical file(s) according to Chirpy v6.5.1 2024-02-26 18:21:19 +00:00
GitHub Actions
b160f258a0 Update critical file(s) according to Chirpy v6.5.0 2024-02-14 16:21:01 +00:00
GitHub Actions
8486ea4ae4 Update critical file(s) according to Chirpy v6.4.2 2024-01-13 14:04:21 +00:00
GitHub Actions
756d37c648 Update critical file(s) according to Chirpy v6.4.1 2024-01-10 18:13:49 +00:00
GitHub Actions
d03f0bbcc7 Update critical file(s) according to Chirpy v6.4.0 2024-01-10 15:12:49 +00:00
Dmitry Kosarev
1efe631e7e build(deps): specify the minor version number of ruby (#15)
See also: https://github.com/cotes2020/jekyll-theme-chirpy/pull/1431


Co-authored-by: Dmitry Kosarev <kosarevdmlive@outlook.com>
2023-12-28 17:03:08 +08:00
GitHub Actions
1565392b7e Update critical file(s) according to Chirpy v6.3.1 2023-11-12 21:17:50 +00:00
GitHub Actions
aea4a8fc59 Update critical file(s) according to Chirpy v6.3.0 2023-11-10 12:16:23 +00:00
GitHub Actions
f05cdc55b9 Update critical file(s) according to Chirpy v6.2.3 2023-10-10 04:56:49 +00:00
GitHub Actions
bcb2c56f84 Update critical file(s) according to Chirpy v6.2.2 2023-09-10 18:40:05 +00:00
GitHub Actions
c3ef063416 Update critical file(s) according to Chirpy v6.2.1 2023-09-10 16:43:47 +00:00
GitHub Actions
74bf950ae0 Update critical file(s) according to Chirpy v6.2.0 2023-09-10 13:24:09 +00:00
GitHub Actions
2605fedb3f Update critical file(s) according to Chirpy v6.1.0 2023-07-02 13:52:03 +00:00
GitHub Actions
7c3f58dd08 Update critical file(s) according to Chirpy v6.0.1 2023-05-19 16:50:33 +00:00
GitHub Actions
3c5c4e9733 Update critical file(s) according to Chirpy v6.0.0 2023-05-16 19:05:24 +00:00
GitHub Actions
918d7a0bba Update critical file(s) according to Chirpy v5.6.1 2023-03-30 21:48:39 +00:00
GitHub Actions
ff0f0b801e Update critical file(s) according to Chirpy v5.6.0 2023-03-17 18:23:14 +00:00
GitHub Actions
85116817d1 Update critical file(s) according to Chirpy v5.5.2 2023-02-05 19:18:58 +00:00
GitHub Actions
afc1abfdd5 Update critical file(s) according to Chirpy v5.5.1 2023-01-29 22:18:12 +00:00
GitHub Actions
1832a369aa Update critical file(s) according to Chirpy v5.5.0 2023-01-29 21:05:40 +00:00
GitHub Actions
02a5de7732 Update critical file(s) according to Chirpy v5.4.0 2022-12-27 17:32:37 +00:00
GitHub Actions
9b2c9badce Update critical file(s) according to Chirpy v5.3.2 2022-11-25 15:03:09 +00:00
Travis-CI
d9428918ed Update critical file(s) according to Chirpy v5.3.1 2022-10-25 13:31:31 +00:00
Travis-CI
1b74cf9a36 Update critical file(s) according to Chirpy v5.3.0 2022-09-23 13:58:58 +00:00
Travis-CI
e6a207db16 Update critical file(s) according to Chirpy v5.2.1 2022-06-17 16:17:19 +00:00
Travis-CI
6c8b7ca51f Update critical file(s) according to Chirpy v5.2.0 2022-06-09 10:06:34 +00:00
Travis-CI
d1ef8d4273 Update critical file(s) according to Chirpy v5.1.0 2022-02-14 17:30:02 +00:00
Travis-CI
3b07fccfc4 Update critical file(s) according to Chirpy v5.0.2 2022-01-07 18:52:12 +00:00
Travis-CI
a8cd88041d Update critical file(s) according to Chirpy v5.0.1 2022-01-04 19:50:28 +00:00
Cotes Chung
fc54bc5574 Update the doc's link in README 2022-01-04 18:58:52 +08:00
Travis-CI
bf93d1383d Update critical file(s) according to Chirpy v5.0.0 2022-01-02 16:53:02 +00:00
Travis-CI
23942a94b3 Update critical file(s) according to Chirpy v4.3.4 2021-11-29 12:35:47 +00:00
Travis-CI
66a784cb71 Update critical file(s) according to Chirpy v4.3.3 2021-10-24 20:18:05 +00:00
Travis-CI
b8446c9b7b Update critical file(s) according to Chirpy v4.3.2 2021-10-14 18:13:57 +00:00
Travis-CI
479cdc35c7 Update critical file(s) according to Chirpy v4.3.1 2021-10-01 10:58:50 +00:00
Travis-CI
ff41859240 Update critical file(s) according to Chirpy v4.3.0 2021-09-29 20:03:26 +00:00
Cotes Chung
c2a7480e65 Update README 2021-09-26 01:20:50 +08:00
Travis-CI
4abf09ed60 Update critical file(s) according to Chirpy v4.2.1 2021-09-16 13:22:01 +00:00
Travis-CI
2327ec8d83 Update critical file(s) according to Chirpy v4.2.0 2021-09-15 17:53:28 +00:00
Travis-CI
45ff5ba1bf Update critical file(s) according to Chirpy v4.1.1 2021-08-09 08:49:14 +00:00
Travis-CI
1d16d381fd Update critical file(s) according to Chirpy v4.1.0 2021-07-21 16:54:21 +00:00
Cotes Chung
1a82b8970f Update README 2021-07-21 22:33:34 +08:00
Travis-CI
d84dd10ca5 Update critical file(s) according to Chirpy v4.0.2 2021-06-23 16:55:07 +00:00
Cotes Chung
14988e3c10 Update README 2021-06-23 23:26:23 +08:00
Cotes Chung
53ccb821cb Improve the gitignore 2021-06-04 19:42:36 +08:00
Chao Xiang
81cfa313af fix usage on Customing Stylesheet 2021-05-11 21:46:25 +08:00
Travis-CI
c9806df6fa Update critical file(s) according to Chirpy v4.0.1 2021-05-07 19:36:50 +00:00
Travis-CI
67a9ca60de Update critical file(s) according to Chirpy v4.0.0 2021-04-30 06:22:50 +00:00
Cotes Chung
e6b807ee6f Update README to v4.0.0 2021-04-30 14:08:12 +08:00
Travis-CI
15f6f7160c Update critical file(s) according to Chirpy v3.3.0 2021-04-02 08:29:15 +00:00
Cotes Chung
1d7d7cffac Update the ruby setup in gh-actions 2021-04-01 04:09:47 +08:00
Cotes Chung
dff8e09089 Update the Gemfile 2021-03-01 19:08:40 +08:00
Cotes Chung
565ce4422e Fix the license link in readme 2021-02-11 02:58:14 +08:00
Travis-CI
31ed013043 [Automation] Update critical file(s) according to Chirpy v3.2.0 2021-02-10 13:36:18 +00:00
Cotes Chung
3c4df16c5c Improve the readme 2021-02-05 22:42:29 +08:00
31 changed files with 537 additions and 560 deletions

View File

@@ -0,0 +1,29 @@
{
"name": "Jekyll",
"image": "mcr.microsoft.com/devcontainers/jekyll:2-bullseye",
"onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
"postCreateCommand": "bash .devcontainer/post-create.sh",
"customizations": {
"vscode": {
"settings": {
"terminal.integrated.defaultProfile.linux": "zsh"
},
"extensions": [
// Liquid tags auto-complete
"killalau.vscode-liquid-snippets",
// Liquid syntax highlighting and formatting
"Shopify.theme-check-vscode",
// Shell
"timonwong.shellcheck",
"mkhl.shfmt",
// Common formatter
"EditorConfig.EditorConfig",
"esbenp.prettier-vscode",
"stylelint.vscode-stylelint",
"yzhang.markdown-all-in-one",
// Git
"mhutchie.git-graph"
]
}
}
}

View File

@@ -0,0 +1,18 @@
#!/usr/bin/env bash
if [ -f package.json ]; then
bash -i -c "nvm install --lts && nvm install-latest-npm"
npm i
npm run build
fi
# Install dependencies for shfmt extension
curl -sS https://webi.sh/shfmt | sh &>/dev/null
# Add OMZ plugins
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
sed -i -E "s/^(plugins=\()(git)(\))/\1\2 zsh-syntax-highlighting zsh-autosuggestions\3/" ~/.zshrc
# Avoid git log use less
echo -e "\nunset LESS" >>~/.zshrc

View File

@@ -2,10 +2,18 @@ root = true
[*]
charset = utf-8
# 2 space indentation
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
# Unix-style newlines with a newline ending every file
end_of_line = lf
insert_final_newline = true
[*.{js,css,scss}]
quote_type = single
[*.{yml,yaml}]
quote_type = double
[*.md]
trim_trailing_whitespace = false

View File

@@ -1,68 +1,73 @@
name: 'Automatic build'
name: "Build and Deploy"
on:
push:
branches:
- main
- master
paths-ignore:
- .gitignore
- README.md
- LICENSE
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
# Allow one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: true
jobs:
continuous-delivery:
build:
runs-on: ubuntu-latest
env:
GEMS_PATH: ~/vendor/bundle
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v6
with:
fetch-depth: 0 # for posts's lastmod
fetch-depth: 0
# submodules: true
# If using the 'assets' git submodule from Chirpy Starter, uncomment above
# (See: https://github.com/cotes2020/chirpy-starter/tree/main/assets)
- name: Setup Pages
id: pages
uses: actions/configure-pages@v5
- name: Setup Ruby
uses: actions/setup-ruby@v1
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7
ruby-version: 3.4
bundler-cache: true
- name: Bundle Caching
uses: actions/cache@v2
with:
path: ${{ env.GEMS_PATH }}
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gems-
- name: Bundle Install
run: |
bundle config path ${{ env.GEMS_PATH }}
bundle install --jobs 4 --retry 3
- name: Check baseurl
run: |
baseurl="$(grep '^baseurl:' _config.yml | sed "s/.*: *//;s/['\"]//g;s/#.*//")"
if [[ -n $baseurl ]]; then
echo "BASE_URL=$baseurl" >> $GITHUB_ENV
fi
- name: Build Site
- name: Build site
run: bundle exec jekyll b -d "_site${{ steps.pages.outputs.base_path }}"
env:
JEKYLL_ENV: production
run: |
bundle exec jekyll b -d "_site$BASE_URL"
JEKYLL_ENV: "production"
- name: Test Site
- name: Test site
run: |
bash tools/test.sh
bundle exec htmlproofer _site \
\-\-disable-external \
\-\-ignore-urls "/^http:\/\/127.0.0.1/,/^http:\/\/0.0.0.0/,/^http:\/\/localhost/"
- name: Deploy
run: |
if [[ -n $BASE_URL ]]; then
mv _site$BASE_URL _site-rename
rm -rf _site
mv _site-rename _site
fi
- name: Upload site artifact
uses: actions/upload-pages-artifact@v4
with:
path: "_site${{ steps.pages.outputs.base_path }}"
bash tools/deploy.sh
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

29
.gitignore vendored
View File

@@ -1,14 +1,27 @@
# hidden files
.*
!.github
# jekyll cache
_site
# Bundler cache
.bundle
vendor
Gemfile.lock
# rubygem
# Jekyll cache
.jekyll-cache
.jekyll-metadata
_site
# RubyGems
*.gem
# npm dependencies
# NPM dependencies
node_modules
package-lock.json
# IDE configurations
.idea
.vscode/*
!.vscode/settings.json
!.vscode/extensions.json
!.vscode/tasks.json
# Misc
_sass/vendors
assets/js/dist

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "assets/lib"]
path = assets/lib
url = https://github.com/cotes2020/chirpy-static-assets.git

1
.nojekyll Normal file
View File

@@ -0,0 +1 @@

3
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"recommendations": ["ms-vscode-remote.remote-containers"]
}

30
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,30 @@
{
// Prettier
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
// Shopify Liquid
"files.associations": {
"*.html": "liquid"
},
"[markdown]": {
"editor.defaultFormatter": "yzhang.markdown-all-in-one"
},
// Formatter
"[html][liquid]": {
"editor.defaultFormatter": "Shopify.theme-check-vscode"
},
"[shellscript]": {
"editor.defaultFormatter": "mkhl.shfmt"
},
// Disable vscode built-in stylelint
"css.validate": false,
"scss.validate": false,
"less.validate": false,
// Stylint extension settings
"stylelint.snippet": ["css", "scss"],
"stylelint.validate": ["css", "scss"],
// Run tasks in macOS
"terminal.integrated.profiles.osx": {
"zsh": { "path": "/bin/zsh", "args": ["-l", "-i"] }
}
}

26
.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,26 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Run Jekyll Server",
"type": "shell",
"command": "./tools/run.sh",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [],
"detail": "Runs the Jekyll server with live reload."
},
{
"label": "Build Jekyll Site",
"type": "shell",
"command": "./tools/test.sh",
"group": {
"kind": "build"
},
"problemMatcher": [],
"detail": "Build the Jekyll site for production."
}
]
}

View File

@@ -1,21 +0,0 @@
---
layout: page
title: "404: Page not found"
permalink: /404.html
redirect_from:
- /norobots/
- /assets/
- /posts/
dynamic_title: true
---
<div class="lead">
<p>Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. </p>
<p>
<a href="{{ '/' | relative_url }}">Head back Home</a>
to try finding it again, or search for it on the
<a href="{{ 'archives' | relative_url }}">Archives page</a>.
</p>
</div>

22
Gemfile
View File

@@ -1,22 +1,14 @@
# frozen_string_literal: true
source "https://rubygems.org"
gem "jekyll-theme-chirpy"
gem "jekyll-theme-chirpy", "~> 7.5"
# If you have any plugins, put them here!
group :jekyll_plugins do
# gem "jekyll-xxx", "~> x.y"
end
gem "html-proofer", "~> 5.0", group: :test
group :test do
gem "html-proofer", "~> 3.18"
end
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library.
install_if -> { RUBY_PLATFORM =~ %r!mingw|mswin|java! } do
gem "tzinfo", "~> 1.2"
platforms :windows, :jruby do
gem "tzinfo", ">= 1", "< 3"
gem "tzinfo-data"
end
# # # Performance-booster for watching directories on Windows
gem "wdm", "~> 0.1.1", :install_if => Gem.win_platform?
gem "wdm", "~> 0.2.0", :platforms => [:windows]

View File

@@ -1,79 +1,39 @@
# Chirpy Starter
The startup template for [**Jekyll Theme Chirpy**][chirpy].
[![Gem Version](https://img.shields.io/gem/v/jekyll-theme-chirpy)][gem]&nbsp;
[![GitHub license](https://img.shields.io/github/license/cotes2020/chirpy-starter.svg?color=blue)][mit]
When installing the Chirpy through [RubyGems][gem], Jekyll can only read files in the folders `_includes`, `_layout`, `_sass` and `assets`, as well as a small part of options of the `_config.yml` file from the theme's gem (use the command `bundle info --path jekyll-theme-chirpy` to locate). To fully use all the features of Chirpy, you also need to copy other files/directories and config options from the theme's gem to your Jekyll site. So we extract all the required things of the theme's gem to help you quickly use Chirpy.
A minimal, ready-to-use template for creating a blog with the [**Chirpy**][chirpy] Jekyll theme. Get up and running in minutes with all critical files pre-configured.
## Why This Starter Exists
When installing Chirpy through [RubyGems.org][gem], Jekyll can only read a subset of theme files (`_data`, `_layouts`, `_includes`, `_sass`, `assets`) and limited `_config.yml` options from the gem. As a result, users cannot enjoy the full out-of-the-box experience that Chirpy offers.
To unlock all features, the following files must be present in your Jekyll site:
```shell
# The critical files/directories to run Chirpy theme
├── _data
.
├── _config.yml
├── _plugins
├── _tabs
── _config.yml
├── app.js
├── feed.xml
├── index.html
├── robots.txt
├── sw.js
└── 404.html
── index.html
```
## Installation
[Use this template][usetemplate] to generate a new repository, and then execute:
[usetemplate]: https://github.com/cotes2020/chirpy-starter/generate
```
$ bundle
```
This starter bundles those files from the latest **Chirpy** release along with a [CD][CD] workflow, so you can start writing immediately.
## Usage
### Customing Stylesheet
Check out the [theme's docs](https://github.com/cotes2020/jekyll-theme-chirpy/wiki).
Creare a new file `/assets/css/style.scss` in your Jekyll site.
## Contributing
And then add the following content:
```scss
---
---
@import {{ site.theme }}
// add your style below
```
### Changing the Number of Tabs
When adding or deleting files in the `_tabs` folder, you need to complete the section [Customing Stylesheet](#customing-stylesheet) first, and then add a new line before `@import`:
```scss
$tab-count: {{ site.tabs | size | plus: 1 }};
```
### Publishing to GitHub Pages
See the `jekyll-theme-chirpy`'s [deployment instructions](https://github.com/cotes2020/jekyll-theme-chirpy#deployment). Note that in order to use GitHub Actions caching to speed up the deployment, you should add the `Gemfile.lock` file to your repository.
### Updating
Please note that files and directories in this project may change as the [`jekyll-theme-chirpy`][chirpy] is updated. When updating, please ensure that the file directory structure of your Jekyll site is the same as that of this project.
And then execute:
```console
$ bundle update jekyll-theme-chirpy
```
## Documentation
See the [theme's docs](https://github.com/cotes2020/jekyll-theme-chirpy#documentation).
This repository is automatically updated with new releases from the theme repository. If you encounter any issues or want to contribute to its improvement, please visit the [theme repository][chirpy] to provide feedback.
## License
This work is published under [MIT](https://github.com/cotes2020/chirpy-starter/blob/master/LICENSE) License.
This work is published under [MIT][mit] License.
[gem]: https://rubygems.org/gems/jekyll-theme-chirpy
[chirpy]: https://github.com/cotes2020/jekyll-theme-chirpy/
[CD]: https://en.wikipedia.org/wiki/Continuous_deployment
[mit]: https://github.com/cotes2020/chirpy-starter/blob/master/LICENSE

View File

@@ -3,62 +3,80 @@
# Import the theme
theme: jekyll-theme-chirpy
# Only if your site type is GitHub Project sites and doesn't have a custom domain,
# change below value to '/projectname'.
baseurl: ''
# The language of the webpage http://www.lingoes.net/en/translator/langcode.htm
# If it has the same name as one of the files in folder `_data/locales`, the layout language will also be changed,
# otherwise, the layout language will use the default value of 'en'.
lang: en
# the HTML language tag https://www.w3.org/International/questions/qa-choosing-language-tags
lang: en-US
# Change to your timezone http://www.timezoneconverter.com/cgi-bin/findzone/findzone
timezone: Asia/Shanghai
# Change to your timezone https://zones.arilyn.cc
timezone:
# jekyll-seo-tag settings https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md
# --------------------------
# --------------------------
title: Chirpy # the main title
tagline: A text-focused Jekyll theme # it will display as the sub-title
tagline: A text-focused Jekyll theme # it will display as the subtitle
description: >- # used by seo meta and the atom feed
A minimal, portfolio, sidebar,
bootstrap Jekyll theme with responsive web design
and focuses on text presentation.
A minimal, responsive and feature-rich Jekyll theme for technical writing.
# fill in the protocol & hostname for your site, e.g., 'https://username.github.io'
url: ''
author: your_full_name # change to your full name
# Fill in the protocol & hostname for your site.
# E.g. 'https://username.github.io', note that it does not end with a '/'.
url: ""
github:
username: github_username # change to your github username
username: github_username # change to your GitHub username
twitter:
username: twitter_username # change to your twitter username
username: twitter_username # change to your Twitter username
social:
name: your_full_name # it will shows as the copyright owner in Footer
email: example@doamin.com # change to your email address
# Change to your full name.
# It will be displayed as the default author of the posts and the copyright owner in the Footer
name: your_full_name
email: example@domain.com # change to your email address
fediverse_handle: # fill in your fediverse handle. E.g. "@username@domain.com"
links:
# The first element serves as the copyright owner's link
- https://twitter.com/username # change to your twitter homepage
- https://github.com/username # change to your github homepage
- https://twitter.com/username # change to your Twitter homepage
- https://github.com/username # change to your GitHub homepage
# Uncomment below to add more social links
# - https://www.facebook.com/username
# - https://www.linkedin.com/in/username
google_site_verification: google_meta_tag_verification # change to your verification string
# --------------------------
# Site Verification Settings
webmaster_verifications:
google: # fill in your Google verification code
bing: # fill in your Bing verification code
alexa: # fill in your Alexa verification code
yandex: # fill in your Yandex verification code
baidu: # fill in your Baidu verification code
facebook: # fill in your Facebook verification code
google_analytics:
id: '' # Fill with your Google Analytics ID
pv:
# The Google Analytics pageviews switch.
# DO NOT enable it unless you know how to deploy the Google Analytics superProxy.
enabled: false
# the next options only valid when `google_analytics.pv` is enabled.
proxy_url: ''
proxy_endpoint: ''
cache: false # pv data local cache, good for the users from GFW area.
# ↑ --------------------------
# The end of `jekyll-seo-tag` settings
# Web Analytics Settings
analytics:
google:
id: # fill in your Google Analytics ID
goatcounter:
id: # fill in your GoatCounter ID
umami:
id: # fill in your Umami ID
domain: # fill in your Umami domain
matomo:
id: # fill in your Matomo ID
domain: # fill in your Matomo domain
cloudflare:
id: # fill in your Cloudflare Web Analytics token
fathom:
id: # fill in your Fathom Site ID
# Page views settings
pageviews:
provider: # now only supports 'goatcounter'
# Prefer color scheme setting.
#
@@ -68,33 +86,77 @@ google_analytics:
#
# Available options:
#
# light - Use the light color scheme
# dark - Use the dark color scheme
# light Use the light color scheme
# dark Use the dark color scheme
#
theme_mode: # [light|dark]
theme_mode: # [light | dark]
# The CDN endpoint for images.
# The CDN endpoint for media resources.
# Notice that once it is assigned, the CDN url
# will be added to all image (site avatar & posts' images) paths starting with '/'
# will be added to all media resources (site avatar, posts' images, audio and video files) paths starting with '/'
#
# e.g. 'https://cdn.com'
img_cdn: ''
cdn:
# the avatar on sidebar, support local or CORS resources
avatar: https://cdn.jsdelivr.net/gh/cotes2020/chirpy-images/commons/avatar.jpg
avatar:
# boolean type, the global switch for ToC in posts.
# The URL of the site-wide social preview image used in SEO `og:image` meta tag.
# It can be overridden by a customized `page.image` in front matter.
social_preview_image: # string, local or CORS resources
# boolean type, the global switch for TOC in posts.
toc: true
disqus:
comments: false # boolean type, the global switch for posts comments.
shortname: '' # Fill with your Disqus shortname. https://help.disqus.com/en/articles/1717111-what-s-a-shortname
comments:
# Global switch for the post-comment system. Keeping it empty means disabled.
provider: # [disqus | utterances | giscus]
# The provider options are as follows:
disqus:
shortname: # fill with the Disqus shortname. https://help.disqus.com/en/articles/1717111-what-s-a-shortname
# utterances settings https://utteranc.es/
utterances:
repo: # <gh-username>/<repo>
issue_term: # < url | pathname | title | ...>
# Giscus options https://giscus.app
giscus:
repo: # <gh-username>/<repo>
repo_id:
category:
category_id:
mapping: # optional, default to 'pathname'
strict: # optional, default to '0'
input_position: # optional, default to 'bottom'
lang: # optional, default to the value of `site.lang`
reactions_enabled: # optional, default to the value of `1`
# Self-hosted static assets, optional https://github.com/cotes2020/chirpy-static-assets
assets:
self_host:
enabled: # boolean, keep empty means false
# specify the Jekyll environment, empty means both
# only works if `assets.self_host.enabled` is 'true'
env: # [development | production]
pwa:
enabled: true # The option for PWA feature (installable)
cache:
enabled: true # The option for PWA offline cache
# Paths defined here will be excluded from the PWA cache.
# Usually its value is the `baseurl` of another website that
# shares the same domain name as the current website.
deny_paths:
# - "/example" # URLs match `<SITE_URL>/example/*` will not be cached by the PWA
paginate: 10
# The base URL of your site
baseurl: ""
# ------------ The following options are not recommended to be modified ------------------
kramdown:
footnote_backlink: "&#8617;&#xfe0e;"
syntax_highlighter: rouge
syntax_highlighter_opts: # Rouge Options https://github.com/jneen/rouge#full-options
css_class: highlight
@@ -105,38 +167,32 @@ kramdown:
line_numbers: true
start_line: 1
# DO NOT change this unless you're a Pro user on Jekyll and Web development,
# Or you think you're smart enough to change other relevant URLs within this template.
permalink: /posts/:title/
collections:
tabs:
output: true
sort_by: order
defaults:
-
scope:
path: '' # An empty string here means all files in the project
- scope:
path: "" # An empty string here means all files in the project
type: posts
values:
layout: post
comments: true # Enable comments in posts.
toc: true # Display TOC column in posts.
-
scope:
# DO NOT modify the following parameter unless you are confident enough
# to update the code of all other post links in this project.
permalink: /posts/:title/
- scope:
path: _drafts
values:
comments: false
-
scope:
path: ''
- scope:
path: ""
type: tabs # see `site.collections`
values:
layout: page
permalink: /:title/
dynamic_title: true # Hide title in mobile screens.
sass:
style: compressed
@@ -151,18 +207,15 @@ compress_html:
envs: [development]
exclude:
- vendor
- Gemfile
- Gemfile.lock
- jekyll-theme-chirpy.gemspec
- tools
- "*.gem"
- "*.gemspec"
- docs
- tools
- README.md
- LICENSE
- gulpfile.js
- node_modules
- package.json
- package-lock.json
- purgecss.js
- "*.config.js"
- "package*.json"
jekyll-archives:
enabled: [categories, tags]

View File

@@ -1,30 +1,40 @@
# The contact options.
-
type: github
icon: 'fab fa-github-alt'
-
type: twitter
icon: 'fab fa-twitter'
-
type: email
icon: 'fas fa-envelope'
noblank: true # open link in current tab
-
type: rss
icon: 'fas fa-rss'
noblank: true
- type: github
icon: "fab fa-github"
- type: twitter
icon: "fa-brands fa-x-twitter"
- type: email
icon: "fas fa-envelope"
noblank: true # open link in current tab
- type: rss
icon: "fas fa-rss"
noblank: true
# Uncomment and complete the url below to enable more contact options
# -
# type: mastodon
#
# - type: mastodon
# icon: 'fab fa-mastodon' # icons powered by <https://fontawesome.com/>
# url: '' # Fill with your mastodon account page
# -
# type: linkedin
# url: '' # Fill with your Mastodon account page, rel="me" will be applied for verification
#
# - type: linkedin
# icon: 'fab fa-linkedin' # icons powered by <https://fontawesome.com/>
# url: '' # Fill with your Linkedin homepage
# -
# type: stack-overflow
#
# - type: stack-overflow
# icon: 'fab fa-stack-overflow'
# url: '' # Fill with your stackoverflow homepage
#
# - type: bluesky
# icon: 'fa-brands fa-bluesky'
# url: '' # Fill with your Bluesky profile link
#
# - type: reddit
# icon: 'fa-brands fa-reddit'
# url: '' # Fill with your Reddit profile link
#
# - type: threads
# icon: 'fa-brands fa-threads'
# url: '' # Fill with your Threads profile link

View File

@@ -1,7 +0,0 @@
# The date format
tooltip: "%a, %b %e, %Y, %l:%M %p %z"
post:
long: "%b %e, %Y"
short: "%b %e"

View File

@@ -1,19 +0,0 @@
# The label text of site.
panel:
lastmod: Recent Update
trending_tags: Trending Tags
toc: Contents
post:
relate_posts: Further Reading
share: Share
button:
next: Newer
previous: Older
search_hint: Search # text show on search bar
pin_prompt: Pinned # pinned prompt
read_time_unit: min # see posts' time to read

View File

@@ -1,11 +0,0 @@
# License data
license:
name: CC BY 4.0
link: "https://creativecommons.org/licenses/by/4.0/"
brief: Some rights reserved.
verbose: >-
Except where otherwise noted, the blog posts on this site are licensed
under the Creative Commons Attribution 4.0 International (CC BY 4.0) License by the author.

View File

@@ -2,26 +2,49 @@
# Icons from <https://fontawesome.com/>
platforms:
-
type: Twitter
icon: "fab fa-twitter"
- type: Twitter
icon: "fa-brands fa-square-x-twitter"
link: "https://twitter.com/intent/tweet?text=TITLE&url=URL"
-
type: Facebook
- type: Facebook
icon: "fab fa-facebook-square"
link: "https://www.facebook.com/sharer/sharer.php?title=TITLE&u=URL"
-
type: Telegram
- type: Telegram
icon: "fab fa-telegram"
link: "https://telegram.me/share?text=TITLE&url=URL"
link: "https://t.me/share/url?url=URL&text=TITLE"
# Uncomment below if you need to.
# -
# type: Linkedin
# icon: "fab fa-linkedin"
# link: "https://www.linkedin.com/sharing/share-offsite/?url=URL"
#
# -
# type: Weibo
# - type: Linkedin
# icon: "fab fa-linkedin"
# link: "https://www.linkedin.com/feed/?shareActive=true&shareUrl=URL"
#
# - type: Weibo
# icon: "fab fa-weibo"
# link: "http://service.weibo.com/share/share.php?title=TITLE&url=URL"
# link: "https://service.weibo.com/share/share.php?title=TITLE&url=URL"
#
# - type: Mastodon
# icon: "fa-brands fa-mastodon"
# # See: https://github.com/justinribeiro/share-to-mastodon#properties
# instances:
# - label: mastodon.social
# link: "https://mastodon.social/"
# - label: mastodon.online
# link: "https://mastodon.online/"
# - label: fosstodon.org
# link: "https://fosstodon.org/"
# - label: photog.social
# link: "https://photog.social/"
#
# - type: Bluesky
# icon: "fa-brands fa-bluesky"
# link: "https://bsky.app/intent/compose?text=TITLE%20URL"
#
# - type: Reddit
# icon: "fa-brands fa-square-reddit"
# link: "https://www.reddit.com/submit?url=URL&title=TITLE"
#
# - type: Threads
# icon: "fa-brands fa-square-threads"
# link: "https://www.threads.net/intent/post?text=TITLE%20URL"

View File

@@ -1,8 +1,8 @@
---
title: About
icon: fas fa-info
# the default layout is 'page'
icon: fas fa-info-circle
order: 4
---
> **Note**: Add Markdown syntax content to file `_tabs/about.md` and it will show up on this page.
> Add Markdown syntax content to file `_tabs/about.md`{: .filepath } and it will show up on this page.
{: .prompt-tip }

View File

@@ -1,7 +1,5 @@
---
layout: archives
title: Archives
icon: fas fa-archive
order: 3
---

View File

@@ -1,6 +1,5 @@
---
layout: categories
title: Categories
icon: fas fa-stream
order: 1
---

View File

@@ -1,6 +1,5 @@
---
layout: tags
title: Tags
icon: fas fa-tags
order: 2
---

8
app.js
View File

@@ -1,8 +0,0 @@
---
layout: compress
---
/* Registering Service Worker */
if('serviceWorker' in navigator) {
navigator.serviceWorker.register('{{ "/sw.js" | relative_url }}');
};

1
assets/lib Submodule

Submodule assets/lib added at f45457d2da

View File

@@ -1,60 +0,0 @@
---
layout: compress
# Atom Feed, reference: https://validator.w3.org/feed/docs/atom.html
---
{% capture source %}
<feed xmlns="http://www.w3.org/2005/Atom">
<id>{{ "/" | absolute_url }}</id>
<title>{{ site.title }}</title>
<subtitle>{{ site.description }}</subtitle>
<updated>{{ site.time | date_to_xmlschema }}</updated>
<author>
<name>{{ site.author }}</name>
<uri>{{ "/" | absolute_url }}</uri>
</author>
<link rel="self" type="application/atom+xml" href="{{ page.url | absolute_url }}"/>
<link rel="alternate" type="text/html" hreflang="{{ site.lang | default: 'en' }}"
href="{{ '/' | absolute_url }}"/>
<generator uri="https://jekyllrb.com/" version="{{ jekyll.version }}">Jekyll</generator>
<rights> © {{ 'now' | date: '%Y' }} {{ site.author }} </rights>
<icon>{{ site.baseurl }}/assets/img/favicons/favicon.ico</icon>
<logo>{{ site.baseurl }}/assets/img/favicons/favicon-96x96.png</logo>
{% for post in site.posts limit: 5 %}
{% assign post_absolute_url = post.url | absolute_url %}
<entry>
<title>{{ post.title }}</title>
<link href="{{ post_absolute_url }}" rel="alternate" type="text/html" title="{{ post.title }}" />
<published>{{ post.date | date_to_xmlschema }}</published>
{% if post.last_modified_at %}
<updated>{{ post.last_modified_at | date_to_xmlschema }}</updated>
{% else %}
<updated>{{ post.date | date_to_xmlschema }}</updated>
{% endif %}
<id>{{ post_absolute_url }}</id>
<content src="{{ post_absolute_url }}" />
<author>
<name>{{ site.author }}</name>
</author>
{% if post.categories %}
{% for category in post.categories %}
<category term="{{ category }}" />
{% endfor %}
{% endif %}
{% if post.summary %}
<summary>{{ post.summary | strip }}</summary>
{% else %}
<summary>
{% include no-linenos.html content=post.content %}
{{ content | strip_html | truncate: 400 }}
</summary>
{% endif %}
</entry>
{% endfor %}
</feed>
{% endcapture %}
{{ source | replace: '&', '&amp;' }}

View File

@@ -1,10 +0,0 @@
---
permalink: robots.txt
# The robots rules
---
User-agent: *
Disallow: /norobots/
Sitemap: {{ '/sitemap.xml' | absolute_url }}

61
sw.js
View File

@@ -1,61 +0,0 @@
---
layout: compress
# PWA service worker
---
self.importScripts('{{ "/assets/js/data/cache-list.js" | relative_url }}');
var cacheName = 'chirpy-{{ "now" | date: "%Y%m%d.%H%M" }}';
function isExcluded(url) {
const regex = /(^http(s)?|^\/)/; /* the regex for CORS url or relative url */
for (const rule of exclude) {
if (!regex.test(url) ||
url.indexOf(rule) != -1) {
return true;
}
}
return false;
}
self.addEventListener('install', (e) => {
self.skipWaiting();
e.waitUntil(
caches.open(cacheName).then((cache) => {
return cache.addAll(include);
})
);
});
self.addEventListener('fetch', (e) => {
e.respondWith(
caches.match(e.request).then((r) => {
/* console.log('[Service Worker] Fetching resource: ' + e.request.url); */
return r || fetch(e.request).then((response) => {
return caches.open(cacheName).then((cache) => {
if (!isExcluded(e.request.url)) {
/* console.log('[Service Worker] Caching new resource: ' + e.request.url); */
cache.put(e.request, response.clone());
}
return response;
});
});
})
);
});
self.addEventListener('activate', (e) => {
e.waitUntil(
caches.keys().then((keyList) => {
return Promise.all(keyList.map((key) => {
if(key !== cacheName) {
return caches.delete(key);
}
}));
})
);
});

View File

@@ -1,73 +0,0 @@
#!/usr/bin/env bash
#
# Deploy the content of _site to 'origin/<pages_branch>'
set -eu
PAGES_BRANCH="gh-pages"
_no_branch=false
_backup_dir="$(mktemp -d)"
init() {
if [[ -z ${GITHUB_ACTION+x} ]]; then
echo "ERROR: This script is not allowed to run outside of GitHub Action."
exit -1
fi
# Gemfile could be changed by `bundle install` in actions workflow
if [[ -n $(git ls-files | grep Gemfile.lock) && -n \
$(git status Gemfile.lock --porcelain) ]]; then
git checkout -- Gemfile.lock
fi
if [[ -z $(git branch -av | grep "$PAGES_BRANCH") ]]; then
_no_branch=true
git checkout -b "$PAGES_BRANCH"
else
git checkout "$PAGES_BRANCH"
fi
}
backup() {
mv _site/* "$_backup_dir"
mv .git "$_backup_dir"
# When adding custom domain from Github website,
# the CANME only exist on `gh-pages` branch
if [[ -f CNAME ]]; then
mv CNAME "$_backup_dir"
fi
}
flush() {
rm -rf ./*
rm -rf .[^.] .??*
shopt -s dotglob nullglob
mv "$_backup_dir"/* .
}
deploy() {
git config --global user.name "GitHub Actions"
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
git update-ref -d HEAD
git add -A
git commit -m "[Automation] Site update No.${GITHUB_RUN_NUMBER}"
if $_no_branch; then
git push -u origin "$PAGES_BRANCH"
else
git push -f
fi
}
main() {
init
backup
flush
deploy
}
main

54
tools/run.sh Executable file
View File

@@ -0,0 +1,54 @@
#!/usr/bin/env bash
#
# Run jekyll serve and then launch the site
prod=false
command="bundle exec jekyll s -l"
host="127.0.0.1"
help() {
echo "Usage:"
echo
echo " bash /path/to/run [options]"
echo
echo "Options:"
echo " -H, --host [HOST] Host to bind to."
echo " -p, --production Run Jekyll in 'production' mode."
echo " -h, --help Print this help information."
}
while (($#)); do
opt="$1"
case $opt in
-H | --host)
host="$2"
shift 2
;;
-p | --production)
prod=true
shift
;;
-h | --help)
help
exit 0
;;
*)
echo -e "> Unknown option: '$opt'\n"
help
exit 1
;;
esac
done
command="$command -H $host"
if $prod; then
command="JEKYLL_ENV=production $command"
fi
if [ -e /proc/1/cgroup ] && grep -q docker /proc/1/cgroup; then
command="$command --force_polling"
fi
echo -e "\n> $command\n"
eval "$command"

View File

@@ -1,45 +1,76 @@
#!/usr/bin/env bash
#
# Using HTML-proofer to test site.
# Build and test the site content
#
# Requirement: https://github.com/gjtorikian/html-proofer
# Requirement: html-proofer, jekyll
#
# Usage: bash /path/to/test.sh [indicated path]
# Usage: See help information
DEST=_site
URL_IGNORE=cdn.jsdelivr.net
set -eu
_build=false
SITE_DIR="_site"
_config="_config.yml"
_baseurl=""
help() {
echo "Build and test the site content"
echo
echo "Usage:"
echo
echo " bash ./tools/test.sh [options]"
echo " bash $0 [options]"
echo
echo "Options:"
echo " --build Run Jekyll build before test."
echo " -d, --dir <path> Specify the test path."
echo ' -c, --config "<config_a[,config_b[...]]>" Specify config file(s)'
echo " -h, --help Print this information."
}
if [[ -n $1 && -d $1 ]]; then
DEST=$1
fi
read_baseurl() {
if [[ $_config == *","* ]]; then
# multiple config
IFS=","
read -ra config_array <<<"$_config"
# reverse loop the config files
for ((i = ${#config_array[@]} - 1; i >= 0; i--)); do
_tmp_baseurl="$(grep '^baseurl:' "${config_array[i]}" | sed "s/.*: *//;s/['\"]//g;s/#.*//")"
if [[ -n $_tmp_baseurl ]]; then
_baseurl="$_tmp_baseurl"
break
fi
done
else
# single config
_baseurl="$(grep '^baseurl:' "$_config" | sed "s/.*: *//;s/['\"]//g;s/#.*//")"
fi
}
main() {
# clean up
if [[ -d $SITE_DIR ]]; then
rm -rf "$SITE_DIR"
fi
read_baseurl
# build
JEKYLL_ENV=production bundle exec jekyll b \
-d "$SITE_DIR$_baseurl" -c "$_config"
# test
bundle exec htmlproofer "$SITE_DIR" \
--disable-external \
--ignore-urls "/^http:\/\/127.0.0.1/,/^http:\/\/0.0.0.0/,/^http:\/\/localhost/"
}
while (($#)); do
opt="$1"
case $opt in
--build)
_build=true
shift
;;
-d | --dir)
if [[ ! -d $2 ]]; then
echo -e "Error: path '$2' doesn't exist\n"
help
exit 1
fi
DEST=$2
-c | --config)
_config="$2"
shift
shift
;;
@@ -55,13 +86,4 @@ while (($#)); do
esac
done
if $_build; then
JEKYLL_ENV=production bundle exec jekyll b
fi
bundle exec htmlproofer "$DEST" \
--disable-external \
--check-html \
--empty_alt_ignore \
--allow_hash_href \
--url_ignore $URL_IGNORE
main