3 ms·
One of strengths and at the same weaknesses of Nix is that it is not very opinionated. That means there are many ways of doing the same thing. I'm wondering how
by takeda 7y ago
One of strengths and at the same weaknesses of Nix is that it is not very opinionated. That means there are many ways of doing the same thing. I'm wondering how were you backporting a new package.
For example pgbouncer version that was used was a bit older than I wanted, I was easily able to update the derivation and also enable c-ares name resolution by overriding the derivation like this:
pgbouncer = pkgs.pgbouncer.overrideAttrs (oldAttrs: rec {
name = "pgbouncer-${version}";
version = "1.11.0";
src = pkgs.fetchurl {
url = "https://pgbouncer.github.io/downloads/files/${version}/${name}.tar.gz";
sha256 = "0w3y53kwnkcm9fmf28zbjvqk6ivfic5f2k3nflvca1i8iaj2z044";
};
buildInputs = with pkgs; oldAttrs.buildInputs ++ [ pkg-config c-ares ];
});
- socksy 7y agoI'm not even talking about backporting, rather updating to the latest version in NixOS unstable means running nixos-rebuild switch --upgrade... And this often seems to fail due to non-backwards compatible changes. Sure, it happens more on unstable, but the software in stable is often too far out of date or worse, broken (e.g. by the download link expiring). Updating the package is typically a means to an end—this month I had to upgrade emacs due to a melpa package update, and python due to a work script requiring 3.7.3—the last thing I want to be doing is maintaining my general system. Even writing an override feels a bit ridiculous (it's right there in the channel!). What I inevitably end up updating my nix-env channels and using nix-env -i to install the new package. This works most of the time, but the insidious thing is that I usually forget that I even have this dynamically installed package, and never update it. That is, until it breaks my system in some subtle way. So yeah, if something came out with all the benefits of NixOS (and I love the nix package manager, the safety it provides, and the pure functional declaration of all the dependency trees), but with the respect for not breaking backwards compatibility that you see in functional programming communities like Clojure, then I would be in love.