I get that this seems very intimating, but if you’ve ever used more than three programming languages in your life, I believe you won’t have much to learn.
I can mimic the syntax and I very roughly understand how the import system works.
But I don’t know Nix! Yet I haven’t had any trouble language wise over the last few years.
In my experience most of the “code” you write is package names and those can be copied from search.nixos.org.
In that sense I’m effectively using it as a markup language and I don’t think anyone has ever gotten discouraged by having to “learn” YAML, just so they can write a config file for some piece of software they want to use.
Something that I would take as discouragement is the state of the documentation. It has been improving to a usable level in some areas but other areas are heavily outdated or just plain missing.
My motivation for using NixOS is maintenance. I’ve been running 2-3 personal Linux computers for the last decade, with one of them being a server.
To get stuff like services working with each other you sometimes need to make small changes to the config files of some services.
The issue for me especially with the many services running on the server is coming back to a broken/misbehaving machine after 4+ months and now having to research what changes I made long ago and where those config files are buried.
Making the change and testing it would likely take less than 5 minutes if you had every detail you need fresh on your mind.
I simply don’t have the mental capacity to remember all that stuff after months of working on other things.
Especially if you’re coming back to something broken this is a really annoying position to be in.
You want the fix now but have to start by looking up docs and trying to figure out what past-self did to get you into this mess, or to find out what has changed since then.
At some point I had enough and was either going to teach myself some sort of personal changelog / documentation system, or learn a new declarative configuration system.
Huge respect for anyone who can keep all this info in their mind and to those that meticulously update their own documentation, but I lack the discipline to do so in the heat of battle and will easily miss things.
Since then any system that I will have to maintain myself has been using some form of declarative management.
It keeps all configuration accessible and organized in one place, so I don’t have to go digging for the correct file paths.
It self updates so that even when I go back and forth during testing I won’t miss updating my standalone docs.
And NixOS brings this to my whole system. No old programs lying around because you forgot to uninstall them and have now forgotten about it. Same thing with pinned package versions that then wreak havoc once they’re incompatible with the updated rest of the system.
It even configures my goto tools (shell, editors, etc) to my personal liking when I set up a new machine.
Its not the first declarative system and probably won’t be the last one I will use, but for now it really makes my life noticeably easier.
I’m not a programmer. My brain just doesn’t work that way. I wish it did. I’ve tried teaching myself Python, and I took a semester of Java. I understand pretty much zero.
I don’t understand why some people insist on recommending NixOS as a first Linux distro. It’s so far from the norm and beginner friendliness they must surely be joking.
I run NixOS on all my devices including servers, desktop & laptop.
I’m able to configure a service, container, package whatever really and have it run just the same on another system without worrying about dependencies, reconfiguring or copying dots.
There isn’t a worry about installing / removing something and having that package break my system. Even if I did break my install I can boot from a USB, pull my config down from my local git or a mirror and be back in what is essentially the same system.
The hardest part of a reinstall for me is setting up drives, but that too can be a part of a config.
NixOS is the only distro that stuck with me, I tried Proxmox / Ubuntu / Arch / Manjaro but none of those really clicked for what I wanted / needed from an OS.
The idea is that “you can’t break the system” and you have snapshots you can roll back to in case you do. Which is all well and fine. I think there’s a whole lot of xkcd 2501 going on. As a baseline I don’t even think many people who play games are very comfortable poking in ini config files, and you want them to write configs for their entire system? Don’t forget you shouldn’t blindly copy scripts from the internet without understanding them first as well!
“Not only is it necessary to learn the functional programming language to write the declarative config”
Holy shit haha! I’ve never actually looked into NixOS but this right here tells me it isn’t for me.
I get that this seems very intimating, but if you’ve ever used more than three programming languages in your life, I believe you won’t have much to learn.
I can mimic the syntax and I very roughly understand how the import system works. But I don’t know Nix! Yet I haven’t had any trouble language wise over the last few years.
In my experience most of the “code” you write is package names and those can be copied from search.nixos.org.
In that sense I’m effectively using it as a markup language and I don’t think anyone has ever gotten discouraged by having to “learn” YAML, just so they can write a config file for some piece of software they want to use.
Something that I would take as discouragement is the state of the documentation. It has been improving to a usable level in some areas but other areas are heavily outdated or just plain missing.
Used it then thought why everything is more difficult.
My motivation for using NixOS is maintenance. I’ve been running 2-3 personal Linux computers for the last decade, with one of them being a server.
To get stuff like services working with each other you sometimes need to make small changes to the config files of some services. The issue for me especially with the many services running on the server is coming back to a broken/misbehaving machine after 4+ months and now having to research what changes I made long ago and where those config files are buried.
Making the change and testing it would likely take less than 5 minutes if you had every detail you need fresh on your mind.
I simply don’t have the mental capacity to remember all that stuff after months of working on other things. Especially if you’re coming back to something broken this is a really annoying position to be in.
You want the fix now but have to start by looking up docs and trying to figure out what past-self did to get you into this mess, or to find out what has changed since then.
At some point I had enough and was either going to teach myself some sort of personal changelog / documentation system, or learn a new declarative configuration system.
Huge respect for anyone who can keep all this info in their mind and to those that meticulously update their own documentation, but I lack the discipline to do so in the heat of battle and will easily miss things.
Since then any system that I will have to maintain myself has been using some form of declarative management. It keeps all configuration accessible and organized in one place, so I don’t have to go digging for the correct file paths. It self updates so that even when I go back and forth during testing I won’t miss updating my standalone docs.
And NixOS brings this to my whole system. No old programs lying around because you forgot to uninstall them and have now forgotten about it. Same thing with pinned package versions that then wreak havoc once they’re incompatible with the updated rest of the system. It even configures my goto tools (shell, editors, etc) to my personal liking when I set up a new machine.
Its not the first declarative system and probably won’t be the last one I will use, but for now it really makes my life noticeably easier.
I’m not a programmer. My brain just doesn’t work that way. I wish it did. I’ve tried teaching myself Python, and I took a semester of Java. I understand pretty much zero.
I don’t understand why some people insist on recommending NixOS as a first Linux distro. It’s so far from the norm and beginner friendliness they must surely be joking.
I’ve been using Linux since 2007, and have tried many distros. I’m very happy with (and recommend) Linux Mint Debian Edition.
And everything is difficult in it. I don’t understand the advantage for a desktop of a declarative OS either.
I run NixOS on all my devices including servers, desktop & laptop.
I’m able to configure a service, container, package whatever really and have it run just the same on another system without worrying about dependencies, reconfiguring or copying dots.
There isn’t a worry about installing / removing something and having that package break my system. Even if I did break my install I can boot from a USB, pull my config down from my local git or a mirror and be back in what is essentially the same system.
The hardest part of a reinstall for me is setting up drives, but that too can be a part of a config.
NixOS is the only distro that stuck with me, I tried Proxmox / Ubuntu / Arch / Manjaro but none of those really clicked for what I wanted / needed from an OS.
The idea is that “you can’t break the system” and you have snapshots you can roll back to in case you do. Which is all well and fine. I think there’s a whole lot of xkcd 2501 going on. As a baseline I don’t even think many people who play games are very comfortable poking in ini config files, and you want them to write configs for their entire system? Don’t forget you shouldn’t blindly copy scripts from the internet without understanding them first as well!