diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..fcb4b72 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,31 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/jekyll +{ + "name": "Jekyll", + "image": "mcr.microsoft.com/devcontainers/jekyll", + + // Features to add to the dev container. More info: https://containers.dev/features. + "features": { + "ghcr.io/rocker-org/devcontainer-features/apt-packages:1": { + "packages": "build-essential,imagemagick,inotify-tools,jupyter-nbconvert,procps,ruby-full,zlib1g-dev" + }, + "ghcr.io/devcontainers-contrib/features/prettier:1": {} + }, + + // Optionally: run jekyll serve automatically on container entering using the Docker entrypoint + "postAttachCommand": "./bin/entry_point.sh", + + "customizations": { + "vscode": { + "extensions": ["esbenp.prettier-vscode", "sissel.shopify-liquid", "yzhang.markdown-all-in-one"], + "settings": { + // use prettier code formatter as default formatter + "editor.defaultFormatter": "esbenp.prettier-vscode", + "prettier.configPath": ".prettierrc", + "editor.formatOnSave": true + } + } + }, + + "remoteUser": "vscode" +} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..e785898 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Force LF line endings, needed for Docker to work on Windows +*.sh text eol=lf \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/1_bug_report.yml b/.github/ISSUE_TEMPLATE/1_bug_report.yml index 96ec317..f9c461f 100644 --- a/.github/ISSUE_TEMPLATE/1_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/1_bug_report.yml @@ -7,8 +7,8 @@ body: 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), + If it's a question about how al-folio works, have a look at our [documentation](https://github.com/alshedivat/al-folio/blob/main/README.md), + [frequently asked questions](https://github.com/alshedivat/al-folio/blob/main/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). @@ -20,7 +20,7 @@ body: 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. + - label: I read through [FAQ](https://github.com/alshedivat/al-folio/blob/main/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 @@ -81,7 +81,8 @@ body: description: select all environments where you have experienced this issue multiple: true options: - - "Running locally with Docker" + - "Running locally with Docker (docker compose)" + - "Running locally with Docker (devcontainer)" - "Running locally without Docker" - "Deployed site" validations: diff --git a/.github/ISSUE_TEMPLATE/2_feature_request.yml b/.github/ISSUE_TEMPLATE/2_feature_request.yml index 36c2180..6934f60 100644 --- a/.github/ISSUE_TEMPLATE/2_feature_request.yml +++ b/.github/ISSUE_TEMPLATE/2_feature_request.yml @@ -7,8 +7,8 @@ body: 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), + If it's a question about how al-folio works, have a look at our [documentation](https://github.com/alshedivat/al-folio/blob/main/README.md), + [frequently asked questions](https://github.com/alshedivat/al-folio/blob/main/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). @@ -20,7 +20,7 @@ body: 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. + - label: I read through [FAQ](https://github.com/alshedivat/al-folio/blob/main/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 diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 5da20df..e851001 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -4,5 +4,5 @@ contact_links: 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 + url: https://github.com/alshedivat/al-folio/blob/main/README.md about: Please consult the documentation before opening any issues! diff --git a/.github/workflows/axe.yml b/.github/workflows/axe.yml index a745c7d..afa3c92 100644 --- a/.github/workflows/axe.yml +++ b/.github/workflows/axe.yml @@ -43,9 +43,10 @@ jobs: } - name: Install and Build πŸ”§ run: | + sudo apt-get update && sudo apt-get install -y imagemagick pip3 install --upgrade jupyter export JEKYLL_ENV=production - bundle exec jekyll build --lsi + bundle exec jekyll build - name: Purge unused CSS 🧹 run: | npm install -g purgecss diff --git a/.github/workflows/broken-links-site.yml b/.github/workflows/broken-links-site.yml index fae797c..b6b9e2d 100644 --- a/.github/workflows/broken-links-site.yml +++ b/.github/workflows/broken-links-site.yml @@ -31,9 +31,10 @@ jobs: } - name: Install and Build πŸ”§ run: | + sudo apt-get update && sudo apt-get install -y imagemagick pip3 install --upgrade jupyter export JEKYLL_ENV=production - bundle exec jekyll build --lsi + bundle exec jekyll build - name: Purge unused CSS 🧹 run: | npm install -g purgecss diff --git a/.github/workflows/broken-links.yml b/.github/workflows/broken-links.yml index 36d1d6e..0c35d19 100644 --- a/.github/workflows/broken-links.yml +++ b/.github/workflows/broken-links.yml @@ -45,8 +45,8 @@ jobs: - uses: actions/checkout@v4 - name: Link Checker πŸ”— - uses: lycheeverse/lychee-action@v1.9.0 + uses: lycheeverse/lychee-action@v2.1.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' + args: --user-agent 'curl/7.54' --exclude-path README.md --exclude-path _pages/404.md --exclude-path _pages/blog.md --exclude-path _posts/2018-12-22-distill.md --exclude-path _posts/2023-04-24-videos.md --verbose --no-progress './**/*.md' './**/*.html' diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..d09a3b5 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,94 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL Advanced" + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + schedule: + - cron: "45 4 * * 3" + +jobs: + analyze: + name: Analyze (${{ matrix.language }}) + # Runner size impacts CodeQL analysis time. To learn more, please see: + # - https://gh.io/recommended-hardware-resources-for-running-codeql + # - https://gh.io/supported-runners-and-hardware-resources + # - https://gh.io/using-larger-runners (GitHub.com only) + # Consider using larger runners or machines with greater resources for possible analysis time improvements. + runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} + permissions: + # required for all workflows + security-events: write + + # required to fetch internal or private CodeQL packs + packages: read + + # only required for workflows in private repositories + actions: read + contents: read + + strategy: + fail-fast: false + matrix: + include: + - language: javascript-typescript + build-mode: none + - language: ruby + build-mode: none + # CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' + # Use `c-cpp` to analyze code written in C, C++ or both + # Use 'java-kotlin' to analyze code written in Java, Kotlin or both + # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both + # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, + # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. + # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how + # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + build-mode: ${{ matrix.build-mode }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + # If the analyze step fails for one of the languages you are analyzing with + # "We were unable to automatically build your code", modify the matrix above + # to set the build mode to "manual" for that language. Then modify this step + # to build your code. + # ℹ️ Command-line programs to run using the OS shell. + # πŸ“š See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + - if: matrix.build-mode == 'manual' + shell: bash + run: | + echo 'If you are using a "manual" build mode for one or more of the' \ + 'languages you are analyzing, replace this with the commands to build' \ + 'your code, for example:' + echo ' make bootstrap' + echo ' make release' + exit 1 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/deploy-docker-tag.yml b/.github/workflows/deploy-docker-tag.yml index fadfff6..d7710e2 100644 --- a/.github/workflows/deploy-docker-tag.yml +++ b/.github/workflows/deploy-docker-tag.yml @@ -5,6 +5,8 @@ on: tags: - "v*" paths: + - ".github/workflows/deploy-docker-tag.yml" + - ".github/workflows/deploy-image.yml" - "bin/entry_point.sh" - "Dockerfile" - "Gemfile" diff --git a/.github/workflows/deploy-image.yml b/.github/workflows/deploy-image.yml index 133f22d..7ddd8f6 100644 --- a/.github/workflows/deploy-image.yml +++ b/.github/workflows/deploy-image.yml @@ -6,6 +6,7 @@ on: - master - main paths: + - ".github/workflows/deploy-image.yml" - "bin/entry_point.sh" - "Dockerfile" - "Gemfile" diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 4979e3e..7046747 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -7,11 +7,15 @@ on: - main paths: - "assets/**" + - "_sass/**" + - "**.bib" - "**.html" - "**.js" - "**.liquid" - "**/*.md" - "**.yml" + - "Gemfile" + - "Gemfile.lock" - "!.github/workflows/axe.yml" - "!.github/workflows/broken-links.yml" - "!.github/workflows/deploy-docker-tag.yml" @@ -31,11 +35,15 @@ on: - main paths: - "assets/**" + - "_sass/**" + - "**.bib" - "**.html" - "**.js" - "**.liquid" - "**/*.md" - "**.yml" + - "Gemfile" + - "Gemfile.lock" - "!.github/workflows/axe.yml" - "!.github/workflows/broken-links.yml" - "!.github/workflows/deploy-docker-tag.yml" @@ -61,11 +69,16 @@ jobs: steps: - name: Checkout πŸ›ŽοΈ uses: actions/checkout@v4 - - name: Setup Ruby + - name: Setup Ruby πŸ’Ž uses: ruby/setup-ruby@v1 with: - ruby-version: "3.2.2" + ruby-version: "3.3.5" bundler-cache: true + - name: Setup Python 🐍 + uses: actions/setup-python@v5 + with: + python-version: "3.13" + cache: "pip" # caching pip dependencies - name: Update _config.yml βš™οΈ uses: fjogeleit/yaml-update-action@main with: @@ -75,9 +88,10 @@ jobs: value: ${{ github.repository }} - name: Install and Build πŸ”§ run: | - pip3 install --upgrade jupyter + sudo apt-get update && sudo apt-get install -y imagemagick + pip3 install --upgrade nbconvert export JEKYLL_ENV=production - bundle exec jekyll build --lsi + bundle exec jekyll build - name: Purge unused CSS 🧹 run: | npm install -g purgecss diff --git a/.github/workflows/docker-slim.yml b/.github/workflows/docker-slim.yml index 8c8cf71..3a67d32 100644 --- a/.github/workflows/docker-slim.yml +++ b/.github/workflows/docker-slim.yml @@ -2,6 +2,12 @@ name: Docker Slim #Only trigger, when the build workflow succeeded on: + push: + branches: + - master + - main + paths: + - ".github/workflows/docker-slim.yml" workflow_run: workflows: ["Docker Image CI"] types: @@ -15,7 +21,7 @@ on: 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' + if: ${{ github.event.workflow_run.conclusion == 'success' && github.repository_owner == 'alshedivat' }} runs-on: ubuntu-latest defaults: run: @@ -37,7 +43,7 @@ jobs: 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 + - uses: kitabisa/docker-slim-action@v1.1.1 env: DSLIM_PULL: true DSLIM_COMPOSE_FILE: ${{ github.workspace }}/docker-compose.yml diff --git a/.github/workflows/lighthouse-badger.yml b/.github/workflows/lighthouse-badger.yml index 182517c..addec2d 100644 --- a/.github/workflows/lighthouse-badger.yml +++ b/.github/workflows/lighthouse-badger.yml @@ -12,10 +12,9 @@ name: "Lighthouse Badger" # DEFINE YOUR INPUTS AND TRIGGERS IN THE FOLLOWING ######################################################################## -# INPUTS as environmental variables (env) for not manually triggered workflows +# INPUTS as Secrets (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" @@ -50,7 +49,7 @@ jobs: - uses: actions/checkout@v4 with: repository: ${{ env.REPOSITORY }} - token: ${{ secrets[github.event.inputs.token_name] || secrets[env.TOKEN_NAME] }} + token: ${{ secrets.LIGHTHOUSE_BADGER_TOKEN }} ref: ${{ env.BRANCH }} - uses: actions/checkout@v4 with: diff --git a/.github/workflows/prettier-html.yml b/.github/workflows/prettier-html.yml new file mode 100644 index 0000000..3dc4326 --- /dev/null +++ b/.github/workflows/prettier-html.yml @@ -0,0 +1,36 @@ +name: Prettify gh-pages + +on: + workflow_dispatch: + +jobs: + format: + runs-on: ubuntu-latest + steps: + - name: Checkout gh-pages branch + uses: actions/checkout@v4 + with: + ref: gh-pages + + - name: Find and Remove Tags + run: find . -type f -name "*.html" -exec sed -i 's/<\/source>//g' {} + + + - name: Set up Node.js + uses: actions/setup-node@v4 + + - name: Install Prettier + run: npm install -g prettier + + - name: Check for Prettier + run: npx prettier --version || echo "Prettier not found" + + - name: Run Prettier on HTML files + run: npx prettier --write '**/*.html' + + - name: Commit and push changes + run: | + git config user.name "github-actions" + git config user.email "actions@github.com" + git add . + git commit -m "Formatted HTML files" || echo "No changes to commit" + git push diff --git a/.github/workflows/schedule-posts.txt b/.github/workflows/schedule-posts.txt new file mode 100644 index 0000000..57728bc --- /dev/null +++ b/.github/workflows/schedule-posts.txt @@ -0,0 +1,39 @@ +name: Publish posts scheduled for today + +on: + schedule: + # Run every day at 23:30 UTC or manually run + - cron: "30 23 * * *" + workflow_dispatch: + +jobs: + publish_scheduled: + runs-on: ubuntu-latest + steps: + - name: Checkout main branch + uses: actions/checkout@v4 + with: + ref: main + + - name: Get the date for today + id: date + run: echo "TODAY=$(date +'%Y-%m-%d')" >> $GITHUB_ENV + + - name: Check for scheduled posts and move to posts + run: | + echo "Today is $TODAY" + shopt -s nullglob + for file in _scheduled/${TODAY}-*.md; do + echo "Found scheduled: $file" + mv "$file" "_posts/" + echo "Moved $file to _posts/" + done + + - name: Commit and push changes + run: | + git config user.name "github-actions" + git config user.email "actions@github.com" + git add _posts/ + git add _scheduled/ + git commit -m "Posted Scheduled Drafts on $TODAY" || echo "No changes to commit" + git push diff --git a/.gitignore b/.gitignore index 5cbbca2..088888e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,7 @@ _site .ruby-version .tweet-cache Gemfile.lock +assets/libs/ node_modules/ -vendor \ No newline at end of file +vendor +.idea diff --git a/.lycheeignore b/.lycheeignore new file mode 100644 index 0000000..b736879 --- /dev/null +++ b/.lycheeignore @@ -0,0 +1,2 @@ +linkedin.com +reddit.com \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index f917ab0..2929bf4 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,6 +1,12 @@ +**/*.map **/*.min.css **/*.min.js assets/css/main.scss +assets/js/distillpub/template.v2.js +assets/js/search/*.js assets/plotly/demo.html lighthouse_results/** _posts/2015-10-20-math.md +_sass/font-awesome/*.scss +_sass/tabler-icons/*.scss +_scripts/search.liquid.js diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1845074..c84e9d6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,6 +8,8 @@ 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. +Note that since [#2048](https://github.com/alshedivat/al-folio/pull/2048) al-folio uses the [prettier formatter](https://prettier.io/) for its code, meaning all new submitted code must conform to its standard. If you don't have `prettier` installed for your setup and the `prettier` code check fails when submitting a PR, you can check the referred failed action in our repo. In that action there will be an artifact with an HTML diff showing the needed changes. + ## Issues We use GitHub issues to track bugs and feature requests. diff --git a/CUSTOMIZE.md b/CUSTOMIZE.md index ffe37f0..61a02b8 100644 --- a/CUSTOMIZE.md +++ b/CUSTOMIZE.md @@ -16,7 +16,8 @@ The project is structured as follows, focusing on the main components that you w β”œβ”€β”€ πŸ“„ _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 +β”‚Β Β  β”œβ”€β”€ πŸ“„ repositories.yml: users and repositories info in YAML format +β”‚Β Β  └── πŸ“„ socials.yml: your social media and contact 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 @@ -40,7 +41,7 @@ The configuration file [\_config.yml](_config.yml) contains the main configurati > 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. +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` 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 @@ -54,7 +55,7 @@ The user and repository information is defined in [\_data/repositories.yml](_dat ## 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. +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 by changing the [layout](https://jekyllrb.com/docs/layouts/) attribute in the [frontmatter](https://jekyllrb.com/docs/front-matter/) of the Markdown file, and also the path to access it by changing the [permalink](https://jekyllrb.com/docs/permalinks/) attribute. You can also add new layouts in the [\_layouts](_layouts/) directory if you feel the need for it. ## Creating new blog posts @@ -80,7 +81,7 @@ You can easily create your own collections, apps, short stories, courses, or wha 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`. +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`, `annotation`, `arxiv`, `bibtex_show`, `blog`, `code`, `dimensions`, `doi`, `eprint`, `html`, `isbn`, `pdf`, `pmid`, `poster`, `slides`, `supp`, `video`, and `website`. ### Author annotation @@ -92,7 +93,7 @@ scholar: 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, +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, with the last names lower cased and without accents as the key: ```yaml "adams": @@ -115,7 +116,7 @@ If the entry matches one form of the last names and the first names, it will be 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. +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. Note that the keys **MUST BE** lower cased and **MUST NOT** contain accents. This is because the keys are used to match the last names in the BibTeX entries, considering possible variations. ### Buttons (through custom bibtex keywords) @@ -124,6 +125,7 @@ There are several custom bibtex keywords that you can use to affect how the entr - `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) +- `annotation`: Adds a popover info message to the end of the author list that can potentially be used to clarify superscripts. HTML is allowed. - `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 @@ -144,4 +146,141 @@ A variety of beautiful theme colors have been selected for you to choose from. T ## 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. +You can add your social media links by adding the specified information in the [\_data/socials.yml](_data/socials.yml) file. This information will appear at the bottom of the `About` page and in the search results by default, but this could be changed to appear at the header of the page by setting `enable_navbar_social: true` and doesn't appear in the search by setting `socials_in_search: false`, both in [\_config.yml](_config.yml). + +## Adding a newsletter + +You can add a newsletter subscription form by adding the specified information at the `newsletter` section in the [\_config.yml](_config.yml) file. To set up a newsletter, you can use a service like [Loops.so](https://loops.so/), which is the current supported solution. Once you have set up your newsletter, you can add the form [endpoint](https://loops.so/docs/forms/custom-form) to the `endpoint` field in the `newsletter` section of the [\_config.yml](_config.yml) file. + +Depending on your specified footer behavior, the sign up form either will appear at the bottom of the `About` page and at the bottom of blogposts if `related_posts` are enabled, or in the footer at the bottom of each page. + +## Removing content + +Since this template have a lot of content, you may want to remove some of it. The easiest way to achieve this and avoid merge conflicts when updating your code (as [pointed by CheariX ](https://github.com/alshedivat/al-folio/pull/2933#issuecomment-2571271117)) is to add the unwanted files to the `excludes` section in your `_config.yml` file instead of actually deleting them, for example: + +```yml +excludes: + - _news/announcement_*.md + - _pages/blog.md + - _posts/ + - _projects/?_project.md + - assets/jupyter/blog.ipynb +``` + +Here is a list of the main components that you may want to delete, and how to do it. Don't forget if you delete a page to update the `nav_order` of the remaining pages. + +### Removing the blog page + +To remove the blog, you have to: + +- delete [\_posts](_posts/) directory +- delete blog page [\_pages/blog.md](_pages/blog.md) +- remove reference to blog page in our [\_pages/dropdown.md](_pages/dropdown.md) +- remove the `latest_posts` part in [\_pages/about.md](_pages/about.md) +- remove the `Blog` section in the [\_config.yml](_config.yml) file and the related parts, like the `jekyll-archives` + +You can also: + +- delete [\_includes/latest_posts.liquid](_includes/latest_posts.liquid) +- delete [\_includes/related_posts.liquid](_includes/related_posts.liquid) +- delete [\_layouts/archive-category.liquid](_layouts/archive-category.liquid) +- delete [\_layouts/archive-tag.liquid](_layouts/archive-tag.liquid) +- delete [\_layouts/archive-year.liquid](_layouts/archive-year.liquid) +- delete [\_plugins/external-posts.rb](_plugins/external-posts.rb) +- remove the `jekyll-archives` gem from the [Gemfile](Gemfile) and the `plugins` section in [\_config.yml](_config.yml) +- remove the `classifier-reborn` gem from the [Gemfile](Gemfile) + +### Removing the news section + +To remove the news section, you can: + +- delete the [\_news](_news/) directory +- delete the file [\_includes/news.liquid](_includes/news.liquid) and the references to it in the [\_pages/about.md](_pages/about.md) +- remove the `announcements` part in [\_pages/about.md](_pages/about.md) +- remove the news part in the `Collections` section in the [\_config.yml](_config.yml) file + +### Removing the projects page + +To remove the projects, you can: + +- delete the [\_projects](_projects/) directory +- delete the projects page [\_pages/projects.md](_pages/projects.md) +- remove reference to projects page in our [\_pages/dropdown.md](_pages/dropdown.md) +- remove projects part in the `Collections` section in the [\_config.yml](_config.yml) file + +You can also: + +- delete [\_includes/projects_horizontal.liquid](_includes/projects_horizontal.liquid) +- delete [\_includes/projects.liquid](_includes/projects.liquid) + +### Removing the publications page + +To remove the publications, you can: + +- delete the [\_bibliography](_bibliography/) directory +- delete the publications page [\_pages/publications.md](_pages/publications.md) +- remove reference to publications page in our [\_pages/dropdown.md](_pages/dropdown.md) +- remove `Jekyll Scholar` section in the [\_config.yml](_config.yml) file + +You can also: + +- delete the [\_layouts/bib.liquid](_layouts/bib.liquid) file +- delete [\_includes/bib_search.liquid](_includes/bib_search.liquid) +- delete [\_includes/citation.liquid](_includes/citation.liquid) +- delete [\_includes/selected_papers.liquid](_includes/selected_papers.liquid) +- delete [\_plugins/google-scholar-citations.rb](_plugins/google-scholar-citations.rb) +- delete [\_plugins/hide-custom-bibtex.rb](_plugins/hide-custom-bibtex.rb) +- delete [\_plugins/inspirehep-citations.rb](_plugins/inspirehep-citations.rb) +- remove the `jekyll-scholar` gem from the [Gemfile](Gemfile) and the `plugins` section in [\_config.yml](_config.yml) + +### Removing the repositories page + +To remove the repositories, you can: + +- delete the repositories page [\_pages/repositories.md](_pages/repositories.md) +- delete [\_includes/repository/](_includes/repository/) directory + +## Adding Token for Lighthouse Badger + +To add secrets for [lighthouse-badger](https://github.com/alshedivat/al-folio/actions/workflows/lighthouse-badger.yml), create a [personal access token (PAT)](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. The [lighthouse-badger documentation](https://github.com/MyActionWay/lighthouse-badger-workflows#lighthouse-badger-easyyml) specifies using an environment variable, but using it as a secret is more secure and appropriate for a PAT. + +Also In case you face the error: "Input required and not supplied: token" in the Lighthouse Badger action, this solution resolves it. + +### Personal Access Token (fine-grained) Permissions for Lighthouse Badger: + +- **contents**: access: read and write +- **metadata**: access: read-only + +Due to the necessary permissions (PAT and others mentioned above), it is recommended to use it as a secret rather than an environment variable. + +## Customizing fonts, spacing, and more + +You can customize the fonts, spacing, and more by editing [\_sass/\_base.scss](_sass/_base.scss). The easiest way to try in advance the changes is by using [chrome dev tools](https://developer.chrome.com/docs/devtools/css) or [firefox dev tools](https://firefox-source-docs.mozilla.org/devtools-user/). In there you can click in the element and find all the attributes that are set for that element and where are they. For more information on how to use this, check [chrome](https://developer.chrome.com/docs/devtools/css) and [firefox](https://firefox-source-docs.mozilla.org/devtools-user/page_inspector/how_to/examine_and_edit_css/index.html) how-tos, and [this tutorial](https://www.youtube.com/watch?v=l0sgiwJyEu4). + +## Scheduled Posts + +`al-folio` contains a workflow which automatically publishes all posts scheduled at a specific day, at the end of the day (23:30). By default the action is disabled, and to enable it you need to go to `.github/workflows/` and find the file called `schedule-posts.txt`. This is the workflow file. For GitHub to recognize it as one (or to enable the action), you need to rename it to `schedule-posts.yml`. + +In order to use this you need to save all of your "Completed" blog posts which are scheduled to be uploaded on a specific date, in a folder named `_scheduled/` in the root directory. + +> Incomplete posts should be saved in `_drafts/` + +### Name Format + +In this folder you need to store your file in the same format as you would in `_posts/` + +> Example file name: `2024-08-26-This file will be uploaded on 26 August.md` + +### Important Notes + +- The scheduler uploads posts everyday at πŸ•› 23:30 UTC +- It will only upload posts at 23:30 UTC of their respective scheduled days, It's not uploaded in 23:59 in case there are a lot of files as the scheduler must finish before 00:00 +- It will only upload files which follow the pattern `yyyy-mm-dd-title.md` + - This means that only markdown files will be posted + - It means that any markdown which do not follow this pattern will not be posted +- The scheduler works by moving posts from the `_scheduled/` directory to `_posts/`, it will not post to folders like `_projects/` or `_news/` +- The date in the name of the file is the day that file will be uploaded on + - `2024-08-27-file1.md` will not be posted before or after 27-August-2024 (Scheduler only works for posts scheduled on the present day) + - `2025-08-27-file2.md` will be posted exactly on 27-August-2025 + - `File3.md` will not be posted at all + - `2026-02-31-file4.md` is supposed to be posted on 31-February-2026, but there is no 31st in February hence this file will never be posted either diff --git a/Dockerfile b/Dockerfile index e55a99f..99109cd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,41 +1,76 @@ -FROM ubuntu:latest +FROM ruby:slim + +# uncomment these if you are having this issue with the build: +# /usr/local/bundle/gems/jekyll-4.3.4/lib/jekyll/site.rb:509:in `initialize': Permission denied @ rb_sysopen - /srv/jekyll/.jekyll-cache/.gitignore (Errno::EACCES) +# ARG GROUPID=901 +# ARG GROUPNAME=ruby +# ARG USERID=901 +# ARG USERNAME=jekyll + ENV DEBIAN_FRONTEND noninteractive -Label MAINTAINER Amir Pourmand +LABEL authors="Amir Pourmand,George AraΓΊjo" \ + description="Docker image for al-folio academic template" \ + maintainer="Amir Pourmand" + +# uncomment these if you are having this issue with the build: +# /usr/local/bundle/gems/jekyll-4.3.4/lib/jekyll/site.rb:509:in `initialize': Permission denied @ rb_sysopen - /srv/jekyll/.jekyll-cache/.gitignore (Errno::EACCES) +# add a non-root user to the image with a specific group and user id to avoid permission issues +# RUN groupadd -r $GROUPNAME -g $GROUPID && \ +# useradd -u $USERID -m -g $GROUPNAME $USERNAME -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/* +# install system dependencies +RUN apt-get update -y && \ + apt-get install -y --no-install-recommends \ + build-essential \ + curl \ + git \ + imagemagick \ + inotify-tools \ + locales \ + nodejs \ + procps \ + python3-pip \ + zlib1g-dev && \ + pip --no-cache-dir install --upgrade --break-system-packages nbconvert +# clean up +RUN apt-get clean && \ + apt-get autoremove && \ + rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/* +# set the locale RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \ locale-gen - -ENV LANG=en_US.UTF-8 \ +# set environment variables +ENV EXECJS_RUNTIME=Node \ + JEKYLL_ENV=production \ + 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 + LC_ALL=en_US.UTF-8 +# create a directory for the jekyll site RUN mkdir /srv/jekyll +# copy the Gemfile and Gemfile.lock to the image +ADD Gemfile.lock /srv/jekyll ADD Gemfile /srv/jekyll +# set the working directory WORKDIR /srv/jekyll +# install jekyll and dependencies +RUN gem install --no-document jekyll bundler 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 +# uncomment this if you are having this issue with the build: +# /usr/local/bundle/gems/jekyll-4.3.4/lib/jekyll/site.rb:509:in `initialize': Permission denied @ rb_sysopen - /srv/jekyll/.jekyll-cache/.gitignore (Errno::EACCES) +# set the ownership of the jekyll site directory to the non-root user +# USER $USERNAME + CMD ["/tmp/entry_point.sh"] diff --git a/FAQ.md b/FAQ.md index 694e422..c3d345d 100644 --- a/FAQ.md +++ b/FAQ.md @@ -2,57 +2,95 @@ 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) +- [Frequently Asked Questions](#frequently-asked-questions) + - [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 are not loaded properly). How do I fix that?](#my-webpage-works-locally-but-after-deploying-it-is-not-displayed-correctly-css-and-js-are-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 main 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-main-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) + - [How can I update Academicons version on the template](#how-can-i-update-academicons-version-on-the-template) + - [How can I update Font Awesome version on the template](#how-can-i-update-font-awesome-version-on-the-template) + - [How can I update Tabler Icons version on the template](#how-can-i-update-tabler-icons-version-on-the-template) + - [What do all these GitHub actions/workflows mean?](#what-do-all-these-github-actionsworkflows-mean) + - [How can I use Google Search Console ID on the template?](#how-can-i-use-google-search-console-id-on-the-template) --- -#### 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. 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? +--- + +### 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).) +You need to add `CNAME` file to the `main` 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? +### 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? +--- + +### My webpage works locally. But after deploying, it is not displayed correctly (CSS and JS are not loaded properly). How do I fix that? + +If the website does not load the theme, the layout looks weird, and all links are broken, being the main page displayed this way: -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`. 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` **empty** (do **NOT** delete it). 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. For this, you can: + +- press [Shift + F5 on Chromium-based](https://support.google.com/chrome/answer/157179#zippy=%2Cwebpage-shortcuts) or [Ctrl + F5 on Firefox-based](https://support.mozilla.org/en-US/kb/keyboard-shortcuts-perform-firefox-tasks-quickly) browsers to reload the page ignoring cached content +- clean your browser history +- simply try it in a private session, here's how to do it in [Chrome](https://support.google.com/chrome/answer/95464) and [Firefox](https://support.mozilla.org/en-US/kb/private-browsing-use-firefox-without-history) + +--- + +### 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). +### My site doesn't 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? +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...` or `sqrt': Numerical argument is out of domain - "sqrt"`, 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 setting the `lsi` flag to `false` in `_config.yml`. 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? +--- + +### 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? +--- + +### My code runs fine locally, but when I create a commit and submit it, it fails with `prettier code formatter workflow run failed for main 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). +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](https://prettier.io/docs/en/). If you want to ensure your code is compliant with `Prettier`, you have a few options: -#### 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? +- if you are running locally with `Docker` and using [development containers](https://github.com/alshedivat/al-folio/blob/main/INSTALL.md#local-setup-with-development-containers), `Prettier` is already included +- if you don't use `Docker`, it is simple to integrate it with your preferred IDE using an [extension](https://prettier.io/docs/en/editors) +- if you want to run it manually, you can follow the first 2 steps in [this tutorial](https://george-gca.github.io/blog/2023/slidev_for_non_web_devs/) (`Installing node version manager (nvm)` and `Installing Node (latest version)`), then, install it using `npm install prettier` inside the project directory, or install it globally on your computer using `npm install -g prettier`. To run `Prettier` on your current directory use `npx prettier . --write`. + +You can also disable it for your repo. For this, just delete the file [.github/workflows/prettier.yml](https://github.com/alshedivat/al-folio/blob/main/.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: @@ -73,6 +111,57 @@ If that's the case, you are using deprecated libraries/commands. This happens be 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? +--- + +### 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. + +--- + +### How can I update Academicons version on the template + +To update the Academicons version, you need to download the latest release from the [Academicons website](https://jpswalsh.github.io/academicons/). After downloading, extract the zip file and copy the files `academicons.ttf` and `academicons.woff` from the `fonts/` directory to `assets/fonts/` and the file `academicons.min.css` from the `css/` directory to `assets/css/`. + +--- + +### How can I update Font Awesome version on the template + +To update the Font Awesome version, you need to download the latest release "for the web" from the [Font Awesome website](https://fontawesome.com/download). After downloading, extract the zip file and copy the `scss/` directory content to `_sass/font-awesome/` and the `webfonts/` content to `assets/webfonts/`. + +--- + +### How can I update Tabler Icons version on the template + +To update the Tabler Icons version, you need to download the latest release from the [Tabler Icons website](https://tabler.io/icons). After downloading, extract the zip file and copy the files `tabler-icons-filled.scss`, `tabler-icons-outline.scss`, and `tabler-icons.scss` from the `webfont/` directory to `_sass/tabler-icons/`, and all the files from `webfont/fonts/` to `assets/fonts/`. + +--- + +### What do all these GitHub actions/workflows mean? + +GitHub actions are a way to automate tasks in the repository. They are defined in `.github/workflows/` directory. Each file in this directory is a workflow. Workflows are made up of one or more jobs, and each job runs on a virtual machine hosted by GitHub. You can see the status of the workflows in the `Actions` tab of your repository. For more information, check the [GitHub Actions documentation](https://docs.github.com/en/actions). + +Currently we have the following workflows: + +- `axe.yml`: does some accessibility testing in your site. It uses the [axe cli](https://github.com/dequelabs/axe-core-npm/tree/develop/packages/cli) tool with a chrome driver to render the webpage and allow the analysis. Must be run manually, since fixing some of the issues is not straightforward +- `broken-links-site.yml`: checks for broken links in your built website with the [lychee-action](https://github.com/lycheeverse/lychee-action) +- `broken-links.yml`: checks for broken links in your repository with the [lychee-action](https://github.com/lycheeverse/lychee-action) +- `deploy-docker-tag.yml`: adds some metadata to the docker image and pushes it to Docker Hub +- `deploy-image.yml`: deploys a new docker image with the latest changes to Docker Hub +- `deploy.yml`: deploys the website to GitHub Pages +- `docker-slim.yml`: deploys a smaller version of the docker image to Docker Hub with the [docker-slim-action](https://github.com/kitabisa/docker-slim-action) +- `lighthouse-badger.yml`: runs a [lighthouse](https://github.com/GoogleChrome/lighthouse) test for your site with the [lighthouse-badger-action](https://github.com/MyActionWay/lighthouse-badger-action), saving the results in the repository for easy inspecting, as can be seen [here](https://github.com/alshedivat/al-folio?tab=readme-ov-file#lighthouse-pagespeed-insights). For more information on how to enable this workflow, check our [FAQ question about it](https://github.com/alshedivat/al-folio/blob/main/FAQ.md#when-i-manually-run-the-lighthouse-badger-workflow-it-fails-with-error-input-required-and-not-supplied-token-how-do-i-fix-that) +- `prettier-comment-on-pr.yml`: not working. For now, this action is disabled. It was supposed to run prettier on the PRs and comment on them with the changes needed. For more information, check [issue 2115](https://github.com/alshedivat/al-folio/issues/2115) +- `prettier.yml`: runs [prettier](https://prettier.io/) on the code to ensure it is well formatted. For more information, check our [FAQ question about it](https://github.com/alshedivat/al-folio/blob/main/FAQ.md#my-code-runs-fine-locally-but-when-i-create-a-commit-and-submit-it-it-fails-with-prettier-code-formatter-workflow-run-failed-for-main-branch-how-do-i-fix-that) + +--- + +### How can I use Google Search Console ID on the template? + +In the configuration file `_config.yml` the tag `google-site-verification` should be updated to use this functionality. Here is how you can proceed, + +- Generate your HTML tag by following [https://support.google.com/webmasters/answer/9008080?hl=en#meta_tag_verification&zippy=%2Chtml-tag](https://support.google.com/webmasters/answer/9008080?hl=en#meta_tag_verification&zippy=%2Chtml-tag) with URL prefix option. +- In the verify ownership option choose HTML tag and copy the tag contents which should look like ``. +- The string against `content` is the Google Search Console ID that can be used in the template. e.g. `google-site-verification: GoogleSearchConsoleID`. Now set the property `enable_google_verification: true`. + +It looks like the Domain type property in the Google Search Console to verify the ownership of all URLs across all subdomains with GitHub Pages does not work. diff --git a/Gemfile b/Gemfile index be54585..c9a2706 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,9 @@ source 'https://rubygems.org' + +gem 'jekyll' + +# Core plugins that directly affect site building group :jekyll_plugins do - gem 'classifier-reborn' - gem 'jekyll' gem 'jekyll-archives' gem 'jekyll-email-protect' gem 'jekyll-feed' @@ -11,16 +13,26 @@ group :jekyll_plugins do gem 'jekyll-link-attributes' gem 'jekyll-minifier' gem 'jekyll-paginate-v2' + gem 'jekyll-regex-replace' gem 'jekyll-scholar' gem 'jekyll-sitemap' + gem 'jekyll-tabs' + gem 'jekyll-terser', :git => "https://github.com/RobertoJBeltran/jekyll-terser.git" gem 'jekyll-toc' gem 'jekyll-twitter-plugin' gem 'jemoji' - gem 'mini_racer' - gem 'unicode_utils' - gem 'webrick' + + gem 'classifier-reborn' # used for content categorization during the build end + +# Gems for development or external data fetching (outside :jekyll_plugins) group :other_plugins do + gem 'css_parser' gem 'feedjira' gem 'httparty' + gem 'observer' # used by jekyll-scholar + gem 'ostruct' # used by jekyll-twitter-plugin + gem 'terser' # used by jekyll-terser + # gem 'unicode_utils' -- should be already installed by jekyll + # gem 'webrick' -- should be already installed by jekyll end diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..98c191d --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,285 @@ +GIT + remote: https://github.com/RobertoJBeltran/jekyll-terser.git + revision: 2f737004fe4732b92021c84e4de71e6a8585ff01 + specs: + jekyll-terser (0.2.2) + jekyll (>= 0.10.0) + terser (>= 1.0.0) + +GEM + remote: https://rubygems.org/ + specs: + activesupport (8.0.1) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + logger (>= 1.4.2) + minitest (>= 5.1) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + uri (>= 0.13.1) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + base64 (0.2.0) + benchmark (0.4.0) + bibtex-ruby (6.1.0) + latex-decode (~> 0.0) + racc (~> 1.7) + bigdecimal (3.1.9) + citeproc (1.0.10) + namae (~> 1.0) + citeproc-ruby (1.1.14) + citeproc (~> 1.0, >= 1.0.9) + csl (~> 1.6) + classifier-reborn (2.3.0) + fast-stemmer (~> 1.0) + matrix (~> 0.4) + colorator (1.1.0) + concurrent-ruby (1.3.5) + connection_pool (2.5.0) + crass (1.0.6) + csl (1.6.0) + namae (~> 1.0) + rexml + csl-styles (1.0.1.11) + csl (~> 1.0) + css_parser (1.21.0) + addressable + cssminify2 (2.0.1) + csv (3.3.2) + deep_merge (1.2.2) + drb (2.2.1) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + eventmachine (1.2.7) + execjs (2.10.0) + fast-stemmer (1.0.2) + feedjira (3.2.4) + loofah (>= 2.3.1, < 3) + sax-machine (>= 1.0, < 2) + ffi (1.17.1-aarch64-linux-gnu) + ffi (1.17.1-aarch64-linux-musl) + ffi (1.17.1-arm-linux-gnu) + ffi (1.17.1-arm-linux-musl) + ffi (1.17.1-arm64-darwin) + ffi (1.17.1-x86_64-darwin) + ffi (1.17.1-x86_64-linux-gnu) + ffi (1.17.1-x86_64-linux-musl) + forwardable-extended (2.6.0) + gemoji (4.1.0) + google-protobuf (4.29.3) + bigdecimal + rake (>= 13) + google-protobuf (4.29.3-aarch64-linux) + bigdecimal + rake (>= 13) + google-protobuf (4.29.3-arm64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.29.3-x86_64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.29.3-x86_64-linux) + bigdecimal + rake (>= 13) + html-pipeline (2.14.3) + activesupport (>= 2) + nokogiri (>= 1.4) + htmlcompressor (0.4.0) + http_parser.rb (0.8.0) + httparty (0.22.0) + csv + mini_mime (>= 1.0.0) + multi_xml (>= 0.5.2) + i18n (1.14.6) + concurrent-ruby (~> 1.0) + jekyll (4.3.4) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) + jekyll-watch (~> 2.0) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (>= 0.3.6, < 0.5) + pathutil (~> 0.9) + rouge (>= 3.0, < 5.0) + safe_yaml (~> 1.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-archives (2.3.0) + jekyll (>= 3.6, < 5.0) + jekyll-email-protect (1.1.0) + jekyll-feed (0.17.0) + jekyll (>= 3.7, < 5.0) + jekyll-get-json (1.0.0) + deep_merge (~> 1.2) + jekyll (>= 3.0) + jekyll-imagemagick (1.4.0) + jekyll (>= 3.4) + jekyll-jupyter-notebook (0.0.6) + jekyll + jekyll-link-attributes (1.0.1) + jekyll-minifier (0.1.10) + cssminify2 (~> 2.0) + htmlcompressor (~> 0.4) + jekyll (>= 3.5) + json-minify (~> 0.0.3) + uglifier (~> 4.1) + jekyll-paginate-v2 (3.0.0) + jekyll (>= 3.0, < 5.0) + jekyll-regex-replace (1.1.0) + jekyll-sass-converter (3.0.0) + sass-embedded (~> 1.54) + jekyll-scholar (7.1.3) + bibtex-ruby (~> 6.0) + citeproc-ruby (~> 1.0) + csl-styles (~> 1.0) + jekyll (~> 4.0) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-tabs (1.2.1) + jekyll (>= 3.0, < 5.0) + jekyll-toc (0.19.0) + jekyll (>= 3.9) + nokogiri (~> 1.12) + jekyll-twitter-plugin (2.1.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + jemoji (0.13.0) + gemoji (>= 3, < 5) + html-pipeline (~> 2.2) + jekyll (>= 3.0, < 5.0) + json (2.9.1) + json-minify (0.0.3) + json (> 0) + kramdown (2.5.1) + rexml (>= 3.3.9) + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + latex-decode (0.4.0) + liquid (4.0.4) + listen (3.9.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + logger (1.6.5) + loofah (2.24.0) + crass (~> 1.0.2) + nokogiri (>= 1.12.0) + matrix (0.4.2) + mercenary (0.4.0) + mini_mime (1.1.5) + minitest (5.25.4) + multi_xml (0.7.1) + bigdecimal (~> 3.1) + namae (1.2.0) + racc (~> 1.7) + nokogiri (1.18.1-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.18.1-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.18.1-arm-linux-gnu) + racc (~> 1.4) + nokogiri (1.18.1-arm-linux-musl) + racc (~> 1.4) + nokogiri (1.18.1-arm64-darwin) + racc (~> 1.4) + nokogiri (1.18.1-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.18.1-x86_64-linux-gnu) + racc (~> 1.4) + nokogiri (1.18.1-x86_64-linux-musl) + racc (~> 1.4) + observer (0.1.2) + ostruct (0.6.1) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (6.0.1) + racc (1.8.1) + rake (13.2.1) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) + ffi (~> 1.0) + rexml (3.4.0) + rouge (4.5.1) + safe_yaml (1.0.5) + sass-embedded (1.83.4-aarch64-linux-gnu) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-aarch64-linux-musl) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-arm-linux-gnueabihf) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-arm-linux-musleabihf) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-arm64-darwin) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-x86_64-darwin) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-x86_64-linux-gnu) + google-protobuf (~> 4.29) + sass-embedded (1.83.4-x86_64-linux-musl) + google-protobuf (~> 4.29) + sax-machine (1.3.2) + securerandom (0.4.1) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + terser (1.2.4) + execjs (>= 0.3.0, < 3) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + uglifier (4.2.1) + execjs (>= 0.3.0, < 3) + unicode-display_width (2.6.0) + uri (1.0.2) + webrick (1.9.1) + +PLATFORMS + aarch64-linux + aarch64-linux-gnu + aarch64-linux-musl + arm-linux-gnu + arm-linux-gnueabihf + arm-linux-musl + arm-linux-musleabihf + arm64-darwin + x86_64-darwin + x86_64-linux + x86_64-linux-gnu + x86_64-linux-musl + +DEPENDENCIES + classifier-reborn + css_parser + feedjira + httparty + jekyll + jekyll-archives + jekyll-email-protect + jekyll-feed + jekyll-get-json + jekyll-imagemagick + jekyll-jupyter-notebook + jekyll-link-attributes + jekyll-minifier + jekyll-paginate-v2 + jekyll-regex-replace + jekyll-scholar + jekyll-sitemap + jekyll-tabs + jekyll-terser! + jekyll-toc + jekyll-twitter-plugin + jemoji + observer + ostruct + terser + +BUNDLED WITH + 2.6.2 diff --git a/INSTALL.md b/INSTALL.md index 754e5e1..03b7f8f 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,11 +1,13 @@ # Table of Contents +- [Table of Contents](#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) + - [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) + - [Local Setup with Development Containers](#local-setup-with-development-containers) + - [Local Setup (Legacy, no longer supported)](#local-setup-legacy-no-longer-supported) - [Deployment](#deployment) - [For personal and organization webpages](#for-personal-and-organization-webpages) - [For project pages](#for-project-pages) @@ -19,16 +21,15 @@ ## 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: +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 ([video tutorial here](assets/video/tutorial_al_folio.mp4)): 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: +2. In this new repository, go to [Settings -> Actions -> General -> Workflow permissions](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#configuring-the-default-github_token-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), as `baseurl:`. +4. Wait until the GitHub action with subtitle `Deploy site` finishes (check your repository **Actions** tab), which takes ~4 min. Now, in addition to the `main` 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 main). +6. Wait until the GitHub action `pages-build-deployment` finishes (check your repository **Actions** tab), which takes ~45s, 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 @@ -58,7 +59,7 @@ Note that when you run it for the first time, it will download a docker image of 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` +> Beta: You can also use the slimmed docker image with a size below 100MBs and exact same functionality. Just use `docker compose -f docker-compose-slim.yml up` ### Build your own docker image @@ -74,7 +75,12 @@ $ docker compose up --build 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) +## Local Setup with Development Containers + +`al-folio` supports [Development Containers](https://containers.dev/supporting). +For example, when you open the repository with Visual Studio Code (VSCode), it prompts you to install the necessary extension and automatically install everything necessary. + +## Local Setup (Legacy, no longer supported) 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! @@ -84,7 +90,7 @@ Assuming you have [Ruby](https://www.ruby-lang.org/en/downloads/) and [Bundler]( $ bundle install # assuming pip is your Python package manager $ pip install jupyter -$ bundle exec jekyll serve --lsi +$ bundle exec jekyll serve ``` 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. @@ -114,8 +120,8 @@ Starting version [v0.3.5](https://github.com/alshedivat/al-folio/releases/tag/v0 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). +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 `main` 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 `main`). 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. @@ -123,12 +129,32 @@ If you keep your site on another branch, open `.github/workflows/deploy.yml` **o If you need to manually re-deploy your website to GitHub pages, go to Actions, click "Deploy" in the left sidebar, then "Run workflow." +### Deploy on [Netlify](https://www.netlify.com/) + +1. [Use this template -> Create a new repository](https://github.com/new?template_name=al-folio&template_owner=alshedivat). +2. Netlify: **Add new site** -> **Import an existing project** -> **GitHub** and give Netlify access to the repository you just created. +3. Netlify: In the deploy settings + + - Set **Branch to deploy** to `main` + - **Base directory** is empty + - Set **Build command** to `sed -i "s/^\(baseurl: \).*$/baseurl:/" _config.yml && bundle exec jekyll build` + - Set **Publish directory** to `_site` + +4. Netlify: Add the following two **environment variables** + + - | Key | Value | + | -------------- | -------------------------------------------------------------------------------------- | + | `JEKYLL_ENV` | `production` | + | `RUBY_VERSION` | set to the Ruby version found in `.github/workflows/deploy.yml` (for example, `3.3.5`) | + +5. Netlify: Click **Deploy** and wait for the site to be published. If you want to use your own domain name, follow the steps in [this documentation](https://docs.netlify.com/domains-https/custom-domains/). + ### 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 +$ bundle exec jekyll build ``` which will (re-)generate the static webpage in the `_site/` folder. @@ -156,7 +182,7 @@ Firstly, from the deployment repo dir, checkout the git branch hosting your publ Then from the website sources dir (commonly your al-folio fork's clone): ```bash -$ bundle exec jekyll build --lsi --destination $HOME/repo/publishing-source +$ bundle exec jekyll build --destination $HOME/repo/publishing-source ``` This will instruct jekyll to deploy the website under `$HOME/repo/publishing-source`. @@ -176,46 +202,15 @@ In its default configuration, al-folio will copy the top-level `README.md` to th **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. +## Upgrading from a previous version -Another option is to manually update your code by following the steps below: +If you installed **al-folio** as described above, you can 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 +$ git rebase v0.13.4 ``` If you have extensively customized a previous version, it might be trickier to upgrade. diff --git a/LICENSE b/LICENSE index f2b8681..368a8aa 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2022 Maruan Al-Shedivat. +Copyright (c) 2025 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 diff --git a/README.md b/README.md index 24a267c..0e8473f 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ [![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 license](https://img.shields.io/github/license/alshedivat/al-folio?color=blue)](https://github.com/alshedivat/al-folio/blob/main/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) @@ -87,7 +87,6 @@ Feel free to add your own page(s) by sending a PR. β˜… β˜… β˜… -β˜… β˜… β˜… β˜… @@ -136,6 +135,31 @@ Feel free to add your own page(s) by sending a PR. β˜… β˜… β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… +β˜… @@ -148,6 +172,8 @@ Feel free to add your own page(s) by sending a PR. β˜… β˜… β˜… +β˜… +β˜… @@ -173,7 +199,8 @@ Score Based Methods (NeurIPS: 2022)
Medical Robotics Junior Faculty Forum (ISMR: 2023)
Beyond Vision: Physics meets AI (ICIAP: 2023)
-Workshop on Diffusion Models (NeurIPS: 2023) +Workshop on Diffusion Models (NeurIPS: 2023)
+Workshop on Structured Probabilistic Inference & Generative Modeling (ICML: 2023, 2024) @@ -182,13 +209,13 @@ Workshop on Diffusion Models (NeurIPS: - + ## Star History @@ -449,6 +476,6 @@ Our most active contributors are welcome to join the maintainers team. If you ar ## License -The theme is available as open source under the terms of the [MIT License](https://github.com/alshedivat/al-folio/blob/master/LICENSE). +The theme is available as open source under the terms of the [MIT License](https://github.com/alshedivat/al-folio/blob/main/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 index f6d8b6b..d8c6b05 100644 --- a/_bibliography/papers.bib +++ b/_bibliography/papers.bib @@ -36,9 +36,10 @@ @article{einstein1950meaning @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.}, + 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.}, + location={New Jersey}, volume={47}, issue={10}, pages={777--780}, @@ -53,7 +54,11 @@ @article{PhysRev.47.777 altmetric={248277}, dimensions={true}, google_scholar_id={qyhmnyLat1gC}, - selected={true} + video={https://www.youtube-nocookie.com/embed/aqz-KE-bpKQ}, + additional_info={. *More Information* can be [found here](https://github.com/alshedivat/al-folio/)}, + annotation={* Example use of superscripts
† Albert Einstein}, + selected={true}, + inspirehep_id = {3255} } @article{einstein1905molekularkinetischen, @@ -83,11 +88,28 @@ @article{einstein1905electrodynamics year={1905} } +@Article{einstein1905photoelectriceffect, + bibtex_show={true}, + abbr={Ann. Phys.}, + title="{{\"U}ber einen die Erzeugung und Verwandlung des Lichtes betreffenden heuristischen Gesichtspunkt}", + author={Albert Einstein}, + abstract={This is the abstract text.}, + journal={Ann. Phys.}, + volume={322}, + number={6}, + pages={132--148}, + year={1905}, + doi={10.1002/andp.19053220607}, + award={Albert Einstein receveid the **Nobel Prize in Physics** 1921 *for his services to Theoretical Physics, and especially for his discovery of the law of the photoelectric effect*}, + award_name={Nobel Prize} +} + @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} + preview={wave-mechanics.gif}, + abbr={Vision} } diff --git a/_config.yml b/_config.yml index 36788af..48511de 100644 --- a/_config.yml +++ b/_config.yml @@ -6,7 +6,8 @@ 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 +contact_note: > + You can even add a little note about which of these is the best way to reach you. 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: > @@ -21,6 +22,7 @@ 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 +back_to_top: true # set to false to disable the back to top button # ----------------------------------------------------------------------------- # Theme @@ -48,9 +50,12 @@ rss_icon: true navbar_fixed: true footer_fixed: true +search_enabled: true +socials_in_search: true +bib_search: true # Dimensions -max_width: 800px +max_width: 930px # TODO: add layout settings (single page vs. multi-page) @@ -63,50 +68,6 @@ 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 # ----------------------------------------------------------------------------- @@ -115,6 +76,8 @@ contact_note: > # 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) +pirsch_analytics: # your Pirsch analytics site ID (length 32 characters) +openpanel_analytics: # your Openpanel analytics client ID (format: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) # 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) @@ -127,6 +90,7 @@ bing_site_verification: # out your bing-site-verification ID (Bing Webmaster) 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/ +lsi: false # produce an index for related posts # Pagination pagination: @@ -161,6 +125,19 @@ disqus_shortname: al-folio # put your disqus shortname external_sources: - name: medium.com rss_url: https://medium.com/@al-folio/feed + - name: Google Blog + posts: + - url: https://blog.google/technology/ai/google-gemini-update-flash-ai-assistant-io-2024/ + published_date: 2024-05-14 + +# ----------------------------------------------------------------------------- +# Newsletter +# ----------------------------------------------------------------------------- + +newsletter: + enabled: false + endpoint: # your loops endpoint (e.g., https://app.loops.so/api/newsletter-form/YOUR-ENDPOINT) + # https://loops.so/docs/forms/custom-form # ----------------------------------------------------------------------------- # Collections @@ -171,20 +148,10 @@ collections: defaults: layout: post output: true - permalink: /news/:path/ + permalink: /:collection/:title/ 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 + permalink: /:collection/:title/ # ----------------------------------------------------------------------------- # Jekyll settings @@ -204,7 +171,7 @@ kramdown: start_line: 1 # Includes & excludes -include: ["_pages"] +include: ["_pages", "_scripts"] exclude: - bin/ - CONTRIBUTING.md @@ -240,8 +207,11 @@ plugins: - jekyll-link-attributes - jekyll-minifier - jekyll-paginate-v2 + - jekyll-regex-replace - jekyll/scholar - jekyll-sitemap + - jekyll-tabs + - jekyll-terser - jekyll-toc - jekyll-twitter-plugin - jemoji @@ -261,9 +231,16 @@ sass: # ----------------------------------------------------------------------------- jekyll-minifier: - exclude: ["robots.txt"] - uglifier_args: - harmony: true + compress_javascript: false # set to false since we are using terser as the js minifier + # exclude: ["robots.txt", "assets/js/search/*.js"] + +# ----------------------------------------------------------------------------- +# Terser +# ----------------------------------------------------------------------------- + +terser: + compress: + drop_console: true # ----------------------------------------------------------------------------- # Jekyll Archives @@ -280,8 +257,8 @@ jekyll-archives: 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 +display_tags: ["formatting", "images", "links", "math", "code", "blockquotes"] # these tags will be displayed on the front page of your blog +display_categories: ["external-services"] # these categories will be displayed on the front page of your blog # ----------------------------------------------------------------------------- # Jekyll Scholar @@ -313,14 +290,39 @@ scholar: group_order: descending # Display different badges withs stats for your publications +# Customize badge behavior in _layouts/bib.liquid enable_publication_badges: - altmetric: true # Altmetric badge (https://www.altmetric.com/products/altmetric-badges/) - dimensions: true # Dimensions badge (https://badge.dimensions.ai/) + altmetric: true # Altmetric badge (Customization options: https://badge-docs.altmetric.com/index.html) + dimensions: true # Dimensions badge (Customization options: https://badge.dimensions.ai/) google_scholar: true # Google Scholar badge (https://scholar.google.com/intl/en/scholar/citations.html) + inspirehep: true # Inspire HEP badge (https://help.inspirehep.net/knowledge-base/citation-metrics/) # 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] + [ + abbr, + abstract, + additional_info, + altmetric, + annotation, + arxiv, + award, + award_name, + bibtex_show, + blog, + code, + google_scholar_id, + html, + inspirehep_id, + 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 @@ -377,6 +379,8 @@ lazy_loading_images: true # enables lazy loading of images (recommended) enable_google_analytics: false # enables google analytics enable_cronitor_analytics: false # enables cronitor RUM analytics +enable_pirsch_analytics: false # enables Pirsch analytics (https://pirsch.io/) +enable_openpanel_analytics: false # enables Openpanel analytics (https://openpanel.dev/) enable_google_verification: false # enables google site verification enable_bing_verification: false # enables bing site verification enable_masonry: true # enables automatic project cards arrangement @@ -387,77 +391,230 @@ enable_navbar_social: false # enables displaying social links in the navbar on t 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 +enable_video_embedding: false # enables video embedding for bibtex entries. If false, the button opens the video link in a new window. # ----------------------------------------------------------------------------- # 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=" +# Add the url, version and integrity hash of the libraries you use in your site. +# The integrity hash is used to ensure that the library is not tampered with. +# Integrity hashes not provided by the libraries were generated using https://www.srihash.org/ +third_party_libraries: + download: false # if true, download the versions of the libraries specified below and use the downloaded files + bootstrap-table: + integrity: + css: "sha256-uRX+PiRTR4ysKFRCykT8HLuRCub26LgXJZym3Yeom1c=" + js: "sha256-4rppopQE9POKfukn2kEvhJ9Um25Cf6+IDVkARD0xh78=" + url: + css: "https://cdn.jsdelivr.net/npm/bootstrap-table@{{version}}/dist/bootstrap-table.min.css" + js: "https://cdn.jsdelivr.net/npm/bootstrap-table@{{version}}/dist/bootstrap-table.min.js" + version: "1.22.4" + chartjs: + integrity: + js: "sha256-0q+JdOlScWOHcunpUk21uab1jW7C1deBQARHtKMcaB4=" + url: + js: "https://cdn.jsdelivr.net/npm/chart.js@{{version}}/dist/chart.umd.min.js" + version: "4.4.1" + d3: + integrity: + js: "sha256-1rA678n2xEx7x4cTZ5x4wpUCj6kUMZEZ5cxLSVSFWxw=" + url: + js: "https://cdn.jsdelivr.net/npm/d3@{{version}}/dist/d3.min.js" + version: "7.8.5" + diff2html: + integrity: + css: "sha256-IMBK4VNZp0ivwefSn51bswdsrhk0HoMTLc2GqFHFBXg=" + js: "sha256-eU2TVHX633T1o/bTQp6iIJByYJEtZThhF9bKz/DcbbY=" + url: + css: "https://cdn.jsdelivr.net/npm/diff2html@{{version}}/bundles/css/diff2html.min.css" + js: "https://cdn.jsdelivr.net/npm/diff2html@{{version}}/bundles/js/diff2html-ui.min.js" + version: "3.4.47" + echarts: + integrity: + js: + library: "sha256-QvgynZibb2U53SsVu98NggJXYqwRL7tg3FeyfXvPOUY=" + dark_theme: "sha256-sm6Ui9w41++ZCWmIWDLC18a6ki72FQpWDiYTDxEPXwU=" + url: + js: + library: "https://cdn.jsdelivr.net/npm/echarts@{{version}}/dist/echarts.min.js" + dark_theme: "https://cdn.jsdelivr.net/npm/echarts@{{version}}/theme/dark-fresh-cut.js" + version: "5.5.0" + google_fonts: + url: + fonts: "https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Slab:100,300,400,500,700|Material+Icons&display=swap" + highlightjs: + integrity: + css: + light: "sha256-Oppd74ucMR5a5Dq96FxjEzGF7tTw2fZ/6ksAqDCM8GY=" + dark: "sha256-nyCNAiECsdDHrr/s2OQsp5l9XeY2ZJ0rMepjCT2AkBk=" + url: + css: + light: "https://cdn.jsdelivr.net/npm/highlight.js@{{version}}/styles/github.min.css" + dark: "https://cdn.jsdelivr.net/npm/highlight.js@{{version}}/styles/github-dark.min.css" + version: "11.9.0" + imagesloaded: + integrity: + js: "sha256-htrLFfZJ6v5udOG+3kNLINIKh2gvoKqwEhHYfTTMICc=" + url: + js: https://cdn.jsdelivr.net/npm/imagesloaded@{{version}}/imagesloaded.pkgd.min.js + version: "5.0.0" + img-comparison-slider: + integrity: + css: "sha256-3qTIuuUWIFnnU3LpQMjqiXc0p09rvd0dmj+WkpQXSR8=" + js: "sha256-EXHg3x1K4oIWdyohPeKX2ZS++Wxt/FRPH7Nl01nat1o=" + map: "sha256-3wfqS2WU5kGA/ePcgFzJXl5oSN1QsgZI4/edprTgX8w=" + url: + css: "https://cdn.jsdelivr.net/npm/img-comparison-slider@{{version}}/dist/styles.min.css" + js: "https://cdn.jsdelivr.net/npm/img-comparison-slider@{{version}}/dist/index.min.js" + map: "https://cdn.jsdelivr.net/npm/img-comparison-slider@{{version}}/dist/index.js.map" + version: "8.0.6" + jquery: + integrity: + js: "sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" + url: + js: "https://cdn.jsdelivr.net/npm/jquery@{{version}}/dist/jquery.min.js" + version: "3.6.0" + leaflet: + integrity: + css: "sha256-q9ba7o845pMPFU+zcAll8rv+gC+fSovKsOoNQ6cynuQ=" + js: "sha256-MgH13bFTTNqsnuEoqNPBLDaqxjGH+lCpqrukmXc8Ppg=" + js_map: "sha256-YAoQ3FzREN4GmVENMir8vgHHypC0xfSK3CAxTHCqx1M=" + local: + images: "images/" + url: + css: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/leaflet.min.css" + images: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/images/" + js: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/leaflet.min.js" + js_map: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/leaflet.js.map" + version: "1.9.4" + lightbox2: + integrity: + css: "sha256-uypRbsAiJcFInM/ndyI/JHpzNe6DtUNXaWEUWEPfMGo=" + js: "sha256-A6jI5V9s1JznkWwsBaRK8kSeXLgIqQfxfnvdDOZEURY=" + url: + css: "https://cdn.jsdelivr.net/npm/lightbox2@{{version}}/dist/css/lightbox.min.css" + js: "https://cdn.jsdelivr.net/npm/lightbox2@{{version}}/dist/js/lightbox.min.js" + version: "2.11.5" + mathjax: + integrity: + js: "sha256-MASABpB4tYktI2Oitl4t+78w/lyA+D7b/s9GEP0JOGI=" + local: + fonts: "output/chtml/fonts/woff-v2/" + url: + fonts: "https://cdn.jsdelivr.net/npm/mathjax@{{version}}/es5/output/chtml/fonts/woff-v2/" + js: "https://cdn.jsdelivr.net/npm/mathjax@{{version}}/es5/tex-mml-chtml.js" + version: "3.2.2" + masonry: + integrity: + js: "sha256-Nn1q/fx0H7SNLZMQ5Hw5JLaTRZp0yILA/FRexe19VdI=" + url: + js: "https://cdn.jsdelivr.net/npm/masonry-layout@{{version}}/dist/masonry.pkgd.min.js" + version: "4.2.2" + mdb: + integrity: + css: "sha256-jpjYvU3G3N6nrrBwXJoVEYI/0zw8htfFnhT9ljN3JJw=" + css_map: "sha256-iYYMNfsJdVZjvsebJulg09miBXM4/GMTJgv1u5EZFFM=" + js: "sha256-NdbiivsvWt7VYCt6hYNT3h/th9vSTL4EDWeGs5SN3DA=" + js_map: "sha256-UPgyn4YNsT0khkBK5553QwhnlbTlU0aa+igyc6qP1bE=" + url: + css: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/css/mdb.min.css" + css_map: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/css/mdb.min.css.map" + js: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/js/mdb.min.js" + js_map: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/js/mdb.min.js.map" + version: "4.20.0" + medium_zoom: + integrity: + js: "sha256-ZgMyDAIYDYGxbcpJcfUnYwNevG/xi9OHKaR/8GK+jWc=" + url: + js: "https://cdn.jsdelivr.net/npm/medium-zoom@{{version}}/dist/medium-zoom.min.js" + version: "1.1.0" + mermaid: + integrity: + js: "sha256-TtLOdUA8mstPoO6sGvHIGx2ceXrrX4KgIItO06XOn8A=" + url: + js: "https://cdn.jsdelivr.net/npm/mermaid@{{version}}/dist/mermaid.min.js" + version: "10.7.0" + photoswipe: + integrity: + js: "sha256-VCBpdxvrNNxGHNuTdNqK9kPFkev2XY7DYzHdmgaB69Q=" + url: + css: "https://cdn.jsdelivr.net/npm/photoswipe@{{version}}/dist/photoswipe.min.css" + js: "https://cdn.jsdelivr.net/npm/photoswipe@{{version}}/dist/photoswipe.esm.min.js" + version: "5.4.4" + photoswipe-lightbox: + integrity: + js: "sha256-uCw4VgT5DMdwgtjhvU9e98nT2mLZXcw/8WkaTrDd3RI=" + url: + js: "https://cdn.jsdelivr.net/npm/photoswipe@{{version}}/dist/photoswipe-lightbox.esm.min.js" + version: "5.4.4" + polyfill: + url: + js: "https://cdnjs.cloudflare.com/polyfill/v{{version}}/polyfill.min.js?features=es6" + version: "3" + pseudocode: + integrity: + css: "sha256-VwMV//xgBPDyRFVSOshhRhzJRDyBmIACniLPpeXNUdc=" + js: "sha256-aVkDxqyzrB+ExUsOY9PdyelkDhn/DfrjWu08aVpqNlo=" + url: + css: "https://cdn.jsdelivr.net/npm/pseudocode@{{version}}/build/pseudocode.min.css" + js: "https://cdn.jsdelivr.net/npm/pseudocode@{{version}}/build/pseudocode.min.js" + version: "2.4.1" + spotlight: + integrity: + css: "sha256-Dsvkx8BU8ntk9Iv+4sCkgHRynYSQQFP6gJfBN5STFLY=" + url: + css: "https://cdn.jsdelivr.net/npm/spotlight.js@{{version}}/dist/css/spotlight.min.css" + js: "https://cdn.jsdelivr.net/npm/spotlight.js@{{version}}/dist/spotlight.bundle.min.js" + version: "0.7.8" + swiper: + integrity: + css: "sha256-yUoNxsvX+Vo8Trj3lZ/Y5ZBf8HlBFsB6Xwm7rH75/9E=" + js: "sha256-BPrwikijIybg9OQC5SYFFqhBjERYOn97tCureFgYH1E=" + map: "sha256-lbF5CsospW93otqvWOIbbhj80CjazrZXvamD7nC7TBI=" + url: + css: "https://cdn.jsdelivr.net/npm/swiper@{{version}}/swiper-bundle.min.css" + js: "https://cdn.jsdelivr.net/npm/swiper@{{version}}/swiper-element-bundle.min.js" + map: "https://cdn.jsdelivr.net/npm/swiper@{{version}}/swiper-element-bundle.min.js.map" + version: "11.0.5" + swiper-map: + integrity: + js: "sha256-hlZaH8ySXX97bZaetnrtYlKuhx3oEXFz/s2IXchu6vk=" + url: + js: "https://cdn.jsdelivr.net/npm/swiper@11.1.0/swiper-element-bundle.min.js.map" + version: "11.0.5" + vega: + integrity: + js: "sha256-Yot/cfgMMMpFwkp/5azR20Tfkt24PFqQ6IQS+80HIZs=" + js_map: "sha256-z0x9ICA65dPkZ0JVa9wTImfF6n7AJsKc6WlFE96/wNA=" + url: + js: "https://cdn.jsdelivr.net/npm/vega@{{version}}/build/vega.min.js" + js_map: "https://cdn.jsdelivr.net/npm/vega@{{version}}/build/vega.min.js.map" + version: "5.27.0" + vega-embed: + integrity: + js: "sha256-FPCJ9JYCC9AZSpvC/t/wHBX7ybueZhIqOMjpWqfl3DU=" + js_map: "sha256-VBbfSEFYSMdX/rTdGrONEHNP6BprCB7H/LpMMNt/cPA=" + url: + js: "https://cdn.jsdelivr.net/npm/vega-embed@{{version}}/build/vega-embed.min.js" + js_map: "https://cdn.jsdelivr.net/npm/vega-embed@{{version}}/build/vega-embed.min.js.map" + version: "6.24.0" + vega-lite: + integrity: + js: "sha256-TvBvIS5jUN4BSy009usRjNzjI1qRrHPYv7xVLJyjUyw=" + js_map: "sha256-l2I4D5JC23Ulsu6e3sKVe5AJ+r+DFkzkKnZS8nUGz28=" + url: + js: "https://cdn.jsdelivr.net/npm/vega-lite@{{version}}/build/vega-lite.min.js" + js_map: "https://cdn.jsdelivr.net/npm/vega-lite@{{version}}/build/vega-lite.min.js.map" + version: "5.16.3" + venobox: + integrity: + css: "sha256-ohJEB0/WsBOdBD+gQO/MGfyJSbTUI8OOLbQGdkxD6Cg=" + js: "sha256-LsGXHsHMMmTcz3KqTaWvLv6ome+7pRiic2LPnzTfiSo=" + url: + css: "https://cdn.jsdelivr.net/npm/venobox@{{version}}/dist/venobox.min.css" + js: "https://cdn.jsdelivr.net/npm/venobox@{{version}}/dist/venobox.min.js" + version: "2.1.8" # ----------------------------------------------------------------------------- # Get external JSON data @@ -466,6 +623,7 @@ vega-lite: jekyll_get_json: - data: resume json: assets/json/resume.json # it can also be an url + jsonresume: - basics - work diff --git a/_data/repositories.yml b/_data/repositories.yml index 5205c9f..c2d7269 100644 --- a/_data/repositories.yml +++ b/_data/repositories.yml @@ -2,11 +2,13 @@ github_users: - torvalds - alshedivat +repo_description_lines_max: 2 + github_repos: - alshedivat/al-folio - - twbs/bootstrap - jekyll/jekyll + - twbs/bootstrap - jquery/jquery - FortAwesome/Font-Awesome - - jpswalsh/academicons - mathjax/MathJax + - jpswalsh/academicons diff --git a/_data/socials.yml b/_data/socials.yml new file mode 100644 index 0000000..e9aa443 --- /dev/null +++ b/_data/socials.yml @@ -0,0 +1,51 @@ +# this file contains the social media links and usernames of the author +# the commented lines are the default social media links supported by the template +# the socials will be displayed in the order they are defined here + +# acm_id: # your dl.acm.org/profile/id +# blogger_url: # your blogger URL +# bluesky_url: # your bluesky URL +# dblp_url: # your DBLP profile url +# discord_id: # your discord id (18-digit unique numerical identifier) +email: you@example.com # your email address +# facebook_id: # your facebook id +# flickr_id: # your flickr id +# github_username: # your GitHub user name +# gitlab_username: # your GitLab user name +# ieee_id: # your ieeexplore.ieee.org/author/id +inspirehep_id: 1010907 # Inspire HEP author ID +# instagram_id: # your instagram id +# kaggle_id: # your kaggle id +# keybase_username: # your keybase user name +# lastfm_id: # your lastfm id +# lattes_id: # your ID on Lattes (Brazilian Lattes CV) +# leetcode_id: # your LeetCode id +# linkedin_username: # your LinkedIn user name +# mastodon_username: # your mastodon instance+username in the format instance.tld/@username +# medium_username: # your Medium username +# orcid_id: # your ORCID ID +# osf_id: # your OSF ID +# pinterest_id: # your pinterest id +# publons_id: # your ID on Publons +# quora_username: # your Quora username +# research_gate_profile: # your profile on ResearchGate +rss_icon: true # set to true to show the RSS icon +scholar_userid: qc6CJjYAAAAJ # your Google Scholar ID +# scopus_id: # your profile on Scopus +# semanticscholar_id: # your Semantic Scholar ID +# spotify_id: # your spotify id +# stackoverflow_id: # your stackoverflow id +# telegram_username: # your Telegram user name +# unsplash_id: # your unsplash id +# 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) +# 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.) +# wikidata_id: # your wikidata id +# wikipedia_id: # your wikipedia id (Case sensitive) +# work_url: # work page URL +# x_username: # your X handle +# youtube_id: # your youtube channel id (youtube.com/@) +# zotero_username: # your zotero username +custom_social: # can be any name here other than the ones already defined above + logo: https://www.alberteinstein.com/wp-content/uploads/2024/03/cropped-favicon-192x192.png # can be png, svg, jpg + title: Custom Social + url: https://www.alberteinstein.com/ diff --git a/_data/venues.yml b/_data/venues.yml index 6c16ad5..4196320 100644 --- a/_data/venues.yml +++ b/_data/venues.yml @@ -4,3 +4,6 @@ "PhysRev": url: https://journals.aps.org/ + +"Vision": + color: "#009f36" diff --git a/_includes/bib_search.liquid b/_includes/bib_search.liquid new file mode 100644 index 0000000..c0ab526 --- /dev/null +++ b/_includes/bib_search.liquid @@ -0,0 +1,4 @@ +{% if site.bib_search %} + + +{% endif %} diff --git a/_includes/citation.liquid b/_includes/citation.liquid new file mode 100644 index 0000000..35bd9e3 --- /dev/null +++ b/_includes/citation.liquid @@ -0,0 +1,26 @@ +
+
+
+ +If you found this useful, please cite this as: + +{% capture citation_quote -%} +> {{ site.last_name }}, {{ site.first_name }}{% if site.middle_name %} {{ site.middle_name }}{% endif %} ({{ page.date | date: "%b %Y" }}). {{ page.title }}. {% if site.title != 'blank' %}{{ site.title }}. {% endif %}{{ site.url }}. +{%- endcapture %} +{{ citation_quote | markdownify }} + +

