aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2022-12-20 20:33:57 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2022-12-20 20:33:57 +0100
commit1ac073cc30a23b68371e819c77422b4906dd4f20 (patch)
tree52469a6067a714dc93fb5a971ab620dd4a1c6c46
parent6342c2d1cc08bf6edb7f0ffdbdb69ce5b8be62dd (diff)
downloadmitjafelicijan.com-1ac073cc30a23b68371e819c77422b4906dd4f20.tar.gz
Move to bare theme.
-rwxr-xr-xconfig.toml2
-rwxr-xr-xcontent/posts/2022-10-11-handling-massive-worlds-in-godot.md2
-rw-r--r--content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md47
-rw-r--r--static/general/index.css2
-rwxr-xr-xthemes/bare/LICENSE20
-rwxr-xr-xthemes/bare/archetypes/default.md2
-rwxr-xr-xthemes/bare/layouts/404.html0
-rwxr-xr-xthemes/bare/layouts/_default/baseof.html14
-rwxr-xr-xthemes/bare/layouts/_default/list.html21
-rwxr-xr-xthemes/bare/layouts/_default/rss.xml27
-rwxr-xr-xthemes/bare/layouts/_default/single.html20
-rwxr-xr-xthemes/bare/layouts/partials/comments.html21
-rwxr-xr-xthemes/bare/layouts/partials/footer.html54
-rwxr-xr-xthemes/bare/layouts/partials/head.html31
-rwxr-xr-xthemes/bare/layouts/partials/navigation.html16
-rwxr-xr-xthemes/bare/layouts/partials/openring.html64
-rw-r--r--themes/bare/layouts/partials/read-more.html16
-rw-r--r--themes/bare/layouts/partials/side-projects.html10
-rwxr-xr-xthemes/bare/openring/openring.html19
-rwxr-xr-xthemes/bare/static/css/.gitkeep0
-rw-r--r--themes/bare/static/css/tailwind.css235
-rwxr-xr-xthemes/bare/static/js/.gitkeep0
-rwxr-xr-xthemes/bare/theme.toml16
23 files changed, 636 insertions, 3 deletions
diff --git a/config.toml b/config.toml
index 74c851d..f3c7770 100755
--- a/config.toml
+++ b/config.toml
@@ -3,7 +3,7 @@ languageCode = 'en-us'
3title = 'Mitja Felicijan' 3title = 'Mitja Felicijan'
4 4
5# Theme selction. 5# Theme selction.
6theme = 'simple' 6theme = 'bare'
7 7
8# Makes url's have '.html' at the end. 8# Makes url's have '.html' at the end.
9uglyurls = true 9uglyurls = true
diff --git a/content/posts/2022-10-11-handling-massive-worlds-in-godot.md b/content/posts/2022-10-11-handling-massive-worlds-in-godot.md
index 9603022..ed917c2 100755
--- a/content/posts/2022-10-11-handling-massive-worlds-in-godot.md
+++ b/content/posts/2022-10-11-handling-massive-worlds-in-godot.md
@@ -10,7 +10,7 @@ draft: true
101. [Handling lazy loading in 2D world](#handling-lazy-loading-in-2d-world) 101. [Handling lazy loading in 2D world](#handling-lazy-loading-in-2d-world)
11 1. [Player movement](#player-movement) 11 1. [Player movement](#player-movement)
12 12
13> Because these examples are exported from **Godot to WebAssembly** and the packaging produces **large files**, you will need to **click to lazy load them** 13Because these examples are exported from **Godot to WebAssembly** and the packaging produces **large files**, you will need to **click to lazy load them**
14 14
15I have seen a couple of examples on the net, but never really a comprehensive guide how this would be achieved. My solution is nowhere perfect, but it will get you started. This code is also not optimized, so buyer beware. 15I have seen a couple of examples on the net, but never really a comprehensive guide how this would be achieved. My solution is nowhere perfect, but it will get you started. This code is also not optimized, so buyer beware.
16 16
diff --git a/content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md b/content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md
new file mode 100644
index 0000000..fd25cdb
--- /dev/null
+++ b/content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md
@@ -0,0 +1,47 @@
1---
2title: Trying to build a New kind of terminal emulator
3url: trying-to-build-a-new-kind-of-terminal-emulator.html
4date: 2022-12-20
5draft: true
6---
7
8```c
9// Create the window
10SDL_Window *window = SDL_CreateWindow(
11 WINDOW_TITLE, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
12 WINDOW_WIDTH, WINDOW_HEIGHT,
13 SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
14```
15
16Over the past weeks, I have been really thinking about terminal emulators, how we interact with computers, the separation of text-based programs and GUI ones. To be perfectly honest, I got pissed off one evening when I was cleaning up files on my computer. Normally, I go into console and do `ncdu` and check where the junk is. Then I start deleting stuff. Without any discrimination, usually. But when it comes to screenshots, I have learned that it's good to keep them somewhere near if I need to refer to something that I was doing. I am an avid screenshot taker. So at that point I checked Pictures folder and also did a basic search `find . -type f -name "*.jpg"` for all the JPEG files in my home directory and immediately got pissed off. Why can’t I see thumbnails in my terminal? I know why, but why in the year of 2022 this is still a problem. I am used to traversing my disk via terminal. I am faster and I am more comfortable this way. But when it comes to visualization, I then need to revert to GUI applications and again find the same file to see it. I know that programs like `fex` and `sxiv` are available, but I would just like to see the preview. Like [Jupyter notebook](https://jupyter.org/) or something similar. Just having it inline. Part of a result.
17
18It also didn’t help that I was spending some time with the [Plan 9](https://plan9.io/plan9/) Operating system. More specifically [9FRONT](http://9front.org/). The way that [ACME editor](http://acme.cat-v.org/) handles text editing is just wonderful. Different and fresh somehow, even though it’s super old.
19
20So, I went on a lookout for an interesting way of visualizing results of some query. I found these applications to be outstanding examples of how not to be a captive of a predetermined way of doing things.
21
22- [Wolfram Mathematica](https://www.wolfram.com/mathematica/)
23- [Jupyter notebooks](https://jupyter.org/)
24- [Plan 9 / 9FRONT](http://www.9front.org)
25- [Temple OS](https://templeos.org/)
26- [Emacs](https://www.gnu.org/software/emacs/)
27
28My idea is not as out there as ACME is, but it is a spin on the terminal emulators. I like the modes that Vi/Vim provides you with. I like the way the Emacs does its own `M-x` `M-c`. Furthermore, I really like how Mathematica and Jupyter present the data in a free flowing form. And I love how Temple OS is basically a C interpreter on some level.
29
30So I started. I knew that I wanted to have the couple of modes, but I didn’t like the repetition of keystrokes, so the only option was to have some sort of toggle and indicate to the user that they are in a special mode. Like Vi does for Normal and Visual mode.
31
32These modes would for the first version be:
33
34- *Preview mode* (toggle with Ctrl + P)
35 - When this mode would be enabled, the `ls` command would try to find images from the results and display thumbnails from them in the terminal itself. No ASCII art. Proper images. In a grid!
36- *Detach mode* (toggle with Ctrl + D)
37 - When this mode would be enabled, every command would open a new window and execute that command in it. This would be useful for starting `htop` in a separate window.
38
39The reason for having these modes tooglable is to not ask for previews every time. You enable a mode and until you disable it, it behaves that way. Purely out of ergonomic reasons.
40
41I would like to treat every terminal I open as a session mentally. When I start using the terminal, I start digging deeper into the issue I am trying to resolve. And while I am doing this, I would like to open detached windows etc. A lot of these things can be done easily with something like [i3](https://i3wm.org/), but also that pull you out of the context of what you were doing. I would like to orchestrate everything from one single point.
42
43In planning for this project, I knew that I would need to use a language like C and a library such as [SDL2](https://www.libsdl.org/) in order to achieve the desired results. I had considered other options, but ultimately determined that [SDL2](https://www.libsdl.org/) was the best fit based on its capabilities and reputation in the programming community.
44
45At first, I thought the idea of a hardware accelerated terminal was a bit of a joke. It seemed like such a niche and unnecessary feature, especially given the fact that terminal emulators have been around for decades and have always relied on software rendering. But to be fair, [Alacritty](https://alacritty.org/) is doing the same thing.
46
47
diff --git a/static/general/index.css b/static/general/index.css
index d1c5813..3a4413f 100644
--- a/static/general/index.css
+++ b/static/general/index.css
@@ -1 +1 @@
/*! tailwindcss v3.2.1 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.mx-auto{margin-left:auto;margin-right:auto}.mb-10{margin-bottom:2.5rem}.mb-6{margin-bottom:1.5rem}.mb-1{margin-bottom:.25rem}.mb-12{margin-bottom:3rem}.mb-5{margin-bottom:1.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mt-4{margin-top:1rem}.ml-6{margin-left:1.5rem}.block{display:block}.flex{display:flex}.hidden{display:none}.h-full{height:100%}.w-full{width:100%}.flex-grow{flex-grow:1}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.items-center{align-items:center}.gap-1{gap:.25rem}.rounded{border-radius:.25rem}.border-2{border-width:2px}.border-0{border-width:0}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.pb-12{padding-bottom:3rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-extrabold{font-weight:800}.leading-relaxed{line-height:1.625}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}*{cursor:url(/general/9front-cursor.png),auto}.container-blog{max-width:700px}::selection{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}::-moz-selection{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}article.single h2{margin-bottom:1rem;margin-top:2rem;font-size:1.5rem;line-height:2rem;font-weight:700}article.single h3{font-size:1.25rem}article.single h3,article.single h4{margin-bottom:1rem;margin-top:2rem;line-height:1.75rem;font-weight:700}article.single h4{font-size:1.125rem}article.single p{margin-bottom:1.25rem}article.single a{text-decoration-line:underline}article.single a:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}article.single blockquote{background-image:url(/general/alert-light.svg);background-size:30px 30px;background-repeat:no-repeat;background-position:0 5px;margin-top:2rem;margin-bottom:2rem;padding-left:3rem}article.single img{margin-top:2rem;margin-bottom:2rem}article.single img,article.single video{width:100%;border-radius:.25rem;--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important}article.single audio{margin-bottom:1.5rem;width:100%}article.single code{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));padding:.25rem .5rem;font-weight:500}article.single code,article.single pre{border-radius:.25rem;font-size:.75rem;line-height:1rem}article.single pre{margin-bottom:1.5rem;overflow-x:auto;--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important;padding:1rem}article.single pre code{background:unset;padding:unset;line-height:1.625}article.single table{margin-bottom:1rem;width:100%;border-collapse:collapse;border-width:1px;--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity))}article.single table td,article.single table th,article.single table tr{border-width:1px;padding:.5rem 1rem;text-align:left}article.single ul{margin-bottom:1.5rem;list-style-type:disc;padding-left:1.5rem}@media (min-width:768px){article.single ul{padding-left:2.5rem}}article.single ol{list-style-type:decimal;padding-left:2rem}@media (min-width:768px){article.single ol{padding-left:2.5rem}}article.single .katex-display{margin-top:2.5rem;margin-bottom:2.5rem}article.single .ll-iframe{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}article.single .ll-iframe:before{display:flex;height:100%}@keyframes pulse{50%{opacity:.5}}article.single .ll-iframe:before{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;cursor:pointer;align-items:center;justify-content:center;border-radius:.25rem;border-width:2px;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;font-weight:500;content:"Click here to load resource…"}article.single .ll-iframe.empty:before{content:none}.comments img{max-width:auto!important;max-width:unset!important;max-width:inherit!important}.cactus-container .cactus-editor-textarea{height:8rem}.cactus-container .cactus-editor-name input,.cactus-container .cactus-editor-textarea{margin-bottom:.5rem;width:100%;border-radius:.25rem;border-width:1px;padding:.5rem .75rem;outline:2px solid #0000;outline-offset:2px}.cactus-container .cactus-editor-name{margin-bottom:.25rem}.cactus-editor-buttons{display:flex;gap:.5rem}.cactus-container .cactus-button{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity));padding:.5rem 1.5rem;font-size:1rem;line-height:1.5rem;font-weight:500}.cactus-container .cactus-button:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.cactus-container .cactus-editor{margin-bottom:2.5rem}.cactus-container .cactus-comments-list{display:flex;flex-direction:column;gap:2rem}.cactus-container .cactus-comment{display:flex;gap:1rem}.cactus-container .cactus-comment .cactus-comment-avatar img{height:2rem;width:2rem;border-radius:9999px}.cactus-container .cactus-comment .cactus-comment-avatar-placeholder{height:2rem;width:2rem;border-radius:9999px;--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.cactus-container .cactus-comment .cactus-comment-header{display:flex;align-items:center;gap:.5rem}.cactus-container .cactus-comment .cactus-comment-header .cactus-comment-displayname{font-weight:600}.cactus-container .cactus-comment .cactus-comment-header .cactus-comment-time{font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.cactus-container .cactus-comment .cactus-message-text code{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500}.cactus-container .cactus-comment .cactus-message-text ul{list-style-type:disc;padding-left:.5rem}@media (min-width:768px){.cactus-container .cactus-comment .cactus-message-text ul{padding-left:1.5rem}}.cactus-container .cactus-comment .cactus-message-text ol{list-style-type:decimal;padding-left:.5rem}@media (min-width:768px){.cactus-container .cactus-comment .cactus-message-text ol{padding-left:1.5rem}}.cactus-container .cactus-login-form-wrapper{position:relative;margin-bottom:1.5rem;border-radius:.25rem;border-width:1px;padding:.75rem}.cactus-container .cactus-login-form .cactus-login-close{position:absolute;right:.75rem;top:.75rem;height:1rem;width:1rem}.cactus-container .cactus-login-form .cactus-login-title{margin-bottom:1rem;margin-top:0;padding-top:0;font-weight:700}.cactus-container .cactus-login-form .cactus-login-client{margin-bottom:1.5rem}.cactus-container .cactus-login-form .cactus-login-client-title{margin-bottom:.5rem;font-weight:600}.cactus-container .cactus-login-form .cactus-login-credentials-title{margin-bottom:.25rem;font-weight:600}.cactus-container .cactus-login-form .cactus-login-field{margin-bottom:.5rem;display:flex;align-items:center;gap:1rem}.cactus-container .cactus-login-form .cactus-login-label{width:5rem}.cactus-container .cactus-login-form input{border-radius:.25rem;border-width:1px;padding:.25rem .5rem}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}@media (min-width:768px){.md\:mb-0{margin-bottom:0}.md\:block{display:block}.md\:flex-row{flex-direction:row}.md\:p-0{padding:0}} \ No newline at end of file /*! tailwindcss v3.2.1 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.collapse{visibility:collapse}.mx-auto{margin-left:auto;margin-right:auto}.mb-10{margin-bottom:2.5rem}.mb-6{margin-bottom:1.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-12{margin-bottom:3rem}.ml-6{margin-left:1.5rem}.mb-5{margin-bottom:1.25rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.table{display:table}.hidden{display:none}.h-full{height:100%}.w-full{width:100%}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.items-center{align-items:center}.gap-1{gap:.25rem}.rounded{border-radius:.25rem}.border-0{border-width:0}.border{border-width:1px}.border-2{border-width:2px}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.pb-12{padding-bottom:3rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-extrabold{font-weight:800}.leading-relaxed{line-height:1.625}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}*{cursor:url(/general/9front-cursor.png),auto}.container-blog{max-width:700px}::selection{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}::-moz-selection{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}article.single h2{margin-bottom:1rem;margin-top:2rem;font-size:1.5rem;line-height:2rem;font-weight:700}article.single h3{font-size:1.25rem}article.single h3,article.single h4{margin-bottom:1rem;margin-top:2rem;line-height:1.75rem;font-weight:700}article.single h4{font-size:1.125rem}article.single p{margin-bottom:1.25rem}article.single a{text-decoration-line:underline}article.single a:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}article.single blockquote{background-image:url(/general/alert-light.svg);background-size:30px 30px;background-repeat:no-repeat;background-position:0 5px;margin-top:2rem;margin-bottom:2rem;padding-left:3rem}article.single img{margin-top:2rem;margin-bottom:2rem}article.single img,article.single video{width:100%;border-radius:.25rem;--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important}article.single audio{margin-bottom:1.5rem;width:100%}article.single code{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));padding:.25rem .5rem;font-weight:500}article.single code,article.single pre{border-radius:.25rem;font-size:.75rem;line-height:1rem}article.single pre{margin-bottom:1.5rem;overflow-x:auto;--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important;padding:1rem}article.single pre code{background:unset;padding:unset;line-height:1.625}article.single table{margin-bottom:1rem;width:100%;border-collapse:collapse;border-width:1px;--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity))}article.single table td,article.single table th,article.single table tr{border-width:1px;padding:.5rem 1rem;text-align:left}article.single ul{margin-bottom:1.5rem;list-style-type:disc;padding-left:1.5rem}@media (min-width:768px){article.single ul{padding-left:2.5rem}}article.single ol{list-style-type:decimal;padding-left:2rem}@media (min-width:768px){article.single ol{padding-left:2.5rem}}article.single .katex-display{margin-top:2.5rem;margin-bottom:2.5rem}article.single .ll-iframe{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}article.single .ll-iframe:before{display:flex;height:100%}@keyframes pulse{50%{opacity:.5}}article.single .ll-iframe:before{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;cursor:pointer;align-items:center;justify-content:center;border-radius:.25rem;border-width:2px;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;font-weight:500;content:"Click here to load resource…"}article.single .ll-iframe.empty:before{content:none}.comments img{max-width:auto!important;max-width:unset!important;max-width:inherit!important}.cactus-container .cactus-editor-textarea{height:8rem}.cactus-container .cactus-editor-name input,.cactus-container .cactus-editor-textarea{margin-bottom:.5rem;width:100%;border-radius:.25rem;border-width:1px;padding:.5rem .75rem;outline:2px solid #0000;outline-offset:2px}.cactus-container .cactus-editor-name{margin-bottom:.25rem}.cactus-editor-buttons{display:flex;gap:.5rem}.cactus-container .cactus-button{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity));padding:.5rem 1.5rem;font-size:1rem;line-height:1.5rem;font-weight:500}.cactus-container .cactus-button:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.cactus-container .cactus-editor{margin-bottom:2.5rem}.cactus-container .cactus-comments-list{display:flex;flex-direction:column;gap:2rem}.cactus-container .cactus-comment{display:flex;gap:1rem}.cactus-container .cactus-comment .cactus-comment-avatar img{height:2rem;width:2rem;border-radius:9999px}.cactus-container .cactus-comment .cactus-comment-avatar-placeholder{height:2rem;width:2rem;border-radius:9999px;--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.cactus-container .cactus-comment .cactus-comment-header{display:flex;align-items:center;gap:.5rem}.cactus-container .cactus-comment .cactus-comment-header .cactus-comment-displayname{font-weight:600}.cactus-container .cactus-comment .cactus-comment-header .cactus-comment-time{font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.cactus-container .cactus-comment .cactus-message-text code{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500}.cactus-container .cactus-comment .cactus-message-text ul{list-style-type:disc;padding-left:.5rem}@media (min-width:768px){.cactus-container .cactus-comment .cactus-message-text ul{padding-left:1.5rem}}.cactus-container .cactus-comment .cactus-message-text ol{list-style-type:decimal;padding-left:.5rem}@media (min-width:768px){.cactus-container .cactus-comment .cactus-message-text ol{padding-left:1.5rem}}.cactus-container .cactus-login-form-wrapper{position:relative;margin-bottom:1.5rem;border-radius:.25rem;border-width:1px;padding:.75rem}.cactus-container .cactus-login-form .cactus-login-close{position:absolute;right:.75rem;top:.75rem;height:1rem;width:1rem}.cactus-container .cactus-login-form .cactus-login-title{margin-bottom:1rem;margin-top:0;padding-top:0;font-weight:700}.cactus-container .cactus-login-form .cactus-login-client{margin-bottom:1.5rem}.cactus-container .cactus-login-form .cactus-login-client-title{margin-bottom:.5rem;font-weight:600}.cactus-container .cactus-login-form .cactus-login-credentials-title{margin-bottom:.25rem;font-weight:600}.cactus-container .cactus-login-form .cactus-login-field{margin-bottom:.5rem;display:flex;align-items:center;gap:1rem}.cactus-container .cactus-login-form .cactus-login-label{width:5rem}.cactus-container .cactus-login-form input{border-radius:.25rem;border-width:1px;padding:.25rem .5rem}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}@media (min-width:768px){.md\:mb-0{margin-bottom:0}.md\:block{display:block}.md\:flex-row{flex-direction:row}.md\:p-0{padding:0}} \ No newline at end of file
diff --git a/themes/bare/LICENSE b/themes/bare/LICENSE
new file mode 100755
index 0000000..90c27d7
--- /dev/null
+++ b/themes/bare/LICENSE
@@ -0,0 +1,20 @@
1The MIT License (MIT)
2
3Copyright (c) 2022 Mitja Felicijan
4
5Permission is hereby granted, free of charge, to any person obtaining a copy of
6this software and associated documentation files (the "Software"), to deal in
7the Software without restriction, including without limitation the rights to
8use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9the Software, and to permit persons to whom the Software is furnished to do so,
10subject to the following conditions:
11
12The above copyright notice and this permission notice shall be included in all
13copies or substantial portions of the Software.
14
15THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/themes/bare/archetypes/default.md b/themes/bare/archetypes/default.md
new file mode 100755
index 0000000..ac36e06
--- /dev/null
+++ b/themes/bare/archetypes/default.md
@@ -0,0 +1,2 @@
1+++
2+++
diff --git a/themes/bare/layouts/404.html b/themes/bare/layouts/404.html
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/themes/bare/layouts/404.html
diff --git a/themes/bare/layouts/_default/baseof.html b/themes/bare/layouts/_default/baseof.html
new file mode 100755
index 0000000..79c7684
--- /dev/null
+++ b/themes/bare/layouts/_default/baseof.html
@@ -0,0 +1,14 @@
1<!DOCTYPE html>
2<html lang="en">
3
4{{ partial "head.html" . }}
5
6<body>
7 {{ partial "navigation.html" . }}
8 <div id="content">
9 {{ block "main" . }}{{ end }}
10 </div>
11 {{ partial "footer.html" . }}
12</body>
13
14</html> \ No newline at end of file
diff --git a/themes/bare/layouts/_default/list.html b/themes/bare/layouts/_default/list.html
new file mode 100755
index 0000000..73952eb
--- /dev/null
+++ b/themes/bare/layouts/_default/list.html
@@ -0,0 +1,21 @@
1{{ define "main" }}
2<main role="main">
3
4 <!-- List of all blog posts -->
5 <nav itemscope itemtype="https://schema.org/SiteNavigationElement" role="feed">
6 <meta itemprop="name" content="Article list">
7 {{ range (where .Site.RegularPages "Section" "posts") }}
8 <article itemscope itemtype="http://schema.org/Article" style="padding-bottom:10px;">
9 <time style="display:inline-block;width:70px">{{ .Date.Format "Jan 2006" }}</time>
10 <a href="/{{ .Params.url }}" itemprop="url" rel="bookmark noopener" aria-label="Opens URL">
11 {{ if .Params.draft }}
12 <span style="background:orange">Draft</span>
13 {{ end }}
14 {{.Title}}
15 </a>
16 </article>
17 {{ end }}
18 </nav>
19
20</main>
21{{ end }}
diff --git a/themes/bare/layouts/_default/rss.xml b/themes/bare/layouts/_default/rss.xml
new file mode 100755
index 0000000..6a35b96
--- /dev/null
+++ b/themes/bare/layouts/_default/rss.xml
@@ -0,0 +1,27 @@
1<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
2
3 <channel>
4
5 <title>{{ .Site.Author.name }}</title>
6 <link>{{ .Permalink }}</link>
7 <description>{{ .Site.Params.description }}</description>
8 <language>en-us</language>
9
10 {{ range (where .Site.RegularPages "Section" "posts") }}
11 <item>
12
13 <title>{{ .Title }}</title>
14 <link>{{ .Permalink }}</link>
15 <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
16 {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
17 <guid>{{ .Permalink }}</guid>
18
19 <description>{{ "<![CDATA[" | safeHTML }} {{ .Summary }}]]></description>
20 <content:encoded>{{ "<![CDATA[" | safeHTML }} {{ .Content }}]]></content:encoded>
21
22 </item>
23 {{end}}
24
25 </channel>
26
27</rss>
diff --git a/themes/bare/layouts/_default/single.html b/themes/bare/layouts/_default/single.html
new file mode 100755
index 0000000..23a60a9
--- /dev/null
+++ b/themes/bare/layouts/_default/single.html
@@ -0,0 +1,20 @@
1{{ define "main" }}
2<main role="main">
3
4 <!-- Single article -->
5 <article itemtype="http://schema.org/Article">
6 <header>
7 <h1 itemtype="headline">{{ .Title }}</h1>
8
9 {{ if in .Type "posts" }}
10 <time>Published on {{ .Date.Format "Monday Jan 2, 2006" }}</time>
11 {{ end }}
12 </header>
13
14 <div>
15 {{.Content}}
16 </div>
17 </article>
18
19</main>
20{{ end }}
diff --git a/themes/bare/layouts/partials/comments.html b/themes/bare/layouts/partials/comments.html
new file mode 100755
index 0000000..b905967
--- /dev/null
+++ b/themes/bare/layouts/partials/comments.html
@@ -0,0 +1,21 @@
1<section class="comments">
2 <h2 class="text-xl font-bold mb-2">Leave a comment</h2>
3 <p class="mb-4">You can write me an email at <a href="mailto:m@mitjafelicijan.com" class="underline hover:bg-yellow-100">m@mitjafelicijan.com</a> or comment bellow.</p>
4 <div id="comment-section"></div>
5
6 <script type="text/javascript" src="https://latest.cactus.chat/cactus.js"></script>
7
8 <script>
9 window.addEventListener('load', () => {
10 initComments({
11 node: document.getElementById("comment-section"),
12 defaultHomeserverUrl: "https://matrix.cactus.chat:8448",
13 serverName: "cactus.chat",
14 siteName: "mitjafelicijan.com",
15 commentSectionId: "{{ .File }}",
16 pageSize: 50,
17 updateInterval: 10,
18 });
19 });
20 </script>
21</section>
diff --git a/themes/bare/layouts/partials/footer.html b/themes/bare/layouts/partials/footer.html
new file mode 100755
index 0000000..ced622d
--- /dev/null
+++ b/themes/bare/layouts/partials/footer.html
@@ -0,0 +1,54 @@
1<footer style="margin-top:20px">
2 <small>
3 This website does not track you.
4 Content is made available under the <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noreferrer" class="underline hover:text-gray-800">CC BY 4.0 license</a> unless specified otherwise.
5 Blog feed is available as <a href="/index.xml" target="_blank" class="underline hover:text-gray-800">RSS</a> feed.
6 </small>
7</footer>
8
9<!-- Fathom - beautiful, simple website analytics -->
10<script src="https://cdn.usefathom.com/script.js" data-site="XHQARKXP" defer></script>
11
12{{ if ne .IsHome true }}
13<!-- KaTeX math library -->
14<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/katex.min.css" integrity="sha384-RZU/ijkSsFbcmivfdRBQDtwuwVqK7GMOw6IMvKyeWL2K5UAlyp6WonmB8m7Jd0Hn" crossorigin="anonymous">
15<script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/katex.min.js" integrity="sha384-pK1WpvzWVBQiP0/GjnvRxV4mOb0oxFuyRxJlk6vVw146n3egcN5C925NCP7a7BY8" crossorigin="anonymous"></script>
16<script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/contrib/auto-render.min.js" integrity="sha384-vZTG03m+2yp6N6BNi5iM4rW4oIwk5DfcNdFfxkk9ZWpDriOkXX8voJBFrAO7MpVl" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script>
17{{ end }}
18
19{{ if ne .IsHome true }}
20<!-- Lazy loading of iframes -->
21<script>
22 window.addEventListener('load', () => {
23 const iframes = document.querySelectorAll('.ll-iframe');
24
25 if (iframes) {
26 iframes.forEach(iframe => {
27 iframe.addEventListener('click', (evt) => {
28 // If there are no elements yet in the target element add iframe.
29 if (!evt.target.dataset.alreadyLoaded) {
30 // Setting this element as already loaded so it doesn't
31 // attempt to load it again.
32 evt.target.dataset.alreadyLoaded = true;
33
34 // Clearing up all existing elements inside of the target one.
35 evt.target.innerHTML = '';
36 evt.target.classList.add('empty');
37 evt.target.classList.add('border-0');
38
39 // Creating iframe DOM element.
40 const iframeElement = document.createElement('iframe');
41 iframeElement.classList.add('w-full');
42 iframeElement.classList.add('h-full');
43 iframeElement.classList.add('rounded');
44 iframeElement.src = evt.target.dataset.src;
45
46 // Appending iframe as a child of current element.
47 evt.target.appendChild(iframeElement);
48 }
49 });
50 });
51 }
52 });
53</script>
54{{ end }}
diff --git a/themes/bare/layouts/partials/head.html b/themes/bare/layouts/partials/head.html
new file mode 100755
index 0000000..14ec02e
--- /dev/null
+++ b/themes/bare/layouts/partials/head.html
@@ -0,0 +1,31 @@
1<meta charset="UTF-8">
2<meta name="theme-color" content="#ffffff">
3<meta name="viewport" content="width=device-width, initial-scale=1.0">
4
5<link rel="alternate" type="application/rss+xml" href="/index.xml" title="{{ .Site.Author.name }}">
6
7<style>
8body{padding:10px;line-height:1.3em;font-family:serif;}
9h1,h2,h3,h4,h5,h6{line-height:110%;}
10h1{font-size:190%}
11video,img{max-width:700px;}
12code{background:#ddd;white-space:nowrap;}
13pre code{background:transparent;white-space:pre;}
14pre{border:1px solid #000;padding:5px;overflow:auto;}
15table {border-collapse: collapse;border: 1px solid #000;}
16td,th {border:1px solid #000;padding:3px 10px;}
17@media only screen and (max-width: 740px){video,img{max-width:100%;}time{display:block!important}}
18</style>
19
20<link
21 href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL69vf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv76+/8LBwQkAAAAAAAAAAAAAAAC+vb3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+9vf/Bv78JAAAAAAAAAAAAAAAAu7q6/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7ubr/vr29CAAAAAAAAAAAy8nJAZ6foP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnqGj/6GipAoAAAAAHLjU/xcXHf/BwsL/I8XY/yPK3v8XGiD/IbjL/yPF2f8XGiD/Fxkf/yLF2f8gnK3/Fxog/62ztv8fwNf/FRcd/x271v8mz93/GRsi/xkXHf8p097/GiIp/xobIv8p0t3/KdPe/xocIv8fYmr/KNPe/xoZH/8aHCL/J87c/xy81/8VFxz/IsPZ/8zS0/8XGiD/Ir/R/yPH2/8XGiD/Fxkf/yPH2/8dd4T/GBog/yPJ3f8jyNr/uru9/xcUGv8cudb/EhITDKi5vRKlvMP/RUpOERwcHRAdOj4QHTk8EBwdHRAdNTgQHTo/EBwcHRAcHB0QSGduEKW4vf+koqQfHzg+EBqz0ewSFRv7EyMr/xq51vsTERb7ExUb+xq41fsau9j7ExUb+xiPp/sZudb7ExUb+xMVG/sZuNX/GKvI/BIUGfMdvdn/IrfL/xcaIP8n1eb/J9Dh/xkcIf8ZGR7/J8/f/xxCSv8ZGyH/J9Dg/ybQ4P8ZHCL/FSQs/yPK3/8UExj/GE1b/ybS5P8ZGB7/Ghwj/ynW5P8p2Ob/Ghwi/yWrtv8p1eH/Ghwi/xocIv8p1uT/J8XT/xkcIv8m1un/Hb7d/xUYH/8hzOr/HtHu/xcaIf8XGB//I8vi/xgxOv8XGSD/I8rg/yPK4P8XGiD/GUFL/yPP6f8SERj/Fhkh/x3A4f8AAAAAJ2f9/ydr//8mZPH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlYu38J2v//ydo/f8AAAAAAAAAAAd8/fkFqf//Iob8sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMY39awWr//8FfP3/AAAAAAAAAAAFm/7/SfD//wR+/f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOB/f9B7v//BaX+/wAAAAAAAAAAQ878SAyZ/v9n1v4KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADu9v8DDJb+/z3N/XgAAAAA3/sAAN/7AADf+wAA3/sAAAAAAAAAAAAAAAAAAN/7AAAAAAAAAAAAAAAAAAAAAAAAj/EAAI/5AACP8QAA3/sAAA=="
22 rel="icon" type="image/x-icon" />
23
24<title>{{ .Title }}</title>
25<meta name="description" content="{{ .Site.Params.description }}" />
26
27<meta property="og:type" content="article">
28<meta property="og:title" content="{{ .Title }}">
29<meta property="og:description" content="{{ if .Summary }}{{ .Summary }}{{ else }}{{ .Site.Params.Description }}{{ end }}">
30<meta property="og:url" content="https://mitjafelicijan.com/{{ .Params.url }}">
31<meta property="og:image" content="https://mitjafelicijan.com/general/og-big.jpg">
diff --git a/themes/bare/layouts/partials/navigation.html b/themes/bare/layouts/partials/navigation.html
new file mode 100755
index 0000000..5797b78
--- /dev/null
+++ b/themes/bare/layouts/partials/navigation.html
@@ -0,0 +1,16 @@
1<div style="margin-bottom:20px;">
2 <header style="display:flex;gap:10px;">
3 <div>
4 <a href="/" itemprop="url" style="color:firebrick">Mitja Felicijan</a>
5 </div>
6
7 <nav itemscope itemtype="http://schema.org/SiteNavigationElement" role="toolbar" style="display:flex;gap:10px;">
8 <meta itemprop="name" content="Main Menu">
9
10 <a href="https://git.mitjafelicijan.com" target="_blank" rel="noopener nofollow" itemprop="url" style="color:darkgoldenrod">Git</a>
11 <a href="https://files.mitjafelicijan.com" target="_blank" rel="noopener nofollow" itemprop="url" style="color:dodgerblue">Files</a>
12 <a href="/curriculum-vitae.html" style="color:tomato">CV</a>
13 <a href="/index.xml" itemprop="url" style="color:teal">RSS</a>
14 </nav>
15 </header>
16</div>
diff --git a/themes/bare/layouts/partials/openring.html b/themes/bare/layouts/partials/openring.html
new file mode 100755
index 0000000..0407b34
--- /dev/null
+++ b/themes/bare/layouts/partials/openring.html
@@ -0,0 +1,64 @@
1<section class="mb-10">
2 <h2 class="text-2xl font-bold mb-6">Articles from blogs I follow around the net</h2>
3
4 <section>
5
6 <article class="mb-6">
7 <a href="https://serokell.io/blog/haskell-in-production-e-bot7" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">Haskell in Production: e-bot7</a>
8 <p class="mb-1 text-sm text-gray-600">In this edition of our Haskell in Production series, we feature e-bot7 – a low-code conversational AI platform designed for customer service and support. Read the i…</p>
9 <div class="text-gray-500 font-medium text-xs">
10 Via <a href="https://serokell.io/blog" class="underline">Serokell Blog</a> on December 12, 2022
11 </div>
12 </article>
13
14 <article class="mb-6">
15 <a href="https://danluu.com/elon-dave-chappelle/" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">Transcript of Elon Musk on stage with Dave Chapelle</a>
16 <p class="mb-1 text-sm text-gray-600">This is a transcription of videos Elon Musk&#39;s appearance on stage with Dave Chapelle using OpenAI&#39;s Whisper model with some manual error corrections and ann…</p>
17 <div class="text-gray-500 font-medium text-xs">
18 Via <a href="https://danluu.com/atom/index.xml" class="underline">danluu.com</a> on December 11, 2022
19 </div>
20 </article>
21
22 <article class="mb-6">
23 <a href="https://www.jeffgeerling.com/blog/2022/1-million-watts-rf-how-fm-supertower-works" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">1 Million Watts of RF - how the FM Supertower works</a>
24 <p class="mb-1 text-sm text-gray-600">1 Million Watts of RF - how the FM Supertower works
25
26 As the son of a radio engineer, I&#39;ve seen my share of radio towers. From small, rural AM and FM t…</p>
27 <div class="text-gray-500 font-medium text-xs">
28 Via <a href="https://www.jeffgeerling.com/" class="underline">Jeff Geerling&#39;s Blog</a> on December 7, 2022
29 </div>
30 </article>
31
32 <article class="mb-6">
33 <a href="https://drewdevault.com/2022/12/01/I-shall-toil-quietly.html" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">I shall toil at a reduced volume</a>
34 <p class="mb-1 text-sm text-gray-600">Over the last nine years I have written 300,000 words for this blog on the
35topics which are important to me. I am not certain that I have much left to say.
36I can keep…</p>
37 <div class="text-gray-500 font-medium text-xs">
38 Via <a href="https://drewdevault.com" class="underline">Drew DeVault&#39;s blog</a> on December 1, 2022
39 </div>
40 </article>
41
42 <article class="mb-6">
43 <a href="https://mirzapandzo.com/posts/elasticbeanstalk-php-settings-and-the-frustratingly-confusing-guide-to-eb-deploy/" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">ElasticBeanstalk, PHP settings and the frustratingly confusing guide to eb deploy</a>
44 <p class="mb-1 text-sm text-gray-600">I&#39;ll be honest. I love using AWS. eb deploy is my go to command. The ElasticBeanstalk cloud ecosystem is amazing and I would find it hard to do my day job witho…</p>
45 <div class="text-gray-500 font-medium text-xs">
46 Via <a href="https://mirzapandzo.com/" class="underline">Mirza Pandzo</a> on November 1, 2022
47 </div>
48 </article>
49
50 <article class="mb-6">
51 <a href="https://cronokirby.com/posts/2022/10/dkgs-in-groups/" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">DKGs in Groups</a>
52 <p class="mb-1 text-sm text-gray-600">This is a short post on distributed key generation (DKG)
53in the context of cryptographic groups, such as elliptic curves.</p>
54 <div class="text-gray-500 font-medium text-xs">
55 Via <a href="https://cronokirby.com/posts/" class="underline">Posts on Cronokirby&#39;s Blog</a> on October 9, 2022
56 </div>
57 </article>
58
59 </section>
60
61 <p class="text-sm text-gray-500">
62 <a href="https://git.sr.ht/~sircmpwn/openring" class="no-underline hover:underline">Generated with openring.</a>
63 </p>
64</section>
diff --git a/themes/bare/layouts/partials/read-more.html b/themes/bare/layouts/partials/read-more.html
new file mode 100644
index 0000000..d604bfc
--- /dev/null
+++ b/themes/bare/layouts/partials/read-more.html
@@ -0,0 +1,16 @@
1<section>
2 <h2 class="text-2xl font-bold mb-6">Read more from this site</h2>
3 <nav itemscope itemtype="https://schema.org/SiteNavigationElement" class="mb-12">
4 <meta itemprop="name" content="Article list">
5 <ul>
6 {{ $randomPosts := shuffle (where .Site.RegularPages "Type" "posts") | first 5 }}
7 {{ range $randomPosts }}
8 <li class="mb-6">
9 <time class="block text-gray-400 font-medium text-xs">{{ .Date.Format "Mon Jan 2, 2006" }}</time>
10 <a href="/{{ .Params.url }}" itemprop="url" class="hover:bg-yellow-100 font-medium">{{ .Title }}</a>
11 <p class="text-gray-600 text-sm">{{ .Summary }}</p>
12 </li>
13 {{ end }}
14 </ul>
15 </nav>
16</section>
diff --git a/themes/bare/layouts/partials/side-projects.html b/themes/bare/layouts/partials/side-projects.html
new file mode 100644
index 0000000..5cca9b6
--- /dev/null
+++ b/themes/bare/layouts/partials/side-projects.html
@@ -0,0 +1,10 @@
1<section class="mb-12">
2 <h2 class="text-2xl font-bold mb-6">Side projects I worked on</h2>
3 <ul class="list-disc ml-6">
4 <li><a href="https://git.mitjafelicijan.com/journalctl-proxy.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">journalctl-proxy - Exposes your systemd logs to web via web interface</a></li>
5 <li><a href="https://git.mitjafelicijan.com/redis-marshal.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">redis-marshal - Lightweight Redis data exploration tool</a></li>
6 <li><a href="https://git.mitjafelicijan.com/dna-encoding.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">dna-encoding - Tools for encoding files to DNA sequence</a></li>
7 <li><a href="https://git.mitjafelicijan.com/vertex.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">vertex - Create mock API's and add basic logic to simplify prototyping</a></li>
8 <li><a href="https://git.mitjafelicijan.com/scarecrow.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">scarecrow - Minimal configuration reverse proxy</a></li>
9 </ul>
10</section>
diff --git a/themes/bare/openring/openring.html b/themes/bare/openring/openring.html
new file mode 100755
index 0000000..bd9ac55
--- /dev/null
+++ b/themes/bare/openring/openring.html
@@ -0,0 +1,19 @@
1<section class="mb-10">
2 <h2 class="text-2xl font-bold mb-6">Articles from blogs I follow around the net</h2>
3
4 <section>
5 {{ range .Articles }}
6 <article class="mb-6">
7 <a href="{{ .Link }}" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">{{ .Title }}</a>
8 <p class="mb-1 text-sm text-gray-600">{{ .Summary }}</p>
9 <div class="text-gray-500 font-medium text-xs">
10 Via <a href="{{ .SourceLink }}" class="underline">{{ .SourceTitle }}</a> on {{ .Date | datef "January 2, 2006" }}
11 </div>
12 </article>
13 {{ end }}
14 </section>
15
16 <p class="text-sm text-gray-500">
17 <a href="https://git.sr.ht/~sircmpwn/openring" class="no-underline hover:underline">Generated with openring.</a>
18 </p>
19</section>
diff --git a/themes/bare/static/css/.gitkeep b/themes/bare/static/css/.gitkeep
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/themes/bare/static/css/.gitkeep
diff --git a/themes/bare/static/css/tailwind.css b/themes/bare/static/css/tailwind.css
new file mode 100644
index 0000000..edbb0ab
--- /dev/null
+++ b/themes/bare/static/css/tailwind.css
@@ -0,0 +1,235 @@
1@tailwind base;
2@tailwind components;
3@tailwind utilities;
4
5* { cursor: url(/general/9front-cursor.png), auto; }
6
7/* Container */
8.container-blog {
9 max-width: 700px;
10}
11
12/* User text selection */
13::selection {
14 @apply bg-yellow-100 text-black;
15}
16
17::-moz-selection {
18 @apply bg-yellow-100 text-black;
19}
20
21/* Headings */
22article.single h2 {
23 @apply text-2xl font-bold mb-4 mt-8;
24}
25
26article.single h3 {
27 @apply text-xl font-bold mb-4 mt-8;
28}
29
30article.single h4 {
31 @apply text-lg font-bold mb-4 mt-8;
32}
33
34/* Paragraph */
35article.single p {
36 @apply mb-5;
37}
38
39/* Links */
40article.single a {
41 @apply underline hover:bg-yellow-100;
42}
43
44/* Blockquote */
45article.single blockquote {
46 background-image: url('/general/alert-light.svg');
47 background-size: 30px 30px;
48 background-repeat: no-repeat;
49 background-position: 0 5px;
50 @apply pl-12 my-8;
51}
52
53/* Media: Images, audio, video */
54article.single img {
55 @apply rounded w-full !bg-gray-50 my-8;
56}
57
58article.single video {
59 @apply rounded w-full !bg-gray-50;
60}
61
62article.single audio {
63 @apply w-full mb-6;
64}
65
66/* Code */
67article.single code {
68 @apply bg-yellow-100 rounded px-2 py-1 text-xs font-medium;
69}
70
71article.single pre {
72 @apply !bg-gray-50 rounded text-xs p-4 mb-6 overflow-x-auto;
73}
74
75article.single pre code {
76 background: unset;
77 padding: unset;
78 @apply leading-relaxed;
79}
80
81/* Tables */
82article.single table {
83 @apply w-full border border-black border-collapse mb-4;
84}
85
86article.single table tr,
87article.single table td,
88article.single table th {
89 @apply px-4 py-2 border text-left;
90}
91
92/* Unordered list */
93article.single ul {
94 @apply list-disc pl-6 md:pl-10 mb-6;
95}
96
97/* Ordered list */
98article.single ol {
99 @apply list-decimal pl-8 md:pl-10;
100}
101
102/* Katex */
103article.single .katex-display {
104 @apply my-10;
105}
106
107/* Lazy loading of iframes */
108article.single .ll-iframe {
109 @apply bg-gray-100 rounded;
110}
111
112article.single .ll-iframe::before {
113 @apply h-full flex border-2 border-gray-300 rounded justify-center items-center font-medium text-sm cursor-pointer animate-pulse;
114 content: 'Click here to load resource…';
115}
116
117article.single .ll-iframe.empty::before {
118 content: none;
119}
120
121/* Cactus Comments */
122.comments img {
123 max-width: auto !important;
124 max-width: unset !important;
125 max-width: inherit !important;
126}
127
128.cactus-container .cactus-editor-textarea {
129 @apply border w-full h-32 px-3 py-2 outline-none rounded mb-2;
130}
131
132.cactus-container .cactus-editor-name input {
133 @apply border w-full px-3 py-2 mb-2 outline-none rounded;
134}
135
136.cactus-container .cactus-editor-name {
137 @apply mb-1;
138}
139
140/* Cactus: Buttons */
141.cactus-editor-buttons {
142 @apply flex gap-2;
143}
144
145.cactus-container .cactus-button {
146 @apply text-base bg-gray-200 hover:bg-gray-300 font-medium px-6 py-2 rounded;
147}
148
149.cactus-container .cactus-editor {
150 @apply mb-10;
151}
152
153/* Cactus: Comment List */
154.cactus-container .cactus-comments-list {
155 @apply flex flex-col gap-8;
156}
157
158.cactus-container .cactus-comment {
159 @apply flex gap-4;
160}
161
162.cactus-container .cactus-comment .cactus-comment-avatar img {
163 @apply w-8 h-8 rounded-full;
164}
165
166.cactus-container .cactus-comment .cactus-comment-avatar-placeholder {
167 @apply w-8 h-8 rounded-full bg-gray-300;
168}
169
170.cactus-container .cactus-comment .cactus-comment-header {
171 @apply flex gap-2 items-center;
172}
173
174.cactus-container .cactus-comment .cactus-comment-header .cactus-comment-displayname {
175 @apply font-semibold;
176}
177
178.cactus-container .cactus-comment .cactus-comment-header .cactus-comment-time {
179 @apply text-gray-400 text-sm;
180}
181
182.cactus-container .cactus-comment .cactus-message-text code {
183 @apply bg-yellow-100 rounded px-2 py-1 text-xs font-medium;
184}
185
186/* Unordered list */
187.cactus-container .cactus-comment .cactus-message-text ul {
188 @apply list-disc pl-2 md:pl-6;
189}
190
191/* Ordered list */
192.cactus-container .cactus-comment .cactus-message-text ol {
193 @apply list-decimal pl-2 md:pl-6;
194}
195
196/* Cactus: Login */
197.cactus-container .cactus-login-form-wrapper {
198 @apply border mb-6 p-3 relative rounded;
199}
200
201.cactus-container .cactus-login-form .cactus-login-close {
202 @apply absolute right-3 top-3 w-4 h-4;
203}
204
205.cactus-container .cactus-login-form .cactus-login-title {
206 @apply font-bold mb-4 mt-0 pt-0;
207}
208
209/* Cactus: Login with a button */
210.cactus-container .cactus-login-form .cactus-login-client {
211 @apply mb-6;
212}
213
214.cactus-container .cactus-login-form .cactus-login-client-title {
215 @apply font-semibold mb-2;
216}
217
218/* Cactus: Login with credentials */
219.cactus-container .cactus-login-form .cactus-login-credentials {}
220
221.cactus-container .cactus-login-form .cactus-login-credentials-title {
222 @apply font-semibold mb-1;
223}
224
225.cactus-container .cactus-login-form .cactus-login-field {
226 @apply flex gap-4 mb-2 items-center;
227}
228
229.cactus-container .cactus-login-form .cactus-login-label {
230 @apply w-20;
231}
232
233.cactus-container .cactus-login-form input {
234 @apply border px-2 py-1 rounded;
235}
diff --git a/themes/bare/static/js/.gitkeep b/themes/bare/static/js/.gitkeep
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/themes/bare/static/js/.gitkeep
diff --git a/themes/bare/theme.toml b/themes/bare/theme.toml
new file mode 100755
index 0000000..bf6fd7f
--- /dev/null
+++ b/themes/bare/theme.toml
@@ -0,0 +1,16 @@
1# theme.toml template for a Hugo theme
2# See https://github.com/gohugoio/hugoThemes#themetoml for an example
3
4name = "Simple"
5license = "MIT"
6licenselink = "https://github.com/mitjafelicijan/hugo-simple/blob/master/LICENSE"
7description = "Simlistic theme"
8homepage = "http://mitjafelicijan.com/"
9tags = []
10features = []
11min_version = "0.41.0"
12
13[author]
14 name = "Mitja Felicijan"
15 homepage = "https://mitjafelicijan.com"
16