Compare commits

...

9 commits

Author SHA1 Message Date
Devon Campbell
b403dab12a Add time zone to container env vars
Some checks failed
Build Eleventy Site / build (push) Failing after 1m37s
2025-03-04 19:31:45 -05:00
Devon Campbell
eef8669f1b Add message about self-hosting the site
All checks were successful
Build Eleventy Site / build (push) Successful in 1m53s
2025-03-04 19:26:10 -05:00
Devon Campbell
a1be8bd0bd Bind media volume on runner container
All checks were successful
Build Eleventy Site / build (push) Successful in 1m51s
so that the built site can be copied to the document root for the site
2025-03-04 18:47:48 -05:00
Devon Campbell
cefc6dccba Update site roots
Some checks failed
Build Eleventy Site / build (push) Failing after 1m26s
2025-03-03 22:26:10 -05:00
Devon Campbell
5816f68410 Fix build location
Some checks failed
Build Eleventy Site / build (push) Failing after 1m34s
2025-03-03 22:15:14 -05:00
Devon Campbell
0f45c42e7b Set webmentions token env var
Some checks failed
Build Eleventy Site / build (push) Failing after 1m41s
2025-03-03 19:12:50 -05:00
Devon Campbell
2be143b9f1 Disallow all robots
Some checks failed
Build Eleventy Site / build (push) Failing after 1m4s
because this web site is for humans. Not that it will matter since the
robots just ignore this altogether now, but I want to make it clear
they're not welcome. Might implement a way to poison the content for
them down the line.
2025-03-03 19:03:31 -05:00
Devon Campbell
fffa8cc1da Rework YouTube list again
I'm moving to self-hosting this site and building it from my self-hosted
code repo and CI, which won't have access to my FreeTube subscriptions
when it builds. To get around this, I've moved to a script that will
snapshot my local FreeTube subscriptions to a JSON file. I'll commit this
file, and it can be used in the build on CI.
2025-03-03 19:03:26 -05:00
Devon Campbell
70a11752bf Add Forgejo action for build/deploy
Some checks failed
Build Eleventy Site / build (push) Failing after 31s
2025-03-02 23:00:57 -05:00
8 changed files with 2129 additions and 21 deletions

View file