or as a BibTeX entry:

+ +{% capture citation_code -%} +```bibtex +@article{ {{- site.last_name | downcase }}{{ page.date | date: "%Y" }}{{ page.title | slugify }}, + title = { {{- page.title -}} }, + author = { {{- site.last_name }}, {{ site.first_name }}{% if site.middle_name %} {{ site.middle_name }}{% endif -%}}, + {%- if site.title != 'blank' %}journal = { {{- site.title -}} },{% endif %} + year = { {{- page.date | date: "%Y" -}} }, + month = { {{- page.date | date: "%b" -}} }, + url = { {{- site.url }}{{ page.url -}} } +} +``` +{%- endcapture %} +{{ citation_code | markdownify }} diff --git a/_includes/distill_scripts.liquid b/_includes/distill_scripts.liquid new file mode 100644 index 0000000..df4104c --- /dev/null +++ b/_includes/distill_scripts.liquid @@ -0,0 +1,280 @@ + + + + + + + +{% if page.mermaid and page.mermaid.enabled %} + + + {% if page.mermaid.zoomable %} + + {% endif %} + +{% endif %} + +{% if page.code_diff %} + + + + +{% endif %} + +{% if page.map %} + + + +{% endif %} + +{% if page.chart and page.chart.chartjs %} + + + +{% endif %} + +{% if page.chart and page.chart.echarts %} + + + {% if site.enable_darkmode %} + + {% endif %} + +{% endif %} + +{% if page.chart and page.chart.vega_lite %} + + + + + +{% endif %} + +{% if page.tikzjax %} + + +{% endif %} + +{% if page.typograms %} + + +{% endif %} + +{% if site.enable_tooltips %} + + +{% endif %} + +{% if site.enable_medium_zoom %} + + + +{% endif %} + +{% if page.toc and page.toc.sidebar %} + + +{% endif %} + +{% if page.pretty_table %} + + + +{% endif %} + + + + + + + + + + + +{% if site.enable_math %} + + + + + +{% endif %} + +{% if site.enable_google_analytics %} + + + + +{% endif %} + +{% if site.enable_cronitor_analytics %} + + + +{% endif %} +{% if site.enable_pirsch_analytics %} + +{% endif %} +{% if site.enable_openpanel_analytics %} + + +{% endif %} + +{% if site.enable_progressbar %} + + +{% endif %} + +{% if page.images %} + + {% if page.images.compare %} + + {% endif %} + {% if page.images.lightbox2 %} + + {% endif %} + {% if page.images.photoswipe %} + + {% endif %} + {% if page.images.slider %} + + {% endif %} + {% if page.images.spotlight %} + + {% endif %} + {% if page.images.venobox %} + + + {% endif %} +{% endif %} + +{% if page.tabs %} + + +{% endif %} + +{% if site.back_to_top %} + + + +{% endif %} + +{% if site.search_enabled %} + + + + + + +{% endif %} diff --git a/_includes/figure.liquid b/_includes/figure.liquid index 7c10854..191c638 100644 --- a/_includes/figure.liquid +++ b/_includes/figure.liquid @@ -1,4 +1,6 @@ {% assign img_path = include.path | remove: '.jpg' | remove: '.jpeg' | remove: '.png' | remove: '.tiff' | remove: '.gif' %} +{% assign parts = include.path | split: '.' %} +{% assign ext = parts.last %}
{% endif %} {% else %}