I think one could argue this but it’s immaterial. My point remains the same. The lack of a universal installation method makes deployment expensive on Linux, and confusing for users.
If you’re fine with an executable just writing stuff to your system, then .sh is Linux’ universal installer format.
It’s true there are degrees of backwards compatibility here, but Windows is king
I agree, Microsoft has invested a lot into backwards compatibility and some nifty tricks to deal with DLL hell which was a huge issue in the past and as a result, provide the best backwards compatibility, as long as you stay on x86-64. Nowadays, each .exe basically sees its own sets of dlls in the filesystem. I agree it’s best there. My point was rather that it’s not as bad on Linux as people make it out to be if the application was packaged correctly. Going forward, I think stuff like Valve’s Linux Runtime can provide compatibility.
Good luck on the journey! What I meant is that over time, you’ll realize that what you did was probably not the most elegant was to do something, at least that’s my experience with my config. Like, I started with a flake with an explicit config for each machine (basically multiple nixosConfigurations) and then turned it into a lib with functions to turn a set of hosts from json into an attribute set (kind of a simple inventory done). My last efforts that are still ongoing (cough) are splitting my NixOS modules off into a separate flake using flake-parts.
I do understand you meant having the stuff that your need work, I just wanted to hint that the language is very powerful and as such, most configurations have room for improvement, as in learning to do things more efficient or do things that weren’t possible before.