I’m not familiar with submitting anything & am not sure how approachable it is. Does it take a lot of effort on the part of whoever is submitting it?
If submissions are fairly easy (low effort), then this recommended way isn’t bad, at all (except the time it needs for the package to be eventually available).
However, if submissions are difficult & discouraging to accomplish, then that’d be a problem.
I’m actually currently in the process of comparing Arch to NixOS, mostly in terms of usability & compatibility. Have started using both recently, once again. Of course, I count in all the NixOS declarativeness into the equation.
Well, I set up a Kubernetes cluster on NixOS, to get into NixOS in an area where NixOS shines: reproducibility. Having a reproducible server declaration would be really awesome.
When I looked up the NixOS options, I have found, that it’s naturally nice to configure all the stuff through the Nix configuration. However, as always, the documentation was very scarce and I had to read the modules’ source code a lot, to get a grasp of the Kubernetes specific Nix options.
For example, I wasn’t able to find the definition of packages in the context of Kubernetes’ CNI options.
There are other options like this in the Kubernetes related modules.
Another problem was, that the most obvious CNI choice, i.e. flannel, has lots of options.
However, what if I use a different CNI?
Well, that was troublesome to wrap my head around. It took me a fairly high amount of hours for something, that would’ve otherwise taken me 15 minutes on a generic system.
I manually installed an unsupported CNI, by providing it with custom CLI options, which changed paths to binaries, etc.
However, even after this, there is still something not working well. One of the places which always get re-generated by NixOS on switching/re-building configuration obviously does not save a manually placed binary there and therefore I had to cp it there, as a workaround.
I don’t know of any way, which would implement the placement of the binary in the right place, without making a huge Nix module out of it, by hand.
Now, even if I would submit a request to support this CNI, would someone write a module for it or just make it work as a bare minimum?
And I’m lucky for the binary to work out of the box on NixOS, anyway.
So, this is the story behind the question about making something work on NixOS.
I doubt it would be so simple for this CNI example. How would I go about that?
https://search.nixos.org/options
I’m not familiar with the official terminology. I mean “NixOS option”, as in, any option, that already wraps an existing program into a module. Basically, when I use services.kubernetes.kubelet, this is a prepared NixOS option, which already wraps a major part of the Kubernetes Kubelet’s functionality in Nix.
Basically, someone took the time to create a Nix module for a third party app.
Still, all that said, the biggest issue with NixOS is and always has been the lack of documentation. I always have to guess, what anything means. Like for example, just look at the Kubernetes, Kubelet and related modules. At least 60% of the options there are unclear about their functionality.
Things get worse, when options are deprecated and I don’t even know why.
For example, services.kubernetes.kubelet.networkPlugin was just deprecated like two days ago. Why?
That’s a nice one. I wish the information about this would be disaplyed more prominently.