<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>hyperreal - RSS Feed</title>
    <link>https://moonshadow.dev/</link>
    <description>FOSS geek, privacy advocate, digital archivist, mental illness advocate, gamer</description>
    <language>en</language>
    <lastBuildDate>Wed, 04 Mar 2026 18:00:43 -0600</lastBuildDate>
    <atom:link href="https://moonshadow.dev/rss.xml" rel="self" type="application/rss+xml" />
    <item>
        <title>Re Part 1: How you were using the Internet in the 1991-1995 and 1995-2005?</title>
        <link>https://moonshadow.dev/2026/03/04/re-part-1-how-you-were-using-the-internet-in-the-1991-1995-and-1995-2005/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2026/03/04/re-part-1-how-you-were-using-the-internet-in-the-1991-1995-and-1995-2005/</guid>
        <pubDate>Wed, 04 Mar 2026 17:53:45 -0600</pubDate>
        <atom:updated>2026-03-04T17:53:45-06:00</atom:updated>
        <description><![CDATA[<hr />
<p>2026-03-04 - This post was originally shared over the <a
href="https://en.wikipedia.org/wiki/Gemini_(protocol)">Gemini
protocol</a> on my gemlog there, on <strong>2021-11-14</strong>. It was
a response to a chain of gemlog posts titled “How you were using the
Internet in 1991-1995 and 1995-2005?”. It was meant to be part one of a
two-part response, but I never got around to making the second. Maybe I
will do that soon, though.</p>
<hr />
<h2 id="section">1998-2000</h2>
<p>I was born in 1988, so I was too young during 1991-1995. My first
time using the Internet was in 1998. We had the AOL suite on a dial-up
modem that used our landline. My screenname was BBJeff10 – BB for
baseball, my favorite sport, and 10 because that was my age at the time.
My mom set up our screennames, and her user was the master account on
our AOL instance. I don’t quite recall what I did on the Internet
exactly, but I didn’t use it a whole lot. I think I mostly just chatted
with my friends on AOL and looked up video game stuff on GameFAQs and
Cheat.cc.</p>
<h2 id="section-1">2000-2001</h2>
<p>I was really into professional wrestling entertainment, like WWF (now
WWE), WCW, and ECW. I found these fantasy wrestling communities called
e-federations or e-wrestling leagues. These were communities of users
who create their own original characters and roleplay various scenes,
challenging other wrestlers in the league. The roleplays were written
out and posted on the league’s message board. Feuds between wrestlers
would take place, and if there was a match between them, the wrestler
with the best roleplay would win, as judged by the league owner/CEO who
was usually the webmaster and did not take part in roleplays. The
matches were simulated using wrestling simulation software. One such
program in particular was called Zeus Pro.</p>
<p>The league that I was part of was called ACWL (Action Championship
Wrestling League) and the owner, who was called Jim Rooster, wrote his
own wrestling simulator software. My character had a caustic and cocky
personality and his wrestling style was a mix of lightweight/high-flying
and hardcore/roughneck. My character was inspired by the urban
grunge/gothic aesthetic of the wrestler Raven, the hardcore
dare-devil-ish Cactus Jack/Mankind, and the martial arts of Steve
Blackman. He had some crazy high-flying moves too, like shooting star
press and moonsaults.</p>
<p>I made one online friend within my first week of roleplaying; one
user liked my roleplays and my character and asked me if I wanted to
team up with their character. Their character was named Rune, and we
formed a group called the Renegades of Funk. Our theme song was
something by Rage Against the Machine (it might have been Guerilla
Radio, but I can’t say for sure. Or that might have been my own
character’s theme song.) Our partnership didn’t last very long but I
don’t remember why, I think we just decided to go separate ways.</p>
<p>The owner/CEO of the league deemed me the most creative trash-talker
in roleplays; my character won the ACWL North American title belt and
held onto it for two matches before losing it to a character named
Cyborg, with whom my character feuded for a time. Some users’ roleplays
were kind of perfunctory and simplistic; mine were among the more
detailed ones.</p>
<p>Anyway, during this time I became more computer/Internet savvy
because I spent a lot more time with it. I made my AOL username the
master account, so I was able to view websites for wrestling news and
M-rated video game stuff that was restricted by PG-13 AOL parental
controls. HTML was often used for roleplaying on the message boards, and
eventually I realized I could use HTML to design a whole website. At one
time I had my own e-federation with a website I designed that was hosted
on Angelfire. My e-fed didn’t get very big, there were maybe 10 or so
people, most of whom were online friends I made from the other
league.</p>
<p>During this time also was when Napster was really popular. I thought
it was amazing that I could look up any individual song and download it,
for free, to my computer.</p>
<p>I will follow up on this post and share my Internet experience from
the years 2002-2005.</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>Am I a schizoid?</title>
        <link>https://moonshadow.dev/2025/12/19/am-i-a-schizoid/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/12/19/am-i-a-schizoid/</guid>
        <pubDate>Fri, 19 Dec 2025 00:00:00 -0600</pubDate>
        <atom:updated>2026-01-06T17:02:39-06:00</atom:updated>
        <description><![CDATA[<hr />
<p>2026-01-06 - IMPORTANT UPDATE: I have learned more about the schizoid
temperament from Nancy Mcwilliams’ <a
href="https://www.researchgate.net/publication/7142775_Some_Thoughts_about_Schizoid_Dynamics">paper</a>,
and I now believe that I am in fact a schizoid. My conclusion, and my
framing of the schizoid temperament in this post in terms of its
pathologized DSM criteria, are, in my opinion, obsolete.</p>
<hr />
<p>I recently mentioned having a “schizoid temperament”, and I’m
wondering to what extent my temperament is genuinely schizoid, or if it
can be explained by other things.</p>
<p>According to sources on Wikipedia, <a
href="https://en.wikipedia.org/wiki/Schizoid_personality_disorder">schizoid
personality disorder</a> “is characterized by a <a
href="https://en.wikipedia.org/wiki/Asociality">lack of interest in
social relationships</a>”, also known as <em>asociality</em>, “a
tendency toward a solitary or sheltered lifestyle, reservedness,
emotional coldness, detachment, and apathy.” I’m going to unpack what
this means and whether or not I fit the bill.</p>
<h1 id="asociality">Asociality</h1>
<p>I don’t have a lack of interest in social relationships. I actively
seek out and interact with like-minded people online. I don’t do this in
person. In person, I’m reserved, standoffish, I avoid social
interaction, and I prefer to be alone doing solitary activities. I don’t
feel comfortable in social settings unless I’m with family. From
self-observation, the primary reason for this is because I don’t see
much of a point in socializing, small talk, or potentially putting
myself into anxiety-inducing situations. I’ve kind of implicitly learned
that most people I encounter in person will not share my values,
beliefs, and interests, and this is a source of social anxiety, feeling
disconnected, and lack of interest. This is true even among family, so I
tend to avoid my special interest topics and instead just go with the
flow of the room conversation. An example justification for this that
isn’t just hypothetical: A family member asked about an EFF sticker on
the back of my car. EFF is the Electronic Frontier Foundation, and they
focus on privacy and digital rights for consumers of technology. I
wasn’t able to explain this with speech, and what came out of my mouth
was “it’s a computer thing”, hoping the subject would change or that it
will be enough for them to not ask further questions. My “obsessions”,
or special interests as they are called, often make it hard for me to
stay even at family gatherings, though I do try to hold out for the sake
of my family. I know they would prefer me to be there, and I think
family gatherings are good for a healthy family dynamic. I’m fortunate
to not have a dysfunctional family where people don’t speak to or see
each other. But my special interests call to me, so I end up usually
leaving early.</p>
<p>I think any asociality I exhibit is primarily due to social anxiety
and introversion, or possibly autism. I have no interest in changing
this behavior, and I don’t think it has an adverse effect on my general
psychological well-being. I’m perfectly happy doing solitary activities
and interacting with people online. It’s weird how other people will
typical-mind and project their own values onto this sort of lifestyle,
for example by saying things like “I’d be so unhappy if I was stuck at
home all the time, you gotta get out and do things and socialize.” It’s
weird because their intention is to be empathetic, e.g., “how would I
feel in his situation?”, but what they end up doing is imagining my
situation from the context of their own values and interests. If you’re
extraverted, then of course you’d be unhappy in a solitary, sheltered
lifestyle. They mistake their own values and personality preferences as
being what all humans should aspire to.</p>
<h1 id="emotional-coldness-detachment-and-apathy">Emotional coldness,
detachment, and apathy</h1>
<p>I wouldn’t describe myself as emotionally cold and detached. At least
I don’t feel that way when I’m at home in my comfort zone. However, in
person, I do often feel disconnected from others, and this may manifest
as standoffishness and apathy. I’m friendly and cordial with strangers
in public, even when I harbor paranoid suspicions about them. The
paranoid suspicions I have don’t tend to be things that would make it
difficult to be friendly and cordial, and even when they are, I’m
usually theoretically aware of the difference between my brain and the
external world, so I try not to let my suspicions govern my behavior,
nor do I like drawing negative attention to myself.</p>
<p>The Wikiepdai article for schizoid personality disorder mentions an
association with dismissive-avoidant attachment style. My attachment
style is more anxious-avoidant, which fits with the theory that any
schizoid traits I exhibit can be explained better by social anxiety,
agoraphobia, and introversion – or, again, possibly autism.</p>
<p>Another thing mentioned in the Wikipedia article is that schizoid
people feel like they are detached observers of their own behavior. Big
check mark for this one, but I think that’s just where my paranoia
overlaps. This is also not exclusively a schizoid trait.</p>
<p>In the early days of my mental illness, I used to have what I would
describe as “delusionally-influenced stilted speech”. This is no longer
the case today, or at least as far as I’m aware, and is probably due in
large part to medication, and in no small part to gaining social
experience, and social and emotional maturity.</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>Serious New Years Resolution 2026</title>
        <link>https://moonshadow.dev/2025/12/19/serious-new-years-resolution-2026/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/12/19/serious-new-years-resolution-2026/</guid>
        <pubDate>Fri, 19 Dec 2025 00:00:00 -0600</pubDate>
        <atom:updated>2025-12-19T00:00:00-06:00</atom:updated>
        <description><![CDATA[<p>As part of my (legitimate) New Years resolution, I’m trying to get my
accounts in order, and not be so spendy. I also aspire to contribute
more, with code, advocacy, or monetary donations, to projects I believe
deserve support.</p>
<p>I cancelled my $9.99/month Door Dash subscription, and am either
going to buy food from the grocery store, or, if convenience is more
warranted, leave the house to get food. Door Dash delivery is effing
expensive.</p>
<p>I’m also going to downgrade my internet from Comcast. I currently pay
$108 per month for 2.2 Gbps speeds. I can get reasonably fast speeds,
like 1000-1200 Mbps, at roughly half that price. I anticipate that the
benefits I currently receive from a 2.2 Gbps internet connection will
not be terribly or even noticeably reduced on a 1000 or 1200 Mbps
connection. As an aside: For the first two years I lived with my
grandpa, I was making due with 12 Mbps Internet from his Comcast
account, and that was fine for what I was using the internet for at the
time.</p>
<p>I started making a recurring monthly donation of $3.10 to the
Wikimedia Foundation. I might also start a $5 per month donation to the
Internet Archive.</p>
<p>My VPS and cloud server expenses are exactly what I want them to be,
for now. I’m also thinking of not renewing my hyperreal.coffee domain,
and just using my moonshadow.dev domain. The only service using
hyperreal.coffee is my web server. Most other things use moonshadow.dev,
including my email address. I see little reason to spend money on two
domains, and the easiest one to cut is hyperreal.coffee. I’ve had it for
several years, and it was fun while it lasted, but I don’t have a hard
need for it anymore. Any links that break because of this are not
terribly important or mission-critical. The same contents of my blog and
website will still be available at moonshadow.</p>
<p>For the past year, I was using Fastmail as my email service. My
subscription of $60/year is due to expire in the next month, so I
cancelled it. I’m now back to using Proton Mail with a Proton Unlimited
plan for $9.99/month, which includes a ton of other stuff besides email.
There is not yet a Proton Drive client for Linux, and I don’t anticipate
there will be one anytime soon, but my Nextcloud with Murena Workspace
setup is working just fine for now. Since I have 500 GB of storage space
on Proton Drive, I’m going to write a script that rclones snapshots of
my Nextcloud directory to my Proton Drive account, to use as an
alternate backup source for my Nextcloud content.</p>
<p>Speaking of the Murena Workspace account. It’s nice to have someone
else managing it, but that is another $2.33/month expense. I’m
considering canceling it. All I really need out of it is a file sync. It
might be feasible to write an rclone script with functions to push and
pull content to my Proton Drive at regular intervals. On my desktop
machine, the idea would be to run a push function every hour, and only
run the pull function manually when I use another device like my laptop.
I can accomplish a similar functionality using external drives and ZFS
send/receive, but since 500 GB of storage is already included with my
Proton Unlimited plan, I might as well make use of it and benefit from
the offsite storage.</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>Because feelings</title>
        <link>https://moonshadow.dev/2025/12/02/because-feelings/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/12/02/because-feelings/</guid>
        <pubDate>Tue, 02 Dec 2025 00:00:00 -0600</pubDate>
        <atom:updated>2025-12-02T00:00:00-06:00</atom:updated>
        <description><![CDATA[<p>Something I’ve learned recently is that I might feel one way about a
particular technology (atomic Fedora distros, for example), and think
it’s the best thing ever, and then at some arbitrarily later time feel a
completely different way about it and not want to use it anymore. Then,
at an even later arbitrary time, I might think it’s the best thing ever
again. There is no rhyme or reason to this, and I know it’s kind of
irrational.</p>
<p>I struggle finding a goldilocks distro because my personal
constraints are variable at arbitrary times, and sometimes these
constraints arise after some negative experience with a distro, even a
relatively minor one that interrupts my activity flow. Then I have to do
some weird calculus or non-linear programming (emphasis on the
non-linear) and may end up back where I started.</p>
<p>The problem is never completely solved. It may be partially solved
temporarily and I just put up with certain constraints not being
satisfied until I don’t want to put up with it anymore. It’s
frustrating, and I realize how ridiculous it is given that there are far
more important and consequential things in the world to be frustrated
about.</p>
<p>Add to this my ADHD-like whim following when I see someone posting
about a distro or something on social media and I’m like SQUIRREL! The
fuck, man.</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>Hot take on Vivaldi browser</title>
        <link>https://moonshadow.dev/2025/11/27/hot-take-on-vivaldi-browser/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/11/27/hot-take-on-vivaldi-browser/</guid>
        <pubDate>Thu, 27 Nov 2025 00:00:00 -0600</pubDate>
        <atom:updated>2025-11-27T00:00:00-06:00</atom:updated>
        <description><![CDATA[<p>So I installed Vivaldi to use Netflix for Stranger Things 5, and holy
crap. It’s like the KDE of browsers in terms of appearance and
configurability.</p>
<p>It’s such a shame that it’s partly proprietary. But I don’t know.
It’s tempting for me to be open-minded about using it.</p>
<ul>
<li>92% of the code base is open source from Chromium.</li>
<li>3% is open source from Vivaldi.</li>
<li>5% is proprietary from Vivaldi, which is mostly the UI stuff.</li>
</ul>
<p>They’ve also made a public commitment to not integrating AI into
their browser. This gives them points for trustworthiness and putting
the user above AI hype and profit.</p>
<p>So… I’m not usually in the habit of giving hot takes on software, but
I’m kind of thinking that despite its 5% proprietary code, and in light
of Mozilla’s terribleness lately, it’s ethically and technically
superior to Firefox.</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>Interesting episode of Late Night Linux podcast</title>
        <link>https://moonshadow.dev/2025/11/27/interesting-episode-of-late-night-linux-podcast/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/11/27/interesting-episode-of-late-night-linux-podcast/</guid>
        <pubDate>Thu, 27 Nov 2025 00:00:00 -0600</pubDate>
        <atom:updated>2025-11-27T00:00:00-06:00</atom:updated>
        <description><![CDATA[<p>Yesterday I listened to Late Night Linux podcast episode 358, where
the hosts were at a recent Ubuntu summit and they got to interview Mark
Shuttleworth.</p>
<p>A lot of what Shuttleworth said resonated with me – he mentioned he’s
fascinated by the small things self-hosting and IoT stuff. He also
discussed the merits of Snap packages, which made me less hostile to the
fact that Ubuntu prioritizes them over regular .deb packages.</p>
<p>Shuttleworth seems like a pretty cool guy. Hopefully he stays that
way.</p>
<p>Another thing that resonated with me in the podcast is that the hosts
talk about how the big players in the FOSS ecosystem – Ubuntu/Canonical,
Fedora/Red Hat, Suse/Novell – all raise the tide for the smaller
community-oriented distros and projects. So it’s like a symbiotic
relationship in that regard. It’s not so much a zero-sum game for
distros, even though there is some nominal level of competition among
them.</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>An unexpected legacy of Timothy Leary</title>
        <link>https://moonshadow.dev/2025/11/27/unexpected-legacy-of-timothy-leary/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/11/27/unexpected-legacy-of-timothy-leary/</guid>
        <pubDate>Thu, 27 Nov 2025 00:00:00 -0600</pubDate>
        <atom:updated>2025-11-27T00:00:00-06:00</atom:updated>
        <description><![CDATA[<p>I don’t condone the use of psychedelics. I’ve never tried them myself
either. But it’s difficult for me not to be in awe of the life Timothy
Leary led.</p>
<p>I never knew much about him other than that he developed LSD, and I
suspect that’s what most people think of when they hear his name. There
is quite a legacy behind the person.</p>
<p>The following text is quoted from the Facebook page This Day in
History, with my own paragraph spacing added.</p>
<p><a href="https://www.facebook.com/share/p/16jkn5KcEP/"
class="uri">https://www.facebook.com/share/p/16jkn5KcEP/</a></p>
<blockquote>
<p>Timothy Leary arrived at California Men’s Colony prison in 1970
facing twenty years behind bars. He was fifty years old, a former
Harvard psychologist turned counterculture icon, sentenced for marijuana
possession in an era when the establishment treated drug advocacy as
existential threat. Prison officials processed him like any other
inmate: fingerprints, prison blues, a psychological evaluation to
determine security placement.</p>
</blockquote>
<blockquote>
<p>Then they handed him the test.</p>
</blockquote>
<blockquote>
<p>Leary looked at the questions and recognized his own work. Years
earlier, during his respectable academic career, he’d developed the
Leary Interpersonal Behavior Inventory—a personality assessment designed
to evaluate how people relate to authority, handle stress, and respond
to institutional control. Now the same system he’d created was being
used to classify him.</p>
</blockquote>
<blockquote>
<p>He filled out the questionnaire in under ten minutes, deliberately
shaping his answers to present exactly what the evaluators wanted to
see: a middle-aged man with no fight left, interested in gardening and
forestry, compliant, unlikely to cause trouble. The results placed him
in minimum security with an assignment tending the prison gardens. Leary
had just manipulated his own psychological test to engineer the
conditions for his escape.</p>
</blockquote>
<blockquote>
<p>He wasn’t always a rebel. Timothy Leary started as an establishment
academic, exactly the kind of psychologist Harvard hired in 1959
expecting orderly research and publishable papers. He’d earned his PhD
from Berkeley, directed psychiatric research at Kaiser Foundation
Hospital, published respected work on personality assessment. His career
trajectory pointed toward tenure and professional respectability.</p>
</blockquote>
<blockquote>
<p>Then he went to Mexico in the summer of 1960 and tried psilocybin
mushrooms.</p>
</blockquote>
<blockquote>
<p>The experience didn’t just alter his consciousness—it altered his
understanding of what psychology could be. He returned to Harvard
convinced that psychedelic compounds offered therapeutic potential that
traditional psychiatry couldn’t match. He started the Harvard Psilocybin
Project, conducting research with graduate students, prisoners, and
intellectuals. Subjects included Allen Ginsberg, Jack Kerouac, and
religious scholars. They took controlled doses, wrote detailed reports,
participated in therapeutic sessions.</p>
</blockquote>
<blockquote>
<p>The research was legitimate. The methodology was sound. But the
implications terrified administrators who saw a professor encouraging
students to chemically alter their perception of reality. Colleagues
whispered about loss of scientific objectivity. Newspapers
sensationalized the experiments. By 1963, Harvard decided Leary had
become a liability. They fired him, officially for leaving campus during
the semester without authorization, but everyone understood the real
reason: he’d stopped being a respectable psychologist and become
something the institution couldn’t control.</p>
</blockquote>
<blockquote>
<p>Leary saw the dismissal as liberation. Freed from academic
constraints, he became the public face of psychedelic exploration. He
traveled, lectured, founded research centers first in Mexico then in
Millbrook, New York. He coined phrases that became counterculture
mantras: “Turn on, tune in, drop out.” Critics heard nihilism. Followers
heard permission to question inherited assumptions about consciousness,
authority, identity.</p>
</blockquote>
<blockquote>
<p>The establishment heard threat.</p>
</blockquote>
<blockquote>
<p>In 1965, authorities arrested him at the Texas-Mexico border for
marijuana possession. Prosecutors pushed for harsh sentencing, treating
him as a symbol of cultural decay that needed crushing. Leary fought
back through the legal system. He appealed all the way to the Supreme
Court and won—not through cultural arguments about drug policy, but
through constitutional law. The Court ruled in Leary v. United States
that the marijuana tax law he’d been charged under violated the Fifth
Amendment’s protection against self-incrimination.</p>
</blockquote>
<blockquote>
<p>But victories in court didn’t stop the targeting. In 1968, police
arrested him again in Laguna Beach. Combined with his previous offense,
he now faced twenty years in prison. This time, there would be no
Supreme Court rescue.</p>
</blockquote>
<blockquote>
<p>Once transferred to the minimum-security facility at California Men’s
Colony, Leary began planning the impossible. The Weather Underground, a
radical leftist organization, agreed to help for $25,000 paid by The
Brotherhood of Eternal Love, a group of psychedelic advocates. They
smuggled him tools and coordinated logistics for a nighttime escape.</p>
</blockquote>
<blockquote>
<p>On September 13, 1970, Leary climbed onto a prison rooftop, pulled
himself up a telephone pole, and moved hand-over-hand along a cable
spanning the prison yard—over barbed wire, over security perimeter,
beyond what guards thought anyone would attempt. He dropped to the road
outside where Weather Underground operatives waited.</p>
</blockquote>
<blockquote>
<p>He left behind his prison clothes and a note that reportedly read: “I
declare myself free.”</p>
</blockquote>
<blockquote>
<p>The escape became international news. Prison officials found
themselves explaining how one of America’s most recognizable prisoners
had simply climbed out while they watched. Leary fled to Algeria, where
he stayed briefly with Black Panther Eldridge Cleaver’s
government-in-exile. Then Switzerland. Then Afghanistan. He traveled
under assumed names, gave lectures in disguise, wrote manifestos.
Intelligence agencies tracked him across continents. He became a
fugitive philosophy professor.</p>
</blockquote>
<blockquote>
<p>The chase ended in 1973 when Afghan authorities, working with
American intelligence, arrested him in Kabul. He returned to the United
States in handcuffs. Newspapers framed it as law finally catching up
with chaos. Leary framed it differently. In interviews, he emphasized
that the real threat wasn’t psychedelics—it was the questions they made
people ask about who controlled their consciousness and why.</p>
</blockquote>
<blockquote>
<p>He served additional years in prison, during which he wrote
extensively about neurology, consciousness, and human potential. When
finally released in 1976, he didn’t retreat into quiet obscurity.
Instead, he evolved. He lectured on cyberculture before most people
understood what the internet would become. He talked about space
colonization, artificial intelligence, consciousness expansion through
technology. He refused to become a museum piece from the 1960s, choosing
instead to adapt his message to new frontiers.</p>
</blockquote>
<blockquote>
<p>Critics dismissed him as a relic trying to stay relevant. But Leary
understood something fundamental: the questions he’d been asking—about
autonomy, consciousness, institutional control, who decides what’s
acceptable to think and feel—didn’t stop being important just because
the decade changed.</p>
</blockquote>
<blockquote>
<p>Near the end of his life in the 1990s, still lecturing and writing,
someone asked why he’d spent decades provoking institutions that
imprisoned him, surveilled him, tried to silence him. Why keep pushing
when the cost had been so high?</p>
</blockquote>
<blockquote>
<p>Leary’s answer captured everything about his approach to authority,
consciousness, and control: “The moment you stop questioning, somebody
else starts answering for you.”</p>
</blockquote>
<blockquote>
<p>Because that was the real story of Timothy Leary—not the drugs, not
the slogans, not the escapes. It was his refusal to let anyone else
define the boundaries of acceptable thought. He’d figured out how to
game a psychological test because he understood how institutions try to
categorize and control people. He’d escaped from prison because he
understood that the only real prison is the one you accept. He’d kept
questioning authority because he understood that the alternative wasn’t
safety—it was surrender.</p>
</blockquote>
<blockquote>
<p>The establishment called him dangerous. Leary called them
predictable. And in 1970, when they handed him his own test thinking
they’d finally contained him, he proved exactly how predictable they
were.</p>
</blockquote>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>Homelab update v20251030</title>
        <link>https://moonshadow.dev/2025/10/30/homelab-update-v20251030/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/10/30/homelab-update-v20251030/</guid>
        <pubDate>Thu, 30 Oct 2025 01:00:00 -0500</pubDate>
        <atom:updated>2025-10-30T01:00:00-05:00</atom:updated>
        <description><![CDATA[<p>Thelio Major is now running bazzite:nvidia. Just regular Bazzite; no
custom modifications or builds. I don’t intend to use it as a regular
workstation, so no personalized software is installed. Just Steam,
Lutris, MangoJuice, and a few flatpaks. I’m using the Firefox flatpak
with sync enabled for minimally viable browsing. So it’s basically like
a glorified gaming console. I’m using the GSYNC monitor for this
machine. It is configured to go to sleep after 60 minutes of
idleness.</p>
<p>Meerkat (meer9) is now my main workstation, with CachyOS KDE Plasma.
I’ve also decided to run homelab monitoring stuff like Ntfy, Prometheus,
Grafana, Loki, and Promtail with syslog-ng forwarding on it. I don’t
quite see a sufficient reason to keep this monitoring stack separate
from my workstation. I do everything there anyway, so the services might
as well run on localhost. I can still connect to the Grafana dashboard
over Tailscale from my laptop.</p>
<p>I played <a
href="https://en.wikipedia.org/wiki/Prey_(2017_video_game)">Prey</a> for
a couple hours on Bazzite, and somehow the performance of the game felt
more efficient than it did on CachyOS. I don’t know why, but it’s
alright by me.</p>
<p>On Bazzite, I also have my Nextcloud via Murena Workspace account
accessible on it with the Nextcloud desktop client flatpak. Most of my
Steam games store saved games in the Steam Cloud, but GOG stores
everything under <code>~/Gaming/gog/</code>. Lutris allows using the
native system paths for some games. Like Dishonored stores saved games
and settings under <code>~\Documents\My Games</code> on Windows. The
Linux XDG equivalent would be <code>~/Documents</code>, which for me is
a symbolic link to <code>~/Nextcloud/Documents</code>, so that stuff is
synced with Nextcloud. In contrast, Prey stores saved games under
<code>~/Games/gog/prey/drive_c/Users/jas/Saved Games/Arkane Studios/...</code>.
For now I just rsynced the saved games there, but I have to figure out
an efficient way to sync that directory on Nextcloud. Maybe if I keep
the actual files under <code>~/Nextcloud/Documents/Saved Games</code>
and create a symlink to that directory from
<code>~/Games/gog/prey/drive_c/Users/jas/Saved Games</code>. Now that I
think of it, I recall there being a program on GitHub called <a
href="https://github.com/ruanformigoni/gameimage">GameImage</a> that
might provide a more efficient way to keep gaming stuff synced on Linux.
I can’t just sync <code>~/Games</code> on Nextcloud because Lutris
downloads and stores the entire game files there, roughly more than 100
GB of data with the games I currently have installed. Not something I
want to sync over Nextcloud lol.</p>
<p>Anyway I’m pretty satisfied with this setup.</p>
<p>In other news, my NAS has to remain shut down until we figure out
what is wrong with our house’s electrical wiring. My NAS is the most
consistently power-hungry machine in my homelab, so it will be good to
keep it off until we fix whatever needs fixing. My parents’ electrician
friend is coming this weekend to see what’s wrong. Last week a circuit
breaker shorted out, which powers stuff in our garage and outside the
house. The wiring in our house is pretty old, and probably wasn’t setup
to handle digital age power demands. I’d like for my parents to consider
getting solar panels, but that’s too liberal-coded for them and they
hastily dismiss the idea without a second thought. <em>We don’t need no
goddamn hippie solar panels.</em></p>
<p>My bedroom is pretty quiet now.</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>Homelab update v20251028</title>
        <link>https://moonshadow.dev/2025/10/28/homelab-update-v20251028/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/10/28/homelab-update-v20251028/</guid>
        <pubDate>Tue, 28 Oct 2025 01:00:00 -0500</pubDate>
        <atom:updated>2025-10-28T01:00:00-05:00</atom:updated>
        <description><![CDATA[<p>My homelab previously consisted of the following machines:</p>
<ul>
<li>Orange Pi 5+ running Ubuntu 24.04, serving as a centralized
monitoring station with Prometheus, Grafana, Prometheus exporters for
qbittorrent and my Tapo TP-Link smartplugs, and syslog-ng
forwarding.</li>
<li>Orange Pi 5+ running DietPi, serving FreshRSS, Nextcloud, Blocky DNS
proxy with Unbound recursive DNS resolver.</li>
<li>System76 Meerkat (meer7) running Debian 13, serving my public web
content, including my website and other public-facing web services. I
had port forwarding enabled in my router to this machine.</li>
<li>System76 Thelio Major running FreeBSD 14.3, serving as a NAS.</li>
</ul>
<p>I’ve rearranged, cleaned up, simplified, and repurposed the first
three. I’m no longer port forwarding through my router.</p>
<p>My public stuff is on a Debian 13 VPS from netcup.de that resides in
Manassas, Virginia, USA. From there, it can benefit from higher
availability and uptime, easier snapshotting and backup of the entire
VPS, IPv6, and it closes off an attack vector on my home network.</p>
<p>Since I use <a href="https://murena.com/workspace/">Murena
Workspace</a> for Nextcloud and other cloud stuff, which integrates
nicely with /e/os on my phone, I no longer need to self-host Nextcloud.
It is therefore superfluous to have the DietPi machine running. I can
just consolidate the Blocky DNS proxy and FreshRSS into the centralized
monitoring machine. However, since my System76 Meerkat is now free, I’d
prefer to use it for these tasks instead as it is far more powerful.
This means I can reduce four machines into two, namely the Orange Pi 5+
machines will be laid off and the Meerkat will replace them. Sad for the
Orange Pi 5+ devices, but they’re just machines without feelings,
families, or survival needs, so they’ll be fine if a bit dusty.</p>
<p>As it turns out, <a href="https://getfedora.org">Fedora 43</a> was
just released today. So I’m going to install Fedora 43 Server on the
Meerkat.</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>Ideas for setting up vanilla Fedora for gaming</title>
        <link>https://moonshadow.dev/2025/10/20/ideas-for-setting-up-vanilla-fedora-for-gaming/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/10/20/ideas-for-setting-up-vanilla-fedora-for-gaming/</guid>
        <pubDate>Mon, 20 Oct 2025 01:00:00 -0500</pubDate>
        <atom:updated>2025-10-20T01:00:00-05:00</atom:updated>
        <description><![CDATA[<p>So I’ve setup regular Fedora KDE Plasma for gaming on my machine,
with several third-party repos to install the graphics drivers, gaming,
and multimedia stuff. I’m also running the Bazzite kernel.</p>
<p>Instead of making a justfile, I think it would be better if I wrote
up a blog post on how to get this setup on a vanilla Fedora. This way,
people reading it are in full control of all the commands that need to
run, the repositories that need to be configured, and the Bazzite kernel
to install.</p>
<p>The tricky part, and a problem for me to solve, is keeping the
Bazzite kernel up to date with each new release. I figure I can host a
public yum repository to store the packages. I can write a script that
does the following:</p>
<ul>
<li>The current kernel version number will be stored in a file, e.g.,
<code>/etc/current_kernel_version</code> on the yum repo host
machine.</li>
<li>Check for the latest kernel version in the
bazzite-org/kernel-bazzite releases.</li>
<li>Compare this version to the current.</li>
<li>If it’s newer, download the newer kernels from the
bazzite-org/kernel-bazzite repo releases and move them into the yum
repo.</li>
</ul>
<p>Then when a new release is available, it can be upgraded to with
<code>dnf update</code>. I have to figure out a way to make it so that
it is prioritized over the upstream Fedora kernel.</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>Feelings on immutable atomic distros</title>
        <link>https://moonshadow.dev/2025/10/19/feelings-on-immutable-atomic-distros/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/10/19/feelings-on-immutable-atomic-distros/</guid>
        <pubDate>Sun, 19 Oct 2025 01:00:00 -0500</pubDate>
        <atom:updated>2025-10-19T01:00:00-05:00</atom:updated>
        <description><![CDATA[<p>I’m currently working on a project to get Bazzite features on a
non-atomic Fedora KDE Plasma installation. At the moment, it’s a
work-in-progress justfile. I intend to test it out on a Fedora virtual
machine.</p>
<p>But, <em>sigh</em>.</p>
<p>I’m still kind of torn between this project and CachyOS. Everything
just works the way I want on CachyOS. There is no hard reason for me to
use Fedora. The only thing inspiring me to do this that I’m just used to
and like the Fedora ecosystem.</p>
<p>I don’t want to use Bazzite anymore – I just don’t like the
restrictiveness of the atomic/immutable filesystem. It was a moderate
burden that I tolerated for a few months, but it gets in the way a
lot.</p>
<p>Sure, there are ways to do the things I want in atomic/immutable
distros, but it tends to require some convoluted hack with containers
and CI workflows and trial and error that I’d prefer not to spend time
on. I feel like in some ways it’s a <em>just nerd harder</em> thing, for
a sense of accomplishment for doing something hard that didn’t really
need doing in the first place. It feels like building a <a
href="https://en.wikipedia.org/wiki/Rube_Goldberg_machine">Rube Goldberg
machine</a>. Whereas all it takes on a normal filesystem is a single
command or script that, for example, changes something in
<code>/usr/share</code>.</p>
<p>I can’t say whether immutable/atomic distros are “the future of
Linux” in the sense that non-immutable distros will “die out”
eventually. They clearly have a strong foothold in the wider Linux
ecosystem, so they will be around for a long time. In that sense, they
are a big <em>part</em> of the future of Linux. My fear is that, with
enough backing from corporate sponsors and the consequent
momentum/pressure this puts on other distros, immutable distros might
eventually become the de facto standard for Linux, and render the
non-immutable distros niche. But this fear is exactly that, and doesn’t
necessarily coincide with reality. There are strong communities behind
the likes of Debian, Arch Linux, FreeBSD, <a
href="https://wiki.hyperreal.coffee/wiki/Resources:Community-driven_FOSS_distros"><em>et
al</em></a>, which tend to push back against corporate influence.</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>CachyOS as my daily driver</title>
        <link>https://moonshadow.dev/2025/10/12/cachyos-as-my-daily-driver/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/10/12/cachyos-as-my-daily-driver/</guid>
        <pubDate>Sun, 12 Oct 2025 01:00:00 -0500</pubDate>
        <atom:updated>2025-10-12T01:00:00-05:00</atom:updated>
        <description><![CDATA[<p>So I’m using <a href="https://cachyos.org/">CachyOS</a> with KDE
Plasma. I guess cutting-edge is tolerable as long as there’s an
efficient backup and rollback mechanism. Limine and Snapper make this
super convenient. It is configured to take snapshots hourly, daily, and
whenever pacman installs packages. I’m using a Btrfs filesystem with
LUKS encryption. Limine is a boot manager that allows you to select
snapshots to boot into from the boot menu.</p>
<p>I can confirm the OS is “blazingly fast”. CachyOS also provides
tooling for setting up and optimizing gaming on Linux, which is nice.
Since it is based on Arch Linux, I have access to Arch Linux package
repositories, including the AUR. This means I don’t need Linuxbrew. I
also have my usual Flatpaks.</p>
<p>It’s also nice to be back on a normal, mutable filesystem and not
have to use Distrobox. Though, to be fair, that was only a minor
inconvenience on Bazzite and I got used to it pretty quickly to where it
didn’t get in the way. But still, it’s nice to not have to do that.</p>
<p>I did not really plan this. It just kinda happened today. But I look
forward to exploring CachyOS as a daily driver, for a while at
least.</p>
<figure>
<img src="/images/cachyos-fastfetch.png" alt="cachyos-fastfetch" />
<figcaption aria-hidden="true">cachyos-fastfetch</figcaption>
</figure>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>My current self-hosted Bluebuild solution</title>
        <link>https://moonshadow.dev/2025/10/10/my-current-self-hosted-bluebuild-solution/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/10/10/my-current-self-hosted-bluebuild-solution/</guid>
        <pubDate>Fri, 10 Oct 2025 01:00:00 -0500</pubDate>
        <atom:updated>2025-10-10T01:00:00-05:00</atom:updated>
        <description><![CDATA[<p>It just feels wrong/off for me to have my Bluebuild images hosted and
built with GitHub CI. I now have a self-hosted solution for this that
is, I believe, less failure-prone than using ordinary CI/CD.</p>
<p>The basic ingredients are as follows:</p>
<ul>
<li>Private-facing server with adequate storage, accessed only via
Tailscale, to serve as a build host</li>
<li>Docker or Podman</li>
<li><a
href="https://github.com/Joxit/docker-registry-ui">docker-registry-ui</a>
without authentication (because Tailscale)</li>
<li>Caddy web server to reverse-proxy the container registry</li>
<li><a href="https://github.com/blue-build/cli">bluebuild-cli</a></li>
<li>Bash script to run the <code>bluebuild</code> program with logging
and notifying on build failures</li>
<li>systemd service and systemd timer to run the Bash script on a
schedule</li>
<li>Cosign package installed on the build host</li>
</ul>
<p>The container registry is configured to allow pushing without
authentication. I don’t need to worry about authentication because it is
not open to the public internet. The <code>bluebuild build</code>
command is simply supplied with the registry URL on my Tailnet.</p>
<p>Here is the Bash script I wrote to build Bazzite and Bluefin images
and push them to the container registry:</p>
<div class="sourceCode" id="cb1"><pre
class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="co">#!/usr/bin/env bash</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="bu">set</span> <span class="at">-x</span></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="va">DATE</span><span class="op">=</span><span class="va">$(</span><span class="fu">date</span> <span class="st">&#39;+%Y%m%d_%H%M%S&#39;</span><span class="va">)</span></span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a><span class="va">LOGFILE</span><span class="op">=</span><span class="st">&quot;</span><span class="va">${HOME}</span><span class="st">/bluebuild-logs/</span><span class="va">${DATE}</span><span class="st">.log&quot;</span></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a><span class="va">NTFY_SERVER</span><span class="op">=</span><span class="st">&quot;https://nas-aux.carp-wyvern.ts.net&quot;</span></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="bu">[</span> <span class="ot">!</span> <span class="ot">-d</span> <span class="st">&quot;</span><span class="va">${HOME}</span><span class="st">/bluebuild-logs&quot;</span> <span class="bu">]</span><span class="kw">;</span> <span class="cf">then</span></span>
<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a>    <span class="fu">mkdir</span> <span class="at">-p</span> <span class="st">&quot;</span><span class="va">${HOME}</span><span class="st">/bluebuild-logs&quot;</span></span>
<span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a><span class="cf">fi</span></span>
<span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a><span class="fu">notify_fail()</span> <span class="kw">{</span></span>
<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a>    <span class="ex">curl</span> <span class="dt">\</span></span>
<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a>        <span class="at">-H</span> prio:urgent <span class="dt">\</span></span>
<span id="cb1-16"><a href="#cb1-16" aria-hidden="true" tabindex="-1"></a>        <span class="at">-H</span> tags:warning <span class="dt">\</span></span>
<span id="cb1-17"><a href="#cb1-17" aria-hidden="true" tabindex="-1"></a>        <span class="at">-d</span> <span class="st">&quot;</span><span class="va">${1}</span><span class="st">: failed to build. See logs for details.&quot;</span> <span class="dt">\</span></span>
<span id="cb1-18"><a href="#cb1-18" aria-hidden="true" tabindex="-1"></a>        <span class="st">&quot;</span><span class="va">${NTFY_SERVER}</span><span class="st">/bluebuild&quot;</span></span>
<span id="cb1-19"><a href="#cb1-19" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb1-20"><a href="#cb1-20" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-21"><a href="#cb1-21" aria-hidden="true" tabindex="-1"></a><span class="fu">print_header()</span> <span class="kw">{</span></span>
<span id="cb1-22"><a href="#cb1-22" aria-hidden="true" tabindex="-1"></a>    <span class="bu">echo</span> <span class="st">&quot;====================================================================&quot;</span></span>
<span id="cb1-23"><a href="#cb1-23" aria-hidden="true" tabindex="-1"></a>    <span class="bu">echo</span> <span class="st">&quot;Start build of </span><span class="va">${1}</span><span class="st">&quot;</span></span>
<span id="cb1-24"><a href="#cb1-24" aria-hidden="true" tabindex="-1"></a>    <span class="bu">echo</span> <span class="st">&quot;Date: </span><span class="va">$(</span><span class="fu">date</span> <span class="st">&#39;+%Y-%m-%d %H:%M:%S&#39;</span><span class="va">)</span><span class="st">&quot;</span></span>
<span id="cb1-25"><a href="#cb1-25" aria-hidden="true" tabindex="-1"></a>    <span class="bu">echo</span> <span class="st">&quot;Commit: </span><span class="va">$(</span><span class="fu">git</span> log <span class="at">--oneline</span> <span class="at">--no-decorate</span> <span class="at">-n</span> 1<span class="va">)</span><span class="st">&quot;</span></span>
<span id="cb1-26"><a href="#cb1-26" aria-hidden="true" tabindex="-1"></a>    <span class="bu">echo</span> <span class="st">&quot;====================================================================&quot;</span></span>
<span id="cb1-27"><a href="#cb1-27" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb1-28"><a href="#cb1-28" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-29"><a href="#cb1-29" aria-hidden="true" tabindex="-1"></a><span class="fu">print_footer()</span> <span class="kw">{</span></span>
<span id="cb1-30"><a href="#cb1-30" aria-hidden="true" tabindex="-1"></a>    <span class="bu">echo</span> <span class="st">&quot;====================================================================&quot;</span></span>
<span id="cb1-31"><a href="#cb1-31" aria-hidden="true" tabindex="-1"></a>    <span class="bu">echo</span> <span class="st">&quot;End build of </span><span class="va">${1}</span><span class="st">&quot;</span></span>
<span id="cb1-32"><a href="#cb1-32" aria-hidden="true" tabindex="-1"></a>    <span class="bu">echo</span> <span class="st">&quot;Time elapsed: </span><span class="va">${2}</span><span class="st">&quot;</span></span>
<span id="cb1-33"><a href="#cb1-33" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb1-34"><a href="#cb1-34" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-35"><a href="#cb1-35" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="bu">[</span> <span class="ot">!</span> <span class="ot">-f</span> <span class="st">&quot;</span><span class="va">$(</span><span class="bu">pwd</span><span class="va">)</span><span class="st">/cosign.key&quot;</span> <span class="bu">]</span><span class="kw">;</span> <span class="cf">then</span></span>
<span id="cb1-36"><a href="#cb1-36" aria-hidden="true" tabindex="-1"></a>    <span class="bu">echo</span> <span class="st">&quot;cosign.key not found. Copying it from backup.&quot;</span></span>
<span id="cb1-37"><a href="#cb1-37" aria-hidden="true" tabindex="-1"></a>    <span class="fu">cp</span> <span class="at">-fv</span> <span class="st">&quot;</span><span class="va">${HOME}</span><span class="st">/.cosign.key&quot;</span> <span class="st">&quot;</span><span class="va">$(</span><span class="bu">pwd</span><span class="va">)</span><span class="st">/cosign.key&quot;</span></span>
<span id="cb1-38"><a href="#cb1-38" aria-hidden="true" tabindex="-1"></a><span class="cf">fi</span></span>
<span id="cb1-39"><a href="#cb1-39" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-40"><a href="#cb1-40" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> recipe <span class="kw">in</span> <span class="va">$(</span><span class="ex">/bin/ls</span> ./recipes/recipe-<span class="pp">*</span>.yml<span class="va">)</span><span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb1-41"><a href="#cb1-41" aria-hidden="true" tabindex="-1"></a>    <span class="ex">print_header</span> <span class="st">&quot;</span><span class="va">$(</span><span class="fu">basename</span> <span class="at">-s</span> .yml <span class="st">&quot;</span><span class="va">$recipe</span><span class="st">&quot;</span><span class="va">)</span><span class="st">&quot;</span> <span class="op">&gt;&gt;</span><span class="st">&quot;</span><span class="va">$LOGFILE</span><span class="st">&quot;</span></span>
<span id="cb1-42"><a href="#cb1-42" aria-hidden="true" tabindex="-1"></a>    <span class="va">start_time</span><span class="op">=</span><span class="va">$(</span><span class="fu">date</span> <span class="st">&#39;+%s&#39;</span><span class="va">)</span></span>
<span id="cb1-43"><a href="#cb1-43" aria-hidden="true" tabindex="-1"></a>    <span class="cf">if</span> <span class="ot">! </span><span class="ex">bluebuild</span> build <span class="dt">\</span></span>
<span id="cb1-44"><a href="#cb1-44" aria-hidden="true" tabindex="-1"></a>        <span class="at">-p</span> <span class="dt">\</span></span>
<span id="cb1-45"><a href="#cb1-45" aria-hidden="true" tabindex="-1"></a>        <span class="at">--registry</span> aux-remote.carp-wyvern.ts.net <span class="dt">\</span></span>
<span id="cb1-46"><a href="#cb1-46" aria-hidden="true" tabindex="-1"></a>        <span class="at">-B</span> docker <span class="dt">\</span></span>
<span id="cb1-47"><a href="#cb1-47" aria-hidden="true" tabindex="-1"></a>        <span class="at">-S</span> cosign <span class="dt">\</span></span>
<span id="cb1-48"><a href="#cb1-48" aria-hidden="true" tabindex="-1"></a>        <span class="st">&quot;</span><span class="va">${recipe}</span><span class="st">&quot;</span> <span class="op">&gt;&gt;</span><span class="st">&quot;</span><span class="va">$LOGFILE</span><span class="st">&quot;</span> <span class="dv">2</span><span class="op">&gt;&amp;</span><span class="dv">1</span><span class="kw">;</span> <span class="cf">then</span></span>
<span id="cb1-49"><a href="#cb1-49" aria-hidden="true" tabindex="-1"></a>        <span class="ex">notify_fail</span> <span class="st">&quot;</span><span class="va">$(</span><span class="fu">basename</span> <span class="at">-s</span> .yml <span class="st">&quot;</span><span class="va">$recipe</span><span class="st">&quot;</span><span class="va">)</span><span class="st">&quot;</span></span>
<span id="cb1-50"><a href="#cb1-50" aria-hidden="true" tabindex="-1"></a>    <span class="cf">fi</span></span>
<span id="cb1-51"><a href="#cb1-51" aria-hidden="true" tabindex="-1"></a>    <span class="va">end_time</span><span class="op">=</span><span class="va">$(</span><span class="fu">date</span> <span class="st">&#39;+%s&#39;</span><span class="va">)</span></span>
<span id="cb1-52"><a href="#cb1-52" aria-hidden="true" tabindex="-1"></a>    <span class="va">runtime</span><span class="op">=</span><span class="va">$((end_time</span> <span class="op">-</span> <span class="va">start_time))</span></span>
<span id="cb1-53"><a href="#cb1-53" aria-hidden="true" tabindex="-1"></a>    <span class="va">time_elapsed</span><span class="op">=</span><span class="va">$(</span><span class="fu">date</span> <span class="at">-d</span> @<span class="va">$runtime</span> <span class="at">-u</span> <span class="st">&#39;+%H:%M:%S&#39;</span><span class="va">)</span></span>
<span id="cb1-54"><a href="#cb1-54" aria-hidden="true" tabindex="-1"></a>    <span class="ex">print_footer</span> <span class="st">&quot;</span><span class="va">$(</span><span class="fu">basename</span> <span class="at">-s</span> .yml <span class="st">&quot;</span><span class="va">$recipe</span><span class="st">&quot;</span><span class="va">)</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="va">$time_elapsed</span><span class="st">&quot;</span> <span class="op">&gt;&gt;</span><span class="st">&quot;</span><span class="va">$LOGFILE</span><span class="st">&quot;</span></span>
<span id="cb1-55"><a href="#cb1-55" aria-hidden="true" tabindex="-1"></a><span class="cf">done</span></span>
<span id="cb1-56"><a href="#cb1-56" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-57"><a href="#cb1-57" aria-hidden="true" tabindex="-1"></a><span class="co"># vim: ts=4 sts=4 sw=4 et ai ft=bash</span></span></code></pre></div>
<p>Source: <a href="https://tildegit.org/hyperreal/bluebuild-hyperreal"
class="uri">https://tildegit.org/hyperreal/bluebuild-hyperreal</a></p>
<p>This script is then run with a systemd service and timer every day at
01:00 (CST). In terms of results, it is very similar to running it in a
CI/CD pipeline. Each recipe is slated to run, and if one fails, a
notification is sent to my ntfy server (also on my Tailnet), and the
script continues to build the next recipe. Build output is redirected to
logfiles. Everything is run as an unprivileged user from the repo’s root
as the working directory.</p>
<p><code>git pull</code> is run by systemd before the execution of the
script, so when updates are pushed to the repo, they are reflected in
the next scheduled build. If I need to build them immediately, I can
just run <code>systemctl --user start bluebuild_build.service</code>
manually to trigger a build. Nothing in the script changes the state of
the git repository during the build process, so each run will be ensured
a clean git repo.</p>
<p>So, yeah, that’s it. I think it’s kinda neat.</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>Possible solution for self-hosting Bluebuild images without CI</title>
        <link>https://moonshadow.dev/2025/09/14/possible-solution-for-self-hosting-bluebuild-images-without-ci/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/09/14/possible-solution-for-self-hosting-bluebuild-images-without-ci/</guid>
        <pubDate>Sun, 14 Sep 2025 01:00:00 -0500</pubDate>
        <atom:updated>2025-09-14T01:00:00-05:00</atom:updated>
        <description><![CDATA[<p>As an anti-Big Tech self-hoster, I don’t like using GitHub to build
and store my Ublue/Bluebuild container images.</p>
<p>I’m thinking of doing the building on my own machine and pushing the
image to a self-hosted container registry. The <a
href="https://github.com/blue-build/cli">bluebuild cli</a> makes this
easier. For a self-hosted container registry I can use <a
href="https://goharbor.io/">Harbor</a>.</p>
<p>I would write a script that fetches the latest version from my
Codeberg repo, runs something like
<code>bluebuild build -v --push --registry $HARBOR_REGISTRY recipes/recipe.yml</code>
locally, and sends the log output to a file for debugging purposes.</p>
<p>I would have the script run as a systemd service with a daily timer.
If I use a systemd service then I wouldn’t necessarily have to store the
log output to a file, as I could view it with
<code>journalctl -xeu bluebuild-build.service</code>, but it might be
nice to have separate log files in addition to that.</p>
<p>This way I can self-host it without having to fiddle with Gitea or
Codeberg CI.</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
    <item>
        <title>I really dislike computers sometimes</title>
        <link>https://moonshadow.dev/2025/04/05/i-really-dislike-computers-sometimes/</link>
        <guid isPermaLink="true">https://moonshadow.dev/2025/04/05/i-really-dislike-computers-sometimes/</guid>
        <pubDate>Sat, 05 Apr 2025 01:00:00 -0500</pubDate>
        <atom:updated>2025-04-05T01:00:00-05:00</atom:updated>
        <description><![CDATA[<p>I’ve got to figure something out with the arrangement of my
bedroom/office. Right now, I have two desks in the shape of an L in the
corner. This corner is necessary because that’s where the outlets are.
One of the desks holds my gaming PC, and the other desk holds my main
Linux workstation along with my NAS and homelab machines. I’d rather
have: (1) one desk for my gaming PC and Linux workstation, and (2) the
other desk for my homelab equipment.</p>
<p>The problem with (1) is that I’d like to be able to have one set of
peripheral devices that can connect to both my gaming PC and Linux
workstation, and conveniently switch between them when I want to. One
way this is possible is just by unplugging and plugging in each
peripheral device (keyboard, mouse, monitor) into the desired machine.
But this would be a pain in the fundament, because my gaming PC doesn’t
have any ports conveniently on the front of the machine, so I’d have to
crawl down under the desk and reach into the back of the machine every
time. I could also use USB hubs for this and save myself from having to
crawl under the desk. I can have a USB hub for each machine. This would
at least cover the keyboard and mouse. As for the monitor, my current
monitor only has one DisplayPort port, so I’d have to keep unplugging
and plugging in DisplayPort cables for both machines. Maybe I can find a
monitor that has more than one DisplayPort, and use the monitor’s
buttons to toggle between them. Or some kind of splitter/switch hub
thingy that has a button that I can just press to toggle which machine
uses the monitor (if such a thing exists?). Another way would be
Bluetooth peripheral devices that I’d have to keep charged and paired
constantly – but that idea can go straight the fuck to Hell where it
belongs.</p>
<p>What’s wrong with using the Windows 11 gaming PC as my main
workstation like a normie instead of having a separate Linux
workstation? Honestly, I’ve seriously considered this, as it would sure
make all this easier. But the answer ought to be obvious to anyone who
cares about digital rights[1]. Why don’t I just dual boot on the gaming
PC, then? Because reasons.</p>
<p>[1] Maybe there is a way I can isolate some things similar to Qubes
OS, and try to keep personal data off the Windows host OS as much as
possible. Maybe I can leverage WSL for this somehow. I can look into
making Windows less privacy-invasive without breaking certain
functionality, if that’s even possible these days.</p>
<p>Of course, none of this would be a problem if I had more space in my
bedroom/office with outlets at convenient locations, but that’s not
possible for the foreseeable future, so I have to work with what I’ve
got. I think any arrangement I come up with is going to have an
entropistic Cyberpunk 2077 look, and, uh, that’s supposed to be a
dystopia best avoided. (Ironically, my Secret Lab Magnus Pro desk has a
Cyberpunk 2077 theme lol.)</p>]]></description>
        <dc:creator>hyperreal (hyperreal@moonshadow.dev)</dc:creator>
    </item>
</channel>
</rss>
