🎉 Initial commit
|
@ -0,0 +1,140 @@
|
|||
|
||||
# Created by https://www.toptal.com/developers/gitignore/api/node,
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=node,
|
||||
|
||||
### Node ###
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variables file
|
||||
.env
|
||||
.env.test
|
||||
.env.production
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/node,
|
||||
|
||||
# Created by https://www.toptal.com/developers/gitignore/api/hugo
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=hugo
|
||||
|
||||
### Hugo ###
|
||||
# Generated files by hugo
|
||||
/public/
|
||||
/resources/_gen/
|
||||
|
||||
# Executable may be added to repository
|
||||
hugo.exe
|
||||
hugo.darwin
|
||||
hugo.linux
|
||||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/hugo
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"printWidth": 100,
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["*.html"],
|
||||
"options": {
|
||||
"parser": "go-template"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2021 James Panther (https://jamespanther.com)
|
||||
|
||||
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.
|
|
@ -0,0 +1,201 @@
|
|||
# Hugo Congo Theme
|
||||
|
||||
Congo is designed to be a lightweight and fast theme for Hugo. It's based upon Tailwind CSS with a clean and minimalist design.
|
||||
|
||||
## Features
|
||||
|
||||
- Built with [Tailwind CSS JIT](https://tailwindcss.com/docs/just-in-time-mode) for minified stylesheets without any excess code
|
||||
- Theme can be easily edited using simple [Tailwind colour definitions and styles](https://tailwindcss.com/docs)
|
||||
- Dark mode support (auto-switching based upon browser)
|
||||
- Highly customisable [configuration](#configuration)
|
||||
- Custom content types and menus
|
||||
- Custom taxonomies
|
||||
- SVG social icons from [FontAwesome 5](https://fontawesome.com/)
|
||||
- SEO friendly
|
||||
- [Fathom Analytics](https://usefathom.com/ref/RLAJSV) and Google Analytics
|
||||
- Favicons support - Generate using [favicon.io](https://favicon.io)
|
||||
- [Comments support](https://gohugo.io/content-management/comments/)
|
||||
|
||||
## Installation
|
||||
|
||||
Simply follow the standard Hugo [Quick Start](https://gohugo.io/getting-started/quick-start/) procedure to get up and running quickly.
|
||||
|
||||
Detailed instructions can be found below.
|
||||
|
||||
### 1. Install Hugo
|
||||
|
||||
You can find specific instructions for your platform in the official [Hugo docs](https://gohugo.io/getting-started/installing.).
|
||||
|
||||
Make sure you are using **Hugo version 0.86.1** or later as the theme takes advantage of some of the latest Hugo features.
|
||||
|
||||
### 2. Create a new site
|
||||
|
||||
Run the command `hugo new site mywebsite` to create a new Hugo site in a folder named `mywebsite`.
|
||||
|
||||
### 3. Download the Congo theme
|
||||
|
||||
There are a couple of ways to install the Congo theme into your Hugo website. The git method is the easiest to keep the theme up-to-date, but you can also download and install manually if you don't have git available.
|
||||
|
||||
#### Install using git
|
||||
|
||||
Change into the directory for your Hugo website, initialise a new repository and add Congo as a submodule.
|
||||
|
||||
```bash
|
||||
cd mywebsite
|
||||
git init
|
||||
git submodule add https://github.com/jpanther/hugo-congo.git themes/congo
|
||||
```
|
||||
|
||||
_**Note:** You need to substitute `mywebsite` for the correct folder name you used in Step 2._
|
||||
|
||||
#### Install manually
|
||||
|
||||
Download the latest version of the theme from: [https://github.com/jpanther/hugo-congo/archive/master.zip](https://github.com/jpanther/hugo-congo/archive/master.zip)
|
||||
|
||||
Extract the archive and you should have a folder named `hugo-congo-master`.
|
||||
|
||||
Rename the folder to `congo` and move it to the `themes/` directory inside your `mywebsite` folder.
|
||||
|
||||
_**Note:** You need to substitute `mywebsite` for the correct folder name you used in Step 2._
|
||||
|
||||
### 4. Add Congo to your configuration file
|
||||
|
||||
Open the `config.toml` file in the root of your website and add `theme = "congo"`
|
||||
|
||||
You're now all set up to use Congo. From here you can add some content and start the Hugo server.
|
||||
|
||||
Refer to the Hugo docs for more information or read the next section to learn more about configuring the theme.
|
||||
|
||||
## Configuration
|
||||
|
||||
Congo is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured.
|
||||
|
||||
The theme ships with a default configuration that gets you up and running with a basic blog or static website. This default configuration can be found in the `themes/congo/config/_default/` folder.
|
||||
|
||||
> Configuration files bundled with the theme are provided in TOML format as this is the default Hugo syntax. Feel free to convert your config to YAML or JSON as you wish.
|
||||
|
||||
The default theme configuration can be overridden on a per-setting basis by copying the relevant setting from the `themes/congo/config/_default/` to your `config.toml` file in the root of your website. Any settings in your config file will take precedence over the theme defaults.
|
||||
|
||||
### Getting started
|
||||
|
||||
The config files that ship with Congo contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.
|
||||
|
||||
A few things you need to set for a new installation:
|
||||
|
||||
```toml
|
||||
# config.toml
|
||||
|
||||
theme = "congo"
|
||||
baseURL = "https://your_domain.com"
|
||||
languageCode = "en-AU"
|
||||
|
||||
title = "My awesome website"
|
||||
```
|
||||
|
||||
It's also useful to add an author configuration by copying the settings from the `themes/congo/config/_default/author.toml` file. You can also add links to your profiles here to enable them in the theme.
|
||||
|
||||
```toml
|
||||
# config.toml
|
||||
|
||||
[author]
|
||||
name = "Your name"
|
||||
twitter = "https://twitter.com/username"
|
||||
```
|
||||
|
||||
### Organising content
|
||||
|
||||
By default, Congo doesn't force you to use a particular content type. In doing so you are free to define your content as you wish. You might prefer _pages_ for a static site, _posts_ for a blog, or _projects_ for a portfolio.
|
||||
|
||||
The same logic applies to taxonomies. Some people prefer to use _tags_ and _categories_, others prefer to use _topics_.
|
||||
|
||||
Hugo defaults to using posts, tags and categories out of the box and this will work fine if that's what you want. If you wish to customise this, however, you can do so by creating the following files:
|
||||
|
||||
```toml
|
||||
# config.toml
|
||||
|
||||
[taxonomies]
|
||||
topic = "topics"
|
||||
```
|
||||
|
||||
This will replace the default _tags_ and _categories_ with _topics_. Refer to the [Hugo Taxonomy docs](https://gohugo.io/content-management/taxonomies/) for more information on naming taxonomies.
|
||||
|
||||
When you create a new taxonomy, you will need to adjust the navigation links on the website to point to the new sections:
|
||||
|
||||
```toml
|
||||
# config.toml
|
||||
|
||||
[[menu.main]]
|
||||
name = "Blog"
|
||||
pageRef = "/posts/"
|
||||
weight = 10
|
||||
|
||||
[[menu.main]]
|
||||
name = "Topics"
|
||||
pageRef = "/topics/"
|
||||
weight = 20
|
||||
```
|
||||
|
||||
## Customising the theme
|
||||
|
||||
There are a couple of ways you can make style changes to Congo.
|
||||
|
||||
If you just need to add or override some simple styles, you can do so by creating a `custom.css` file in your project's `static/css/` folder. This file will be loaded automatically after the theme's default styles.
|
||||
|
||||
Alternatively, if you'd like to make a major change, you can take advantage of Tailwind CSS's JIT compiler and rebuild the entire theme CSS from scratch.
|
||||
|
||||
> **Note:** Building the theme manually is intended for advanced users.
|
||||
|
||||
Change into the `themes/congo/` folder and install the project dependencies.
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
Once installed, you can edit the `themes/congo/tailwind.config.js` to change the styles that are applied throughout the theme. You can also adjust specific styles in `themes/congo/assets/css/main.css`.
|
||||
|
||||
To allow for easy theme colour changes, Congo defines a `primary` and `secondary` colour palette that is used throughout the theme. In order to change the colour across the entire theme, simply edit the `tailwind.config.js` file accordingly.
|
||||
|
||||
For example, to change to a green colour scheme, you could apply these changes:
|
||||
|
||||
```js
|
||||
// themes/congo/tailwind.config.js
|
||||
|
||||
theme: {
|
||||
colors: {
|
||||
transparent: "transparent",
|
||||
white: colors.white,
|
||||
gray: colors.gray,
|
||||
primary: colors.lime,
|
||||
secondary: colors.teal,
|
||||
},
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
For a full list of colours available, and their corresponding configuration values, see the official [Tailwind docs](https://tailwindcss.com/docs/customizing-colors#color-palette-reference).
|
||||
|
||||
After editing the configuration, you need to rebuild the theme's stylesheets.
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
This will automatically output a minified CSS file to `/themes/congo/static/css/main.css`.
|
||||
|
||||
To aid with testing style changes, you can also run the Tailwind JIT comiler in watch mode.
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Now whenever you make a change, the (non-minified) CSS files will be rebuilt automatically. This mode is useful to run when using `hugo server` to preview your site during development. Remember to perform a full build before publishing your website.
|
||||
|
||||
## Contributing
|
||||
|
||||
Congo is still very much a work in progress. I intend to keep adding features and making changes as required.
|
||||
|
||||
### Bugs & Suggestions
|
||||
|
||||
Feel free to get in touch with any issues or suggestions for new features you'd like to see. Please use GitHub issues for all bug reports and suggestions to help keep everything in one spot.
|
||||
|
||||
If you're able to fix a bug or implement a new feature, I welcome PRs for this purpose.
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
description: ""
|
||||
slug: "{{ .File.BaseFileName }}"
|
||||
topics: []
|
||||
---
|
|
@ -0,0 +1,362 @@
|
|||
@tailwind base;
|
||||
@tailwind components;
|
||||
|
||||
/* Scale SVG icons to text size */
|
||||
.icon svg {
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
}
|
||||
|
||||
/* Heading anchors */
|
||||
.prose .heading-anchor {
|
||||
@apply absolute top-0 w-6 no-underline opacity-0 -left-6;
|
||||
}
|
||||
.prose .heading-anchor:hover {
|
||||
@apply underline bg-transparent opacity-100 text-primary-600;
|
||||
}
|
||||
.prose h2:focus > .heading-anchor,
|
||||
.prose h2:hover > .heading-anchor,
|
||||
.prose h3:focus > .heading-anchor,
|
||||
.prose h3:hover > .heading-anchor,
|
||||
.prose h4:focus > .heading-anchor,
|
||||
.prose h4:hover > .heading-anchor {
|
||||
@apply opacity-100;
|
||||
}
|
||||
|
||||
.no-prose > p {
|
||||
@apply mt-0 last:mb-0;
|
||||
}
|
||||
|
||||
/* -- Chroma Highlight -- */
|
||||
/* Background */
|
||||
.prose .chroma {
|
||||
@apply text-gray-700 rounded-md bg-gray-50 dark:bg-gray-700 dark:text-gray-200;
|
||||
}
|
||||
/* Other */
|
||||
.chroma .x {
|
||||
}
|
||||
/* Error */
|
||||
.chroma .err {
|
||||
}
|
||||
/* LineTableTD */
|
||||
.chroma .lntd,
|
||||
.chroma .lntd pre {
|
||||
@apply p-0 m-0 align-top border-none;
|
||||
}
|
||||
/* LineTable */
|
||||
.chroma .lntable {
|
||||
@apply block w-auto px-4 py-3 overflow-hidden text-base;
|
||||
border-spacing: 0;
|
||||
}
|
||||
/* LineHighlight */
|
||||
.chroma .hl {
|
||||
@apply block w-auto px-4 -mx-4 bg-primary-100 dark:bg-primary-900;
|
||||
}
|
||||
.chroma .lntd .hl {
|
||||
@apply p-0 m-0;
|
||||
}
|
||||
/* LineNumbersTable */
|
||||
.chroma .lnt {
|
||||
@apply text-gray-600 dark:text-gray-300;
|
||||
margin-right: 0.4em;
|
||||
padding: 0 0.4em 0 0.4em;
|
||||
}
|
||||
/* LineNumbers */
|
||||
.chroma .ln {
|
||||
@apply text-gray-600 dark:text-gray-300;
|
||||
margin-right: 0.4em;
|
||||
padding: 0 0.4em 0 0.4em;
|
||||
}
|
||||
/* Keyword */
|
||||
.chroma .k {
|
||||
@apply text-primary-600 dark:text-primary-300;
|
||||
}
|
||||
/* KeywordConstant */
|
||||
.chroma .kc {
|
||||
@apply font-semibold text-secondary-400 dark:text-secondary-500;
|
||||
}
|
||||
/* KeywordDeclaration */
|
||||
.chroma .kd {
|
||||
@apply text-primary-600 dark:text-primary-300;
|
||||
}
|
||||
/* KeywordNamespace */
|
||||
.chroma .kn {
|
||||
@apply text-primary-600 dark:text-primary-300;
|
||||
}
|
||||
/* KeywordPseudo */
|
||||
.chroma .kp {
|
||||
@apply text-primary-600 dark:text-primary-300;
|
||||
}
|
||||
/* KeywordReserved */
|
||||
.chroma .kr {
|
||||
@apply text-primary-600 dark:text-primary-300;
|
||||
}
|
||||
/* KeywordType */
|
||||
.chroma .kt {
|
||||
@apply text-secondary-400 dark:text-secondary-600;
|
||||
}
|
||||
/* Name */
|
||||
.chroma .n {
|
||||
@apply text-secondary-900 dark:text-secondary-200;
|
||||
}
|
||||
/* NameAttribute */
|
||||
.chroma .na {
|
||||
@apply text-secondary-800 dark:text-secondary-300;
|
||||
}
|
||||
/* NameBuiltin */
|
||||
.chroma .nb {
|
||||
@apply text-secondary-800 dark:text-secondary-300;
|
||||
}
|
||||
/* NameBuiltinPseudo */
|
||||
.chroma .bp {
|
||||
@apply text-secondary-800 dark:text-secondary-300;
|
||||
}
|
||||
/* NameClass */
|
||||
.chroma .nc {
|
||||
@apply text-primary-600 dark:text-primary-300;
|
||||
}
|
||||
/* NameConstant */
|
||||
.chroma .no {
|
||||
@apply font-semibold text-secondary-400 dark:text-secondary-500;
|
||||
}
|
||||
/* NameDecorator */
|
||||
.chroma .nd {
|
||||
@apply text-secondary-900 dark:text-secondary-200;
|
||||
}
|
||||
/* NameEntity */
|
||||
.chroma .ni {
|
||||
@apply text-secondary-900 dark:text-secondary-200;
|
||||
}
|
||||
/* NameException */
|
||||
.chroma .ne {
|
||||
@apply font-semibold text-secondary-400 dark:text-secondary-500;
|
||||
}
|
||||
/* NameFunction */
|
||||
.chroma .nf {
|
||||
@apply text-secondary-600 dark:text-secondary-500;
|
||||
}
|
||||
/* NameFunctionMagic */
|
||||
.chroma .fm {
|
||||
@apply text-primary-600 dark:text-primary-300;
|
||||
}
|
||||
/* NameLabel */
|
||||
.chroma .nl {
|
||||
@apply text-secondary-900 dark:text-secondary-200;
|
||||
}
|
||||
/* NameNamespace */
|
||||
.chroma .nn {
|
||||
@apply text-primary-600 dark:text-primary-300;
|
||||
}
|
||||
/* NameOther */
|
||||
.chroma .nx {
|
||||
@apply text-secondary-800 dark:text-secondary-300;
|
||||
}
|
||||
/* NameProperty */
|
||||
.chroma .py {
|
||||
color: #cebc3a;
|
||||
}
|
||||
/* NameTag */
|
||||
.chroma .nt {
|
||||
@apply text-secondary-800 dark:text-secondary-300;
|
||||
}
|
||||
/* NameVariable */
|
||||
.chroma .nv {
|
||||
@apply text-secondary-400 dark:text-secondary-600;
|
||||
}
|
||||
/* NameVariableClass */
|
||||
.chroma .vc {
|
||||
@apply text-primary-600 dark:text-primary-300;
|
||||
}
|
||||
/* NameVariableGlobal */
|
||||
.chroma .vg {
|
||||
@apply font-semibold text-secondary-400 dark:text-secondary-500;
|
||||
}
|
||||
/* NameVariableInstance */
|
||||
.chroma .vi {
|
||||
@apply text-secondary-400 dark:text-secondary-600;
|
||||
}
|
||||
/* NameVariableMagic */
|
||||
.chroma .vm {
|
||||
@apply text-secondary-400 dark:text-secondary-600;
|
||||
}
|
||||
/* Literal */
|
||||
.chroma .l {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralDate */
|
||||
.chroma .ld {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralString */
|
||||
.chroma .s {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralStringAffix */
|
||||
.chroma .sa {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralStringBacktick */
|
||||
.chroma .sb {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralStringChar */
|
||||
.chroma .sc {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralStringDelimiter */
|
||||
.chroma .dl {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralStringDoc */
|
||||
.chroma .sd {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralStringDouble */
|
||||
.chroma .s2 {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralStringEscape */
|
||||
.chroma .se {
|
||||
@apply font-semibold text-secondary-400 dark:text-secondary-500;
|
||||
}
|
||||
/* LiteralStringHeredoc */
|
||||
.chroma .sh {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralStringInterpol */
|
||||
.chroma .si {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralStringOther */
|
||||
.chroma .sx {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralStringRegex */
|
||||
.chroma .sr {
|
||||
@apply font-semibold text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralStringSingle */
|
||||
.chroma .s1 {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralStringSymbol */
|
||||
.chroma .ss {
|
||||
@apply font-semibold text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* LiteralNumber */
|
||||
.chroma .m {
|
||||
@apply text-secondary-400 dark:text-secondary-600;
|
||||
}
|
||||
/* LiteralNumberBin */
|
||||
.chroma .mb {
|
||||
@apply text-secondary-400 dark:text-secondary-600;
|
||||
}
|
||||
/* LiteralNumberFloat */
|
||||
.chroma .mf {
|
||||
@apply text-secondary-400 dark:text-secondary-600;
|
||||
}
|
||||
/* LiteralNumberHex */
|
||||
.chroma .mh {
|
||||
@apply text-secondary-400 dark:text-secondary-600;
|
||||
}
|
||||
/* LiteralNumberInteger */
|
||||
.chroma .mi {
|
||||
@apply text-secondary-400 dark:text-secondary-600;
|
||||
}
|
||||
/* LiteralNumberIntegerLong */
|
||||
.chroma .il {
|
||||
@apply text-secondary-400 dark:text-secondary-600;
|
||||
}
|
||||
/* LiteralNumberOct */
|
||||
.chroma .mo {
|
||||
@apply text-secondary-400 dark:text-secondary-600;
|
||||
}
|
||||
/* Operator */
|
||||
.chroma .o {
|
||||
@apply text-primary-600;
|
||||
}
|
||||
/* OperatorWord */
|
||||
.chroma .ow {
|
||||
@apply font-semibold text-primary-400 dark:text-primary-600;
|
||||
}
|
||||
/* Punctuation */
|
||||
.chroma .p {
|
||||
}
|
||||
/* Comment */
|
||||
.chroma .c {
|
||||
@apply italic text-gray-400 dark:text-gray-500;
|
||||
}
|
||||
/* CommentHashbang */
|
||||
.chroma .ch {
|
||||
@apply italic font-semibold text-gray-400 dark:text-gray-500;
|
||||
}
|
||||
/* CommentMultiline */
|
||||
.chroma .cm {
|
||||
@apply italic text-gray-400 dark:text-gray-500;
|
||||
}
|
||||
/* CommentSingle */
|
||||
.chroma .c1 {
|
||||
@apply italic text-gray-400 dark:text-gray-500;
|
||||
}
|
||||
/* CommentSpecial */
|
||||
.chroma .cs {
|
||||
@apply italic text-gray-400 dark:text-gray-500;
|
||||
}
|
||||
/* CommentPreproc */
|
||||
.chroma .cp {
|
||||
@apply italic text-gray-400 dark:text-gray-500;
|
||||
}
|
||||
/* CommentPreprocFile */
|
||||
.chroma .cpf {
|
||||
@apply italic text-gray-400 dark:text-gray-500;
|
||||
}
|
||||
/* Generic */
|
||||
.chroma .g {
|
||||
}
|
||||
/* GenericDeleted */
|
||||
.chroma .gd {
|
||||
}
|
||||
/* GenericEmph */
|
||||
.chroma .ge {
|
||||
@apply italic;
|
||||
}
|
||||
/* GenericError */
|
||||
.chroma .gr {
|
||||
}
|
||||
/* GenericHeading */
|
||||
.chroma .gh {
|
||||
@apply font-semibold text-gray-500;
|
||||
}
|
||||
/* GenericInserted */
|
||||
.chroma .gi {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* GenericOutput */
|
||||
.chroma .go {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* GenericPrompt */
|
||||
.chroma .gp {
|
||||
@apply text-primary-800 dark:text-primary-400;
|
||||
}
|
||||
/* GenericStrong */
|
||||
.chroma .gs {
|
||||
@apply font-semibold;
|
||||
}
|
||||
/* GenericSubheading */
|
||||
.chroma .gu {
|
||||
@apply text-gray-500;
|
||||
}
|
||||
/* GenericTraceback */
|
||||
.chroma .gt {
|
||||
@apply text-gray-500;
|
||||
}
|
||||
/* GenericUnderline */
|
||||
.chroma .gl {
|
||||
@apply underline;
|
||||
}
|
||||
/* TextWhitespace */
|
||||
.chroma .w {
|
||||
}
|
||||
|
||||
@tailwind utilities;
|
|
@ -0,0 +1 @@
|
|||
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="exclamation-triangle" class="svg-inline--fa fa-exclamation-triangle fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"></path></svg>
|
After Width: | Height: | Size: 708 B |
|
@ -0,0 +1 @@
|
|||
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -0,0 +1 @@
|
|||
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="keybase" class="svg-inline--fa fa-keybase fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0-8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14 429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.38-61.76 236.25-38.59 34.2 10.05 67.45.69 84.74-23.84.72-1 1.2-2.16 1.85-3.22a156.09 156.09 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.32c0-38.58-13-77.46-35.91-110.92zM142.37 128.58l-15.7-.93-1.39 21.79 13.13.78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1-11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.35 144.35 0 0 0-7 19.17zm148.42 172.18a10.51 10.51 0 0 1-14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1-11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1-10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.19s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1-1.74 13.44zM187.44 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18z"></path></svg>
|
After Width: | Height: | Size: 1.7 KiB |
|
@ -0,0 +1 @@
|
|||
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="linkedin" class="svg-inline--fa fa-linkedin fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg>
|
After Width: | Height: | Size: 660 B |
|
@ -0,0 +1 @@
|
|||
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitter" class="svg-inline--fa fa-twitter fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg>
|
After Width: | Height: | Size: 1.0 KiB |
|
@ -0,0 +1,9 @@
|
|||
[author]
|
||||
# name = "Your name here"
|
||||
# image = "/img/author.jpg"
|
||||
# email = "hello@your_domain.com"
|
||||
|
||||
# twitter = "https://twitter.com/username"
|
||||
# github = "https://github.com/username"
|
||||
# keybase = "https://keybase.io/username"
|
||||
# linkedin = "https://linkedin.com/in/username/"
|
|
@ -0,0 +1,9 @@
|
|||
theme = "congo"
|
||||
# baseURL = "https://your_domain.com/"
|
||||
languageCode = "en"
|
||||
|
||||
title = "Congo"
|
||||
# copyright = "Copy, _right?_ :thinking_face:"
|
||||
|
||||
enableEmoji = true
|
||||
enableRobotsTXT = true
|
|
@ -0,0 +1,5 @@
|
|||
[highlight]
|
||||
noClasses = false
|
||||
|
||||
[goldmark.renderer]
|
||||
unsafe = true
|
|
@ -0,0 +1,14 @@
|
|||
[[main]]
|
||||
name = "Blog"
|
||||
pageRef = "posts"
|
||||
weight = 10
|
||||
|
||||
[[main]]
|
||||
name = "Categories"
|
||||
pageRef = "categories"
|
||||
weight = 20
|
||||
|
||||
[[main]]
|
||||
name = "Tags"
|
||||
pageRef = "tags"
|
||||
weight = 30
|
|
@ -0,0 +1,9 @@
|
|||
[verification]
|
||||
# google = ""
|
||||
# bing = ""
|
||||
# pinterest = ""
|
||||
# yandex = ""
|
||||
|
||||
[fathomAnalytics]
|
||||
# site = "ABC12345"
|
||||
# domain = "llama.yoursite.com"
|
|
@ -0,0 +1,7 @@
|
|||
{{ define "main" }}
|
||||
<h1 class="mb-3 text-4xl font-extrabold">Page Not Found 🤷♂️</h1>
|
||||
<p class="mt-8 mb-12 text-gray-400 dark:text-gray-500">Error 404</p>
|
||||
<div class="prose dark:prose-light">
|
||||
<p>It seems that the page you've requested does not exist.</p>
|
||||
</div>
|
||||
{{ end }}
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{ with .Site.LanguageCode }}{{ . }}{{ else }}en{{ end }}">
|
||||
{{- partial "head.html" . -}}
|
||||
<body
|
||||
class="flex flex-col h-screen px-8 text-lg leading-7 text-grey-900 sm:px-14 md:px-24 lg:px-32 dark:bg-gray-800 dark:text-white"
|
||||
>
|
||||
{{- partial "header.html" . -}}
|
||||
<main class="flex-grow">{{- block "main" . }}{{- end }}</main>
|
||||
{{- partial "footer.html" . -}}
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,13 @@
|
|||
{{ define "main" }}
|
||||
{{ partial "section-heading.html" . }}
|
||||
<section>
|
||||
{{ range (.Paginate (.Pages.GroupByDate "2006")).PageGroups }}
|
||||
<h2 class="mt-12 text-2xl font-bold first:mt-8">{{ .Key }}</h2>
|
||||
<hr class="border-gray-400 border-dotted w-36" />
|
||||
{{ range .Pages }}
|
||||
{{ partial "article-link.html" . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</section>
|
||||
{{ partial "pagination.html" . }}
|
||||
{{ end }}
|
|
@ -0,0 +1,20 @@
|
|||
{{ define "main" }}
|
||||
<article class="max-w-prose">
|
||||
<header>
|
||||
<h1 class="mt-0 text-4xl font-extrabold">{{ .Title }}</h1>
|
||||
<div class="mt-8 mb-12 text-base text-gray-400 dark:text-gray-500">
|
||||
{{ partial "meta.html" . }}
|
||||
</div>
|
||||
</header>
|
||||
<section class="prose dark:prose-light">
|
||||
{{ partial "heading-anchor.html" .Content | emojify }}
|
||||
</section>
|
||||
<footer>
|
||||
{{ partialCached "author.html" . }}
|
||||
</footer>
|
||||
{{/* Comments */}}
|
||||
{{ if templates.Exists "partials/comments.html" }}
|
||||
{{ partial "comments.html" . }}
|
||||
{{ end }}
|
||||
</article>
|
||||
{{ end }}
|
|
@ -0,0 +1,29 @@
|
|||
{{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||
{{ $excludedKinds := slice "taxonomy" "term" }}
|
||||
{{ range .Data.Pages }}
|
||||
{{ if not (in $excludedKinds .Kind) }}
|
||||
{{ if not (isset .Params "externalurl") }}
|
||||
{{- if .Permalink -}}
|
||||
<url>
|
||||
<loc>{{ .Permalink }}</loc>{{ if not .Lastmod.IsZero }}
|
||||
<lastmod>{{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}</lastmod>{{ end }}{{ with .Sitemap.ChangeFreq }}
|
||||
<changefreq>{{ . }}</changefreq>{{ end }}{{ if ge .Sitemap.Priority 0.0 }}
|
||||
<priority>{{ .Sitemap.Priority }}</priority>{{ end }}{{ if .IsTranslated }}{{ range .Translations }}
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="{{ .Language.Lang }}"
|
||||
href="{{ .Permalink }}"
|
||||
/>{{ end }}
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="{{ .Language.Lang }}"
|
||||
href="{{ .Permalink }}"
|
||||
/>{{ end }}
|
||||
</url>
|
||||
{{- end -}}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</urlset>
|
|
@ -0,0 +1,8 @@
|
|||
{{ define "main" }}
|
||||
<article class="max-w-full prose dark:prose-light">
|
||||
<header>
|
||||
<h1>{{ .Title }}</h1>
|
||||
</header>
|
||||
<section>{{ .Content | emojify }}</section>
|
||||
</article>
|
||||
{{ end }}
|
|
@ -0,0 +1,9 @@
|
|||
{{ if not .Site.IsServer }}
|
||||
{{ with .Site.Params.fathomAnalytics.site }}
|
||||
{{ if isset $.Site.Params.fathomanalytics "domain" }}
|
||||
<script src="https://{{ $.Site.Params.fathomanalytics.domain }}/script.js" data-site="{{ . }}" defer></script>
|
||||
{{ end }}
|
||||
<script src="https://cdn.usefathom.com/script.js" data-site="{{ . }}" defer></script>
|
||||
{{ end }}
|
||||
{{ template "_internal/google_analytics.html" . }}
|
||||
{{ end }}
|
|
@ -0,0 +1,23 @@
|
|||
<article>
|
||||
<h3 class="mt-6 text-xl font-semibold">
|
||||
{{ if isset .Params "externalurl" }}
|
||||
<a class="hover:underline" href="{{ .Params.externalurl }}" target="_blank" rel="external"
|
||||
>{{ .Title }}</a
|
||||
>
|
||||
<span
|
||||
class="text-sm cursor-default"
|
||||
style="vertical-align: super;"
|
||||
title="Link to external site"
|
||||
>↗</span
|
||||
>
|
||||
{{ else }}
|
||||
<a class="hover:underline" href="{{ .Permalink }}">{{ .Title }}</a>
|
||||
{{ end }}
|
||||
{{ if templates.Exists "partials/extend-article-link.html" }}
|
||||
{{ partial "extend-article-link.html" . }}
|
||||
{{ end }}
|
||||
</h3>
|
||||
<div class="text-sm text-gray-400 dark:text-gray-500">
|
||||
{{ partial "meta.html" . }}
|
||||
</div>
|
||||
</article>
|
|
@ -0,0 +1,50 @@
|
|||
<div class="flex items-center pt-8">
|
||||
{{ with .Site.Author.image }}
|
||||
<img class="w-24 h-24 !mt-0 !mb-0 mr-4 rounded-full" src="{{ . }}" />
|
||||
{{ end }}
|
||||
<div>
|
||||
{{ with .Site.Author.name }}
|
||||
<div class="font-semibold leading-6 text-gray-800 dark:text-gray-300">
|
||||
{{ . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="flex text-lg text-gray-400 dark:text-gray-500">
|
||||
{{ with .Site.Author.twitter }}
|
||||
<a
|
||||
class="mr-2 hover:text-primary-700 dark:hover:text-primary-400"
|
||||
href="{{ . }}"
|
||||
target="_blank"
|
||||
title="Twitter"
|
||||
>{{ partial "icon.html" "twitter-brands" }}</a
|
||||
>
|
||||
{{ end }}
|
||||
{{ with .Site.Author.github }}
|
||||
<a
|
||||
class="mr-2 hover:text-primary-700 dark:hover:text-primary-400"
|
||||
href="{{ . }}"
|
||||
target="_blank"
|
||||
title="GitHub"
|
||||
>{{ partial "icon.html" "github-brands" }}</a
|
||||
>
|
||||
{{ end }}
|
||||
{{ with .Site.Author.keybase }}
|
||||
<a
|
||||
class="mr-2 hover:text-primary-700 dark:hover:text-primary-400"
|
||||
href="{{ . }}"
|
||||
target="_blank"
|
||||
title="Keybase"
|
||||
>{{ partial "icon.html" "keybase-brands" }}</a
|
||||
>
|
||||
{{ end }}
|
||||
{{ with .Site.Author.linkedin }}
|
||||
<a
|
||||
class="mr-2 hover:text-primary-700 dark:hover:text-primary-400"
|
||||
href="{{ . }}"
|
||||
target="_blank"
|
||||
title="Linkedin"
|
||||
>{{ partial "icon.html" "linkedin-brands" }}</a
|
||||
>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,34 @@
|
|||
<footer class="py-10 text-sm">
|
||||
{{/* Copyright */}}
|
||||
<p class="text-gray-400 dark:text-gray-500">
|
||||
{{- with .Site.Copyright }}
|
||||
{{ . | emojify | markdownify }}
|
||||
{{- else }}
|
||||
©
|
||||
{{ now.Format "2006" }}
|
||||
{{ .Site.Author.name }}
|
||||
{{- end }}
|
||||
</p>
|
||||
{{/* Theme attribution */}}
|
||||
{{ if .Site.Params.attribution | default true }}
|
||||
<p class="text-xs text-gray-300 dark:text-gray-600">
|
||||
Powered by
|
||||
<a class="hover:underline" href="https://gohugo.io/" target="_blank">Hugo</a>
|
||||
&
|
||||
<a class="hover:underline" href="https://git.io/hugo-congo" target="_blank">Congo</a>
|
||||
</p>
|
||||
{{ end }}
|
||||
</footer>
|
||||
|
||||
{{/* Extend footer - eg. for extra scripts, etc. */}}
|
||||
{{ if templates.Exists "partials/extend-footer.html" }}
|
||||
{{ partialCached "extend-footer.html" . }}
|
||||
{{ end }}
|
||||
|
||||
{{/* Include mermaid.js only on pages that use the shortcode */}}
|
||||
{{- if (in (string .Content) "class=\"mermaid\"") -}}
|
||||
<script src="https://unpkg.com/mermaid@8.11.4/dist/mermaid.min.js"></script>
|
||||
<script>
|
||||
mermaid.initialize({ theme: "default" });
|
||||
</script>
|
||||
{{- end -}}
|
|
@ -0,0 +1,68 @@
|
|||
<head>
|
||||
<meta charset="utf-8" />
|
||||
{{ with .Site.LanguageCode }}
|
||||
<meta http-equiv="content-language" content="{{ . }}" />
|
||||
{{ end }}
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
||||
{{/* Title */}}
|
||||
{{ if .IsHome -}}
|
||||
<title>{{ .Site.Title }}</title>
|
||||
<meta name="title" content="{{ .Site.Title }}" />
|
||||
{{- else -}}
|
||||
<title>{{ .Title }} · {{ .Site.Title }}</title>
|
||||
<meta name="title" content="{{ .Title }} · {{ .Site.Title }}" />
|
||||
{{- end }}
|
||||
{{/* Metadata */}}
|
||||
{{ with .Params.Description -}}
|
||||
<meta name="description" content="{{ . }}" />
|
||||
{{- else -}}
|
||||
<meta name="description" content="{{ $.Site.Params.Description }}" />
|
||||
{{- end }}
|
||||
{{ with .Site.Params.keywords -}}
|
||||
<meta name="keywords" content="{{ . }}" />
|
||||
{{- end }}
|
||||
<base href="{{ .Site.BaseURL }}" />
|
||||
<link rel="canonical" href="{{ .Permalink }}" />
|
||||
{{/* Styles */}}
|
||||
<link type="text/css" rel="stylesheet" href="{{ "css/main.css" | absURL }}" />
|
||||
{{ if (fileExists "static/css/custom.css") -}}
|
||||
<link type="text/css" rel="stylesheet" href="{{ "css/custom.css" | absURL }}" />
|
||||
{{- end }}
|
||||
{{/* Icons */}}
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ "/apple-touch-icon.png" | absURL }}" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ "/favicon-32x32.png" | absURL }}" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ "/favicon-16x16.png" | absURL }}" />
|
||||
<link rel="manifest" href="{{ "/site.webmanifest" | absURL }}" />
|
||||
{{/* Site Verification */}}
|
||||
{{ with .Site.Params.verification.google }}
|
||||
<meta name="google-site-verification" content="{{ . }}" />
|
||||
{{ end }}
|
||||
{{ with .Site.Params.verification.bing }}
|
||||
<meta name="msvalidate.01" content="{{ . }}" />
|
||||
{{ end }}
|
||||
{{ with .Site.Params.verification.pinterest }}
|
||||
<meta name="p:domain_verify" content="{{ . }}" />
|
||||
{{ end }}
|
||||
{{ with .Site.Params.verification.yandex }}
|
||||
<meta name="yandex-verification" content="{{ . }}" />
|
||||
{{ end }}
|
||||
{{/* Social */}}
|
||||
{{ template "_internal/opengraph.html" . }}
|
||||
{{ template "_internal/twitter_cards.html" . }}
|
||||
{{/* Generator */}}
|
||||
{{ hugo.Generator }}
|
||||
{{/* Me */}}
|
||||
{{ with .Site.Author.name }}<meta name="author" content="{{ . }}" />{{ end }}
|
||||
{{ with .Site.Author.email }}<link href="mailto:{{ . }}" rel="me" />{{ end }}
|
||||
{{ with .Site.Author.twitter }}<link href="{{ . }}" rel="me" />{{ end }}
|
||||
{{ with .Site.Author.keybase }}<link href="{{ . }}" rel="me" />{{ end }}
|
||||
{{ with .Site.Author.github }}<link href="{{ . }}" rel="me" />{{ end }}
|
||||
{{ with .Site.Author.linkedin }}<link href="{{ . }}" rel="me" />{{ end }}
|
||||
{{/* Analytics */}}
|
||||
{{ partialCached "analytics.html" .Site }}
|
||||
{{/* Extend head - eg. for custom analytics scripts, etc. */}}
|
||||
{{ if templates.Exists "partials/extend-head.html" }}
|
||||
{{ partialCached "extend-head.html" .Site }}
|
||||
{{ end }}
|
||||
</head>
|
|
@ -0,0 +1,14 @@
|
|||
<header class="flex justify-between py-10 font-semibold ">
|
||||
<div>
|
||||
<a class="hover:underline" rel="me" href="{{ .Site.BaseURL }}">{{ .Site.Title }}</a>
|
||||
</div>
|
||||
<nav>
|
||||
<ul class="flex list-none">
|
||||
{{ range .Site.Menus.main }}
|
||||
<li class="mr-7 last:mr-0">
|
||||
<a class="hover:underline" href="{{ .URL }}" title="{{ .Title }}">{{ .Name }}</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
|
@ -0,0 +1 @@
|
|||
{{ . | replaceRE "(<h[2-4] id=\"([^\"]+)\".+)(</h[2-9]+>)" `${1} <a class="heading-anchor" href="#${2}" aria-label="Anchor">#</a> ${3}` | safeHTML }}
|
|
@ -0,0 +1,4 @@
|
|||
<span class="relative inline-block align-text-bottom icon">
|
||||
{{- $icon:=print "themes/congo/assets/icons/" . ".svg" -}}
|
||||
{{ readFile $icon | safeHTML }}
|
||||
</span>
|
|
@ -0,0 +1,8 @@
|
|||
<time datetime="{{ .Date }}">{{ .Date.Format "2 January 2006" }}</time>
|
||||
{{ if ne .ReadingTime 0 }}
|
||||
<span class="px-1">·</span>
|
||||
<span title="Reading time">
|
||||
{{ .ReadingTime }}
|
||||
min{{ if gt .ReadingTime 1 }}s{{ end }}
|
||||
</span>
|
||||
{{ end }}
|
|
@ -0,0 +1,46 @@
|
|||
<!-- See: https://glennmccomb.com/articles/how-to-build-custom-hugo-pagination/ -->
|
||||
<!-- Assign .Paginator object to a $paginator variable -->
|
||||
{{ $paginator := .Paginator }}
|
||||
<!-- If there's more than one page. -->
|
||||
{{ if gt $paginator.TotalPages 1 }}
|
||||
<ul class="Pagination">
|
||||
<!-- Previous page. -->
|
||||
{{ if $paginator.HasPrev }}
|
||||
<li class="Pagination-item Pagination-item--previous">
|
||||
<a
|
||||
href="{{ $paginator.Prev.URL }}"
|
||||
class="Pagination-itemLink Pagination-itemLink--previous"
|
||||
rel="prev"
|
||||
>
|
||||
←
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- Page numbers. -->
|
||||
{{ range $paginator.Pagers }}
|
||||
<li
|
||||
class="Pagination-item{{ if eq . $paginator }}
|
||||
Pagination-item--current
|
||||
{{ end }}"
|
||||
>
|
||||
<a href="{{ .URL }}" class="Pagination-itemLink"> {{ .PageNumber }} </a>
|
||||
</li>
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- Next page. -->
|
||||
{{ if $paginator.HasNext }}
|
||||
<li class="Pagination-item Pagination-item--next">
|
||||
<a
|
||||
href="{{ $paginator.Next.URL }}"
|
||||
class="Pagination-itemLink Pagination-itemLink--next"
|
||||
rel="next"
|
||||
>
|
||||
→
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ end }}
|
|
@ -0,0 +1,4 @@
|
|||
<section>
|
||||
<h1 class="mb-3 text-4xl font-extrabold">{{ .Title }}</h1>
|
||||
<p class="mt-8 mb-12 text-gray-400 dark:text-gray-500">{{ .Description }}</p>
|
||||
</section>
|
|
@ -0,0 +1,7 @@
|
|||
User-agent: *
|
||||
{{- if hugo.IsProduction | or (eq .Site.Params.env "production") }}
|
||||
Disallow:
|
||||
{{- else }}
|
||||
Disallow: /
|
||||
{{- end }}
|
||||
Sitemap: {{ "sitemap.xml" | absURL }}
|
|
@ -0,0 +1,8 @@
|
|||
<div class="flex px-4 py-3 rounded-md bg-primary-100 dark:bg-primary-900">
|
||||
<span class="pr-3 text-primary-400">
|
||||
{{ partial "icon.html" "exclamation-triangle-solid" }}
|
||||
</span>
|
||||
<span class="no-prose dark:text-gray-300">
|
||||
{{- .Inner | markdownify -}}
|
||||
</span>
|
||||
</div>
|
|
@ -0,0 +1,37 @@
|
|||
{{ if .Get "src" }}
|
||||
{{ $image := .Page.Resources.GetMatch (printf "*%s*" (.Get "src")) }}
|
||||
<figure{{ with .Get "class" }} class="{{ . }}"{{ end }}>
|
||||
{{- if .Get "link" -}}
|
||||
<a href="{{ .Get "link" }}"{{ with .Get "target" }} target="{{ . }}"{{ end }}{{ with .Get "rel" }} rel="{{ . }}"{{ end }}>
|
||||
{{- end -}}
|
||||
<img src="{{ $image.RelPermalink }}"
|
||||
{{- if or (.Get "alt") (.Get "caption") }}
|
||||
alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "caption" | markdownify| plainify }}{{ end }}"
|
||||
{{- end -}}
|
||||
{{- with .Get "width" }} width="{{ . }}"{{ end -}}
|
||||
{{- with .Get "height" }} height="{{ . }}"{{ end -}}
|
||||
/><!-- Closing img tag -->
|
||||
{{- if .Get "link" }}</a>{{ end -}}
|
||||
{{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}}
|
||||
<figcaption>
|
||||
{{ with (.Get "title") -}}
|
||||
<h4>{{ . }}</h4>
|
||||
{{- end -}}
|
||||
{{- if or (.Get "caption") (.Get "attr") -}}<p>
|
||||
{{- .Get "caption" | markdownify -}}
|
||||
{{- with .Get "attrlink" }}
|
||||
<a href="{{ . }}">
|
||||
{{- end -}}
|
||||
{{- .Get "attr" | markdownify -}}
|
||||
{{- if .Get "attrlink" }}</a>{{ end }}</p>
|
||||
{{- end }}
|
||||
</figcaption>
|
||||
{{- end }}
|
||||
</figure>
|
||||
{{ end }}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
<span class="relative inline-block align-text-bottom icon">
|
||||
{{- $icon:=print "themes/congo/assets/icons/" . ".svg" -}}
|
||||
{{ readFile $icon | safeHTML }}
|
||||
</span>
|
|
@ -0,0 +1,3 @@
|
|||
<p class="!mb-9 text-xl">
|
||||
{{ .Inner }}
|
||||
</p>
|
|
@ -0,0 +1,3 @@
|
|||
<div class="mermaid" align="center">
|
||||
{{ .Inner }}
|
||||
</div>
|
|
@ -0,0 +1,35 @@
|
|||
{{ if .Get "src" }}
|
||||
{{ $image := .Page.Resources.GetMatch (printf "*%s*" (.Get "src")) }}
|
||||
<figure{{ with .Get "class" }} class="{{ . }}"{{ end }}>
|
||||
{{- if .Get "link" -}}
|
||||
<a href="{{ .Get "link" }}"{{ with .Get "target" }} target="{{ . }}"{{ end }}{{ with .Get "rel" }} rel="{{ . }}"{{ end }}>
|
||||
{{- end -}}
|
||||
<img src="{{ $image.RelPermalink }}"
|
||||
{{- if or (.Get "alt") (.Get "caption") }}
|
||||
alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "caption" | markdownify| plainify }}{{ end }}"
|
||||
{{- end -}}
|
||||
width="100%"
|
||||
height="auto"
|
||||
style="max-width:{{ div $image.Width 2 }}px; max-height:{{ div $image.Height 2 }}px;"
|
||||
/><!-- Closing img tag -->
|
||||
{{- if .Get "link" }}</a>{{ end -}}
|
||||
{{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}}
|
||||
<figcaption>
|
||||
{{ with (.Get "title") -}}
|
||||
<h4>{{ . }}</h4>
|
||||
{{- end -}}
|
||||
{{- if or (.Get "caption") (.Get "attr") -}}<p>
|
||||
{{- .Get "caption" | markdownify -}}
|
||||
{{- with .Get "attrlink" }}
|
||||
<a href="{{ . }}">
|
||||
{{- end -}}
|
||||
{{- .Get "attr" | markdownify -}}
|
||||
{{- if .Get "attrlink" }}</a>{{ end }}</p>
|
||||
{{- end }}
|
||||
</figcaption>
|
||||
{{- end }}
|
||||
</figure>
|
||||
{{ end }}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
{{ define "main" }}
|
||||
{{ partial "section-heading.html" . }}
|
||||
<section class="flex flex-wrap -mx-2 overflow-hidden">
|
||||
{{ range .Site.Taxonomies.topics }}
|
||||
<article
|
||||
class="w-full px-2 my-3 overflow-hidden sm:w-1/2 md:w-1/3 lg:w-1/4 xl:w-1/5"
|
||||
>
|
||||
<h2>
|
||||
<a
|
||||
class="text-xl font-medium hover:underline"
|
||||
href="{{ .Page.Permalink }}"
|
||||
>{{ .Page.Title }}</a
|
||||
>
|
||||
<span class="text-base text-gray-400">
|
||||
<span class="px-1">·</span>
|
||||
{{ .Count }}
|
||||
</span>
|
||||
</h2>
|
||||
</article>
|
||||
{{ end }}
|
||||
</section>
|
||||
{{ end }}
|
|
@ -0,0 +1,13 @@
|
|||
{{ define "main" }}
|
||||
{{ partial "section-heading.html" . }}
|
||||
<section>
|
||||
{{ range (.Paginate (.Pages.GroupByDate "2006")).PageGroups }}
|
||||
<h2 class="mt-12 text-2xl font-bold first:mt-8">{{ .Key }}</h2>
|
||||
<hr class="border-gray-400 border-dotted w-36" />
|
||||
{{ range .Pages }}
|
||||
{{ partial "article-link.html" . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</section>
|
||||
{{ partial "pagination.html" . }}
|
||||
{{ end }}
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"name": "hugo-congo",
|
||||
"version": "1.0.0",
|
||||
"description": "Congo theme for Hugo",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"dev": "NODE_ENV=development ./node_modules/tailwindcss/lib/cli.js -i ./assets/css/main.css -o ./static/css/main.css --jit -w",
|
||||
"build": "NODE_ENV=production ./node_modules/tailwindcss/lib/cli.js -i ./assets/css/main.css -o ./static/css/main.css --jit --minify"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/jpanther/hugo-congo.git"
|
||||
},
|
||||
"keywords": [
|
||||
"hugo",
|
||||
"hugo-theme",
|
||||
"tailwind",
|
||||
"dark-mode"
|
||||
],
|
||||
"author": "James Panther",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/jpanther/hugo-congo/issues"
|
||||
},
|
||||
"homepage": "https://github.com/jpanther/hugo-congo#readme",
|
||||
"devDependencies": {
|
||||
"@tailwindcss/typography": "^0.4.1",
|
||||
"prettier": "^2.3.2",
|
||||
"prettier-plugin-go-template": "^0.0.11",
|
||||
"tailwindcss": "^2.2.7"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 229 B |
After Width: | Height: | Size: 307 B |
After Width: | Height: | Size: 15 KiB |
|
@ -0,0 +1 @@
|
|||
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|
|
@ -0,0 +1,133 @@
|
|||
const colors = require("tailwindcss/colors");
|
||||
|
||||
module.exports = {
|
||||
mode: "jit",
|
||||
purge: {
|
||||
content: [
|
||||
"./layouts/**/*.html",
|
||||
"./content/**/*.{html,md}",
|
||||
"./themes/congo/layouts/**/*.html",
|
||||
"./themes/congo/content/**/*.{html,md}",
|
||||
],
|
||||
},
|
||||
darkMode: "media",
|
||||
theme: {
|
||||
colors: {
|
||||
transparent: "transparent",
|
||||
white: colors.white,
|
||||
gray: colors.gray,
|
||||
primary: colors.violet,
|
||||
secondary: colors.fuchsia,
|
||||
},
|
||||
extend: {
|
||||
typography: (theme) => ({
|
||||
DEFAULT: {
|
||||
css: [
|
||||
{
|
||||
a: {
|
||||
color: theme("colors.primary.700"),
|
||||
textDecoration: "underline",
|
||||
fontWeight: "500",
|
||||
"&:hover": {
|
||||
backgroundColor: theme("colors.primary.600"),
|
||||
color: theme("colors.white"),
|
||||
textDecoration: "none",
|
||||
},
|
||||
},
|
||||
h2: {
|
||||
position: "relative",
|
||||
},
|
||||
h3: {
|
||||
position: "relative",
|
||||
},
|
||||
h4: {
|
||||
position: "relative",
|
||||
},
|
||||
code: {
|
||||
color: theme("colors.secondary.700"),
|
||||
},
|
||||
pre: {
|
||||
backgroundColor: theme("colors.gray.50"),
|
||||
},
|
||||
kbd: {
|
||||
backgroundColor: theme("colors.gray.200"),
|
||||
padding: "0.1rem 0.4rem",
|
||||
borderRadius: "0.25rem",
|
||||
fontSize: "0.9rem",
|
||||
fontWeight: "600",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
light: {
|
||||
css: [
|
||||
{
|
||||
color: theme("colors.gray.400"),
|
||||
a: {
|
||||
color: theme("colors.primary.400"),
|
||||
},
|
||||
strong: {
|
||||
color: theme("colors.white"),
|
||||
},
|
||||
"ol > li::before": {
|
||||
color: theme("colors.gray.400"),
|
||||
},
|
||||
"ul > li::before": {
|
||||
backgroundColor: theme("colors.gray.600"),
|
||||
},
|
||||
hr: {
|
||||
borderColor: theme("colors.gray.200"),
|
||||
},
|
||||
blockquote: {
|
||||
color: theme("colors.gray.200"),
|
||||
borderLeftColor: theme("colors.gray.600"),
|
||||
},
|
||||
h1: {
|
||||
color: theme("colors.white"),
|
||||
},
|
||||
h2: {
|
||||
color: theme("colors.white"),
|
||||
},
|
||||
h3: {
|
||||
color: theme("colors.white"),
|
||||
},
|
||||
h4: {
|
||||
color: theme("colors.white"),
|
||||
},
|
||||
"figure figcaption": {
|
||||
color: theme("colors.gray.400"),
|
||||
},
|
||||
code: {
|
||||
color: theme("colors.secondary.400"),
|
||||
},
|
||||
"a code": {
|
||||
color: theme("colors.white"),
|
||||
},
|
||||
pre: {
|
||||
color: theme("colors.gray.200"),
|
||||
backgroundColor: theme("colors.gray.700"),
|
||||
},
|
||||
thead: {
|
||||
color: theme("colors.white"),
|
||||
borderBottomColor: theme("colors.gray.400"),
|
||||
},
|
||||
"tbody tr": {
|
||||
borderBottomColor: theme("colors.gray.600"),
|
||||
},
|
||||
kbd: {
|
||||
backgroundColor: theme("colors.gray.700"),
|
||||
color: theme("colors.gray.300"),
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
}),
|
||||
},
|
||||
},
|
||||
variants: {
|
||||
extend: {
|
||||
typography: ["dark"],
|
||||
},
|
||||
},
|
||||
plugins: [require("@tailwindcss/typography")],
|
||||
};
|
|
@ -0,0 +1,14 @@
|
|||
# Congo theme for Hugo
|
||||
|
||||
name = "Congo"
|
||||
license = "MIT"
|
||||
licenselink = "https://github.com/jpanther/hugo-congo/blob/master/LICENSE"
|
||||
description = "A simple, clean Hugo theme based on Tailwind CSS"
|
||||
homepage = "http://github.com/jpanther/hugo-congo/"
|
||||
tags = ["blog", "minimal", "dark mode", "dark", "light", "tailwind"]
|
||||
features = ["syntax higlighting", "dark mode", "emoji"]
|
||||
min_version = "0.86.1"
|
||||
|
||||
[author]
|
||||
name = "James Panther"
|
||||
homepage = "https://jamespanther.com/"
|