@ -0,0 +1,40 @@
name: Build Eleventy Site
on: [push]
env:
WEBMENTIONSIO_TOKEN: ${{ secrets.WEBMENTIONSIO_TOKEN }}
TZ: America/New_York
jobs:
build:
runs-on: docker
container:
image: node:18
volumes:
- /media/Media:/media/Media
steps:
- name: Checkout code
run: |
git clone ${{ github.server_url }}/${{ github.repository }} .
git fetch origin ${{ github.ref }}
git checkout FETCH_HEAD
- name: Install dependencies
run: npm install
- name: Build Eleventy site
run: npm run build
- name: Move built site
run: |
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
echo "Deploying production..."
rm -rf /media/Media/sites/devon.lol && mkdir /media/Media/sites/devon.lol && mv dist/* /media/Media/sites/devon.lol
echo "Running webmention..."
webmention dist/feed.xml --send
else
echo "Deploying staging..."
rm -rf /media/Media/sites/staging.devon.lol && mkdir /media/Media/sites/staging.devon.lol && mv dist/* /media/Media/sites/staging.devon.lol
fi

View file

@ -6,6 +6,7 @@
"scripts": {
"start": "npx @11ty/eleventy --serve",
"createBlogPost": "bash create-blog-post.sh",
"updateYT": "node updateYouTubeSubscriptions.mjs",
"build": "npx @11ty/eleventy",
"deploy": "npx netlify deploy --build",
"deploy:prod": "npx netlify deploy --prod --build",

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,10 @@
---
title: Welcome to my literal home
relativeUrl: /index.html
date: git Created
tags: feed
---
Get out of my house!
Nah, just kidding. I'm glad you're here. Instead of getting this site from a CDN somewhere near you, you're now downloading each of these files from a server right here in my home in Philadelphia, Pennsylvania. I've been working for several months now to minimize my personal data footprint on the corporate-controlled walled gardens of the internet, and I've made quite a bit of progress. This site was a particularly embarrassing piece of my online footprint that I wasn't yet hosting myself. I'm super happy with the system I have set up right now, and I may take the time to write up an article about it at some point. In the meantime, welcome to my home!

View file

@ -7,8 +7,8 @@ date: git Last Modified
**Last updated {{ page.date | formatDatetimeForHumans }}**
The long-promised post on [how to enjoy video games in 2025](/blog/how-to-enjoy-video-games-in-2025) is live! I welcome kind replies on Mastodon. ("Kind" doesn't mean you have to agree, but please be respectful. Thanks!)
Get out of my house!
I hope it's helpful to someone or at least reinforces what you're already doing.
Nah, just kidding. I'm glad you're here. Instead of getting this site from a CDN somewhere near you, you're now downloading each of these files from a server right here in my home in Philadelphia, Pennsylvania. I've been working for several months now to minimize my personal data footprint on the corporate-controlled walled gardens of the internet, and I've made quite a bit of progress. This site was a particularly embarrassing piece of my online footprint that I wasn't yet hosting myself. I'm super happy with the system I have set up right now, and I may take the time to write up an article about it at some point. In the meantime, welcome to my home!
As will be the case with just about any update from now on, you'll be able to follow my latest [YouTube subscriptions](/lists/youtube-channels) since those are now updated automatically with each build.
In my previous update, I posted my long-promised opinions on [how to enjoy video games in 2025](/blog/how-to-enjoy-video-games-in-2025). I welcome kind replies on Mastodon. ("Kind" doesn't mean you have to agree, but please be respectful. Thanks!) I hope it's helpful to someone or at least reinforces what you're already doing.

View file

@ -6,16 +6,18 @@ tags: list
templateEngineOverride: njk,md
---
Most of the YouTube channels I subscribe to, categorized. This list is now automated! You can [learn how it's implemented](/blog/automating-my-youtube-channel-list/) and use the code yourself if you use FreeTube and have an Eleventy site.
Most of the YouTube channels I subscribe to, categorized. This list is now automated! You can [learn how it was implemented](/blog/automating-my-youtube-channel-list/) and use the code yourself if you use FreeTube and have an Eleventy site.
I can't think of any particular trends or bubbling interests that contribute to the latest changes here. There aren't many new subscriptions, so most of the changes are a result of my pruning subscriptions I was no longer watching regularly.
I've made another change to the way this page builds in moving to building on CI since that ☝️ blog post was written. It's still basically the same script, but instead of running during the build, I run it on-demand on my computer to snapshot the current state of my subscriptions and commit that data file to the repo. That file is then used by the build in CI to create this page.
Continuing to prune channels I don't watch regularly anymore. I've continued to unsubscribe from some tabletop channels since I'm not super engaged with that hobby right now. That's not the only category that's seen pruning, but it's the most prominent one.
## Key
- 👀- Instant watch
- 🤌- Online video virtuoso
- 😌- Good for sleepytime (This doesn't mean the content is bad, just that it's relaxing.)
{% for category in freetubeCategories %}
{% for category in youtubeSubscriptions %}
## {{ category.name }}
<ul>

View file

@ -1,8 +1,2 @@
User-agent: GPTBot
Disallow: /
User-agent: Googlebot
Disallow: /
User-agent: Bingbot
User-agent: *
Disallow: /

View file

@ -1,5 +1,5 @@
// Finds your FreeTube profiles.db and adds the channel objects divided by profile to global data
// Access this anywhere via `freetubeCategories`, which will return an array of profile objects
// Finds your FreeTube profiles.db and creates a JSON file in global data
// Access this anywhere via `youtubeSubscrptions`, which will return an array of profile objects
// Note: I refer to 'profiles' as 'categories' since that naming makes more sense given how I'm using them in this automation and on my site. In this documentation, a "category" is the same thing as a FreeTube "Profile."
//
// Category object structure:
@ -21,10 +21,10 @@
// This would be more generally useful if I parameterized some things like the tag categories, the config location, and some others, but I won't bother with that for now.
// Maybe in a future revision… or maybe someone would like to submit that as a pull request!
const fs = require('fs');
const fsPromises = fs.promises;
const path = require('path');
const os = require('os');
import fs from 'fs';
import { promises as fsPromises } from 'fs';
import path from 'path';
import os from 'os';
const homeDir = os.homedir();
const flatpakConfigPath = path.join(homeDir, '.var', 'app', 'io.freetubeapp.FreeTube', 'config', 'FreeTube');
@ -35,7 +35,9 @@ const freetubeConfigLocationByOS = {
win32: () => path.join(process.env.APPDATA, 'FreeTube'),
};
module.exports = async function getSubscriptions() {
const outputFile = path.join('src', '_data', 'youtubeSubscriptions.json');
async function updateSubscriptions() {
const osName = os.platform();
if (!(osName in freetubeConfigLocationByOS)) {
@ -121,5 +123,12 @@ module.exports = async function getSubscriptions() {
category.subscriptions?.forEach(channel => channel.tags = subscriptionTags[channel.id])
});
return sortedCategories;
try {
await fsPromises.writeFile(outputFile, JSON.stringify(sortedCategories, null, 2));
console.log(`Subscriptions written to ${outputFile}`);
} catch (error) {
console.error(`Error writing to file: ${outputFile}`, error);
}
};
await updateSubscriptions();