~kmdodrill/blog

e134700b349309deb0005fe29c3eb33a0912ce3a — Kenneth Dodrill 1 year, 3 months ago 0db90ab
Switch to use hugo
M .build.yml => .build.yml +7 -15
@@ 1,21 1,13 @@
image: alpine/latest
oauth: pages.sr.ht/PAGES:RW
packages:
  - zola
  - git
  - hugo
environment:
  deploy_dir: ./public
  project_dir: blog
  site: kennydodrill.com
  site: blog
tasks:
  - setup: |
      cd $project_dir
      git submodule update --init --recursive
  - build: |
      cd $project_dir
      zola build
  - package: |
      cd $project_dir
      tar -C $deploy_dir -cvz . > site.tar.gz
  - deploy: |
      acurl -f https://pages.sr.ht/publish/$site -Fcontent=@$project_dir/site.tar.gz
\ No newline at end of file
      cd $site
      hugo
      tar -C public -cvz . > ../site.tar.gx
  - upload: |
      acurl -f https://pages.sr.ht/publish/$site -Fcontent=@site.tar.gz

M .gitignore => .gitignore +1 -6
@@ 1,9 1,4 @@
# Ignore public build files
public

# Ignore all backup files created by Ghostwriter.
content/posts/*.backup

# Vim files
.hugo_build.lock
*.swp
*.swo

R sass/site.scss => assets/site.scss +0 -0
M config.toml => config.toml +5 -11
@@ 1,14 1,8 @@
base_url = "https://kennydodrill.com"

baseURL = "https://kennydodrill.com"
languageCode = "en-us"
title = "Kenneth Dodrill"
description = "Game & Web developer"

default_language = "en"

compile_sass = true

generate_feed = true

[markdown]
highlight_code = true
highlight_theme = "one-dark"
\ No newline at end of file
[markup]
  [markup.highlight]
  style = 'doom-one'

M content/_index.md => content/_index.md +3 -3
@@ 1,3 1,3 @@
+++
title = "Kenneth Dodrill"
+++
\ No newline at end of file
---
title: "Kenneth Dodrill"
---

M content/blog/_index.md => content/blog/_index.md +3 -4
@@ 1,4 1,3 @@
+++
title = "Posts"
sort_by = "date"
+++
---
title: "Posts"
---

M content/blog/blog-defunct.md => content/blog/blog-defunct.md +5 -5
@@ 1,8 1,8 @@
+++
title = "The sun has set"
date = 2022-12-18
draft = false
+++
---
title: "The sun has set"
date: 2022-12-18
draft: false
---

I mostly write about things that are interesting to me, but my interests lately
have grown outside of things I would want to share on the internet. For the past

M content/blog/games-worth-your-time.md => content/blog/games-worth-your-time.md +6 -6
@@ 1,9 1,9 @@
+++
title = "Games worth your time"
date = 2022-03-21
updated = 2022-12-18
draft = false
+++
---
title: "Games worth your time"
date: 2022-03-21
lastmod: 2022-12-18
draft: false
---

I have played video games since I was a child. Most of my childhood, teenage
years, and college years revolved around playing video games. I have played and

M content/blog/how-to-be-a-nice-programmer.md => content/blog/how-to-be-a-nice-programmer.md +5 -5
@@ 1,8 1,8 @@
+++
title = "How to be a nice programmer"
date = 2021-10-07
draft = false
+++
---
title: "How to be a nice programmer"
date: 2021-10-07
draft: false
---

I am a programmer, and there have been times where I thought I was the best programmer - that I knew it all and that my opinions were facts. Eventually I learned that I wasn't the best programmer and that I will never be the best programmer. I also learned how to be nice.


M content/blog/how-to-setup-brutal-doom-with-gzdoom-on-void-linux.md => content/blog/how-to-setup-brutal-doom-with-gzdoom-on-void-linux.md +5 -5
@@ 1,8 1,8 @@
+++
title = "How to set up Brutal Doom with GZDoom on Void Linux"
date = 2021-04-15
draft = false
+++
---
title: "How to set up Brutal Doom with GZDoom on Void Linux"
date: 2021-04-15
draft: false
---

DOOM is one of my favorite games of all time. Brutal Doom is a mod for DOOM that kicks up the intensity with a LOT more violence.


M content/blog/linux-gaming-gog-sucks.md => content/blog/linux-gaming-gog-sucks.md +5 -5
@@ 1,8 1,8 @@
+++
title = "GOG is the wild, wild west for Linux gaming"
date = 2022-06-06
draft = false
+++
---
title: "GOG is the wild, wild west for Linux gaming"
date: 2022-06-06
draft: false
---

Recently, I haven't been gaming much. I've been getting into Magic: The
Gathering, and there is a new set out based on Baldur's Gate. I own the first

M content/blog/making-games.md => content/blog/making-games.md +5 -5
@@ 1,8 1,8 @@
+++
title = "I want to make games...?"
date = 2022-01-17
draft = false
+++
---
title: "I want to make games...?"
date: 2022-01-17
draft: false
---

Last year, I focused very hard during select months on game development. I learned about 3d modeling, drawing, sound design and game programming. I have successfully launched a game on Steam and several on Itch. I also made a (paid) tutorial series on how to create a top-down shooter in the game engine I use. On top of all of that, I've produced several video devlogs and abstract game development blog posts.


M content/blog/overviews-are-essential-for-new-programmers.md => content/blog/overviews-are-essential-for-new-programmers.md +5 -5
@@ 1,8 1,8 @@
+++
title = "Overviews are essential for new programmers"
date = 2021-12-27
draft = false
+++
---
title: "Overviews are essential for new programmers"
date: 2021-12-27
draft: false
---

# Background


M content/blog/prototype-your-gameplay-first.md => content/blog/prototype-your-gameplay-first.md +5 -5
@@ 1,8 1,8 @@
+++
title = "Prototype your gameplay first"
date = 2021-11-08
draft = false
+++
---
title: "Prototype your gameplay first"
date: 2021-11-08
draft: false
---

It has been about three months since I [released my first video game](/blog/releasing-my-first-commercial-video-game/), my brother lives in a canyon, on [Steam](https://store.steampowered.com/app/1641020/my_brother_lives_in_a_canyon/) and [Itch](https://stormkmd.itch.io/my-brother-lives-in-a-canyon). Here's what I've done so far:


M content/blog/revisting-old-games.md => content/blog/revisting-old-games.md +5 -5
@@ 1,8 1,8 @@
+++
title = "Revisiting old games"
date = 2022-06-24
draft = false
+++
---
title: "Revisiting old games"
date: 2022-06-24
draft: false
---

As I have mentioned before, I have played a lot of video games. Recently, I
haven't been playing many games at all, aside from board and card games. You can

M content/blog/social-media-conceptually-broken.md => content/blog/social-media-conceptually-broken.md +5 -5
@@ 1,8 1,8 @@
+++
title = "Social media is conceptually broken"
date = 2021-10-20
draft = false
+++
---
title: "Social media is conceptually broken"
date: 2021-10-20
draft: false
---

This post is mostly about a realization that I had a few months ago - social media (as we know it) does not need to be fixed. It needs to be **_abolished_**. Social media brings way more negatives than positives to humans. This post is somewhat biased as I also care about invidividual privacy and data protection (I would certainly love to see large companies like Facebook and Twitter fall).


M content/blog/stable-void-linux-setup-guide.md => content/blog/stable-void-linux-setup-guide.md +6 -6
@@ 1,9 1,9 @@
+++
title = "Stable Void Linux Setup Guide"
date = 2020-09-06
updated = 2023-02-19
draft = false
+++
---
title: "Stable Void Linux Setup Guide"
date: 2020-09-06
lastmod: 2023-02-19
draft: false
---

# Table of Contents


M content/blog/there-is-no-viable-form-of-managing-and-listening-to-music.md => content/blog/there-is-no-viable-form-of-managing-and-listening-to-music.md +5 -5
@@ 1,8 1,8 @@
+++
title = "There's no viable form of managing and listening to music"
date = 2020-07-18
draft = false
+++
---
title: "There's no viable form of managing and listening to music"
date: 2020-07-18
draft: false
---

## Synopsis


M content/blog/using-podman-to-set-up-a-php-development-environment.md => content/blog/using-podman-to-set-up-a-php-development-environment.md +6 -6
@@ 1,8 1,8 @@
+++
title = "Using podman to set up a PHP development environment"
date = 2021-04-30
draft = false
+++
---
title: "Using podman to set up a PHP development environment"
date: 2021-04-30
draft: false
---

There are many ways to set up a PHP development environment, but using containers is a good way to ensure reciprocity across local dev machines and production/dev servers.



@@ 34,7 34,7 @@ Create a folder somewhere to keep your nginx confs (I use ~/.podman-nginx-confs)

A typical conf file might look something like the one below. The key thing is to point `fastcgi_pass` to `localhost:9000`, or whatever port `php-fpm` is at.

```conf
```nginx
server {
    listen 80;
    server_name localhost;

M content/blog/youtube-sucks.md => content/blog/youtube-sucks.md +5 -5
@@ 1,8 1,8 @@
+++
title = "YouTube is long dead"
date = 2022-12-18
draft = false
+++
---
title: "YouTube is long dead"
date: 2022-12-18
draft: false
---

This is probably obvious, but YouTube is not anything like it once was. When I
was a teenager YouTube was a really neat place to find cool dorky videos that

M content/prose/_index.md => content/prose/_index.md +3 -4
@@ 1,4 1,3 @@
+++
title = "Prose"
sort_by = "date"
+++
---
title: "Prose"
---

M content/prose/can-we-talk-2.md => content/prose/can-we-talk-2.md +5 -5
@@ 1,8 1,8 @@
+++
title = "Can we talk? - Pt. 2"
date = 2022-06-23
draft = false
+++
---
title: "Can we talk? - Pt. 2"
date: 2022-06-23
draft: false
---

"If there's one thing I'm tired of, it's text. Wouldn't you agree, John?
Why yes, Sammy, I would. Some days I just want to type in all caps to get my

M content/prose/can-we-talk.md => content/prose/can-we-talk.md +5 -5
@@ 1,8 1,8 @@
+++
title = "Can we talk?"
date = 2022-03-17
draft = false
+++
---
title: "Can we talk?"
date: 2022-03-17
draft: false
---

"How do I start? I sometimes question how words were once created. It's amazing
that someone decided to create text so that we could communicate with each

M content/prose/king.md => content/prose/king.md +5 -5
@@ 1,8 1,8 @@
+++
title = "The King's Tongue"
date = 2021-09-15
draft = false
+++
---
title: "The King's Tongue"
date: 2021-09-15
draft: false
---

There was once a king that lived for many years. He was neither cruel, nor kind. He ruled in an average way. There was only one thing that could make him truly upset - "bad food", or so the king called food with any sort of spice. In fact, any sort of spice or any food with spice was illegal to obtain, create, or consume.


M content/prose/the-hotel.md => content/prose/the-hotel.md +5 -5
@@ 1,8 1,8 @@
+++
title = 'The Hotel'
date = '2023-02-27'
draft = false
+++
---
title: 'The Hotel'
date: '2023-02-27'
draft: false
---

Last night was a chore. You might think that drinking in a five-star hotel could
never be boring or described at work, but you'd be wrong. Drinking among

M content/prose/whose-writings.md => content/prose/whose-writings.md +5 -5
@@ 1,8 1,8 @@
+++
title = "Whose writings are these?"
date = 2022-06-23
draft = false
+++
---
title: "Whose writings are these?"
date: 2022-06-23
draft: false
---

I sometimes glance across my desk and discover ancient hieroglyphics that have
long been placed at the sea floor of current events. Upon deciphering their

M content/prose/word-ghost.md => content/prose/word-ghost.md +5 -5
@@ 1,8 1,8 @@
+++
title = "Word Ghost"
date = 2022-01-01
draft = false
+++
---
title: "Word Ghost"
date: 2022-01-01
draft: false
---

There once was a ghost that could speak. Many in the town called him the Word Ghost. He would often frequent haunts familiar to teenage boys, like the arcade, various alleys, and sometimes the graveyard. The latter was special to him as it was his home. Rarely would he find someone there that was not sad, so the squish of the boys shoes on the ground and their occasional sudden hushed silence reminded him of his own youth. The boys would sometimes pass by Word Ghost without noticing him, but typically they would throw their greetings his way.


A layouts/_default/section.html => layouts/_default/section.html +16 -0
@@ 0,0 1,16 @@
{{ partial "head.html" . }}

<main class="index">
  <section class="article-list">
    <h1>{{.Title}}</h1>

    {{ range .Pages }}
    <div class="article">
      <span class="date">{{.Date.Format "January 2, 2006"}}</span>
      <a href="{{.Permalink}}">{{.Title}}</a>
    </div>
    {{ end }}
  </section>
</main>

{{ partial "foot.html" }}

R templates/page.html => layouts/_default/single.html +9 -12
@@ 1,26 1,23 @@
{% extends "base.html" %}

{% block content %}
{{ partial "head.html" . }}

<h1>
    {{ page.title }}
    {{.Title}}
    <small>
        <span class="date">{{ page.date }}</span>
        <span class="date">{{.Date.Format "January 2, 2006"}}</span>
        on
        <span><a href="{{ config.base_url }}">{{ config.title }}'s blog</a></span>
        <span><a href="{{.Site.BaseURL}}">{{.Site.Title}}'s blog</a></span>
    </small>
    {% if page.updated %}
    {{ if ne .Lastmod .Date }}
    <small>
      Updated on
      <span class="date">{{ page.updated }}</span>
      Updated on <span class="date">{{.Lastmod.Format "January 2, 2006"}}</span>
    </small>
    {% endif %}
    {{ end }}
</h1>

<main>
    <article>
        {{ page.content | safe }}
        {{.Content}}
    </article>
</main>

{% endblock content %}
{{ partial "foot.html" }}

R templates/index.html => layouts/index.html +31 -36
@@ 1,43 1,38 @@
{% extends "base.html" %}

{% block content %}
{{ partial "head.html" . }}

<main class="index">
    <section class="article-list">
        <h1>{{ section.title }}</h1>
        {% set blog_section = get_section(path="blog/_index.md") %}
        {% for page in blog_section.pages %}
        <div class="article">
            <span class="date">{{ page.date }}</span>
            <a href="{{ page.permalink | safe }}">{{ page.title }}</a>
        </div>
        {% endfor %}
    </section>
  <section class="article-list">
    <h1>{{.Title}}</h1>

    <aside>
        <img
            src="avatar.jpg"
            alt="My avatar: a picture of myself with short brown hair and a red shirt."
            width="148" height="148" />
    {{ range (where (where .Site.RegularPages "Section" "blog") "Params.nohtml" "!=" "true") }}
    <div class="article">
      <span class="date">{{.Date.Format "January 2, 2006"}}</span>
      <a href="{{.Permalink}}">{{.Title}}</a>
    </div>
    {{ end }}
  </section>
  <aside>
    <img
      src="avatar.jpg"
      alt="My avatar: a picture of myself with short brown hair and a red shirt."
      width="148" height="148" />

        <div class="text-center">
            <a class="rss" href="/atom.xml">rss</a>
            .
	    <a href="/prose">prose</a>
        </div>
    <div class="text-center">
      <a class="rss" href="/index.xml">rss</a>
      .
      <a href="/prose">prose</a>
    </div>

        <dl>
            <dt>sourcehut</dt>
            <dd><a href="https://sr.ht/~kmdodrill">~kmdodrill</a></dd>
            <dt>games</dt>
            <dd><a href="https://stormkmd.itch.io">itch.io</a></dd>
        </dl>
    <dl>
      <dt>sourcehut</dt>
      <dd><a href="https://sr.ht/~kmdodrill">~kmdodrill</a></dd>
      <dt>games</dt>
      <dd><a href="https://stormkmd.itch.io">itch.io</a></dd>
    </dl>

        <small>
            I am a programmer. I have created games using Godot and PyGame, and have several years 
	    of experience as a full-stack web developer.
        </small>
    </aside>
    <small>
      I am a programmer. I have created games using Godot and PyGame, and have several years 
      of experience as a full-stack web developer.
    </small>
  </aside>
</main>

{% endblock content %}

A layouts/partials/foot.html => layouts/partials/foot.html +4 -0
@@ 0,0 1,4 @@
<footer>
    The <a href="https://git.sr.ht/~kmdodrill/blog">code for this site</a>
    is <a href="https://opensource.org/licenses/MIT">MIT</a>
</footer>

A layouts/partials/head.html => layouts/partials/head.html +19 -0
@@ 0,0 1,19 @@
<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1" />
	{{ if .Params.noindex }}
	<meta name="robots" content="noindex">
	{{ end }}
        <meta property="og:title" content="{{.Title}}" />
        <meta property="og:type" content="website" />
        <meta property="og:url" content="{{.Permalink}}" />
        <meta property="og:description" content="Game and Web Developer" />
        <link rel="icon" type="image/png" href="/favicon.png">
        <link rel="stylesheet" href="/site.css" />
        <link rel="alternate" href="/index.xml" type="application/rss+xml" title="{{$.Site.Title}}" />
	{{ $style := resources.Get "site.scss" | resources.ToCSS | resources.Minify | resources.Fingerprint }}
	<link rel="stylesheet" href="{{ $style.RelPermalink }}">
        <title>{{.Title}}</title>
    </head>

A resources/_gen/assets/scss/site.scss_511aa33e99371f93fbf403479ebfd32e.content => resources/_gen/assets/scss/site.scss_511aa33e99371f93fbf403479ebfd32e.content +1 -0
@@ 0,0 1,1 @@
html{font-family:sans-serif;color:#ececec}body{max-width:920px;margin:0 auto;padding:1rem;color:#d2d2d2}html,body{background-color:#232326}h1{margin-top:0;font-size:1.5rem}h1 small{display:block;font-size:1rem}.index{display:flex;flex-direction:row}.index .article-list{flex-grow:1}.index .article-list .article{margin-bottom:1rem}.index .article-list .date{display:block;color:#ececec}.index aside{width:40%}.index aside img{display:block;margin:0 auto 1rem;border-radius:5px}.index aside dt{font-size:.9rem}.index aside dd{margin-left:0}.index aside:not(:last-child){margin-bottom:.5rem}@media(max-width:640px){.index aside{display:none}}article{margin:0 auto;max-width:720px;line-height:1.3}article img,article video,article iframe{display:block;margin:0 auto;max-width:100%}@media(max-width:640px){article img,article video,article iframe{max-width:calc(100% - 2rem)}}.text-center{text-align:center}pre{font-family:fira code,monospace;font-variant-ligatures:none;padding:10px;padding-left:15px;border-radius:10px;overflow-x:scroll;overflow-x:visible;overflow-y:hidden}a code,a:active code,a:visited code,a:link code{font-family:fira code,monospace;font-variant-ligatures:none;color:#e4c151;text-decoration:none;word-wrap:break-word}code{font-family:fira code,monospace;font-variant-ligatures:none;color:#c8c8c8;background-color:#2b303b;border-radius:10px;padding-bottom:2px;padding-top:2px;padding-left:6px;padding-right:6px;text-decoration:none;word-wrap:break-word}pre code{padding-bottom:0;padding-top:0;padding-left:0;padding-right:0}a{text-decoration:none;color:#7c90ff}a:hover{text-shadow:0 0 .9px #6c82ff,0 0 .9px #6c82ff}blockquote{border-left:5px solid #bbb;background-color:#29292e;padding:0 1rem;margin-left:calc(-1rem - 5px);margin-right:1rem}blockquote blockquote{margin-right:0;margin-left:0}dl{display:grid;grid-template-columns:auto 1fr;grid-gap:.2rem 1rem}dl dt{font-weight:700;grid-column-start:1}dl dd{grid-column-start:2;margin:0}
\ No newline at end of file

A resources/_gen/assets/scss/site.scss_511aa33e99371f93fbf403479ebfd32e.json => resources/_gen/assets/scss/site.scss_511aa33e99371f93fbf403479ebfd32e.json +1 -0
@@ 0,0 1,1 @@
{"Target":"site.min.e175f913cc6a9fe0f5d1387d3d419f60367ff8506256c8f72db8484ab4845c3d.css","MediaType":"text/css","Data":{"Integrity":"sha256-4XX5E8xqn+D10Th9PUGfYDZ/+FBiVsj3LbhISrSEXD0="}}
\ No newline at end of file

D templates/base.html => templates/base.html +0 -33
@@ 1,33 0,0 @@
{% if section and section.title %}
    {% set page_title = section.title %}
{% elif page and page.title %}
    {% set page_title = page.title %}
{% else %}
    {% set page_title = "Kenneth Dodrill" %}
{% endif %}

{% if section and section.path %}
    {% set path = "/" ~ section.path %}
{% elif page and page.path %}
    {% set path = "/" ~ page.path %}
{% else %}
    {% set path = ""%}
{% endif %}

<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name='viewport' content="width=device-width, initial-scale=1" />
        <meta property="og:title" content="{{ page_title }}" />
        <meta property="og:type" content="website" />
        <meta property="og:url" content="{{ config.base_url }}{{ path }}" />
        <meta property="og:description" content="Game and Web Developer" />
        <link rel="icon" type="image/png" href="/favicon.png">
        <link rel="stylesheet" href="/site.css" />
        <link href="/atom.xml" rel="alternate" type="application/atom+xml" />
        <title>{{ page_title }}</title>
    </head>

    {% block content %} {% endblock %}
</html>

D templates/section.html => templates/section.html +0 -17
@@ 1,17 0,0 @@
{% extends "base.html" %}

{% block content %}

<main class="index">
    <section class="article-list">
	<h1>{{ section.title }}</h1>
	{% for page in section.pages %}
	<div class="article">
	    <span class="date">{{ page.date }}</span>
	    <a href="{{ page.permalink | safe }}">{{ page.title }}</a>
	</div>
	{% endfor %}
    </section>
</main>

{% endblock content %}