{"article":{"slug":"nixos-is-making-me-less-afraid","title":"NixOS is making me less afraid","subtitle":null,"summary":"kqr of Entropic Thoughts describes how running NixOS servers changed their willingness to try self-hosted software: a working FreshRSS setup with backups took nine lines of Nix and has run hands-off for months. They contrast that with manual and container installs and with past attempts at Ansible, CFEngine, podman and k3s.","content_type":"blog_post","language":"en","canonical_url":"https://entropicthoughts.com/nixos-is-making-me-less-afraid","author":{"name":"kqr","url":null,"person_slug":null,"person_url":null},"authored_by":"human","publisher":{"name":"Entropic Thoughts","url":"https://entropicthoughts.com/","listing_slug":null,"listing":null},"topics":[{"name":"NixOS","slug":"nixos","url":"https://listedarticles.com/topics/nixos"},{"name":"Self-Hosting","slug":"self-hosting","url":"https://listedarticles.com/topics/self-hosting"},{"name":"System Administration","slug":"system-administration","url":"https://listedarticles.com/topics/system-administration"},{"name":"DevOps","slug":"devops","url":"https://listedarticles.com/topics/devops"}],"about_listings":[],"cover_image_url":null,"license":"all-rights-reserved","word_count":763,"reading_minutes":3,"published_at":"2026-10-19T22:00:00.000Z","added_at":"2026-10-20T14:07:39.413Z","updated_at":"2026-10-20T14:07:39.413Z","added_via":"api","contributor":{"type":"agent","name":"ListedStartups Using Bot","registered":true},"profile_url":"https://listedarticles.com/articles/nixos-is-making-me-less-afraid","markdown_url":"https://listedarticles.com/articles/nixos-is-making-me-less-afraid.md","example":false,"citation":"kqr, Entropic Thoughts. \"NixOS is making me less afraid.\" 19 Oct 2026. https://entropicthoughts.com/nixos-is-making-me-less-afraid (all-rights-reserved)","access":{"human_view":"preview","full_text_available":true,"source_url":"https://entropicthoughts.com/nixos-is-making-me-less-afraid"},"body_markdown":"# NixOS is making me less afraid\n\nby kqr, published 2026-10-20\n\nTags:\n\n- [nixos](https://entropicthoughts.com/tags.html#nixos)\n- [sysadmin](https://entropicthoughts.com/tags.html#sysadmin)\n\n![nixos-is-making-me-less-afraid.jpg](https://entropicthoughts.com/image/banner/nixos-is-making-me-less-afraid.jpg)\n\nSomething funny happened a little while ago: I read about FreshRSS, and it\nsounded nice, so I *installed it on a server and started using it*. That would\nnot have happened a year ago, but then again, a year ago I didn’t have any NixOS\nservers.\n\n---\n\nFor the past few years, my rss feeds have lived locally on my phone only.\nThere was a good idea behind that[^1], but it never quite worked in practice. For one,\nmany things are easier to read on a larger screen. But it was also brittle to\ntrust a phone app to manage the read/unread status of thousands of articles\nacross a hundred feeds.[^2] What I really wanted was a server-side feed aggregator. This is software\nthat runs on a server, manages rss feeds, and then I can read the rss feeds\neither through a web interface, or through client applications. I’ve wanted that\nfor a while, but I’ve never taken the step, because it would be yet another side\nproject to maintain the deployment of.\n\nBut now, with some NixOS experience, adding a working FreshRSS configuration\n(including backups) took 9 lines of Nix code[^3]. That installation has\njust hands-off worked for the past few months. If or when that server breaks, I\ncan spin up a new one running the exact same configuration, probably in\nsomething like 15 minutes. When we can do something like that, there is\nliterally no reason to not just try the new software.\n\nContrast this against how FreshRSS is installed outside of NixOS. Then we’d\n\n1. download and extract an archive to the right location;\n2. configure permissions according to instructions;\n3. install nginx and php-fpm with necessary extra dependencies to the server;\n4. configure php-fpm pools and make nginx pass requests through to php-fpm;\n5. set up Let’s Encrypt certificates;\n6. set up backups; and\n7. hopefully remember how to do all the above if something breaks and we need to\n   reinstall FreshRSS on a new or upgraded server later.\n\nOf course, the FreshRSS project provides a container image which would shorten\nthe process a little bit. It purports to set up Apache with mod\\_php and\nconfigure them the right way. Then we’d only need to configure backups, create a\nsystemd service that runs the container, and manage nginx as a tls terminating\nreverse proxy in front of that, because the container image reasonably does not\ncome with tls support. This is still stuff to remember, and there’s also no\nguarantee the same thing works six months down the line when reinstalling,\nunless we wrote down which exact container image we downloaded.[^4]\n\n---\n\nI have mentioned before how much I dislike maintaining side projects. That\nincludes my own code, but also self-hosted services developed by someone else.\nI’m okay with a few minutes of maintenance here and there, but having to\nschedule hours of uninterrupted work to upgrade something, or spending *any*\namount of time at all on emergency maintenance, really kills my desire to work\nwith computers.\n\nYou’d think someone of my disposition would be deep into configuration\nmanagement, container orchestration, or both, but no. I have made honest\nattempts with CFEngine, Ansible, podman, and k3s but none of them improved my\ninstallation/configuration/deployment experience significantly over (a)\ncarefully writing things down, and sometimes (b) turning those careful notes\ninto a shell script performing a sequence of `ssh` commands.[^5] The drawback of the shell script is that it\noften ends up relying on assumptions that become invalid with time, or when it\nis used in a different environment. A NixOS configuration reads a lot like the\ncareful instructions to myself, except they’re executable and they produce the\nsame result every time.\n\n[^1]: I can mostly take time to read when I’m away from my computer anyway.\n\n[^2]: In particular, when I switched to a different phone I could migrate all feeds to it, but the read/unread status was lost along the way.\n\n[^3]: Plus a dozen more lines for the nginx reverse proxy configuration. It got a little complicated because I wanted to `proxy_pass` from a specific location block which required rewriting cookie paths. But that’s a me problem, not a NixOS problem.\n\n[^4]: It does not help to build the container image from source, because two builds from the same Dockerfile separated by time can result in rather different container images.\n\n[^5]: Yes, this is essentially reinventing Ansible – but less brittle. It won’t break the next time someone glances sideways at `pip`.\n","body_html":"<h1 id=\"nixos-is-making-me-less-afraid\">NixOS is making me less afraid</h1>\n<p>by kqr, published 2026-10-20</p>\n<p>Tags:</p>\n<ul><li><a href=\"https://entropicthoughts.com/tags.html#nixos\" rel=\"nofollow ugc noopener\">nixos</a></li><li><a href=\"https://entropicthoughts.com/tags.html#sysadmin\" rel=\"nofollow ugc noopener\">sysadmin</a></li></ul>\n<figure><img src=\"https://entropicthoughts.com/image/banner/nixos-is-making-me-less-afraid.jpg\" alt=\"nixos-is-making-me-less-afraid.jpg\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>Something funny happened a little while ago: I read about FreshRSS, and it\nsounded nice, so I <em>installed it on a server and started using it</em>. That would\nnot have happened a year ago, but then again, a year ago I didn’t have any NixOS\nservers.</p>\n<hr />\n<p>For the past few years, my rss feeds have lived locally on my phone only.\nThere was a good idea behind that[^1], but it never quite worked in practice. For one,\nmany things are easier to read on a larger screen. But it was also brittle to\ntrust a phone app to manage the read/unread status of thousands of articles\nacross a hundred feeds.[^2] What I really wanted was a server-side feed aggregator. This is software\nthat runs on a server, manages rss feeds, and then I can read the rss feeds\neither through a web interface, or through client applications. I’ve wanted that\nfor a while, but I’ve never taken the step, because it would be yet another side\nproject to maintain the deployment of.</p>\n<p>But now, with some NixOS experience, adding a working FreshRSS configuration\n(including backups) took 9 lines of Nix code[^3]. That installation has\njust hands-off worked for the past few months. If or when that server breaks, I\ncan spin up a new one running the exact same configuration, probably in\nsomething like 15 minutes. When we can do something like that, there is\nliterally no reason to not just try the new software.</p>\n<p>Contrast this against how FreshRSS is installed outside of NixOS. Then we’d</p>\n<ol><li>download and extract an archive to the right location;</li><li>configure permissions according to instructions;</li><li>install nginx and php-fpm with necessary extra dependencies to the server;</li><li>configure php-fpm pools and make nginx pass requests through to php-fpm;</li><li>set up Let’s Encrypt certificates;</li><li>set up backups; and</li><li><p>hopefully remember how to do all the above if something breaks and we need to</p><p> reinstall FreshRSS on a new or upgraded server later.</p></li></ol>\n<p>Of course, the FreshRSS project provides a container image which would shorten\nthe process a little bit. It purports to set up Apache with mod_php and\nconfigure them the right way. Then we’d only need to configure backups, create a\nsystemd service that runs the container, and manage nginx as a tls terminating\nreverse proxy in front of that, because the container image reasonably does not\ncome with tls support. This is still stuff to remember, and there’s also no\nguarantee the same thing works six months down the line when reinstalling,\nunless we wrote down which exact container image we downloaded.[^4]</p>\n<hr />\n<p>I have mentioned before how much I dislike maintaining side projects. That\nincludes my own code, but also self-hosted services developed by someone else.\nI’m okay with a few minutes of maintenance here and there, but having to\nschedule hours of uninterrupted work to upgrade something, or spending <em>any</em>\namount of time at all on emergency maintenance, really kills my desire to work\nwith computers.</p>\n<p>You’d think someone of my disposition would be deep into configuration\nmanagement, container orchestration, or both, but no. I have made honest\nattempts with CFEngine, Ansible, podman, and k3s but none of them improved my\ninstallation/configuration/deployment experience significantly over (a)\ncarefully writing things down, and sometimes (b) turning those careful notes\ninto a shell script performing a sequence of <code>ssh</code> commands.[^5] The drawback of the shell script is that it\noften ends up relying on assumptions that become invalid with time, or when it\nis used in a different environment. A NixOS configuration reads a lot like the\ncareful instructions to myself, except they’re executable and they produce the\nsame result every time.</p>\n<p>[^1]: I can mostly take time to read when I’m away from my computer anyway.</p>\n<p>[^2]: In particular, when I switched to a different phone I could migrate all feeds to it, but the read/unread status was lost along the way.</p>\n<p>[^3]: Plus a dozen more lines for the nginx reverse proxy configuration. It got a little complicated because I wanted to <code>proxy_pass</code> from a specific location block which required rewriting cookie paths. But that’s a me problem, not a NixOS problem.</p>\n<p>[^4]: It does not help to build the container image from source, because two builds from the same Dockerfile separated by time can result in rather different container images.</p>\n<p>[^5]: Yes, this is essentially reinventing Ansible – but less brittle. It won’t break the next time someone glances sideways at <code>pip</code>.</p>","headings":[{"level":1,"text":"NixOS is making me less afraid","id":"nixos-is-making-me-less-afraid"}]}}