├── go.mod
├── images
├── tn.png
├── mobile.png
└── screenshot.png
├── .gitignore
├── layouts
├── partials
│ ├── analytics
│ │ ├── google.html
│ │ └── main.html
│ ├── home
│ │ ├── pg-desc.html
│ │ ├── socials.html
│ │ ├── profile.html
│ │ └── recents.html
│ ├── icon.html
│ ├── single
│ │ ├── meta-tags.html
│ │ ├── toc.html
│ │ ├── pagination.html
│ │ └── meta.html
│ ├── breadcrumbs.html
│ ├── list
│ │ ├── basic.html
│ │ ├── card.html
│ │ └── main.html
│ ├── footer.html
│ ├── terms.html
│ ├── head
│ │ ├── css.html
│ │ ├── js.html
│ │ └── vendor.html
│ ├── search.html
│ ├── image-renderer.html
│ ├── header.html
│ └── head.html
├── shortcodes
│ ├── katex.html
│ ├── mermaid.html
│ ├── icon.html
│ ├── mdimport.html
│ ├── collapse.html
│ ├── callout.html
│ └── codeimport.html
├── _markup
│ ├── render-image.html
│ ├── render-link.html
│ └── render-heading.html
├── robots.txt
├── home.html
├── index.html
├── 404.html
├── baseof.html
├── list.html
├── term.html
├── index.json
├── sitemap.xml
├── taxonomy.html
├── single.html
└── rss.xml
├── config.toml
├── static
└── fonts
│ └── Ubuntu-Regular.woff2
├── assets
├── lib
│ └── katex
│ │ ├── fonts
│ │ ├── KaTeX_Main-Bold.ttf
│ │ ├── KaTeX_Main-Bold.woff
│ │ ├── KaTeX_AMS-Regular.ttf
│ │ ├── KaTeX_AMS-Regular.woff
│ │ ├── KaTeX_AMS-Regular.woff2
│ │ ├── KaTeX_Fraktur-Bold.ttf
│ │ ├── KaTeX_Fraktur-Bold.woff
│ │ ├── KaTeX_Main-Bold.woff2
│ │ ├── KaTeX_Main-Italic.ttf
│ │ ├── KaTeX_Main-Italic.woff
│ │ ├── KaTeX_Main-Italic.woff2
│ │ ├── KaTeX_Main-Regular.ttf
│ │ ├── KaTeX_Main-Regular.woff
│ │ ├── KaTeX_Math-Italic.ttf
│ │ ├── KaTeX_Math-Italic.woff
│ │ ├── KaTeX_Math-Italic.woff2
│ │ ├── KaTeX_Size1-Regular.ttf
│ │ ├── KaTeX_Size2-Regular.ttf
│ │ ├── KaTeX_Size3-Regular.ttf
│ │ ├── KaTeX_Size4-Regular.ttf
│ │ ├── KaTeX_Fraktur-Bold.woff2
│ │ ├── KaTeX_Fraktur-Regular.ttf
│ │ ├── KaTeX_Main-BoldItalic.ttf
│ │ ├── KaTeX_Main-Regular.woff2
│ │ ├── KaTeX_Math-BoldItalic.ttf
│ │ ├── KaTeX_SansSerif-Bold.ttf
│ │ ├── KaTeX_SansSerif-Bold.woff
│ │ ├── KaTeX_Script-Regular.ttf
│ │ ├── KaTeX_Script-Regular.woff
│ │ ├── KaTeX_Size1-Regular.woff
│ │ ├── KaTeX_Size1-Regular.woff2
│ │ ├── KaTeX_Size2-Regular.woff
│ │ ├── KaTeX_Size2-Regular.woff2
│ │ ├── KaTeX_Size3-Regular.woff
│ │ ├── KaTeX_Size3-Regular.woff2
│ │ ├── KaTeX_Size4-Regular.woff
│ │ ├── KaTeX_Size4-Regular.woff2
│ │ ├── KaTeX_Caligraphic-Bold.ttf
│ │ ├── KaTeX_Caligraphic-Bold.woff
│ │ ├── KaTeX_Caligraphic-Bold.woff2
│ │ ├── KaTeX_Fraktur-Regular.woff
│ │ ├── KaTeX_Fraktur-Regular.woff2
│ │ ├── KaTeX_Main-BoldItalic.woff
│ │ ├── KaTeX_Main-BoldItalic.woff2
│ │ ├── KaTeX_Math-BoldItalic.woff
│ │ ├── KaTeX_Math-BoldItalic.woff2
│ │ ├── KaTeX_SansSerif-Bold.woff2
│ │ ├── KaTeX_SansSerif-Italic.ttf
│ │ ├── KaTeX_SansSerif-Italic.woff
│ │ ├── KaTeX_SansSerif-Italic.woff2
│ │ ├── KaTeX_SansSerif-Regular.ttf
│ │ ├── KaTeX_SansSerif-Regular.woff
│ │ ├── KaTeX_Script-Regular.woff2
│ │ ├── KaTeX_Typewriter-Regular.ttf
│ │ ├── KaTeX_Caligraphic-Regular.ttf
│ │ ├── KaTeX_Caligraphic-Regular.woff
│ │ ├── KaTeX_SansSerif-Regular.woff2
│ │ ├── KaTeX_Typewriter-Regular.woff
│ │ ├── KaTeX_Typewriter-Regular.woff2
│ │ └── KaTeX_Caligraphic-Regular.woff2
│ │ ├── auto-render.min.js
│ │ └── katex.min.css
├── js
│ ├── mermaid.js
│ ├── theme.js
│ ├── codecopy.js
│ └── search.js
├── icons
│ ├── microsoft.svg
│ ├── substack.svg
│ ├── x-twitter.svg
│ ├── patreon.svg
│ ├── hackernews.svg
│ ├── twitch.svg
│ ├── location-dot.svg
│ ├── lock.svg
│ ├── tiktok.svg
│ ├── stack-overflow.svg
│ ├── check.svg
│ ├── clone-solid.svg
│ ├── google.svg
│ ├── envelope.svg
│ ├── moon.svg
│ ├── codeberg.svg
│ ├── shield.svg
│ ├── discourse.svg
│ ├── facebook.svg
│ ├── square-check-solid.svg
│ ├── heart.svg
│ ├── chevron-down.svg
│ ├── comment.svg
│ ├── phone.svg
│ ├── copy-solid.svg
│ ├── flickr.svg
│ ├── kickstarter.svg
│ ├── pgpkey.svg
│ ├── tag.svg
│ ├── rss.svg
│ ├── bars.svg
│ ├── hashnode.svg
│ ├── music.svg
│ ├── orcid.svg
│ ├── tumblr.svg
│ ├── circle-info.svg
│ ├── xmark.svg
│ ├── triangle-exclamation.svg
│ ├── arrow-right.svg
│ ├── bell.svg
│ ├── calender.svg
│ ├── image.svg
│ ├── medium.svg
│ ├── linkedin.svg
│ ├── apple.svg
│ ├── download.svg
│ ├── rss-square.svg
│ ├── copy-regular.svg
│ ├── code.svg
│ ├── fire.svg
│ ├── search.svg
│ ├── youtube.svg
│ ├── pencil.svg
│ ├── eye.svg
│ ├── foursquare.svg
│ ├── paypal.svg
│ ├── lastfm.svg
│ ├── xing.svg
│ ├── ghost.svg
│ ├── docker.svg
│ ├── fork.svg
│ ├── mug-hot.svg
│ ├── bomb.svg
│ ├── mastodon.svg
│ ├── heart-empty.svg
│ ├── home.svg
│ ├── amazon.svg
│ ├── lightbulb.svg
│ ├── expand.svg
│ ├── codepen.svg
│ ├── edit.svg
│ ├── pinterest.svg
│ ├── dev.svg
│ ├── sun.svg
│ ├── telegram.svg
│ ├── goodreads.svg
│ ├── steam.svg
│ ├── researchgate.svg
│ ├── poo.svg
│ ├── scale-balanced.svg
│ ├── list.svg
│ ├── email.svg
│ ├── graduation-cap.svg
│ ├── star.svg
│ ├── bluesky.svg
│ ├── time.svg
│ ├── twitter.svg
│ ├── blogger.svg
│ ├── skull-crossbones.svg
│ ├── language.svg
│ ├── whatsapp.svg
│ ├── reddit.svg
│ ├── wand-magic-sparkles.svg
│ ├── instagram.svg
│ ├── link.svg
│ ├── slack.svg
│ ├── tag-horizontal.svg
│ ├── dribbble.svg
│ ├── threads.svg
│ ├── stripe.svg
│ ├── bug.svg
│ ├── discord.svg
│ ├── github.svg
│ ├── globe.svg
│ ├── keybase.svg
│ ├── ko-fi.svg
│ ├── soundcloud.svg
│ ├── itch-io.svg
│ ├── gitlab.svg
│ └── snapchat.svg
└── css
│ └── theme.css
├── archetypes
├── list.md
├── external.md
└── default.md
├── config
└── _default
│ ├── markup.toml
│ ├── menus.toml
│ ├── hugo.toml
│ └── params.toml
├── .github
├── ISSUE_TEMPLATE
│ ├── feature_request.md
│ └── bug_report.md
└── workflows
│ └── main.yaml
├── theme.toml
├── netlify.toml
├── LICENSE
├── package.json
└── README.md
/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/mnjm/kayal
2 |
3 | go 1.22.3
4 |
--------------------------------------------------------------------------------
/images/tn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/images/tn.png
--------------------------------------------------------------------------------
/images/mobile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/images/mobile.png
--------------------------------------------------------------------------------
/images/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/images/screenshot.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | public
3 | resources
4 | themes/
5 | **/.hugo_build.lock
6 |
--------------------------------------------------------------------------------
/layouts/partials/analytics/google.html:
--------------------------------------------------------------------------------
1 | {{ template "_internal/google_analytics.html" . }}
2 |
--------------------------------------------------------------------------------
/layouts/shortcodes/katex.html:
--------------------------------------------------------------------------------
1 | {{/* 404: shortcode missing. Check under the table */}}
2 |
--------------------------------------------------------------------------------
/layouts/partials/home/pg-desc.html:
--------------------------------------------------------------------------------
1 |
2 | {{ .Summary }}
3 |
4 |
--------------------------------------------------------------------------------
/layouts/shortcodes/mermaid.html:
--------------------------------------------------------------------------------
1 |
2 | {{ .Inner }}
3 |
4 |
--------------------------------------------------------------------------------
/layouts/shortcodes/icon.html:
--------------------------------------------------------------------------------
1 |
2 | {{ partial "icon.html" (.Get 0) }}
3 |
4 |
--------------------------------------------------------------------------------
/config.toml:
--------------------------------------------------------------------------------
1 | [module]
2 | [module.hugoVersion]
3 | extended = false
4 | min = "0.130.0"
5 | max = "0.152.2"
6 |
--------------------------------------------------------------------------------
/static/fonts/Ubuntu-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/static/fonts/Ubuntu-Regular.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Main-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Main-Bold.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Main-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Main-Bold.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_AMS-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_AMS-Regular.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_AMS-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_AMS-Regular.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_AMS-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_AMS-Regular.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Main-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Main-Bold.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Main-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Main-Italic.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Main-Italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Main-Italic.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Main-Italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Main-Italic.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Main-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Main-Regular.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Main-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Main-Regular.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Math-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Math-Italic.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Math-Italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Math-Italic.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Math-Italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Math-Italic.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Size1-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Size1-Regular.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Size2-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Size2-Regular.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Size3-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Size3-Regular.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Size4-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Size4-Regular.ttf
--------------------------------------------------------------------------------
/archetypes/list.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: '{{ replace .File.ContentBaseName "-" " " | title }}'
3 | showDate = true
4 | groupByYear = false
5 | ---
6 |
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Main-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Main-Regular.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Script-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Script-Regular.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Script-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Script-Regular.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Size1-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Size1-Regular.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Size1-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Size1-Regular.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Size2-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Size2-Regular.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Size2-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Size2-Regular.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Size3-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Size3-Regular.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Size3-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Size3-Regular.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Size4-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Size4-Regular.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Size4-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Size4-Regular.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Script-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Script-Regular.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.ttf
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.woff
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.woff2
--------------------------------------------------------------------------------
/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnjm/kayal/HEAD/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff2
--------------------------------------------------------------------------------
/layouts/_markup/render-image.html:
--------------------------------------------------------------------------------
1 | {{ $imgData := dict "Page" .Page "URL" .Destination "Alt" .Text "Caption" .Title }}
2 | {{ partial "image-renderer.html" $imgData }}
3 |
--------------------------------------------------------------------------------
/assets/js/mermaid.js:
--------------------------------------------------------------------------------
1 | function css(name) {
2 | return getComputedStyle(document.documentElement).getPropertyValue(name);
3 | }
4 |
5 | mermaid.initialize({ theme: "dark" });
6 |
--------------------------------------------------------------------------------
/layouts/partials/icon.html:
--------------------------------------------------------------------------------
1 | {{ $icon := resources.Get (print "icons/" . ".svg") }}
2 | {{ if $icon }}
3 | {{ $icon.Content | safeHTML }}
4 | {{ else }}
5 | {{ errorf . "Icon not found!" }}
6 | {{ end }}
7 |
--------------------------------------------------------------------------------
/layouts/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | {{- if hugo.IsProduction | or (eq .Site.Params.env "production") }}
3 | Allow: /
4 | {{- else }}
5 | Disallow: /
6 | {{- end }}
7 | Sitemap: {{ "sitemap.xml" | absURL }}
8 |
--------------------------------------------------------------------------------
/assets/icons/microsoft.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/substack.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/layouts/shortcodes/mdimport.html:
--------------------------------------------------------------------------------
1 | {{ $url := .Get "url"}}
2 | {{ with resources.GetRemote (urls.Parse $url) }}
3 | {{ .Content | markdownify }}
4 | {{ else }}
5 | {{ errorf "Mardown Importer Shortcode - Unable to get remote resource" . }}
6 | {{ end }}
7 |
--------------------------------------------------------------------------------
/assets/icons/x-twitter.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/patreon.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/home.html:
--------------------------------------------------------------------------------
1 | {{ define "main" }}
2 | {{ if templates.Exists "partials/homepage.html" }}
3 | {{ partial "homepage.html" . }}
4 | {{ else }}
5 | {{ partial "home/profile.html" . }}
6 | {{ end }}
7 | {{ partial "home/recents.html" . }}
8 | {{ end }}
9 |
--------------------------------------------------------------------------------
/layouts/index.html:
--------------------------------------------------------------------------------
1 | {{ define "main" }}
2 | {{ if templates.Exists "partials/homepage.html" }}
3 | {{ partial "homepage.html" . }}
4 | {{ else }}
5 | {{ partial "home/profile.html" . }}
6 | {{ end }}
7 | {{ partial "home/recents.html" . }}
8 | {{ end }}
9 |
--------------------------------------------------------------------------------
/archetypes/external.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: '{{ replace .File.ContentBaseName "-" " " | title }}'
3 | showDate: true
4 | showTags: true
5 | date: {{ .Date }}
6 | externalUrl: ""
7 | summary: ""
8 | showReadingTime: false
9 | _build:
10 | render: "false"
11 | list: "local"
12 | ---
13 |
--------------------------------------------------------------------------------
/layouts/partials/analytics/main.html:
--------------------------------------------------------------------------------
1 | {{ if hugo.IsProduction }}
2 | {{ partial "analytics/google.html" . }}
3 | {{/* Custom analytics */}}
4 | {{ if templates.Exists "partials/analytics/custom.html" }}
5 | {{ partial "analytics/custom.html" . }}
6 | {{ end }}
7 | {{ end }}
8 |
--------------------------------------------------------------------------------
/assets/icons/hackernews.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/layouts/_markup/render-link.html:
--------------------------------------------------------------------------------
1 |
6 | {{- .Text | safeHTML -}}
7 |
8 |
--------------------------------------------------------------------------------
/assets/icons/twitch.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/location-dot.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/lock.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/tiktok.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/404.html:
--------------------------------------------------------------------------------
1 | {{ define "main" }}
2 | {{ "404 Not Found :slightly_frowning_face:" | emojify }}
3 | It seems the page you're looking for has been moved or, in rare cases, removed.
4 |
5 |
6 | Return to the home page?
7 |
8 |
9 | {{ end }}
10 |
--------------------------------------------------------------------------------
/assets/icons/stack-overflow.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/shortcodes/collapse.html:
--------------------------------------------------------------------------------
1 | {{ if .Get "summary" }}
2 |
3 | {{ .Get "summary" | markdownify }}
4 | {{ .Inner | markdownify }}
5 |
6 | {{ else }}
7 | {{ errorf "missing value for param 'summary': %s" .Position }}
8 | {{ end }}
9 |
--------------------------------------------------------------------------------
/assets/icons/check.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/clone-solid.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/google.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/config/_default/markup.toml:
--------------------------------------------------------------------------------
1 | # -- Markup --
2 | # These settings are required for the theme to function.
3 |
4 | [goldmark]
5 | [goldmark.renderer]
6 | unsafe = true
7 | [goldmark.extensions]
8 | [goldmark.extensions.passthrough]
9 | enable = true
10 | [goldmark.extensions.passthrough.delimiters]
11 | block = [['\[', '\]'], ['$$', '$$']]
12 | inline = [['\(', '\)']]
13 |
--------------------------------------------------------------------------------
/layouts/_markup/render-heading.html:
--------------------------------------------------------------------------------
1 | {{ $showAnchor := .Page.Params.showHeadingAnchors | default (.Page.Site.Params.showHeadingAnchors | default true) }}
2 |
3 | {{ .Text | safeHTML }}
4 | {{ if $showAnchor }}
5 | {{ partial "icon.html" "link" }}
6 | {{ end }}
7 |
8 |
--------------------------------------------------------------------------------
/assets/icons/envelope.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/moon.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/codeberg.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/assets/icons/shield.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/discourse.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/facebook.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/square-check-solid.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/partials/home/socials.html:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/assets/icons/heart.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/chevron-down.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/assets/icons/comment.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/phone.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/copy-solid.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/archetypes/default.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: '{{ replace .File.ContentBaseName "-" " " | title }}'
3 | date: {{ .Date }}
4 | draft: true
5 | hidden: false
6 | externalURL: false
7 | showDate: true
8 | showModDate: true
9 | showReadingTime: true
10 | showTags: true
11 | showPagination: true
12 | invertPagination: true
13 | showToC: true
14 | openToC: false
15 | showComments: false
16 | showHeadingAnchors: true
17 | ---
18 |
--------------------------------------------------------------------------------
/assets/icons/flickr.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/kickstarter.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/partials/single/meta-tags.html:
--------------------------------------------------------------------------------
1 | {{ $showTags := .Params.showTags | default (.Site.Params.article.showTags | default true) }}
2 | {{ with .GetTerms "tags" }}
3 | {{ if gt (len .) 0 }}
4 |
5 | {{ partial "icon.html" "tag" }}
6 | {{ range . }}
7 | {{ .LinkTitle }}
8 | {{ end }}
9 |
10 | {{ end }}
11 | {{ end }}
12 |
--------------------------------------------------------------------------------
/assets/icons/pgpkey.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/tag.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/rss.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/layouts/partials/breadcrumbs.html:
--------------------------------------------------------------------------------
1 | {{ $url := replace .Parent.Permalink (printf "%s" site.Home.Permalink) "" }}
2 |
12 |
--------------------------------------------------------------------------------
/assets/icons/bars.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/hashnode.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/music.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/orcid.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/tumblr.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/circle-info.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/xmark.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/triangle-exclamation.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/baseof.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ partial "head.html" . }}
4 |
5 |
6 | {{ partial "header.html" . }}
7 |
8 | {{ block "main" . }}{{ end }}
9 |
10 | {{ partial "footer.html" . }}
11 |
12 | {{ partialCached "head/js.html" . }}
13 |
14 |
15 |
--------------------------------------------------------------------------------
/assets/icons/arrow-right.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/bell.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/calender.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/assets/icons/image.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/medium.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/linkedin.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/partials/list/basic.html:
--------------------------------------------------------------------------------
1 | {{ with .page }}
2 |
3 |
10 |
11 | {{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
12 | {{ $dateHuman := dateFormat "Jan 02, 2006" .Date }}
13 |
14 |
15 | {{ end }}
16 |
--------------------------------------------------------------------------------
/assets/icons/apple.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/download.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/rss-square.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/partials/footer.html:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/assets/icons/copy-regular.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/code.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/fire.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/search.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/youtube.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/partials/single/toc.html:
--------------------------------------------------------------------------------
1 | {{ if .Params.showToC | default (.Site.Params.article.showToC | default true) }}
2 | {{ $openToC := .Params.openToC | default (.Site.Params.article.openToC | default false) }}
3 | {{ if (in .TableOfContents "
5 |
6 |
7 | Table of Contents
8 |
9 |
10 | {{ .TableOfContents | emojify }}
11 |
12 |
13 |
14 | {{ end }}
15 | {{ end }}
16 |
--------------------------------------------------------------------------------
/assets/icons/pencil.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/eye.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/layouts/list.html:
--------------------------------------------------------------------------------
1 | {{ define "main" }}
2 | {{ $groupByYear := .Params.groupByYear | default (.Site.Params.list.groupByYear | default false) }}
3 | {{ $cardView := .Params.cardView | default (.Site.Params.list.cardView | default false) }}
4 | {{ $showBreadcrumbs := .Params.showBreadcrumbs | default (.Site.Params.list.showBreadcrumbs | default false) }}
5 | {{ $showRSS := .Params.showRSS | default (.Site.Params.list.showRSS | default false) }}
6 | {{ $args := dict "groupByYear" $groupByYear "cardView" $cardView "showBreadcrumbs" $showBreadcrumbs "showRSS" $showRSS }}
7 | {{ partial "list/main.html" (dict "context" . "args" $args) }}
8 | {{ end }}
9 |
--------------------------------------------------------------------------------
/layouts/term.html:
--------------------------------------------------------------------------------
1 | {{ define "main" }}
2 | {{ $groupByYear := .Params.groupByYear | default (.Site.Params.term.groupByYear | default false) }}
3 | {{ $cardView := .Params.cardView | default (.Site.Params.term.cardView | default false) }}
4 | {{ $showBreadcrumbs := .Params.showBreadcrumbs | default (.Site.Params.term.showBreadcrumbs | default false) }}
5 | {{ $showRSS := .Params.showRSS | default (.Site.Params.term.showRSS | default false) }}
6 | {{ $args := dict "groupByYear" $groupByYear "cardView" $cardView "showBreadcrumbs" $showBreadcrumbs "showRSS" $showRSS }}
7 | {{ partial "list/main.html" (dict "context" . "args" $args) }}
8 | {{ end }}
9 |
--------------------------------------------------------------------------------
/assets/icons/foursquare.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/paypal.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/lastfm.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/xing.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/layouts/partials/terms.html:
--------------------------------------------------------------------------------
1 | {{- /*
2 | For a given taxonomy, renders a list of terms assigned to the page.
3 |
4 | @context {page} page The current page.
5 | @context {string} taxonomy The taxonomy.
6 |
7 | @example: {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
8 | */}}
9 |
10 | {{- $page := .page }}
11 | {{- $taxonomy := .taxonomy }}
12 |
13 | {{- with $page.GetTerms $taxonomy }}
14 | {{- $label := (index . 0).Parent.LinkTitle }}
15 |
16 |
{{ $label }}:
17 |
22 |
23 | {{- end }}
24 |
--------------------------------------------------------------------------------
/assets/icons/ghost.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/docker.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/fork.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/mug-hot.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/bomb.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/assets/icons/mastodon.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/heart-empty.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/home.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS:
28 | - Browser:
29 | - Hugo Version:
30 | - Kayal Version:
31 |
--------------------------------------------------------------------------------
/assets/icons/amazon.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/partials/home/profile.html:
--------------------------------------------------------------------------------
1 | {{/* headline */}}
2 | {{ with .Site.Params.homepage.profile.headline }}
3 | {{ . | markdownify }}
4 | {{ end }}
5 |
6 | {{/* image */}}
7 | {{ $img := .Site.Params.homepage.profile.image }}
8 | {{ $where := .Site.Params.homepage.profile.where }}
9 | {{ if $img }}
10 |
11 | {{ $imgData := dict "Page" . "URL" $img "Alt" "Profile Image" "Size" "200x200" }}
12 | {{ partial "image-renderer.html" $imgData }}
13 |
14 | {{ end }}
15 |
16 | {{/* Content from _index.html */}}
17 | {{ .Content }}
18 |
19 | {{ if .Site.Params.Social }}
20 |
21 | {{ partial "home/socials.html" . }}
22 |
23 | {{ end }}
24 |
--------------------------------------------------------------------------------
/assets/icons/lightbulb.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/expand.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/codepen.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/edit.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/pinterest.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/index.json:
--------------------------------------------------------------------------------
1 | {{- $index := slice -}}
2 | {{- $pages := .Site.RegularPages -}}
3 | {{- range $pages -}}
4 | {{- $data := dict
5 | "title" (.Title | emojify | safeJS)
6 | "summary" (.Summary | plainify)
7 | "content" (.Plain | safeJS)
8 | "type" .Type
9 | -}}
10 | {{- if .Date -}}
11 | {{- $data = $data | merge (dict "date" (.Date | time.Format (.Site.Language.Params.dateFormat | default ":date_long"))) -}}
12 | {{- end -}}
13 | {{- if .Params.externalUrl -}}
14 | {{- $data = $data | merge (dict "permalink" .Params.externalUrl) -}}
15 | {{- else -}}
16 | {{- $data = $data | merge (dict "permalink" .RelPermalink) -}}
17 | {{- end -}}
18 | {{- $index = $index | append $data -}}
19 | {{- end -}}
20 | {{- $index | jsonify -}}
21 |
--------------------------------------------------------------------------------
/assets/icons/dev.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/theme.toml:
--------------------------------------------------------------------------------
1 | name = 'Kayal'
2 | license = 'MIT'
3 | licenselink = 'https://github.com/mnjm/kayal/LICENSE'
4 | description = 'A minimal, lightweight with markdown-ish aesthetics for personal blogsites.'
5 |
6 | # The home page of the theme, where the source can be found
7 | homepage = 'https://github.com/mnjm/kayal'
8 |
9 | # If you have a running demo of the theme
10 | demosite = 'https://mnjm.github.io/kayal'
11 |
12 | # Taxonomy terms
13 | tags = ['blog', 'minimal', 'responsive', 'light', 'dark', 'clean', 'warm']
14 | features = ['dark mode', 'emoji', 'blog', 'table of contents', 'code copy', 'analytics', 'markdown-ish ui']
15 |
16 | # If porting an existing theme
17 | [original]
18 | author = 'Manjunath Mohan'
19 | homepage = 'mnjm.github.io'
20 | repo = 'https://github.com/mnjm/kayal'
21 |
--------------------------------------------------------------------------------
/assets/icons/sun.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/telegram.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/partials/head/css.html:
--------------------------------------------------------------------------------
1 | {{ $styles := slice "css/theme.css" "css/main.css" "css/custom.css" }}
2 | {{ if eq hugo.Environment "development" }}
3 | {{ range $styles }}
4 | {{ with resources.Get . }}
5 |
6 | {{ end }}
7 | {{ end }}
8 | {{ else }}
9 | {{ $cssConcatenated := slice }}
10 | {{ range $index, $style := $styles }}
11 | {{ with resources.Get $style }}
12 | {{ $cssConcatenated = $cssConcatenated | append . }}
13 | {{ end }}
14 | {{ end }}
15 | {{ $bundleCSS := $cssConcatenated | resources.Concat "css/main.bundle.css" | resources.Minify | resources.Fingerprint "sha512" }}
16 |
17 | {{ end }}
18 |
--------------------------------------------------------------------------------
/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 | command = "git clone https://github.com/mnjm/kayal.git exampleSite --depth 1 --single-branch --branch exampleSite && hugo --gc --minify -D --source ./exampleSite --destination ../public --baseURL $URL"
3 | publish = "public"
4 |
5 | [build.environment]
6 | HUGO_THEMESDIR = "../.."
7 | HUGO_THEME = "repo"
8 |
9 | [context.production.environment]
10 | HUGO_VERSION = "0.125.7"
11 | HUGO_ENV = "production"
12 |
13 | [context.deploy-preview]
14 | command = "cd exampleSite && hugo --gc --minify -D -b $DEPLOY_PRIME_URL"
15 |
16 | [context.deploy-preview.environment]
17 | HUGO_VERSION = "0.125.7"
18 |
19 | [context.branch-deploy]
20 | command = "cd exampleSite && hugo --gc --minify -D -b $DEPLOY_PRIME_URL"
21 |
22 | [context.branch-deploy.environment]
23 | HUGO_VERSION = "0.125.7"
24 |
--------------------------------------------------------------------------------
/layouts/partials/list/card.html:
--------------------------------------------------------------------------------
1 | {{ $showDate := .showDate }}
2 | {{ $lvl := .lvl }}
3 | {{ with .page }}
4 | -
5 |
17 |
18 |
19 | {{ if .Params.coverImg }}
20 | {{ $imgData := dict "Page" . "URL" .Params.coverImg "Alt" .LinkTitle "Size" "x150" "Style" "thumbnail" }}
21 | {{ partial "image-renderer.html" $imgData }}
22 | {{ end }}
23 |
24 | {{ end }}
25 |
--------------------------------------------------------------------------------
/assets/icons/goodreads.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/steam.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/config/_default/menus.toml:
--------------------------------------------------------------------------------
1 | # -- Main Menu --
2 | # The main menu is displayed in the header at the top of the page.
3 | # Acceptable parameters are name, page, url, pre, weight.
4 |
5 | # Add a trailing '/' to local URLs.
6 | # For example: /posts/
7 | # NOT: /posts
8 |
9 | # `pre` is an icon ID. For a list of all available icons, check [https://github.com/mnjm/kayal/tree/main/assets/icons]
10 |
11 | # [[main]]
12 | # name = "posts"
13 | # title = "Posts"
14 | # url = "/posts/"
15 | # weight = 1
16 | #
17 | # [[main]]
18 | # name = "tags"
19 | # title = "Tags"
20 | # url = "/tags/"
21 | # weight = 2
22 | #
23 | # [[main]]
24 | # name = "about"
25 | # title = "About"
26 | # url = "/about/"
27 | # weight = 3
28 | #
29 | # [[main]]
30 | # name = "github"
31 | # pre = "github"
32 | # url = "https://github.com/mnjm/kayal"
33 | # weight = 4
34 |
--------------------------------------------------------------------------------
/assets/icons/researchgate.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/poo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/layouts/partials/head/js.html:
--------------------------------------------------------------------------------
1 | {{ $scripts := slice "js/theme.js" }}
2 |
3 | {{ if .Site.Params.enableCodeCopy | default false }}
4 | {{ $scripts = $scripts | append "js/codecopy.js" }}
5 | {{ end }}
6 |
7 | {{ if .Site.Params.enableSearch | default false }}
8 | {{ $scripts = $scripts | append "js/search.js" }}
9 | {{ end }}
10 |
11 | {{ range $scripts }}
12 | {{ with resources.Get . }}
13 | {{ with . | js.Build }}
14 | {{- if eq hugo.Environment "development" }}
15 |
16 | {{ else }}
17 | {{ $builtJS := . | resources.Minify | resources.Fingerprint "sha512" }}
18 |
19 | {{ end }}
20 | {{ end }}
21 | {{ end }}
22 | {{ end }}
23 |
--------------------------------------------------------------------------------
/assets/icons/scale-balanced.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/list.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/email.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/graduation-cap.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/star.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/bluesky.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/time.svg:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/assets/icons/twitter.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/shortcodes/callout.html:
--------------------------------------------------------------------------------
1 | {{ if .IsNamedParams }}
2 | {{ $.Scratch.Set "icon" (default "triangle-exclamation" (.Get "icon") ) }}
3 | {{ $.Scratch.Set "cardColor" (.Get "cardColor") }}
4 | {{ $.Scratch.Set "iconColor" (.Get "iconColor") }}
5 | {{ $.Scratch.Set "textColor" (.Get "textColor") }}
6 | {{ else }}
7 | {{ $.Scratch.Set "icon" (default "triangle-exclamation" (.Get 0) ) }}
8 | {{ end }}
9 |
10 |
15 |
20 | {{ partial "icon.html" ($.Scratch.Get "icon") }}
21 |
22 |
27 | {{ .Inner | markdownify }}
28 |
29 |
30 |
--------------------------------------------------------------------------------
/assets/js/theme.js:
--------------------------------------------------------------------------------
1 | function toggleTheme() {
2 | if (document.documentElement.className.includes('dark')) {
3 | document.documentElement.classList.remove('dark');
4 | localStorage.setItem('theme', 'light');
5 | } else {
6 | document.documentElement.classList.add('dark');
7 | localStorage.setItem('theme', 'dark');
8 | }
9 | }
10 |
11 | window.addEventListener("DOMContentLoaded", (event) => {
12 | const switcher = document.getElementById("theme-switcher");
13 | if (switcher) {
14 | switcher.addEventListener("click", () => { toggleTheme(); });
15 | }
16 | // listner to check for user's os preference changes
17 | window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (event) => {
18 | if (event.matches && localStorage.getItem('theme') === 'light') {
19 | toggleTheme();
20 | }
21 | });
22 | });
23 |
--------------------------------------------------------------------------------
/assets/icons/blogger.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/skull-crossbones.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/css/theme.css:
--------------------------------------------------------------------------------
1 | :root{
2 | --ff: 'Ubuntu';
3 | --radius: 6px;
4 | --primary-color: #292929;
5 | --secondary-color: #EFEFE6;
6 | --tertiary-color: #E0002D;
7 | --link-color: #449DD1;
8 | --tertiary-color-light: #FFB370;
9 | --secondary-color-dark: #DFDFCD;
10 | --black: #292929;
11 | --code-bg: #272822; /*Monokai*/
12 | --code-fg: #f8f8f2; /*Monokai*/
13 | --code-scroll-thumb: #525252;
14 | --scrollbar-track: #EFEFE6;
15 | --scrollbar-thumb: #B7B78F;
16 | }
17 |
18 | .dark {
19 | --primary-color: #EFEFE6;
20 | --secondary-color: #292929;
21 | --tertiary-color: #FF7F11;
22 | --tertiary-color-light: #A34C00;
23 | --secondary-color-dark: #3D3D29;
24 | --scrollbar-track: #292929;
25 | --scrollbar-thumb: #525252;
26 | }
27 |
28 | @font-face {
29 | font-display: swap;
30 | font-family: 'Ubuntu';
31 | font-style: normal;
32 | font-weight: 400;
33 | src: url('../fonts/Ubuntu-Regular.woff2') format('woff2');
34 | }
35 |
--------------------------------------------------------------------------------
/assets/icons/language.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/whatsapp.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/partials/single/pagination.html:
--------------------------------------------------------------------------------
1 | {{ if .Params.showPagination | default (.Site.Params.article.showPagination | default true) }}
2 | {{ if or .NextInSection .PrevInSection }}
3 | {{ $next := .NextInSection }}
4 | {{ $prev := .PrevInSection }}
5 | {{ if .Params.invertPagination | default (.Site.Params.article.invertPagination | default false) }}
6 | {{ $next = .PrevInSection }}
7 | {{ $prev = .NextInSection }}
8 | {{ end }}
9 |
29 | {{ end }}
30 | {{ end }}
31 |
--------------------------------------------------------------------------------
/assets/icons/reddit.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/wand-magic-sparkles.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/instagram.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/sitemap.xml:
--------------------------------------------------------------------------------
1 | {{ printf "" | safeHTML }}
2 | {{ range .Data.Pages }}{{ if not (in .Site.Params.sitemap.excludedKinds .Kind) }}{{ if and (.Param "xml" | default true) (or (not .Params.externalUrl) (and (.Params.externalUrl) (and (not (hasPrefix .Params.externalUrl "http://")) (not (hasPrefix .Params.externalUrl "https://"))))) }}{{- if .Permalink -}}{{ $link := .Permalink }}{{ if .Params.externalUrl }}{{ $link = printf "%s%s" .Site.BaseURL (substr .Params.externalUrl 1) }}{{ end }}
3 |
4 | {{ $link }}{{ if not .Lastmod.IsZero }}
5 | {{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}{{ end }}{{ with .Sitemap.ChangeFreq }}
6 | {{ . }}{{ end }}{{ if ge .Sitemap.Priority 0.0 }}
7 | {{ .Sitemap.Priority }}{{ end }}
8 | {{- end -}}{{ end }}{{ end }}{{ end }}
9 |
10 |
--------------------------------------------------------------------------------
/assets/icons/link.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/slack.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/tag-horizontal.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) [year] [fullname]
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/assets/icons/dribbble.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/partials/home/recents.html:
--------------------------------------------------------------------------------
1 | {{ $showRecent := .Site.Params.homepage.showRecent | default true }}
2 | {{ $showRecentLabel := .Site.Params.homepage.showRecentLabel | default "Recent" }}
3 | {{ $showRecentItems := .Site.Params.homepage.showRecentItems | default 3 }}
4 | {{ $showReadMore := .Site.Params.homepage.showReadMore | default true }}
5 | {{ $showMore := .Site.Params.homepage.showMore | default false }}
6 | {{ $showMoreDest := .Site.Params.homepage.showMoreDest | default "/posts" }}
7 |
8 | {{ if $showRecent }}
9 |
10 |
{{ $showRecentLabel }}
11 | {{ $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections }}
12 | {{ $paginator := .Paginate (where $pages "Params.hidden" "ne" true) }}
13 |
14 | {{ range first $showRecentItems $paginator.Pages }}
15 | {{ partial "list/card.html" (dict "page" . "lvl" 2) }}
16 | {{ end }}
17 |
18 | {{ if $showMore }}
19 |
20 |
22 | {{ end }}
23 |
24 | {{ end }}
25 |
--------------------------------------------------------------------------------
/layouts/taxonomy.html:
--------------------------------------------------------------------------------
1 | {{ define "main" }}
2 | {{ $showCount := .Params.showCount | default (.Site.Params.taxonomy.showCount | default true) }}
3 | {{ $cardView := .Params.cardView | default (.Site.Params.taxonomy.cardView | default false) }}
4 | {{/* Display content if any */}}
5 | {{ .Content }}
6 | {{ .Title | emojify }}
7 | {{ if not $cardView }}
8 |
32 | {{ end }}
33 |
--------------------------------------------------------------------------------
/assets/icons/threads.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/icons/stripe.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/config/_default/hugo.toml:
--------------------------------------------------------------------------------
1 | # -- Site Configuration --
2 |
3 | # URL to the root of your website.
4 | # baseURL = "https://your_domain.com/"
5 |
6 | # Site's language code
7 | languageCode = 'en-us'
8 |
9 | # title = "Site Title"
10 |
11 | # theme = "kayal" # UNCOMMENT THIS LINE
12 |
13 | # Number of articles per page in the listing.
14 | [pagination]
15 | pagerSize = 5
16 |
17 | # Enable processing of emojis in markdown.
18 | enableEmoji = true
19 |
20 | # Enable creation of robots.txt for search engine crawling.
21 | enableRobotsTXT = true
22 |
23 | # Length of default summaries.
24 | summaryLength = 0
25 |
26 | # Build drafts during site generation.
27 | buildDrafts = true
28 | # Build pages with future dates during site generation.
29 | buildFuture = true
30 |
31 | # The types of outputs to generate for the homepage.
32 | # RSS is required to create RSS feeds, and JSON is needed for the search to function.
33 | [outputs]
34 | home = ["HTML", "RSS", "JSON"]
35 |
36 | # Sitemap setting
37 | [sitemap]
38 | changefreq = 'daily'
39 | filename = 'sitemap.xml'
40 | priority = 0.5
41 |
42 | # Google Analytics Configuration
43 | # [services]
44 | # [services.googleAnalytics]
45 | # ID = 'G-MEASUREMENT_ID'
46 |
--------------------------------------------------------------------------------
/layouts/shortcodes/codeimport.html:
--------------------------------------------------------------------------------
1 | {{ $url := .Get "url" }}
2 | {{ $type := .Get "type" }}
3 | {{ $startLine := .Get "startLine" | default 1 | int }}
4 | {{ $startLine = sub $startLine 1 }}
5 | {{ $endLine := .Get "endLine" | default -1 | int }}
6 | {{ $showLineNos := .Get "showLineNos" | default false }}
7 | {{ $selectedLines := slice }}
8 | {{ with resources.GetRemote (urls.Parse $url) }}
9 | {{ $lines := split .Content "\n" }}
10 | {{ $totalLine := $lines | len }}
11 | {{ if ne $endLine -1 }}
12 | {{ $endLine = math.Min $endLine $totalLine }}
13 | {{ else }}
14 | {{ $endLine = $totalLine }}
15 | {{ end }}
16 | {{ if gt $startLine $endLine }}
17 | {{ errorf "Code Importer Shortcode - startLine is greater than endLine" . }}
18 | {{ end }}
19 | {{ $selectedLines := first $endLine $lines }}
20 | {{ $selectedLines = after $startLine $selectedLines }}
21 | {{ if $showLineNos }}
22 | {{ $type = printf "%s {linenos=true,linenostart=%d}" $type (add $startLine 1) }}
23 | {{ end }}
24 | {{ $codeBlock := printf "```%s\n%s\n```" $type (delimit $selectedLines "\n") }}
25 | {{ $codeBlock | markdownify }}
26 | {{ else }}
27 | {{ errorf "Code Importer Shortcode - Unable to get remote resource" . }}
28 | {{ end }}
29 |
--------------------------------------------------------------------------------
/layouts/single.html:
--------------------------------------------------------------------------------
1 | {{ define "main" }}
2 |
3 | {{/* Cover Image */}}
4 | {{ if .Params.coverImg }}
5 | {{ $imgData := dict "Page" . "URL" .Params.coverImg "Alt" "Cover Image" "Style" "cover-img" "Loading" "eager" }}
6 | {{ partial "image-renderer.html" $imgData }}
7 | {{ end }}
8 |
9 | {{/* Breadcrumbs */}}
10 | {{ if .Params.showBreadcrumbs | default (.Site.Params.article.showBreadcrumbs | default false ) }}
11 | {{ partial "breadcrumbs.html" . }}
12 | {{ end }}
13 |
14 | {{ .Title | emojify }}
15 |
16 | {{/* Meta */}}
17 |
18 | {{ partial "single/meta.html" . }}
19 | {{ partial "single/meta-tags.html" . }}
20 |
21 |
22 | {{ partial "single/toc.html" . }}
23 |
24 | {{ .Content }}
25 |
26 | {{/* Pagination */}}
27 | {{ partial "single/pagination.html" . }}
28 |
29 | {{/* Comments */}}
30 | {{ if .Params.showComments | default (.Site.Params.article.showComments | default false) }}
31 | {{ if templates.Exists "partials/comments.html" }}
32 |
35 | {{ else }}
36 | {{ warnf "Comments are enabled for %s but no comments partial exists." .File.Path }}
37 | {{ end }}
38 | {{ end }}
39 |
40 | {{ end }}
41 |
--------------------------------------------------------------------------------
/assets/icons/bug.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/discord.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/github.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/globe.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/layouts/partials/single/meta.html:
--------------------------------------------------------------------------------
1 | {{ $showDate := .Params.showDate | default (.Site.Params.article.showDate | default true) }}
2 | {{ $showModDate := .Params.showModDate | default (.Site.Params.article.showModDate | default false) }}
3 | {{ $showReadingTime := .Params.showReadingTime | default (.Site.Params.article.showReadingTime | default true) }}
4 |
5 |
6 | {{/* Date Reading time and Draft label */}}
7 | {{ if $showDate }}
8 | {{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
9 | {{ $dateHuman := .Date | time.Format "Jan 2, 2006" }}
10 | {{ partial "icon.html" "calender" }}
11 | Posted on
12 | {{ $dateModMachine := .Lastmod | time.Format "2006-01-02T15:04:05-07:00" }}
13 | {{ $dateModHuman := .Lastmod | time.Format "Jan 2, 2006" }}
14 | {{ if and $showModDate (ne $dateModHuman $dateHuman) }}
15 | {{ partial "icon.html" "pencil" }}
16 | Last edited
17 | {{ end }}
18 | {{ end }}
19 | {{ if $showReadingTime }}
20 | {{ partial "icon.html" "time" }}
21 | {{ if gt .ReadingTime 1 }}
22 | {{ printf "%s mins" (.ReadingTime | markdownify) }}
23 | {{ else }}
24 | {{ printf "%s min" (.ReadingTime | markdownify) }}
25 | {{ end }}
26 | {{ end}}
27 | {{ if .Draft }}
28 | {{ partial "icon.html" "edit" }}DRAFT
29 | {{ end }}
30 |
31 |
--------------------------------------------------------------------------------
/layouts/partials/list/main.html:
--------------------------------------------------------------------------------
1 | {{ $groupByYear := .args.groupByYear }}
2 | {{ $cardView := .args.cardView }}
3 | {{ $showBreadcrumbs := .args.showBreadcrumbs }}
4 | {{ $showRSS := .args.showRSS }}
5 |
6 | {{ $partial := "list/basic.html" }}
7 | {{ $class := "lst-basic" }}
8 | {{ if $cardView }}
9 | {{ $partial = "list/card.html" }}
10 | {{ $class = "lst-card" }}
11 | {{ end }}
12 |
13 | {{ with .context }}
14 | {{/* Breadcrumbs */}}
15 | {{ if $showBreadcrumbs }}
16 | {{ partial "breadcrumbs.html" . }}
17 | {{ end }}
18 |
19 | {{ .Title | emojify }}
20 | {{ if $showRSS }}
21 | {{ with .OutputFormats.Get "rss" }}
22 |
23 | {{ partial "icon.html" "rss" }}
24 |
25 | {{ end }}
26 | {{ end }}
27 |
28 | {{ .Content }}
29 |
30 | {{ if $groupByYear }}
31 | {{ range (.Paginate (.Pages.GroupByDate "2006")).PageGroups }}
32 | {{ .Key }}
33 |
34 | {{ range .Pages.ByWeight }}
35 | {{ partial $partial (dict "page" . "lvl" "3") }}
36 | {{ end }}
37 |
38 | {{ end }}
39 | {{ else }}
40 |
41 | {{ range (.Paginate .Pages).Pages }}
42 | {{ partial $partial (dict "page" . "lvl" "2") }}
43 | {{ end }}
44 |
45 | {{ end }}
46 | {{ template "_internal/pagination.html" . }}
47 |
48 | {{ end }}
49 |
--------------------------------------------------------------------------------
/assets/icons/keybase.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/partials/search.html:
--------------------------------------------------------------------------------
1 | {{ if .Site.Params.enableSearch | default false }}
2 |
5 | {{ end }}
6 |
7 |
8 |
9 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/assets/icons/ko-fi.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
22 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "kayal",
3 | "version": "0.3.9",
4 | "description": "Minimal and lightweight Hugo theme with markdown-ish aesthetics",
5 | "scripts": {
6 | "postinstall": "vendor-copy",
7 | "demo": "cd exampleSite; hugo --gc --themesDir ../.. serve -D -O --disableFastRender -b http://localhost:1313; rm -r public ; cd ..",
8 | "demo-build": "cd exampleSite; hugo --gc --themesDir ../.. -D; cd ..",
9 | "demo-clean": "rm -r exampleSite/public exampleSite/resources"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/mnjm/kayal.git"
14 | },
15 | "keywords": [
16 | "hugo",
17 | "hugo-theme"
18 | ],
19 | "author": "mnjm",
20 | "license": "MIT",
21 | "bugs": {
22 | "url": "https://github.com/mnjm/kayal/issues"
23 | },
24 | "homepage": "https://github.com/mnjm/kayal#readme",
25 | "dependencies": {
26 | "fuse.js": "^7.1.0",
27 | "katex": "^0.16.25",
28 | "mermaid": "^11.12.1",
29 | "vendor-copy": "^3.0.1"
30 | },
31 | "vendorCopy": [],
32 | "devVendorCopy": [
33 | {
34 | "from": "node_modules/mermaid/dist/mermaid.min.js",
35 | "to": "assets/lib/mermaid/mermaid.min.js"
36 | },
37 | {
38 | "from": "node_modules/katex/dist/katex.min.js",
39 | "to": "assets/lib/katex/katex.min.js"
40 | },
41 | {
42 | "from": "node_modules/katex/dist/katex.min.css",
43 | "to": "assets/lib/katex/katex.min.css"
44 | },
45 | {
46 | "from": "node_modules/katex/dist/contrib/auto-render.min.js",
47 | "to": "assets/lib/katex/auto-render.min.js"
48 | },
49 | {
50 | "from": "node_modules/katex/dist/fonts/",
51 | "to": "assets/lib/katex/fonts/"
52 | },
53 | {
54 | "from": "node_modules/fuse.js/dist/fuse.min.js",
55 | "to": "assets/lib/fuse/fuse.min.js"
56 | }
57 | ]
58 | }
59 |
--------------------------------------------------------------------------------
/layouts/partials/head/vendor.html:
--------------------------------------------------------------------------------
1 | {{/* Katex */}}
2 | {{ if .Page.HasShortcode "katex" }}
3 | {{ $katexCSS := resources.Get "lib/katex/katex.min.css" }}
4 | {{ $katexCSS := $katexCSS | resources.Fingerprint "sha512" }}
5 |
6 | {{ $katexJS := resources.Get "lib/katex/katex.min.js" }}
7 | {{ $katexJS := $katexJS | resources.Fingerprint "sha512" }}
8 |
9 | {{ $katexRenderJS := resources.Get "lib/katex/auto-render.min.js" }}
10 | {{ $katexRenderJS := $katexRenderJS | resources.Fingerprint "sha512" }}
11 |
13 | {{ $katexFonts := resources.Match "lib/katex/fonts/*" }}
14 | {{ range $katexFonts }}
15 |
16 | {{ end }}
17 | {{ end }}
18 |
19 | {{/* Mermaid */}}
20 | {{ if .Page.HasShortcode "mermaid" }}
21 | {{ $mermaidLib := resources.Get "lib/mermaid/mermaid.min.js" }}
22 | {{ $mermaidConfig := resources.Get "js/mermaid.js" }}
23 | {{ $mermaidConfig := $mermaidConfig | resources.Minify }}
24 | {{ $mermaidJS := slice $mermaidLib $mermaidConfig | resources.Concat "js/mermaid.bundle.js" | resources.Fingerprint "sha512" }}
25 |
31 | {{ end }}
32 |
33 | {{/* Fuse */}}
34 | {{ if .Site.Params.enableSearch | default false }}
35 | {{ if and .IsHome (not (.OutputFormats.Get "JSON")) }}
36 | {{ errorf "Search is enabled. Add 'JSON' to outputs.home in hugo.toml" }}
37 | {{ end }}
38 | {{ with resources.Get "lib/fuse/fuse.min.js" | resources.Fingerprint "sha512" }}
39 |
45 | {{ end }}
46 | {{ end }}
47 |
--------------------------------------------------------------------------------
/assets/icons/soundcloud.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icons/itch-io.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/layouts/partials/image-renderer.html:
--------------------------------------------------------------------------------
1 | {{ $optimizeImg := .Page.Site.Params.optimizeImg | default true }}
2 | {{ $url := urls.Parse .URL }}
3 | {{ $altText := .Alt }}
4 | {{ $caption := .Caption }}
5 | {{ $style := .Style }}
6 | {{ $size := .Size }}
7 | {{ $loading := .Loading }}
8 |
9 | {{/* Exclude types list */}}
10 | {{ $excludeTypes := slice "svg" }}
11 | {{ if not hugo.IsExtended }}
12 | {{ $excludeTypes = $excludeTypes | append "webp" }}
13 | {{ end }}
14 |
15 | {{ if $caption }}{{ end }}
16 | {{/* Optimize only local image */}}
17 | {{ if not (findRE "^https?" $url.Scheme) }}
18 |
19 | {{ $imgResrc := .Page.Resources.GetMatch $url.String }}
20 | {{/* Fetch from global asset if image not found in page bundle */}}
21 | {{ if not $imgResrc }}
22 | {{ $imgResrc = resources.GetMatch $url.String }}
23 | {{ end }}
24 |
25 | {{ with $imgResrc }}
26 |
58 | {{ end }}
59 |
60 | {{ else }}
61 |
62 | {{ end }}
63 | {{ with $caption }}{{ . | markdownify }}{{ end }}
64 |
--------------------------------------------------------------------------------
/.github/workflows/main.yaml:
--------------------------------------------------------------------------------
1 | # Sample workflow for building and deploying a Hugo site to GitHub Pages
2 | name: Deploy to GH Pages
3 |
4 | on:
5 | # Runs on pushes targeting the default branch
6 | push:
7 | branches:
8 | - main
9 |
10 | # Allows you to run this workflow manually from the Actions tab
11 | workflow_dispatch:
12 |
13 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
14 | permissions:
15 | contents: read
16 | pages: write
17 | id-token: write
18 |
19 | # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
20 | # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
21 | concurrency:
22 | group: "pages"
23 | cancel-in-progress: false
24 |
25 | # Default to bash
26 | defaults:
27 | run:
28 | shell: bash
29 |
30 | jobs:
31 | # Build job
32 | build:
33 | runs-on: ubuntu-latest
34 | env:
35 | HUGO_VERSION: 0.147.9
36 | steps:
37 | - name: Install Hugo CLI
38 | run: |
39 | wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
40 | && sudo dpkg -i ${{ runner.temp }}/hugo.deb
41 | - name: Checkout
42 | uses: actions/checkout@v4
43 | with:
44 | fetch-depth: 0
45 | - name: Clone Demo Site
46 | run: git clone https://github.com/mnjm/kayal.git exampleSite --depth 1 --single-branch --branch exampleSite
47 | - name: Setup Pages
48 | id: pages
49 | uses: actions/configure-pages@v5
50 | - name: Install Node.js dependencies
51 | run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
52 | - name: Build with Hugo
53 | env:
54 | # For maximum backward compatibility with Hugo modules
55 | HUGO_ENVIRONMENT: production
56 | HUGO_ENV: production
57 | TZ: America/Los_Angeles
58 | run: |
59 | npm run demo-build
60 | - name: Upload artifact
61 | uses: actions/upload-pages-artifact@v3
62 | with:
63 | path: ./exampleSite/public
64 |
65 | # Deployment job
66 | deploy:
67 | environment:
68 | name: github-pages
69 | url: ${{ steps.deployment.outputs.page_url }}
70 | runs-on: ubuntu-latest
71 | needs: build
72 | steps:
73 | - name: Deploy to GitHub Pages
74 | id: deployment
75 | uses: actions/deploy-pages@v4
76 |
--------------------------------------------------------------------------------
/assets/js/codecopy.js:
--------------------------------------------------------------------------------
1 | var copyText = "";
2 | var copiedText = "Copied! ";
3 |
4 | function createCopyButton(codeblock) {
5 | const container = codeblock.parentNode.parentNode;
6 |
7 | const copybutton = document.createElement('button');
8 | copybutton.classList.add('copy-button');
9 | copybutton.innerHTML = copyText;
10 |
11 | function copyingDone() {
12 | copybutton.innerHTML = copiedText;
13 | setTimeout(() => {
14 | copybutton.innerHTML = copyText;
15 | }, 500);
16 | }
17 |
18 | copybutton.addEventListener('click', (cb) => {
19 | if ('clipboard' in navigator) {
20 | navigator.clipboard.writeText(codeblock.textContent);
21 | copyingDone();
22 | return;
23 | }
24 |
25 | const range = document.createRange();
26 | range.selectNodeContents(codeblock);
27 | const selection = window.getSelection();
28 | selection.removeAllRanges();
29 | selection.addRange(range);
30 | try {
31 | document.execCommand('copy');
32 | copyingDone();
33 | } catch (e) { };
34 | selection.removeRange(range);
35 | });
36 |
37 | if (container.classList.contains("highlight")) {
38 | container.appendChild(copybutton);
39 | } else if (container.parentNode.firstChild == container) {
40 | // td containing LineNos
41 | } else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
42 | // table containing LineNos and code
43 | codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
44 | } else {
45 | // code blocks not having highlight as parent class
46 | codeblock.parentNode.appendChild(copybutton);
47 | }
48 | }
49 |
50 | window.addEventListener("DOMContentLoaded", (event) => {
51 | document.querySelectorAll("pre > code").forEach((codeblock) => createCopyButton(codeblock));
52 | });
53 |
--------------------------------------------------------------------------------
/assets/icons/gitlab.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/layouts/rss.xml:
--------------------------------------------------------------------------------
1 | {{- $pctx := . }}
2 | {{- if .IsHome }}{{ $pctx = site }}{{ end }}
3 | {{- $pages := slice }}
4 | {{- if or $.IsHome $.IsSection }}
5 | {{- $pages = $pctx.RegularPages }}
6 | {{- else }}
7 | {{- $pages = $pctx.Pages }}
8 | {{- end }}
9 | {{- $limit := site.Config.Services.RSS.Limit }}
10 | {{- if ge $limit 1 }}
11 | {{- $pages = $pages | first $limit }}
12 | {{- end }}
13 | {{- printf "" | safeHTML }}
14 |
15 |
16 | {{ if eq .Title site.Title }}{{ site.Title }}{{ else }}{{ with .Title }}{{ . }} on {{ end }}{{ site.Title }}{{ end }}
17 | {{ .Permalink }}
18 | Recent content {{ if ne .Title site.Title }}{{ with .Title }}in {{ . }} {{ end }}{{ end }}on {{ site.Title }}
19 | {{- with site.Params.images }}
20 |
21 | {{ site.Title }}
22 | {{ index . 0 | absURL }}
23 | {{ index . 0 | absURL }}
24 |
25 | {{- end }}
26 | Hugo -- {{ hugo.Version }}
27 | {{ site.Language.LanguageCode }}{{ with site.Params.Author.email }}
28 | {{.}}{{ with site.Params.Author.name }} ({{ . }}){{ end }}{{ end }}{{ with site.Params.Author.email }}
29 | {{ . }}{{ with site.Params.Author.name }} ({{ . }}){{ end }}{{ end }}{{ with site.Copyright }}
30 | {{ . | markdownify | plainify | strings.TrimPrefix "© " }}{{ end }}{{ if not .Date.IsZero }}
31 | {{ (index $pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }}
32 | {{- with .OutputFormats.Get "RSS" }}
33 | {{ printf "" .Permalink .MediaType | safeHTML }}
34 | {{- end }}
35 | {{- range $pages }}
36 | -
37 | {{ .Title }}
38 | {{ .Permalink }}
39 | {{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}
40 | {{- with site.Params.Author.email }}{{ . }}{{ with site.Params.Author.name }} ({{ . }}){{ end }}{{ end }}
41 | {{ .Permalink }}
42 | {{ with .Description | plainify | htmlUnescape }}{{ . }}{{ else }}{{ .Summary | plainify | htmlUnescape }}{{ end -}}
43 | {{- if and site.Params.ShowFullTextinRSS .Content }}
44 | {{ (printf "" .Content) | safeHTML }}
45 | {{- end }}
46 |
47 | {{- end }}
48 |
49 |
50 |
--------------------------------------------------------------------------------
/layouts/partials/header.html:
--------------------------------------------------------------------------------
1 |
83 |
--------------------------------------------------------------------------------
/assets/icons/snapchat.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/lib/katex/auto-render.min.js:
--------------------------------------------------------------------------------
1 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={757:function(t){t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,r),i.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o={};r.d(o,{default:function(){return p}});var i=r(757),a=r.n(i);const l=function(e,t,n){let r=n,o=0;const i=e.length;for(;re.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))).join("|")+")");for(;n=e.search(o),-1!==n;){n>0&&(r.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));const o=t.findIndex((t=>e.startsWith(t.left)));if(n=l(t[o].right,e,t[o].left.length),-1===n)break;const i=e.slice(0,n+t[o].right.length),a=s.test(i)?i:e.slice(t[o].left.length,n);r.push({type:"math",data:a,rawData:i,display:t[o].display}),e=e.slice(n+t[o].right.length)}return""!==e&&r.push({type:"text",data:e}),r};const c=function(e,t){const n=d(e,t.delimiters);if(1===n.length&&"text"===n[0].type)return null;const r=document.createDocumentFragment();for(let e=0;e-1===e.indexOf(" "+t+" ")))&&f(r,t)}}};var p=function(e,t){if(!e)throw new Error("No element provided to render");const n={};for(const e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);n.delimiters=n.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],n.ignoredTags=n.ignoredTags||["script","noscript","style","textarea","pre","code","option"],n.ignoredClasses=n.ignoredClasses||[],n.errorCallback=n.errorCallback||console.error,n.macros=n.macros||{},f(e,n)};return o=o.default}()}));
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Kayal
2 |
3 | Kayal is a Hugo theme designed to be minimal and lightweight, with markdown-ish aesthetics for personal blog sites.
4 |
5 | 🌐Demo site
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | | Desktop | Mobile |
14 | | ---- | ---- |
15 | |||
16 |
17 | Source for the Demo site is available in [exampleSite](https://github.com/mnjm/kayal/tree/exampleSite) branch.
18 |
19 | ## Features
20 | - Clean and Responsive Design
21 | - Light and Dark Color Modes: Automatically adjusts based on browser preferences and/or manual toggle.
22 | - Profile Homepage
23 | - Customizable Configuration: Easily adjust settings to personalize
24 | - Shortcodes: Includes Callouts, Markdown and Code import from 3rd Party sites.
25 | - KaTeX Support
26 | - Mermaid Diagrams Support
27 | - Client-side search powered by [Fuse.js](https://www.fusejs.io/)
28 | - Cross-linking: Ability to link posts on third party sites.
29 | - RSS Feed
30 | - Table of Contents
31 | - Code Copy
32 | - Heading Anchors
33 | - Google Analytics
34 | - SVG Icons from FontAwesome 6
35 | - SEO Friendly.
36 | - Breadcrumbs
37 | - Article Cover image
38 | - Responsive Image optimization
39 | - Extensibility: Includes placeholders for
40 | - Custom Homepage
41 | - Other Analytics
42 | - Comments
43 | - Custom CSS
44 | - Custom header
45 | - Site hosted assets / no CDNs
46 | - And many more...
47 |
48 | ## Installation
49 | Kayal supports several installation methods: as a git submodule, a Hugo Module, or through manual installation.
50 |
51 | Detailed instructions on how to install Kayal can be found in [Installation](https://mnjm.github.io/kayal/docs/getting-started/) on the demo site. Here's a quick guide on how to install the theme as a git submodule:
52 |
53 | 1. In your Hugo site directory, run the following command:
54 |
55 | ```bash
56 | git submodule add -b main https://github.com/mnjm/kayal.git themes/kayal
57 | ```
58 |
59 | 2. Copy config files from `themes/kayal/config/_default` to `config/_default` at the root of your Hugo project. Make necessary configuration changes in these files. Refer to [Configuration](https://mnjm.github.io/kayal/docs/configuration/) on the demo site for more information.
60 | 3. Remove `hugo.toml` if present, and build the site.
61 |
62 | ## Configuration
63 |
64 | The config files included with Kayal contain all possible settings recognized by the theme. By default, many of these settings are commented out, but you can simply uncomment them to activate or modify.
65 |
66 | Refer to [Configuration](https://mnjm.github.io/kayal/docs/configuration/) on the demo site for more details.
67 |
68 | ## Contribution
69 | Found a bug or have a new feature idea? Create an issue to let me know, or even better, submit a pull request directly!
70 |
71 | ## Addendum
72 | While building this theme, I constantly referred to the source codes of [Blowfish](https://github.com/nunocoracao/blowfish) and [Hugo-PaperMod](https://github.com/adityatelange/hugo-PaperMod). The idea for using markdown aesthetics came from [Archie](https://github.com/mnjm/archie), another Hugo theme.
73 |
74 | ## License
75 | This theme is released under the [MIT License](./LICENSE).
76 |
--------------------------------------------------------------------------------
/layouts/partials/head.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{/* Title */}}
8 | {{ if .IsHome }}
9 | {{ .Site.Title | emojify }} · Home
10 |
11 | {{ else }}
12 | {{ .Title | emojify }} · {{ .Site.Title | emojify }}
13 |
14 | {{ end }}
15 |
16 | {{/* Metadata */}}
17 | {{ with (.Params.Summary | default .Params.Description) | default .Site.Params.description }}
18 |
19 | {{ end }}
20 | {{ with .Params.Tags | default .Site.Params.keywords -}}
21 |
22 | {{- end }}
23 |
24 |
25 | {{ partialCached "head/css.html" . }}
26 |
27 | {{/* Icons */}}
28 | {{ if templates.Exists "partials/favicons.html" }}
29 | {{ partialCached "favicons.html" .Site }}
30 | {{ else }}
31 |
32 |
33 |
34 |
35 | {{ end }}
36 |
37 | {{ range .AlternativeOutputFormats -}}
38 | {{ printf `` .Rel .MediaType.Type .RelPermalink ($.Site.Title | emojify) | safeHTML }}
39 | {{ end -}}
40 |
41 | {{ template "_internal/opengraph.html" . }}
42 | {{ with .Params.coverImg }}
43 |
44 | {{ end }}
45 | {{ template "_internal/twitter_cards.html" . }}
46 | {{ with .Params.coverImg }}
47 |
48 | {{ end }}
49 |
50 | {{/* vendor */}}
51 | {{ partial "head/vendor.html" . }}
52 |
53 | {{/* analytics */}}
54 | {{ partialCached "analytics/main.html" . }}
55 |
56 | {{/* Site Verification */}}
57 | {{ with .Site.Params.verification.google }}
58 |
59 | {{ end }}
60 | {{ with .Site.Params.verification.bing }}
61 |
62 | {{ end }}
63 | {{ with .Site.Params.verification.pinterest }}
64 |
65 | {{ end }}
66 | {{ with .Site.Params.verification.yandex }}
67 |
68 | {{ end }}
69 |
70 | {{/* Preload fonts */}}
71 | {{ $fonts := .Site.Params.preloadFonts | default (slice "fonts/Ubuntu-Regular.woff2") }}
72 | {{ range $fonts }}
73 |
74 | {{ end }}
75 |
76 | {{ if templates.Exists "partials/extend-head.html" }}
77 | {{ partialCached "extend-head.html" .Site }}
78 | {{ end }}
79 |
80 | {{ with .OutputFormats.Get "rss" -}}
81 | {{ printf `` .Rel .MediaType.Type .Permalink site.Title | safeHTML }}
82 | {{ end }}
83 |
84 |
85 |
98 |
99 |
--------------------------------------------------------------------------------
/config/_default/params.toml:
--------------------------------------------------------------------------------
1 | # -- Theme Options --
2 | # These options control how the theme functions and allow you to customize the display of your website.
3 | # Refer to the theme docs for more details about each of these parameters.
4 | # https://mnjm.github.io/kayal/docs/configuration/#theme-parameters
5 |
6 | # [Optional] Path to the site logo image relative to assets/ folder. Displayed before the Site Title in the header. Minimum size: 64x64px.
7 | # logo = "/imgs/logo.png"
8 | # Site description.
9 | description = "A Hugo Theme"
10 | # [Optional] Copyright owner name.
11 | copyright = ""
12 | # Whether to optimize images per view port.
13 | optimizeImg = true
14 | # Whether to enable copy button in code blocks.
15 | enableCodeCopy = true
16 | # Show the icon that switches between dark and light themes when clicked.
17 | showThemeSwitcher = true
18 | # Default theme to start from. If "auto", it detects the previous preference/system theme.
19 | defaultTheme = "auto" # Valid Options: light, dark, auto
20 | # When enabled, highlight the current menu item in the menu bar.
21 | highlightCurrentMenu = true
22 | # The sections to display in the recent articles list. If not provided, the section with the most articles is used.
23 | mainSections = ["posts"]
24 | # Whether to remove Hugo and theme attribution in the footer.
25 | removeAttribution = false
26 | # Add the last build date (i.e., the last updated date) to the footer.
27 | lastUpdate = false
28 | # Whether to show anchor links in headings. Can be overridden by Page-specific `showHeadingAnchors` in its front matter.
29 | showHeadingAnchors = true
30 | # Whether to enable search. Needs JSON output for this to work.
31 | enableSearch = true
32 |
33 | # Site search engine verification tags.
34 | # [verification]
35 | # google = ""
36 | # bing = ""
37 | # pinterest = ""
38 | # yandex = ""
39 |
40 | # Homepage settings
41 | [homepage]
42 | # Whether to show recent items on the homepage.
43 | showRecent = true
44 | # Heading label for recent items.
45 | showRecentLabel = "Featured"
46 | # Number of recent items to show.
47 | showRecentItems = 4
48 | # Whether to display a "Show more" link at the end of recent section that directs to `showMoreDest`.
49 | showMore = true
50 | showMoreDest = "/posts"
51 | [homepage.profile]
52 | # [Optional] Displayed at the top of your homepage.
53 | # headline = "👋 Welcome to my site"
54 | # [Optional] Path to the profile image relative to assets/ folder. Minimum size: 200x200px.
55 | # image = "imgs/profile.svg"
56 | # Image position.
57 | where = "right" # Options: right, left, top
58 |
59 | # Article settings
60 | [article]
61 | # Whether to display article dates.
62 | showDate = true
63 | # Whether to display modified dates of articles.
64 | showModDate = true
65 | # Whether to display reading time of articles.
66 | showReadingTime = true
67 | # Whether to display tags mentioned in the front matter.
68 | showTags = true
69 | # Whether to display next/previous article links in the article footer.
70 | showPagination = true
71 | # Whether to reverse the direction of next/previous article links.
72 | invertPagination = true
73 | # Whether to display the table of contents on articles.
74 | showToC = true
75 | # Whether to open the Table of Contents when the page is loaded.
76 | openToC = false
77 | # Check https://mnjm.github.io/kayal/docs/advanced-customization/#comments
78 | showComments = false
79 | # Whether to display breadcrumbs
80 | showBreadcrumbs = false
81 |
82 | # List template settings
83 | [list]
84 | # Whether to group articles by year.
85 | groupByYear = false
86 | # Whether to display breadcrumbs
87 | showBreadcrumbs = false
88 | # Whether to display pages as a card
89 | cardView = true
90 | # Whether to display thumbnail in list card view.
91 | showThumbnail = false
92 | # Whether to display RSS link
93 | showRSS = false
94 |
95 | # Taxonomy settings
96 | [taxonomy]
97 | # Whether to show counts of each taxonomy term.
98 | showCount = true
99 | # Whether to display taxonomies as a grid of cards.
100 | cardView = true
101 |
102 | # Term settings
103 | [term]
104 | # Whether to group articles by year.
105 | groupByYear = false
106 | # Whether to display breadcrumbs
107 | showBreadcrumbs = false
108 | # Whether to display pages as a card
109 | cardView = true
110 | # Whether to display RSS link
111 | showRSS = false
112 |
113 | # Social links
114 | # [[social]]
115 | # name = "GitHub"
116 | # icon = "github"
117 | # url = "https://github.com/mnjm/kayal"
118 | #
119 | # [[social]]
120 | # name = "Email"
121 | # icon = "email"
122 | # url = "mailto:name@example.com"
123 | #
124 | # [[social]]
125 | # name = "Twitter / X"
126 | # icon = "x-twitter"
127 | # url = "https://x.com/sample"
128 |
--------------------------------------------------------------------------------
/assets/js/search.js:
--------------------------------------------------------------------------------
1 | var seachOpnBtn = null;
2 | var closeBtn = null;
3 | var searchCntr = null;
4 | var resultCntr = null;
5 | var searchBtn = null;
6 | var searchTxt = null;
7 | var isSearchOpen = false;
8 | var isJsonIndexed = false;
9 | var isResEmpty = true;
10 | var fuse;
11 |
12 | function fetchJSON(path, callback) {
13 | var httpRequest = new XMLHttpRequest();
14 | httpRequest.onreadystatechange = function () {
15 | if (httpRequest.readyState === 4) {
16 | if (httpRequest.status === 200) {
17 | var data = JSON.parse(httpRequest.responseText);
18 | if (callback) callback(data);
19 | }
20 | }
21 | };
22 | httpRequest.open("GET", path);
23 | httpRequest.send();
24 | }
25 |
26 | function buildIndex() {
27 | var baseURL = searchCntr.getAttribute("data-url");
28 | baseURL = baseURL.replace(/\/?$/, "/");
29 | fetchJSON(baseURL + "index.json", function (data) {
30 | var options = {
31 | shouldSort: true,
32 | ignoreLocation: true,
33 | threshold: 0.0,
34 | includeMatches: true,
35 | keys: [
36 | { name: "title", weight: 0.8 },
37 | { name: "section", weight: 0.2 },
38 | { name: "summary", weight: 0.6 },
39 | { name: "content", weight: 0.4 },
40 | ],
41 | };
42 | fuse = new Fuse(data, options);
43 | isJsonIndexed = true;
44 | });
45 | }
46 |
47 | function openSearch() {
48 | if (!isJsonIndexed) {
49 | buildIndex();
50 | }
51 | if (!isSearchOpen) {
52 | searchCntr.style.display = "flex";
53 | document.body.style.overflow = "hidden";
54 | resultCntr.innerHTML = "";
55 | isSearchOpen = true;
56 | searchTxt.focus();
57 | }
58 | }
59 |
60 | function closeSearch() {
61 | if (isSearchOpen) {
62 | searchCntr.style.display = "none";
63 | document.body.style.overflow = "";
64 | searchTxt.value = "";
65 | isSearchOpen = false;
66 | }
67 | }
68 |
69 | function executeQuery(query) {
70 | let results = fuse.search(query);
71 | let resultsHtml = "";
72 | if (results.length >= 1) {
73 | results.forEach(function (value, key) {
74 | var meta = value.item.section + " | ";
75 | meta = meta + value.item.date ? value.item.date + " | ": "";
76 | meta = meta + `${value.item.permalink}`
77 |
78 | // Highlight search results
79 | const markedTitle = value.item.title.replace(RegExp(`(${query})`, 'gi'), "$1");
80 | const markedSummary = value.item.summary.replace(RegExp(`(${query})`, 'gi'), "$1");
81 |
82 | resultsHtml =
83 | resultsHtml +
84 | `-
85 |
${markedTitle}
86 | ${meta}
87 | ${markedSummary}
88 | `;
89 | });
90 | isResEmpty = false;
91 | } else {
92 | if(query === ""){
93 | resultsHtml = "";
94 | }
95 | else{
96 | resultsHtml = `No results for ${query}
`;
97 | }
98 | isResEmpty = true;
99 | }
100 |
101 | resultCntr.innerHTML = resultsHtml;
102 | }
103 |
104 | window.addEventListener("DOMContentLoaded", (event) => {
105 | seachOpnBtn = document.getElementById("search-open");
106 | searchBtn = document.getElementById("search-btn");
107 | closeBtn = document.getElementById("search-close");
108 | searchCntr = document.getElementById("search-container");
109 | resultCntr = document.getElementById("search-results");
110 | searchTxt = document.getElementById("search-query");
111 |
112 | seachOpnBtn.addEventListener("click", openSearch);
113 | closeBtn.addEventListener("click", (event) => {
114 | event.preventDefault();
115 | closeSearch();
116 | });
117 |
118 | searchTxt.onkeyup = function (event) {
119 | executeQuery(this.value);
120 | };
121 |
122 | searchTxt.onkeydown = function (event) {
123 | if (event.key == "Enter" && !isResEmpty) {
124 | // Enter to focus on the first search result
125 | resultCntr.firstChild.firstElementChild.focus();
126 | event.preventDefault();
127 | }
128 | };
129 | });
130 |
131 | document.addEventListener("keydown", function (event) {
132 | if (event.key == "/" && !isSearchOpen) {
133 | event.preventDefault();
134 | openSearch();
135 | }
136 |
137 | if (isSearchOpen) {
138 | if (event.key == "Escape") {
139 | event.preventDefault();
140 | closeSearch();
141 | } else if (event.key == "ArrowDown" && !isResEmpty) {
142 | if (document.activeElement == searchTxt) {
143 | resultCntr.firstChild.firstElementChild.focus();
144 | } else if (
145 | document.activeElement == resultCntr.lastChild.firstElementChild
146 | ) {
147 | searchTxt.focus();
148 | } else {
149 | document.activeElement.parentElement.nextSibling.firstElementChild.focus();
150 | }
151 | event.preventDefault();
152 | } else if (event.key == "ArrowUp" && !isResEmpty) {
153 | if (document.activeElement == searchTxt) {
154 | resultCntr.lastChild.firstElementChild.focus();
155 | } else if (
156 | document.activeElement == resultCntr.firstChild.firstElementChild
157 | ) {
158 | searchTxt.focus();
159 | } else {
160 | document.activeElement.parentElement.previousSibling.firstElementChild.focus();
161 | }
162 | event.preventDefault();
163 | }
164 | }
165 | });
166 |
167 | // Clicking outside the search area will close the search.
168 | document.getElementById("search-overlay").addEventListener("click", () => {
169 | closeSearch();
170 | });
171 |
--------------------------------------------------------------------------------
/assets/lib/katex/katex.min.css:
--------------------------------------------------------------------------------
1 | @font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.22"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}
2 |
--------------------------------------------------------------------------------