Those are all (IMO completely fair) assessments that can be distilled down to four:
nix is a subset of json. If that’s a “hard” language, I don’t know what to tell people. Try GUIX with scheme?
many of these points can be distilled to “nix’s documentation is notoriously hard/bad for beginners”
most power users use flakes but the community still doesn’t officially accept them (herding cats) even though they are ubiquitous far more sane, standardized way to do many of the things this article spends paragraphs talking about.
NixOS search exists so I’m not sure why it’s considered “hard to find packages”
The title and objective of the article is about managing dependencies of scripts. Author spends many lines talking about “installing” a dependency but that advice falls apart the first time one of those dependencies even slightly changes. This cannot happen with Nix since you’d have to update the lock. That alone is the difference between 100% deterministic to “it doesn’t work on my machine because my package manager serves up X version of this package installed instead of Y in this specific release which has totally different, incompatible commands.” That NEVER happens to me because I have the dependencies LOCKED with nix.
That is quite literally what nix was built to do; and of course they don’t mention nix which is why I’m here mentioning it. IMO, Nix is incredibly pertinent to exactly this article.
nix is a subset of json. If that’s a “hard” language, I don’t know what to tell people. Try GUIX with scheme?
This ignores how modules and flakes work. You often have to write function expressions, not just pure “JSON”, and it’s often unclear what the function parameters are supposed to be (at least for a beginner).
NixOS search exists so I’m not sure why it’s considered “hard to find packages”
The search is great and includes a ton of stuff, but there’s a lot that’s hard to install through it. For example, how do you install an application through Flatpak? How do you install extensions for Firefox or vscodium? How do you install a specific version of an application on an older nixpkgs commit while still installing the current version of other programs through a flake? (I’m guessing through multiple nixpkgs inputs?) How do you install something not in nixpkgs? (A custom derivation, but it’s not easy to build one if you’re a beginner or don’t understand what the program needs during build.)
These are all things that can be done, but there’s really no specific documentation to help with it.
What Nix really needs is better documentation and a commitment to (or against) flakes. Once it reaches that point, I think I’d consider it mature enough to recommend. I’ve definitely brought it up at work as an alternative to devcontainers, but it’s a hard sell for a lot of people because it’s so much harder to learn. Personally I use a shared HM config across all my machines, and it’s awesome, but I don’t know anyone else personally who has been able to figure it out.
Well said. I’m glad people are challenging my json characterization. I deserve the flack but perhaps it was just a sensationalist headline to get some discussion going. It worked. ;)
Thanks for the valuable anecdotal evidence. You do speak the truth. I’ve settled on the fact that the community will never agree to adopt flakes.
Personally, I have an opinionated stack that is, at this point, self documenting. I maintain a strict style where I add assertions to most things that nix won’t be able to prove conclusively with just a build and cheaper checks that I run before actually building any real derivations. As I said elsewhere, Nix feels like the revolutionary precursor to a sea change in dependency management. But it’s just that: an imperfect technology with enough great ideas for me to adopt it wholesale and use fixing and finding ways around the warts as a way to give back to this open source community.
I suggest you read everything I write as if I am wearing a slight smirk.
I can’t help but lament that it (and its cool nerdy brother GUIX, other projects that forked or reimagined Nix, or even programming languages that were built around that “Haskell but hAsH eVeRyThInG” ideal that Unison embodies) will someday be known as the deterministic precursor to whatever effectively supplants the FHS and Docker blight in one fell swoop.
A machine-independent, deterministic closure that I can spin up in one command is the holy grail, IMO…and it’s pretty achievable even today with the aforementioned tech.
People around here love to do anything in their power to achieve the exact properties of using Nix using ANYTHING other than Nix.
And I don’t think its a bad thing. Otherwise we become too dependent on one platform / solution / developers. I would also like to have some Nix superpowers, without relying on Nix. However I don’t know what this post has anything to do with Nix.
Good point. There’s zero danger of that though. The overused dependency in most everyone’s stack is actually Docker. If anything, Nix is a better way to lock/archive state for future runs.
Nix might be the better concept overall, but its a specific concept that is not available everywhere. Docker on the other hand can be installed and used on any distribution, and removed too. Once you rely on Nix and its system, you can’t just remove it, its your lifestyle now.
That’s silly. There’s a lot you can say about nix but you clearly don’t know much about it if you think it can’t be used across many platforms.
You sure about that?
https://github.com/nix-community/nixos-anywhere
You understand that saying something does not always mean “literal”. Who the fuck think that when I say you cannot remove it, that I would mean it literally? I said its becoming part of your lifestyle. Think about it and stop being a little child with the replies. Nobody is gaslighting you, in fact you are gaslighting me or you are incredible stupid at understanding other people.
So with those replies of you its clear that you are toxic and this is what you get for. Have a nice day.
You’re the only one to engage in name calling and swearing here. I think it’s you that needs to take a deep breath and calm down. How is it toxic to correct someone spreading misinformation? Should I have just let you say tacitly untrue things without challenging them lest I be labeled toxic?
Why would saying you can’t remove it NOT mean you can’t remove it? I don’t know what you’re on about now but I’ll just leave you to start frothing at the mouth and talking yourself in circles over someone making a short observation that you thought it necessary to refute despite demonstrating no knowledge whatsoever of the thing you attempt to refute. Good day. Blocked with extreme prejudice.
Ps. You got me. I want everyone to have more reliable, natively running software and I want the community to stop wasting time talking about the solved issues of dependency management because I ::checks notes:: am toxic.
People around here love to try to do anything in their power to achieve the exact properties of using Nix using ANYTHING other than Nix.
Mirroring the other comment, but this post really has nothing to do with Nix, so I have no clue where this comment came from.
But anyway, I think Nix has a few things that turn people away:
nix-shell?nix-env? Just looking at setting up a shell, you havenix-shell,nix shell,nix develop, and possibly so many othersshell.nixor equivalent)Nix is awesome, of course, but it’s far from being the right tool for everyone.
Those are all (IMO completely fair) assessments that can be distilled down to four:
The title and objective of the article is about managing dependencies of scripts. Author spends many lines talking about “installing” a dependency but that advice falls apart the first time one of those dependencies even slightly changes. This cannot happen with Nix since you’d have to update the lock. That alone is the difference between 100% deterministic to “it doesn’t work on my machine because my package manager serves up X version of this package installed instead of Y in this specific release which has totally different, incompatible commands.” That NEVER happens to me because I have the dependencies LOCKED with nix.
That is quite literally what nix was built to do; and of course they don’t mention nix which is why I’m here mentioning it. IMO, Nix is incredibly pertinent to exactly this article.
This ignores how modules and flakes work. You often have to write function expressions, not just pure “JSON”, and it’s often unclear what the function parameters are supposed to be (at least for a beginner).
The search is great and includes a ton of stuff, but there’s a lot that’s hard to install through it. For example, how do you install an application through Flatpak? How do you install extensions for Firefox or vscodium? How do you install a specific version of an application on an older nixpkgs commit while still installing the current version of other programs through a flake? (I’m guessing through multiple nixpkgs inputs?) How do you install something not in nixpkgs? (A custom derivation, but it’s not easy to build one if you’re a beginner or don’t understand what the program needs during build.)
These are all things that can be done, but there’s really no specific documentation to help with it.
What Nix really needs is better documentation and a commitment to (or against) flakes. Once it reaches that point, I think I’d consider it mature enough to recommend. I’ve definitely brought it up at work as an alternative to devcontainers, but it’s a hard sell for a lot of people because it’s so much harder to learn. Personally I use a shared HM config across all my machines, and it’s awesome, but I don’t know anyone else personally who has been able to figure it out.
Well said. I’m glad people are challenging my json characterization. I deserve the flack but perhaps it was just a sensationalist headline to get some discussion going. It worked. ;)
Thanks for the valuable anecdotal evidence. You do speak the truth. I’ve settled on the fact that the community will never agree to adopt flakes.
Personally, I have an opinionated stack that is, at this point, self documenting. I maintain a strict style where I add assertions to most things that nix won’t be able to prove conclusively with just a build and cheaper checks that I run before actually building any real derivations. As I said elsewhere, Nix feels like the revolutionary precursor to a sea change in dependency management. But it’s just that: an imperfect technology with enough great ideas for me to adopt it wholesale and use fixing and finding ways around the warts as a way to give back to this open source community.
I love nix but “subset of json” is an absolutely insane thing to say
True!
I suggest you read everything I write as if I am wearing a slight smirk.
I can’t help but lament that it (and its cool nerdy brother GUIX, other projects that forked or reimagined Nix, or even programming languages that were built around that “Haskell but hAsH eVeRyThInG” ideal that Unison embodies) will someday be known as the deterministic precursor to whatever effectively supplants the FHS and Docker blight in one fell swoop.
A machine-independent, deterministic closure that I can spin up in one command is the holy grail, IMO…and it’s pretty achievable even today with the aforementioned tech.
But, IMO content-addressed and dynamic-derivations bring the nix community to that ideal that Eelco Dolstra envisioned all those years back for now.
And I don’t think its a bad thing. Otherwise we become too dependent on one platform / solution / developers. I would also like to have some Nix superpowers, without relying on Nix. However I don’t know what this post has anything to do with Nix.
Good point. There’s zero danger of that though. The overused dependency in most everyone’s stack is actually Docker. If anything, Nix is a better way to lock/archive state for future runs.
Nix might be the better concept overall, but its a specific concept that is not available everywhere. Docker on the other hand can be installed and used on any distribution, and removed too. Once you rely on Nix and its system, you can’t just remove it, its your lifestyle now.
That’s silly. There’s a lot you can say about nix but you clearly don’t know much about it if you think it can’t be used across many platforms.
You sure about that? https://github.com/nix-community/nixos-anywhere
https://dev.to/jajera/using-nix-on-windows-the-right-way-14ki
Also, you can’t remove Nix? Are you sure? You seem to not know anything at all about Nix but are just parroting various untrue things about it.
We are not talking about the package manager.
I don’t think you understood what I said.
We literally are talking about the package manager.
I understood very well. Maybe you don’t understand what you said.
Great job gaslighting me:
Dude whats your problem now? Take a deep breath.
You understand that saying something does not always mean “literal”. Who the fuck think that when I say you cannot remove it, that I would mean it literally? I said its becoming part of your lifestyle. Think about it and stop being a little child with the replies. Nobody is gaslighting you, in fact you are gaslighting me or you are incredible stupid at understanding other people.
So with those replies of you its clear that you are toxic and this is what you get for. Have a nice day.
You’re the only one to engage in name calling and swearing here. I think it’s you that needs to take a deep breath and calm down. How is it toxic to correct someone spreading misinformation? Should I have just let you say tacitly untrue things without challenging them lest I be labeled toxic?
Why would saying you can’t remove it NOT mean you can’t remove it? I don’t know what you’re on about now but I’ll just leave you to start frothing at the mouth and talking yourself in circles over someone making a short observation that you thought it necessary to refute despite demonstrating no knowledge whatsoever of the thing you attempt to refute. Good day. Blocked with extreme prejudice.
Ps. You got me. I want everyone to have more reliable, natively running software and I want the community to stop wasting time talking about the solved issues of dependency management because I ::checks notes:: am toxic.