diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..b601136 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,31 @@ +# Update the NODE_VERSION arg in docker-compose.yml to pick a Node version: 10, 12, 14 +ARG NODE_VERSION=14 +FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${NODE_VERSION} + +# VARIANT can be either 'hugo' for the standard version or 'hugo_extended' for the extended version. +ARG VARIANT=hugo +# VERSION can be either 'latest' or a specific version number +ARG VERSION=latest + +# Download Hugo +RUN apt-get update && apt-get install -y ca-certificates openssl git curl && \ + rm -rf /var/lib/apt/lists/* && \ + case ${VERSION} in \ + latest) \ + export VERSION=$(curl -s https://api.github.com/repos/gohugoio/hugo/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') ;;\ + esac && \ + echo ${VERSION} && \ + wget -O ${VERSION}.tar.gz https://github.com/gohugoio/hugo/releases/download/v${VERSION}/${VARIANT}_${VERSION}_Linux-64bit.tar.gz && \ + tar xf ${VERSION}.tar.gz && \ + mv hugo /usr/bin/hugo + +# Hugo dev server port +EXPOSE 1313 + +# [Optional] Uncomment this section to install additional OS packages you may want. +# +# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ +# && apt-get -y install --no-install-recommends + +# [Optional] Uncomment if you want to install more global node packages +# RUN sudo -u node npm install -g diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..eed2eac --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,45 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.202.3/containers/hugo +{ + "name": "Hugo (Community)", + "build": { + "dockerfile": "Dockerfile", + "args": { + // Update VARIANT to pick hugo variant. + // Example variants: hugo, hugo_extended + // Rebuild the container if it already exists to update. + "VARIANT": "hugo_extended", + // Update VERSION to pick a specific hugo version. + // Example versions: latest, 0.73.0, 0,71.1 + // Rebuild the container if it already exists to update. + "VERSION": "latest", + // Update NODE_VERSION to pick the Node.js version: 12, 14 + "NODE_VERSION": "14", + } + }, + + // Set *default* container specific settings.json values on container create. + "settings": { + "html.format.templating": true, + }, + + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "bungcip.better-toml", + "davidanson.vscode-markdownlint" + ], + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + "forwardPorts": [ + 1313 + ], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "uname -a", + + // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. + "remoteUser": "node", + "features": { + "golang": "1.17.8" + } +} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..644c9a0 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,59 @@ +name: Deploy to Github Pages + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + build: + runs-on: ubuntu-latest + + permissions: + # Give the default GITHUB_TOKEN write permission to commit and push the + # added or changed files to the repository. + contents: write + + steps: + - uses: actions/checkout@v2 + + - name: Cache Hugo resources + uses: actions/cache@v2 + env: + cache-name: cache-hugo-resources + with: + path: resources + key: ${{ env.cache-name }} + + - uses: actions/setup-go@v2 + with: + go-version: "^1.17.0" + - run: go version + + - name: Cache Go Modules + uses: actions/cache@v2 + with: + path: | + ~/.cache/go-build + ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v2 + with: + hugo-version: "latest" + extended: true + + - name: Build + run: hugo --minify --gc + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@4.1.4 + with: + branch: gh-pages + folder: public + clean: true + single-commit: true diff --git a/.github/workflows/update-theme.yml b/.github/workflows/update-theme.yml new file mode 100644 index 0000000..76b589b --- /dev/null +++ b/.github/workflows/update-theme.yml @@ -0,0 +1,38 @@ +name: Update theme + +# Controls when the workflow will run +on: + schedule: + # Update theme automatically everyday at 00:00 UTC + - cron: "0 0 * * *" + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + update-theme: + runs-on: ubuntu-latest + + permissions: + # Give the default GITHUB_TOKEN write permission to commit and push the + # added or changed files to the repository. + contents: write + + steps: + - uses: actions/checkout@v2 + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v2 + with: + hugo-version: 0.115.2 + extended: true + + - name: Update theme + run: hugo mod get -u github.com/CaiJimmy/hugo-theme-stack/v3 + + - name: Tidy go.mod, go.sum + run: hugo mod tidy + + - name: Commit changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "CI: Update theme" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..af6dfd4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +public +resources \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..7432225 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "Serve Drafts", + "type": "shell", + "command": "hugo server -D", + "group": { + "kind": "test", + "isDefault": true + }, + "isBackground": true, + "problemMatcher": [] + }, + { + "label": "Build", + "type": "shell", + "command": "hugo --minify", + "group": { + "kind": "build", + "isDefault": true + }, + "problemMatcher": [] + } + ] +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4b5f721 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Jimmy Cai + +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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..97c314e --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +## Hugo Theme Stack Starter Template + +This is a quick start template for [Hugo theme Stack](https://github.com/CaiJimmy/hugo-theme-stack). It uses [Hugo modules](https://gohugo.io/hugo-modules/) feature to load the theme. + +It comes with a basic theme structure and configuration. GitHub action has been set up to deploy the theme to a public GitHub page automatically. Also, there's a cron job to update the theme automatically everyday. + +To get started: + +1. Click *Use this template*, and create your repository on GitHub. +![Step 1](https://user-images.githubusercontent.com/5889006/156916624-20b2a784-f3a9-4718-aa5f-ce2a436b241f.png) + +2. Once the repository is created, create a GitHub codespace asociated with it. +![Create codespace](https://user-images.githubusercontent.com/5889006/156916672-43b7b6e9-4ffb-4704-b4ba-d5ca40ffcae7.png) + +3. And voila! You're ready to go. The codespace has been configured with the latest version of Hugo extended, just run `hugo server` in the terminal and see your new site in action. + +4. Check `config` folder for the configuration files. You can edit them to suit your needs. Make sure to update the `baseurl` property in `config/_default/config.toml` to your site's URL. + +5. Once you're done editing the site, just commit it and push it. GitHub action will deploy the site automatically to GitHub page asociated with the repository. +![GitHub action](https://user-images.githubusercontent.com/5889006/156916881-90b8bb9b-1925-4e60-9d7a-8026cda729bf.png) +--- + +In case you don't want to use GitHub codespace, you can also run this template in your local machine. **You need to install Git, Go and Hugo extended locally.** + +### Update theme manually + +Run: + +```bash +hugo mod get -u github.com/CaiJimmy/hugo-theme-stack/v3 +hugo mod tidy +``` + +> This starter template has been configured with `v3` version of theme. Due to the limitation of Go module, once the `v4` or up version of theme is released, you need to update the theme manually. (Modifying `config/module.toml` file) + +### Deploy to another static page hostings + +If you want to build this site using another static page hosting, you need to make sure they have Go installed in the machine. + +
+ Vercel + +You need to overwrite build command to install manually Go: + +``` +amazon-linux-extras install golang1.11 && hugo --gc --minify +``` + +![](https://user-images.githubusercontent.com/5889006/156917172-01e4d418-3469-4ffb-97e4-a905d28b8424.png) + +Make sure also to specify Hugo version in the environment variable `HUGO_VERSION` (Use the latest version of Hugo extended): + +![Environment variable](https://user-images.githubusercontent.com/5889006/156917212-afb7c70d-ab85-480f-8288-b15781a462c0.png) +
diff --git a/assets/img/avatar.png b/assets/img/avatar.png new file mode 100644 index 0000000..bab4bde Binary files /dev/null and b/assets/img/avatar.png differ diff --git a/config/_default/_languages.toml b/config/_default/_languages.toml new file mode 100644 index 0000000..901aea9 --- /dev/null +++ b/config/_default/_languages.toml @@ -0,0 +1,6 @@ +# Rename this file to languages.toml to enable multilingual support +[en] +languageName = "English" +languagedirection = "ltr" +title = "Example Site" +weight = 1 diff --git a/config/_default/config.toml b/config/_default/config.toml new file mode 100644 index 0000000..ffdf378 --- /dev/null +++ b/config/_default/config.toml @@ -0,0 +1,16 @@ +# Change baseurl before deploy +baseurl = "https://demo.stack.jimmycai.com" +languageCode = "en-us" +paginate = 5 +title = "Hugo Theme Stack Starter" + +# Theme i18n support +# Available values: en, fr, id, ja, ko, pt-br, zh-cn, zh-tw, es, de, nl, it, th, el, uk, ar +defaultContentLanguage = "en" + +# Set hasCJKLanguage to true if DefaultContentLanguage is in [zh-cn ja ko] +# This will make .Summary and .WordCount behave correctly for CJK languages. +hasCJKLanguage = false + +# Change it to your Disqus shortname before using +disqusShortname = "hugo-theme-stack" \ No newline at end of file diff --git a/config/_default/markup.toml b/config/_default/markup.toml new file mode 100644 index 0000000..1dc01f3 --- /dev/null +++ b/config/_default/markup.toml @@ -0,0 +1,17 @@ +# Markdown renderer configuration +[goldmark.renderer] +unsafe = false + +[tableOfContents] +endLevel = 4 +ordered = true +startLevel = 2 + +[highlight] +noClasses = false +codeFences = true +guessSyntax = true +lineNoStart = 1 +lineNos = true +lineNumbersInTable = true +tabWidth = 4 diff --git a/config/_default/menu.toml b/config/_default/menu.toml new file mode 100644 index 0000000..20bdb9e --- /dev/null +++ b/config/_default/menu.toml @@ -0,0 +1,24 @@ +# Configure main menu and social menu +#[[main]] +#identifier = "home" +#name = "Home" +#url = "/" +#[main.params] +#icon = "home" +#newtab = true + +[[social]] +identifier = "github" +name = "GitHub" +url = "https://github.com/CaiJimmy/hugo-theme-stack" + +[social.params] +icon = "brand-github" + +[[social]] +identifier = "twitter" +name = "Twitter" +url = "https://twitter.com" + +[social.params] +icon = "brand-twitter" diff --git a/config/_default/module.toml b/config/_default/module.toml new file mode 100644 index 0000000..f13256c --- /dev/null +++ b/config/_default/module.toml @@ -0,0 +1,2 @@ +[[imports]] +path = "github.com/CaiJimmy/hugo-theme-stack/v3" diff --git a/config/_default/params.toml b/config/_default/params.toml new file mode 100644 index 0000000..366020f --- /dev/null +++ b/config/_default/params.toml @@ -0,0 +1,149 @@ +# Pages placed under these sections will be shown on homepage and archive page. +mainSections = ["post"] +# Output page's full content in RSS. +rssFullContent = true +favicon = "/favicon.png" + +[footer] +since = 2020 +customText = "" + +[dateFormat] +published = "Jan 02, 2006" +lastUpdated = "Jan 02, 2006 15:04 MST" + +[sidebar] +emoji = "🍥" +subtitle = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." + +[sidebar.avatar] +enabled = true +local = true +src = "img/avatar.png" + +[article] +math = false +readingTime = true + +[article.license] +enabled = true +default = "Licensed under CC BY-NC-SA 4.0" + +## Widgets +[[widgets.homepage]] +type = "search" + +[[widgets.homepage]] +type = "archives" + +[widgets.homepage.params] +limit = 5 + +[[widgets.homepage]] +type = "categories" + +[widgets.homepage.params] +limit = 10 + +[[widgets.homepage]] +type = "tag-cloud" + +[widgets.homepage.params] +limit = 10 + +[[widgets.page]] +type = "toc" + +[opengraph.twitter] +site = "" +card = "summary_large_image" + +[defaultImage.opengraph] +enabled = false +local = false +src = "" + +[colorScheme] +toggle = true +default = "auto" + +[imageProcessing.cover] +enabled = true + +[imageProcessing.content] +enabled = true + +## Comments +[comments] +enabled = true +provider = "disqus" + +[comments.disqusjs] +shortname = "" +apiUrl = "" +apiKey = "" +admin = "" +adminLabel = "" + +[comments.utterances] +repo = "" +issueTerm = "pathname" +label = "" + +[comments.remark42] +host = "" +site = "" +locale = "" + +[comments.vssue] +platform = "" +owner = "" +repo = "" +clientId = "" +clientSecret = "" +autoCreateIssue = false + +[comments.waline] +serverURL = "" +lang = "" +visitor = "" +avatar = "" +emoji = ["https://cdn.jsdelivr.net/gh/walinejs/emojis/weibo"] +requiredMeta = ["name", "email", "url"] +placeholder = "" + +[comments.waline.locale] +admin = "Admin" + +[comments.twikoo] +envId = "" +region = "" +path = "" +lang = "" + +[comments.cactus] +defaultHomeserverUrl = "https://matrix.cactus.chat:8448" +serverName = "cactus.chat" +siteName = "" + +[comments.giscus] +repo = "" +repoID = "" +category = "" +categoryID = "" +mapping = "" +lightTheme = "" +darkTheme = "" +reactionsEnabled = 1 +emitMetadata = 0 + +[comments.gitalk] +owner = "" +admin = "" +repo = "" +clientID = "" +clientSecret = "" + +[comments.cusdis] +host = "" +id = "" diff --git a/config/_default/permalinks.toml b/config/_default/permalinks.toml new file mode 100644 index 0000000..2499a7e --- /dev/null +++ b/config/_default/permalinks.toml @@ -0,0 +1,3 @@ +# Permalinks format of each content section +post = "/p/:slug/" +page = "/:slug/" \ No newline at end of file diff --git a/config/_default/related.toml b/config/_default/related.toml new file mode 100644 index 0000000..ae9f69a --- /dev/null +++ b/config/_default/related.toml @@ -0,0 +1,12 @@ +# Related contents configuration +includeNewer = true +threshold = 60 +toLower = false + +[[indices]] +name = "tags" +weight = 100 + +[[indices]] +name = "categories" +weight = 200 diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..636abae --- /dev/null +++ b/content/_index.md @@ -0,0 +1,8 @@ +--- +menu: + main: + name: Home + weight: 1 + params: + icon: home +--- \ No newline at end of file diff --git a/content/categories/example-category/_index.md b/content/categories/example-category/_index.md new file mode 100644 index 0000000..678b089 --- /dev/null +++ b/content/categories/example-category/_index.md @@ -0,0 +1,10 @@ +--- +title: Example Category +description: A description of this category +image: + +# Badge style +style: + background: "#2a9d8f" + color: "#fff" +--- \ No newline at end of file diff --git a/content/page/archives/index.md b/content/page/archives/index.md new file mode 100644 index 0000000..2b1bf20 --- /dev/null +++ b/content/page/archives/index.md @@ -0,0 +1,11 @@ +--- +title: "Archives" +date: 2022-03-06 +layout: "archives" +slug: "archives" +menu: + main: + weight: 2 + params: + icon: archives +--- \ No newline at end of file diff --git a/content/page/links/index.md b/content/page/links/index.md new file mode 100644 index 0000000..ef8bb3e --- /dev/null +++ b/content/page/links/index.md @@ -0,0 +1,33 @@ +--- +title: Links +links: + - title: GitHub + description: GitHub is the world's largest software development platform. + website: https://github.com + image: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png +menu: + main: + weight: 4 + params: + icon: link + +comments: false +--- + +To use this feature, add `links` section to frontmatter. + +This page's frontmatter: + +```yaml +links: + - title: GitHub + description: GitHub is the world's largest software development platform. + website: https://github.com + image: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png + - title: TypeScript + description: TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. + website: https://www.typescriptlang.org + image: ts-logo-128.jpg +``` + +`image` field accepts both local and external images. \ No newline at end of file diff --git a/content/page/search/index.md b/content/page/search/index.md new file mode 100644 index 0000000..7507b68 --- /dev/null +++ b/content/page/search/index.md @@ -0,0 +1,13 @@ +--- +title: "Search" +slug: "search" +layout: "search" +outputs: + - html + - json +menu: + main: + weight: 3 + params: + icon: search +--- \ No newline at end of file diff --git a/content/post/hello-world/cover.jpg b/content/post/hello-world/cover.jpg new file mode 100644 index 0000000..1634e85 Binary files /dev/null and b/content/post/hello-world/cover.jpg differ diff --git a/content/post/hello-world/index.md b/content/post/hello-world/index.md new file mode 100644 index 0000000..34e8f8d --- /dev/null +++ b/content/post/hello-world/index.md @@ -0,0 +1,19 @@ +--- +title: Hello World +description: Welcome to Hugo Theme Stack +slug: hello-world +date: 2022-03-06 00:00:00+0000 +image: cover.jpg +categories: + - Example Category +tags: + - Example Tag +--- + +Welcome to Hugo theme Stack. This is your first post. Edit or delete it, then start writing! + +For more information about this theme, check the documentation: https://docs.stack.jimmycai.com/ + +Want a site like this? Check out [hugo-theme-stack-stater](https://github.com/CaiJimmy/hugo-theme-stack-starter) + +> Photo by [Pawel Czerwinski](https://unsplash.com/@pawel_czerwinski) on [Unsplash](https://unsplash.com/) \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..54bf8f0 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module github.com/CaiJimmy/hugo-theme-stack-starter + +go 1.17 + +require github.com/CaiJimmy/hugo-theme-stack/v3 v3.17.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..d7f1375 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/CaiJimmy/hugo-theme-stack/v3 v3.17.0 h1:sIWwTK8S/EUlW8LnH7yohuHBctQCrzZKNG7/5LyDF9s= +github.com/CaiJimmy/hugo-theme-stack/v3 v3.17.0/go.mod h1:IPmCXiIxlFSLFYS0tOmYP6ySLviyeNVSabyvSuaxD+I= diff --git a/static/favicon.png b/static/favicon.png new file mode 100644 index 0000000..e53125d Binary files /dev/null and b/static/favicon.png differ