diff --git a/config.toml b/config.toml
index 68177db..01e2389 100644
--- a/config.toml
+++ b/config.toml
@@ -12,9 +12,9 @@ pygmentsUseClasses = true
[menu]
[[menu.main]]
- identifier = "info"
- name = "info"
- title = "info"
+ identifier = "--help"
+ name = "--help"
+ title = "--help"
url = "/info/"
weight = 20
diff --git a/content/info/index.md b/content/info/index.md
index f094293..f49b687 100644
--- a/content/info/index.md
+++ b/content/info/index.md
@@ -1,3 +1,5 @@
This is a place to document bits and bobs I've been up to that have interested me.
Expect linux and self-hosting tinkering, some novice programming, and maybe the occasional recipe.
I tend to be a fool so take anything written here with a pinch of salt :)
+
+- [rss HERE!!](../index.xml)
diff --git a/content/posts/nixos-remote-auto-static-site-deploy.md b/content/posts/nixos-remote-auto-static-site-deploy.md
new file mode 100644
index 0000000..582c18b
--- /dev/null
+++ b/content/posts/nixos-remote-auto-static-site-deploy.md
@@ -0,0 +1,115 @@
+---
+title: over-engineered (?) nixos blog deployment setup
+date: 2025-08-11
+tags:
+ - nixos
+draft: false
+---
+
+As is traditional with people hosting their own blog I'm going to do a post detailing EXACTLY how I'm hosting my blog.
+Down to the last dirty detail.
+I have nothing better to talk about.
+Here is a diagram I edited to illustrate (credit to xkcd I think?).
+
+
+
+I host my site on a hetzner vps running nixos.
+I also have a git repo where all the static files for my blog live.
+I had previously been manually rsyncing the website up to my vps from my laptop.
+Qute an easy, efficient solution; it worked well.
+But not very nixos; far too simple, not sufficiently over-engineered.
+So in true nixos fashion I decided I'd spend a couple of hours sorting the problem so I'd maybe save a minute once a year when I write a blog post.
+
+### Remote Rebuilds
+
+First, I'll show the fancy way to rebuild your remote nixos systems via ssh.
+In my case, this means I can rebuild my hetzner box from my laptop.
+You can read the wiki about it [here](https://wiki.nixos.org/wiki/Nixos-rebuild#Deploying_on_other_machines).
+
+This sets up ssh with key-based authentication and lets our local user in.
+This config belongs on the remote machine.
+
+```nix
+users.users.blog-king.openssh.authorizedKeys.keys = [
+ # ssh public key on computer you're deploying from
+ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPzFa1hmmmmmPL5HvJZhXVEaWiZIMi34oR6AOcaaaaaaa"
+];
+
+nix.settings.trusted-users = [ "blog-king" ];
+
+# ssh daemon
+services.openssh = {
+ enable = true;
+ openFirewall = true;
+ settings = {
+ PasswordAuthentication = false;
+ PermitRootLogin = "no";
+ };
+};
+
+```
+
+Once you have this going on your remote machine (in my case the hetzner vps) you should be able to rebuild the remote machine with `nixos-rebuild --target-host blog-king@remote-ip-here --ask-sudo-password switch`.
+The `--ask-sudo-password` is not required if you ssh in as root though that would be a touch gauche.
+
+### Caddy
+
+You can do this with whatever your preferred webserver is.
+I am a caddy stan.
+This opens the necessary ports in the firewall and sets up caddy in file server mode pointing at `/etc/blog`.
+
+```nix
+networking.firewall.allowedTCPPorts = [
+ 80
+ 443
+];
+
+services.caddy = {
+ enable = true;
+ extraConfig = ''
+ blog.example.org {
+ root * /etc/blog
+ file_server
+ }
+ '';
+};
+```
+
+### Getting the files from git
+
+We have a web server pointing at `/etc/blog`.
+The last piece of the puzzle is to get the static files from our git repo and spit them out in that directory.
+
+I'm using the `fetchFromGitea` helper here which works for gitea and forgejo instances.
+The `fetchFromGitHub` helper would look very similar.
+
+You can get the `rev` and `sha256` of the commit using `nix-prefetch-git`.
+
+Also note the little `/public` at the end of the `source` string.
+That's the directory of the git repo that the website source lives.
+
+```nix
+environment.etc."blog" = {
+ enable = true;
+ target = "blog";
+ source = "${
+ pkgs.fetchFromGitea {
+ domain = "git.example.org";
+ owner = "james";
+ repo = "blog";
+ rev = "32d81f01388c88a259eed2ba52f4545dbcb1eb07";
+ sha256 = "173g99dj8y4sw1v7f1s5f7zgcrrlr6dly9n6ysr2i4jg095lkxw8";
+ }
+ }/public";
+ user = "caddy";
+ group = "caddy";
+};
+```
+
+So now with all that setup the blog post work flow is:
+
+- Commit rebuilt website to repo
+- Update the `rev` and `sha256` to the new commit (this is annoying and I'm trying to work out a good way to automate it)
+- Rebuild vps from laptop
+
+Not necessarily faster than the old rsync method but it's pretty damn declarative, that's for sure.
diff --git a/public/categories/index.html b/public/categories/index.html
index 7da7204..2665ac9 100644
--- a/public/categories/index.html
+++ b/public/categories/index.html
@@ -16,7 +16,7 @@
@@ -27,7 +27,7 @@