Compare commits

...

No commits in common. "main" and "master" have entirely different histories.
main ... master

46 changed files with 1871 additions and 528 deletions

View file

@ -1,79 +0,0 @@
name: Build and Deploy Blog
on:
push:
branches:
- main
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
jobs:
build:
runs-on: docker
container: git.private.coffee/privatecoffee/static-site-builder:latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install dependencies
run: |
python3 -m pip install -r requirements.txt --break-system-packages
- name: Generate static site
run: |
pelican content -o output -s pelicanconf.py
- name: Set up SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -t ed25519 git.private.coffee >> ~/.ssh/known_hosts
# Create SSH config file to ensure the correct identity file is used
echo "Host git.private.coffee" > ~/.ssh/config
echo " IdentityFile ~/.ssh/id_ed25519" >> ~/.ssh/config
echo " IdentitiesOnly yes" >> ~/.ssh/config
chmod 600 ~/.ssh/config
- name: Deploy to pages branch
run: |
# Configure Git
git config --global user.name "Forgejo"
git config --global user.email "noreply@private.coffee"
# Move generated static site files to a temporary location
mv output ../static_site_temp
cp .gitignore ../static_site_temp || true
# Create a new orphan branch named 'pages'
git checkout --orphan pages
# Remove all files from the working directory
git rm -rf .
# Move the static site files back to the working directory
mv ../static_site_temp/* ./
mv ../static_site_temp/.* ./ 2>/dev/null || true
# Write .domains file
echo "kumi.blog" > .domains
echo "www.kumi.blog" >> .domains
# Add and commit the static site files
git add .
git commit -m "Deploy blog"
# Set the SSH URL
git remote set-url origin "git@git.private.coffee:kumi/blog.git"
# Force push to the 'pages' branch
git push origin pages --force
- name: Save as artifact
uses: https://code.forgejo.org/forgejo/upload-artifact@v4
with:
name: static-site.zip
path: .

2
.gitignore vendored
View file

@ -1,2 +0,0 @@
venv/
/output

188
categories/index.html Normal file
View file

@ -0,0 +1,188 @@
<!DOCTYPE html>
<html><head>
<title>Categories</title>
<meta charset="utf-8">
<meta name="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
<meta content="telephone=no" name="format-detection">
<meta name="renderer" content="webkit">
<meta name="theme-color" content="#ffffff">
<script src="/vendor/js/jquery.min.js" ></script>
<script src="/vendor/js/popper.min.js" ></script>
<script src="/vendor/js/bootstrap.min.js" ></script>
<script src="/vendor/js/smooth-scroll.polyfills.min.js" ></script>
<link type="text/css" rel="stylesheet" href="/vendor/css/bootstrap.min.css">
<script src="/vendor/js/vue.min.js" ></script>
<link rel="stylesheet" href="https://kumi.blog/scss/journal.min.b16b92403170aa4eb662f097e3eb511404d139b4dbc2f3b2a55054fe0b9913c0.css" integrity="sha256-sWuSQDFwqk62YvCX4&#43;tRFATRObTbwvOypVBU/guZE8A=" media="screen">
<script src="https://kumi.blog//js/loadCSS.js"></script>
<script>
loadCSS("https://fonts.googleapis.com/css?family=Lora|Montserrat|Fira+Mono|Noto+Serif+SC|Material+Icons");
</script>
</head><body>
<div id="app"><div ref="sideContainer" class="side-container">
<a class="a-block nav-head false" href="https://kumi.blog/">
<div class="nav-title">
Kumi.Blog
</div>
<div class="nav-subtitle">
The Blog.
</div>
</a>
<div class="nav-link-list">
<a class="a-block nav-link-item active" href="https://kumi.blog/categories/">
Categories
</a>
<a class="a-block nav-link-item false" href="https://kumi.blog/tags/">
Tags
</a>
</div>
<div class="nav-footer">
Hugo Theme <a href="https://github.com/amazingrise/hugo-theme-diary">Diary</a> by <a href="https://amazingrise.net">Rise</a>
<br>
Ported from <a href="https://mak1t0.cc/" target="_blank" rel="noreferrer noopener">Makito</a>'s <a href="https://github.com/SumiMakito/hexo-theme-journal/" target="_blank" rel="noreferrer noopener">Journal.</a> <br>
<br>
&copy;
2019 Kumi.Blog
</div>
</div><div ref="extraContainer" class="extra-container">
<div class="pagination">
<a id="globalBackToTop" class="pagination-action animated-visibility" href="#top" :class="{ invisible: scrollY == 0 }">
<i class="material-icons pagination-action-icon">
keyboard_arrow_up
</i>
</a>
</div>
</div><div class="single-column-drawer-container" ref="drawer"
v-bind:class="{ 'single-column-drawer-container-active': isDrawerOpen }">
<div class="drawer-content">
<div class="drawer-menu">
<a class="a-block drawer-menu-item active" href="https://kumi.blog/categories/">
Categories
</a>
<a class="a-block drawer-menu-item false" href="https://kumi.blog/tags/">
Tags
</a>
</div>
</div>
</div>
<transition name="fade">
<div v-bind:class="{ 'single-column-drawer-mask': mounted }" v-if="isDrawerOpen" v-on:click="toggleDrawer"></div>
</transition>
<nav ref="navBar" class="navbar sticky-top navbar-light single-column-nav-container">
<div ref="navBackground" class="nav-background"></div>
<div class="container container-narrow nav-content">
<button id="nav_dropdown_btn" class="nav-dropdown-toggle" type="button" v-on:click="toggleDrawer">
<i class="material-icons">
menu
</i>
</button>
<a ref="navTitle" class="navbar-brand" href="https://kumi.blog/">
Kumi.Blog
</a>
</div>
</nav>
<div class="single-column-header-container" ref="pageHead"
v-bind:style="{ transform: 'translateZ(0px) translateY('+.3*scrollY+'px)', opacity: 1-navOpacity }">
<a href="https://kumi.blog/">
<div class="single-column-header-title">Kumi.Blog</div>
<div class="single-column-header-subtitle">The Blog.</div>
</a>
</div>
<div id="content">
<div ref="streamContainer" class="stream-container">
<div class="post-list-container post-list-container-shadow">
<a class="a-block">
<div class="post-item-wrapper post-item-wrapper-no-hover">
<div class="post-item post-item-no-gaps">
<div class="post-item-info-wrapper">
<div class="post-item-title post-item-title-small">
Categories
</div>
</div>
</div>
</div>
</a>
</div>
</div>
</div><div id="single-column-footer">Hugo Theme <a href="https://github.com/amazingrise/hugo-theme-diary">Diary</a> by <a href="https://amazingrise.net">Rise</a>
<br>
Ported from <a href="https://mak1t0.cc/" target="_blank" rel="noreferrer noopener">Makito</a>'s <a href="https://github.com/SumiMakito/hexo-theme-journal/" target="_blank" rel="noreferrer noopener">Journal.</a> <br>
<br>
&copy;
2019 Kumi.Blog
</div>
</div>
<script src="https://kumi.blog//js/journal.js"></script>
</body>
</html>

14
categories/index.xml Normal file
View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Categories on Kumi.Blog</title>
<link>https://kumi.blog/categories/</link>
<description>Recent content in Categories on Kumi.Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<atom:link href="https://kumi.blog/categories/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

View file

@ -0,0 +1 @@
<!DOCTYPE html><html><head><title>https://kumi.blog/categories/</title><link rel="canonical" href="https://kumi.blog/categories/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://kumi.blog/categories/" /></head></html>

View file

@ -1,41 +0,0 @@
Title: CITA - A Continuous Internal Threat Assessment for Privacy
Date: 2025-06-07 08:45
Category: Privacy
Tags: privacy, data, security, CITA
Author: Kumi
Summary: A framework for assessing what to share and with whom, balancing privacy and openness.
---
Whenever the issue of "privacy" comes up, I feel like there are two types of people out there: Those who think that privacy is somehow an absolute, that any data you produce is always too sacred to be shared, and those who think that privacy doesn't matter at all, because they have "nothing to hide".
In my opinion, both of these positions are probably misguided. To me, privacy is a matter of context. There are some things that I would never want to share with anyone, there are things of which I wouldn't mind certain people knowing, and there are things that I would be happy to share with the world. The key is making a conscious decision about what to share and with whom, rather than just assuming that everything is either private or public.
To that end, I would like to propose a kind of "test" you can use to determine whether and how you want to share something. I call it "CITA", a "Continuous Internal Threat Assessment". Let's break it down:
1. **Continuous**: This is not a one-time test. Your context and your relationships change over time, and so does the technological landscape, so you should regularly reassess what you share and with whom.
2. **Internal**: This test is about your own internal assessment of the situation. It's not about fulfilling some external standard or expectation, but judging based on your own values and comfort level.
3. **Threat**: This is about evaluating the potential risks of sharing certain information. What could go wrong? Who could misuse this information? What are the consequences if it gets out?
4. **Assessment**: Finally, this is about making a conscious decision based on your evaluation of the situation. After considering the potential threats, you decide whether to share the information and with whom.
CITA can be applied to any kind of information, whether it's personal data, opinions, or even creative work. By regularly applying this test, you can maintain a healthy balance between privacy and openness, ensuring that you share what you are comfortable with while protecting your personal boundaries.
Imagine you are about to post something online, or share a personal story with a friend. Before you do, take a moment to run it through CITA and ask yourself a few questions:
- **Is this something I want to share?** Do I feel comfortable with this information being out there? All of it? Do I want to be associated with it? Should I use a pseudonym for that?
- **Who will see it?** Am I okay with this information being accessible to my friends, family, or even strangers? Is this the right place to share it?
- **Cui bono?** Is someone else benefiting from me sharing this information? Is it in *my* best interest to share it?
- **Is this just my own data?** Or does it (directly or indirectly) involve other people? If so, have I considered their feelings and privacy? Have I *asked* for their consent?
- **What could happen if it gets out?** Could this information be misused? Could it affect my relationships or reputation? Could it have legal implications? What would my future self think about this?
- **Am I making a conscious choice?** After considering the potential risks, am I still comfortable sharing this information? Am I sharing this because I want to, or because I feel pressured to? If I'm getting something in return, is it worth the potential risks?
Most of us, for example, would not exactly want everyone to know what we say about Uncle Guntram behind his back, so it isn't going on our social media accounts. But we might be comfortable sharing it with our siblings in a private chat. Unless, of course, we find out that one of our siblings tells Uncle Guntram about it, in which case we might reconsider sharing that information with them in the future. And in this way, we are already applying CITA without even realizing it.
But it can also be applied to more complex situations: If I sign up to that free service, how am I paying for it? With my data, most likely. So I might want to consider whether the service is worth giving up my data for. Most of my friends have Telegram, but isn't Signal supposed to be more secure? If I upload a funny photo of my younger family members, would they be comfortable with that? What about twenty years later? Using CITA, you can evaluate these scenarios and... well, probably not post that photo.
So let's make CITA part of our daily lives. Whenever you consider posting something online, discussing a sensitive topic, signing up for an adult entertainment website - take a moment to run it through CITA. Ask yourself: Is this something I want to share? Who will see it? Should/could I use a pseudonym for that? What could happen if it gets out? By doing this, you can make more informed decisions about your privacy and the information you choose to share.
All of us will come to different conclusions there. Of course, if you're blowing whistle on a corrupt government, you might want to protect your identity at all costs for fear of retaliation, ensure that no metadata can be traced back to you, and so on. If you're just posting a funny cat video, you might not care at all who sees it, and that's perfectly fine too. The key is that you are making a conscious choice based on your own values and the context of the situation.
Keep in mind that CITA is not only about the privacy aspect of sharing information, and is not intended to override other considerations, like your moral, political or ethical views. In fact, you can easily integrate those into your assessment. Not using Xitter because you don't like their business practices is still an absolutely valid outcome of applying CITA - after all, acting against your values definitely poses a threat to your sense of self and integrity, and in that specific case, probably a threat to your mental health, and to democracy itself.
This is what I believe privacy should be about: not an absolute (in either direction), but a nuanced understanding of what we share and why, and what the potential consequences are.

View file

@ -1,13 +0,0 @@
Title: Hello World
Date: 2019-12-30 20:21
Category: General
Tags: blog, introduction
Slug: hello-world
Author: Kumi
Summary: Welcome to my new blog!
Well, hello. These are the first lines on kumi.blog.
Im Kumi, this is a blog, so that should explain the name. As for the contents, Im not sure about those either. Expect to see a little bit about my life, a lot of IT related stuff (Im thinking about doing little howtos for server admins and self-datafication, for example), maybe a little politics - well, lets just all sit back and enjoy the show.
Thats all for now. See you all soon!

View file

@ -1,14 +0,0 @@
Title: About
Hey there! I'm Kumi, a slightly geeky IT professional with a passion for coding and technology. I love building things and learning new stuff along the way. When I'm not coding, you can find me playing video games or reading a good book.
This blog is where I share my thoughts, projects, and experiences in the tech world. Feel free to explore and get in touch if you have any questions or just want to chat!
## Contact
If you want to get in touch, feel free to drop me a note at [email@kumi.email](mailto:email@kumi.email). Use my [PGP key](kumi.asc) for secure communication.
You can also find me at:
- [Cuddly.space (Fediverse)](https://cuddly.space/@thekumi)
- [Matrix](https://matrix.pcof.fi/#/@kumi:private.coffee)

712
css/journal.css Normal file
View file

@ -0,0 +1,712 @@
::-webkit-scrollbar {
display: none; }
body {
background: #fcfcfc;
padding: 0;
margin: 0;
font-family: "Lora", "source-han-serif-tc", serif;
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.004);
text-rendering: optimizeLegibility !important;
-webkit-font-smoothing: antialiased !important;
color: black; }
* {
color: black;
line-height: 1.5em;
word-wrap: break-word; }
h1 {
font-size: 30px; }
h2 {
font-size: 27px; }
h3 {
font-size: 24px; }
h4 {
font-size: 21px; }
h5 {
font-size: 18px; }
h6 {
font-size: 15px; }
textarea,
select,
input,
button {
outline: none !important; }
button {
cursor: hand;
cursor: pointer; }
code {
color: #7a422c;
background: rgba(159, 86, 58, 0.07) !important;
padding: 2px 5px;
border-radius: 3px;
font-family: "Fira Mono", "Cousine", Monaco, Menlo, "Source Code Pro", monospace; }
pre {
background: rgba(159, 86, 58, 0.07) !important;
color: #7a422c;
padding: 12px 15px;
border-radius: 5px;
font-family: "Fira Mono", "Cousine", Monaco, Menlo, "Source Code Pro", monospace; }
pre * {
background: none !important;
font-family: "Fira Mono", "Cousine", Monaco, Menlo, "Source Code Pro", monospace !important; }
pre code {
padding: 0; }
blockquote {
padding: 10px 20px;
border-left: 3px solid rgba(159, 86, 58, 0.7);
color: #7a422c;
background: rgba(159, 86, 58, 0.05); }
blockquote p {
margin-bottom: 0; }
blockquote * {
color: #7a422c; }
a {
color: #9f563a; }
a:hover {
color: #7a422c;
text-underline-position: under; }
@media screen and (max-width: 1020px) {
a:hover {
text-decoration: none !important; } }
.a-block {
display: block;
text-decoration: none !important; }
.a-block:hover {
text-decoration: none !important; }
.no-margin {
margin: 0; }
.no-padding {
padding: 0; }
.no-overflow {
overflow: hidden !important; }
.animated-visibility {
transition: visibility 0s, opacity 0.5s linear;
visibility: visible;
opacity: 1; }
.invisible {
visibility: hidden;
opacity: 0; }
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s; }
.fade-enter,
.fade-leave-to {
opacity: 0; }
#lv-container {
padding: 0 30px; }
@media screen and (max-width: 1020px) {
#lv-container {
padding: 0 15px; } }
.single-column-nav-container {
display: none !important; }
@media screen and (max-width: 1020px) {
.single-column-nav-container {
display: block !important;
padding: 0; }
.single-column-nav-container * {
font-family: "Montserrat", "Roboto", "Source Sans Pro", "Helvetica", "Arial", "Lora", "source-han-serif-tc", serif;
transition: opacity 0.5s ease-in-out; }
.single-column-nav-container button {
padding: 0; }
.single-column-nav-container .nav-content {
padding: 12px 20px;
justify-content: flex-start;
max-width: unset !important; }
.single-column-nav-container .navbar-brand {
opacity: 0;
text-align: left;
padding-left: 24px !important; }
.single-column-nav-container .nav-dropdown-toggle {
display: flex;
align-content: center;
align-items: center;
justify-items: center;
justify-content: center;
background: none !important;
border: none;
padding-top: 1px; }
.single-column-nav-container .nav-dropdown-toggle:hover {
color: #3f587d !important; }
.single-column-nav-container .nav-icon-group {
z-index: 5;
padding-right: 5px; }
.single-column-nav-container .nav-icon-group ul {
list-style: none;
margin: 0;
padding: 0; }
.single-column-nav-container .nav-icon-group li {
display: inline;
margin: 0;
padding: 0; }
.single-column-nav-container .nav-icon {
padding: 8px; }
.single-column-nav-container .nav-background {
opacity: 0;
z-index: -1;
left: 0;
position: absolute;
width: 100%;
height: 100%;
background: white;
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); } }
.single-column-header-container {
display: none !important; }
@media screen and (max-width: 1020px) {
.single-column-header-container {
display: block !important;
padding: 50px 20px 80px 20px;
transition: padding 0.5s ease-in-out, margin 0.5s ease-in-out;
text-align: center; }
.single-column-header-container * {
font-family: "Montserrat", "Roboto", "Source Sans Pro", "Helvetica", "Arial", "Lora", "source-han-serif-tc", serif;
color: black; }
.single-column-header-container .single-column-header-title {
font-size: 28px; }
.single-column-header-container .single-column-header-subtitle {
font-size: 20px; } }
.single-column-drawer-container {
display: none !important; }
@media screen and (max-width: 1020px) {
.single-column-drawer-container {
display: block !important;
position: fixed;
top: 0;
left: -260px;
width: 260px;
height: 100vh;
z-index: 1800;
transition: all 0.3s ease-in-out; }
.single-column-drawer-container .drawer-content {
background: white;
height: 100%;
width: 100%;
padding: 50px 0 80px 0;
display: flex; }
.single-column-drawer-container .drawer-content .drawer-menu {
flex-grow: 1;
display: flex;
justify-items: center;
justify-content: center;
flex-direction: column; }
.single-column-drawer-container .drawer-content .drawer-menu .drawer-menu-item {
font-size: 18px;
margin-bottom: 10px;
border-right: 2px solid transparent;
padding: 8px 30px 8px 30px;
cursor: hand;
cursor: pointer;
transition: all 0.2s linear;
color: black; }
.single-column-drawer-container .drawer-content .drawer-menu .drawer-menu-item.active {
border-right: 2px solid #9f563a;
background: rgba(159, 86, 58, 0.1);
color: #2f1911; } }
.single-column-drawer-mask {
display: none !important; }
@media screen and (max-width: 1020px) {
.single-column-drawer-mask {
display: block !important;
position: fixed;
top: 0;
bottom: 0;
right: 0;
left: 0;
background: rgba(0, 0, 0, 0.8);
z-index: 1600;
transition: all 0.3s ease-in-out; } }
.single-column-drawer-container-active {
left: 0;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.2); }
.side-container {
position: fixed;
top: 0;
height: 100vh;
width: 25%;
text-align: right;
font-family: "Montserrat", "Roboto", "Source Sans Pro", "Helvetica", "Arial", "Lora", "source-han-serif-tc", serif;
padding: 20px 0 50px 0;
overflow-x: hidden;
overflow-y: scroll;
display: flex;
flex-direction: column;
justify-content: space-between;
scrollbar-width: none;
}
.side-container .nav-head {
padding: 30px 28px 30px 20px;
cursor: hand;
cursor: pointer;
margin-bottom: 10px;
transition: all 0.2s linear;
color: black;
border-right: 2px solid transparent; }
.side-container .nav-head .nav-title {
font-size: 30px;
line-height: 42px; }
.side-container .nav-head .nav-subtitle {
margin-top: 8px;
font-size: 18px; }
.side-container .nav-head:hover {
border-right: 2px solid rgba(159, 86, 58, 0.6);
background: rgba(159, 86, 58, 0.02);
color: #2f1911; }
.side-container .nav-head.active {
border-right: 2px solid #9f563a;
background: rgba(159, 86, 58, 0.03);
color: #542e1f; }
.side-container .nav-link-list {
flex-grow: 1; }
.side-container .nav-link-list .nav-link-item {
font-size: 20px;
margin-bottom: 10px;
border-right: 2px solid transparent;
padding: 8px 28px 8px 30px;
cursor: hand;
cursor: pointer;
transition: all 0.2s linear;
color: black; }
.side-container .nav-link-list .nav-link-item:hover {
border-right: 2px solid rgba(159, 86, 58, 0.6);
background: rgba(159, 86, 58, 0.02);
color: #2f1911; }
.side-container .nav-link-list .nav-link-item.active {
border-right: 2px solid #9f563a;
background: rgba(159, 86, 58, 0.03);
color: #542e1f; }
.side-container .nav-footer {
padding: 20px 30px 0 20px;
font-size: 12px; }
@media screen and (max-width: 1020px) {
.side-container {
display: none; } }
.extra-container {
position: fixed;
top: 0;
right: 0;
height: 100vh;
width: 64px;
text-align: right;
font-family: "Montserrat", "Roboto", "Source Sans Pro", "Helvetica", "Arial", "Lora", "source-han-serif-tc", serif;
overflow-x: hidden;
overflow-y: scroll;
display: flex;
flex-direction: column;
justify-content: flex-end;
padding: 30px 0;
scrollbar-width: none;
}
.extra-container .pagination {
display: flex;
flex-direction: column; }
.extra-container .pagination .pagination-indicator {
display: flex;
flex-direction: column;
align-content: center;
justify-content: center;
align-items: center;
justify-items: center;
width: 64px;
padding: 15px 0;
font-size: 12px;
font-family: "Fira Mono", "Cousine", Monaco, Menlo, "Source Code Pro", monospace; }
.extra-container .pagination .pagination-action {
display: flex;
flex-direction: column;
align-content: center;
justify-content: center;
align-items: center;
justify-items: center;
width: 64px;
cursor: hand;
cursor: pointer;
padding: 15px 0; }
.extra-container .pagination .pagination-action :not(.pagination-action-icon) {
transition: all 0.2s linear;
font-size: 13px;
font-family: "Fira Mono", "Cousine", Monaco, Menlo, "Source Code Pro", monospace; }
.extra-container .pagination .pagination-action * {
transition: all 0.3s linear; }
.extra-container .pagination .pagination-action:hover {
text-decoration: none; }
.extra-container .pagination .pagination-action:hover * {
color: #7a422c; }
@media screen and (max-width: 1020px) {
.extra-container {
display: none; } }
.pagination-bar-container {
position: fixed;
top: 0;
right: 0;
height: 100vh;
width: 25%;
text-align: right;
font-family: "Montserrat", "Roboto", "Source Sans Pro", "Helvetica", "Arial", "Lora", "source-han-serif-tc", serif;
padding: 20px 0;
overflow: scroll;
display: flex;
flex-direction: column; }
.stream-container {
padding-left: 25%;
padding-right: 64px;
width: 100%;
min-height: 100vh;
max-width: 1480px; }
@media screen and (max-width: 1020px) {
.stream-container {
padding: 0;
min-height: unset; } }
.stream-container .post-list-container {
width: 100%;
min-height: 100vh;
padding: 20px 0 20px 0;
background: #ffffff;
box-shadow: 0 0 16px rgba(0, 0, 0, 0.12); }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container {
min-height: unset;
padding: 0;
box-shadow: 0 0 0 rgba(0, 0, 0, 0.2); } }
.stream-container .post-list-container .post-item-wrapper,
.stream-container .post-list-container > * .post-item-wrapper {
cursor: hand;
cursor: pointer;
transition: all 0.2s linear; }
.stream-container .post-list-container .post-item-wrapper .post-item,
.stream-container .post-list-container > * .post-item-wrapper .post-item {
margin: 0 28px 0 35px;
padding: 30px 0;
display: flex;
flex-direction: row;
align-items: center; }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container .post-item-wrapper .post-item,
.stream-container .post-list-container > * .post-item-wrapper .post-item {
flex-direction: column-reverse;
margin: 0 0 15px 0;
padding: 0;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
background: #ffffff; } }
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-info-wrapper,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-info-wrapper {
flex-grow: 1; }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-info-wrapper,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-info-wrapper {
width: 100%;
padding: 15px 20px; } }
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-info-wrapper .post-item-title,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-info-wrapper .post-item-title {
font-size: 30px;
font-weight: 600;
font-style: normal;
margin-bottom: 10px;
line-height: 1.5em; }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-info-wrapper .post-item-title,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-info-wrapper .post-item-title {
font-size: 22px;
margin-bottom: 5px; } }
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-info-wrapper .post-item-title-small,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-info-wrapper .post-item-title-small {
font-size: 22px;
margin-bottom: 0; }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-info-wrapper .post-item-title-small,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-info-wrapper .post-item-title-small {
font-size: 14px; } }
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-info-wrapper .post-item-summary,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-info-wrapper .post-item-summary {
font-size: 16px;
line-height: 1.5em;
margin-bottom: 10px; }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-info-wrapper .post-item-summary,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-info-wrapper .post-item-summary {
font-size: 16px;
margin-bottom: 5px; } }
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-info-wrapper .post-item-meta,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-info-wrapper .post-item-meta {
font-size: 16px; }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-info-wrapper .post-item-meta,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-info-wrapper .post-item-meta {
font-size: 14px; } }
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-image-wrapper,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-image-wrapper {
margin-left: 20px; }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-image-wrapper,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-image-wrapper {
width: 100%;
margin-left: 0; } }
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-image-wrapper .post-item-image,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-image-wrapper .post-item-image {
width: 230px;
height: 120px;
background: no-repeat center;
background-size: cover;
border-radius: 5px;
overflow: hidden; }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container .post-item-wrapper .post-item .post-item-image-wrapper .post-item-image,
.stream-container .post-list-container > * .post-item-wrapper .post-item .post-item-image-wrapper .post-item-image {
width: 100%;
height: 180px;
border-radius: 0; } }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container .post-item-wrapper .post-item-no-divider,
.stream-container .post-list-container > * .post-item-wrapper .post-item-no-divider {
border-bottom: none !important; }
.stream-container .post-list-container .post-item-wrapper .post-item-no-gaps,
.stream-container .post-list-container > * .post-item-wrapper .post-item-no-gaps {
margin: 0;
box-shadow: none; } }
.stream-container .post-list-container .post-item-wrapper *,
.stream-container .post-list-container > * .post-item-wrapper * {
transition: all 0.2s linear; }
.stream-container .post-list-container .post-item-wrapper:not(.post-item-wrapper-no-hover):hover,
.stream-container .post-list-container > * .post-item-wrapper:not(.post-item-wrapper-no-hover):hover {
text-decoration: none;
background: rgba(0, 0, 0, 0.03); }
.stream-container .post-list-container .post-item-wrapper:not(.post-item-wrapper-no-hover):hover .post-item-title,
.stream-container .post-list-container > * .post-item-wrapper:not(.post-item-wrapper-no-hover):hover .post-item-title {
text-decoration: underline;
text-decoration-style: 2px solid #9f563a;
text-underline-position: under; }
.stream-container .post-list-container .post-item-wrapper:not(.post-item-wrapper-no-hover):hover *,
.stream-container .post-list-container > * .post-item-wrapper:not(.post-item-wrapper-no-hover):hover * {
color: #7a422c; }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container .post-item-wrapper:not(.post-item-wrapper-no-hover):hover .post-item-title,
.stream-container .post-list-container > * .post-item-wrapper:not(.post-item-wrapper-no-hover):hover .post-item-title {
text-decoration: none !important; } }
.stream-container .post-list-container .post-item-wrapper-no-hover,
.stream-container .post-list-container > * .post-item-wrapper-no-hover {
cursor: unset; }
.stream-container .post-list-container:not(:last-child) .post-item,
.stream-container .post-list-container > *:not(:last-child) .post-item {
border-bottom: 1px solid rgba(128, 128, 128, 0.12); }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container-no-background {
background: none; } }
@media screen and (max-width: 1020px) {
.stream-container .post-list-container-shadow {
box-shadow: 0 0px 8px rgba(0, 0, 0, 0.1); } }
.stream-container .post-list-footer {
text-align: center;
width: 100%;
opacity: 0.3;
color: black;
font-family: "Lora", "source-han-serif-tc", serif;
font-size: 13px;
padding: 15px; }
.stream-container .post {
padding: 0 0 20px 0; }
.stream-container .post .post-head-wrapper {
margin-top: -20px;
background: no-repeat center;
background-size: cover;
position: relative;
padding-top: 140px; }
@media screen and (max-width: 1020px) {
.stream-container .post .post-head-wrapper {
padding-top: 120px; } }
.stream-container .post .post-head-wrapper * {
color: white; }
.stream-container .post .post-head-wrapper .post-title {
padding: 80px 35px 30px 35px;
font-size: 30px;
font-weight: 600;
font-style: normal;
line-height: 1.5em;
background: -moz-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.75) 100%);
/* FF3.6-15 */
background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.75) 100%);
/* Chrome10-25,Safari5.1-6 */
background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.75) 100%);
/* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#c6000000', GradientType=0);
/* IE6-9 */ }
@media screen and (max-width: 1020px) {
.stream-container .post .post-head-wrapper .post-title {
font-size: 22px;
padding: 80px 20px 30px 20px; } }
.stream-container .post .post-head-wrapper .post-title .post-meta {
margin: 0; }
.stream-container .post .post-head-wrapper .post-title .post-meta,
.stream-container .post .post-head-wrapper .post-title .post-meta * {
font-size: 16px; }
.stream-container .post .post-head-wrapper .post-title .post-meta .material-icons {
vertical-align: middle;
margin-bottom: 3px; }
@media screen and (max-width: 1020px) {
.stream-container .post .post-head-wrapper .post-title .post-meta,
.stream-container .post .post-head-wrapper .post-title .post-meta * {
font-size: 14px; } }
.stream-container .post .post-head-wrapper-text-only {
padding: 30px 35px 0 35px; }
@media screen and (max-width: 1020px) {
.stream-container .post .post-head-wrapper-text-only {
padding: 30px 20px 0 20px; } }
.stream-container .post .post-head-wrapper-text-only .post-title {
font-size: 30px;
font-weight: 600;
font-style: normal;
line-height: 1.5em; }
.stream-container .post .post-head-wrapper-text-only .post-title .post-meta {
margin: 0; }
.stream-container .post .post-head-wrapper-text-only .post-title .post-meta,
.stream-container .post .post-head-wrapper-text-only .post-title .post-meta * {
font-size: 16px; }
.stream-container .post .post-head-wrapper-text-only .post-title .post-meta .material-icons {
vertical-align: middle;
margin-bottom: 3px; }
@media screen and (max-width: 1020px) {
.stream-container .post .post-head-wrapper-text-only .post-title .post-meta,
.stream-container .post .post-head-wrapper-text-only .post-title .post-meta * {
font-size: 14px; } }
@media screen and (max-width: 1020px) {
.stream-container .post .post-head-wrapper-text-only .post-title {
font-size: 22px; } }
.stream-container .post .post-body-wrapper {
padding: 30px 35px 35px 35px; }
@media screen and (max-width: 1020px) {
.stream-container .post .post-body-wrapper {
padding: 20px 20px 35px 20px; } }
.stream-container .post .post-body-wrapper .post-body {
font-size: 16px;
line-height: 1.5em; }
.stream-container .post .post-body-wrapper .post-body * {
word-wrap: break-word; }
.stream-container .post .post-body-wrapper .post-body img {
max-width: 100%;
border-radius: 5px;
overflow: hidden; }
@media screen and (max-width: 1020px) {
.stream-container .post .post-body-wrapper .post-body {
font-size: 16px; } }
.stream-container .post .post-body-wrapper .post-body .toc {
float: right;
border-radius: 5px;
background: rgba(159, 86, 58, 0.05);
padding: 30px;
margin-left: 30px;
margin-bottom: 30px; }
.stream-container .post .post-body-wrapper .post-body .toc,
.stream-container .post .post-body-wrapper .post-body .toc * {
font-size: 16px; }
.stream-container .post .post-body-wrapper .post-body .toc ul {
list-style: decimal;
padding: 0 0 0 20px;
margin: 0; }
@media screen and (max-width: 1020px) {
.stream-container .post .post-body-wrapper .post-body .toc,
.stream-container .post .post-body-wrapper .post-body .toc * {
font-size: 14px; } }
.stream-container .post .post-pagination {
padding: 20px 35px;
width: 100%;
display: flex;
justify-content: space-between; }
.stream-container .post .post-pagination .newer-posts {
padding-right: 5px;
text-align: left;
width: 50%; }
.stream-container .post .post-pagination .older-posts {
padding-left: 5px;
text-align: right;
width: 50%; }
@media screen and (max-width: 1020px) {
.stream-container .post .post-pagination {
padding: 20px 20px; } }
.stream-container .post .post-comment-wrapper {
padding: 20px 35px; }
.stream-container .post .post-comment-wrapper iframe {
overflow: hidden !important; }
@media screen and (max-width: 1020px) {
.stream-container .post .post-comment-wrapper {
padding: 20px 20px; } }
.stream-container .pagination {
display: none; }
@media screen and (max-width: 1020px) {
.stream-container .pagination {
display: flex !important;
flex-direction: row;
justify-content: space-between; }
.stream-container .pagination:not(.index-page) {
margin-top: 15px; }
.stream-container .pagination .pagination-indicator {
display: flex;
flex-direction: column;
align-content: center;
justify-content: center;
align-items: center;
justify-items: center;
width: 64px;
padding: 15px 0;
font-size: 12px;
font-family: "Fira Mono", "Cousine", Monaco, Menlo, "Source Code Pro", monospace; }
.stream-container .pagination .pagination-action {
display: flex;
flex-direction: column;
align-content: center;
justify-content: center;
align-items: center;
justify-items: center;
width: 64px;
cursor: hand;
cursor: pointer;
padding: 15px 0; }
.stream-container .pagination .pagination-action :not(.pagination-action-icon) {
transition: all 0.2s linear;
font-size: 13px;
font-family: "Fira Mono", "Cousine", Monaco, Menlo, "Source Code Pro", monospace; }
.stream-container .pagination .pagination-action * {
transition: all 0.3s linear; }
.stream-container .pagination .pagination-action:hover {
text-decoration: none; }
.stream-container .pagination .pagination-action:hover * {
color: #7a422c; } }
/*.stream-container .single-column-footer*/
.single-column-footer {
display: none; }
@media screen and (max-width: 1020px) {
.single-column-footer {
display: block !important;
text-align: center;
font-size: 13px;
font-family: "Montserrat", "Roboto", "Source Sans Pro", "Helvetica", "Arial", "Lora", "source-han-serif-tc", serif;
padding: 40px 20px 40px 20px; } }

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

BIN
images/chinese.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 947 KiB

BIN
images/esmeralda.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
images/notebook.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

193
index.html Normal file
View file

@ -0,0 +1,193 @@
<!DOCTYPE html>
<html><head>
<meta name="generator" content="Hugo 0.57.2" />
<title>Kumi.Blog</title>
<meta charset="utf-8">
<meta name="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
<meta content="telephone=no" name="format-detection">
<meta name="renderer" content="webkit">
<meta name="theme-color" content="#ffffff">
<script src="/vendor/js/jquery.min.js" ></script>
<script src="/vendor/js/popper.min.js" ></script>
<script src="/vendor/js/bootstrap.min.js" ></script>
<script src="/vendor/js/smooth-scroll.polyfills.min.js" ></script>
<link type="text/css" rel="stylesheet" href="/vendor/css/bootstrap.min.css">
<script src="/vendor/js/vue.min.js" ></script>
<link rel="stylesheet" href="https://kumi.blog/scss/journal.min.b16b92403170aa4eb662f097e3eb511404d139b4dbc2f3b2a55054fe0b9913c0.css" integrity="sha256-sWuSQDFwqk62YvCX4&#43;tRFATRObTbwvOypVBU/guZE8A=" media="screen">
<script src="https://kumi.blog//js/loadCSS.js"></script>
<script>
loadCSS("https://fonts.googleapis.com/css?family=Lora|Montserrat|Fira+Mono|Noto+Serif+SC|Material+Icons");
</script>
</head><body>
<div id="app"><div ref="sideContainer" class="side-container">
<a class="a-block nav-head active" href="https://kumi.blog/">
<div class="nav-title">
Kumi.Blog
</div>
<div class="nav-subtitle">
The Blog.
</div>
</a>
<div class="nav-link-list">
<a class="a-block nav-link-item false" href="https://kumi.blog/categories/">
Categories
</a>
<a class="a-block nav-link-item false" href="https://kumi.blog/tags/">
Tags
</a>
</div>
<div class="nav-footer">
Hugo Theme <a href="https://github.com/amazingrise/hugo-theme-diary">Diary</a> by <a href="https://amazingrise.net">Rise</a>
<br>
Ported from <a href="https://mak1t0.cc/" target="_blank" rel="noreferrer noopener">Makito</a>'s <a href="https://github.com/SumiMakito/hexo-theme-journal/" target="_blank" rel="noreferrer noopener">Journal.</a> <br>
<br>
&copy;
2019 Kumi.Blog
</div>
</div><div ref="extraContainer" class="extra-container">
<div class="pagination">
<a id="globalBackToTop" class="pagination-action animated-visibility" href="#top" :class="{ invisible: scrollY == 0 }">
<i class="material-icons pagination-action-icon">
keyboard_arrow_up
</i>
</a>
</div>
</div><div class="single-column-drawer-container" ref="drawer"
v-bind:class="{ 'single-column-drawer-container-active': isDrawerOpen }">
<div class="drawer-content">
<div class="drawer-menu">
<a class="a-block drawer-menu-item false" href="https://kumi.blog/categories/">
Categories
</a>
<a class="a-block drawer-menu-item false" href="https://kumi.blog/tags/">
Tags
</a>
</div>
</div>
</div>
<transition name="fade">
<div v-bind:class="{ 'single-column-drawer-mask': mounted }" v-if="isDrawerOpen" v-on:click="toggleDrawer"></div>
</transition>
<nav ref="navBar" class="navbar sticky-top navbar-light single-column-nav-container">
<div ref="navBackground" class="nav-background"></div>
<div class="container container-narrow nav-content">
<button id="nav_dropdown_btn" class="nav-dropdown-toggle" type="button" v-on:click="toggleDrawer">
<i class="material-icons">
menu
</i>
</button>
<a ref="navTitle" class="navbar-brand" href="https://kumi.blog/">
Kumi.Blog
</a>
</div>
</nav>
<div class="single-column-header-container" ref="pageHead"
v-bind:style="{ transform: 'translateZ(0px) translateY('+.3*scrollY+'px)', opacity: 1-navOpacity }">
<a href="https://kumi.blog/">
<div class="single-column-header-title">Kumi.Blog</div>
<div class="single-column-header-subtitle">The Blog.</div>
</a>
</div>
<div id="content">
<div ref="streamContainer" class="stream-container">
<div class="post-list-container post-list-container-no-background">
<a href="https://kumi.blog/posts/hello-world/" class="a-block">
<div class="post-item-wrapper">
<div class="post-item post-item-no-divider">
<div class="post-item-info-wrapper">
<div class="post-item-title">
Hello World
</div>
<div class="post-item-summary">
Well, hello. These are the first lines on kumi.blog.
</div>
<div class="post-item-meta">
2019-12-30
</div>
</div>
</div>
</div>
</a>
</div>
</div>
</div><div id="single-column-footer">Hugo Theme <a href="https://github.com/amazingrise/hugo-theme-diary">Diary</a> by <a href="https://amazingrise.net">Rise</a>
<br>
Ported from <a href="https://mak1t0.cc/" target="_blank" rel="noreferrer noopener">Makito</a>'s <a href="https://github.com/SumiMakito/hexo-theme-journal/" target="_blank" rel="noreferrer noopener">Journal.</a> <br>
<br>
&copy;
2019 Kumi.Blog
</div>
</div>
<script src="https://kumi.blog//js/journal.js"></script>
</body>
</html>

25
index.xml Normal file
View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Kumi.Blog</title>
<link>https://kumi.blog/</link>
<description>Recent content on Kumi.Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<lastBuildDate>Mon, 30 Dec 2019 20:21:24 +0100</lastBuildDate>
<atom:link href="https://kumi.blog/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Hello World</title>
<link>https://kumi.blog/posts/hello-world/</link>
<pubDate>Mon, 30 Dec 2019 20:21:24 +0100</pubDate>
<guid>https://kumi.blog/posts/hello-world/</guid>
<description>Well, hello. These are the first lines on kumi.blog.
I&amp;rsquo;m Kumi, this is a blog, so that should explain the name. As for the contents, I&amp;rsquo;m not sure about those either. Expect to see a little bit about my life, a lot of IT related stuff (I&amp;rsquo;m thinking about doing little howtos for server admins and self-datafication, for example), maybe a little politics - well, let&amp;rsquo;s just all sit back and enjoy the show.</description>
</item>
</channel>
</rss>

70
js/journal.js Normal file
View file

@ -0,0 +1,70 @@
let app;
app = new Vue({
el: '#app',
data: {
scrollY: 0,
navOpacity: 0,
isDrawerOpen: false,
mounted: false,
},
methods: {
sgn(t, x) {
let k = 1. / (1. - 2 * t);
if (x <= t) return 0;
else if (x >= 1 - t) return 1;
else {
return k * (x - t);
}
},
handleScroll() {
this.scrollY = window.scrollY;
this.navOpacity = this.sgn(.0, Math.min(1, Math.max(0, window.scrollY / (this.pageHeadHeight() - this.navBarHeight() * 0.8))));
const {navBar, navBackground, navTitle, extraContainer, streamContainer} = this.$refs;
if (this.navOpacity >= 1) {
navBackground.style.opacity = 1;
navTitle.style.opacity = 1;
} else {
navBackground.style.opacity = 0;
navTitle.style.opacity = 0;
}
},
handleResize() {
const {navBar, navBackground, navTitle, extraContainer, streamContainer} = this.$refs;
extraContainer.style.left = (streamContainer.offsetWidth - extraContainer.offsetWidth) + 'px';
},
navBarHeight() {
return this.$refs.navBar.offsetHeight;
},
pageHeadHeight() {
return this.$refs.pageHead.offsetHeight;
},
toggleDrawer() {
this.isDrawerOpen = !this.isDrawerOpen;
document.getElementsByTagName('html')[0].style.overflow = this.isDrawerOpen ? 'hidden' : 'unset';
},
},
created() {
window.addEventListener('scroll', this.handleScroll);
window.addEventListener('resize', this.handleResize);
window._nonDesktop = function () {
let check = false;
(function (a) {
if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true;
})(navigator.userAgent || navigator.vendor || window.opera);
return check;
};
},
mounted() {
this.handleScroll();
this.handleResize();
this.mounted = true;
},
destroyed() {
window.removeEventListener('scroll', this.handleScroll);
window.removeEventListener('resize', this.handleResize);
}
});
new SmoothScroll('a#globalBackToTop');

79
js/loadCSS.js Normal file
View file

@ -0,0 +1,79 @@
/*! loadCSS. [c]2017 Filament Group, Inc. MIT License */
(function(w){
"use strict";
/* exported loadCSS */
var loadCSS = function( href, before, media ){
// Arguments explained:
// `href` [REQUIRED] is the URL for your CSS file.
// `before` [OPTIONAL] is the element the script should use as a reference for injecting our stylesheet <link> before
// By default, loadCSS attempts to inject the link after the last stylesheet or script in the DOM. However, you might desire a more specific location in your document.
// `media` [OPTIONAL] is the media type or query of the stylesheet. By default it will be 'all'
var doc = w.document;
var ss = doc.createElement( "link" );
var ref;
if( before ){
ref = before;
}
else {
var refs = ( doc.body || doc.getElementsByTagName( "head" )[ 0 ] ).childNodes;
ref = refs[ refs.length - 1];
}
var sheets = doc.styleSheets;
ss.rel = "stylesheet";
ss.href = href;
// temporarily set media to something inapplicable to ensure it'll fetch without blocking render
ss.media = "only x";
// wait until body is defined before injecting link. This ensures a non-blocking load in IE11.
function ready( cb ){
if( doc.body ){
return cb();
}
setTimeout(function(){
ready( cb );
});
}
// Inject link
// Note: the ternary preserves the existing behavior of "before" argument, but we could choose to change the argument to "after" in a later release and standardize on ref.nextSibling for all refs
// Note: `insertBefore` is used instead of `appendChild`, for safety re: http://www.paulirish.com/2011/surefire-dom-element-insertion/
ready( function(){
ref.parentNode.insertBefore( ss, ( before ? ref : ref.nextSibling ) );
});
// A method (exposed on return object for external use) that mimics onload by polling document.styleSheets until it includes the new sheet.
var onloadcssdefined = function( cb ){
var resolvedHref = ss.href;
var i = sheets.length;
while( i-- ){
if( sheets[ i ].href === resolvedHref ){
return cb();
}
}
setTimeout(function() {
onloadcssdefined( cb );
});
};
function loadCB(){
if( ss.addEventListener ){
ss.removeEventListener( "load", loadCB );
}
ss.media = media || "all";
}
// once loaded, set link's media back to `all` so that the stylesheet applies once it loads
if( ss.addEventListener ){
ss.addEventListener( "load", loadCB);
}
ss.onloadcssdefined = onloadcssdefined;
onloadcssdefined( loadCB );
return ss;
};
// commonjs
if( typeof exports !== "undefined" ){
exports.loadCSS = loadCSS;
}
else {
w.loadCSS = loadCSS;
}
}( typeof global !== "undefined" ? global : this ));

1
page/1/index.html Normal file
View file

@ -0,0 +1 @@
<!DOCTYPE html><html><head><title>https://kumi.blog/</title><link rel="canonical" href="https://kumi.blog/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://kumi.blog/" /></head></html>

View file

@ -1,16 +0,0 @@
THEME = "themes/kumi-theme"
SITENAME = "Kumi's Blog"
SITEURL = "https://kumi.blog"
AUTHOR = "Kumi"
TIMEZONE = "Europe/Vienna"
COPYRIGHT_YEAR = 2025
# Optional: Configure menu items
MENUITEMS = (
("About", "/pages/about.html"),
("Main Site", "https://kumi.website"),
)
# Display pages and categories in the navigation
DISPLAY_PAGES_ON_MENU = False
DISPLAY_CATEGORIES_ON_MENU = False

View file

@ -0,0 +1,220 @@
<!DOCTYPE html>
<html><head>
<title>Hello World</title>
<meta charset="utf-8">
<meta name="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
<meta content="telephone=no" name="format-detection">
<meta name="renderer" content="webkit">
<meta name="theme-color" content="#ffffff">
<script src="/vendor/js/jquery.min.js" ></script>
<script src="/vendor/js/popper.min.js" ></script>
<script src="/vendor/js/bootstrap.min.js" ></script>
<script src="/vendor/js/smooth-scroll.polyfills.min.js" ></script>
<link type="text/css" rel="stylesheet" href="/vendor/css/bootstrap.min.css">
<script src="/vendor/js/vue.min.js" ></script>
<link rel="stylesheet" href="https://kumi.blog/scss/journal.min.b16b92403170aa4eb662f097e3eb511404d139b4dbc2f3b2a55054fe0b9913c0.css" integrity="sha256-sWuSQDFwqk62YvCX4&#43;tRFATRObTbwvOypVBU/guZE8A=" media="screen">
<script src="https://kumi.blog//js/loadCSS.js"></script>
<script>
loadCSS("https://fonts.googleapis.com/css?family=Lora|Montserrat|Fira+Mono|Noto+Serif+SC|Material+Icons");
</script>
</head><body>
<div id="app"><div ref="sideContainer" class="side-container">
<a class="a-block nav-head false" href="https://kumi.blog/">
<div class="nav-title">
Kumi.Blog
</div>
<div class="nav-subtitle">
The Blog.
</div>
</a>
<div class="nav-link-list">
<a class="a-block nav-link-item false" href="https://kumi.blog/categories/">
Categories
</a>
<a class="a-block nav-link-item false" href="https://kumi.blog/tags/">
Tags
</a>
</div>
<div class="nav-footer">
Hugo Theme <a href="https://github.com/amazingrise/hugo-theme-diary">Diary</a> by <a href="https://amazingrise.net">Rise</a>
<br>
Ported from <a href="https://mak1t0.cc/" target="_blank" rel="noreferrer noopener">Makito</a>'s <a href="https://github.com/SumiMakito/hexo-theme-journal/" target="_blank" rel="noreferrer noopener">Journal.</a> <br>
<br>
&copy;
2019 Kumi.Blog
</div>
</div><div ref="extraContainer" class="extra-container">
<div class="pagination">
<a id="globalBackToTop" class="pagination-action animated-visibility" href="#top" :class="{ invisible: scrollY == 0 }">
<i class="material-icons pagination-action-icon">
keyboard_arrow_up
</i>
</a>
</div>
</div><div class="single-column-drawer-container" ref="drawer"
v-bind:class="{ 'single-column-drawer-container-active': isDrawerOpen }">
<div class="drawer-content">
<div class="drawer-menu">
<a class="a-block drawer-menu-item false" href="https://kumi.blog/categories/">
Categories
</a>
<a class="a-block drawer-menu-item false" href="https://kumi.blog/tags/">
Tags
</a>
</div>
</div>
</div>
<transition name="fade">
<div v-bind:class="{ 'single-column-drawer-mask': mounted }" v-if="isDrawerOpen" v-on:click="toggleDrawer"></div>
</transition>
<nav ref="navBar" class="navbar sticky-top navbar-light single-column-nav-container">
<div ref="navBackground" class="nav-background"></div>
<div class="container container-narrow nav-content">
<button id="nav_dropdown_btn" class="nav-dropdown-toggle" type="button" v-on:click="toggleDrawer">
<i class="material-icons">
menu
</i>
</button>
<a ref="navTitle" class="navbar-brand" href="https://kumi.blog/">
Kumi.Blog
</a>
</div>
</nav>
<div class="single-column-header-container" ref="pageHead"
v-bind:style="{ transform: 'translateZ(0px) translateY('+.3*scrollY+'px)', opacity: 1-navOpacity }">
<a href="https://kumi.blog/">
<div class="single-column-header-title">Kumi.Blog</div>
<div class="single-column-header-subtitle">The Blog.</div>
</a>
</div>
<div id="content">
<div ref="streamContainer" class="stream-container">
<div class="post-list-container post-list-container-shadow">
<div class="post">
<div class="post-head-wrapper-text-only"
style="background-image: url('/')">
<div class="post-title">
Hello World
<div class="post-meta">
<time itemprop="datePublished">
2019-12-30 20:21
</time>
</div>
</div>
</div>
<div class="post-body-wrapper">
<div class="post-body">
<p>Well, hello. These are the first lines on kumi.blog.</p>
<p>I&rsquo;m Kumi, this is a blog, so that should explain the name. As for the contents,
I&rsquo;m not sure about those either. Expect to see a little bit about my life,
a lot of IT related stuff (I&rsquo;m thinking about doing little howtos for server
admins and self-datafication, for example), maybe a little politics - well,
let&rsquo;s just all sit back and enjoy the show.</p>
<p>That&rsquo;s all for now. See you all soon!</p>
</div>
</div>
<nav class="post-pagination">
<a class="newer-posts">
No newer posts.
</a>
<a class="older-posts">
No older posts.
</a>
</nav>
</div>
</div>
</div>
</div><div id="single-column-footer">Hugo Theme <a href="https://github.com/amazingrise/hugo-theme-diary">Diary</a> by <a href="https://amazingrise.net">Rise</a>
<br>
Ported from <a href="https://mak1t0.cc/" target="_blank" rel="noreferrer noopener">Makito</a>'s <a href="https://github.com/SumiMakito/hexo-theme-journal/" target="_blank" rel="noreferrer noopener">Journal.</a> <br>
<br>
&copy;
2019 Kumi.Blog
</div>
</div>
<script src="https://kumi.blog//js/journal.js"></script>
</body>
</html>

25
posts/index.xml Normal file
View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Posts on Kumi.Blog</title>
<link>https://kumi.blog/posts/</link>
<description>Recent content in Posts on Kumi.Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<lastBuildDate>Mon, 30 Dec 2019 20:21:24 +0100</lastBuildDate>
<atom:link href="https://kumi.blog/posts/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Hello World</title>
<link>https://kumi.blog/posts/hello-world/</link>
<pubDate>Mon, 30 Dec 2019 20:21:24 +0100</pubDate>
<guid>https://kumi.blog/posts/hello-world/</guid>
<description>Well, hello. These are the first lines on kumi.blog.
I&amp;rsquo;m Kumi, this is a blog, so that should explain the name. As for the contents, I&amp;rsquo;m not sure about those either. Expect to see a little bit about my life, a lot of IT related stuff (I&amp;rsquo;m thinking about doing little howtos for server admins and self-datafication, for example), maybe a little politics - well, let&amp;rsquo;s just all sit back and enjoy the show.</description>
</item>
</channel>
</rss>

View file

@ -1,2 +0,0 @@
pelican
markdown

File diff suppressed because one or more lines are too long

28
sitemap.xml Normal file
View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://kumi.blog/posts/hello-world/</loc>
<lastmod>2019-12-30T20:21:24+01:00</lastmod>
</url>
<url>
<loc>https://kumi.blog/</loc>
<lastmod>2019-12-30T20:21:24+01:00</lastmod>
</url>
<url>
<loc>https://kumi.blog/posts/</loc>
<lastmod>2019-12-30T20:21:24+01:00</lastmod>
</url>
<url>
<loc>https://kumi.blog/categories/</loc>
</url>
<url>
<loc>https://kumi.blog/tags/</loc>
</url>
</urlset>

188
tags/index.html Normal file
View file

@ -0,0 +1,188 @@
<!DOCTYPE html>
<html><head>
<title>Tags</title>
<meta charset="utf-8">
<meta name="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
<meta content="telephone=no" name="format-detection">
<meta name="renderer" content="webkit">
<meta name="theme-color" content="#ffffff">
<script src="/vendor/js/jquery.min.js" ></script>
<script src="/vendor/js/popper.min.js" ></script>
<script src="/vendor/js/bootstrap.min.js" ></script>
<script src="/vendor/js/smooth-scroll.polyfills.min.js" ></script>
<link type="text/css" rel="stylesheet" href="/vendor/css/bootstrap.min.css">
<script src="/vendor/js/vue.min.js" ></script>
<link rel="stylesheet" href="https://kumi.blog/scss/journal.min.b16b92403170aa4eb662f097e3eb511404d139b4dbc2f3b2a55054fe0b9913c0.css" integrity="sha256-sWuSQDFwqk62YvCX4&#43;tRFATRObTbwvOypVBU/guZE8A=" media="screen">
<script src="https://kumi.blog//js/loadCSS.js"></script>
<script>
loadCSS("https://fonts.googleapis.com/css?family=Lora|Montserrat|Fira+Mono|Noto+Serif+SC|Material+Icons");
</script>
</head><body>
<div id="app"><div ref="sideContainer" class="side-container">
<a class="a-block nav-head false" href="https://kumi.blog/">
<div class="nav-title">
Kumi.Blog
</div>
<div class="nav-subtitle">
The Blog.
</div>
</a>
<div class="nav-link-list">
<a class="a-block nav-link-item false" href="https://kumi.blog/categories/">
Categories
</a>
<a class="a-block nav-link-item active" href="https://kumi.blog/tags/">
Tags
</a>
</div>
<div class="nav-footer">
Hugo Theme <a href="https://github.com/amazingrise/hugo-theme-diary">Diary</a> by <a href="https://amazingrise.net">Rise</a>
<br>
Ported from <a href="https://mak1t0.cc/" target="_blank" rel="noreferrer noopener">Makito</a>'s <a href="https://github.com/SumiMakito/hexo-theme-journal/" target="_blank" rel="noreferrer noopener">Journal.</a> <br>
<br>
&copy;
2019 Kumi.Blog
</div>
</div><div ref="extraContainer" class="extra-container">
<div class="pagination">
<a id="globalBackToTop" class="pagination-action animated-visibility" href="#top" :class="{ invisible: scrollY == 0 }">
<i class="material-icons pagination-action-icon">
keyboard_arrow_up
</i>
</a>
</div>
</div><div class="single-column-drawer-container" ref="drawer"
v-bind:class="{ 'single-column-drawer-container-active': isDrawerOpen }">
<div class="drawer-content">
<div class="drawer-menu">
<a class="a-block drawer-menu-item false" href="https://kumi.blog/categories/">
Categories
</a>
<a class="a-block drawer-menu-item active" href="https://kumi.blog/tags/">
Tags
</a>
</div>
</div>
</div>
<transition name="fade">
<div v-bind:class="{ 'single-column-drawer-mask': mounted }" v-if="isDrawerOpen" v-on:click="toggleDrawer"></div>
</transition>
<nav ref="navBar" class="navbar sticky-top navbar-light single-column-nav-container">
<div ref="navBackground" class="nav-background"></div>
<div class="container container-narrow nav-content">
<button id="nav_dropdown_btn" class="nav-dropdown-toggle" type="button" v-on:click="toggleDrawer">
<i class="material-icons">
menu
</i>
</button>
<a ref="navTitle" class="navbar-brand" href="https://kumi.blog/">
Kumi.Blog
</a>
</div>
</nav>
<div class="single-column-header-container" ref="pageHead"
v-bind:style="{ transform: 'translateZ(0px) translateY('+.3*scrollY+'px)', opacity: 1-navOpacity }">
<a href="https://kumi.blog/">
<div class="single-column-header-title">Kumi.Blog</div>
<div class="single-column-header-subtitle">The Blog.</div>
</a>
</div>
<div id="content">
<div ref="streamContainer" class="stream-container">
<div class="post-list-container post-list-container-shadow">
<a class="a-block">
<div class="post-item-wrapper post-item-wrapper-no-hover">
<div class="post-item post-item-no-gaps">
<div class="post-item-info-wrapper">
<div class="post-item-title post-item-title-small">
Tags
</div>
</div>
</div>
</div>
</a>
</div>
</div>
</div><div id="single-column-footer">Hugo Theme <a href="https://github.com/amazingrise/hugo-theme-diary">Diary</a> by <a href="https://amazingrise.net">Rise</a>
<br>
Ported from <a href="https://mak1t0.cc/" target="_blank" rel="noreferrer noopener">Makito</a>'s <a href="https://github.com/SumiMakito/hexo-theme-journal/" target="_blank" rel="noreferrer noopener">Journal.</a> <br>
<br>
&copy;
2019 Kumi.Blog
</div>
</div>
<script src="https://kumi.blog//js/journal.js"></script>
</body>
</html>

14
tags/index.xml Normal file
View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Tags on Kumi.Blog</title>
<link>https://kumi.blog/tags/</link>
<description>Recent content in Tags on Kumi.Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<atom:link href="https://kumi.blog/tags/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

1
tags/page/1/index.html Normal file
View file

@ -0,0 +1 @@
<!DOCTYPE html><html><head><title>https://kumi.blog/tags/</title><link rel="canonical" href="https://kumi.blog/tags/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://kumi.blog/tags/" /></head></html>

View file

@ -1,188 +0,0 @@
body {
background-color: #121212;
color: #c8c8c8;
font-family: 'Open Sans', 'Roboto', sans-serif; /* Changed default font */
margin: 0;
padding: 0 10px;
text-align: center;
line-height: 1.6;
}
header {
padding: 30px 0;
background-color: #1d1d1d;
margin-bottom: 20px;
font-family: 'Press Start 2P', cursive; /* Keep retro font for header */
}
header h1 {
font-size: 1.8em;
margin: 0;
color: #00ff00;
}
header h1 a {
color: #00ff00;
}
nav {
margin-top: 10px;
font-family: 'Press Start 2P', cursive; /* Keep retro font for navigation */
font-size: 0.8em; /* Slightly smaller due to the chunky font */
}
nav a {
margin: 0 10px;
color: #00ff00;
text-decoration: none;
position: relative;
}
nav a:hover {
color: #ff00ff;
}
section, article, .content {
padding: 20px;
margin: 0 auto 20px;
max-width: 700px;
background-color: #1e1e1e;
border-radius: 5px;
}
section h2, article h2, article h1, .article-list h3 {
font-family: 'Press Start 2P', cursive; /* Keep retro font for headings */
color: #00ff00;
margin-top: 0;
line-height: 1.4; /* Better line height for the chunky font */
}
section h2, article h2 {
font-size: 1.4em;
}
article h1 {
font-size: 1.6em;
}
section p,
section ul,
article p,
article ul,
.summary {
font-size: 1em;
text-align: left;
line-height: 1.7; /* Better line height for readability */
font-weight: normal;
}
ul {
list-style-type: square;
padding-left: 20px;
}
footer {
padding: 15px 0;
background-color: #1d1d1d;
font-size: 0.8em;
font-family: 'Press Start 2P', cursive; /* Keep retro font for footer */
}
a {
color: #00ccff;
text-decoration: none;
}
a:hover {
color: #ff00ff;
}
.article-info {
font-size: 0.8em;
margin-bottom: 20px;
color: #888;
font-family: 'Open Sans', 'Roboto', sans-serif; /* Regular font for metadata */
}
.article-list {
list-style-type: none;
padding: 0;
}
.article-list li {
margin-bottom: 20px;
padding-bottom: 20px;
border-bottom: 1px solid #333;
}
.article-list li:last-child {
border-bottom: none;
}
.article-list h3 {
font-size: 1.3em;
}
.article-list a {
color: #00ccff;
}
.article-list a:hover {
color: #ff00ff;
}
code, pre {
background-color: #2a2a2a;
padding: 2px 5px;
border-radius: 3px;
font-family: 'Courier New', monospace;
font-size: 0.95em;
}
pre {
padding: 10px;
overflow-x: auto;
}
blockquote {
border-left: 3px solid #00ff00;
padding-left: 15px;
margin-left: 0;
color: #aaa;
}
img {
max-width: 100%;
height: auto;
display: block;
margin: 20px auto;
}
.pagination {
margin: 20px 0;
font-family: 'Press Start 2P', cursive; /* Keep retro font for pagination */
font-size: 0.8em;
}
.pagination a {
padding: 5px 10px;
margin: 0 5px;
background-color: #1d1d1d;
border-radius: 3px;
}
.green-text {
color: #00ff00;
}
.read-more {
display: inline-block;
margin-top: 10px;
color: #00ccff;
font-family: 'Press Start 2P', cursive; /* Keep retro font for "Read more" links */
font-size: 0.8em;
}
.read-more:hover {
color: #ff00ff;
}

View file

@ -1,20 +0,0 @@
{% extends "base.html" %}
{% block title %}Archives - {{ SITENAME }}{% endblock %}
{% block content %}
<section>
<h2>Archives</h2>
{% for article in dates %}
<article>
<h3>
<a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a>
</h3>
<div class="article-info">
<span>{{ article.locale_date }}</span>
{% if article.category %}
<span> | Category: <a href="{{ SITEURL }}/{{ article.category.url }}">{{ article.category }}</a></span>
{% endif %}
</div>
</article>
{% endfor %}
</section>
{% endblock %}

View file

@ -1,34 +0,0 @@
{% extends "base.html" %}
{% block title %}{{ article.title }} - {{ SITENAME }}{% endblock %}
{% block content %}
<article>
<h1>{{ article.title }}</h1>
<div class="article-info">
<span>Posted on {{ article.locale_date }}</span>
{% if article.category %}
<span> | Category: <a href="{{ SITEURL }}/{{ article.category.url }}">{{ article.category }}</a></span>
{% endif %}
{% if article.tags %}
<span> | Tags:
{% for tag in article.tags %}
<a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a>
{% if not loop.last %},{% endif %}
{% endfor %}
</span>
{% endif %}
</div>
<div class="article-content">{{ article.content }}</div>
{% if article.related_posts %}
<div class="related-posts">
<h3>Related Posts</h3>
<ul>
{% for related_post in article.related_posts %}
<li>
<a href="{{ SITEURL }}/{{ related_post.url }}">{{ related_post.title }}</a>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
</article>
{% endblock %}

View file

@ -1,42 +0,0 @@
<!DOCTYPE html>
<html lang="{% block html_lang %}{{ DEFAULT_LANG }}{% endblock html_lang %}">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>
{% block title %}{{ SITENAME }}{% endblock %}
</title>
<link href="https://googledonts.private.coffee/css2?family=Press+Start+2P&family=Open+Sans:wght@400;600&display=swap"
rel="stylesheet">
<link rel="stylesheet"
href="{{ SITEURL }}/{{ THEME_STATIC_DIR }}/css/style.css" />
{% block extra_head %}
{% endblock extra_head %}
</head>
<body>
<header>
<h1>
<a href="{{ SITEURL }}/">{{ SITENAME }}</a>
</h1>
<nav>
<a href="{{ SITEURL }}/">Home</a>
{% for title, link in MENUITEMS %}<a href="{{ link }}">{{ title }}</a>{% endfor %}
{% if DISPLAY_PAGES_ON_MENU %}
{% for p in pages %}<a href="{{ SITEURL }}/{{ p.url }}">{{ p.title }}</a>{% endfor %}
{% endif %}
{% if DISPLAY_CATEGORIES_ON_MENU %}
{% for cat, null in categories %}<a href="{{ SITEURL }}/{{ cat.url }}">{{ cat }}</a>{% endfor %}
{% endif %}
<a href="{{ SITEURL }}/archives.html">Archives</a>
</nav>
</header>
<div class="content">
{% block content %}{% endblock %}
</div>
<footer>
<p>
&copy; {{ COPYRIGHT_YEAR|default(2025) }} {{ AUTHOR }} | Powered by <a href="https://getpelican.com">Pelican</a>, curiosity and caffeine.
</p>
</footer>
</body>
</html>

View file

@ -1,21 +0,0 @@
{% extends "index.html" %}
{% block title %}{{ category }} - {{ SITENAME }}{% endblock %}
{% block content %}
<section>
<h2>Category: {{ category }}</h2>
<ul class="article-list">
{% for article in articles %}
<li>
<h3>
<a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a>
</h3>
<div class="article-info">
<span>{{ article.locale_date }}</span>
</div>
<div class="summary">{{ article.summary }}</div>
<a href="{{ SITEURL }}/{{ article.url }}">Read more...</a>
</li>
{% endfor %}
</ul>
</section>
{% endblock %}

View file

@ -1,32 +0,0 @@
{% extends "base.html" %}
{% block content %}
<section>
<h2>Latest Posts</h2>
<ul class="article-list">
{% for article in articles_page.object_list %}
<li>
<h3>
<a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a>
</h3>
<div class="article-info">
<span>{{ article.locale_date }}</span>
{% if article.category %}
<span> | Category: <a href="{{ SITEURL }}/{{ article.category.url }}">{{ article.category }}</a></span>
{% endif %}
</div>
<div class="summary">{{ article.summary }}</div>
<a href="{{ SITEURL }}/{{ article.url }}">Read more...</a>
</li>
{% endfor %}
</ul>
{% if articles_page.has_other_pages() %}
<div class="pagination">
{% if articles_page.has_previous() %}
<a href="{{ SITEURL }}/{{ articles_previous_page.url }}">&laquo; Previous</a>
{% endif %}
Page {{ articles_page.number }} / {{ articles_paginator.num_pages }}
{% if articles_page.has_next() %}<a href="{{ SITEURL }}/{{ articles_next_page.url }}">Next &raquo;</a>{% endif %}
</div>
{% endif %}
</section>
{% endblock content %}

View file

@ -1,24 +0,0 @@
{% extends "index.html" %}
{% block title %}{{ tag }} - {{ SITENAME }}{% endblock %}
{% block content %}
<section>
<h2>Tag: {{ tag }}</h2>
<ul class="article-list">
{% for article in articles %}
<li>
<h3>
<a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a>
</h3>
<div class="article-info">
<span>{{ article.locale_date }}</span>
{% if article.category %}
<span> | Category: <a href="{{ SITEURL }}/{{ article.category.url }}">{{ article.category }}</a></span>
{% endif %}
</div>
<div class="summary">{{ article.summary }}</div>
<a href="{{ SITEURL }}/{{ article.url }}">Read more...</a>
</li>
{% endfor %}
</ul>
</section>
{% endblock %}

7
vendor/css/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
vendor/css/bootstrap.min.css.map vendored Normal file

File diff suppressed because one or more lines are too long

7
vendor/js/bootstrap.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
vendor/js/bootstrap.min.js.map vendored Normal file

File diff suppressed because one or more lines are too long

2
vendor/js/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

79
vendor/js/loadCSS.js vendored Normal file
View file

@ -0,0 +1,79 @@
/*! loadCSS. [c]2017 Filament Group, Inc. MIT License */
(function(w){
"use strict";
/* exported loadCSS */
var loadCSS = function( href, before, media ){
// Arguments explained:
// `href` [REQUIRED] is the URL for your CSS file.
// `before` [OPTIONAL] is the element the script should use as a reference for injecting our stylesheet <link> before
// By default, loadCSS attempts to inject the link after the last stylesheet or script in the DOM. However, you might desire a more specific location in your document.
// `media` [OPTIONAL] is the media type or query of the stylesheet. By default it will be 'all'
var doc = w.document;
var ss = doc.createElement( "link" );
var ref;
if( before ){
ref = before;
}
else {
var refs = ( doc.body || doc.getElementsByTagName( "head" )[ 0 ] ).childNodes;
ref = refs[ refs.length - 1];
}
var sheets = doc.styleSheets;
ss.rel = "stylesheet";
ss.href = href;
// temporarily set media to something inapplicable to ensure it'll fetch without blocking render
ss.media = "only x";
// wait until body is defined before injecting link. This ensures a non-blocking load in IE11.
function ready( cb ){
if( doc.body ){
return cb();
}
setTimeout(function(){
ready( cb );
});
}
// Inject link
// Note: the ternary preserves the existing behavior of "before" argument, but we could choose to change the argument to "after" in a later release and standardize on ref.nextSibling for all refs
// Note: `insertBefore` is used instead of `appendChild`, for safety re: http://www.paulirish.com/2011/surefire-dom-element-insertion/
ready( function(){
ref.parentNode.insertBefore( ss, ( before ? ref : ref.nextSibling ) );
});
// A method (exposed on return object for external use) that mimics onload by polling document.styleSheets until it includes the new sheet.
var onloadcssdefined = function( cb ){
var resolvedHref = ss.href;
var i = sheets.length;
while( i-- ){
if( sheets[ i ].href === resolvedHref ){
return cb();
}
}
setTimeout(function() {
onloadcssdefined( cb );
});
};
function loadCB(){
if( ss.addEventListener ){
ss.removeEventListener( "load", loadCB );
}
ss.media = media || "all";
}
// once loaded, set link's media back to `all` so that the stylesheet applies once it loads
if( ss.addEventListener ){
ss.addEventListener( "load", loadCB);
}
ss.onloadcssdefined = onloadcssdefined;
onloadcssdefined( loadCB );
return ss;
};
// commonjs
if( typeof exports !== "undefined" ){
exports.loadCSS = loadCSS;
}
else {
w.loadCSS = loadCSS;
}
}( typeof global !== "undefined" ? global : this ));

5
vendor/js/popper.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
vendor/js/popper.min.js.map vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

6
vendor/js/vue.min.js vendored Normal file

File diff suppressed because one or more lines are too long