diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..702fea15 --- /dev/null +++ b/404.html @@ -0,0 +1,3 @@ + + not-matthias +
Page not found :(
\ No newline at end of file diff --git a/about/index.html b/about/index.html new file mode 100644 index 00000000..9df366ec --- /dev/null +++ b/about/index.html @@ -0,0 +1,4 @@ + + About + +
\ No newline at end of file diff --git a/atom.xml b/atom.xml new file mode 100644 index 00000000..ac24d395 --- /dev/null +++ b/atom.xml @@ -0,0 +1,403 @@ + + + not-matthias + This is an example description + + + Zola + 2024-07-09T00:00:00+00:00 + https://not-matthias.github.io/apollo/atom.xml + + Configuring Apollo + 2024-07-09T00:00:00+00:00 + 2024-07-09T00:00:00+00:00 + + + + + Unknown + + + + + + https://not-matthias.github.io/apollo/posts/configuration/ + + <h1 id="site-configuration"><a class="zola-anchor" href="#site-configuration" aria-label="Anchor link for: site-configuration">Site Configuration</a></h1> +<h2 id="theme-mode-theme"><a class="zola-anchor" href="#theme-mode-theme" aria-label="Anchor link for: theme-mode-theme">Theme Mode (<code>theme</code>)</a></h2> +<p>Sets the color theme for your blog.</p> +<ul> +<li>Type: String</li> +<li>Options: "light", "dark", "auto", "toggle"</li> +<li>Default: "toggle"</li> +<li>Usage: <code>theme = "toggle"</code></li> +</ul> +<p>The "toggle" option allows users to switch between light and dark modes, while "auto" typically follows the user's system preferences.</p> +<h2 id="menu"><a class="zola-anchor" href="#menu" aria-label="Anchor link for: menu">Menu</a></h2> +<p>Defines the navigation menu items for your blog.</p> +<ul> +<li>Type: Array of objects</li> +<li>Default: []</li> +<li>Usage:<pre data-lang="toml" style="background-color:#fafafa;color:#61676c;" class="language-toml "><code class="language-toml" data-lang="toml"><span style="color:#399ee6;">menu </span><span>= [ +</span><span> { </span><span style="color:#399ee6;">name </span><span>= </span><span style="color:#86b300;">&quot;/posts&quot;</span><span style="color:#61676ccc;">, </span><span style="color:#399ee6;">url </span><span>= </span><span style="color:#86b300;">&quot;/posts&quot;</span><span style="color:#61676ccc;">, </span><span style="color:#399ee6;">weight </span><span>= </span><span style="color:#ff8f40;">1 </span><span>}</span><span style="color:#61676ccc;">, +</span><span> { </span><span style="color:#399ee6;">name </span><span>= </span><span style="color:#86b300;">&quot;/projects&quot;</span><span style="color:#61676ccc;">, </span><span style="color:#399ee6;">url </span><span>= </span><span style="color:#86b300;">&quot;/projects&quot;</span><span style="color:#61676ccc;">, </span><span style="color:#399ee6;">weight </span><span>= </span><span style="color:#ff8f40;">2 </span><span>}</span><span style="color:#61676ccc;">, +</span><span> { </span><span style="color:#399ee6;">name </span><span>= </span><span style="color:#86b300;">&quot;/about&quot;</span><span style="color:#61676ccc;">, </span><span style="color:#399ee6;">url </span><span>= </span><span style="color:#86b300;">&quot;/about&quot;</span><span style="color:#61676ccc;">, </span><span style="color:#399ee6;">weight </span><span>= </span><span style="color:#ff8f40;">3 </span><span>}</span><span style="color:#61676ccc;">, +</span><span> { </span><span style="color:#399ee6;">name </span><span>= </span><span style="color:#86b300;">&quot;/tags&quot;</span><span style="color:#61676ccc;">, </span><span style="color:#399ee6;">url </span><span>= </span><span style="color:#86b300;">&quot;/tags&quot;</span><span style="color:#61676ccc;">, </span><span style="color:#399ee6;">weight </span><span>= </span><span style="color:#ff8f40;">4 </span><span>}</span><span style="color:#61676ccc;">, +</span><span>] +</span></code></pre> +</li> +</ul> +<h2 id="socials"><a class="zola-anchor" href="#socials" aria-label="Anchor link for: socials">Socials</a></h2> +<p>Defines the social media links.</p> +<ul> +<li>Type: Array of objects</li> +<li>Default: []</li> +<li>Usage:<pre data-lang="toml" style="background-color:#fafafa;color:#61676c;" class="language-toml "><code class="language-toml" data-lang="toml"><span style="color:#399ee6;">socials </span><span>= [ +</span><span> { </span><span style="color:#399ee6;">name </span><span>= </span><span style="color:#86b300;">&quot;twitter&quot;</span><span style="color:#61676ccc;">, </span><span style="color:#399ee6;">url </span><span>= </span><span style="color:#86b300;">&quot;https://twitter.com/not_matthias&quot;</span><span style="color:#61676ccc;">, </span><span style="color:#399ee6;">icon </span><span>= </span><span style="color:#86b300;">&quot;twitter&quot; </span><span>}</span><span style="color:#61676ccc;">, +</span><span> { </span><span style="color:#399ee6;">name </span><span>= </span><span style="color:#86b300;">&quot;github&quot;</span><span style="color:#61676ccc;">, </span><span style="color:#399ee6;">url </span><span>= </span><span style="color:#86b300;">&quot;https://github.com/not-matthias/&quot;</span><span style="color:#61676ccc;">, </span><span style="color:#399ee6;">icon </span><span>= </span><span style="color:#86b300;">&quot;github&quot; </span><span>}</span><span style="color:#61676ccc;">, +</span><span>] +</span></code></pre> +</li> +</ul> +<h2 id="table-of-contents-toc"><a class="zola-anchor" href="#table-of-contents-toc" aria-label="Anchor link for: table-of-contents-toc">Table of Contents (<code>toc</code>)</a></h2> +<p>Enables or disables the table of contents for posts.</p> +<ul> +<li>Type: Boolean</li> +<li>Default: true</li> +<li>Usage: <code>toc = true</code></li> +</ul> +<p>When enabled, a table of contents will be generated for posts, making it easier for readers to navigate through longer articles.</p> +<h2 id="cdn-usage-use-cdn"><a class="zola-anchor" href="#cdn-usage-use-cdn" aria-label="Anchor link for: cdn-usage-use-cdn">CDN Usage (<code>use_cdn</code>)</a></h2> +<p>Determines whether to use a Content Delivery Network (CDN) for assets.</p> +<ul> +<li>Type: Boolean</li> +<li>Default: false</li> +<li>Usage: <code>use_cdn = false</code></li> +</ul> +<p>When set to true, the theme will attempt to load assets from a CDN, which can improve loading times for visitors from different geographic locations.</p> +<h2 id="favicon-favicon"><a class="zola-anchor" href="#favicon-favicon" aria-label="Anchor link for: favicon-favicon">Favicon (<code>favicon</code>)</a></h2> +<p>Specifies the path to the favicon image for your blog.</p> +<ul> +<li>Type: String</li> +<li>Default: "/icon/favicon.png"</li> +<li>Usage: <code>favicon = "/icon/favicon.png"</code></li> +</ul> +<p>This sets the small icon that appears in the browser tab for your website.</p> +<h2 id="fancy-code-styling-fancy-code"><a class="zola-anchor" href="#fancy-code-styling-fancy-code" aria-label="Anchor link for: fancy-code-styling-fancy-code">Fancy Code Styling (<code>fancy_code</code>)</a></h2> +<p>Enables enhanced styling for code blocks.</p> +<ul> +<li>Type: Boolean</li> +<li>Default: true</li> +<li>Usage: <code>fancy_code = true</code></li> +</ul> +<p>This option adds the language label and a copy button.</p> +<h2 id="dynamic-notes-dynamic-note"><a class="zola-anchor" href="#dynamic-notes-dynamic-note" aria-label="Anchor link for: dynamic-notes-dynamic-note">Dynamic Notes (<code>dynamic_note</code>)</a></h2> +<p>Allows for the creation of togglable note sections in your content.</p> +<ul> +<li>Type: Boolean</li> +<li>Default: true</li> +<li>Usage: <code>dynamic_note = true</code></li> +</ul> +<p>When enabled, you can create expandable/collapsible note sections in your blog posts.</p> +<h2 id="anchor-links"><a class="zola-anchor" href="#anchor-links" aria-label="Anchor link for: anchor-links">Anchor Links</a></h2> +<p>You can add anchor links by adding the following to your <code>_index.md</code>:</p> +<pre data-lang="toml" style="background-color:#fafafa;color:#61676c;" class="language-toml "><code class="language-toml" data-lang="toml"><span style="color:#399ee6;">insert_anchor_links </span><span>= </span><span style="color:#86b300;">&quot;heading&quot; +</span></code></pre> +<h1 id="page-configuration"><a class="zola-anchor" href="#page-configuration" aria-label="Anchor link for: page-configuration">Page configuration</a></h1> +<h2 id="source-code-repo-view"><a class="zola-anchor" href="#source-code-repo-view" aria-label="Anchor link for: source-code-repo-view">Source code (<code>repo_view</code>)</a></h2> +<p>Do you want to link to the source code of your blog post? You can turn on the <code>repo_view</code> inside the <code>[extra]</code> section of your blog post.</p> +<pre data-lang="toml" style="background-color:#fafafa;color:#61676c;" class="language-toml "><code class="language-toml" data-lang="toml"><span>[</span><span style="color:#399ee6;">extra</span><span>] +</span><span style="color:#399ee6;">repo_view </span><span>= </span><span style="color:#ff8f40;">true +</span><span style="color:#399ee6;">repo_url </span><span>= </span><span style="color:#86b300;">&quot;https://github.com/not-matthias/apollo/tree/main/content&quot; </span><span style="font-style:italic;color:#abb0b6;"># Alternatively add the repo here +</span></code></pre> +<p>The <code>repo_url</code> can be set in the <code>[extra]</code> section or in your <code>config.toml</code>.</p> +<h2 id="comments-comment"><a class="zola-anchor" href="#comments-comment" aria-label="Anchor link for: comments-comment">Comments (<code>comment</code>)</a></h2> +<p>Enables or disables the comment system for posts.</p> +<ul> +<li>Type: Boolean</li> +<li>Default: false</li> +<li>Usage: <code>comment = false</code></li> +</ul> +<p>After making <code>comment = true</code> in <code>[extra]</code> section of you post, save your script from <a href="https://giscus.app">Giscus</a> to <code>templates/_giscus_script.html</code>. +When enabled, this allows readers to leave comments on your blog posts. This feature has to be set for each individual post and is not supported at higher levels.</p> +<p>Example configuration in <a href="https://github.com/not-matthias/apollo/blob/main/content/posts/configuration.md">content/posts/configuration.md</a>:</p> +<pre data-lang="toml" style="background-color:#fafafa;color:#61676c;" class="language-toml "><code class="language-toml" data-lang="toml"><span style="color:#f51818;">+++ +</span><span style="color:#399ee6;">title </span><span>= </span><span style="color:#86b300;">&quot;Configuring Apollo&quot; +</span><span> +</span><span>[</span><span style="color:#399ee6;">extra</span><span>] +</span><span style="color:#399ee6;">comment </span><span>= </span><span style="color:#ff8f40;">true +</span><span style="color:#f51818;">+++ +</span></code></pre> +<p>Comments via <a href="https://utteranc.es">utterances</a> can be configured in <code>template/_giscus_script.html</code> like this:</p> +<pre data-lang="html" style="background-color:#fafafa;color:#61676c;" class="language-html "><code class="language-html" data-lang="html"><span style="color:#55b4d490;">&lt;</span><span style="color:#399ee6;">script </span><span style="color:#f29718;">src</span><span style="color:#61676ccc;">=</span><span style="color:#86b300;">&quot;https://utteranc.es/client.js&quot; +</span><span> </span><span style="color:#f29718;">repo</span><span style="color:#61676ccc;">=</span><span style="color:#86b300;">&quot;YOUR_NAME/YOUR_REPO&quot; +</span><span> </span><span style="color:#f29718;">issue-term</span><span style="color:#61676ccc;">=</span><span style="color:#86b300;">&quot;pathname&quot; +</span><span> </span><span style="color:#f29718;">theme</span><span style="color:#61676ccc;">=</span><span style="color:#86b300;">&quot;github-light&quot; +</span><span> </span><span style="color:#f29718;">crossorigin</span><span style="color:#61676ccc;">=</span><span style="color:#86b300;">&quot;anonymous&quot; +</span><span> </span><span style="color:#f29718;">async</span><span style="color:#55b4d490;">&gt; +</span><span style="color:#55b4d490;">&lt;/</span><span style="color:#399ee6;">script</span><span style="color:#55b4d490;">&gt; +</span></code></pre> + + + + + Shortcode Example + 2024-06-14T00:00:00+00:00 + 2024-06-14T00:00:00+00:00 + + + + + Unknown + + + + + + https://not-matthias.github.io/apollo/posts/shortcode/ + + <h2 id="note"><a class="zola-anchor" href="#note" aria-label="Anchor link for: note">Note</a></h2> +<p>Here is an example of the <code>note</code> shortcode:</p> +<p>This one is static! +<div class="note-container"> + + <div class="note-header"> + + <div class="note-icon"> + <p>Note!</p> + + </div> + + </div> + <div class="note-content"> + <p>This blog assumes basic terminal maturity</p> + + </div> + +</div> +</p> +<p>This one is clickable! +<div class="note-container"> + + <button class="note-toggle"> + + <div class="note-icon"> + <p>Quiz!</p> + + </div> + + </button> + + + <div class="note-content" style="display: none;"> + + <p>The answer to the quiz!</p> + + </div> + +</div> +</p> +<p>Syntax:</p> +<pre style="background-color:#fafafa;color:#61676c;"><code><span>{{ note(header=&quot;Note!&quot;, body=&quot;This blog assumes basic terminal maturity&quot;) }} +</span><span>{{ note(clickable=true, hidden = true, header=&quot;Quiz!&quot;, body=&quot;The answer to the quiz!&quot;) }} +</span></code></pre> +<p>You can also use some HTML in the text: +<div class="note-container"> + + <div class="note-header"> + + <div class="note-icon"> + <p>Note!</p> + + </div> + + </div> + <div class="note-content"> + <h1>This blog assumes basic terminal maturity</h1> + </div> + +</div> +</p> +<p>Literal shortcode:</p> +<pre style="background-color:#fafafa;color:#61676c;"><code><span>{{ note(header=&quot;Note!&quot;, body=&quot;&lt;h1&gt;This blog assumes basic terminal maturity&lt;/h1&gt;&quot;) }} +</span></code></pre> +<p>Pretty cool, right?</p> +<p>Finally, you can do something like this (hopefully):</p> +<div class="note-container"> + + <button class="note-toggle"> + + <div class="note-icon"> + <p>Quiz!</p> + + </div> + + </button> + + + <div class="note-content" style="display: block;"> + + <h1 id="hello-this-is-markdown-inside-a-note-shortcode">Hello this is markdown inside a note shortcode</h1> +<pre data-lang="rust" style="background-color:#fafafa;color:#61676c;" class="language-rust "><code class="language-rust" data-lang="rust"><span style="color:#fa6e32;">fn </span><span style="color:#f29718;">main</span><span>() { +</span><span> </span><span style="color:#f07171;">println!</span><span>(</span><span style="color:#86b300;">&quot;Hello World&quot;</span><span>)</span><span style="color:#61676ccc;">; +</span><span>} +</span></code></pre> +<p>We can't call another shortcode inside a shortcode, but this is good enough.</p> + + </div> + +</div> +<p>Here is the raw markdown:</p> +<pre data-lang="markdown" style="background-color:#fafafa;color:#61676c;" class="language-markdown "><code class="language-markdown" data-lang="markdown"><span>{{ note(clickable=true, header=&quot;Quiz!&quot;) }} +</span><span> +</span><span style="font-weight:bold;color:#fa6e32;"># </span><span style="font-weight:bold;color:#399ee6;">Hello this is markdown inside a note shortcode +</span><span> +</span><span style="color:#4cbf99;">\`\`\`</span><span>rust +</span><span>fn main() { +</span><span> println!(&quot;Hello World&quot;); +</span><span>} +</span><span style="color:#4cbf99;">\`\`\` +</span><span> +</span><span>We can&#39;t call another shortcode inside a shortcode, but this is good enough. +</span><span> +</span><span>{{/* end </span><span style="font-style:italic;color:#f07171;">*/}} +</span></code></pre> +<p>Finally, we have center +<div class="note-container"> + + <div class="note-header"> + + <div class="note-center"> + <p>Centered Text</p> + + </div> + + </div> + <div class="note-content"> + <p>This is centered text</p> + + </div> + +</div> +</p> +<pre data-lang="markdown" style="background-color:#fafafa;color:#61676c;" class="language-markdown "><code class="language-markdown" data-lang="markdown"><span>{{ note(center=true, header=&quot;Centered Text&quot;, body=&quot;This is centered text&quot;) }} +</span></code></pre> +<p>It works good enough for me!</p> + + + + + Math Symbol Example + 2023-01-06T00:00:00+00:00 + 2023-01-06T00:00:00+00:00 + + + + + Unknown + + + + + + https://not-matthias.github.io/apollo/posts/math-symbol/ + + <p>Note: This requires the <code>mathjax</code> and <code>mathjax_dollar_inline_enable</code> option set to <code>true</code>.</p> +<h1 id="inline-math"><a class="zola-anchor" href="#inline-math" aria-label="Anchor link for: inline-math">Inline Math</a></h1> +<ul> +<li>$(a+b)^2$ = $a^2 + 2ab + b^2$</li> +<li>A polynomial P of degree d over $\mathbb{F}_p$ is an expression of the form +$P(s) = a_0 + a_1 . s + a_2 . s^2 + ... + a_d . s^d$ for some +$a_0,..,a_d \in \mathbb{F}_p$</li> +</ul> +<h1 id="displayed-math"><a class="zola-anchor" href="#displayed-math" aria-label="Anchor link for: displayed-math">Displayed Math</a></h1> +<p>$$ +p := (\sum_{k∈I}{c_k.v_k} + \delta_v.t(x))·(\sum_{k∈I}{c_k.w_k} + \delta_w.t(x)) − (\sum_{k∈I}{c_k.y_k} + \delta_y.t(x)) +$$</p> + + + + + Markdown Test + 2022-01-01T00:00:00+00:00 + 2022-05-01T00:00:00+00:00 + + + + + Unknown + + + + + + https://not-matthias.github.io/apollo/posts/markdown/ + + <h1 id="h1"><a class="zola-anchor" href="#h1" aria-label="Anchor link for: h1">H1</a></h1> +<h2 id="h2"><a class="zola-anchor" href="#h2" aria-label="Anchor link for: h2">H2</a></h2> +<h3 id="h3"><a class="zola-anchor" href="#h3" aria-label="Anchor link for: h3">H3</a></h3> +<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Aliquet sagittis id consectetur purus ut. In pellentesque massa placerat duis ultricies. Neque laoreet suspendisse interdum consectetur libero id. Justo nec ultrices dui sapien eget mi proin. Nunc consequat interdum varius sit amet mattis vulputate. Sollicitudin tempor id eu nisl nunc mi ipsum. Non odio euismod lacinia at quis. Sit amet nisl suscipit adipiscing. Amet mattis vulputate enim nulla aliquet porttitor lacus luctus accumsan. Sit amet consectetur adipiscing elit pellentesque habitant. Ac placerat vestibulum lectus mauris. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper velit sed. <a href="https://www.google.com">Google</a></p> +<p><img src="https://markdown-here.com/img/icon256.png" alt="Markdown Logo" /></p> +<h2 id="code-block"><a class="zola-anchor" href="#code-block" aria-label="Anchor link for: code-block">Code Block</a></h2> +<pre data-lang="rust" style="background-color:#fafafa;color:#61676c;" class="language-rust "><code class="language-rust" data-lang="rust"><span style="color:#fa6e32;">fn </span><span style="color:#f29718;">main</span><span>() { +</span><span> </span><span style="color:#f07171;">println!</span><span>(</span><span style="color:#86b300;">&quot;Hello World&quot;</span><span>)</span><span style="color:#61676ccc;">; +</span><span>} +</span></code></pre> +<pre data-linenos data-lang="rust" style="background-color:#fafafa;color:#61676c;" class="language-rust "><code class="language-rust" data-lang="rust"><table><tbody><tr><td>1</td><td><span style="color:#fa6e32;">fn </span><span style="color:#f29718;">main</span><span>() { +</span></td></tr><tr><td><mark style="background-color:#f3f3f3;">2</mark></td><td><mark style="background-color:#f3f3f3;"><span> </span><span style="color:#f07171;">println!</span><span>(</span><span style="color:#86b300;">&quot;Hello World&quot;</span><span>)</span><span style="color:#61676ccc;">; +</span></mark></td></tr><tr><td>3</td><td><span>} +</span></td></tr></tbody></table></code></pre> +<h2 id="ordered-list"><a class="zola-anchor" href="#ordered-list" aria-label="Anchor link for: ordered-list">Ordered List</a></h2> +<ol> +<li>First item</li> +<li>Second item</li> +<li>Third item</li> +</ol> +<h2 id="unordered-list"><a class="zola-anchor" href="#unordered-list" aria-label="Anchor link for: unordered-list">Unordered List</a></h2> +<ul> +<li>List item</li> +<li>Another item</li> +<li>And another item</li> +</ul> +<h2 id="nested-list"><a class="zola-anchor" href="#nested-list" aria-label="Anchor link for: nested-list">Nested list</a></h2> +<ul> +<li>Fruit +<ul> +<li>Apple</li> +<li>Orange</li> +<li>Banana</li> +</ul> +</li> +<li>Dairy +<ul> +<li>Milk</li> +<li>Cheese</li> +</ul> +</li> +</ul> +<h2 id="quote"><a class="zola-anchor" href="#quote" aria-label="Anchor link for: quote">Quote</a></h2> +<blockquote> +<p>Two things are infinite: the universe and human stupidity; and I'm not sure about the +universe.<br> +— <cite>Albert Einstein</cite></p> +</blockquote> +<h2 id="table-inline-markdown"><a class="zola-anchor" href="#table-inline-markdown" aria-label="Anchor link for: table-inline-markdown">Table Inline Markdown</a></h2> +<table><thead><tr><th>Italics</th><th>Bold</th><th>Code</th><th>StrikeThrough</th></tr></thead><tbody> +<tr><td><em>italics</em></td><td><strong>bold</strong></td><td><code>code</code></td><td><del>strikethrough</del></td></tr> +</tbody></table> +<h2 id="foldable-text"><a class="zola-anchor" href="#foldable-text" aria-label="Anchor link for: foldable-text">Foldable Text</a></h2> +<details> + <summary>Title 1</summary> + <p>IT'S A SECRET TO EVERYBODY.</p> +</details> +<details> + <summary>Title 2</summary> + <p>Stay awhile, and listen!</p> +</details> +<h2 id="code-tags"><a class="zola-anchor" href="#code-tags" aria-label="Anchor link for: code-tags">Code tags</a></h2> +<p>Lorem ipsum <code>dolor</code> sit amet, <code>consectetur adipiscing</code> elit. +<code>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</code></p> + + + + diff --git a/feather/moon.svg b/feather/moon.svg new file mode 100644 index 00000000..dbf7c6cf --- /dev/null +++ b/feather/moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/feather/sun.svg b/feather/sun.svg new file mode 100644 index 00000000..7f51b94d --- /dev/null +++ b/feather/sun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fonts.css b/fonts.css new file mode 100644 index 00000000..7172ab44 --- /dev/null +++ b/fonts.css @@ -0,0 +1 @@ +@font-face{font-family:"Jetbrains Mono";font-style:normal;font-weight:400;src:url("fonts/JetbrainsMono/JetBrainsMono-Regular.ttf"),local("ttf");font-display:swap}@font-face{font-family:"Jetbrains Mono";font-style:normal;font-weight:700;src:url("fonts/JetbrainsMono/JetBrainsMono-Bold.ttf"),local("ttf");font-display:swap}@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:400;src:url("fonts/SpaceGrotesk/SpaceGrotesk-Regular.ttf"),local("ttf");font-display:swap}@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:700;src:url("fonts/SpaceGrotesk/SpaceGrotesk-Bold.ttf"),local("ttf");font-display:swap} \ No newline at end of file diff --git a/fonts/.gitkeep b/fonts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/fonts/JetbrainsMono/JetBrainsMono-Bold.ttf b/fonts/JetbrainsMono/JetBrainsMono-Bold.ttf new file mode 100644 index 00000000..710c34b8 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-Bold.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-BoldItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-BoldItalic.ttf new file mode 100644 index 00000000..fdff00fa Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-BoldItalic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-ExtraBold.ttf b/fonts/JetbrainsMono/JetBrainsMono-ExtraBold.ttf new file mode 100644 index 00000000..eb943009 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-ExtraBold.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-ExtraBoldItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-ExtraBoldItalic.ttf new file mode 100644 index 00000000..b70b4e7d Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-ExtraBoldItalic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-ExtraLight.ttf b/fonts/JetbrainsMono/JetBrainsMono-ExtraLight.ttf new file mode 100644 index 00000000..74efced5 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-ExtraLight.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-ExtraLightItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-ExtraLightItalic.ttf new file mode 100644 index 00000000..1a9d2d3d Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-ExtraLightItalic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-Italic.ttf b/fonts/JetbrainsMono/JetBrainsMono-Italic.ttf new file mode 100644 index 00000000..ffd5d778 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-Italic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-Light.ttf b/fonts/JetbrainsMono/JetBrainsMono-Light.ttf new file mode 100644 index 00000000..c0682f9c Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-Light.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-LightItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-LightItalic.ttf new file mode 100644 index 00000000..f20bac98 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-LightItalic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-Medium.ttf b/fonts/JetbrainsMono/JetBrainsMono-Medium.ttf new file mode 100644 index 00000000..17ff9456 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-Medium.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-MediumItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-MediumItalic.ttf new file mode 100644 index 00000000..9b699bb3 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-MediumItalic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-Regular.ttf b/fonts/JetbrainsMono/JetBrainsMono-Regular.ttf new file mode 100644 index 00000000..9a5202eb Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-Regular.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-SemiBold.ttf b/fonts/JetbrainsMono/JetBrainsMono-SemiBold.ttf new file mode 100644 index 00000000..84b77955 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-SemiBold.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-SemiBoldItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-SemiBoldItalic.ttf new file mode 100644 index 00000000..ffa1f39a Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-SemiBoldItalic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-Thin.ttf b/fonts/JetbrainsMono/JetBrainsMono-Thin.ttf new file mode 100644 index 00000000..1317bfee Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-Thin.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-ThinItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-ThinItalic.ttf new file mode 100644 index 00000000..bc724399 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-ThinItalic.ttf differ diff --git a/fonts/SpaceGrotesk/SpaceGrotesk-Bold.ttf b/fonts/SpaceGrotesk/SpaceGrotesk-Bold.ttf new file mode 100644 index 00000000..869a60f0 Binary files /dev/null and b/fonts/SpaceGrotesk/SpaceGrotesk-Bold.ttf differ diff --git a/fonts/SpaceGrotesk/SpaceGrotesk-Light.ttf b/fonts/SpaceGrotesk/SpaceGrotesk-Light.ttf new file mode 100644 index 00000000..76a195f1 Binary files /dev/null and b/fonts/SpaceGrotesk/SpaceGrotesk-Light.ttf differ diff --git a/fonts/SpaceGrotesk/SpaceGrotesk-Medium.ttf b/fonts/SpaceGrotesk/SpaceGrotesk-Medium.ttf new file mode 100644 index 00000000..667905f4 Binary files /dev/null and b/fonts/SpaceGrotesk/SpaceGrotesk-Medium.ttf differ diff --git a/fonts/SpaceGrotesk/SpaceGrotesk-Regular.ttf b/fonts/SpaceGrotesk/SpaceGrotesk-Regular.ttf new file mode 100644 index 00000000..792fe1b3 Binary files /dev/null and b/fonts/SpaceGrotesk/SpaceGrotesk-Regular.ttf differ diff --git a/fonts/SpaceGrotesk/SpaceGrotesk-SemiBold.ttf b/fonts/SpaceGrotesk/SpaceGrotesk-SemiBold.ttf new file mode 100644 index 00000000..02193026 Binary files /dev/null and b/fonts/SpaceGrotesk/SpaceGrotesk-SemiBold.ttf differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..d37462e7 --- /dev/null +++ b/index.html @@ -0,0 +1,3 @@ + + not-matthias +
\ No newline at end of file diff --git a/js/codeblock.js b/js/codeblock.js new file mode 100644 index 00000000..def68bcc --- /dev/null +++ b/js/codeblock.js @@ -0,0 +1,103 @@ +const successIcon = ` + + `; +const errorIcon = ` + + `; +const copyIcon = ` + + `; + +// Function to change icons after copying +const changeIcon = (button, isSuccess) => { + button.innerHTML = isSuccess ? successIcon : errorIcon; + setTimeout(() => { + button.innerHTML = copyIcon; // Reset to copy icon + }, 2000); +}; + +// Function to get code text from tables, skipping line numbers +const getCodeFromTable = (codeBlock) => { + return [...codeBlock.querySelectorAll('tr')] + .map(row => row.querySelector('td:last-child')?.innerText ?? '') + .join(''); +}; + +// Function to get code text from non-table blocks +const getNonTableCode = (codeBlock) => { + return codeBlock.textContent.trim(); +}; + +document.addEventListener('DOMContentLoaded', function () { + // Select all `pre` elements containing `code` + + const observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + const pre = entry.target.parentNode; + const clipboardBtn = pre.querySelector('.clipboard-button'); + const label = pre.querySelector('.code-label'); + + if (clipboardBtn) { + // Adjust the position of the clipboard button when the `code` is not fully visible + clipboardBtn.style.right = entry.isIntersecting ? '5px' : `-${entry.boundingClientRect.right - pre.clientWidth + 5}px`; + } + + if (label) { + // Adjust the position of the label similarly + label.style.right = entry.isIntersecting ? '0px' : `-${entry.boundingClientRect.right - pre.clientWidth}px`; + } + }); + }, { + root: null, // observing relative to viewport + rootMargin: '0px', + threshold: 1.0 // Adjust this to control when the callback fires + }); + + document.querySelectorAll('pre code').forEach(codeBlock => { + const pre = codeBlock.parentNode; + pre.style.position = 'relative'; // Ensure parent `pre` can contain absolute elements + + // Create and append the copy button + const copyBtn = document.createElement('button'); + copyBtn.className = 'clipboard-button'; + copyBtn.innerHTML = copyIcon; + copyBtn.setAttribute('aria-label', 'Copy code to clipboard'); + pre.appendChild(copyBtn); + + // Attach event listener to copy button + copyBtn.addEventListener('click', async () => { + // Determine if the code is in a table or not + const isTable = codeBlock.querySelector('table'); + const codeToCopy = isTable ? getCodeFromTable(codeBlock) : getNonTableCode(codeBlock); + try { + await navigator.clipboard.writeText(codeToCopy); + changeIcon(copyBtn, true); // Show success icon + } catch (error) { + console.error('Failed to copy text: ', error); + changeIcon(copyBtn, false); // Show error icon + } + }); + + const langClass = codeBlock.className.match(/language-(\w+)/); + const lang = langClass ? langClass[1] : 'default'; + + // Create and append the label + const label = document.createElement('span'); + label.className = 'code-label label-' + lang; // Use the specific language class + label.textContent = lang.toUpperCase(); // Display the language as label + pre.appendChild(label); + + let ticking = false; + pre.addEventListener('scroll', () => { + if (!ticking) { + window.requestAnimationFrame(() => { + copyBtn.style.right = `-${pre.scrollLeft}px`; + label.style.right = `-${pre.scrollLeft}px`; + ticking = false; + }); + ticking = true; + } + }); + + }); +}); diff --git a/js/count.js b/js/count.js new file mode 100644 index 00000000..7c504bc0 --- /dev/null +++ b/js/count.js @@ -0,0 +1,270 @@ +// GoatCounter: https://www.goatcounter.com +// This file (and *only* this file) is released under the ISC license: +// https://opensource.org/licenses/ISC +;(function() { + 'use strict'; + + if (window.goatcounter && window.goatcounter.vars) // Compatibility with very old version; do not use. + window.goatcounter = window.goatcounter.vars + else + window.goatcounter = window.goatcounter || {} + + // Load settings from data-goatcounter-settings. + var s = document.querySelector('script[data-goatcounter]') + if (s && s.dataset.goatcounterSettings) { + try { var set = JSON.parse(s.dataset.goatcounterSettings) } + catch (err) { console.error('invalid JSON in data-goatcounter-settings: ' + err) } + for (var k in set) + if (['no_onload', 'no_events', 'allow_local', 'allow_frame', 'path', 'title', 'referrer', 'event'].indexOf(k) > -1) + window.goatcounter[k] = set[k] + } + + var enc = encodeURIComponent + + // Get all data we're going to send off to the counter endpoint. + var get_data = function(vars) { + var data = { + p: (vars.path === undefined ? goatcounter.path : vars.path), + r: (vars.referrer === undefined ? goatcounter.referrer : vars.referrer), + t: (vars.title === undefined ? goatcounter.title : vars.title), + e: !!(vars.event || goatcounter.event), + s: [window.screen.width, window.screen.height, (window.devicePixelRatio || 1)], + b: is_bot(), + q: location.search, + } + + var rcb, pcb, tcb // Save callbacks to apply later. + if (typeof(data.r) === 'function') rcb = data.r + if (typeof(data.t) === 'function') tcb = data.t + if (typeof(data.p) === 'function') pcb = data.p + + if (is_empty(data.r)) data.r = document.referrer + if (is_empty(data.t)) data.t = document.title + if (is_empty(data.p)) data.p = get_path() + + if (rcb) data.r = rcb(data.r) + if (tcb) data.t = tcb(data.t) + if (pcb) data.p = pcb(data.p) + return data + } + + // Check if a value is "empty" for the purpose of get_data(). + var is_empty = function(v) { return v === null || v === undefined || typeof(v) === 'function' } + + // See if this looks like a bot; there is some additional filtering on the + // backend, but these properties can't be fetched from there. + var is_bot = function() { + // Headless browsers are probably a bot. + var w = window, d = document + if (w.callPhantom || w._phantom || w.phantom) + return 150 + if (w.__nightmare) + return 151 + if (d.__selenium_unwrapped || d.__webdriver_evaluate || d.__driver_evaluate) + return 152 + if (navigator.webdriver) + return 153 + return 0 + } + + // Object to urlencoded string, starting with a ?. + var urlencode = function(obj) { + var p = [] + for (var k in obj) + if (obj[k] !== '' && obj[k] !== null && obj[k] !== undefined && obj[k] !== false) + p.push(enc(k) + '=' + enc(obj[k])) + return '?' + p.join('&') + } + + // Show a warning in the console. + var warn = function(msg) { + if (console && 'warn' in console) + console.warn('goatcounter: ' + msg) + } + + // Get the endpoint to send requests to. + var get_endpoint = function() { + var s = document.querySelector('script[data-goatcounter]') + if (s && s.dataset.goatcounter) + return s.dataset.goatcounter + return (goatcounter.endpoint || window.counter) // counter is for compat; don't use. + } + + // Get current path. + var get_path = function() { + var loc = location, + c = document.querySelector('link[rel="canonical"][href]') + if (c) { // May be relative or point to different domain. + var a = document.createElement('a') + a.href = c.href + if (a.hostname.replace(/^www\./, '') === location.hostname.replace(/^www\./, '')) + loc = a + } + return (loc.pathname + loc.search) || '/' + } + + // Run function after DOM is loaded. + var on_load = function(f) { + if (document.body === null) + document.addEventListener('DOMContentLoaded', function() { f() }, false) + else + f() + } + + // Filter some requests that we (probably) don't want to count. + goatcounter.filter = function() { + if ('visibilityState' in document && document.visibilityState === 'prerender') + return 'visibilityState' + if (!goatcounter.allow_frame && location !== parent.location) + return 'frame' + if (!goatcounter.allow_local && location.hostname.match(/(localhost$|^127\.|^10\.|^172\.(1[6-9]|2[0-9]|3[0-1])\.|^192\.168\.|^0\.0\.0\.0$)/)) + return 'localhost' + if (!goatcounter.allow_local && location.protocol === 'file:') + return 'localfile' + if (localStorage && localStorage.getItem('skipgc') === 't') + return 'disabled with #toggle-goatcounter' + return false + } + + // Get URL to send to GoatCounter. + window.goatcounter.url = function(vars) { + var data = get_data(vars || {}) + if (data.p === null) // null from user callback. + return + data.rnd = Math.random().toString(36).substr(2, 5) // Browsers don't always listen to Cache-Control. + + var endpoint = get_endpoint() + if (!endpoint) + return warn('no endpoint found') + + return endpoint + urlencode(data) + } + + // Count a hit. + window.goatcounter.count = function(vars) { + var f = goatcounter.filter() + if (f) + return warn('not counting because of: ' + f) + + var url = goatcounter.url(vars) + if (!url) + return warn('not counting because path callback returned null') + + var img = document.createElement('img') + img.src = url + img.style.position = 'absolute' // Affect layout less. + img.style.bottom = '0px' + img.style.width = '1px' + img.style.height = '1px' + img.loading = 'eager' + img.setAttribute('alt', '') + img.setAttribute('aria-hidden', 'true') + + var rm = function() { if (img && img.parentNode) img.parentNode.removeChild(img) } + img.addEventListener('load', rm, false) + document.body.appendChild(img) + } + + // Get a query parameter. + window.goatcounter.get_query = function(name) { + var s = location.search.substr(1).split('&') + for (var i = 0; i < s.length; i++) + if (s[i].toLowerCase().indexOf(name.toLowerCase() + '=') === 0) + return s[i].substr(name.length + 1) + } + + // Track click events. + window.goatcounter.bind_events = function() { + if (!document.querySelectorAll) // Just in case someone uses an ancient browser. + return + + var send = function(elem) { + return function() { + goatcounter.count({ + event: true, + path: (elem.dataset.goatcounterClick || elem.name || elem.id || ''), + title: (elem.dataset.goatcounterTitle || elem.title || (elem.innerHTML || '').substr(0, 200) || ''), + referrer: (elem.dataset.goatcounterReferrer || elem.dataset.goatcounterReferral || ''), + }) + } + } + + Array.prototype.slice.call(document.querySelectorAll("*[data-goatcounter-click]")).forEach(function(elem) { + if (elem.dataset.goatcounterBound) + return + var f = send(elem) + elem.addEventListener('click', f, false) + elem.addEventListener('auxclick', f, false) // Middle click. + elem.dataset.goatcounterBound = 'true' + }) + } + + // Add a "visitor counter" frame or image. + window.goatcounter.visit_count = function(opt) { + on_load(function() { + opt = opt || {} + opt.type = opt.type || 'html' + opt.append = opt.append || 'body' + opt.path = opt.path || get_path() + opt.attr = opt.attr || {width: '200', height: (opt.no_branding ? '60' : '80')} + + opt.attr['src'] = get_endpoint() + 'er/' + enc(opt.path) + '.' + enc(opt.type) + '?' + if (opt.no_branding) opt.attr['src'] += '&no_branding=1' + if (opt.style) opt.attr['src'] += '&style=' + enc(opt.style) + if (opt.start) opt.attr['src'] += '&start=' + enc(opt.start) + if (opt.end) opt.attr['src'] += '&end=' + enc(opt.end) + + var tag = {png: 'img', svg: 'img', html: 'iframe'}[opt.type] + if (!tag) + return warn('visit_count: unknown type: ' + opt.type) + + if (opt.type === 'html') { + opt.attr['frameborder'] = '0' + opt.attr['scrolling'] = 'no' + } + + var d = document.createElement(tag) + for (var k in opt.attr) + d.setAttribute(k, opt.attr[k]) + + var p = document.querySelector(opt.append) + if (!p) + return warn('visit_count: append not found: ' + opt.append) + p.appendChild(d) + }) + } + + // Make it easy to skip your own views. + if (location.hash === '#toggle-goatcounter') { + if (localStorage.getItem('skipgc') === 't') { + localStorage.removeItem('skipgc', 't') + alert('GoatCounter tracking is now ENABLED in this browser.') + } + else { + localStorage.setItem('skipgc', 't') + alert('GoatCounter tracking is now DISABLED in this browser until ' + location + ' is loaded again.') + } + } + + if (!goatcounter.no_onload) + on_load(function() { + // 1. Page is visible, count request. + // 2. Page is not yet visible; wait until it switches to 'visible' and count. + // See #487 + if (!('visibilityState' in document) || document.visibilityState === 'visible') + goatcounter.count() + else { + var f = function(e) { + if (document.visibilityState !== 'visible') + return + document.removeEventListener('visibilitychange', f) + goatcounter.count() + } + document.addEventListener('visibilitychange', f) + } + + if (!goatcounter.no_events) + goatcounter.bind_events() + }) +})(); + diff --git a/js/imamu.js b/js/imamu.js new file mode 100644 index 00000000..c317f480 --- /dev/null +++ b/js/imamu.js @@ -0,0 +1 @@ +!function(){"use strict";!function(t){var e=t.screen,n=e.width,r=e.height,a=t.navigator.language,i=t.location,o=t.localStorage,u=t.document,c=t.history,f=i.hostname,s=i.pathname,l=i.search,d=u.currentScript;if(d){var m="data-",h=d.getAttribute.bind(d),v=h(m+"website-id"),p=h(m+"host-url"),g="false"!==h(m+"auto-track"),y=h(m+"do-not-track"),b=h(m+"domains")||"",S=b.split(",").map((function(t){return t.trim()})),k=(p?p.replace(/\/$/,""):d.src.split("/").slice(0,-1).join("/"))+"/api/send",w=n+"x"+r,N=/data-umami-event-([\w-_]+)/,T=m+"umami-event",j=300,A=function(t,e,n){var r=t[e];return function(){for(var e=[],a=arguments.length;a--;)e[a]=arguments[a];return n.apply(null,e),r.apply(t,e)}},x=function(){return{website:v,hostname:f,screen:w,language:a,title:M,url:I,referrer:J}},E=function(){return o&&o.getItem("umami.disabled")||y&&function(){var e=t.doNotTrack,n=t.navigator,r=t.external,a="msTrackingProtectionEnabled",i=e||n.doNotTrack||n.msDoNotTrack||r&&a in r&&r[a]();return"1"==i||"yes"===i}()||b&&!S.includes(f)},O=function(t,e,n){n&&(J=I,(I=function(t){try{return new URL(t).pathname}catch(e){return t}}(n.toString()))!==J&&setTimeout(D,j))},L=function(t,e){if(void 0===e&&(e="event"),!E()){var n={"Content-Type":"application/json"};return void 0!==K&&(n["x-umami-cache"]=K),fetch(k,{method:"POST",body:JSON.stringify({type:e,payload:t}),headers:n}).then((function(t){return t.text()})).then((function(t){return K=t})).catch((function(){}))}},D=function(t,e){return L("string"==typeof t?Object.assign({},x(),{name:t,data:"object"==typeof e?e:void 0}):"object"==typeof t?t:"function"==typeof t?t(x()):x())};t.umami||(t.umami={track:D,identify:function(t){return L(Object.assign({},x(),{data:t}),"identify")}});var K,P,_,q,C,I=""+s+l,J=u.referrer,M=u.title;if(g&&!E()){c.pushState=A(c,"pushState",O),c.replaceState=A(c,"replaceState",O),C=function(t){var e=t.getAttribute.bind(t),n=e(T);if(n){var r={};return t.getAttributeNames().forEach((function(t){var n=t.match(N);n&&(r[n[1]]=e(t))})),D(n,r)}return Promise.resolve()},u.addEventListener("click",(function(t){var e=t.target,n="A"===e.tagName?e:function(t,e){for(var n=t,r=0;r title"))&&_.observe(q,{subtree:!0,characterData:!0,childList:!0});var R=function(){"complete"!==u.readyState||P||(D(),P=!0)};u.addEventListener("readystatechange",R,!0),R()}}}(window)}(); \ No newline at end of file diff --git a/js/main.js b/js/main.js new file mode 100644 index 00000000..e69de29b diff --git a/js/note.js b/js/note.js new file mode 100644 index 00000000..ec7a1413 --- /dev/null +++ b/js/note.js @@ -0,0 +1,14 @@ +document.addEventListener('DOMContentLoaded', function() { + document.querySelectorAll('.note-toggle').forEach(function(toggleButton) { + var content = toggleButton.nextElementSibling; + var isHidden = content.style.display === 'none'; + toggleButton.setAttribute('aria-expanded', !isHidden); + + toggleButton.addEventListener('click', function() { + var expanded = this.getAttribute('aria-expanded') === 'true'; + this.setAttribute('aria-expanded', !expanded); + content.style.display = expanded ? 'none' : 'block'; + }); + }); +}); + diff --git a/js/themetoggle.js b/js/themetoggle.js new file mode 100644 index 00000000..79764a8a --- /dev/null +++ b/js/themetoggle.js @@ -0,0 +1,57 @@ +function setTheme(mode) { + localStorage.setItem("theme-storage", mode); +} + +// Functions needed for the theme toggle +// + +function toggleTheme() { + if (localStorage.getItem("theme-storage") === "light") { + setTheme("dark"); + updateItemToggleTheme(); + } else if (localStorage.getItem("theme-storage") === "dark") { + setTheme("light"); + updateItemToggleTheme(); + } +} + +function updateItemToggleTheme() { + let mode = getSavedTheme(); + + const darkModeStyle = document.getElementById("darkModeStyle"); + if (darkModeStyle) { + darkModeStyle.disabled = (mode === "light"); + } + + const sunIcon = document.getElementById("sun-icon"); + const moonIcon = document.getElementById("moon-icon"); + if (sunIcon && moonIcon) { + sunIcon.style.display = (mode === "dark") ? "inline-block" : "none"; + moonIcon.style.display = (mode === "light") ? "inline-block" : "none"; + } + + let htmlElement = document.querySelector("html"); + if (mode === "dark") { + htmlElement.classList.remove("light") + htmlElement.classList.add("dark") + } else if (mode === "light") { + htmlElement.classList.remove("dark") + htmlElement.classList.add("light") + } +} + +function getSavedTheme() { + let currentTheme = localStorage.getItem("theme-storage"); + if(!currentTheme) { + if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { + currentTheme = "dark"; + } else { + currentTheme = "light"; + } + } + + return currentTheme; +} + +// Update the toggle theme on page load +updateItemToggleTheme(); diff --git a/js/toc.js b/js/toc.js new file mode 100644 index 00000000..5521c188 --- /dev/null +++ b/js/toc.js @@ -0,0 +1,15 @@ +document.addEventListener('DOMContentLoaded', () => { + const tocTitle = document.querySelector('.toc-title'); + const tocList = document.querySelector('.toc-list'); + + if (tocTitle && tocList) { + const toggleToC = () => { + const isExpanded = tocList.style.display === 'block' || window.getComputedStyle(tocList).display === 'block'; + tocList.style.display = isExpanded ? 'none' : 'block'; + tocTitle.classList.toggle('expanded', !isExpanded); + }; + + tocTitle.addEventListener('click', toggleToC); + } +}); + diff --git a/main.css b/main.css new file mode 100644 index 00000000..298e317f --- /dev/null +++ b/main.css @@ -0,0 +1 @@ +.cards{display:grid;grid-template-rows:auto;gap:24px;padding:12px 0}@media all and (min-width: 640px){.cards{grid-template-columns:repeat(auto-fill, minmax(400px, 1fr))}}@media all and (max-width: 640px){.cards{grid-template-columns:repeat(auto-fill, 1fr)}}.card{min-height:100px;background:var(--bg-1);border:2px solid var(--border-color);border-radius:10px;overflow:hidden}.card-info{padding:0 24px 24px 24px}.card-title{margin-top:.7em}.card-image{border:unset;width:100%}.card-image-placeholder{height:12px;width:100%}.card-description{margin-top:.5em;overflow:hidden}@media all and (max-width: 720px){.cards{gap:18px}}:root{--code-font: "Courier New", monospace;--bg-primary: var(--bg-1);--text-color: var(--text-0);--label-color: #f0f0f0;--hightlight-color: #f0f0f0}:root.dark{--hightlight-color: #204e8a}.code-label{background:#333;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-js{background:#f7df1e;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-yaml{background:#f71e6a;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-shell{background:#4eaa25;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-json{background:#1e90ff;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-python{background:#3572a5;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-css{background:#264de4;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-go{background:#00add8;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-markdown{background:blue;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-rust{background:#ff4647;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-java{background:#f89820;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-csharp{background:#178600;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-ruby{background:#701516;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-swift{background:#f05138;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-php{background:#777bb4;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-typescript{background:#3178c6;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-scala{background:#c22d40;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-kotlin{background:#f18e33;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-lua{background:navy;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-perl{background:#0298c3;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-haskell{background:#5e5086;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-r{background:#198ce7;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-dart{background:#00d2b8;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-elixir{background:#6e4a7e;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-clojure{background:#5881d8;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-bash{background:#4eaa25;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-default{background:#333;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}code{background-color:var(--bg-primary);padding:.1em .2em;border-radius:5px;border:1px solid var(--border-color);font-family:var(--code-font)}pre{background-color:var(--bg-primary) !important;border-radius:5px;border:1px solid var(--border-color);line-height:1.4;overflow-x:auto;padding:1em;position:relative}pre mark{background-color:var(--hightlight-color) !important;padding:0;border-radius:0px}pre code{background-color:rgba(0,0,0,0) !important;color:var(--text-color);font-size:100%;padding:0;border:none;font-family:var(--code-font)}pre code table{margin:0;border-collapse:collapse;font-family:var(--code-font)}pre code table mark{display:block;color:unset;padding:0;background-color:var(--hightlight-color) !important;filter:brightness(1.2)}pre code td,pre code th,pre code tr{padding:0;border-bottom:none;border:none}pre code tbody td:first-child{text-align:center;user-select:none;min-width:60px;border-right:none}pre code tbody tr:nth-child(even),pre code thead tr{background-color:unset}.clipboard-button,.clipboard-button svg{all:unset;cursor:pointer;position:absolute;bottom:5px;right:5px;z-index:10;background-color:rgba(0,0,0,0);border:none;fill:#ef5350;}.page-header{font-size:2.5em;line-height:100%;font-family:var(--header-font);margin:4rem 0px 1rem 0px}.centered-header{font-family:var(--header-font);position:absolute;top:40%;left:50%;transform:translate(-50%, -50%);text-align:center;font-size:4em}header{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;padding:1em 0}header .main{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px;font-size:1.5rem;margin-bottom:5px}header .social img,header #dark-mode-toggle img{width:16px;height:16px}header .socials{margin-bottom:10px;}#dark-mode-toggle{justify-content:center}.socials{flex-grow:0;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:flex-end;gap:6px}.social{border-bottom:unset;background-image:unset;padding:2px}.social>img{border:unset;width:24px;height:24px}@media (max-width: 600px){header{flex-direction:column;align-items:center;padding:1em 0}header .main a{font-size:20px}}.meta{color:#999;display:flexbox;align-items:center;flex-wrap:wrap;}#dark-mode-toggle>img{display:none;width:15px;height:15px;border:unset}h1,h2,h3,h4,h5,h6{font-size:1.2rem;margin-top:2em}h1::before{color:var(--primary-color);content:"# "}h2::before{color:var(--primary-color);content:"## "}h3::before{color:var(--primary-color);content:"### "}h4::before{color:var(--primary-color);content:"#### "}h5::before{color:var(--primary-color);content:"##### "}h6::before{color:var(--primary-color);content:"###### "}img{border:3px solid #ececec;max-width:100%}figure{box-sizing:border-box;display:inline-block;margin:0;max-width:100%}figure img{max-height:500px}@media screen and (min-width: 600px){figure{padding:0 40px}}figure h4{font-size:1rem;margin:0;margin-bottom:1em}figure h4::before{content:"↳ "}svg{max-height:15px}.toc-container .toc-title{cursor:pointer;position:relative;padding-left:20px}.toc-container .toc-title:before{content:"▼";position:absolute;left:0;transition:transform .3s ease}.toc-container .toc-title:hover:before,.toc-container .toc-title.expanded:before{transform:rotate(180deg)}.toc-container .toc-list{display:none}:root{--note-header-bg: var(--bg-2);--note-header-color: var(--text-0);--note-content-bg: var(--bg-1)}.note-container{border-radius:4px;overflow:hidden;margin:1em 0;position:relative;border-left:3px solid var(--primary-color);font-family:var(--paragraph-font)}.note-toggle,.note-header{color:var(--note-header-color);background-color:var(--note-header-bg);padding:10px 25px;text-align:left;border:none;width:100%;position:relative;outline:none;font-size:1.2em;transition:background-color .3s ease}.note-toggle p,.note-header p{margin:0}.note-toggle .note-center,.note-header .note-center{text-align:center;padding-right:50px}.note-toggle .note-icon,.note-toggle .note-icon,.note-header .note-icon,.note-header .note-icon{padding-left:25px}.note-toggle{cursor:pointer;position:relative}.note-toggle::before{content:"▼";position:absolute;right:20px;top:50%;transform:translateY(-50%);}.note-toggle:hover,.note-toggle:focus{color:var(--note-header-color);background-color:var(--note-header-bg);outline:none}.note-content{padding:10px 20px;background-color:var(--note-content-bg)}.note-icon::before{content:"✎";color:var(--primary-color);position:absolute;left:20px;top:50%;transform:translateY(-50%)}summary:hover,summary:focus{color:var(--primary-color);background-color:var(--note-header-bg);outline:none;padding:10px}.primary-color{color:var(--primary-color)}.draft-label{color:var(--hover-color);text-decoration:none;padding:2px 4px;border-radius:4px;margin-left:6px;background-color:var(--primary-color)}::-moz-selection{background:var(--primary-color);color:var(--hover-color);text-shadow:none}::selection{background:var(--primary-color);color:var(--hover-color)}p{line-height:1.5}hr{border:0;border-top:3px solid var(--border-color);margin:1em 0}blockquote{border-left:3px solid var(--primary-color);color:#737373;margin:0;padding-left:1em}a{border-bottom:3px solid var(--primary-color);color:inherit;text-decoration:none;position:relative;z-index:1}a.zola-anchor{border-bottom:none}a:hover{background-color:var(--primary-color);color:var(--hover-color)}time{color:grey}.list>ul{margin:0;padding:1rem 0 0 0}.list-item{margin-bottom:30px;list-style-type:none}del{text-decoration-color:var(--primary-color);text-decoration-thickness:3px}@media all and (max-width: 640px){.post-header{display:grid;grid-template-rows:auto 1fr}.post-header h1{margin-top:0}.post-header h1 a{border-bottom:none}}@media all and (min-width: 640px){.post-header{display:grid;gap:1rem;grid-row-gap:1.5rem;grid-template-columns:auto 1fr}.post-header h1{margin:0;font-size:130%}.post-header h1 a{border-bottom:none}}#dark-mode-toggle{border-bottom:none}#dark-mode-toggle:hover{background-color:rgba(0,0,0,0)}.MathJax_Display,.MJXc-display,.MathJax_SVG_Display{overflow-x:auto;overflow-y:hidden}table{border-spacing:0;border-collapse:collapse}table th{padding:6px 13px;border:1px solid #dfe2e5;font-size:large}table td{padding:6px 13px;border:1px solid #dfe2e5}.tags ul{margin-left:0;padding-left:0}.tags li{list-style-type:none}.tags a{border-bottom:3px solid var(--primary-color);font-family:var(--text-font)}.tags a:hover{color:var(--hover_color);background-color:var(--primary-color)}.tags a::before{content:"🏷 ";display:inline;white-space:nowrap !important}:root{--border-color: var(--border-color);--text-font: "Jetbrains Mono";--header-font: "Space Grotesk", "Helvetica", sans-serif;--code-font: "Jetbrains Mono"}html{background-color:var(--bg-0);color:var(--text-0);font-family:var(--text-font);line-height:1.6em}.content{max-width:1000px;margin:0 auto;padding:0 24px;word-wrap:break-word}@media all and (min-width: 640px){html{font-size:16.5px}}@media all and (min-width: 720px){html{font-size:17px}}@media all and (min-width: 960px){html{font-size:18px}} \ No newline at end of file diff --git a/posts/configuration/index.html b/posts/configuration/index.html new file mode 100644 index 00000000..60243678 --- /dev/null +++ b/posts/configuration/index.html @@ -0,0 +1,31 @@ + + Configuring Apollo + +
Posted on :: Tags: :: Source Code

Site Configuration

Theme Mode (theme)

Sets the color theme for your blog.

  • Type: String
  • Options: "light", "dark", "auto", "toggle"
  • Default: "toggle"
  • Usage: theme = "toggle"

The "toggle" option allows users to switch between light and dark modes, while "auto" typically follows the user's system preferences.

Defines the navigation menu items for your blog.

  • Type: Array of objects
  • Default: []
  • Usage:
    menu = [
    +    { name = "/posts", url = "/posts", weight = 1 },
    +    { name = "/projects", url = "/projects", weight = 2 },
    +    { name = "/about", url = "/about", weight = 3 },
    +    { name = "/tags", url = "/tags", weight = 4 },
    +]
    +

Socials

Defines the social media links.

  • Type: Array of objects
  • Default: []
  • Usage:
    socials = [
    +  { name = "twitter", url = "https://twitter.com/not_matthias", icon = "twitter" },
    +  { name = "github", url = "https://github.com/not-matthias/", icon = "github" },
    +]
    +

Table of Contents (toc)

Enables or disables the table of contents for posts.

  • Type: Boolean
  • Default: true
  • Usage: toc = true

When enabled, a table of contents will be generated for posts, making it easier for readers to navigate through longer articles.

CDN Usage (use_cdn)

Determines whether to use a Content Delivery Network (CDN) for assets.

  • Type: Boolean
  • Default: false
  • Usage: use_cdn = false

When set to true, the theme will attempt to load assets from a CDN, which can improve loading times for visitors from different geographic locations.

Favicon (favicon)

Specifies the path to the favicon image for your blog.

  • Type: String
  • Default: "/icon/favicon.png"
  • Usage: favicon = "/icon/favicon.png"

This sets the small icon that appears in the browser tab for your website.

Fancy Code Styling (fancy_code)

Enables enhanced styling for code blocks.

  • Type: Boolean
  • Default: true
  • Usage: fancy_code = true

This option adds the language label and a copy button.

Dynamic Notes (dynamic_note)

Allows for the creation of togglable note sections in your content.

  • Type: Boolean
  • Default: true
  • Usage: dynamic_note = true

When enabled, you can create expandable/collapsible note sections in your blog posts.

You can add anchor links by adding the following to your _index.md:

insert_anchor_links = "heading"
+

Page configuration

Source code (repo_view)

Do you want to link to the source code of your blog post? You can turn on the repo_view inside the [extra] section of your blog post.

[extra]
+repo_view = true
+repo_url = "https://github.com/not-matthias/apollo/tree/main/content"   # Alternatively add the repo here
+

The repo_url can be set in the [extra] section or in your config.toml.

Comments (comment)

Enables or disables the comment system for posts.

  • Type: Boolean
  • Default: false
  • Usage: comment = false

After making comment = true in [extra] section of you post, save your script from Giscus to templates/_giscus_script.html. When enabled, this allows readers to leave comments on your blog posts. This feature has to be set for each individual post and is not supported at higher levels.

Example configuration in content/posts/configuration.md:

+++
+title = "Configuring Apollo"
+
+[extra]
+comment = true
++++
+

Comments via utterances can be configured in template/_giscus_script.html like this:

<script src="https://utteranc.es/client.js"
+        repo="YOUR_NAME/YOUR_REPO"
+        issue-term="pathname"
+        theme="github-light"
+        crossorigin="anonymous"
+        async>
+</script>
+
\ No newline at end of file diff --git a/posts/index.html b/posts/index.html new file mode 100644 index 00000000..2978fb71 --- /dev/null +++ b/posts/index.html @@ -0,0 +1,4 @@ + + Posts + +
\ No newline at end of file diff --git a/posts/markdown/index.html b/posts/markdown/index.html new file mode 100644 index 00000000..f798ccd3 --- /dev/null +++ b/posts/markdown/index.html @@ -0,0 +1,10 @@ + + Markdown Test + +
Posted on :: Updated on :: Tags:

H1

H2

H3

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Aliquet sagittis id consectetur purus ut. In pellentesque massa placerat duis ultricies. Neque laoreet suspendisse interdum consectetur libero id. Justo nec ultrices dui sapien eget mi proin. Nunc consequat interdum varius sit amet mattis vulputate. Sollicitudin tempor id eu nisl nunc mi ipsum. Non odio euismod lacinia at quis. Sit amet nisl suscipit adipiscing. Amet mattis vulputate enim nulla aliquet porttitor lacus luctus accumsan. Sit amet consectetur adipiscing elit pellentesque habitant. Ac placerat vestibulum lectus mauris. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper velit sed. Google

Markdown Logo

Code Block

fn main() {
+    println!("Hello World");
+}
+
1fn main() { +
2 println!("Hello World"); +
3} +

Ordered List

  1. First item
  2. Second item
  3. Third item

Unordered List

  • List item
  • Another item
  • And another item

Nested list

  • Fruit
    • Apple
    • Orange
    • Banana
  • Dairy
    • Milk
    • Cheese

Quote

Two things are infinite: the universe and human stupidity; and I'm not sure about the universe.
Albert Einstein

Table Inline Markdown

ItalicsBoldCodeStrikeThrough
italicsboldcodestrikethrough

Foldable Text

Title 1

IT'S A SECRET TO EVERYBODY.

Title 2

Stay awhile, and listen!

Code tags

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

\ No newline at end of file diff --git a/posts/math-symbol/index.html b/posts/math-symbol/index.html new file mode 100644 index 00000000..e2ab6b3c --- /dev/null +++ b/posts/math-symbol/index.html @@ -0,0 +1,4 @@ + + Math Symbol Example + +
Posted on :: Tags:

Table of Contents

Note: This requires the mathjax and mathjax_dollar_inline_enable option set to true.

Inline Math

  • $(a+b)^2$ = $a^2 + 2ab + b^2$
  • A polynomial P of degree d over $\mathbb{F}_p$ is an expression of the form $P(s) = a_0 + a_1 . s + a_2 . s^2 + ... + a_d . s^d$ for some $a_0,..,a_d \in \mathbb{F}_p$

Displayed Math

$$ p := (\sum_{k∈I}{c_k.v_k} + \delta_v.t(x))·(\sum_{k∈I}{c_k.w_k} + \delta_w.t(x)) − (\sum_{k∈I}{c_k.y_k} + \delta_y.t(x)) $$

\ No newline at end of file diff --git a/posts/page/1/index.html b/posts/page/1/index.html new file mode 100644 index 00000000..9bd42f9f --- /dev/null +++ b/posts/page/1/index.html @@ -0,0 +1 @@ +Redirect

Click here to be redirected. \ No newline at end of file diff --git a/posts/shortcode/index.html b/posts/shortcode/index.html new file mode 100644 index 00000000..90f71ce1 --- /dev/null +++ b/posts/shortcode/index.html @@ -0,0 +1,24 @@ + + Shortcode Example + +

Posted on :: Tags:

Table of Contents

Note

Here is an example of the note shortcode:

This one is static!

Note!

This blog assumes basic terminal maturity

This one is clickable!

Syntax:

{{ note(header="Note!", body="This blog assumes basic terminal maturity") }}
+{{ note(clickable=true, hidden = true, header="Quiz!", body="The answer to the quiz!") }}
+

You can also use some HTML in the text:

Note!

This blog assumes basic terminal maturity

Literal shortcode:

{{ note(header="Note!", body="<h1>This blog assumes basic terminal maturity</h1>") }}
+

Pretty cool, right?

Finally, you can do something like this (hopefully):

Hello this is markdown inside a note shortcode

fn main() {
+    println!("Hello World");
+}
+

We can't call another shortcode inside a shortcode, but this is good enough.

Here is the raw markdown:

{{ note(clickable=true, header="Quiz!") }}
+
+# Hello this is markdown inside a note shortcode
+
+\`\`\`rust
+fn main() {
+    println!("Hello World");
+}
+\`\`\`
+
+We can't call another shortcode inside a shortcode, but this is good enough.
+
+{{/* end */}}
+

Finally, we have center

Centered Text

This is centered text

{{ note(center=true, header="Centered Text", body="This is centered text") }}
+

It works good enough for me!

\ No newline at end of file diff --git a/projects/index.html b/projects/index.html new file mode 100644 index 00000000..1c5cf7cc --- /dev/null +++ b/projects/index.html @@ -0,0 +1,4 @@ + + Projects + +
/projects/project-1.jpg

Apollo

Modern and minimalistic blog theme.
https://images.unsplash.com/photo-1523821741446-edb2b68bb7a0?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1470&q=80

Project 2

Example description
https://images.unsplash.com/photo-1462556791646-c201b8241a94?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1465&q=80

Project 3

Example description
https://images.unsplash.com/photo-1620121692029-d088224ddc74?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1632&q=80

Project 4

Example description with a lot of words but without any meaning. Why use lorem ipsum when you can just write a lot of text that has no underlying meaning?

Project 4

Example description
\ No newline at end of file diff --git a/projects/project-1.jpg b/projects/project-1.jpg new file mode 100644 index 00000000..db5232ef Binary files /dev/null and b/projects/project-1.jpg differ diff --git a/projects/project-1/index.html b/projects/project-1/index.html new file mode 100644 index 00000000..a18d9903 --- /dev/null +++ b/projects/project-1/index.html @@ -0,0 +1,4 @@ + + Apollo + +

Example project page

\ No newline at end of file diff --git a/projects/project-2/index.html b/projects/project-2/index.html new file mode 100644 index 00000000..4852952f --- /dev/null +++ b/projects/project-2/index.html @@ -0,0 +1,4 @@ + + Project 2 + +

Example project page

\ No newline at end of file diff --git a/projects/project-3/index.html b/projects/project-3/index.html new file mode 100644 index 00000000..251131bf --- /dev/null +++ b/projects/project-3/index.html @@ -0,0 +1,4 @@ + + Project 3 + +

Example project page

\ No newline at end of file diff --git a/projects/project-4/index.html b/projects/project-4/index.html new file mode 100644 index 00000000..a4e85b83 --- /dev/null +++ b/projects/project-4/index.html @@ -0,0 +1,4 @@ + + Project 4 + +

Example project page

\ No newline at end of file diff --git a/projects/project-5/index.html b/projects/project-5/index.html new file mode 100644 index 00000000..e56bc42d --- /dev/null +++ b/projects/project-5/index.html @@ -0,0 +1,4 @@ + + Project 4 + +

Example project page

\ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 00000000..5de5f126 --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://not-matthias.github.io/apollo/sitemap.xml diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..d970a5c0 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,58 @@ + + + + https://not-matthias.github.io/apollo/ + + + https://not-matthias.github.io/apollo/about/ + + + https://not-matthias.github.io/apollo/posts/ + + + https://not-matthias.github.io/apollo/posts/configuration/ + 2024-07-09 + + + https://not-matthias.github.io/apollo/posts/markdown/ + 2022-05-01 + + + https://not-matthias.github.io/apollo/posts/math-symbol/ + 2023-01-06 + + + https://not-matthias.github.io/apollo/posts/page/1/ + + + https://not-matthias.github.io/apollo/posts/shortcode/ + 2024-06-14 + + + https://not-matthias.github.io/apollo/projects/ + + + https://not-matthias.github.io/apollo/projects/project-1/ + + + https://not-matthias.github.io/apollo/projects/project-2/ + + + https://not-matthias.github.io/apollo/projects/project-3/ + + + https://not-matthias.github.io/apollo/projects/project-4/ + + + https://not-matthias.github.io/apollo/projects/project-5/ + + + https://not-matthias.github.io/apollo/tags/ + + + https://not-matthias.github.io/apollo/tags/documentation/ + + + https://not-matthias.github.io/apollo/tags/example/ + + diff --git a/social_icons/LICENSE b/social_icons/LICENSE new file mode 100644 index 00000000..993facc0 --- /dev/null +++ b/social_icons/LICENSE @@ -0,0 +1 @@ +All icons in this directory are downloaded from [FontAwesome](https://fontawesome.com/). They are part of the [free offer](https://fontawesome.com/license/free) and are licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). \ No newline at end of file diff --git a/social_icons/apple.svg b/social_icons/apple.svg new file mode 100644 index 00000000..d0532d53 --- /dev/null +++ b/social_icons/apple.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/bitcoin.svg b/social_icons/bitcoin.svg new file mode 100644 index 00000000..941d9b08 --- /dev/null +++ b/social_icons/bitcoin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/bluesky.svg b/social_icons/bluesky.svg new file mode 100644 index 00000000..6d555f43 --- /dev/null +++ b/social_icons/bluesky.svg @@ -0,0 +1,3 @@ + + + diff --git a/social_icons/deviantart.svg b/social_icons/deviantart.svg new file mode 100644 index 00000000..7dbd0b62 --- /dev/null +++ b/social_icons/deviantart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/diaspora.svg b/social_icons/diaspora.svg new file mode 100644 index 00000000..55527b53 --- /dev/null +++ b/social_icons/diaspora.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/discord.svg b/social_icons/discord.svg new file mode 100644 index 00000000..f0dfeab5 --- /dev/null +++ b/social_icons/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/discourse.svg b/social_icons/discourse.svg new file mode 100644 index 00000000..343bea65 --- /dev/null +++ b/social_icons/discourse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/email.svg b/social_icons/email.svg new file mode 100644 index 00000000..85245e20 --- /dev/null +++ b/social_icons/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/ethereum.svg b/social_icons/ethereum.svg new file mode 100644 index 00000000..af202de3 --- /dev/null +++ b/social_icons/ethereum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/etsy.svg b/social_icons/etsy.svg new file mode 100644 index 00000000..ebc040aa --- /dev/null +++ b/social_icons/etsy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/facebook.svg b/social_icons/facebook.svg new file mode 100644 index 00000000..0afaf7a2 --- /dev/null +++ b/social_icons/facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/github.svg b/social_icons/github.svg new file mode 100644 index 00000000..e32807ad --- /dev/null +++ b/social_icons/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/gitlab.svg b/social_icons/gitlab.svg new file mode 100644 index 00000000..b577d3f3 --- /dev/null +++ b/social_icons/gitlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/google-scholar.svg b/social_icons/google-scholar.svg new file mode 100644 index 00000000..578789d3 --- /dev/null +++ b/social_icons/google-scholar.svg @@ -0,0 +1,21 @@ + + + + + + + diff --git a/social_icons/google.svg b/social_icons/google.svg new file mode 100644 index 00000000..b3776b0f --- /dev/null +++ b/social_icons/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/hacker-news.svg b/social_icons/hacker-news.svg new file mode 100644 index 00000000..23e3980f --- /dev/null +++ b/social_icons/hacker-news.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/instagram.svg b/social_icons/instagram.svg new file mode 100644 index 00000000..89f63c40 --- /dev/null +++ b/social_icons/instagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/linkedin.svg b/social_icons/linkedin.svg new file mode 100644 index 00000000..d54fcf59 --- /dev/null +++ b/social_icons/linkedin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/mastodon.svg b/social_icons/mastodon.svg new file mode 100644 index 00000000..5e12f81c --- /dev/null +++ b/social_icons/mastodon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/matrix.svg b/social_icons/matrix.svg new file mode 100644 index 00000000..bc41720a --- /dev/null +++ b/social_icons/matrix.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/social_icons/orcid.svg b/social_icons/orcid.svg new file mode 100644 index 00000000..e8080808 --- /dev/null +++ b/social_icons/orcid.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/social_icons/paypal.svg b/social_icons/paypal.svg new file mode 100644 index 00000000..efdc81af --- /dev/null +++ b/social_icons/paypal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/pinterest.svg b/social_icons/pinterest.svg new file mode 100644 index 00000000..eb977c2b --- /dev/null +++ b/social_icons/pinterest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/quora.svg b/social_icons/quora.svg new file mode 100644 index 00000000..375d3027 --- /dev/null +++ b/social_icons/quora.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/reddit.svg b/social_icons/reddit.svg new file mode 100644 index 00000000..a8a3a96e --- /dev/null +++ b/social_icons/reddit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/rss.svg b/social_icons/rss.svg new file mode 100644 index 00000000..b8628861 --- /dev/null +++ b/social_icons/rss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/skype.svg b/social_icons/skype.svg new file mode 100644 index 00000000..3369aba6 --- /dev/null +++ b/social_icons/skype.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/slack.svg b/social_icons/slack.svg new file mode 100644 index 00000000..0dbc26d1 --- /dev/null +++ b/social_icons/slack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/snapchat.svg b/social_icons/snapchat.svg new file mode 100644 index 00000000..2cd79ddd --- /dev/null +++ b/social_icons/snapchat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/soundcloud.svg b/social_icons/soundcloud.svg new file mode 100644 index 00000000..4724d740 --- /dev/null +++ b/social_icons/soundcloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/spotify.svg b/social_icons/spotify.svg new file mode 100644 index 00000000..1d393ba3 --- /dev/null +++ b/social_icons/spotify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/stack-exchange.svg b/social_icons/stack-exchange.svg new file mode 100644 index 00000000..0a3177f5 --- /dev/null +++ b/social_icons/stack-exchange.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/stack-overflow.svg b/social_icons/stack-overflow.svg new file mode 100644 index 00000000..2ca50c7b --- /dev/null +++ b/social_icons/stack-overflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/steam.svg b/social_icons/steam.svg new file mode 100644 index 00000000..b61f3742 --- /dev/null +++ b/social_icons/steam.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/telegram.svg b/social_icons/telegram.svg new file mode 100644 index 00000000..02f48c06 --- /dev/null +++ b/social_icons/telegram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/twitter.svg b/social_icons/twitter.svg new file mode 100644 index 00000000..0778f725 --- /dev/null +++ b/social_icons/twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/vimeo.svg b/social_icons/vimeo.svg new file mode 100644 index 00000000..d98368e1 --- /dev/null +++ b/social_icons/vimeo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/whatsapp.svg b/social_icons/whatsapp.svg new file mode 100644 index 00000000..d2591425 --- /dev/null +++ b/social_icons/whatsapp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/x-twitter.svg b/social_icons/x-twitter.svg new file mode 100644 index 00000000..f5feed78 --- /dev/null +++ b/social_icons/x-twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/youtube.svg b/social_icons/youtube.svg new file mode 100644 index 00000000..287dca29 --- /dev/null +++ b/social_icons/youtube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tags/documentation/index.html b/tags/documentation/index.html new file mode 100644 index 00000000..708055fe --- /dev/null +++ b/tags/documentation/index.html @@ -0,0 +1,4 @@ + + not-matthias + +
\ No newline at end of file diff --git a/tags/example/index.html b/tags/example/index.html new file mode 100644 index 00000000..2e5066f8 --- /dev/null +++ b/tags/example/index.html @@ -0,0 +1,4 @@ + + not-matthias + +
\ No newline at end of file diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 00000000..3d8b85c0 --- /dev/null +++ b/tags/index.html @@ -0,0 +1,4 @@ + + not-matthias + +
\ No newline at end of file diff --git a/theme/dark.css b/theme/dark.css new file mode 100644 index 00000000..a097fcd1 --- /dev/null +++ b/theme/dark.css @@ -0,0 +1 @@ +:root.dark{--text-0: #f0f0f0;--text-1: #ababab;--bg-0: #121212;--bg-1: #1f1f1f;--bg-2: #383838;--border-color: var(--bg-2);--primary-color: #ef5350;--hover-color: white}:root.dark .social>img{filter:invert(1)} \ No newline at end of file diff --git a/theme/light.css b/theme/light.css new file mode 100644 index 00000000..61746318 --- /dev/null +++ b/theme/light.css @@ -0,0 +1 @@ +:root.light{--text-0: #212121;--text-1: #666;--bg-0: #fff;--bg-1: #fafafa;--bg-2: #e6e6e6;--border-color: var(--bg-2);--primary-color: #ef5350;--hover-color: white}:root.light .social :hover{filter:invert(1)} \ No newline at end of file