<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Skullheadx: Technology Posts</title>
<subtitle>Skullheadx's posts tagged technology.</subtitle>
<link href="https://skullheadx.com/tech/index.html"/>
<link rel="self" href="https://skullheadx.com/tech/feed.xml"/>
<id>https://skullheadx.com/tech/feed.xml</id>
<icon>https://skullheadx.com/favicon.ico</icon>
<logo>https://skullheadx.com/og.jpg</logo>
<author><name>Skullheadx</name><email>skull@skullheadx.com</email><uri>https://skullheadx.com/about.html</uri></author>
<updated>2026-08-31T00:00:00Z</updated>
<entry>
<title type="html"><![CDATA[A Brief Tour of My Homelab]]></title>
<link href="https://skullheadx.com/blog/homelab.html"/>
<id>https://skullheadx.com/blog/homelab.html</id>
<published>2026-08-31T00:00:00Z</published>
<updated>2026-08-31T00:00:00Z</updated>
<category term="technology"/> <category term="homelab"/> <category term="NixOS"/> <category term="OpenBSD"/> <category term="self-hosting"/>
<summary type="html"><![CDATA[A brief tour of my homelab hardware and NixOS + OpenBSD setup.]]></summary>
<content type="html" xml:base="https://skullheadx.com/blog/"><![CDATA[
			<h1 id="overview">Overview</h1>
			<p>I started this homelab project as an experiment to learn more about servers, and as of <time datetime="2026-08-31">August 31st, 2026</time>, I'm now hosting a <a href="https://git.skullheadx.com">public git web frontend</a>, git daemon, IRC bouncer, NFS, CDN, <a href="https://nix-cache.skullheadx.com/nix-cache-info">Nix bin cache</a>, and more. This page is intended to be living documentation of my setup as it evolves to suit my ever-growing compute requirements.</p>
			<figure>
				<img fetchpriority="high" width="720" alt="The black and blue small box is my home router running OpenBSD, and below it is my NixOS box that runs most services." src="https://skullheadx.com/blog/homelab_setup.webp">
				<figcaption>I feel like this photo depicts a liminal space. Luckily, this is just my basement. The black and blue small box is my home <a href="https://skullheadx.com/blog/homelab.html#router">router</a> running <a href="https://openbsd.org">OpenBSD</a>, and below it is my <a href="https://nixos.org">NixOS</a> box that runs most services. The <a href="https://skullheadx.com/blog/homelab.html#ups">UPS</a> is located behind the monitor.</figcaption>
			</figure>
			<p>My core goals when it came to designing my network was that it would be highly efficient, simple to maintain, and cheap. I run <a href="https://openbsd.org">OpenBSD</a> on my <a href="https://skullheadx.com/blog/homelab.html#akesis">VPS (<span class="canonical-name">akesis</span>)</a>, and <a href="https://skullheadx.com/blog/homelab.html#router"><span class="canonical-name">router</span></a> at home; <a href="https://nixos.org">NixOS</a> is running bare metal on the desktop computer (<a href="https://skullheadx.com/blog/homelab.html#icon"><span class="canonical-name">icon</span></a>) in the above image.</p>
			<p>All my DNS records point at the two static IPv4 addresses I have assigned to <a href="https://skullheadx.com/blog/homelab.html#askesis"><span class="canonical-name">askesis</span></a>. The firewall, <code>pf</code>, and <code>relayd</code> handle redirects to the appropriate locations. Here is where the traffic diverges into two paths:</p>
			<h2 id="static-web-hosting">Static Web Hosting on <span class="canonical-name">askesis</span></h2>
			<p>I run a static web hosting business, <a href="https://montgomery.systems">Montgomery Systems</a>, which uses <code>httpd</code> to serve sites for local businesses and individuals. Also this blog is hosted there!</p>
			<h2 id="home-router">Home <span class="canonical-name">Router</span></h2>
			<p>The rest of the traffic is sent to the home <a href="https://skullheadx.com/blog/homelab.html#router"><span class="canonical-name">router</span></a>, which also runs <code>pf</code>, and <code>relayd</code> to route traffic to <a href="https://skullheadx.com/blog/homelab.html#icon"><span class="canonical-name">Icon</span></a>. TLS termination is also handled here.</p>
			<h2 id="home-icon"><span class="canonical-name">Icon</span></h2>
			<p>On <a href="https://skullheadx.com/blog/homelab.html#icon"><span class="canonical-name">Icon</span></a>, a variety of services run as <code>systemd</code> services listening on various ports. Some things like my git web frontend, CDN, and Nix bin cache live behind Nginx.</p>


			<h1 id="router">Router</h1>
			<p>This <a href="https://www.barraguard.com/ng-firewall-f12.asp"><span class="canonical-name">Barracuda Cloudgen Firewall F12</span></a> is the firewall to the public internet at home. My <a href="https://skullheadx.com/blog/homelab.html#akesis">VPS</a> has a bidirectional remapping of a static IPv4 to this box over wireguard so that I can route things directly to my house. I mostly just use it for TLS termination so that I can have use a secure connection at home and outside thanks to split horizon DNS.</p>
			<figure id="router-front">
			<img fetchpriority="high" width="720" alt="front of a small rectangular router with lights shining" src="https://skullheadx.com/blog/homelab_router_front.webp">
			</figure>
			<figure id="router-back">
			<img fetchpriority="high" width="720"  alt="back of the router with many ethernet ports" src="https://skullheadx.com/blog/homelab_router_back.webp">
				<figcaption><code>em1</code> is port 4, and <code>em2</code> is port 5. The port ordering is just weird.</figcaption>
			</figure>
			<p>In the future, I plan to move the homelab to be directly plugged into this router, but I wanted <a href="https://skullheadx.com/blog/homelab.html#icon"><span class="canonical-name">icon</span></a> to be easily found via the LAN IP assigned by the ISP modem, which I do not have admin access to. I am considering upgrading my internet so that I can just use this router instead.</p>
			<figure id="router-fetch">
			<img fetchpriority="high" width="720"  alt="specifications of the router running OpenBSD" src="https://skullheadx.com/blog/homelab_router_fetch.webp">
				<figcaption><code>fastfetch</code> run over serial from <a href="https://skullheadx.com/blog/homelab.html#icon"><span class="canonical-name">icon</span></a></figcaption>
			</figure>
			<figure id="router-inside">
			<img fetchpriority="high" width="720"  alt="internal hardware of the router showing a heatsink, SSD and motherboard." src="https://skullheadx.com/blog/homelab_router_inside.webp">
				<figcaption>At the end of the day, a router is just a computer that does networking. I specifically chose this box because it's fanless (hence the giant heatsink), and it's x86 architecture which is better supported by OpenBSD.</figcaption>
				<figcaption>The top cover is held in place by two screws and slides off easily. Very easy to service and repair!</figcaption>
			</figure>
			<h2 id="router-services">Services</h2>
			<h3 id="router-services-pf">pf</h3>
			<h3 id="router-services-relayd">relayd</h3>
			<p>Here's my config in case you need an example to figure out how <code>relayd</code> works.</p>
			<h4><code>/etc/relayd.conf</code></h4>
			<pre><code>
local="127.0.0.1"
homelab="192.168.1.215"
vps="10.0.0.1"

table &lt;local&gt; { $local }
table &lt;homelab_git&gt; { $homelab }
table &lt;homelab_nix_cache&gt; { $homelab }
table &lt;homelab_irc&gt; { $homelab }
table &lt;homelab_cdn&gt; { $homelab }

http protocol "tls_filter" {
        tls keypair "git.skullheadx.com"
        tls keypair "git.montgomery.systems"

        block

        match request header "Host" value "git.skullheadx.com" tag "to_homelab_git"
        match request header "Host" value "nix-cache.skullheadx.com" tag "to_homelab_nix_cache"
        match request header "Host" value "cdn.skullheadx.com" tag "to_homelab_cdn"

        match request header "Host" value "git.montgomery.systems" tag "to_homelab_git"

        match response header remove "Server"

        match request header append "X-Forwarded-For" value "$REMOTE_ADDR"
        match request header append "X-Forwarded-By" value "$SERVER_ADDR:$SERVER_PORT"

        pass request tagged "to_homelab_git" forward to &lt;homelab_git&gt;
        pass request tagged "to_homelab_nix_cache" forward to &lt;homelab_nix_cache&gt;
        pass request tagged "to_homelab_cdn" forward to &lt;homelab_cdn&gt;
}

relay "tlsproxy" {
        listen on 0.0.0.0 port 443 tls
        protocol "tls_filter"
        forward to &lt;local&gt; port 80
        forward to &lt;homelab_git&gt; port 8080
        forward to &lt;homelab_nix_cache&gt; port 5000
        forward to &lt;homelab_cdn&gt; port 8081
}

tcp protocol "ircs" {
        tls { keypair git.skullheadx.com }
}

relay ircs {
        listen on 0.0.0.0 port 6697 tls
        protocol ircs

        forward to <homelab_irc> port 6667
}</code></pre>
			<aside>
				This config covers the services that need to be redirected to my homelab on specific ports depending on the <code>Host</code> header. It also takes care of IRC TLS termination.
			</aside>
<h3 id="router-services-acme">1.5.3 acme-client</h3>
<h3 id="router-services-httpd">1.5.4 httpd</h3>
			<p>This config mainly redirects HTTP to HTTPS. I also have the .well-known for CA cert renewal.</p>
			<h4><code>/etc/httpd.conf</code></h4>
			<pre><code>server "git.skullheadx.com" {
        listen on * port 80
        alias "irc.skullheadx.com"
        alias "nix-cache.skullheadx.com"
        alias "mail.skullheadx.com"
        alias "cdn.skullheadx.com"

        location "/.well-known/acme-challenge/*" {
                root "/acme"
                request strip 2
        }

        location "*" {
                block return 301 "https://$HTTP_HOST$REQUEST_URI"
        }
}

server "git.montgomery.systems" {
        listen on * port 80

        location "/.well-known/acme-challenge/*" {
                root "/acme"
                request strip 2
        }

        location "*" {
                block return 301 "https://$HTTP_HOST$REQUEST_URI"
        }
}
				</code></pre>

			<h1 id="icon">Icon</h1>
			<p>This <span class="canonical-name">HP Compaq 8200 Elite CMT PC</span> is a 10 year old desktop computer transformed into the power house of my homelab running NixOS. My nix flake can be found <a href="https://git.skullheadx.com/nixos/">here</a>, and I've written about my <a href="https://skullheadx.com/blog/suckless_nix.html">suckless style</a>, and <a href="https://skullheadx.com/blog/3-advantages-nixos.html">3 advantages of using NixOS</a> on this blog.</p>

			<figure id="icon-side">
			<img fetchpriority="high" width="720"  alt="close up photo of the router sitting on top of icon" src="https://skullheadx.com/blog/homelab_icon_side_and_router_front.webp">
			</figure>
			<figure id="icon-back">
			<img fetchpriority="high" width="720"  alt="backside of the computer, featuring many ports and cables" src="https://skullheadx.com/blog/homelab_icon_back.webp">
				<figcaption>Genuine serial, parallel, and VGA ports! There's also room for a CD tray on the front (not depicted).</figcaption>
			</figure>
			<figure id="icon-fetch">
			<img fetchpriority="high" width="720"  alt="specifications of computer" src="https://skullheadx.com/blog/homelab_icon_fetch.webp">
				<figcaption>Due for a RAM upgrade once prices settle down.</figcaption>
			</figure>
			<p>The limited specs of the system means I can't deploy bloated programs without running into severe performance problems, so I try to Keep It Simple, Stupid. I may start to separate different services like NFS into their own servers because they have different uptime SLA requirements, and it would take a bit of load off of this main box.</p>
			<figure id="icon-inside">
			<img fetchpriority="high" width="720"  alt="motherboard, CPU, SSD, HDD inside the computer" src="https://skullheadx.com/blog/homelab_icon_inside.webp">
			</figure>
<h2 id="icon-services">Services</h2>
<h3 id="icon-services-nginx">nginx</h3>
<h3 id="icon-services-cdn">CDN</h3>
<h3 id="icon-services-cgit">cgit</h3>
<h3 id="icon-services-git-daemon">git daemon</h3>
<h3 id="icon-services-soju">soju</h3>
<h3 id="icon-services-nfs">NFS</h3>
<h3 id="icon-services-nix-remote">Nix remote builder</h3>
<h3 id="icon-services-nix-serve">Nix-serve-ng</h3>
<h3 id="icon-services-dnsmasq">dnsmasq</h3>
<h2 id="icon-observability">Observability</h2>
<h3 id="icon-observability-collectd">collectd</h3>
<h3 id="icon-observability-smartd">smartd</h3>
<h3 id="icon-observability-upsd-upsmon">upsd+upsmon</h3>
<h2 id="icon-notes">Notes</h2>


			<h1 id="ups">UPS</h1>
			<p>The <a href="https://www.cyberpowersystems.com/product/ups/pfc-sinewave/cp850pfclcd/"><span class="canonical-name">CyberPower PFC Sinewave CP850PFCLCD</span></a> Uninterruptible Power Supply (UPS) ensures that blackout and brownouts don't corrupt my systems. It is able to switch from line power to battery in under 8ms. The batteries can be replaced with the <a href="https://www.cyberpowersystems.com/product/ups/replacement-batteries/rb1280a/"><span class="canonical-name">RB1280A</span></a> or other compatible <a href="https://batteryclerk.ca/products/cyberpower-cp850pfclcd-12v-9ah-ups-battery">third party batteries</a>. Here's a <a href="https://www.cyberpowersystems.com/resources/cp850avrlcd-um/">link to the user manual</a>.</p>
			<figure id="ups-front">
			<img fetchpriority="high" width="720"  alt="front of a UPS" src="https://skullheadx.com/blog/homelab_ups.webp">
				<figcaption>My equipment doesn't use a lot of power, so it can survive quite a while on this tiny UPS.</figcaption>
			</figure>
			<p>The status of the UPS and it's batteries can be monitored using <span class="canonical-name">upsd</span> and <span class="canonical-name">upsmon</span> to gracefully shutdown if power doesn't come back online before the battery runs out. This is still pending TODO on the homelab :/</p>

			<h1 id="akesis">Askesis (VPS)</h1>
			<p>Here's the VPS I got from <a href="https://hosthatch.com">HostHatch</a> for 1 vCPU, 2 GB RAM, and 10 G of storage for $4 USD/mo. At least they let me get an additional static IPv4 for $2 USD/mo after contacting support. I chose them because an online acquaintance recommended them for their reputable IPs for email deliverability.</p>
<aside><a href="https://cloud.hosthatch.com/a/5382">HostHatch referral code</a></aside>
			<figure id="akesis-fetch">
			<img fetchpriority="high" width="720"  alt="specifications of VPS" src="https://skullheadx.com/blog/homelab_akesis_fetch.webp">
				<figcaption>I used a stackable file system mount on <code>/var/www</code> to make better use of my limited disk space. I learned how to do this from the <a href="https://nostarch.com/download/samples/ao2e_ch8.pdf">sample chapter of Absolute OpenBSD 2e</a> which sold me on the author's technical expertise and teaching ability.</figcaption>
			</figure>
			<p>I mostly use the base packages on this system such as <code>pf</code>, <code>relayd</code>, <code>httpd</code>, and <code>acme-client</code>. This has served me very well because it's high performance at low cost!</p>
<h2 id="akesis-services">Services</h2>
<h3 id="akesis-services-pf">pf</h3>
<h3 id="akesis-services-relayd">relayd</h3>
<h3 id="akesis-services-acme">acme-client</h3>
<h3 id="akesis-services-httpd">httpd</h3>


]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Refactoring My Nix Flake (uncut)]]></title>
<link href="https://skullheadx.com/blog/refactoring-nix-flake.html"/>
<id>https://skullheadx.com/blog/refactoring-nix-flake.html</id>
<published>2026-08-16T00:00:00Z</published>
<updated>2026-08-16T00:00:00Z</updated>
<category term="technology"/> <category term="NixOS"/> <category term="Nix flakes"/> <category term="video"/>
<summary type="html"><![CDATA[I spent 2 hours to refactor my NixOS flake to be more coherent.]]></summary>
<content type="html" xml:base="https://skullheadx.com/blog/"><![CDATA[
<p>Tidied up my desktop NixOS configuration, added some comments, and fixed a reproducibility problem.</p>
<figure>
	<figcaption>Watch <strong>Refactoring My Nix Flake (uncut):</strong></figcaption>
	<video controls>
		<source src="https://cdn.skullheadx.com/refactoring-nix-flake.mp4" type="video/mp4">

		Download the <a href="https://cdn.skullheadx.com/refactoring-nix-flake.mp4">mp4</a>
		video.
	</video>
	<a href="https://youtu.be/juA6jpJQfto">Youtube Mirror</a>
</figure>

<h4>Errata:</h4>
<p>
	Use
	<code>${pkgs.feh}/bin/feh --no-fehbg --bg-fill ${../../Daniel_in_the_Lions_Den_by_Briton_Riviere.jpg}</code>
	to put it in the /nix/store
</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[3 Advantages of Using NixOS]]></title>
<link href="https://skullheadx.com/blog/3-advantages-nixos.html"/>
<id>https://skullheadx.com/blog/3-advantages-nixos.html</id>
<published>2026-08-04T00:00:00Z</published>
<updated>2026-08-27T00:00:00Z</updated>
<category term="technology"/> <category term="NixOS"/> <category term="Nix"/>
<summary type="html"><![CDATA[How Nix lets me do fearless deployments, manage configs in one place, and solve reproducibility.]]></summary>
<content type="html" xml:base="https://skullheadx.com/blog/"><![CDATA[
<p>I was hanging out on <code>#lobsters</code>
	on IRC (<a href="https://libera.chat">Libera Chat</a>), and people were discussing different flavours of Linux which prompted me to reflect whether Nix solves the problems I encounter from day to day.</p>

<h1>Fearless Upgrades</h1>
<p>On non declarative systems, there is a lot of manual maintenance to ensure the system runs smoothly. Double or triple that effort if you have more than one machine. When I first got into Linux, I put <a href="https://archlinux.org/">Arch Linux</a>
	on my laptop. The install went smoothly and I was off to the races, until I received an email explaining that I need to update the package manager, Pacman. So I followed the instructions, and I broke something and I couldn't access the mirrors. Given my general inexperience, I just reinstalled the whole thing because I wasn't sure how to fix it.</p>
<p>My experience with Arch left an impression on me that my system should reliable and not break when I'm doing routine maintenance. Luckily, I found out about NixOS and its declarative setup so I never have to feel scared to upgrade my system because I know that I can always rollback to a previous change.</p>
<p>This allows me to easily bisect issues to find the exact version where it broke. For example on <a href="https://github.com/nix-darwin/nix-darwin">Nix Darwin (Nix for MacOS)</a>, there was a linker error when I tried to update <code>audacity</code>
	because it was built for newer MacOS versions than my system. My first solution was to add another input for <code>nixos-26.05</code>, and rebuild an older version of <code>audacity</code>
	which didn't have the issue. This upgrade strategy lets me update everything else to the bleeding edge while simultaneously pinning certain packages, that haven't caught up, to a stable version. This kind of reproducibility issue is inherent to MacOS not being designed with the same guarantees of Nix in mind.</p>
<aside>As of August 27th, I've been able to update <code>audacity</code>
	to the latest on unstable.</aside>
<p>With the assurance that I can easily roll back a disastrous update, I've had great success managing a fast update cycle on my desktop and production server. I believe that a good way to manage updates is with small frequent changes that let you easily pinpoint the issue, rather than deal with them all at once during one upgrade. That's why the guarantee of <em>fearless</em>
	upgrades is so appealing to my sensibilities.</p>

<h1>Configuration All in One Place</h1>
<p>Dotfiles and config files are usually all over the place, which is why I find Nix incredibly useful for organizing and deploying them to my server and desktop PC. For instance, I manage SSH authorized keys and configuration, a myriad of system users with varying permissions, Git, <a href="https://git.zx2c4.com/cgit/">cgit</a>, <a href="https://soju.im">soju</a>
	(IRC bouncer), <a href="https://github.com/aristanetworks/nix-serve-ng">nix-serve-ng</a>
	(Nix bin cache), NFS, <a href="https://www.wireguard.com/">WireGuard</a>, GnuPG, CDN, and <a href="https://thekelleys.org.uk/dnsmasq/doc.html">split-horizon DNS</a>.</p>
<p>Recently, I was experimenting with split-horizon DNS, which routes DNS queries like <code>git.skullheadx.com</code>
	directly to my homelab if I'm on my local network, otherwise it routes through my public VPS to my homelab over WireGuard. It turns out adding split-horizon DNS had an unintended side effect on my git ssh autotunnel from my homelab to VPS causing an incident leading to degraded service on git over ssh operations. In other words, it broke because the ssh autotunnel relied on the routing for <code>git.skullheadx.com</code>
	to route to the VPS, but since the homelab is on my local network, the DNS resolver just told my homelab to look at its own local IP. I was able to hone in on the issue because I can turn off certain services, like <code>dnsmasq</code>, to test my entire server configuration. Moreover, thanks to being tracked in Git history, I bisected the changelog, and was able to find when the issue started to occur, and I resolved it by telling the git auto ssh tunnel to use the IP of the VPS directly, rather than relying on the faulty assumption that it would get routed where I wanted it to.</p>
<p>I strongly prefer this style of system administration because I have specifically designed my flake to be <a href="https://skullheadx.com/blog/suckless_nix.html#clarity">abundantly clear</a>, following the <a href="https://suckless.org/philosophy">suckless philosophy</a>. Since my configuration is deployed on real hardware (not some nebulous cloud), I explicitly define the services and programs that I need for each host all in one place, which allows me to see what's deployed there at a glance.</p>

<h1>Actually Solving the Reproducibility Problem</h1>
<p>I did a nix store optimise which deletes identical files and replaces them with hard links to a single copy. I ran it on my laptop which cleared 40 GB of duplicates. It made me reflect on the problem that Nix is trying to solve: how can we reproduce a package exactly the same on everyone's computer?</p>

<p>This is a really hard problem to solve and has given rise to many solutions like containers. Yes they can work, but Nix solves the problem <em>better</em>
	than containers because it lockfiles and reproduces only the exactly dependencies required, meanwhile the containers will install a whole OS image so that the packages used can be reproduced.</p>

<p>In my opinion, it's pretty overkill to download and install a whole new image for every single deploy. If you were engineering a proper solution, you should make <em>only</em>
	the things you are trying to deploy reproducible, including all its dependencies. Take this to the scale of an entire OS, and Nix becomes the obvious answer since it tracks all those dependencies.</p>

<p>But taking a step even further back, why is this a problem in the first place? The whole philosophy of UNIX and Linux systems is that it's intended for any developer to come and add programs, and build off of the community's work. Because there are so many contributors, many anonymous, that makes it extremely difficult to standardize an environment that everyone should use. Some may say that the culture of replacing the existing programs with any of your choice is a selling point of Linux, but this approach is not fully without downsides, since we now have no idea what libraries and dependencies exist on the user's system. I've recently started using OpenBSD as as a router for all my internet traffic towards my servers. Most of the programs that I use are first party, and they all just integrate seamlessly with each other. Moreover, the general attitude towards system upgrades is to update everything to the next release altogether. It's a completely different approach to the goal of achieving a stable operating system, which works with significantly less complexity.</p>

<h1>To Conclude This Reflection</h1>
<p>I still think that NixOS and OpenBSD have their places. For everything that needs to be rock solid, low resource, and highly secure I've opted for OpenBSD. My BSD router handles TLS termination, relayd, firewall to the public internet and static web hosting (my business).</p>
<p>Nix is invaluable for trying out new, and 3rd party code. For example, I'm running <a href="https://git.zx2c4.com/cgit/">cgit</a>, <a href="https://soju.im">soju</a>
	IRC bouncer, <a href="https://thekelleys.org.uk/dnsmasq/doc.html">Dnsmasq</a>
	split horizon DNS, <a href="https://github.com/aristanetworks/nix-serve-ng">Nix bin cache</a>, and NFS. The flexibility and power from the three advantages we've explored make NixOS a joy to quickly deploy new services, and debug when if they go wrong.</p>

]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Suckless Nix]]></title>
<link href="https://skullheadx.com/blog/suckless_nix.html"/>
<id>https://skullheadx.com/blog/suckless_nix.html</id>
<published>2026-07-04T00:00:00Z</published>
<updated>2026-07-04T00:00:00Z</updated>
<category term="technology"/> <category term="NixOS"/> <category term="suckless"/> <category term="Home Manager"/>
<summary type="html"><![CDATA[Explaining how I use NixOS in a suckless way.]]></summary>
<content type="html" xml:base="https://skullheadx.com/blog/"><![CDATA[
					<p>Many people criticize <a href="https://nixos.org">Nix</a>
						for being an overcomplicated abstraction and that's absolutely true if you're using Nix the way most people do. This blog post will explore my experience learning to use Nix over 12 months and the 'suckless' configuration I've settled on.</p>
					<h4 id="dont-use-home-manager">Don't Use Home Manager</h4>
					<p>In my experience, using <a href="https://nix-community.github.io/home-manager/introduction.html">Home Manager</a>
						has more negatives than benefits. For example, trying to configure the settings for any program involves this guessing game of what options are supported and how to configure them. Take this snippet from my old home manager configuration:</p>
					<div class="code-block">
						<pre><code>programs.ghostty = {
    enable = true;
    settings = {
      shell-integration = "fish";
      shell-integration-features = true;
      mouse-hide-while-typing = true;
      cursor-click-to-move = true;
      mouse-shift-capture = true;
      scrollback-limit = 10000;
      link-url = true;
      link-previews = true;
      background-opacity = 0.8;
      background-blur = true;
      window-inherit-working-directory = true;
      window-save-state = "always";
      copy-on-select = "clipboard";
      clipboard-read = "allow";
      clipboard-write = "allow";
      confirm-close-surface = false;
      auto-update = "off";
    };
  };</code></pre>
					</div>

					<p>The entire <code>settings</code>
						block is undocumented and you have to go into the <a href="https://ghostty.org/docs/config/reference">Ghostty Option Reference</a>
						and guess how to set it up in the Nix langauge. It was precisely this kind of frustrating experience which really made me consider switching away from NixOS.</p>

					<h4 id="suckless-software">Suckless Software</h4>
					<p>Fortunately, I found out about <a href="https://suckless.org">Suckless Software</a>
						and I basically deleted my whole configuration and started over on X11 with a renewed energy to write a minimal, yet powerful Nix configuration.</p>
					<p>The <a href="https://suckless.org/philosophy">Suckless philosophy</a>
						has a focus on simplicity, clarity, and frugality which helps keep their software easy to maintain, extend, and modify. I believe applying these principles has helped me create a reliable configuration that I can depend on for work, school, personal use, and running a business.</p>
					<h5 id="simplicity">Simplicity</h5>
					<p>It took me approximately 10 months of daily use to really understand what Nix is and how it works. Nix was my first functional programming language, so I was unfortunate enough to have to struggle to get to where I am today. The trick to grasping Nix is to avoid using fancy features and just stick to basic features as you are getting started; I like to tell people that the best way to use Nix is to use as little of it as possible.</p>
					<p>Flakes are one advanced feature that is an exception from this rule because they give you the ability to pin down the exact version of the inputs used, and they let you easily wire up your configuration for different hosts. A Nix flake is literally just an input and output. Inputs are just some urls to some packages like <a href="https://github.com/NixOS/nixpkgs/tree/nixos-unstable">nixpkgs</a>
						or my <a href="https://git.skullheadx.com/dwm">dwm</a>
						package. The outputs are just a fully configured, installed and setup system like a <code>nixosConfiguration</code>
						or a <code>darwinConfiguration</code>.</p>
					<p>The way that I solved the problem with Home Manager, and configuring the system in general is to use Nix to do the following:</p>
					<ul class="list-disc">
						<li>Manage dotfiles, and put them in the right place</li>
						<li>Download and install packages, keeping them locked at the right version and isolating their dependencies.</li>
						<li>Start services</li>
					</ul>
					<p>Don't try to write your whole system config in Nix. It's a fool's errand, and gives you almost no benefit since you can't really take advantage of the languages features, besides first class file paths. My first choice is to just use Nix to enable and set just a few settings, but if it starts getting too complicated, I usually use a mix of the documented options like <code>enable</code>
						and <code>extraConfig</code>
						to use the program's configuration syntax
						when I need to merge the two, which Nix can handle beautifully.</p>
					<p>For dotfile configuration, I just write them into the <a href="https://git.skullheadx.com/nixos/tree/dotfiles">dotfiles directory</a>
						in my git repo, which <a href="https://hjem.feel-co.org">Hjem</a>
						copies into the Nix Store and symlinks to the config location that the program looks for. This method allows me to take full advantage of existing documentation for the tools, but also use Nix for the reproducibility and management of dotfiles.</p>
					<h5 id="clarity">Clarity</h5>
					<p>I was inspired by <a href="https://andrewkelley.me">Andrew Kelley</a>, the creator of <a href="https://ziglang.org">Zig programming language</a>, and his philosophy of not letting the compiler do stuff behind your back. To translate this to a NixOS configuration, I opted to make minimal use of overlays, modules, and functions. As a programmer it's very difficult to resist the urge to not repeat yourself but I've found through experience, that I'd rather just repeat myself once or twice or even three times because it's much easier to maintain. Whenever you add these abstractions, the code doing real work get shoved somewhere else and it becomes confusing with regards to what the code is actually doing because you need to jump somewhere else to understand it. Take my <a href="https://github.com/nix-darwin/nix-darwin">Nix Darwin (MacOS)</a>
						configuration where different configurations need different hostnames and usernames:</p>
					<div class="code-block">
						<pre><code>darwinConfigurations = {
  kenosis = nix-darwin.lib.darwinSystem {
    specialArgs = {
      inherit inputs;
      nvim = nvim-darwin;
      username = "andrew";
    };
    modules = [
      ./common-darwin.nix
      ./hosts/kenosis/configuration.nix
      ./overlays.nix
      hjem.darwinModules.default
    ];
  };
  bear = nix-darwin.lib.darwinSystem {
    specialArgs = {
      inherit inputs;
      nvim = nvim-darwin;
      username = "andrewmontgomery";
    };
    modules = [
      ./common-darwin.nix
      ./hosts/bear/configuration.nix
      ./overlays.nix
      hjem.darwinModules.default
    ];
  };
};</code></pre>
					</div>
					<p>While it is very simple to refactor this into a function, it hides the code away from where I want to see it and be defining the actual configuration, if I need to do a quick fix to add a module.</p>
					<p>Also, the code duplication should not really be a problem for personal computing. My flake has 4 configurations for my desktop, homelab, and two laptops, and there are only ~3k LoC. Very manageable.</p>
					<p>Something that I really appreciate about Nix, and NixOs is that it lets you say <code>services.program-here.enable = true;</code>, and it will make the systemd timers and services for you, but it also lets you have full control to write them yourself. This simplicity of turning on a service with one line, but also the ability to have deep level of control, lets me feel safe, knowing that I can tweak it if I need to. While this point seems a bit contradictory to the goal of absolute clarity, I think that the level of abstraction is tasteful enough that I don't mind Nix doing a little bit of stuff behind my back, since I can rip it out and replace it with my own whenever I like.</p>
					<h5 id="frugality">Frugality</h5>
					<p>Something I've noticed when using X11 is that the extremely mature ecosystem has plenty of great tools that just do exactly what you need them to do. For example <a href="https://github.com/baskerville/sxhkd">Simple X Hot Key Daemon (sxhkd)</a>
						was extremely easy to setup, and it can run any shell script you want it to. Moreover, adhering to a strict UNIX philosophy, ensures that every new thing that I add can extend existing tools leading to even better workflows.</p>
					<p>On my system, I tend not to use GUI programs because often they lack features that I need, or it's just faster to do it on the command line. Most tasks I do on my computer involve writing, editing, or manipulating text, so it doesn't make sense to have 5 different programs to all have to build integrations with each other, when they could all go through a unified interface like the command line or a real extensible editor like <a href="https://www.gnu.org/savannah-checkouts/gnu/emacs/emacs.html">GNU Emacs</a>.</p>
					<p>For instance, I recently replaced <a href="https://keepassxc.org">KeePassXC</a>
						with the <a href="https://www.passwordstore.org">unix password-store (pass)</a>
						utility. While KeePassXC was enjoyable in GUI heavy workflows, the program tries to write to the readonly file in the Nix store, which causes some problems customizing the program. Not wanting to touch a massive codebase and keep up with security patches, I opted for a simpler utility that <em>just works</em>
						and I haven't had much problem with password-store. It even does <a href="https://codeberg.org/PassFF/passff">browser autofill</a>, and <a href="https://github.com/tadfisher/pass-otp">OTP codes!</a></p>
					<h4 id="nixos-vs-openbsd">NixOS vs OpenBSD</h4>
					<p>My utmost concern, when it comes to operating systems, is that they must be reliable enough that I can leave them in the background, and they will do their thing, forever unchanging, until I change them. In essence, I want to be able to trust my computer is working for me, not someone else.</p>
					<p>In my experience, there are two reasonable ways to solve this problem: Either lockfile everything down and be fully reproducible <b>OR</b>
						be extremely stable and have a dedicated first party way of doing things</p>
					<p>This lead me to explore two different operating systems which take these two routes, and discover the subtle needs that warrant the right tool for job (which could be different depending on the circumstances).</p>
					<h5 id="nixos-as-a-desktop">NixOS as a Desktop</h5>
					<p>A desktop PC needs to run a graphical display; play audio, and games; easily add and remove new software; and more. I've omitted obvious stuff like security and performance, since these should be givens, not a feature. For this application, I think that NixOS is clearly the winner because of better compatibility support and the ability to quickly hop into a <code>nix shell 'nixpkgs#program-here'</code>
						and start tinkering with a new package. Moreover, the ability to rollback to a working configuration in this volatile environment is extremely handy.</p>
					<h5 id="nixos-as-a-server">NixOS as a Server</h5>
					<p>As a server, NixOS is also great because there are so many different programs and services that can be easily setup such as <a href="https://www.mankier.com/8/nfsd">nfs</a>, <a href="https://git-scm.com/book/en/v2/Git-on-the-Server-Git-Daemon">git daemon</a>, <a href="https://soju.im">Soju IRC bouncer</a>, firewall, and more! It's very simple to enable a service and configure it how you like, and be able to reproduce that configuration on another machine with one command.</p>
					<p>That being said, there are occasional issues with SystemD isolation causing certain services to be unable to access a file or other program which involves some debugging and ugly fixes. Though the benefits definitely far outweigh the problems when it comes to this approach.</p>
					<h5 id="openbsd">OpenBSD</h5>
					<p><a href="https://www.openbsd.org">OpenBSD</a>
					approaches this problem from a different perspective by prioritizing correctness, good documentation, and having builtin ways of doing things. The first thing I noticed when I setup an OpenBSD VPS to host my static site and do TLS termination, was the great man pages and solid library of builtin programs. I use <a href="https://man.openbsd.org/httpd">httpd</a>, and <a href="https://man.openbsd.org/acme-client">acme-client</a>
					to handle serving my website html pages and SSL certs. I also use <a href="https://man.openbsd.org/pf">pf</a>
					and <a href="https://man.openbsd.org/relayd">relayd</a>
					to handle routing different packets to where they need to go, between my homelab and httpd. Overall, the operating system experience is very well thought out, and a breath of fresh air compared to Linux.</p>
					<p>OpenBSD is probably the only operating system, I know, that I would trust to touch the public internet.</p>
					<ol class="list-disc">
						<li>Its core philosophy of correctness and continuous <a href="https://www.openbsd.org/security.html">security</a>
							audits keep it secure.</li>
						<li>The unified vision ensures that programs work well with each other since they have the same expectations. For example: httpd and relayd can work harmoniously without interfering with each other even though they touch similar areas.</li>
					</ol>
					<p>So then why don't I use OpenBSD as my desktop OS? Well, I think that's a great question. I am already pretty happy with my current NixOS setup, and it wouldn't be much benefit to switch over to a BSD yet.</p>
					<h4 id="the-problems-with-nix">The Problems With Nix</h4>
					<ol class="list-disc">
						<li><b>Poor Documentation</b>: If you just use basic features then <a href="https://search.nixos.org">search.nixos.org</a>
						and <a href="https://mynixos.com">mynixos.com</a>
						have got you covered. It's ironic that I have to mention two sources of docs, since the official nixos.org one has great detail, but it's lacking Nix-Darwin options. On the other hand, mynixos.com has better organization, but is missing package sets like <code>emacsPackages</code></li>
						<li>The <code>sudo nixos-rebuild switch --flake .</code>
							rebuild and evaulation time take more than 10 seconds every time. It's frustrating because you can't get a fast iteration loop to test out small config changes, and I wish they could make it faster.</li>
						<li>NixOS depends on SystemD which means that it would be difficult to migrate to a different init system.</li>
						<li>Nix store making things read only which causes some programs to break.</li>
						<li>Disk bloat which caused problems trying to update my laptop which was running out of disk space.</li>
						<li>Not really a Nix problem, but <a href="https://neovim.io">Neovim</a>
							tries to be the opposite of suckless by constantly changing and adding new updates/package managers. At the time of writing this, I'm trying out GNU Emacs.</li>
					</ol>
					<h4 id="conclusion">Conclusion</h4>
					<p>Overall, I highly recommend Nix for power users. It has helped me create a reproducible dotfiles configuration, manage & survey all the programs I installed on my computer, and have an easy to change, yet stable operating system.</p>
					<p>After using NixOS for a year, I'm still figuring out some of the more advanced features of the language:</p>
					<ol class="list-disc">
						<li>Modules, and whether they are really worth hiding away parts of my code for reuse as my configuration.nix gets longer.</li>
						<li>Where to draw the lines between where certain configuration should live.</li>
						<li>What is configuration and what is data that should stay out of Nix.</li>
					</ol>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[BE A SOVEREIGN PROGRAMMER]]></title>
<link href="https://skullheadx.com/blog/sovereign-programmer.html"/>
<id>https://skullheadx.com/blog/sovereign-programmer.html</id>
<published>2026-04-03T00:00:00Z</published>
<updated>2026-04-03T00:00:00Z</updated>
<category term="philosophy"/> <category term="digital sovereignty"/> <category term="AI"/> <category term="programming"/> <category term="video"/>
<summary type="html"><![CDATA[Why you don't need to use AI or ship fast at all.]]></summary>
<content type="html" xml:base="https://skullheadx.com/blog/"><![CDATA[
<figure>
	<figcaption>Watch <strong>BE A SOVEREIGN PROGRAMMER:</strong></figcaption>
	<video controls>
		<source src="https://cdn.skullheadx.com/DigitalSovereigntyThumb.mp4" type="video/mp4">

		Download the <a href="https://cdn.skullheadx.com/DigitalSovereigntyThumb.mp4">mp4</a>
		video.
	</video>
	<a href="https://youtu.be/wtacSlFKn-g">Youtube Mirror</a>
</figure>

<h2 id="transcript">Transcript</h2>
<h1 id="digital-sovereignty">Digital Sovereignty</h1>
<em>If AI were to disappear tomorrow, would you still be able to code?</em>
<p>The system has a peculiar way of entrenching people into the system such that they are completely reliant on it. The latest method is vibe coding where people just ask AI to write code for them and these developers never look at the code the AI produced. It's more than just a poison of your skill atrophy, but also for your independence from the 'system'. If AI datacenters were to all get bombed, these people will not be able to code the same way they could before AI. This is a loss of digital sovereignty.</p>
<p>A lot of people question why this is even important because AI makes them go faster and lets them do things they normally can't. There is an important presupposition that they are making which everyone should ask themselves:<br>Are AIs meant to help you or to help the system?</p>

<h1 id="a-bit-about-systems-first">A bit about systems first:</h1>
<p>We participate in things I call systems to help us or our group. For example, <span class="canonical-name">Meritocracy</span>
	is a system where you put in lots of hard work and you are supposed to get rewards in forms of money and status. Another example is <span class="canonical-name">Society</span>, you listen to everything they
	tell you and your reward is that you don't lose your status in society, and the leaders of the society (elected or not) get what they want which may or may not coincide with what's best for the general public.</p>

<h2 id="society"><span class="canonical-name">Society</span></h2>
<p>In the case of AI and vibecoding, the system is actually society. They push you to use AI in the job market and all over social media. You will meet people in real life who are obsessed with vibing, even in personal projects.<br>The reward: If you just use AI, you will <em>10x</em>
	your development speed, dude!! or it's just easier, I don't have to think anymore! I just scroll on my phone while <span class="canonical-name">Claude</span>
	does everything!</p>
<p>In this video, I will make a case <em>against</em>
	vibing and show why the tradeoff between development speed and digital sovereignty is actually very misunderstood.</p>

<h2 id="meritocracy"><span class="canonical-name">Meritocracy</span></h2>
<p>In our society, we use <span class="canonical-name">Meritocracy</span>
	to decide who to hire. Theoretically, if you are best person for the job (this also includes soft skills like communication and culture fit), you should be the person they hire. This system attempts to treat everyone as having an equal opportunity of getting this job, but it also comes as a corollary that everyone is just a cog that can be replaced by someone better.</p>

<p>Therefore, if the system wants AI, then you better use AI or be replaced by someone who is willing to give up their technical sovereignty to use AI. This is bad because without technical sovereignty, you must rely more on the system and keep doing whatever they ask for no matter how embarrassing.</p>

<p>If you can't see why that's a problem, maybe you haven't realized that you have already given up so much to the system like your bodily autonomy, Free speech, privacy, etc. They have a way of encroaching on more of your freedoms and independence because they like to control us, this can be <em>NOTICED</em>
	over the last 100 years as we consistently become more and more dependent on the system. (What will I do without my social media feed)</p>

<p>I think <span class="canonical-name">the shadow government's</span>
	end goal with AI is to make every software developer entirely reliant on AI so that we wouldn't be able to code anything by ourselves. The consequence of this is that no one will be able to create software that they don't like. For example end-to-end encrypted messaging software, or operating systems that don't use spyware to send everything to 3 letter agencies. They will force AI companies to not comply with requests to build such software and no one will have the skills to make those anymore. Its the ultimate way to curb the threat to the government's power which technology poses. Imagine you ask the AI to build you something and it says <strong>NO</strong>. <em>What will you do?</em></p>

<p>This shows the only way to stop this kind of future is to possess digital sovereignty to <strong>OWN</strong>, manage, write and maintain our own hardware and software.</p>

<h1 id="another-important-note">
	Another important note:
</h1>
<p>Why is shipping fast always seen as the thing we should be striving for?
	I would like to challenge this assumption.
	The reason we ship fast is so that we can meet business needs fast for customers.
	But why do customers want things fast or <em>RIGHT NOW?</em>
	Customers want things right now because they have been trained to only see things in the short term by the system.</p>
<p>It's built into how the world works that if you spend more time to prepare and delay gratification, you will receive a larger reward in the future. For example stocking more food for the winter or architecting a good design before spending months to create any project without one. However, we have been conditioned to want things immediately with no work because that's easier. We don't even think about how hard something will be to maintain in the future.<br><br>
	We can observe the systems that the System has set up for us:</p>
<ul>
	<li>Our currencies will become worth less if you save it due to them printing money;</li>
	<li>scrolling shorts is far more entertaining than getting real knowledge from a book;</li>
	<li>Getting <span class="canonical-name">Uber Eats</span>
		is far more convenient than eating healthy food cooked at home.</li>
</ul>
<p>If the system cared about our wellbeing, they would <strong>BAN</strong>
	this stuff since it makes use impulsive, dumb and fat.
	<em>These tactics are pushed by the system the same way as AI to make us less independent.</em></p>

<h1 id="reclaim-digital-sovereignty">How can I reclaim my digital sovereignty</h1>

<p>I've got a more in-depth video coming soon, but here's some quick tips:</p>

<ul>
	<li>Don't Vibe code. If you don't know why each line is there without looking at the version AI made, then then you don't understand it. Simple as. I think there's a good way to use AI as a tool like as a search engine or <span class="canonical-name">Stack Overflow</span>
		replacement. However, this should only be used <em>AFTER</em>
		you're blocked on your implementation and the docs don't help. There's an important balance to strike between total independence and relying on the system for small things that you could easily replace if actually needed. You get what you put into it, if you think the system is actively harming you (it is), then make sure your life decisions let you break free.</li>

	<li>Read the docs. Documentation tells you how to use the tool or library effectively.</li>

	<li>Choose simpler and more minimal technology that you can have a mental model how it works. This usually means picking Free Software because they are free for anyone to learn and understand.</li>
</ul>

<h1 id="conclusion">Conclusion</h1>

<p>If you're fine being a replaceable cog in the system, then this video probably hasn't convinced you of anything. However, for those people who think that you are negatively affected by the system and AI, you may feel a bit lost. If broader society is against you in such a way, then surely the solution must be to start homesteading in rural cabin isolated from everyone? For most people this is not the answer. I would recommend joining 'systems' that are actually looking out for your interests and digital sovereignty and making your life more independent from the system. For tech, I recommend joining small forums or imageboards focused on specific minimalist technologies like Artix, <a href="https://openbsd.org/groups.html">OpenBSD</a>, or other <a href="https://fsf.org">Free Softwares</a>. I like the <a href="https://lobste.rs">lobste.rs</a>
	forum because there are lots people on there who use Free software and are against vibecoding. Some more actionable advice is to make decisions to use a BSD or Linux instead of Windows, use the command line rather than GUIs, use Free software, take your stuff off of the cloud, learn about homelabbing, and learn a low level language.</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Free Software Elitism]]></title>
<link href="https://skullheadx.com/blog/free-software-elitism.html"/>
<id>https://skullheadx.com/blog/free-software-elitism.html</id>
<published>2026-03-26T00:00:00Z</published>
<updated>2026-03-26T00:00:00Z</updated>
<category term="philosophy"/> <category term="free software"/> <category term="FSF"/> <category term="video"/>
<summary type="html"><![CDATA[Why elitism is necessary for the Free Software Foundation to achieve its goals.]]></summary>
<content type="html" xml:base="https://skullheadx.com/blog/"><![CDATA[
<figure>
	<figcaption>Watch <strong>Free Software Elitism:</strong></figcaption>
	<video controls>
		<source src="https://cdn.skullheadx.com/FreeSoftwareElitism.mp4" type="video/mp4">

		Download the <a href="https://cdn.skullheadx.com/FreeSoftwareElitism.mp4">mp4</a>
		video.
	</video>
	<a href="https://youtu.be/_BAQ4Wdcu_s">Youtube Mirror</a>
</figure>
<h2 id="sources">Sources:</h2>
<cite><span class="canonical-name">Free Software Foundation</span>, <a href="https://www.fsf.org/news/anchoring-the-fsf-in-its-values">Anchoring The <span class="canonical-name">FSF</span>
	in its Values</a></cite>
<h2 id="transcript">Transcript</h2>
<p>Free software has a bad reputation for elitism when it comes to Free vs Non-Free software; this video will show you why elitism is actually good and necessary for the Free software movement and the software world as a whole.</p>
<h3 id="common-complaints">Common complaints include</h3>
<ul>
	<li>Muh computer doesn't work with muh free software!!</li>
	<li>Why do I need to enable non-Free software, it should just come preinstalled!??</li>
</ul>

<figure>
	<figcaption>Here's an example of such a complaint: this user is 'pissed off' that Non-Free software is not enabled by default in the GNU Guix operating system.</figcaption>
	<img src="https://skullheadx.com/blog/complaint-free-sw.webp" alt="complaint about free software" fetchpriority="low">
</figure>

<p>Let's say that the <span class="canonical-name">Free Software Foundation</span>
	were to 'accommodate' these people by including Non-Free software by default, this would mean that they would have to bend their principles of Free software in their own OS and in their view, do something potentially unethical. Who cares what they think is unethical, the important thing is that they are being pressured to forget all about their principles to appease these people.</p>
<p>Despite losing popularity and pragmatism, if the <span class="canonical-name">FSF</span>
	has to keep eroding their principles by 'meeting people where they are', eventually there will be nothing left of the original idea. This is called a slippery slope for a reason. People will keep asking you to make it more accessible until either your program bloats to gigabytes in size or your idea becomes so watered down, it will won't make any meaningful change. This is why its important to firmly lay down your principles and let others come to you instead of appealing to the masses. This is how you make real world change.</p>
<p>This attitude comes off as elitist because it is different than the status quo and therefore causes friction with what people are used to right now. Elitism will ensure that you don't become like the status quo you are trying to change, and that's why its very important to be this way.</p>
<p>Most people have no idea what Free software even stands for and why, and this is why the <span class="canonical-name">FSF</span>
	created their organization in an explicitly elitist way. On their website, one of the first pages you will see is: <a href="https://www.fsf.org/news/anchoring-the-fsf-in-its-values">Anchoring The <span class="canonical-name">FSF</span>
		in its Values</a></p>
<p>They realized that lots of people who would benefit from their work, but disagree with Software Freedom, could join the organization and VOOT the original people out and replace them with new soys who don't uphold software Freedom values. Therefore, they created a board of directors who were the only people who could vote on electing new members for certain legal reasons (they couldn't just have a board of directors with NO democracy). This would prevent other organized groups from paying a bunch of people to VOOT for their own ideas effectively taking over the <span class="canonical-name">FSF</span>. I think it's It is further proof that even after 40 years, the <span class="canonical-name">FSF</span>
	is still maintaining those same core Freedoms as the very beginning.</p>
<p>The conclusion we can take away from the <span class="canonical-name">FSF</span>
	and its goverance, is that it is important to hold strong to your principles to make meaninful change, even if the status quo or alternatives are more pragmatic or popular.</p>
<p>This is important for the software world as a whole because governments and companies want to keep you locked into their systems and force you to pay them with your money, privacy and freedom. This is why Free software that lets you use, change and distribute software as you please, and it's is very essential to your digital sovereignty. Without the <span class="canonical-name">FSF</span>, we'd be even more locked into proprietary and Non-Free ecosystems and wouldn't be able to have the freedom to use computers in the way that we take for granted right now.</p>
]]></content>
</entry>
</feed>
