├── 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 | 2 | -------------------------------------------------------------------------------- /layouts/_markup/render-link.html: -------------------------------------------------------------------------------- 1 | 6 | {{- .Text | safeHTML -}} 7 | 8 | -------------------------------------------------------------------------------- /assets/icons/twitch.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/icons/location-dot.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/icons/lock.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /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 | 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 | 2 | -------------------------------------------------------------------------------- /assets/icons/discourse.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /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 | 2 | -------------------------------------------------------------------------------- /assets/icons/chevron-down.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /assets/icons/comment.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/icons/phone.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /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 | 2 | -------------------------------------------------------------------------------- /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 | 2 | -------------------------------------------------------------------------------- /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 | 2 | -------------------------------------------------------------------------------- /assets/icons/calender.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /assets/icons/image.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/icons/medium.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/icons/linkedin.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /layouts/partials/list/basic.html: -------------------------------------------------------------------------------- 1 | {{ with .page }} 2 |
  • 3 |
    4 | {{ with .Params.externalUrl }} 5 | 6 | {{ else }} 7 | 8 | {{ end }} 9 | {{ .LinkTitle | emojify }}
    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 | 2 | -------------------------------------------------------------------------------- /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 | 2 | -------------------------------------------------------------------------------- /assets/icons/fire.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /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 | 2 | -------------------------------------------------------------------------------- /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 | 2 | -------------------------------------------------------------------------------- /assets/icons/lastfm.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/icons/xing.svg: -------------------------------------------------------------------------------- 1 | Xing -------------------------------------------------------------------------------- /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 | 2 | -------------------------------------------------------------------------------- /assets/icons/docker.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/icons/fork.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icons/mug-hot.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/icons/bomb.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.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 | 2 | -------------------------------------------------------------------------------- /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 | 2 | 3 | -------------------------------------------------------------------------------- /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 |
    6 | 7 | {{ with .Params.externalUrl }} 8 | 9 | {{ else }} 10 | 11 | {{ end }} 12 | {{ .LinkTitle | emojify }} 13 | 14 | {{ partial "single/meta.html" . }} 15 | {{ template "partials/home/pg-desc.html" . }} 16 |
    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 | 2 | -------------------------------------------------------------------------------- /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 | 2 | -------------------------------------------------------------------------------- /assets/icons/list.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/icons/email.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/icons/graduation-cap.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/icons/star.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icons/bluesky.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icons/time.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 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 | 2 | -------------------------------------------------------------------------------- /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 | 2 | -------------------------------------------------------------------------------- /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 | 4 | 5 | 6 | 7 | 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 | 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 | 2 | -------------------------------------------------------------------------------- /assets/icons/stripe.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /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 |
    33 | {{ partial "comments.html" . }} 34 |
    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 | 38 | {{ end }} 39 | {{ else }} 40 | 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 | 31 |
    32 | -------------------------------------------------------------------------------- /assets/icons/ko-fi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 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 | {{ $altText }} 58 | {{ end }} 59 | 60 | {{ else }} 61 | {{ $altText }} 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 |
    2 | {{ if .Site.Params.logo }} 3 | 4 | {{ $imgData := dict "Page" . "URL" .Site.Params.logo "Alt" "Site Logo" "Size" "64x64" }} 5 | {{ partial "image-renderer.html" $imgData }} 6 | 7 | {{ end }} 8 |
    9 | 10 | {{ .Site.Title | emojify }} 11 | 12 | 43 | 64 | {{ if .Site.Params.highlightCurrentMenu }} 65 | 80 | {{ end }} 81 |
    82 |
    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 | Demo Site GH Pages 8 | GitHub License 9 | GitHub code size in bytes 10 | Kayal 11 |

    12 | 13 | | Desktop | Mobile | 14 | | ---- | ---- | 15 | |![Desktop](https://github.com/mnjm/kayal/blob/main/images/tn.png?raw=true)|![Mobile](https://github.com/mnjm/kayal/blob/main/images/mobile.png?raw=true)| 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 | --------------------------------------------------------------------------------