feat: initial commit
This commit is contained in:
commit
5ea18cbecf
23 changed files with 768 additions and 0 deletions
19
.editorconfig
Normal file
19
.editorconfig
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
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
|
106
.forgejo/workflows/build.yml
Normal file
106
.forgejo/workflows/build.yml
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
name: "Build and publish docker image"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths-ignore:
|
||||||
|
- .gitignore
|
||||||
|
- README.md
|
||||||
|
- LICENSE
|
||||||
|
- docker-compose.yml
|
||||||
|
|
||||||
|
# Allow one concurrent deployment
|
||||||
|
concurrency:
|
||||||
|
group: "blog"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-site:
|
||||||
|
name: Build Jekyll Site
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
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)
|
||||||
|
|
||||||
|
# Build and test site
|
||||||
|
|
||||||
|
- name: Setup Ruby
|
||||||
|
uses: https://github.com/ruby/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: 3.3
|
||||||
|
bundler-cache: true
|
||||||
|
|
||||||
|
- name: Build site
|
||||||
|
run: bundle exec jekyll b -d _site
|
||||||
|
env:
|
||||||
|
JEKYLL_ENV: "production"
|
||||||
|
|
||||||
|
- name: Test site
|
||||||
|
run: |
|
||||||
|
bundle exec htmlproofer _site \
|
||||||
|
\-\-disable-external \
|
||||||
|
\-\-ignore-urls "/^http:\/\/127.0.0.1/,/^http:\/\/0.0.0.0/,/^http:\/\/localhost/"
|
||||||
|
|
||||||
|
# Upload artifact
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: forgejo/upload-artifact@v4 # temporary fork until actions/upload-artifact supports GHES
|
||||||
|
with:
|
||||||
|
name: jekyll-chirpy-blog
|
||||||
|
path: _site
|
||||||
|
retention-days: 1
|
||||||
|
|
||||||
|
build-docker:
|
||||||
|
name: Build Docker Image
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build-site
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
|
||||||
|
# Needed so that download artifacts knows it's a local repo
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Download artifacts
|
||||||
|
uses: forgejo/download-artifact@v4 # temporary fork until actions/download-artifact supports GHES
|
||||||
|
|
||||||
|
- name: Move to correct directory
|
||||||
|
run: |
|
||||||
|
mv jekyll-chirpy-blog _site
|
||||||
|
|
||||||
|
- name: Login to Docker Hub
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ vars.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
# - name: Set up QEMU
|
||||||
|
# uses: docker/setup-qemu-action@v3
|
||||||
|
#
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
# Login to fogejo registry
|
||||||
|
- name: Login to Forgejo ${{ env.GITHUB_SERVER_URL }} registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ${{ env.GITHUB_SERVER_URL }}
|
||||||
|
username: ${{ env.GITHUB_REPOSITORY_OWNER }}
|
||||||
|
password: ${{ secrets.FORGEJO_REGISTRY_TOKEN }}
|
||||||
|
|
||||||
|
# Check how to push to forgejo's repo
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v6
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: true
|
||||||
|
tags: git.martin.md/radu/blog:latest
|
16
.gitattributes
vendored
Normal file
16
.gitattributes
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# Set default behavior to automatically normalize line endings.
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# Force bash scripts to always use LF line endings so that if a repo is accessed
|
||||||
|
# in Unix via a file share from Windows, the scripts will work.
|
||||||
|
*.sh text eol=lf
|
||||||
|
|
||||||
|
# Force batch scripts to always use CRLF line endings so that if a repo is accessed
|
||||||
|
# in Windows via a file share from Linux, the scripts will work.
|
||||||
|
*.{cmd,[cC][mM][dD]} text eol=crlf
|
||||||
|
*.{bat,[bB][aA][tT]} text eol=crlf
|
||||||
|
|
||||||
|
# Denote all files that are truly binary and should not be modified.
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.ico binary
|
27
.gitignore
vendored
Normal file
27
.gitignore
vendored
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
# Bundler cache
|
||||||
|
.bundle
|
||||||
|
vendor
|
||||||
|
Gemfile.lock
|
||||||
|
|
||||||
|
# Jekyll cache
|
||||||
|
.jekyll-cache
|
||||||
|
.jekyll-metadata
|
||||||
|
_site
|
||||||
|
|
||||||
|
# RubyGems
|
||||||
|
*.gem
|
||||||
|
|
||||||
|
# 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
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "assets/lib"]
|
||||||
|
path = assets/lib
|
||||||
|
url = https://github.com/cotes2020/chirpy-static-assets.git
|
3
Dockerfile
Normal file
3
Dockerfile
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
FROM nginx:1.27.4@sha256:124b44bfc9ccd1f3cedf4b592d4d1e8bddb78b51ec2ed5056c52d3692baebc19
|
||||||
|
|
||||||
|
COPY _site /usr/share/nginx/html
|
14
Gemfile
Normal file
14
Gemfile
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
source "https://rubygems.org"
|
||||||
|
|
||||||
|
gem "jekyll-theme-chirpy", "~> 7.2", ">= 7.2.4"
|
||||||
|
|
||||||
|
gem "html-proofer", "~> 5.0", group: :test
|
||||||
|
|
||||||
|
platforms :mingw, :x64_mingw, :mswin, :jruby do
|
||||||
|
gem "tzinfo", ">= 1", "< 3"
|
||||||
|
gem "tzinfo-data"
|
||||||
|
end
|
||||||
|
|
||||||
|
gem "wdm", "~> 0.2.0", :platforms => [:mingw, :x64_mingw, :mswin]
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021 Cotes Chung
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
43
README.md
Normal file
43
README.md
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# Chirpy Starter
|
||||||
|
|
||||||
|
[][gem]
|
||||||
|
[][mit]
|
||||||
|
|
||||||
|
When installing the [**Chirpy**][chirpy] theme through [RubyGems.org][gem], Jekyll can only read files in the folders
|
||||||
|
`_data`, `_layouts`, `_includes`, `_sass` and `assets`, as well as a small part of options of the `_config.yml` file
|
||||||
|
from the theme's gem. If you have ever installed this theme gem, you can use the command
|
||||||
|
`bundle info --path jekyll-theme-chirpy` to locate these files.
|
||||||
|
|
||||||
|
The Jekyll team claims that this is to leave the ball in the user’s court, but this also results in users not being
|
||||||
|
able to enjoy the out-of-the-box experience when using feature-rich themes.
|
||||||
|
|
||||||
|
To fully use all the features of **Chirpy**, you need to copy the other critical files from the theme's gem to your
|
||||||
|
Jekyll site. The following is a list of targets:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
.
|
||||||
|
├── _config.yml
|
||||||
|
├── _plugins
|
||||||
|
├── _tabs
|
||||||
|
└── index.html
|
||||||
|
```
|
||||||
|
|
||||||
|
To save you time, and also in case you lose some files while copying, we extract those files/configurations of the
|
||||||
|
latest version of the **Chirpy** theme and the [CD][CD] workflow to here, so that you can start writing in minutes.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Check out the [theme's docs](https://github.com/cotes2020/jekyll-theme-chirpy/wiki).
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
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][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
|
227
_config.yml
Normal file
227
_config.yml
Normal file
|
@ -0,0 +1,227 @@
|
||||||
|
# The Site Configuration
|
||||||
|
|
||||||
|
# Import the theme
|
||||||
|
theme: jekyll-theme-chirpy
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# Change to your timezone › https://kevinnovak.github.io/Time-Zone-Picker
|
||||||
|
timezone: Europe/Zurich
|
||||||
|
|
||||||
|
# jekyll-seo-tag settings › https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md
|
||||||
|
# ↓ --------------------------
|
||||||
|
|
||||||
|
title: The Pensieve # the main title
|
||||||
|
|
||||||
|
# it will display as the subtitle
|
||||||
|
tagline: >-
|
||||||
|
A stream of consciousness archive about some stuff I've done.
|
||||||
|
|
||||||
|
description: >- # used by seo meta and the atom feed
|
||||||
|
|
||||||
|
# Fill in the protocol & hostname for your site.
|
||||||
|
# E.g. 'https://username.github.io', note that it does not end with a '/'.
|
||||||
|
url: "https://blog.martin.md"
|
||||||
|
|
||||||
|
github:
|
||||||
|
username: Radu-C-Martin # change to your GitHub username
|
||||||
|
|
||||||
|
mastodon:
|
||||||
|
username: radu@mstdn.md
|
||||||
|
|
||||||
|
social:
|
||||||
|
# Change to your full name.
|
||||||
|
# It will be displayed as the default author of the posts and the copyright owner in the Footer
|
||||||
|
name: Radu C. Martin
|
||||||
|
email: contact@martin.md
|
||||||
|
links:
|
||||||
|
- https://blog.martin.md
|
||||||
|
# The first element serves as the copyright owner's link
|
||||||
|
- https://github.com/Radu-C-Martin # change to your GitHub homepage
|
||||||
|
# Uncomment below to add more social links
|
||||||
|
# - https://www.facebook.com/username
|
||||||
|
- https://www.linkedin.com/in/Radu-C-Martin
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# ↑ --------------------------
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# Note: Keep empty will follow the system prefer color by default,
|
||||||
|
# and there will be a toggle to switch the theme between dark and light
|
||||||
|
# on the bottom left of the sidebar.
|
||||||
|
#
|
||||||
|
# Available options:
|
||||||
|
#
|
||||||
|
# light — Use the light color scheme
|
||||||
|
# dark — Use the dark color scheme
|
||||||
|
#
|
||||||
|
theme_mode: # [light | dark]
|
||||||
|
|
||||||
|
# The CDN endpoint for media resources.
|
||||||
|
# Notice that once it is assigned, the CDN url
|
||||||
|
# will be added to all media resources (site avatar, posts' images, audio and video files) paths starting with '/'
|
||||||
|
#
|
||||||
|
# e.g. 'https://cdn.com'
|
||||||
|
cdn:
|
||||||
|
|
||||||
|
# the avatar on sidebar, support local or CORS resources
|
||||||
|
avatar: '/assets/avatar.png'
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
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: "↩︎"
|
||||||
|
syntax_highlighter: rouge
|
||||||
|
syntax_highlighter_opts: # Rouge Options › https://github.com/jneen/rouge#full-options
|
||||||
|
css_class: highlight
|
||||||
|
# default_lang: console
|
||||||
|
span:
|
||||||
|
line_numbers: false
|
||||||
|
block:
|
||||||
|
line_numbers: true
|
||||||
|
start_line: 1
|
||||||
|
|
||||||
|
collections:
|
||||||
|
tabs:
|
||||||
|
output: true
|
||||||
|
sort_by: order
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
- 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.
|
||||||
|
# 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: ""
|
||||||
|
type: tabs # see `site.collections`
|
||||||
|
values:
|
||||||
|
layout: page
|
||||||
|
permalink: /:title/
|
||||||
|
|
||||||
|
sass:
|
||||||
|
style: compressed
|
||||||
|
|
||||||
|
compress_html:
|
||||||
|
clippings: all
|
||||||
|
comments: all
|
||||||
|
endings: all
|
||||||
|
profile: false
|
||||||
|
blanklines: false
|
||||||
|
ignore:
|
||||||
|
envs: [development]
|
||||||
|
|
||||||
|
exclude:
|
||||||
|
- "*.gem"
|
||||||
|
- "*.gemspec"
|
||||||
|
- docs
|
||||||
|
- tools
|
||||||
|
- README.md
|
||||||
|
- LICENSE
|
||||||
|
- purgecss.js
|
||||||
|
- rollup.config.js
|
||||||
|
- "package*.json"
|
||||||
|
|
||||||
|
jekyll-archives:
|
||||||
|
enabled: [categories, tags]
|
||||||
|
layouts:
|
||||||
|
category: category
|
||||||
|
tag: tag
|
||||||
|
permalinks:
|
||||||
|
tag: /tags/:name/
|
||||||
|
category: /categories/:name/
|
38
_data/contact.yml
Normal file
38
_data/contact.yml
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# The contact options.
|
||||||
|
# icons powered by <https://fontawesome.com/>
|
||||||
|
#
|
||||||
|
- type: github
|
||||||
|
icon: "fab fa-github"
|
||||||
|
|
||||||
|
# - type: email
|
||||||
|
# icon: "fas fa-envelope"
|
||||||
|
# noblank: true # open link in current tab
|
||||||
|
|
||||||
|
- type: mastodon
|
||||||
|
icon: 'fab fa-mastodon'
|
||||||
|
# Fill with your Mastodon account page, rel="me" will be applied for verification
|
||||||
|
url: 'https://mstdn.md/@radu'
|
||||||
|
|
||||||
|
# - type: linkedin
|
||||||
|
# icon: 'fab fa-linkedin' # icons powered by <https://fontawesome.com/>
|
||||||
|
# url: 'www.linkedin.com/in/radu-c-martin'
|
||||||
|
|
||||||
|
- type: matrix
|
||||||
|
icon: 'fa-solid fa-message'
|
||||||
|
url: 'https://matrix.to/#/@radu:martin.md'
|
||||||
|
#
|
||||||
|
# - 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
|
||||||
|
|
||||||
|
- type: rss
|
||||||
|
icon: "fas fa-rss"
|
||||||
|
noblank: true
|
50
_data/share.yml
Normal file
50
_data/share.yml
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# Sharing options at the bottom of the post.
|
||||||
|
# Icons from <https://fontawesome.com/>
|
||||||
|
|
||||||
|
platforms:
|
||||||
|
- type: Twitter
|
||||||
|
icon: "fa-brands fa-square-x-twitter"
|
||||||
|
link: "https://twitter.com/intent/tweet?text=TITLE&url=URL"
|
||||||
|
|
||||||
|
- type: Facebook
|
||||||
|
icon: "fab fa-facebook-square"
|
||||||
|
link: "https://www.facebook.com/sharer/sharer.php?title=TITLE&u=URL"
|
||||||
|
|
||||||
|
- type: Telegram
|
||||||
|
icon: "fab fa-telegram"
|
||||||
|
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
|
||||||
|
# icon: "fab fa-weibo"
|
||||||
|
# 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"
|
14
_plugins/posts-lastmod-hook.rb
Normal file
14
_plugins/posts-lastmod-hook.rb
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
#
|
||||||
|
# Check for changed posts
|
||||||
|
|
||||||
|
Jekyll::Hooks.register :posts, :post_init do |post|
|
||||||
|
|
||||||
|
commit_num = `git rev-list --count HEAD "#{ post.path }"`
|
||||||
|
|
||||||
|
if commit_num.to_i > 1
|
||||||
|
lastmod_date = `git log -1 --pretty="%ad" --date=iso "#{ post.path }"`
|
||||||
|
post.data['last_modified_at'] = lastmod_date
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
1
_posts/.placeholder
Normal file
1
_posts/.placeholder
Normal file
|
@ -0,0 +1 @@
|
||||||
|
|
8
_tabs/about.md
Normal file
8
_tabs/about.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
# the default layout is 'page'
|
||||||
|
icon: fas fa-info-circle
|
||||||
|
order: 4
|
||||||
|
---
|
||||||
|
|
||||||
|
> Add Markdown syntax content to file `_tabs/about.md`{: .filepath } and it will show up on this page.
|
||||||
|
{: .prompt-tip }
|
5
_tabs/archives.md
Normal file
5
_tabs/archives.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
layout: archives
|
||||||
|
icon: fas fa-archive
|
||||||
|
order: 3
|
||||||
|
---
|
5
_tabs/categories.md
Normal file
5
_tabs/categories.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
layout: categories
|
||||||
|
icon: fas fa-stream
|
||||||
|
order: 1
|
||||||
|
---
|
5
_tabs/tags.md
Normal file
5
_tabs/tags.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
layout: tags
|
||||||
|
icon: fas fa-tags
|
||||||
|
order: 2
|
||||||
|
---
|
BIN
assets/avatar.png
Normal file
BIN
assets/avatar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 180 KiB |
16
docker-compose.yml
Normal file
16
docker-compose.yml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
services:
|
||||||
|
|
||||||
|
blog:
|
||||||
|
image: git.martin.md/radu/blog:latest@sha256:a10584d7ba9f02102773cbd59e6651d5fcafdd9abec40dfbc36d5cce5496eb36
|
||||||
|
restart: unless-stopped
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.blog.rule=Host(`${DC_BLOG_HOSTNAME:-blog.martin.md}`)"
|
||||||
|
- "traefik.http.routers.blog.entrypoints=websecure"
|
||||||
|
networks:
|
||||||
|
- traefik
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik:
|
||||||
|
external: true
|
||||||
|
|
4
index.html
Normal file
4
index.html
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
layout: home
|
||||||
|
# Index page
|
||||||
|
---
|
54
tools/run.sh
Executable file
54
tools/run.sh
Executable 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"
|
89
tools/test.sh
Executable file
89
tools/test.sh
Executable file
|
@ -0,0 +1,89 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Build and test the site content
|
||||||
|
#
|
||||||
|
# Requirement: html-proofer, jekyll
|
||||||
|
#
|
||||||
|
# Usage: See help information
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
SITE_DIR="_site"
|
||||||
|
|
||||||
|
_config="_config.yml"
|
||||||
|
|
||||||
|
_baseurl=""
|
||||||
|
|
||||||
|
help() {
|
||||||
|
echo "Build and test the site content"
|
||||||
|
echo
|
||||||
|
echo "Usage:"
|
||||||
|
echo
|
||||||
|
echo " bash $0 [options]"
|
||||||
|
echo
|
||||||
|
echo "Options:"
|
||||||
|
echo ' -c, --config "<config_a[,config_b[...]]>" Specify config file(s)'
|
||||||
|
echo " -h, --help Print this information."
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
-c | --config)
|
||||||
|
_config="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h | --help)
|
||||||
|
help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# unknown option
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
main
|
Loading…
Add table
Add a link
Reference in a new issue