Hacking anything with GNU Guix
I had a couple people attempt this for the dev environment of <a href="https:&#x2F;&#x2F;www.oilshell.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.oilshell.org&#x2F;</a> with Nix, and it wasn&#x27;t entirely successful.  (Not Guix, but my understanding is that Guix would have the same issues)<p>As background, we&#x27;ve long had a set of evolving shell scripts that fetch and build dependencies at specific versions -- like bash&#x2F;dash&#x2F;zsh&#x2F;mksh&#x2F;busybox to test against, re2c to generate code, CommonMark, Python 3.10, MyPy with pip dependencies, and (bonus) R with CRAN dependencies.<p>I wrote about 2 problems here: <a href="https:&#x2F;&#x2F;lobste.rs&#x2F;s&#x2F;s5co2f&#x2F;where_contributors_have_problems_with#c_ndbezz" rel="nofollow">https:&#x2F;&#x2F;lobste.rs&#x2F;s&#x2F;s5co2f&#x2F;where_contributors_have_problems_...</a><p>1. OS X and libc, which is not really a problem since our existing scripts don&#x27;t solve it either.  It was just one motivation for Nix that didn&#x27;t quite work out.<p>2. The file system layout becomes different, and Oil&#x27;s shell tests rely on that.  So containers ended up being easier.  The whole build and test system runs in OCI containers under Docker and podman now, so it&#x27;s pretty reproducible and automated.<p>But I still think it would be nice if someone who actually knows Nix and Guix (unlike me) tries again.  The dependencies are more stable now than 2 years ago.<p>I think you have to write like 10 Nix or Guix expressions from scratch with the exact tarballs that we use.  (Otherwise the tests will break even more, because Oil&#x27;s tests are extremely detailed and find bugs in specific versions of specific shells.)<p>Right now we have a 134 line shell.nix that tries to reuse Oil&#x27;s scripts, but I think it doesn&#x27;t gibe with the way that Nix and Guix are meant to be used.  Probably the real solution would be more like 1000 lines from scratch?<p>I remember that Nix Flakes was what I thought Nix was going to be, but at the time it wasn&#x27;t ready.  I thought Nix was supposed to solve the &quot;it works on my machine&quot; problem but it actually doesn&#x27;t -- you still need a CI because it&#x27;s possible to write .nix expressions in ways that break the sandboxing (unlike Bazel where you always get it).<p>I had ran this by someone who knows Guix and my takeaway was that Guix is basically the same in that regard.<p>A key problem is that, at least for awhile, I want it to work in parallel with our existing system ... not have a &quot;big break&quot;.