> The G-expression we installed on the remote machine didn't go alone. It went carrying along the htpasswd utility and all the other required dependencies. In total, this amounted to 407.9 MiB!
I get that many of these would be installed anyway, but this right here feels like it demonstrates much of the problem of modern software complexity. I like that there are tools like Guix to try and get a handle on that complexity though!
TIL that Guix is based on Nix. I always thought it's a completely separate implementation of the same paradigm until now. Would be interesting to see a comparison which parts/concepts of Nix are used by Guix and what it introduces on top! (Beyond surface-level facts like how many packages it has or that the CLI is different.)
It's pretty much a separate implementation. It reuses a version of the Nix daemon because Guix targets the same derivation format as Nix, but the whole machinery that produces derivation files is completely separate.
Guix compiles first class package definitions down to derivations, so while the idea of package management as a function is front and center in the Nix UI it is abstracted away in Guix, which instead builds up a tower of transformations from the Scheme DSL to Scheme builder scripts and derivations.
There are two things going on here: the shell script is replaced with a more verbose Guile script (this part isn't actually necessary); and the Guile script uses G-expressions to include deployment information.
G-expressions are not meant to replace shell scripts.
You could just as well use G-expressions with a shell script; the stringly typed shell script just doesn't feel nice when working with Scheme.
I think that the paper on G-expressions is very well written and thus a great job at motivating the implementation. You can find the paper here: https://inria.hal.science/hal-01580582/en
I get that many of these would be installed anyway, but this right here feels like it demonstrates much of the problem of modern software complexity. I like that there are tools like Guix to try and get a handle on that complexity though!