diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 0000000..99b43da --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,44 @@ +{ + "files": ["README.md"], + "imageSize": 100, + "commit": false, + "contributorsPerLine": 7, + "projectName": "al-folio", + "projectOwner": "alshedivat", + "repoType": "github", + "repoHost": "https://github.com", + "badgeTemplate": "[core_contributors]: https://img.shields.io/badge/core_contributors-<%= contributors.length %>-orange.svg 'Number of core contributors'", + "contributorTemplate": "\">\" width=\"<%= options.imageSize %>px;\" alt=\"\"/>
<%= contributor.name %>
", + "skipCi": true, + "contributors": [ + { + "login": "alshedivat", + "name": "Maruan", + "avatar_url": "https://avatars.githubusercontent.com/u/2126561?v=4", + "profile": "http://maruan.alshedivat.com", + "contributions": ["design", "code"] + }, + { + "login": "rohandebsarkar", + "name": "Rohan Deb Sarkar", + "avatar_url": "https://avatars.githubusercontent.com/u/50144004?v=4", + "profile": "http://rohandebsarkar.github.io", + "contributions": ["code"] + }, + { + "login": "pourmand1376", + "name": "Amir Pourmand", + "avatar_url": "https://avatars.githubusercontent.com/u/32064808?v=4", + "profile": "https://amirpourmand.ir", + "contributions": ["code"] + }, + { + "login": "george-gca", + "name": "George", + "avatar_url": "https://avatars.githubusercontent.com/u/31376482?v=4", + "profile": "https://george-gca.github.io/", + "contributions": ["code"] + } + ], + "commitConvention": "angular" +} diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..7e82674 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +_site/ +.git/ +assets/ diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000..691dff4 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,24 @@ +# Template taken from https://github.com/v8/v8/blob/master/.git-blame-ignore-revs. +# +# This file contains a list of git hashes of revisions to be ignored by git blame. These +# revisions are considered "unimportant" in that they are unlikely to be what you are +# interested in when blaming. Most of these will probably be commits related to linting +# and code formatting. +# +# Instructions: +# - Only large (generally automated) reformatting or renaming CLs should be +# added to this list. Do not put things here just because you feel they are +# trivial or unimportant. If in doubt, do not put it on this list. +# - Precede each revision with a comment containing the PR title and number. +# For bulk work over many commits, place all commits in a block with a single +# comment at the top describing the work done in those commits. +# - Only put full 40-character hashes on this list (not short hashes or any +# other revision reference). +# - Append to the bottom of the file (revisions should be in chronological order +# from oldest to newest). +# - Because you must use a hash, you need to append to this list in a follow-up +# PR to the actual reformatting PR that you are trying to ignore. + +# Format all the code using prettier.io. (#2048, #2062) +beb6f27d596e753014cb9bff1939e5f78d66431c +2d34024961c3a3d27d6fd18ce06a551657983234 diff --git a/.github/ISSUE_TEMPLATE/1_bug_report.yml b/.github/ISSUE_TEMPLATE/1_bug_report.yml new file mode 100644 index 0000000..96ec317 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1_bug_report.yml @@ -0,0 +1,101 @@ +name: 🐛 Report a bug +description: Any errors. +labels: ["needs triage", "bug"] +body: + - type: markdown + attributes: + value: > + Before you go any further. Is this really a **🐛 bug**? + + If it's a question about how al-folio works, have a look at our [documentation](https://github.com/alshedivat/al-folio/blob/master/README.md), + [frequently asked questions](https://github.com/alshedivat/al-folio/blob/master/FAQ.md), + [past questions](https://github.com/alshedivat/al-folio/discussions/categories/q-a), + or [ask a question](https://github.com/alshedivat/al-folio/discussions/new?category=q-a). + + - type: checkboxes + id: requirements + attributes: + label: Have you checked that your issue isn't already filed? + description: > + Please check if somebody else has already filed the same issue. + If you find a similar issue, please add a 👍 reaction or comment on the original post. + options: + - label: I read through [FAQ](https://github.com/alshedivat/al-folio/blob/master/FAQ.md) and searched through the [past issues](https://github.com/alshedivat/al-folio/issues), none of which addressed my issue. + required: true + - label: Yes, I have checked that this issue isn't already filed. + required: true + + - type: input + attributes: + label: Bug description + description: A description of the 🐛 bug. + placeholder: A clear and concise description of what the bug is. + validations: + required: true + + - type: textarea + attributes: + label: How to reproduce the bug + description: Provide steps to reproduce the 🐛 bug. + placeholder: | + Include steps to reproduce, the expected behaviour, and the actual behaviour. + + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: true + + - type: textarea + attributes: + label: Error messages and logs + description: > + Provide any error messages and/or logs + placeholder: "Copy the complete error messages and logs" + value: | + ``` + The error message you got, with the full traceback if available. Please paste it between these triple backticks. + ``` + validations: + required: false + + - type: dropdown + id: os + attributes: + label: What operating system are you using? + description: select all OSs where you have experienced this issue + multiple: true + options: + - Linux + - Mac + - Windows + - Not applicable (e.g. you're using GitHub Pages or other hosting) + validations: + required: true + + - type: dropdown + id: environment + attributes: + label: Where are you seeing the problem on? + description: select all environments where you have experienced this issue + multiple: true + options: + - "Running locally with Docker" + - "Running locally without Docker" + - "Deployed site" + validations: + required: true + + - type: textarea + attributes: + label: More info + description: Add any other info about the issue here. + placeholder: | + Add any other context about the problem here, such as versions of the libraries if running without docker, screenshots, links to the deployed site, etc. + validations: + required: false + + - type: markdown + attributes: + value: "**Happy coding!**" diff --git a/.github/ISSUE_TEMPLATE/2_feature_request.yml b/.github/ISSUE_TEMPLATE/2_feature_request.yml new file mode 100644 index 0000000..36c2180 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2_feature_request.yml @@ -0,0 +1,56 @@ +name: 🚀 Feature request +description: Propose a feature for this project +labels: ["needs triage", "enhancement"] +body: + - type: markdown + attributes: + value: > + Before you go any further, are you sure that this feature is not already implemented? + + If it's a question about how al-folio works, have a look at our [documentation](https://github.com/alshedivat/al-folio/blob/master/README.md), + [frequently asked questions](https://github.com/alshedivat/al-folio/blob/master/FAQ.md), + [past questions](https://github.com/alshedivat/al-folio/discussions/categories/q-a), + or [ask a question](https://github.com/alshedivat/al-folio/discussions/new?category=q-a). + + - type: checkboxes + id: requirements + attributes: + label: Have you checked that your feature request isn't already filed? + description: > + Please check if somebody else has already filed the same 🚀 feature request. + If you find a similar feature request, please add a 👍 reaction or comment on the original post. + options: + - label: I read through [FAQ](https://github.com/alshedivat/al-folio/blob/master/FAQ.md) and searched through the [past issues](https://github.com/alshedivat/al-folio/issues), none of which addressed my feature request. + required: true + - label: Yes, I have checked that this feature request isn't already filed. + required: true + + - type: textarea + attributes: + label: Description & Motivation + description: A clear and concise description of the 🚀 feature proposal + placeholder: | + Please outline the motivation for the proposal. + Is your feature request related to a problem? e.g., I'm always frustrated when [...]. + If this is related to another GitHub issue, please link it here + + - type: textarea + attributes: + label: Pitch + description: A clear and concise description of what you want to happen. + validations: + required: false + + - type: textarea + attributes: + label: Alternatives + description: A clear and concise description of any alternative solutions or features you've considered, if any. + validations: + required: false + + - type: textarea + attributes: + label: Additional context + description: Add any other context or screenshots about the feature request here. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..5da20df --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: ❓ Ask a Question + url: https://github.com/alshedivat/al-folio/discussions/categories/q-a + about: Ask and answer al-folio related questions. + - name: 📖 Read the documentation + url: https://github.com/alshedivat/al-folio/blob/master/README.md + about: Please consult the documentation before opening any issues! diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 0000000..4fdc27e --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,14 @@ +changelog: + exclude: + labels: + - ignore-for-release + categories: + - title: new features 🚀 + labels: + - enhancement + - title: bug fixes and improvements ✨ + labels: + - bug-fix + - title: other changes 🛠️ + labels: + - "*" diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000..8ec2004 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,18 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 60 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - security + - enhancement +# Label to use when marking an issue as stale +staleLabel: wontfix +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false diff --git a/.github/workflows/axe.yml b/.github/workflows/axe.yml new file mode 100644 index 0000000..a745c7d --- /dev/null +++ b/.github/workflows/axe.yml @@ -0,0 +1,73 @@ +name: Axe accessibility testing + +on: + # if you want to run this on every push uncomment the following lines + # push: + # branches: + # - master + # - main + # pull_request: + # branches: + # - master + # - main + workflow_dispatch: + inputs: + url: + description: "URL to be checked (e.g.: blog/)" + required: false + +env: + URL: "" + +jobs: + check: + # available images: https://github.com/actions/runner-images#available-images + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v4 + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: "3.2.2" + bundler-cache: true + - name: Update _config.yml ⚙️ + uses: fjogeleit/yaml-update-action@main + with: + commitChange: false + valueFile: "_config.yml" + changes: | + { + "giscus.repo": "${{ github.repository }}", + "baseurl": "" + } + - name: Install and Build 🔧 + run: | + pip3 install --upgrade jupyter + export JEKYLL_ENV=production + bundle exec jekyll build --lsi + - name: Purge unused CSS 🧹 + run: | + npm install -g purgecss + purgecss -c purgecss.config.js + - name: Get Chromium version 🌐 + # https://github.com/GoogleChromeLabs/chrome-for-testing?tab=readme-ov-file#other-api-endpoints + run: | + CHROMIUM_VERSION=$(wget -qO- https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_STABLE | cut -d. -f1) + echo "Chromium version: $CHROMIUM_VERSION" + echo "CHROMIUM_VERSION=$CHROMIUM_VERSION" >> $GITHUB_ENV + - name: Setup Chrome 🌐 + id: setup-chrome + uses: browser-actions/setup-chrome@v1 + with: + chrome-version: ${{ env.CHROMIUM_VERSION }} + - name: Install chromedriver 🚗 + run: | + npm install -g chromedriver@$CHROMIUM_VERSION + - name: Run axe 🪓 + # https://github.com/dequelabs/axe-core-npm/tree/develop/packages/cli + run: | + npm install -g @axe-core/cli + npm install -g http-server + http-server _site/ & + axe --chromedriver-path $(npm root -g)/chromedriver/bin/chromedriver http://localhost:8080/${{ github.event.inputs.url || env.URL }} --load-delay=1500 --exit diff --git a/.github/workflows/broken-links-site.yml b/.github/workflows/broken-links-site.yml new file mode 100644 index 0000000..fae797c --- /dev/null +++ b/.github/workflows/broken-links-site.yml @@ -0,0 +1,46 @@ +name: Check for broken links on site + +on: + workflow_run: + workflows: [Deploy site] + types: [completed] + +jobs: + check-links-on-site: + # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-a-workflow-based-on-the-conclusion-of-another-workflow + if: ${{ github.event.workflow_run.conclusion == 'success' }} + # available images: https://github.com/actions/runner-images#available-images + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v4 + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: "3.2.2" + bundler-cache: true + - name: Update _config.yml ⚙️ + uses: fjogeleit/yaml-update-action@main + with: + commitChange: false + valueFile: "_config.yml" + changes: | + { + "giscus.repo": "${{ github.repository }}", + "baseurl": "" + } + - name: Install and Build 🔧 + run: | + pip3 install --upgrade jupyter + export JEKYLL_ENV=production + bundle exec jekyll build --lsi + - name: Purge unused CSS 🧹 + run: | + npm install -g purgecss + purgecss -c purgecss.config.js + - name: Link Checker 🔗 + uses: lycheeverse/lychee-action@v1.9.0 + with: + fail: true + # only check local links + args: --offline --remap '_site(/?.*)/assets/(.*) _site/assets/$2' --verbose --no-progress '_site/**/*.html' diff --git a/.github/workflows/broken-links.yml b/.github/workflows/broken-links.yml new file mode 100644 index 0000000..36d1d6e --- /dev/null +++ b/.github/workflows/broken-links.yml @@ -0,0 +1,52 @@ +name: Check for broken links + +on: + push: + branches: + - master + - main + paths: + - "assets/**" + - "**.html" + - "**.js" + - "**.liquid" + - "**/*.md" + - "**.yml" + - "!.github/workflows/axe.yml" + - "!.github/workflows/deploy-docker-tag.yml" + - "!.github/workflows/deploy-image.yml" + - "!.github/workflows/docker-slim.yml" + - "!.github/workflows/lighthouse-badger.yml" + - "!.github/workflows/prettier.yml" + - "!lighthouse_results/**" + pull_request: + branches: + - master + - main + paths: + - "assets/**" + - "**.html" + - "**.js" + - "**.liquid" + - "**/*.md" + - "**.yml" + - "!.github/workflows/axe.yml" + - "!.github/workflows/deploy-docker-tag.yml" + - "!.github/workflows/deploy-image.yml" + - "!.github/workflows/docker-slim.yml" + - "!.github/workflows/lighthouse-badger.yml" + - "!.github/workflows/prettier.yml" + - "!lighthouse_results/**" + +jobs: + link-checker: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Link Checker 🔗 + uses: lycheeverse/lychee-action@v1.9.0 + with: + fail: true + # removed md files that include liquid tags + args: --exclude-path README.md --exclude-path _pages/404.md --exclude-path _pages/blog.md --exclude-path _posts/2018-12-22-distill.md --verbose --no-progress './**/*.md' './**/*.html' diff --git a/.github/workflows/deploy-docker-tag.yml b/.github/workflows/deploy-docker-tag.yml new file mode 100644 index 0000000..fadfff6 --- /dev/null +++ b/.github/workflows/deploy-docker-tag.yml @@ -0,0 +1,48 @@ +name: Docker Image CI (Upload Tag) + +on: + push: + tags: + - "v*" + paths: + - "bin/entry_point.sh" + - "Dockerfile" + - "Gemfile" + - "Gemfile.lock" + - "package.json" + - "package-lock.json" + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: amirpourmand/al-folio + + - name: Login + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64/v8 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/deploy-image.yml b/.github/workflows/deploy-image.yml new file mode 100644 index 0000000..133f22d --- /dev/null +++ b/.github/workflows/deploy-image.yml @@ -0,0 +1,43 @@ +name: Docker Image CI + +on: + push: + branches: + - master + - main + paths: + - "bin/entry_point.sh" + - "Dockerfile" + - "Gemfile" + - "Gemfile.lock" + - "package.json" + - "package-lock.json" + +jobs: + build: + runs-on: ubuntu-latest + if: github.repository_owner == 'alshedivat' + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + push: true + platforms: linux/amd64,linux/arm64/v8 + tags: amirpourmand/al-folio diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..4979e3e --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,89 @@ +name: Deploy site + +on: + push: + branches: + - master + - main + paths: + - "assets/**" + - "**.html" + - "**.js" + - "**.liquid" + - "**/*.md" + - "**.yml" + - "!.github/workflows/axe.yml" + - "!.github/workflows/broken-links.yml" + - "!.github/workflows/deploy-docker-tag.yml" + - "!.github/workflows/deploy-image.yml" + - "!.github/workflows/docker-slim.yml" + - "!.github/workflows/lighthouse-badger.yml" + - "!.github/workflows/prettier.yml" + - "!lighthouse_results/**" + - "!CONTRIBUTING.md" + - "!CUSTOMIZE.md" + - "!FAQ.md" + - "!INSTALL.md" + - "!README.md" + pull_request: + branches: + - master + - main + paths: + - "assets/**" + - "**.html" + - "**.js" + - "**.liquid" + - "**/*.md" + - "**.yml" + - "!.github/workflows/axe.yml" + - "!.github/workflows/broken-links.yml" + - "!.github/workflows/deploy-docker-tag.yml" + - "!.github/workflows/deploy-image.yml" + - "!.github/workflows/docker-slim.yml" + - "!.github/workflows/lighthouse-badger.yml" + - "!.github/workflows/prettier.yml" + - "!lighthouse_results/**" + - "!CONTRIBUTING.md" + - "!CUSTOMIZE.md" + - "!FAQ.md" + - "!INSTALL.md" + - "!README.md" + workflow_dispatch: + +permissions: + contents: write + +jobs: + deploy: + # available images: https://github.com/actions/runner-images#available-images + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v4 + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: "3.2.2" + bundler-cache: true + - name: Update _config.yml ⚙️ + uses: fjogeleit/yaml-update-action@main + with: + commitChange: false + valueFile: "_config.yml" + propertyPath: "giscus.repo" + value: ${{ github.repository }} + - name: Install and Build 🔧 + run: | + pip3 install --upgrade jupyter + export JEKYLL_ENV=production + bundle exec jekyll build --lsi + - name: Purge unused CSS 🧹 + run: | + npm install -g purgecss + purgecss -c purgecss.config.js + - name: Deploy 🚀 + if: github.event_name != 'pull_request' + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: _site diff --git a/.github/workflows/docker-slim.yml b/.github/workflows/docker-slim.yml new file mode 100644 index 0000000..8c8cf71 --- /dev/null +++ b/.github/workflows/docker-slim.yml @@ -0,0 +1,51 @@ +name: Docker Slim + +#Only trigger, when the build workflow succeeded +on: + workflow_run: + workflows: ["Docker Image CI"] + types: + - completed + +# on: +# push: +# branches: +# - 'master' + +jobs: + build: + # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-a-workflow-based-on-the-conclusion-of-another-workflow + if: ${{ github.event.workflow_run.conclusion == 'success' }} and github.repository_owner == 'alshedivat' + runs-on: ubuntu-latest + defaults: + run: + working-directory: ${{ github.workspace }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Login + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: update docker-compose + shell: bash + run: | + sed -i "s|\.:|${{ github.workspace }}:|g" ${{ github.workspace }}/docker-compose.yml + cat ${{ github.workspace }}/docker-compose.yml + + - uses: kitabisa/docker-slim-action@v1.0.3 + env: + DSLIM_PULL: true + DSLIM_COMPOSE_FILE: ${{ github.workspace }}/docker-compose.yml + DSLIM_TARGET_COMPOSE_SVC: jekyll + DSLIM_CONTINUE_AFTER: signal + with: + target: amirpourmand/al-folio + tag: "slim" + + # Push to the registry + - run: docker image push amirpourmand/al-folio:slim diff --git a/.github/workflows/lighthouse-badger.yml b/.github/workflows/lighthouse-badger.yml new file mode 100644 index 0000000..182517c --- /dev/null +++ b/.github/workflows/lighthouse-badger.yml @@ -0,0 +1,63 @@ +# Lighthouse-Badger-Easy | GitHub Action Workflow +# +# Description: Generates, adds & updates manually/automatically Lighthouse badges & reports from one/multiple input URL(s) to the current repository & main branch with minimal settings +# Author: Sitdisch +# Source: https://github.com/myactionway/lighthouse-badger-workflows +# License: MIT +# Copyright (c) 2021 Sitdisch + +name: "Lighthouse Badger" + +######################################################################## +# DEFINE YOUR INPUTS AND TRIGGERS IN THE FOLLOWING +######################################################################## + +# INPUTS as environmental variables (env) for not manually triggered workflows +env: + URLS: https://alshedivat.github.io/al-folio/ + TOKEN_NAME: LIGHTHOUSE_BADGER_TOKEN + # If any of the following env is blank, a default value is used instead + REPO_BRANCH: "${{ github.repository }} master" # target repository & branch e.g. 'dummy/mytargetrepo main' + MOBILE_LIGHTHOUSE_PARAMS: "--only-categories=performance,accessibility,best-practices,seo --throttling.cpuSlowdownMultiplier=2" + DESKTOP_LIGHTHOUSE_PARAMS: "--only-categories=performance,accessibility,best-practices,seo --preset=desktop --throttling.cpuSlowdownMultiplier=1" + +# TRIGGERS +on: + page_build: + # schedule: # Check your schedule here => https://crontab.guru/ + # - cron: '55 23 * * 0' # e.g. every Sunday at 23:55 + # + # THAT'S IT; YOU'RE DONE; + workflow_dispatch: + +######################################################################## +# THAT'S IT; YOU DON'T HAVE TO DEFINE ANYTHING IN THE FOLLOWING +######################################################################## + +jobs: + lighthouse-badger-easy: + runs-on: ubuntu-latest + timeout-minutes: 8 + steps: + - name: Preparatory Tasks + run: | + REPOSITORY=`expr "${{ env.REPO_BRANCH }}" : "\([^ ]*\)"` + BRANCH=`expr "${{ env.REPO_BRANCH }}" : ".* \([^ ]*\)"` + echo "REPOSITORY=$REPOSITORY" >> $GITHUB_ENV + echo "BRANCH=$BRANCH" >> $GITHUB_ENV + env: + REPO_BRANCH: ${{ env.REPO_BRANCH }} + - uses: actions/checkout@v4 + with: + repository: ${{ env.REPOSITORY }} + token: ${{ secrets[github.event.inputs.token_name] || secrets[env.TOKEN_NAME] }} + ref: ${{ env.BRANCH }} + - uses: actions/checkout@v4 + with: + repository: "myactionway/lighthouse-badges" + path: temp_lighthouse_badges_nested + - uses: myactionway/lighthouse-badger-action@v2.2 + with: + urls: ${{ env.URLS }} + mobile_lighthouse_params: ${{ env.MOBILE_LIGHTHOUSE_PARAMS }} + desktop_lighthouse_params: ${{ env.DESKTOP_LIGHTHOUSE_PARAMS }} diff --git a/.github/workflows/prettier-comment-on-pr.yml b/.github/workflows/prettier-comment-on-pr.yml new file mode 100644 index 0000000..e95075c --- /dev/null +++ b/.github/workflows/prettier-comment-on-pr.yml @@ -0,0 +1,18 @@ +name: Comment on pull request + +on: + repository_dispatch: + types: [prettier-failed-on-pr] + +jobs: + comment: + # available images: https://github.com/actions/runner-images#available-images + runs-on: ubuntu-latest + steps: + - name: PR comment with html diff 💬 + uses: thollander/actions-comment-pull-request@v2 + with: + comment_tag: prettier-failed + pr_number: ${{ github.event.client_payload.pr_number }} + message: | + Failed [prettier code check](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.event.client_payload.run_id }}). Check [this file](${{ github.event.client_payload.artifact_url }}) for more information. diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml new file mode 100644 index 0000000..60446c8 --- /dev/null +++ b/.github/workflows/prettier.yml @@ -0,0 +1,48 @@ +name: Prettier code formatter + +on: + pull_request: + branches: + - master + - main + push: + branches: + - master + - main + +jobs: + check: + # available images: https://github.com/actions/runner-images#available-images + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v4 + - name: Setup Node.js ⚙️ + uses: actions/setup-node@v4 + - name: Install Prettier 💾 + run: npm install --save-dev --save-exact prettier @shopify/prettier-plugin-liquid + - name: Prettier Check 🔎 + id: prettier + run: npx prettier . --check + - name: Create diff 📝 + # https://docs.github.com/en/actions/learn-github-actions/expressions#failure + if: ${{ failure() }} + run: | + npx prettier . --write + git diff -- . ':(exclude)package-lock.json' ':(exclude)package.json' > diff.txt + npm install -g diff2html-cli + diff2html -i file -s side -F diff.html -- diff.txt + - name: Upload html diff ⬆️ + id: artifact-upload + if: ${{ failure() && steps.prettier.conclusion == 'failure' }} + uses: actions/upload-artifact@v4 + with: + name: HTML Diff + path: diff.html + retention-days: 7 + - name: Dispatch information to repository 🗣️ + if: ${{ failure() && steps.prettier.conclusion == 'failure' && github.event_name == 'pull_request' }} + uses: peter-evans/repository-dispatch@v2 + with: + event-type: prettier-failed-on-pr + client-payload: '{"pr_number": "${{ github.event.number }}", "artifact_url": "${{ steps.artifact-upload.outputs.artifact-url }}", "run_id": "${{ github.run_id }}"}' diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5cbbca2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +_site +.bundle +.sass-cache +.jekyll-cache +.jekyll-metadata +.DS_store +.ruby-version +.tweet-cache +Gemfile.lock +node_modules/ +vendor \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..d61cba8 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,10 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.3.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..f917ab0 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +**/*.min.css +**/*.min.js +assets/css/main.scss +assets/plotly/demo.html +lighthouse_results/** +_posts/2015-10-20-math.md diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..0163f19 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +plugins: ["@shopify/prettier-plugin-liquid"] +printWidth: 150 +trailingComma: "es5" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..1845074 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,26 @@ +# Contributing to al-folio + +Thank you for considering contributing to al-folio! + +## Pull Requests + +We welcome your pull requests (PRs). +For minor fixes (e.g., documentation improvements), feel free to submit a PR directly. +If you would like to implement a new feature or a bug, please make sure you (or someone else) has opened an appropriate issue first; in your PR, please mention the issue it addresses. + +## Issues + +We use GitHub issues to track bugs and feature requests. +Before submitting an issue, please make sure: + +1. You have read [the FAQ section](FAQ.md) of the README and your question is NOT addressed there. +2. You have done your best to ensure that your issue is NOT a duplicate of one of [the previous issues](https://github.com/alshedivat/al-folio/issues). +3. Your issue is either a bug (unexpected/undesirable behavior) or a feature request. + If it is just a question, please ask it in the [Discussions](https://github.com/alshedivat/al-folio/discussions) forum. + +When submitting an issue, please make sure to use the appropriate template. + +## License + +By contributing to al-folio, you agree that your contributions will be licensed +under the LICENSE file in the root directory of the source tree. diff --git a/CUSTOMIZE.md b/CUSTOMIZE.md new file mode 100644 index 0000000..ffe37f0 --- /dev/null +++ b/CUSTOMIZE.md @@ -0,0 +1,147 @@ +# Customize + +Here we will give you some tips on how to customize the website. One important thing to note is that **ALL** the changes you make should be done on the **main** branch of your repository. The `gh-pages` branch is automatically overwritten every time you make a change to the main branch. + +## Project structure + +The project is structured as follows, focusing on the main components that you will need to modify: + +```txt +. +├── 📂 assets/: contains the assets that are displayed in the website +│   └── 📂 json/ + │   └── 📄 resume.json: CV in JSON format (https://jsonresume.org/) +├── 📂 _bibliography/ +│   └── 📄 papers.bib: bibliography in BibTeX format +├── 📄 _config.yml: the configuration file of the template +├── 📂 _data/: contains some of the data used in the template +│   ├── 📄 cv.yml: CV in YAML format, used when assets/json/resume.json is not found +│   └── 📄 repositories.yml: users and repositories info in YAML format +├── 📂 _includes/: contains code parts that are included in the main HTML file +│   └── 📄 news.liquid: defines the news section layout in the about page +├── 📂 _layouts/: contains the layouts to choose from in the frontmatter of the Markdown files +├── 📂 _news/: the news that will appear in the news section in the about page +├── 📂 _pages/: contains the pages of the website +| └── 📄 404.md: 404 page (page not found) +├── 📂 _posts/: contains the blog posts +├── 📂 _projects/: contains the projects +└── 📂 _sass/: contains the SASS files that define the style of the website + ├── 📄 _base.scss: base style of the website + ├── 📄 _cv.scss: style of the CV page + ├── 📄 _distill.scss: style of the Distill articles + ├── 📄 _layout.scss: style of the overall layout + ├── 📄 _themes.scss: themes colors and a few icons + └── 📄 _variables.scss: variables used in the SASS files +``` + +## Configuration + +The configuration file [\_config.yml](_config.yml) contains the main configuration of the website. Most of the settings is self-explanatory and we also tried to add as much comments as possible. If you have any questions, please check if it was not already answered in the [FAQ](FAQ.md). + +> Note that the `url` and `baseurl` settings are used to generate the links of the website, as explained in the [install instructions](INSTALL.md). + +All changes made to this file are only visible after you rebuild the website. That means that you need to run `bundle exec jekyll serve --lsi` again if you are running the website locally or push your changes to GitHub if you are using GitHub Pages. All other changes are visible immediately, you only need to refresh the page. + +## Modifying the CV information + +There are currently 2 different ways of generating the CV page content. The first one is by using a json file located in [assets/json/resume.json](assets/json/resume.json). It is a [known standard](https://jsonresume.org/) for creating a CV programmatically. The second one, currently used as a fallback when the json file is not found, is by using a yml file located in [\_data/cv.yml](_data/cv.yml). This was the original way of creating the CV page content and since it is more human readable than a json file we decided to keep it as an option. + +What this means is, if there is no resume data defined in [\_config.yml](_config.yml) and loaded via a json file, it will load the contents of [\_data/cv.yml](_data/cv.yml). If you want to use the [\_data/cv.yml](_data/cv.yml) file as the source of your CV, you must delete the [assets/json/resume.json](assets/json/resume.json) file. + +## Modifying the user and repository information + +The user and repository information is defined in [\_data/repositories.yml](_data/repositories.yml). You can add as many users and repositories as you want. Both informations are used in the `repositories` section. + +## Creating new pages + +You can create new pages by adding new Markdown files in the [\_pages](_pages/) directory. The easiest way to do this is to copy an existing page and modify it. You can choose the layout of the page in the [frontmatter](https://jekyllrb.com/docs/front-matter/) of the Markdown file. You can also add new layouts in the [\_layouts](_layouts/) directory if you feel the need for it. + +## Creating new blog posts + +To create a new blog post, you can add a new Markdown file in the [\_posts](_posts/) directory. The [name of the file must follow](https://jekyllrb.com/docs/posts/#creating-posts) the format `YYYY-MM-DD-title.md`. The easiest way to do this is to copy an existing blog post and modify it. Note that some blog posts have optional fields in the [frontmatter](https://jekyllrb.com/docs/front-matter/) that are used to enable specific behaviors or functions. + +If you want to create blog posts that are not ready to be published, but you want to track it with git, you can create a [\_drafts](https://jekyllrb.com/docs/posts/#drafts) directory and store them there. + +## Creating new projects + +You can create new projects by adding new Markdown files in the [\_projects](_projects/) directory. The easiest way to do this is to copy an existing project and modify it. + +## Adding some news + +You can add news in the about page by adding new Markdown files in the [\_news](_news/) directory. There are currently two types of news: inline news and news with a link. News with a link take you to a new page while inline news are displayed directly in the about page. The easiest way to create yours is to copy an existing news and modify it. + +## Adding Collections + +This Jekyll theme implements `collections` to let you break up your work into categories. The theme comes with two default collections: `news` and `projects`. Items from the `news` collection are automatically displayed on the home page. Items from the `projects` collection are displayed on a responsive grid on projects page. + +You can easily create your own collections, apps, short stories, courses, or whatever your creative work is. To do this, edit the collections in the [\_config.yml](_config.yml) file, create a corresponding folder, and create a landing page for your collection, similar to [\_pages/projects.md](_pages/projects.md). + +## Adding a new publication + +To add publications create a new entry in the [\_bibliography/papers.bib](_bibliography/papers.bib) file. You can find the BibTeX entry of a publication in Google Scholar by clicking on the quotation marks below the publication title, then clicking on "BibTeX", or also in the conference page itself. By default, the publications will be sorted by year and the most recent will be displayed first. You can change this behavior and more in the `Jekyll Scholar` section in [\_config.yml](_config.yml) file. + +You can add extra information to a publication, like a PDF file in the `assets/pdfs/` directory and add the path to the PDF file in the BibTeX entry with the `pdf` field. Some of the supported fields are: `abstract`, `altmetric`, `arxiv`, `bibtex_show`, `blog`, `code`, `dimensions`, `doi`, `eprint`, `html`, `isbn`, `pdf`, `pmid`, `poster`, `slides`, `supp`, `video`, and `website`. + +### Author annotation + +In publications, the author entry for yourself is identified by string array `scholar:last_name` and string array `scholar:first_name` in [\_config.yml](_config.yml). For example, if you have the following entry in your [\_config.yml](_config.yml): + +```yaml +scholar: + last_name: [Einstein] + first_name: [Albert, A.] +``` + +If the entry matches one form of the last names and the first names, it will be underlined. Keep meta-information about your co-authors in [\_data/coauthors.yml](_data/coauthors.yml) and Jekyll will insert links to their webpages automatically. The co-author data format is as follows, + +```yaml +"adams": + - firstname: ["Edwin", "E.", "E. P.", "Edwin Plimpton"] + url: https://en.wikipedia.org/wiki/Edwin_Plimpton_Adams + +"podolsky": + - firstname: ["Boris", "B.", "B. Y.", "Boris Yakovlevich"] + url: https://en.wikipedia.org/wiki/Boris_Podolsky + +"rosen": + - firstname: ["Nathan", "N."] + url: https://en.wikipedia.org/wiki/Nathan_Rosen + +"bach": + - firstname: ["Johann Sebastian", "J. S."] + url: https://en.wikipedia.org/wiki/Johann_Sebastian_Bach + + - firstname: ["Carl Philipp Emanuel", "C. P. E."] + url: https://en.wikipedia.org/wiki/Carl_Philipp_Emanuel_Bach +``` + +If the entry matches one of the combinations of the last names and the first names, it will be highlighted and linked to the url provided. + +### Buttons (through custom bibtex keywords) + +There are several custom bibtex keywords that you can use to affect how the entries are displayed on the webpage: + +- `abbr`: Adds an abbreviation to the left of the entry. You can add links to these by creating a venue.yaml-file in the \_data folder and adding entries that match. +- `abstract`: Adds an "Abs" button that expands a hidden text field when clicked to show the abstract text +- `altmetric`: Adds an [Altmetric](https://www.altmetric.com/) badge (Note: if DOI is provided just use `true`, otherwise only add the altmetric identifier here - the link is generated automatically) +- `arxiv`: Adds a link to the Arxiv website (Note: only add the arxiv identifier here - the link is generated automatically) +- `bibtex_show`: Adds a "Bib" button that expands a hidden text field with the full bibliography entry +- `blog`: Adds a "Blog" button redirecting to the specified link +- `code`: Adds a "Code" button redirecting to the specified link +- `dimensions`: Adds a [Dimensions](https://www.dimensions.ai/) badge (Note: if DOI or PMID is provided just use `true`, otherwise only add the Dimensions' identifier here - the link is generated automatically) +- `html`: Inserts an "HTML" button redirecting to the user-specified link +- `pdf`: Adds a "PDF" button redirecting to a specified file (if a full link is not specified, the file will be assumed to be placed in the /assets/pdf/ directory) +- `poster`: Adds a "Poster" button redirecting to a specified file (if a full link is not specified, the file will be assumed to be placed in the /assets/pdf/ directory) +- `slides`: Adds a "Slides" button redirecting to a specified file (if a full link is not specified, the file will be assumed to be placed in the /assets/pdf/ directory) +- `supp`: Adds a "Supp" button to a specified file (if a full link is not specified, the file will be assumed to be placed in the /assets/pdf/ directory) +- `website`: Adds a "Website" button redirecting to the specified link + +You can implement your own buttons by editing the [\_layouts/bib.liquid](_layouts/bib.liquid) file. + +## Changing theme color + +A variety of beautiful theme colors have been selected for you to choose from. The default is purple, but you can quickly change it by editing the `--global-theme-color` variable in the [\_sass/\_themes.scss](_sass/_themes.scss) file. Other color variables are listed there as well. The stock theme color options available can be found at [\_sass/\_variables.scss](_sass/_variables.scss). You can also add your own colors to this file assigning each a name for ease of use across the template. + +## Adding social media information + +You can add your social media links by adding the specified information at the `Social integration` section in the [\_config.yml](_config.yml) file. This information will appear at the bottom of the `About` page. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e55a99f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,41 @@ +FROM ubuntu:latest +ENV DEBIAN_FRONTEND noninteractive + +Label MAINTAINER Amir Pourmand + +RUN apt-get update -y && apt-get install -y --no-install-recommends \ + locales \ + imagemagick \ + ruby-full \ + build-essential \ + zlib1g-dev \ + jupyter-nbconvert \ + inotify-tools procps && \ + apt-get clean && rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* + + +RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \ + locale-gen + + +ENV LANG=en_US.UTF-8 \ + LANGUAGE=en_US:en \ + LC_ALL=en_US.UTF-8 \ + JEKYLL_ENV=production + +# install jekyll and dependencies +RUN gem install jekyll bundler + +RUN mkdir /srv/jekyll + +ADD Gemfile /srv/jekyll + +WORKDIR /srv/jekyll + +RUN bundle install --no-cache +# && rm -rf /var/lib/gems/3.1.0/cache +EXPOSE 8080 + +COPY bin/entry_point.sh /tmp/entry_point.sh + +CMD ["/tmp/entry_point.sh"] diff --git a/FAQ.md b/FAQ.md new file mode 100644 index 0000000..694e422 --- /dev/null +++ b/FAQ.md @@ -0,0 +1,78 @@ +# Frequently Asked Questions + +Here are some frequently asked questions. If you have a different question, please check if it was not already answered in the Q&A section of the [GitHub Discussions](https://github.com/alshedivat/al-folio/discussions/categories/q-a). If not, feel free to ask a new question there. + +- [After I create a new repository from this template and setup the repo, I get a deployment error. Isn't the website supposed to correctly deploy automatically?](#after-i-create-a-new-repository-from-this-template-and-setup-the-repo-i-get-a-deployment-error-isnt-the-website-supposed-to-correctly-deploy-automatically) +- [I am using a custom domain (e.g., `foo.com`). My custom domain becomes blank in the repository settings after each deployment. How do I fix that?](#i-am-using-a-custom-domain-eg-foocom-my-custom-domain-becomes-blank-in-the-repository-settings-after-each-deployment-how-do-i-fix-that) +- [My webpage works locally. But after deploying, it fails to build and throws `Unknown tag 'toc'`. How do I fix that?](#my-webpage-works-locally-but-after-deploying-it-fails-to-build-and-throws-unknown-tag-toc-how-do-i-fix-that) +- [My webpage works locally. But after deploying, it is not displayed correctly (CSS and JS is not loaded properly). How do I fix that?](#my-webpage-works-locally-but-after-deploying-it-is-not-displayed-correctly-css-and-js-is-not-loaded-properly-how-do-i-fix-that) +- [Atom feed doesn't work. Why?](#atom-feed-doesnt-work-why) +- [My site doesn't work when I enable `related_blog_posts`. Why?](#my-site-doesnt-work-when-i-enable-related_blog_posts-why) +- [When trying to deploy, it's asking for github login credentials, which github disabled password authentication and it exits with an error. How to fix?](#when-trying-to-deploy-its-asking-for-github-login-credentials-which-github-disabled-password-authentication-and-it-exits-with-an-error-how-to-fix) +- [When I manually run the Lighthouse Badger workflow, it fails with `Error: Input required and not supplied: token`. How do I fix that?](#when-i-manually-run-the-lighthouse-badger-workflow-it-fails-with-error-input-required-and-not-supplied-token-how-do-i-fix-that) +- [My code runs fine locally, but when I create a commit and submit it, it fails with `prettier code formatter workflow run failed for master branch`. How do I fix that?](#my-code-runs-fine-locally-but-when-i-create-a-commit-and-submit-it-it-fails-with-prettier-code-formatter-workflow-run-failed-for-master-branch-how-do-i-fix-that) +- [After I update my site with some new content, even a small change, the GitHub action throws an error or displays a warning. What happened?](#after-i-update-my-site-with-some-new-content-even-a-small-change-the-github-action-throws-an-error-or-displays-a-warning-what-happened) +- [I am trying to deploy my site, but it fails with `Could not find gem 'jekyll-diagrams' in locally installed gems`. How do I fix that?](#i-am-trying-to-deploy-my-site-but-it-fails-with-could-not-find-gem-jekyll-diagrams-in-locally-installed-gems-how-do-i-fix-that) + +--- + +#### After I create a new repository from this template and setup the repo, I get a deployment error. Isn't the website supposed to correctly deploy automatically? + +Yes, if you are using release `v0.3.5` or later, the website will automatically and correctly re-deploy right after your first commit. Please make some changes (e.g., change your website info in `_config.yml`), commit, and push. Make sure to follow [deployment instructions](https://github.com/alshedivat/al-folio#deployment). (Relevant issue: [209](https://github.com/alshedivat/al-folio/issues/209#issuecomment-798849211).) + +#### I am using a custom domain (e.g., `foo.com`). My custom domain becomes blank in the repository settings after each deployment. How do I fix that? + +You need to add `CNAME` file to the `master` or `source` branch of your repository. The file should contain your custom domain name. (Relevant issue: [130](https://github.com/alshedivat/al-folio/issues/130).) + +#### My webpage works locally. But after deploying, it fails to build and throws `Unknown tag 'toc'`. How do I fix that? + +Make sure you followed through the [deployment instructions](#deployment) in the previous section. You should have set the deployment branch to `gh-pages`. (Related issue: [1438](https://github.com/alshedivat/al-folio/issues/1438).) + +#### My webpage works locally. But after deploying, it is not displayed correctly (CSS and JS is not loaded properly). How do I fix that? + +Make sure to correctly specify the `url` and `baseurl` paths in `_config.yml`. Set `url` to `https://.github.io` or to `https://` if you are using a custom domain. If you are deploying a personal or organization website, leave `baseurl` blank. If you are deploying a project page, set `baseurl: //`. If all previous steps were done correctly, all is missing is [for your browser to fetch again the site stylesheet](https://github.com/alshedivat/al-folio/issues/1398#issuecomment-1609518404). + +#### Atom feed doesn't work. Why? + +Make sure to correctly specify the `url` and `baseurl` paths in `_config.yml`. RSS Feed plugin works with these correctly set up fields: `title`, `url`, `description` and `author`. Make sure to fill them in an appropriate way and try again. + +#### My site doesn't work when I enable `related_blog_posts`. Why? + +This is probably due to the [classifier reborn](https://github.com/jekyll/classifier-reborn) plugin, which is used to calculate related posts. If the error states `Liquid Exception: Zero vectors can not be normalized...`, it means that it could not calculate related posts for a specific post. This is usually caused by [empty or minimal blog posts](https://github.com/jekyll/classifier-reborn/issues/64) without meaningful words (i.e. only [stop words](https://en.wikipedia.org/wiki/Stop_words)) or even [specific characters](https://github.com/jekyll/classifier-reborn/issues/194) you used in your posts. Also, the calculus for similar posts are made for every `post`, which means every page that uses `layout: post`, including the announcements. To change this behavior, simply add `related_posts: false` to the front matter of the page you don't want to display related posts on. Another solution is to disable the lsi (latent semantic indexing) entirely by removing the `--lsi` flag in the code. Related issue: [#1828](https://github.com/alshedivat/al-folio/issues/1828). + +#### When trying to deploy, it's asking for github login credentials, which github disabled password authentication and it exits with an error. How to fix? + +Open .git/config file using your preferred editor. Change the `https` portion of the `url` variable to `ssh`. Try deploying again. + +#### When I manually run the [Lighthouse Badger](https://github.com/alshedivat/al-folio/actions/workflows/lighthouse-badger.yml) workflow, it fails with `Error: Input required and not supplied: token`. How do I fix that? + +You need to [create a personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token) and [add it as a secret](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions#creating-encrypted-secrets-for-a-repository) named `LIGHTHOUSE_BADGER_TOKEN` to your repository. For more information, check [lighthouse-badger documentation](https://github.com/MyActionWay/lighthouse-badger-workflows#lighthouse-badger-easyyml) on how to do this. + +#### My code runs fine locally, but when I create a commit and submit it, it fails with `prettier code formatter workflow run failed for master branch`. How do I fix that? + +We implemented support for [Prettier code formatting](https://prettier.io/) in [#2048](https://github.com/alshedivat/al-folio/pull/2048). It basically ensures that your code is well formatted. If you want to ensure your code is compliant with `Prettier` you can install it in your computer [integrated with an editor](https://prettier.io/docs/en/editors), [install it and run manually](https://prettier.io/docs/en/install), or you can disable it for your repo. For this, just delete the file [.github/workflows/prettier.yml](https://github.com/alshedivat/al-folio/blob/master/.github/workflows/prettier.yml). + +#### After I update my site with some new content, even a small change, the GitHub action throws an error or displays a warning. What happened? + +Probably your GitHub workflow is throwing an error like this: + +```bash +/opt/hostedtoolcache/Ruby/3.0.2/x64/lib/ruby/gems/3.0.0/gems/bundler-2.5.5/lib/bundler/runtime.rb:304:in `check_for_activated_spec!': You have already activated uri 0.10.1, but your Gemfile requires uri 0.13.0. Since uri is a default gem, you can either remove your dependency on it or try updating to a newer version of bundler that supports uri as a default gem. (Gem::LoadError) +``` + +or maybe displaying a warning like one of these: + +``` +Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v3. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/. +Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v2, actions/cache@v2. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/. +The following actions uses node12 which is deprecated and will be forced to run on node16: actions/checkout@v2, actions/cache@v2. For more info: https://github.blog/changelog/2023-06-13-github-actions-all-actions-will-run-on-node16-instead-of-node12-by-default/ +The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/ +``` + +If that's the case, you are using deprecated libraries/commands. This happens because you are using a very old version of al-folio. To fix this it is recommended [upgrading your code to the latest version](INSTALL.md#upgrading-from-a-previous-version) of the template. You will probably need to do some manual merging. If you find it easier, you could create a copy of your repository, do a fresh installation from the template and reapply all your changes. For this I would recommend a tool like [meld](https://meldmerge.org/) or [winmerge](https://winmerge.org/) to check the differences between directories/files. + +Note that libraries tend to be deprecated and support for them dropped as they are no longer maintained, and keep using them involves security breaches. Also, some of these deprecations are enforced, for example, by GitHub itself, so there's so much we can do. We have also added tons of new functionality, as well as tidying things up and improving the overall speed and structure, so you could also benefit from these improvements. + +#### I am trying to deploy my site, but it fails with `Could not find gem 'jekyll-diagrams' in locally installed gems`. How do I fix that? + +`jekyll-diagrams` support was dropped in [#1992](https://github.com/alshedivat/al-folio/pull/1992) in favor of using `mermaid.js` directly. Simply [update your code](INSTALL.md#upgrading-from-a-previous-version) to get the latest changes. diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..be54585 --- /dev/null +++ b/Gemfile @@ -0,0 +1,26 @@ +source 'https://rubygems.org' +group :jekyll_plugins do + gem 'classifier-reborn' + gem 'jekyll' + gem 'jekyll-archives' + gem 'jekyll-email-protect' + gem 'jekyll-feed' + gem 'jekyll-get-json' + gem 'jekyll-imagemagick' + gem 'jekyll-jupyter-notebook' + gem 'jekyll-link-attributes' + gem 'jekyll-minifier' + gem 'jekyll-paginate-v2' + gem 'jekyll-scholar' + gem 'jekyll-sitemap' + gem 'jekyll-toc' + gem 'jekyll-twitter-plugin' + gem 'jemoji' + gem 'mini_racer' + gem 'unicode_utils' + gem 'webrick' +end +group :other_plugins do + gem 'feedjira' + gem 'httparty' +end diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 0000000..754e5e1 --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,225 @@ +# Table of Contents + +- [Installing and Deploying](#installing-and-deploying) + - [Recommended Approach](#recommended-approach) + - [Local Setup on Windows](#local-setup-on-windows) + - [Local Setup using Docker (Recommended)](#local-setup-using-docker-recommended) + - [Build your own docker image](#build-your-own-docker-image) + - [Local Setup (Legacy)](#local-setup-legacy) + - [Deployment](#deployment) + - [For personal and organization webpages](#for-personal-and-organization-webpages) + - [For project pages](#for-project-pages) + - [Enabling automatic deployment](#enabling-automatic-deployment) + - [Manual deployment to GitHub Pages](#manual-deployment-to-github-pages) + - [Deployment to another hosting server (non GitHub Pages)](#deployment-to-another-hosting-server-non-github-pages) + - [Deployment to a separate repository (advanced users only)](#deployment-to-a-separate-repository-advanced-users-only) + - [Upgrading from a previous version](#upgrading-from-a-previous-version) + +# Installing and Deploying + +## Recommended Approach + +The recommended approach for using **al-folio** is to first create your own site using the template with as few changes as possible, and only when it is up and running customize it however you like. This way it is easier to pinpoint what causes a potential issue in case of a bug. The minimum steps required to create your own site are: + +1. Create a new repository using this template. For this, click on [Use this template -> Create a new repository](https://github.com/new?template_name=al-folio&template_owner=alshedivat) above the file list. If you plan to upload your site to `.github.io`, note that the name of your repository :warning: **MUST BE** :warning: `.github.io` or `.github.io`, as stated in the [GitHub pages docs](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#types-of-github-pages-sites). +2. In this new repository, go to `Settings -> Actions -> General -> Workflow permissions` and give `Read and write permissions` to GitHub Actions. +3. Open file `_config.yml`, set `url` to `https://.github.io` and leave `baseurl` **empty** (do NOT delete it). +4. Wait until the GitHub actions finish (check your repository **Actions** tab). Now, in addition to the master branch, your repository has a newly built gh-pages branch. +5. Finally, in the repository page go to `Settings -> Pages -> Build and deployment`, make sure that `Source` is set to `Deploy from a branch` and set the branch to `gh-pages` (NOT to master). +6. Wait until the GitHub actions finish (check your repository **Actions** tab), then simply navigate to `https://.github.io` in your browser. At this point you should see a copy of the theme's [demo website](https://alshedivat.github.io/al-folio/). + +After everything is set up, you can download the repository to your machine and start customizing it. To do so, run the following commands: + +```bash +$ git clone git@github.com:/.git +``` + +Starting version [v0.3.5](https://github.com/alshedivat/al-folio/releases/tag/v0.3.5), **al-folio** will automatically re-deploy your webpage each time you push new changes to your repository! :sparkles: + +## Local setup on Windows + +If you are using Windows, it is **highly recommended** to use [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install), which is a compatibility layer for running Linux on top of Windows. You can follow [these instructions](https://ubuntu.com/tutorials/install-ubuntu-on-wsl2-on-windows-11-with-gui-support) to install WSL and Ubuntu on your machine. You only need to go up to the step 4 of the tutorial (you don't have to enable the optional `systemd` nor the graphical applications), and then you can follow the instructions below to install docker. You can install docker natively on Windows as well, but it has been having some issues as can be seen in [#1540](https://github.com/alshedivat/al-folio/issues/1540), [#2007](https://github.com/alshedivat/al-folio/issues/2007). + +## Local setup using Docker (Recommended) + +Using Docker to install Jekyll and Ruby dependencies is the easiest way. + +You need to take the following steps to get `al-folio` up and running on your local machine: + +- First, install [docker](https://docs.docker.com/get-docker/) and [docker-compose](https://docs.docker.com/compose/install/). +- Finally, run the following command that will pull the latest pre-built image from DockerHub and will run your website. + +```bash +$ docker compose pull +$ docker compose up +``` + +Note that when you run it for the first time, it will download a docker image of size 400MB or so. To see the template running, open your browser and go to `http://localhost:8080`. You should see a copy of the theme's demo website. + +Now, feel free to customize the theme however you like (don't forget to change the name!). Also, your changes should be automatically rendered in real-time (or maybe after a few seconds). + +> Beta: You can also use the slimmed docker image with a size below 100MBs and exact same functionality. Just use `docker compose up -f docker-compose-slim.yml` + +### Build your own docker image + +> Note: this approach is only necessary if you would like to build an older or very custom version of al-folio. + +Build and run a new docker image using: + +```bash +$ docker compose up --build +``` + +> If you want to update jekyll, install new ruby packages, etc., all you have to do is build the image again using `--force-recreate` argument at the end of the previous command! It will download Ruby and Jekyll and install all Ruby packages again from scratch. + +If you want to use a specific docker version, you can do so by changing `latest` tag to `your_version` in `docker-compose.yaml`. For example, you might have created your website on `v0.10.0` and you want to stick with that. + +## Local Setup (Legacy) + +For a hands-on walkthrough of running al-folio locally without using Docker, check out [this cool blog post](https://george-gca.github.io/blog/2022/running-local-al-folio/) by one of the community members! + +Assuming you have [Ruby](https://www.ruby-lang.org/en/downloads/) and [Bundler](https://bundler.io/) installed on your system (_hint: for ease of managing ruby gems, consider using [rbenv](https://github.com/rbenv/rbenv)_), and also [Python](https://www.python.org/) and [pip](https://pypi.org/project/pip/) (_hint: for ease of managing python packages, consider using a virtual environment, like [venv](https://docs.python.org/pt-br/3/library/venv.html) or [conda](https://docs.conda.io/en/latest/)_). + +```bash +$ bundle install +# assuming pip is your Python package manager +$ pip install jupyter +$ bundle exec jekyll serve --lsi +``` + +To see the template running, open your browser and go to `http://localhost:4000`. You should see a copy of the theme's [demo website](https://alshedivat.github.io/al-folio/). Now, feel free to customize the theme however you like. After you are done, remember to **commit** your final changes. + +## Deployment + +Deploying your website to [GitHub Pages](https://pages.github.com/) is the most popular option. +Starting version [v0.3.5](https://github.com/alshedivat/al-folio/releases/tag/v0.3.5), **al-folio** will automatically re-deploy your webpage each time you push new changes to your repository **main branch**! :sparkles: + +### For personal and organization webpages + +1. The name of your repository **MUST BE** `.github.io` or `.github.io`. +2. In `_config.yml`, set `url` to `https://.github.io` and leave `baseurl` empty. +3. Set up automatic deployment of your webpage (see instructions below). +4. Make changes to your main branch, commit, and push! +5. After deployment, the webpage will become available at `.github.io`. + +### For project pages + +1. In `_config.yml`, set `url` to `https://.github.io` and `baseurl` to `//`. +2. Set up automatic deployment of your webpage (see instructions below). +3. Make changes to your main branch, commit, and push! +4. After deployment, the webpage will become available at `.github.io//`. + +### Enabling automatic deployment + +1. Click on **Actions** tab and **Enable GitHub Actions**; do not worry about creating any workflows as everything has already been set for you. +2. Go to `Settings -> Actions -> General -> Workflow permissions`, and give `Read and write permissions` to GitHub Actions +3. Make any other changes to your webpage, commit, and push to your main branch. This will automatically trigger the **Deploy** action. +4. Wait for a few minutes and let the action complete. You can see the progress in the **Actions** tab. If completed successfully, in addition to the `master` branch, your repository should now have a newly built `gh-pages` branch. **Do NOT touch this branch!** +5. Finally, in the **Settings** of your repository, in the Pages section, set the branch to `gh-pages` (**NOT** to `master`). For more details, see [Configuring a publishing source for your GitHub Pages site](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#choosing-a-publishing-source). + +If you keep your site on another branch, open `.github/workflows/deploy.yml` **on the branch you keep your website on** and change `on->push->branches` and `on->pull\_request->branches` to the branch you keep your website on. This will trigger the action on pulls/pushes on that branch. The action will then deploy the website on the branch it was triggered from. + +### Manual deployment to GitHub Pages + +If you need to manually re-deploy your website to GitHub pages, go to Actions, click "Deploy" in the left sidebar, then "Run workflow." + +### Deployment to another hosting server (non GitHub Pages) + +If you decide to not use GitHub Pages and host your page elsewhere, simply run: + +```bash +$ bundle exec jekyll build --lsi +``` + +which will (re-)generate the static webpage in the `_site/` folder. +Then simply copy the contents of the `_site/` directory to your hosting server. + +If you also want to remove unused css classes from your file, run: + +```bash +$ purgecss -c purgecss.config.js +``` + +which will replace the css files in the `_site/assets/css/` folder with the purged css files. + +**Note:** Make sure to correctly set the `url` and `baseurl` fields in `_config.yml` before building the webpage. If you are deploying your webpage to `your-domain.com/your-project/`, you must set `url: your-domain.com` and `baseurl: /your-project/`. If you are deploying directly to `your-domain.com`, leave `baseurl` blank, **do not delete it**. + +### Deployment to a separate repository (advanced users only) + +**Note:** Do not try using this method unless you know what you are doing (make sure you are familiar with [publishing sources](https://help.github.com/en/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites)). This approach allows to have the website's source code in one repository and the deployment version in a different repository. + +Let's assume that your website's publishing source is a `publishing-source` subdirectory of a git-versioned repository cloned under `$HOME/repo/`. +For a user site this could well be something like `$HOME/.github.io`. + +Firstly, from the deployment repo dir, checkout the git branch hosting your publishing source. + +Then from the website sources dir (commonly your al-folio fork's clone): + +```bash +$ bundle exec jekyll build --lsi --destination $HOME/repo/publishing-source +``` + +This will instruct jekyll to deploy the website under `$HOME/repo/publishing-source`. + +**Note:** Jekyll will clean `$HOME/repo/publishing-source` before building! + +The quote below is taken directly from the [jekyll configuration docs](https://jekyllrb.com/docs/configuration/options/): + +> Destination folders are cleaned on site builds +> +> The contents of `` are automatically cleaned, by default, when the site is built. Files or folders that are not created by your site will be removed. Some files could be retained by specifying them within the `` configuration directive. +> +> Do not use an important location for ``; instead, use it as a staging area and copy files from there to your web server. + +If `$HOME/repo/publishing-source` contains files that you want jekyll to leave untouched, specify them under `keep_files` in `_config.yml`. +In its default configuration, al-folio will copy the top-level `README.md` to the publishing source. If you want to change this behavior, add `README.md` under `exclude` in `_config.yml`. + +**Note:** Do _not_ run `jekyll clean` on your publishing source repo as this will result in the entire directory getting deleted, irrespective of the content of `keep_files` in `_config.yml`. + +### Upgrading from a previous version + +If you installed **al-folio** as described above, you can configure a [GitHub action](https://github.com/AndreasAugustin/actions-template-sync) to automatically sync your repository with the latest version of the theme. + +Go to Settings -> Actions -> General -> Workflow permissions, give Read and write permissions to GitHub Actions, check "Allow GitHub Actions to create and approve pull requests", and save your changes. + +Then go to Actions -> New workflow -> set up a workflow yourself, setup the following workflow and commit your changes: + +```yaml +name: Sync from template +on: + # cronjob trigger + schedule: + - cron: "0 0 1 * *" + # manual trigger + workflow_dispatch: +jobs: + repo-sync: + runs-on: ubuntu-latest + steps: + # To use this repository's private action, you must check out the repository + - name: Checkout + uses: actions/checkout@v4 + - name: actions-template-sync + uses: AndreasAugustin/actions-template-sync@v1 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + source_repo_path: alshedivat/al-folio + upstream_branch: master +``` + +You will receive a pull request within your repository if there are some changes available in the template. + +Another option is to manually update your code by following the steps below: + +```bash +# Assuming the current directory is +$ git remote add upstream https://github.com/alshedivat/al-folio.git +$ git fetch upstream +$ git rebase v0.11.0 +``` + +If you have extensively customized a previous version, it might be trickier to upgrade. +You can still follow the steps above, but `git rebase` may result in merge conflicts that must be resolved. +See [git rebase manual](https://help.github.com/en/github/using-git/about-git-rebase) and how to [resolve conflicts](https://help.github.com/en/github/using-git/resolving-merge-conflicts-after-a-git-rebase) for more information. +If rebasing is too complicated, we recommend re-installing the new version of the theme from scratch and port over your content and changes from the previous version manually. You can use tools like [meld](https://meldmerge.org/) +or [winmerge](https://winmerge.org/) to help in this process. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f2b8681 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2022 Maruan Al-Shedivat. + +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..d2edc18 --- /dev/null +++ b/README.md @@ -0,0 +1,453 @@ +# al-folio + +
+ +[![Preview](readme_preview/al-folio-preview.png)](https://alshedivat.github.io/al-folio/) + +**A simple, clean, and responsive [Jekyll](https://jekyllrb.com/) theme for academics.** + +--- + +[![deploy](https://github.com/alshedivat/al-folio/actions/workflows/deploy.yml/badge.svg)](https://github.com/alshedivat/al-folio/actions/workflows/deploy.yml) +[![Maintainers](https://img.shields.io/badge/maintainers-4-success.svg)](#maintainers) +[![GitHub contributors](https://img.shields.io/github/contributors/alshedivat/al-folio.svg)](https://github.com/alshedivat/al-folio/graphs/contributors/) +[![Docker Image Version](https://img.shields.io/docker/v/amirpourmand/al-folio?sort=semver&label=docker%20image&color=blueviolet)](https://hub.docker.com/r/amirpourmand/al-folio) +[![Docker Image Size](https://img.shields.io/docker/image-size/amirpourmand/al-folio?sort=date&label=docker%20image%20size&color=blueviolet)](https://hub.docker.com/r/amirpourmand/al-folio) +[![Docker Pulls](https://img.shields.io/docker/pulls/amirpourmand/al-folio?color=blueviolet)](https://hub.docker.com/r/amirpourmand/al-folio) + +[![GitHub release](https://img.shields.io/github/v/release/alshedivat/al-folio)](https://github.com/alshedivat/al-folio/releases/latest) +[![GitHub license](https://img.shields.io/github/license/alshedivat/al-folio?color=blue)](https://github.com/alshedivat/al-folio/blob/master/LICENSE) +[![GitHub stars](https://img.shields.io/github/stars/alshedivat/al-folio)](https://github.com/alshedivat/al-folio) +[![GitHub forks](https://img.shields.io/github/forks/alshedivat/al-folio)](https://github.com/alshedivat/al-folio/fork) + +
+ +## User community + +The vibrant community of **al-folio** users is growing! +Academics around the world use this theme for their homepages, blogs, lab pages, as well as webpages for courses, workshops, conferences, meetups, and more. +Check out the community webpages below. +Feel free to add your own page(s) by sending a PR. + + + + + + + + + + + + + + + + + + +
Academics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Labs + + + + + + + +
Courses +CMU PGM (S-19)
+CMU DeepRL (S-21, F-21, S-22, F-22, S-23, F-23)
+CMU MMML (F-20, F-22)
+CMU AMMML (S-22, S-23)
+CMU ASI (S-23)
+CMU Distributed Systems (S-24) +
Conferences & workshops +ICLR Blog Post Track (2023, 2024)
+ML Retrospectives (NeurIPS: 2019, 2020; ICML: 2020)
+HAMLETS (NeurIPS: 2020)
+ICBINB (NeurIPS: 2020, 2021)
+Neural Compression (ICLR: 2021)
+Score Based Methods (NeurIPS: 2022)
+Images2Symbols (CogSci: 2022)
+Medical Robotics Junior Faculty Forum (ISMR: 2023)
+Beyond Vision: Physics meets AI (ICIAP: 2023)
+Workshop on Diffusion Models (NeurIPS: 2023) +
+ +## Lighthouse PageSpeed Insights + +### Desktop + +[![Google Lighthouse PageSpeed Insights](lighthouse_results/desktop/pagespeed.svg)](https://htmlpreview.github.io/?https://github.com/alshedivat/al-folio/blob/master/lighthouse_results/desktop/alshedivat_github_io_al_folio_.html) + +Run the test yourself: [Google Lighthouse PageSpeed Insights](https://pagespeed.web.dev/report?url=https%3A%2F%2Falshedivat.github.io%2Fal-folio%2F&form_factor=desktop) + +### Mobile + +[![Google Lighthouse PageSpeed Insights](lighthouse_results/mobile/pagespeed.svg)](https://htmlpreview.github.io/?https://github.com/alshedivat/al-folio/blob/master/lighthouse_results/mobile/alshedivat_github_io_al_folio_.html) + +Run the test yourself: [Google Lighthouse PageSpeed Insights](https://pagespeed.web.dev/report?url=https%3A%2F%2Falshedivat.github.io%2Fal-folio%2F&form_factor=mobile) + +## Table Of Contents + +- [al-folio](#al-folio) + - [User community](#user-community) + - [Lighthouse PageSpeed Insights](#lighthouse-pagespeed-insights) + - [Desktop](#desktop) + - [Mobile](#mobile) + - [Table Of Contents](#table-of-contents) + - [Getting started](#getting-started) + - [Installing](#installing) + - [Customizing](#customizing) + - [Features](#features) + - [Light/Dark Mode](#lightdark-mode) + - [CV](#cv) + - [People](#people) + - [Publications](#publications) + - [Collections](#collections) + - [Layouts](#layouts) + - [The iconic style of Distill](#the-iconic-style-of-distill) + - [Full support for math \& code](#full-support-for-math--code) + - [Photos, Audio, Video and more](#photos-audio-video-and-more) + - [Other features](#other-features) + - [GitHub's repositories and user stats](#githubs-repositories-and-user-stats) + - [Theming](#theming) + - [Social media previews](#social-media-previews) + - [Atom (RSS-like) Feed](#atom-rss-like-feed) + - [Related posts](#related-posts) + - [Code quality checks](#code-quality-checks) + - [FAQ](#faq) + - [Contributing](#contributing) + - [Maintainers](#maintainers) + - [All Contributors](#all-contributors) + - [Star History](#star-history) + - [License](#license) + +## Getting started + +Want to learn more about Jekyll? Check out [this tutorial](https://www.taniarascia.com/make-a-static-website-with-jekyll/). Why Jekyll? Read [Andrej Karpathy's blog post](https://karpathy.github.io/2014/07/01/switching-to-jekyll/)! + +## Installing + +For installation details please refer to [INSTALL.md](INSTALL.md). + +## Customizing + +For customization details please refer to [CUSTOMIZE.md](CUSTOMIZE.md). + +## Features + +### Light/Dark Mode + +This template has a built-in light/dark mode. It detects the user preferred color scheme and automatically switches to it. You can also manually switch between light and dark mode by clicking on the sun/moon icon in the top right corner of the page. + +

+ + +

+ +--- + +### CV + +There are currently 2 different ways of generating the CV page content. The first one is by using a json file located in [assets/json/resume.json](assets/json/resume.json). It is a [known standard](https://jsonresume.org/) for creating a CV programmatically. The second one, currently used as a fallback when the json file is not found, is by using a yml file located in [\_data/cv.yml](_data/cv.yml). This was the original way of creating the CV page content and since it is more human readable than a json file we decided to keep it as an option. + +What this means is, if there is no resume data defined in [\_config.yml](_config.yml) and loaded via a json file, it will load the contents of [\_data/cv.yml](_data/cv.yml) as fallback. + +[![CV Preview](readme_preview/cv.png)](https://alshedivat.github.io/al-folio/cv/) + +--- + +### People + +You can create a people page if you want to feature more than one person. Each person can have its own short bio, profile picture, and you can also set if every person will appear at the same or opposite sides. + +[![People Preview](readme_preview/people.png)](https://alshedivat.github.io/al-folio/people/) + +--- + +### Publications + +Your publications' page is generated automatically from your BibTex bibliography. Simply edit [\_bibliography/papers.bib](_bibliography/papers.bib). You can also add new `*.bib` files and customize the look of your publications however you like by editing [\_pages/publications.md](_pages/publications.md). By default, the publications will be sorted by year and the most recent will be displayed first. You can change this behavior and more in the `Jekyll Scholar` section in [\_config.yml](_config.yml) file. + +You can add extra information to a publication, like a PDF file in the [assets/pdf/](assets/pdf/) directory and add the path to the PDF file in the BibTeX entry with the `pdf` field. Some of the supported fields are: `abstract`, `altmetric`, `arxiv`, `bibtex_show`, `blog`, `code`, `dimensions`, `doi`, `eprint`, `html`, `isbn`, `pdf`, `pmid`, `poster`, `slides`, `supp`, `video`, and `website`. + +[![Publications Preview](readme_preview/publications.png)](https://alshedivat.github.io/al-folio/publications/) + +--- + +### Collections + +This Jekyll theme implements `collections` to let you break up your work into categories. The theme comes with two default collections: `news` and `projects`. Items from the `news` collection are automatically displayed on the home page. Items from the `projects` collection are displayed on a responsive grid on projects page. + +[![Projects Preview](readme_preview/projects.png)](https://alshedivat.github.io/al-folio/projects/) + +You can easily create your own collections, apps, short stories, courses, or whatever your creative work is. To do this, edit the collections in the [\_config.yml](_config.yml) file, create a corresponding folder, and create a landing page for your collection, similar to `_pages/projects.md`. + +--- + +### Layouts + +**al-folio** comes with stylish layouts for pages and blog posts. + +#### The iconic style of Distill + +The theme allows you to create blog posts in the [distill.pub](https://distill.pub/) style: + +[![Distill Preview](readme_preview/distill.png)](https://alshedivat.github.io/al-folio/blog/2021/distill/) + +For more details on how to create distill-styled posts using `` tags, please refer to [the example](https://alshedivat.github.io/al-folio/blog/2021/distill/). + +#### Full support for math & code + +**al-folio** supports fast math typesetting through [MathJax](https://www.mathjax.org/) and code syntax highlighting using [GitHub style](https://github.com/jwarby/jekyll-pygments-themes). Also supports [chartjs charts](https://www.chartjs.org/), [mermaid diagrams](https://mermaid-js.github.io/mermaid/#/), and [TikZ figures](https://tikzjax.com/). + +

+ + +

+ +#### Photos, Audio, Video and more + +Photo formatting is made simple using [Bootstrap's grid system](https://getbootstrap.com/docs/4.4/layout/grid/). Easily create beautiful grids within your blog posts and project pages, also with support for [video](https://alshedivat.github.io/al-folio/blog/2023/videos/) and [audio](https://alshedivat.github.io/al-folio/blog/2023/audios/) embeds: + +

+ + + +

+ +--- + +### Other features + +#### GitHub's repositories and user stats + +**al-folio** uses [github-readme-stats](https://github.com/anuraghazra/github-readme-stats) and [github-profile-trophy](https://github.com/ryo-ma/github-profile-trophy) to display GitHub repositories and user stats on the `/repositories/` page. + +[![Repositories Preview](readme_preview/repositories.png)](https://alshedivat.github.io/al-folio/repositories/) + +Edit the `_data/repositories.yml` and change the `github_users` and `github_repos` lists to include your own GitHub profile and repositories to the `/repositories/` page. + +You may also use the following codes for displaying this in any other pages. + +```html + +{% if site.data.repositories.github_users %} +
+ {% for user in site.data.repositories.github_users %} {% include repository/repo_user.liquid username=user %} {% endfor %} +
+{% endif %} + + +{% if site.repo_trophies.enabled %} {% for user in site.data.repositories.github_users %} {% if site.data.repositories.github_users.size > 1 %} +

{{ user }}

+{% endif %} +
+ {% include repository/repo_trophies.liquid username=user %} +
+{% endfor %} {% endif %} + + +{% if site.data.repositories.github_repos %} +
+ {% for repo in site.data.repositories.github_repos %} {% include repository/repo.liquid repository=repo %} {% endfor %} +
+{% endif %} +``` + +--- + +#### Theming + +A variety of beautiful theme colors have been selected for you to choose from. The default is purple, but you can quickly change it by editing the `--global-theme-color` variable in the `_sass/_themes.scss` file. Other color variables are listed there as well. The stock theme color options available can be found at [\_sass/\_variables.scss](_sass/_variables.scss). You can also add your own colors to this file assigning each a name for ease of use across the template. + +--- + +#### Social media previews + +**al-folio** supports preview images on social media. To enable this functionality you will need to set `serve_og_meta` to `true` in your [\_config.yml](_config.yml). Once you have done so, all your site's pages will include Open Graph data in the HTML head element. + +You will then need to configure what image to display in your site's social media previews. This can be configured on a per-page basis, by setting the `og_image` page variable. If for an individual page this variable is not set, then the theme will fall back to a site-wide `og_image` variable, configurable in your [\_config.yml](_config.yml). In both the page-specific and site-wide cases, the `og_image` variable needs to hold the URL for the image you wish to display in social media previews. + +--- + +#### Atom (RSS-like) Feed + +It generates an Atom (RSS-like) feed of your posts, useful for Atom and RSS readers. The feed is reachable simply by typing after your homepage `/feed.xml`. E.g. assuming your website mountpoint is the main folder, you can type `yourusername.github.io/feed.xml` + +--- + +#### Related posts + +By default, there will be a related posts section on the bottom of the blog posts. These are generated by selecting the `max_related` most recent posts that share at least `min_common_tags` tags with the current post. If you do not want to display related posts on a specific post, simply add `related_posts: false` to the front matter of the post. If you want to disable it for all posts, simply set `enabled` to false in the `related_blog_posts` section in [\_config.yml](_config.yml). + +--- + +#### Code quality checks + +Currently, we run some checks to ensure that the code quality and generated site are good. The checks are done using GitHub Actions and the following tools: + +- [Prettier](https://prettier.io/) - check if the formatting of the code follows the style guide +- [lychee](https://lychee.cli.rs/) - check for broken links +- [Axe](https://github.com/dequelabs/axe-core) (need to run manually) - do some accessibility testing + +We decided to keep `Axe` runs manual because fixing the issues are not straightforward and might be hard for people without web development knowledge. + +## FAQ + +For frequently asked questions, please refer to [FAQ.md](FAQ.md). + +## Contributing + +Contributions to al-folio are very welcome! Before you get started, please take a look at [the guidelines](CONTRIBUTING.md). + +If you would like to improve documentation or fix a minor inconsistency or bug, please feel free to send a PR directly to `master`. For more complex issues/bugs or feature requests, please open an issue using the appropriate template. + +### Maintainers + +Our most active contributors are welcome to join the maintainers team. If you are interested, please reach out! + + + + + + + + + + + + + +

Maruan

Rohan Deb Sarkar

Amir Pourmand

George
+ + + + + + +### All Contributors + + + + + +## Star History + + + + + + Star History Chart + + + +## License + +The theme is available as open source under the terms of the [MIT License](https://github.com/alshedivat/al-folio/blob/master/LICENSE). + +Originally, **al-folio** was based on the [\*folio theme](https://github.com/bogoli/-folio) (published by [Lia Bogoev](https://liabogoev.com) and under the MIT license). Since then, it got a full re-write of the styles and many additional cool features. diff --git a/_bibliography/papers.bib b/_bibliography/papers.bib new file mode 100644 index 0000000..f6d8b6b --- /dev/null +++ b/_bibliography/papers.bib @@ -0,0 +1,93 @@ +--- +--- + +@string{aps = {American Physical Society,}} + +@book{einstein1920relativity, + title={Relativity: the Special and General Theory}, + author={Einstein, Albert}, + year={1920}, + publisher={Methuen & Co Ltd}, + html={relativity.html} +} + +@book{einstein1956investigations, + bibtex_show={true}, + title={Investigations on the Theory of the Brownian Movement}, + author={Einstein, Albert}, + year={1956}, + publisher={Courier Corporation}, + preview={brownian-motion.gif} +} + +@article{einstein1950meaning, + abbr={AJP}, + bibtex_show={true}, + title={The meaning of relativity}, + author={Einstein, Albert and Taub, AH}, + journal={American Journal of Physics}, + volume={18}, + number={6}, + pages={403--404}, + year={1950}, + publisher={American Association of Physics Teachers} +} + +@article{PhysRev.47.777, + abbr={PhysRev}, + title={Can Quantum-Mechanical Description of Physical Reality Be Considered Complete?}, + author={Einstein, A. and Podolsky, B. and Rosen, N.}, + abstract={In a complete theory there is an element corresponding to each element of reality. A sufficient condition for the reality of a physical quantity is the possibility of predicting it with certainty, without disturbing the system. In quantum mechanics in the case of two physical quantities described by non-commuting operators, the knowledge of one precludes the knowledge of the other. Then either (1) the description of reality given by the wave function in quantum mechanics is not complete or (2) these two quantities cannot have simultaneous reality. Consideration of the problem of making predictions concerning a system on the basis of measurements made on another system that had previously interacted with it leads to the result that if (1) is false then (2) is also false. One is thus led to conclude that the description of reality as given by a wave function is not complete.}, + journal={Phys. Rev.}, + volume={47}, + issue={10}, + pages={777--780}, + numpages={0}, + year={1935}, + month={May}, + publisher=aps, + doi={10.1103/PhysRev.47.777}, + url={http://link.aps.org/doi/10.1103/PhysRev.47.777}, + html={https://journals.aps.org/pr/abstract/10.1103/PhysRev.47.777}, + pdf={example_pdf.pdf}, + altmetric={248277}, + dimensions={true}, + google_scholar_id={qyhmnyLat1gC}, + selected={true} +} + +@article{einstein1905molekularkinetischen, + title={{\"U}ber die von der molekularkinetischen Theorie der W{\"a}rme geforderte Bewegung von in ruhenden Fl{\"u}ssigkeiten suspendierten Teilchen}, + author={Einstein, A.}, + journal={Annalen der physik}, + volume={322}, + number={8}, + pages={549--560}, + year={1905}, + publisher={Wiley Online Library} +} + +@article{einstein1905movement, + abbr={Ann. Phys.}, + title={Un the movement of small particles suspended in statiunary liquids required by the molecular-kinetic theory 0f heat}, + author={Einstein, A.}, + journal={Ann. Phys.}, + volume={17}, + pages={549--560}, + year={1905} +} + +@article{einstein1905electrodynamics, + title={On the electrodynamics of moving bodies}, + author={Einstein, A.}, + year={1905} +} + +@book{przibram1967letters, + bibtex_show={true}, + title={Letters on wave mechanics}, + author={Einstein, Albert and Schrödinger, Erwin and Planck, Max and Lorentz, Hendrik Antoon and Przibram, Karl}, + year={1967}, + publisher={Vision}, + preview={wave-mechanics.gif} +} diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..36788af --- /dev/null +++ b/_config.yml @@ -0,0 +1,481 @@ +# ----------------------------------------------------------------------------- +# Site settings +# ----------------------------------------------------------------------------- + +title: blank # the website title (if blank, full name will be used instead) +first_name: You +middle_name: R. +last_name: Name +email: you@example.com +description: > # the ">" symbol means to ignore newlines until "footer_text:" + A simple, whitespace theme for academics. Based on [*folio](https://github.com/bogoli/-folio) design. +footer_text: > + Powered by Jekyll with al-folio theme. + Hosted by GitHub Pages. + Photos from Unsplash. +keywords: jekyll, jekyll-theme, academic-website, portfolio-website # add your own keywords or leave empty +lang: en # the language of your site (for example: en, fr, cn, ru, etc.) +icon: ⚛️ # the emoji used as the favicon (alternatively, provide image name in /assets/img/) + +url: https://alshedivat.github.io # the base hostname & protocol for your site +baseurl: /al-folio # the subpath of your site, e.g. /blog/. Leave blank for root +last_updated: false # set to true if you want to display last updated in the footer +impressum_path: # set to path to include impressum link in the footer, use the same path as permalink in a page, helps to conform with EU GDPR + +# ----------------------------------------------------------------------------- +# Theme +# ----------------------------------------------------------------------------- + +# repo color theme +repo_theme_light: default # https://github.com/anuraghazra/github-readme-stats/blob/master/themes/README.md +repo_theme_dark: dark # https://github.com/anuraghazra/github-readme-stats/blob/master/themes/README.md +repo_trophies: + enabled: true + theme_light: flat # https://github.com/ryo-ma/github-profile-trophy + theme_dark: gitdimmed # https://github.com/ryo-ma/github-profile-trophy + +# ----------------------------------------------------------------------------- +# RSS Feed +# ----------------------------------------------------------------------------- +# will use title and url fields +# Take a look to https://github.com/jekyll/jekyll-feed for more customization + +rss_icon: true + +# ----------------------------------------------------------------------------- +# Layout +# ----------------------------------------------------------------------------- + +navbar_fixed: true +footer_fixed: true + +# Dimensions +max_width: 800px + +# TODO: add layout settings (single page vs. multi-page) + +# ----------------------------------------------------------------------------- +# Open Graph & Schema.org +# ----------------------------------------------------------------------------- +# Display links to the page with a preview object on social media. +# see https://schema.org/docs/faq.html for more information +serve_og_meta: false # Include Open Graph meta tags in the HTML head +serve_schema_org: false # Include Schema.org in the HTML head +og_image: # The site-wide (default for all links) Open Graph preview image + +# ----------------------------------------------------------------------------- +# Social integration +# ----------------------------------------------------------------------------- + +github_username: # your GitHub user name +gitlab_username: # your GitLab user name +x_username: # your X handle +mastodon_username: # your mastodon instance+username in the format instance.tld/@username +linkedin_username: # your LinkedIn user name +telegram_username: # your Telegram user name +scholar_userid: qc6CJjYAAAAJ # your Google Scholar ID +semanticscholar_id: # your Semantic Scholar ID +whatsapp_number: # your WhatsApp number (full phone number in international format. Omit any zeroes, brackets, or dashes when adding the phone number in international format.) +orcid_id: # your ORCID ID +medium_username: # your Medium username +quora_username: # your Quora username +publons_id: # your ID on Publons +lattes_id: # your ID on Lattes (Brazilian Lattes CV) +osf_id: # your OSF ID +research_gate_profile: # your profile on ResearchGate +scopus_id: # your profile on Scopus +flickr_id: # your flickr id +blogger_url: # your blogger URL +work_url: # work page URL +keybase_username: # your keybase user name +wikidata_id: # your wikidata id +wikipedia_id: # your wikipedia id (Case sensitive) +dblp_url: # your DBLP profile url +stackoverflow_id: # your stackoverflow id +kaggle_id: # your kaggle id +lastfm_id: # your lastfm id +spotify_id: # your spotify id +pinterest_id: # your pinterest id +unsplash_id: # your unsplash id +instagram_id: # your instagram id +facebook_id: # your facebook id +youtube_id: # your youtube channel id (youtube.com/@) +discord_id: # your discord id (18-digit unique numerical identifier) +zotero_username: # your zotero username +wechat_qr: # filename of your wechat qr-code saved as an image (e.g., wechat-qr.png if saved to assets/img/wechat-qr.png) + +contact_note: > + You can even add a little note about which of these is the best way to reach you. + +# ----------------------------------------------------------------------------- +# Analytics and search engine verification +# ----------------------------------------------------------------------------- + +# For Google Analytics, see https://support.google.com/analytics/answer/10447272?hl=en&ref_topic=14088998&sjid=5129943941510317771-SA#zippy=%2Cgoogle-sites +# and follow the instructions for Google Sites. You will need to create a Google Analytics property and copy the Google tag ID. +google_analytics: # your Google Analytics measurement ID (format: G-XXXXXXXXXX) +cronitor_analytics: # cronitor RUM analytics site ID (format: XXXXXXXXX) + +# For Google Search Console, see https://support.google.com/webmasters/answer/9008080?hl=en#meta_tag_verification&zippy=%2Chtml-tag +google_site_verification: # your google-site-verification ID (Google Search Console) +bing_site_verification: # out your bing-site-verification ID (Bing Webmaster) + +# ----------------------------------------------------------------------------- +# Blog +# ----------------------------------------------------------------------------- + +blog_name: al-folio # blog_name will be displayed in your blog page +blog_description: a simple whitespace theme for academics +permalink: /blog/:year/:title/ + +# Pagination +pagination: + enabled: true + +related_blog_posts: + enabled: true + max_related: 5 + +# Giscus comments (RECOMMENDED) +# Follow instructions on https://giscus.app/ to setup for your repo to fill out the information below. +giscus: + repo: # / + repo_id: # leave empty or specify your repo_id (see https://giscus.app/) + category: Comments # name of the category under which discussions will be created + category_id: # leave empty or specify your category_id (see https://giscus.app/) + mapping: title # identify discussions by post title + strict: 1 # use strict identification mode + reactions_enabled: 1 # enable (1) or disable (0) emoji reactions + input_position: bottom # whether to display input form below (bottom) or above (top) the comments + theme: preferred_color_scheme # name of the color scheme (preferred works well with al-folio light/dark mode) + emit_metadata: 0 + lang: en + +# Disqus comments (DEPRECATED) +disqus_shortname: al-folio # put your disqus shortname +# https://help.disqus.com/en/articles/1717111-what-s-a-shortname + +# External sources. +# If you have blog posts published on medium.com or other external sources, +# you can display them in your blog by adding a link to the RSS feed. +external_sources: + - name: medium.com + rss_url: https://medium.com/@al-folio/feed + +# ----------------------------------------------------------------------------- +# Collections +# ----------------------------------------------------------------------------- + +collections: + news: + defaults: + layout: post + output: true + permalink: /news/:path/ + projects: + output: true + permalink: /projects/:path/ + +announcements: + enabled: true + scrollable: true # adds a vertical scroll bar if there are more than 3 news items + limit: 5 # leave blank to include all the news in the `_news` folder + +latest_posts: + enabled: true + scrollable: true # adds a vertical scroll bar if there are more than 3 new posts items + limit: 3 # leave blank to include all the blog posts + +# ----------------------------------------------------------------------------- +# Jekyll settings +# ----------------------------------------------------------------------------- + +# Markdown and syntax highlight +markdown: kramdown +highlighter: rouge +kramdown: + input: GFM + syntax_highlighter_opts: + css_class: "highlight" + span: + line_numbers: false + block: + line_numbers: false + start_line: 1 + +# Includes & excludes +include: ["_pages"] +exclude: + - bin/ + - CONTRIBUTING.md + - CUSTOMIZE.md + - Dockerfile + - docker-compose.yml + - docker-compose-slim.yml + - FAQ.md + - Gemfile + - Gemfile.lock + - INSTALL.md + - LICENSE + - lighthouse_results/ + - package.json + - package-lock.json + - _pages/about_einstein.md + - purgecss.config.js + - README.md + - readme_preview/ + - vendor +keep_files: + - CNAME + - .nojekyll + +# Plug-ins +plugins: + - jekyll-archives + - jekyll-email-protect + - jekyll-feed + - jekyll-get-json + - jekyll-imagemagick + - jekyll-jupyter-notebook + - jekyll-link-attributes + - jekyll-minifier + - jekyll-paginate-v2 + - jekyll/scholar + - jekyll-sitemap + - jekyll-toc + - jekyll-twitter-plugin + - jemoji + +# Sitemap settings +defaults: + - scope: + path: "assets" + values: + sitemap: false + +sass: + style: compressed + +# ----------------------------------------------------------------------------- +# Jekyll Minifier +# ----------------------------------------------------------------------------- + +jekyll-minifier: + exclude: ["robots.txt"] + uglifier_args: + harmony: true + +# ----------------------------------------------------------------------------- +# Jekyll Archives +# ----------------------------------------------------------------------------- + +jekyll-archives: + enabled: [year, tags, categories] # enables year, tag and category archives (remove if you need to disable one of them). + layouts: + year: archive-year + tag: archive-tag + category: archive-category + permalinks: + year: "/blog/:year/" + tag: "/blog/tag/:name/" + category: "/blog/category/:name/" + +display_tags: ["formatting", "images", "links", "math", "code"] # these tags will be displayed on the front page of your blog +display_categories: ["blockquotes"] # these categories will be displayed on the front page of your blog + +# ----------------------------------------------------------------------------- +# Jekyll Scholar +# ----------------------------------------------------------------------------- + +scholar: + last_name: [Einstein] + first_name: [Albert, A.] + + style: apa + locale: en + + source: /_bibliography/ + bibliography: papers.bib + bibliography_template: bib + # Note: if you have latex math in your bibtex, the latex filter + # preprocessing may conflict with MathJAX if the latter is enabled. + # See https://github.com/alshedivat/al-folio/issues/357. + bibtex_filters: [latex, smallcaps, superscript] + + replace_strings: true + join_strings: true + + details_dir: bibliography + details_link: Details + + query: "@*" + group_by: year + group_order: descending + +# Display different badges withs stats for your publications +enable_publication_badges: + altmetric: true # Altmetric badge (https://www.altmetric.com/products/altmetric-badges/) + dimensions: true # Dimensions badge (https://badge.dimensions.ai/) + google_scholar: true # Google Scholar badge (https://scholar.google.com/intl/en/scholar/citations.html) + +# Filter out certain bibtex entry keywords used internally from the bib output +filtered_bibtex_keywords: + [abbr, abstract, altmetric, arxiv, bibtex_show, blog, code, html, pdf, poster, preview, selected, slides, supp, video, website] + +# Maximum number of authors to be shown for each publication (more authors are visible on click) +max_author_limit: 3 # leave blank to always show all authors +more_authors_animation_delay: 10 # more authors are revealed on click using animation; smaller delay means faster animation + +# Enables publication thumbnails. If disabled, none of the publications will display thumbnails, even if specified in the bib entry. +enable_publication_thumbnails: true + +# ----------------------------------------------------------------------------- +# Jekyll Link Attributes +# ----------------------------------------------------------------------------- + +# These are the defaults +external_links: + enabled: true + rel: external nofollow noopener + target: _blank + exclude: + +# ----------------------------------------------------------------------------- +# Responsive WebP Images +# ----------------------------------------------------------------------------- + +# MAKE SURE imagemagick is installed and on your PATH before enabling imagemagick. In a terminal, run: +# convert -version +imagemagick: + enabled: true # enables responsive images for your site (recommended, see https://github.com/alshedivat/al-folio/issues/537) + widths: + - 480 + - 800 + - 1400 + input_directories: + - assets/img/ + input_formats: + - ".jpg" + - ".jpeg" + - ".png" + - ".tiff" + - ".gif" + output_formats: + webp: "-quality 85" + +# Lazy loading images +# If you enable lazy loading, all images will add the loading="lazy" attribute. +# This will make your site load faster, but it may not be supported in all browsers. +# You can also set loading="" to other values for specific images to override the default behavior. +# Options: "auto", "eager", "lazy" +# See https://web.dev/browser-level-image-lazy-loading/ for more information. +lazy_loading_images: true # enables lazy loading of images (recommended) + +# ----------------------------------------------------------------------------- +# Optional Features +# ----------------------------------------------------------------------------- + +enable_google_analytics: false # enables google analytics +enable_cronitor_analytics: false # enables cronitor RUM analytics +enable_google_verification: false # enables google site verification +enable_bing_verification: false # enables bing site verification +enable_masonry: true # enables automatic project cards arrangement +enable_math: true # enables math typesetting (uses MathJax) +enable_tooltips: false # enables automatic tooltip links generated for each section titles on pages and posts +enable_darkmode: true # enables switching between light/dark modes +enable_navbar_social: false # enables displaying social links in the navbar on the about page +enable_project_categories: true # enables categorization of projects into multiple categories +enable_medium_zoom: true # enables image zoom feature (as on medium.com) +enable_progressbar: true # enables a horizontal progress bar linked to the vertical scroll position + +# ----------------------------------------------------------------------------- +# Library versions +# ----------------------------------------------------------------------------- + +bootstrap-table: + version: "1.22.1" +chartjs: + version: "4.4.1" +d3: + version: "7.8.5" + integrity: "sha256-1rA678n2xEx7x4cTZ5x4wpUCj6kUMZEZ5cxLSVSFWxw=" +diff2html: + version: "3.4.47" + integrity: + css: "sha256-IMBK4VNZp0ivwefSn51bswdsrhk0HoMTLc2GqFHFBXg=" + js: "sha256-eU2TVHX633T1o/bTQp6iIJByYJEtZThhF9bKz/DcbbY=" +echarts: + version: "5.4.3" + integrity: + library: "sha256-EVZCmhajjLhgTcxlGMGUBtQiYULZCPjt0uNTFEPFTRk=" + dark_theme: "sha256-UmFIP/4VvOqBDIl2QWl1HBuAJ1XWs/iFZxT5yJRZOKo=" +highlightjs: + version: "11.9.0" + integrity: + css: + light: "sha256-Oppd74ucMR5a5Dq96FxjEzGF7tTw2fZ/6ksAqDCM8GY=" + dark: "sha256-nyCNAiECsdDHrr/s2OQsp5l9XeY2ZJ0rMepjCT2AkBk=" +imagesloaded: + version: "5.0.0" + integrity: "sha256-htrLFfZJ6v5udOG+3kNLINIKh2gvoKqwEhHYfTTMICc=" +img-comparison-slider: + version: "8.0.6" +jquery: + version: "3.6.0" + integrity: "sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" +leaflet: + version: "1.9.4" + integrity: + css: "sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" + js: "sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" +mathjax: + version: "3.2.0" +masonry: + version: "4.2.2" + integrity: "sha256-Nn1q/fx0H7SNLZMQ5Hw5JLaTRZp0yILA/FRexe19VdI=" +mdb: + version: "4.20.0" + integrity: + css: "sha256-jpjYvU3G3N6nrrBwXJoVEYI/0zw8htfFnhT9ljN3JJw=" + js: "sha256-NdbiivsvWt7VYCt6hYNT3h/th9vSTL4EDWeGs5SN3DA=" +medium_zoom: + version: "1.1.0" + integrity: "sha256-ZgMyDAIYDYGxbcpJcfUnYwNevG/xi9OHKaR/8GK+jWc=" +mermaid: + version: "10.7.0" + integrity: "sha256-TtLOdUA8mstPoO6sGvHIGx2ceXrrX4KgIItO06XOn8A=" +swiper: + version: "11.0.5" + integrity: + css: "sha256-yUoNxsvX+Vo8Trj3lZ/Y5ZBf8HlBFsB6Xwm7rH75/9E=" + js: "sha256-BPrwikijIybg9OQC5SYFFqhBjERYOn97tCureFgYH1E=" +vega: + version: "5.27.0" + integrity: "sha256-Yot/cfgMMMpFwkp/5azR20Tfkt24PFqQ6IQS+80HIZs=" +vega-embed: + version: "6.24.0" + integrity: "sha256-FPCJ9JYCC9AZSpvC/t/wHBX7ybueZhIqOMjpWqfl3DU=" +vega-lite: + version: "5.16.3" + integrity: "sha256-TvBvIS5jUN4BSy009usRjNzjI1qRrHPYv7xVLJyjUyw=" + +# ----------------------------------------------------------------------------- +# Get external JSON data +# ----------------------------------------------------------------------------- + +jekyll_get_json: + - data: resume + json: assets/json/resume.json # it can also be an url +jsonresume: + - basics + - work + - education + - publications + - projects + - volunteer + - awards + - certificates + - skills + - languages + - interests + - references diff --git a/_data/coauthors.yml b/_data/coauthors.yml new file mode 100644 index 0000000..5a989cf --- /dev/null +++ b/_data/coauthors.yml @@ -0,0 +1,34 @@ +"adams": + - firstname: ["Edwin", "E.", "E. P.", "Edwin Plimpton"] + url: https://en.wikipedia.org/wiki/Edwin_Plimpton_Adams + +"podolsky": + - firstname: ["Boris", "B.", "B. Y.", "Boris Yakovlevich"] + url: https://en.wikipedia.org/wiki/Boris_Podolsky + +"rosen": + - firstname: ["Nathan", "N."] + url: https://en.wikipedia.org/wiki/Nathan_Rosen + +"bach": + - firstname: ["Johann Sebastian", "J. S."] + url: https://en.wikipedia.org/wiki/Johann_Sebastian_Bach + + - firstname: ["Carl Philipp Emanuel", "C. P. E."] + url: https://en.wikipedia.org/wiki/Carl_Philipp_Emanuel_Bach + +"przibram": + - firstname: ["Karl"] + url: https://link.springer.com/article/10.1007/s00016-019-00242-z + +"schrodinger": + - firstname: ["Erwin"] + url: https://en.wikipedia.org/wiki/Erwin_Schr%C3%B6dinger + +"lorentz": + - firstname: ["Hendrik Antoon"] + url: https://en.wikipedia.org/wiki/Hendrik_Lorentz + +"planck": + - firstname: ["Max"] + url: https://en.wikipedia.org/wiki/Max_Planck diff --git a/_data/cv.yml b/_data/cv.yml new file mode 100644 index 0000000..5885b30 --- /dev/null +++ b/_data/cv.yml @@ -0,0 +1,97 @@ +- title: General Information + type: map + contents: + - name: Full Name + value: Albert Einstein + - name: Date of Birth + value: 14th March 1879 + - name: Languages + value: English, German + +- title: Education + type: time_table + contents: + - title: PhD + institution: University of Zurich, Zurich, Switzerland + year: 1905 + description: + - Description 1. + - Description 2. + - title: Description 3. + contents: + - Sub-description 1. + - Sub-description 2. + - title: Federal teaching diploma + institution: Eidgenössische Technische Hochschule, Zurich, Switzerland + year: 1900 + description: + - Description 1. + - Description 2. + +- title: Experience + type: time_table + contents: + - title: Professor of Theoretical Physics + institution: Institute for Advanced Study, Princeton University + year: 1933 - 1955 + description: + - Description 1. + - Description 2. + - title: Description 3. + contents: + - Sub-description 1. + - Sub-description 2. + - title: Visiting Professor + institution: California Institute of Technology, Pasadena, California, US + year: 1933 + description: + - Description 1. + - Description 2. + + - title: Director + institution: Kaiser Wilhelm Institute for Physics, Berlin, Germany. + year: 1917-1933 + + - title: Professor of Theoretical Physics + institution: Karl-Ferdinand University, Prague, Czechoslovakia + year: 1911 - 1917 + description: + + - title: Associate Professor of Theoretical Physics + institution: University of Zurich, Zurich, Switzerland + year: 1909 - 1911 + +- title: Open Source Projects + type: time_table + contents: + - title: al-folio + year: 2015-now + description: A beautiful, simple, clean, and responsive Jekyll theme for academics. + +- title: Honors and Awards + type: time_table + contents: + - year: 1921 + items: + - Nobel Prize in Physics + - Matteucci Medal + - year: 2029 + items: + - Max Planck Medal + +- title: Academic Interests + type: nested_list + contents: + - title: Topic 1. + items: + - Description 1. + - Description 2. + - title: Topic 2. + items: + - Description 1. + - Description 2. + +- title: Other Interests + type: list + contents: + - Hobbies: Hobby 1, Hobby 2, etc. diff --git a/_data/repositories.yml b/_data/repositories.yml new file mode 100644 index 0000000..5205c9f --- /dev/null +++ b/_data/repositories.yml @@ -0,0 +1,12 @@ +github_users: + - torvalds + - alshedivat + +github_repos: + - alshedivat/al-folio + - twbs/bootstrap + - jekyll/jekyll + - jquery/jquery + - FortAwesome/Font-Awesome + - jpswalsh/academicons + - mathjax/MathJax diff --git a/_data/venues.yml b/_data/venues.yml new file mode 100644 index 0000000..6c16ad5 --- /dev/null +++ b/_data/venues.yml @@ -0,0 +1,6 @@ +"AJP": + url: https://aapt.scitation.org/journal/ajp + color: "#00369f" + +"PhysRev": + url: https://journals.aps.org/ diff --git a/_includes/audio.liquid b/_includes/audio.liquid new file mode 100644 index 0000000..338e212 --- /dev/null +++ b/_includes/audio.liquid @@ -0,0 +1,30 @@ +
+
diff --git a/_includes/cv/list.liquid b/_includes/cv/list.liquid new file mode 100644 index 0000000..1cc2598 --- /dev/null +++ b/_includes/cv/list.liquid @@ -0,0 +1,5 @@ +
    + {% for content in entry.contents %} +
  • {{ content }}
  • + {% endfor %} +
diff --git a/_includes/cv/list_groups.liquid b/_includes/cv/list_groups.liquid new file mode 100644 index 0000000..1ca90e4 --- /dev/null +++ b/_includes/cv/list_groups.liquid @@ -0,0 +1,51 @@ +
+ {% for content in entry.contents %} +
+ + + + {% if content.icon %} + + {% else %} + + {% endif %} + + {% assign i = 1 %} + {% for item in content.items %} + {% assign i = i | plus: 1 %} + {% endfor %} + + + {% for item in content.items %} + + + + {% if item.level %} + + {% endif %} + {% if item.school %} + + {% else %} + + {% endif %} + {% if item.link %} + + {% endif %} + + {% endfor %} + +
{{ content.category }}
+ {{ item.name }} + {{ item.level }}{{ item.school }} + {% endif %} + {% if item.time %} +
+ {{ item.time }} +
+
+ {% endfor %} +
diff --git a/_includes/cv/map.liquid b/_includes/cv/map.liquid new file mode 100644 index 0000000..aee3419 --- /dev/null +++ b/_includes/cv/map.liquid @@ -0,0 +1,29 @@ + + {% for content in entry.contents %} + + + {% if content.value %} + + {% endif %} + {% if content.links %} + + {% endif %} + + {% endfor %} +
+ {{ content.name }} + {{ content.value }} +
+ {% for item in content.links %} + {% if item.link %} + + {% endif %} + {% endfor %} +
+
diff --git a/_includes/cv/nested_list.liquid b/_includes/cv/nested_list.liquid new file mode 100644 index 0000000..72200de --- /dev/null +++ b/_includes/cv/nested_list.liquid @@ -0,0 +1,16 @@ +
    + {% for content in entry.contents %} +
  • +
    {{ content.title }}
    + {% if content.items %} +
      + {% for subitem in content.items %} +
    • + {{ subitem }} +
    • + {% endfor %} +
    + {% endif %} +
  • + {% endfor %} +
diff --git a/_includes/cv/time_table.liquid b/_includes/cv/time_table.liquid new file mode 100644 index 0000000..beb1c52 --- /dev/null +++ b/_includes/cv/time_table.liquid @@ -0,0 +1,118 @@ +
    + {% for content in entry.contents %} +
  • +
    + {% if content.year %} +
    + + + + + + {% if content.location %} + + + + {% endif %} + +
    + + {{- content.year -}} + +
    +

    + + {{ content.location }} +

    +
    +
    + {% endif %} +
    + {% if content.title %} +
    {{ content.title }}
    + {% endif %} + {% if content.department or content.institution %} + + + {% if content.institution %} + + + + + {% endif %} + {% if content.department %} + + + + + {% endif %} + +
    + + {{ content.institution }}
    + + {{ content.department }}
    + {% endif %} + {% if content.maindescription %} +
    {{ content.maindescription }}
    + {% endif %} + {% if content.description %} +
      + {% for item in content.description %} +
    • + {% if item.contents %} + {{ item.title }} +
        + {% for subitem in item.contents %} +
      • + {{ subitem }} +
      • + {% endfor %} +
      + {% else %} + {{ item }} + {% endif %} +
    • + {% endfor %} +
    + {% endif %} + {% if content.items %} +
      + {% for item in content.items %} +
    • + {% if item.contents %} + {{ item.title }} +
        + {% for subitem in item.contents %} +
      • + {{ subitem }} +
      • + {% endfor %} +
      + {% else %} + {{ item }} + {% endif %} +
    • + {% endfor %} +
    + {% endif %} + {% if content.linkitems %} + + {% endif %} +
    +
    +
  • + {% endfor %} +
diff --git a/_includes/disqus.liquid b/_includes/disqus.liquid new file mode 100644 index 0000000..6979a4e --- /dev/null +++ b/_includes/disqus.liquid @@ -0,0 +1,13 @@ +
+ + +
diff --git a/_includes/figure.liquid b/_includes/figure.liquid new file mode 100644 index 0000000..7c10854 --- /dev/null +++ b/_includes/figure.liquid @@ -0,0 +1,78 @@ +{% assign img_path = include.path | remove: '.jpg' | remove: '.jpeg' | remove: '.png' | remove: '.tiff' | remove: '.gif' %} + +
+ + + + {% if site.imagemagick.enabled %} + + {% endif %} + {{ include.alt }} + + + {% if include.caption %} +
{{ include.caption }}
+ {% endif %} +
diff --git a/_includes/footer.liquid b/_includes/footer.liquid new file mode 100644 index 0000000..7541c96 --- /dev/null +++ b/_includes/footer.liquid @@ -0,0 +1,31 @@ +{% if site.footer_fixed %} +
+
+ © Copyright {{ site.time | date: '%Y' }} + {{ site.first_name }} + {{ site.middle_name }} + {{ site.last_name }}. {{ site.footer_text }} + {% if site.impressum_path %} + Impressum. + {% endif %} + {% if site.last_updated %} + Last updated: {{ 'now' | date: '%B %d, %Y' }}. + {% endif %} +
+
+{% else %} +
+
+ © Copyright {{ site.time | date: '%Y' }} + {{ site.first_name }} + {{ site.middle_name }} + {{ site.last_name }}. {{ site.footer_text }} + {% if site.impressum_path %} + Impressum. + {% endif %} + {% if site.last_updated %} + Last updated: {{ 'now' | date: '%B %d, %Y' }}. + {% endif %} +
+
+{% endif %} diff --git a/_includes/giscus.liquid b/_includes/giscus.liquid new file mode 100644 index 0000000..8ac16ee --- /dev/null +++ b/_includes/giscus.liquid @@ -0,0 +1,32 @@ +
+ {% if site.giscus.repo %} + + + {% else %} + {% capture giscus_warning %} > ##### giscus comments misconfigured > Please follow instructions at + [http://giscus.app](http://giscus.app) and update your giscus configuration. {: .block-danger } {% endcapture %} + {{ giscus_warning | markdownify }} + {% endif %} +
diff --git a/_includes/head.liquid b/_includes/head.liquid new file mode 100644 index 0000000..d64c37a --- /dev/null +++ b/_includes/head.liquid @@ -0,0 +1,130 @@ + +{% include metadata.liquid %} + + + + + + + +{% if page.pretty_table %} + +{% endif %} + + + + + + + + +{% if page.toc and page.toc.sidebar %} + + +{% endif %} + + +{% if site.icon.size <= 4 %} + +{% elsif site.icon != blank %} + +{% endif %} + + + + + +{% if site.enable_darkmode %} + + +{% endif %} + + +{% if page.map %} + +{% endif %} + + +{% if page.code_diff %} + + + +{% endif %} + +{% if page.images %} + + {% if page.images.compare %} + + {% endif %} + + {% if page.images.slider %} + + {% endif %} +{% endif %} + +{% if page.tikzjax %} + +{% endif %} diff --git a/_includes/header.liquid b/_includes/header.liquid new file mode 100644 index 0000000..6a5829e --- /dev/null +++ b/_includes/header.liquid @@ -0,0 +1,132 @@ +
+ + + {% if site.enable_progressbar %} + + +
+ +
+
+ {% endif %} +
diff --git a/_includes/latest_posts.liquid b/_includes/latest_posts.liquid new file mode 100644 index 0000000..e710727 --- /dev/null +++ b/_includes/latest_posts.liquid @@ -0,0 +1,48 @@ +
+ {% if site.latest_posts != blank %} + {% assign latest_posts_size = site.posts | size %} +
3 %} + style="max-height: 60vw" + {% endif %} + > + + {% assign latest_posts = site.posts %} + {% if site.latest_posts.limit %} + {% assign latest_posts_limit = site.latest_posts.limit %} + {% else %} + {% assign latest_posts_limit = latest_posts_size %} + {% endif %} + {% for item in latest_posts limit: latest_posts_limit %} + + + + + {% endfor %} +
{{ item.date | date: '%b %d, %Y' }} + {% if item.redirect == blank %} + {{ item.title }} + {% elsif item.redirect contains '://' %} + {{ item.title }} + + + + {% else %} + {{ item.title }} + {% endif %} +
+
+ {% else %} +

No posts so far...

+ {% endif %} +
diff --git a/_includes/metadata.liquid b/_includes/metadata.liquid new file mode 100644 index 0000000..b737370 --- /dev/null +++ b/_includes/metadata.liquid @@ -0,0 +1,241 @@ +{% if site.enable_google_verification or site.enable_bing_verification %} + + {% if site.enable_google_verification %} + + {% endif %} + {% if site.enable_bing_verification %} + + {% endif %} + + +{% endif %} + +{% capture author_name %}{{ site.first_name }}{% if site.middle_name %} {{ site.middle_name }}{% endif %} {{ site.last_name }}{% endcapture %} + + + + + + + {% if site.title == 'blank' %} + {% capture title %}{{ author_name }}{% endcapture %} + {% else %} + {% capture title %}{{ site.title }}{% endcapture %} + {% endif %} + {% if page.url == '/blog/index.html' %} + {{ page.title }} | {{ title }} + {% elsif page.title != 'blank' and page.url != '/' %} + {% if page.title == null or page.title == '' %} + {{ page.date | date: '%Y' }} | {{ title }} + {% else %} + {{ page.title }} | {{ title }} + {% endif %} + {% else %} + {{ title }} + {% endif %} + + + +{% if page.keywords or site.keywords %} + +{% endif %} + +{% assign is_blog_post = false %} +{% if page.url != '/blog/index.html' and page.url contains '/blog/' %} + {% unless page.url contains '/tag/' or page.url contains '/category/' %} + {% assign is_blog_post = true %} + {% endunless %} +{% endif %} + +{% if site.serve_og_meta %} + + + + + + + {% if page.og_image or site.og_image %} + + {% endif %} + + + + + + + {% if page.og_image or site.og_image %} + + {% endif %} + {% if site.x_username %} + + + {% endif %} +{% endif %} + +{% if site.serve_schema_org %} + + {% comment %} Social links generator for "sameAs schema" {% endcomment %} + {% assign sameaslinks = '' | split: ',' %} + {% if site.orcid_id %} + {% capture link %}https://orcid.org/{{ site.orcid_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.scholar_userid %} + {% capture link %}https://scholar.google.com/citations?user={{ site.scholar_userid }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.semanticscholar_id %} + {% capture link %}https://www.semanticscholar.org/author/{{ site.semanticscholar_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.publons_id %} + {% capture link %}https://publons.com/a/{{ site.publons_id }}/{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.lattes_id %} + {% capture link %}http://lattes.cnpq.br/{{ site.lattes_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.osf_id %} + {% capture link %}https://osf.io/{{ site.osf_id }}/{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.research_gate_profile %} + {% capture link %}https://www.researchgate.net/profile/{{site.research_gate_profile}}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.scopus_id %} + {% capture link %}https://www.scopus.com/authid/detail.uri?authorId={{site.scopus_id}}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.github_username %} + {% capture link %}https://github.com/{{ site.github_username }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.telegram_username %} + {% capture link %}https://telegram.me/{{ site.telegram_username }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.linkedin_username %} + {% capture link %}https://www.linkedin.com/in/{{ site.linkedin_username }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.x_username %} + {% capture link %}https://twitter.com/{{ site.x_username }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.mastodon_username %} + {% capture link %}https://{{ site.mastodon_username }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.medium_username %} + {% capture link %}https://medium.com/@{{ site.medium_username }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.quora_username %} + {% capture link %}https://www.quora.com/profile/{{ site.quora_username }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.blogger_url %} + {% capture link %}{{ site.blogger_url }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.work_url %} + {% capture link %}{{ site.work_url }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.wikidata_id %} + {% capture link %}https://www.wikidata.org/wiki/{{ site.wikidata_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.wikipedia_id %} + {% capture link %}https://wikipedia.org/wiki/User:{{ site.wikipedia_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.strava_userid %} + {% capture link %}https://www.strava.com/athletes/{{ site.strava_userid }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.keybase_username %} + {% capture link %}https://keybase.io/{{ site.keybase_username }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.gitlab_username %} + {% capture link %}https://gitlab.com/{{ site.gitlab_username }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.dblp_url %} + {% capture link %}{{ site.dblp_url }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.stackoverflow_id %} + {% capture link %}https://stackoverflow.com/users/{{ site.stackoverflow_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.kaggle_id %} + {% capture link %}https://www.kaggle.com/{{ site.kaggle_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.lastfm_id %} + {% capture link %}https://www.last.fm/user/{{ site.lastfm_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.spotify_id %} + {% capture link %}https://open.spotify.com/user/{{ site.spotify_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.pinterest_id %} + {% capture link %}https://www.pinterest.com/{{ site.pinterest_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.unsplash_id %} + {% capture link %}https://unsplash.com/@{{ site.unsplash_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.instagram_id %} + {% capture link %}https://instagram.com/{{ site.instagram_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.facebook_id %} + {% capture link %}https://facebook.com/{{ site.facebook_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.youtube_id %} + {% capture link %}https://youtube.com/@{{ site.youtube_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.discord_id %} + {% capture link %}https://discord.com/users/{{ site.discord_id }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if site.zotero_username %} + {% capture link %}https://www.zotero.org/{{ site.zotero_username }}{% endcapture %} + {% assign sameaslinks = sameaslinks | push: link %} + {% endif %} + {% if sameaslinks != blank %} + {% assign sameaslinks = sameaslinks | split: '' %} + {% endif %} + + +{% endif %} diff --git a/_includes/news.liquid b/_includes/news.liquid new file mode 100644 index 0000000..547ccf1 --- /dev/null +++ b/_includes/news.liquid @@ -0,0 +1,34 @@ +
+ {% if site.news != blank %} + {% assign news_size = site.news | size %} +
3 %} + style="max-height: 60vw" + {% endif %} + > + + {% assign news = site.news | reverse %} + {% if include.limit and site.announcements.limit %} + {% assign news_limit = site.announcements.limit %} + {% else %} + {% assign news_limit = news_size %} + {% endif %} + {% for item in news limit: news_limit %} + + + + + {% endfor %} +
{{ item.date | date: '%b %d, %Y' }} + {% if item.inline %} + {{ item.content | remove: '

' | remove: '

' | emojify }} + {% else %} + {{ item.title }} + {% endif %} +
+
+ {% else %} +

No news so far...

+ {% endif %} +
diff --git a/_includes/pagination.liquid b/_includes/pagination.liquid new file mode 100644 index 0000000..7d504b1 --- /dev/null +++ b/_includes/pagination.liquid @@ -0,0 +1,21 @@ +{% if paginator.total_pages > 1 %} + +{% endif %} diff --git a/_includes/projects.liquid b/_includes/projects.liquid new file mode 100644 index 0000000..926ad1e --- /dev/null +++ b/_includes/projects.liquid @@ -0,0 +1,35 @@ +
+ diff --git a/_includes/projects_horizontal.liquid b/_includes/projects_horizontal.liquid new file mode 100644 index 0000000..b0f12b4 --- /dev/null +++ b/_includes/projects_horizontal.liquid @@ -0,0 +1,34 @@ + diff --git a/_includes/related_posts.liquid b/_includes/related_posts.liquid new file mode 100644 index 0000000..4cf4ffb --- /dev/null +++ b/_includes/related_posts.liquid @@ -0,0 +1,18 @@ +{% assign have_related_posts = false %} +{% for post in site.related_posts | limit: site.related_blog_posts.max_related %} + {% unless have_related_posts %} + {% assign have_related_posts = true %} +
+
+
+
    + + +

    Enjoy Reading This Article?

    +

    Here are some more articles you might like to read next:

    + {% endunless %} + +
  • + {{ post.title }} +
  • +{% endfor %} diff --git a/_includes/repository/repo.liquid b/_includes/repository/repo.liquid new file mode 100644 index 0000000..86aecc5 --- /dev/null +++ b/_includes/repository/repo.liquid @@ -0,0 +1,21 @@ +{% assign repo_url = include.repository | split: '/' %} +{% if site.data.repositories.github_users contains repo_url.first %} + {% assign show_owner = false %} +{% else %} + {% assign show_owner = true %} +{% endif %} + + diff --git a/_includes/repository/repo_trophies.liquid b/_includes/repository/repo_trophies.liquid new file mode 100644 index 0000000..07a8d42 --- /dev/null +++ b/_includes/repository/repo_trophies.liquid @@ -0,0 +1,42 @@ + diff --git a/_includes/repository/repo_user.liquid b/_includes/repository/repo_user.liquid new file mode 100644 index 0000000..35c301d --- /dev/null +++ b/_includes/repository/repo_user.liquid @@ -0,0 +1,14 @@ + diff --git a/_includes/resume/awards.liquid b/_includes/resume/awards.liquid new file mode 100644 index 0000000..13bd9b3 --- /dev/null +++ b/_includes/resume/awards.liquid @@ -0,0 +1,19 @@ +
      + {% for content in data[1] %} +
    • +
      +
      + {% if content.date %} {% assign date = content.date | split: '-' | join: '.' %} {% else %} {% assign date = '' %} {% endif %} + {{ date }} +
      +
      +
      + {{ content.title }} +
      +
      {{ content.awarder }}
      +
      {{ content.summary }}
      +
      +
      +
    • + {% endfor %} +
    diff --git a/_includes/resume/basics.liquid b/_includes/resume/basics.liquid new file mode 100644 index 0000000..3f8d5bf --- /dev/null +++ b/_includes/resume/basics.liquid @@ -0,0 +1,28 @@ + + {% assign skip_basics = 'image,profiles,location' | split: ',' %} + {% for content in data[1] %} + {% + if (content[1] == "") or (skip_basics contains + content[0]) + %} + {% continue %} + {% endif %} + + + + + + {% endfor %} +
    + {{ content[0] | capitalize }} + + {% if content[0] == 'url' %} + {{ content[1] }} + {% elsif content[0] == 'email' %} + {{ content[1] }} + {% elsif content[0] == 'phone' %} + {{ content[1] }} + {% else %} + {{ content[1] }} + {% endif %} +
    diff --git a/_includes/resume/certificates.liquid b/_includes/resume/certificates.liquid new file mode 100644 index 0000000..70ec00a --- /dev/null +++ b/_includes/resume/certificates.liquid @@ -0,0 +1,35 @@ +
    + {% assign certificates = data[1] | sort: 'date' | reverse %} + {% for content in certificates %} +
    + + + + {% if content.icon %} + + {% else %} + + {% endif %} + + {% assign i = 1 %} + {% for item in content.items %} + {% assign i = i | plus: 1 %} + {% endfor %} + + + + + + + + +
    + + + {{ content.name }} +
    + {{ content.issuer }} + {{ content.date }}
    +
    + {% endfor %} +
    diff --git a/_includes/resume/education.liquid b/_includes/resume/education.liquid new file mode 100644 index 0000000..a570605 --- /dev/null +++ b/_includes/resume/education.liquid @@ -0,0 +1,54 @@ +
      + {% assign education = data[1] | sort: 'startDate' | reverse %} + {% for content in education %} +
    • +
      +
      + {% if content.startDate and content.startDate != '' %} + {% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %} + {% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %} + {% assign date = startDate | append: ' - ' %} + {% assign date = date | append: endDate %} + {% else %} + {% assign date = null %} + {% endif %} + + + + + + {% if content.location %} + + + + {% endif %} + +
      + {% if date %} + {{ date }} + {% endif %} +
      +

      + + {{ content.location }} +

      +
      +
      +
      +
      + {{ content.studyType }} +
      +
      {{ content.institution }}
      +
      {{ content.area }}
      +
        + {% for item in content.courses %} +
      • + {{ item }} +
      • + {% endfor %} +
      +
      +
      +
    • + {% endfor %} +
    diff --git a/_includes/resume/interests.liquid b/_includes/resume/interests.liquid new file mode 100644 index 0000000..b3b72de --- /dev/null +++ b/_includes/resume/interests.liquid @@ -0,0 +1,33 @@ +
    + {% for content in data[1] %} +
    + + + + {% if content.icon %} + + {% else %} + + {% endif %} + + {% assign i = 1 %} + {% for item in content.items %} + {% assign i = i | plus: 1 %} + {% endfor %} + + + {% for item in content.keywords %} + + + + + {% endfor %} + +
    + + {{ content.name }}
    + {{ item }} +
    +
    + {% endfor %} +
    diff --git a/_includes/resume/languages.liquid b/_includes/resume/languages.liquid new file mode 100644 index 0000000..36d7875 --- /dev/null +++ b/_includes/resume/languages.liquid @@ -0,0 +1,31 @@ +
    + {% for content in data[1] %} +
    + + + + {% if content.icon %} + + {% else %} + + {% endif %} + + {% assign i = 1 %} + {% for item in content.items %} + {% assign i = i | plus: 1 %} + {% endfor %} + + + + + + + +
    + + {{ content.language }}
    + {{ content.fluency }} +
    +
    + {% endfor %} +
    diff --git a/_includes/resume/projects.liquid b/_includes/resume/projects.liquid new file mode 100644 index 0000000..5f47ea8 --- /dev/null +++ b/_includes/resume/projects.liquid @@ -0,0 +1,32 @@ +
      + {% for content in data[1] %} +
    • +
      +
      + {% if content.startDate %} + {% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %} + {% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %} + {% assign date = startDate | append: ' - ' %} + {% assign date = date | append: endDate %} + {% else %} + {% assign date = '' %} + {% endif %} + {{ date }} +
      +
      +
      + {{ content.name }} +
      +
      {{ content.summary }}
      +
        + {% for item in content.highlights %} +
      • + {{ item }} +
      • + {% endfor %} +
      +
      +
      +
    • + {% endfor %} +
    diff --git a/_includes/resume/publications.liquid b/_includes/resume/publications.liquid new file mode 100644 index 0000000..ef23413 --- /dev/null +++ b/_includes/resume/publications.liquid @@ -0,0 +1,28 @@ +
      + {% assign publications = data[1] | sort: 'releaseDate' | reverse %} + {% for content in publications %} +
    • +
      +
      + {% if content.releaseDate %} {% assign date = content.releaseDate | split: '-' | join: '.' %} {% else %} {% assign date = '' %} {% endif %} + + + + + + +
      + {{ date }} +
      +
      +
      +
      + {{ content.name }} +
      +
      {{ content.publisher }}
      +
      {{ content.summary }}
      +
      +
      +
    • + {% endfor %} +
    diff --git a/_includes/resume/references.liquid b/_includes/resume/references.liquid new file mode 100644 index 0000000..2236568 --- /dev/null +++ b/_includes/resume/references.liquid @@ -0,0 +1,31 @@ +
    + {% for content in data[1] %} +
    + + + + {% if content.icon %} + + {% else %} + + {% endif %} + + {% assign i = 1 %} + {% for item in content.items %} + {% assign i = i | plus: 1 %} + {% endfor %} + + + + + + + +
    + + {{ content.name }}
    + {{ content.reference }} +
    +
    + {% endfor %} +
    diff --git a/_includes/resume/skills.liquid b/_includes/resume/skills.liquid new file mode 100644 index 0000000..672fd05 --- /dev/null +++ b/_includes/resume/skills.liquid @@ -0,0 +1,33 @@ +
    + {% for content in data[1] %} +
    + + + + {% if content.icon %} + + {% else %} + + {% endif %} + + {% assign i = 1 %} + {% for item in content.items %} + {% assign i = i | plus: 1 %} + {% endfor %} + + + {% for item in content.keywords %} + + + + + {% endfor %} + +
    + + {{ content.name }}
    + {{ item }} +
    +
    + {% endfor %} +
    diff --git a/_includes/resume/volunteer.liquid b/_includes/resume/volunteer.liquid new file mode 100644 index 0000000..c0b41f7 --- /dev/null +++ b/_includes/resume/volunteer.liquid @@ -0,0 +1,34 @@ +
      + {% assign volunteer = data[1] | sort: 'startDate' | reverse %} + {% for content in volunteer %} +
    • +
      +
      + {% if content.startDate %} + {% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %} + {% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %} + {% assign date = startDate | append: ' - ' %} + {% assign date = date | append: endDate %} + {% else %} + {% assign date = '' %} + {% endif %} + {{ date }} +
      +
      +
      + {{ content.position }} +
      +
      {{ content.organization }}
      +
      {{ content.summary }}
      +
        + {% for item in content.highlights %} +
      • + {{ item }} +
      • + {% endfor %} +
      +
      +
      +
    • + {% endfor %} +
    diff --git a/_includes/resume/work.liquid b/_includes/resume/work.liquid new file mode 100644 index 0000000..50b1074 --- /dev/null +++ b/_includes/resume/work.liquid @@ -0,0 +1,34 @@ +
      + {% assign work = data[1] | sort: 'startDate' | reverse %} + {% for content in work %} +
    • +
      +
      + {% if content.startDate %} + {% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %} + {% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %} + {% assign date = startDate | append: ' - ' %} + {% assign date = date | append: endDate %} + {% else %} + {% assign date = '' %} + {% endif %} + {{ date }} +
      +
      +
      + {{ content.position }} +
      +
      {{ content.name }}
      +
      {{ content.summary }}
      +
        + {% for item in content.highlights %} +
      • + {{ item }} +
      • + {% endfor %} +
      +
      +
      +
    • + {% endfor %} +
    diff --git a/_includes/scripts/analytics.liquid b/_includes/scripts/analytics.liquid new file mode 100644 index 0000000..886cfd3 --- /dev/null +++ b/_includes/scripts/analytics.liquid @@ -0,0 +1,24 @@ +{% if site.enable_google_analytics %} + + + +{% endif %} +{% if site.enable_cronitor_analytics %} + + + +{% endif %} diff --git a/_includes/scripts/badges.liquid b/_includes/scripts/badges.liquid new file mode 100644 index 0000000..7270690 --- /dev/null +++ b/_includes/scripts/badges.liquid @@ -0,0 +1,6 @@ +{% if site.enable_publication_badges.altmetric %} + +{% endif %} +{% if site.enable_publication_badges.dimensions %} + +{% endif %} diff --git a/_includes/scripts/bootstrap.liquid b/_includes/scripts/bootstrap.liquid new file mode 100644 index 0000000..647aaf1 --- /dev/null +++ b/_includes/scripts/bootstrap.liquid @@ -0,0 +1,8 @@ + + + + diff --git a/_includes/scripts/chartjs.liquid b/_includes/scripts/chartjs.liquid new file mode 100644 index 0000000..8574f74 --- /dev/null +++ b/_includes/scripts/chartjs.liquid @@ -0,0 +1,19 @@ +{% if page.chart and page.chart.chartjs %} + + +{% endif %} diff --git a/_includes/scripts/diff2html.liquid b/_includes/scripts/diff2html.liquid new file mode 100644 index 0000000..1e3ddd5 --- /dev/null +++ b/_includes/scripts/diff2html.liquid @@ -0,0 +1,31 @@ +{% if page.code_diff %} + + + +{% endif %} diff --git a/_includes/scripts/echarts.liquid b/_includes/scripts/echarts.liquid new file mode 100644 index 0000000..96a67c8 --- /dev/null +++ b/_includes/scripts/echarts.liquid @@ -0,0 +1,47 @@ +{% if page.chart and page.chart.echarts %} + + {% if site.enable_darkmode %} + + {% endif %} + +{% endif %} diff --git a/_includes/scripts/imageLayouts.liquid b/_includes/scripts/imageLayouts.liquid new file mode 100644 index 0000000..bb8c5a2 --- /dev/null +++ b/_includes/scripts/imageLayouts.liquid @@ -0,0 +1,13 @@ +{% if page.images %} + {% if page.images.compare %} + + {% endif %} + {% if page.images.slider %} + + {% endif %} +{% endif %} diff --git a/_includes/scripts/jquery.liquid b/_includes/scripts/jquery.liquid new file mode 100644 index 0000000..628f873 --- /dev/null +++ b/_includes/scripts/jquery.liquid @@ -0,0 +1,6 @@ + + diff --git a/_includes/scripts/leaflet.liquid b/_includes/scripts/leaflet.liquid new file mode 100644 index 0000000..13b2bda --- /dev/null +++ b/_includes/scripts/leaflet.liquid @@ -0,0 +1,32 @@ +{% if page.map %} + + +{% endif %} diff --git a/_includes/scripts/masonry.liquid b/_includes/scripts/masonry.liquid new file mode 100644 index 0000000..cbc3c9a --- /dev/null +++ b/_includes/scripts/masonry.liquid @@ -0,0 +1,16 @@ +{% if site.enable_masonry %} + + + + +{% endif %} diff --git a/_includes/scripts/mathjax.liquid b/_includes/scripts/mathjax.liquid new file mode 100644 index 0000000..7a45483 --- /dev/null +++ b/_includes/scripts/mathjax.liquid @@ -0,0 +1,17 @@ +{% if site.enable_math %} + + + + +{% endif %} diff --git a/_includes/scripts/mermaid.liquid b/_includes/scripts/mermaid.liquid new file mode 100644 index 0000000..2bfd3ed --- /dev/null +++ b/_includes/scripts/mermaid.liquid @@ -0,0 +1,55 @@ +{% if page.mermaid and page.mermaid.enabled %} + + {% if page.mermaid.zoomable %} + + {% endif %} + +{% endif %} diff --git a/_includes/scripts/misc.liquid b/_includes/scripts/misc.liquid new file mode 100644 index 0000000..07b117e --- /dev/null +++ b/_includes/scripts/misc.liquid @@ -0,0 +1,36 @@ +{% if site.enable_tooltips %} + + +{% endif %} +{% if site.enable_medium_zoom %} + + + +{% endif %} +{% if page.toc and page.toc.sidebar %} + + +{% endif %} + + +{% if page.pretty_table %} + + +{% endif %} + + + + + + + + diff --git a/_includes/scripts/progressBar.liquid b/_includes/scripts/progressBar.liquid new file mode 100644 index 0000000..08d1915 --- /dev/null +++ b/_includes/scripts/progressBar.liquid @@ -0,0 +1,78 @@ +{% if site.enable_progressbar %} + + +{% endif %} diff --git a/_includes/scripts/tikzjax.liquid b/_includes/scripts/tikzjax.liquid new file mode 100644 index 0000000..aa2a3c1 --- /dev/null +++ b/_includes/scripts/tikzjax.liquid @@ -0,0 +1,3 @@ +{% if page.tikzjax %} + +{% endif %} diff --git a/_includes/scripts/vega.liquid b/_includes/scripts/vega.liquid new file mode 100644 index 0000000..0e574f1 --- /dev/null +++ b/_includes/scripts/vega.liquid @@ -0,0 +1,47 @@ +{% if page.chart and page.chart.vega_lite %} + + + + + +{% endif %} diff --git a/_includes/scripts/wechatModal.liquid b/_includes/scripts/wechatModal.liquid new file mode 100644 index 0000000..17285b3 --- /dev/null +++ b/_includes/scripts/wechatModal.liquid @@ -0,0 +1,18 @@ +{% if site.wechat_qr %} + + + +{% endif %} diff --git a/_includes/selected_papers.liquid b/_includes/selected_papers.liquid new file mode 100644 index 0000000..e9bf093 --- /dev/null +++ b/_includes/selected_papers.liquid @@ -0,0 +1,3 @@ +
    + {% bibliography --group_by none --query @*[selected=true]* %} +
    diff --git a/_includes/social.liquid b/_includes/social.liquid new file mode 100644 index 0000000..5158251 --- /dev/null +++ b/_includes/social.liquid @@ -0,0 +1,121 @@ +{% if site.email %} + +{% endif %} +{% if site.telegram_username %} + +{% endif %} +{% if site.whatsapp_number %} + +{% endif %} +{% if site.orcid_id %} + +{% endif %} +{% if site.scholar_userid %} + +{% endif %} +{% if site.semanticscholar_id %} + +{% endif %} +{% if site.publons_id %} + +{% endif %} +{% if site.lattes_id %} + +{% endif %} +{% if site.osf_id %} + +{% endif %} +{% if site.research_gate_profile %} + +{% endif %} +{% if site.scopus_id %} + +{% endif %} +{% if site.github_username %} + +{% endif %} +{% if site.linkedin_username %} + +{% endif %} +{% if site.x_username %} + +{% endif %} +{% if site.mastodon_username %} + +{% endif %} +{% if site.medium_username %} + +{% endif %} +{% if site.quora_username %} + +{% endif %} +{% if site.flickr_id %} + +{% endif %} +{% if site.blogger_url %} + +{% endif %} +{% if site.work_url %} + +{% endif %} +{% if site.wikidata_id %} + +{% endif %} +{% if site.wikipedia_id %} + +{% endif %} +{% if site.strava_userid %} + +{% endif %} +{% if site.keybase_username %} + +{% endif %} +{% if site.gitlab_username %} + +{% endif %} +{% if site.dblp_url %} + +{% endif %} +{% if site.stackoverflow_id %} + +{% endif %} +{% if site.kaggle_id %} + +{% endif %} +{% if site.lastfm_id %} + +{% endif %} +{% if site.spotify_id %} + +{% endif %} +{% if site.pinterest_id %} + +{% endif %} +{% if site.unsplash_id %} + +{% endif %} +{% if site.instagram_id %} + +{% endif %} +{% if site.facebook_id %} + +{% endif %} +{% if site.youtube_id %} + +{% endif %} +{% if site.discord_id %} + +{% endif %} +{% if site.zotero_username %} + +{% endif %} +{% if site.rss_icon %} + +{% endif %} +{% if site.wechat_qr %} + +
    + WeChat QR +
    + {% include scripts/wechatModal.liquid %} +{% endif %} diff --git a/_includes/video.liquid b/_includes/video.liquid new file mode 100644 index 0000000..8823106 --- /dev/null +++ b/_includes/video.liquid @@ -0,0 +1,97 @@ +{% assign extension = include.path | split: '.' | last %} + +
    + {% if extension == 'mp4' or extension == 'webm' or extension == 'ogg' %} +