I never wrote a single line of Scheme before. At first, I did not like the weird syntax, and the confusing, overly-verbose Guix's config (gnome-desktop-configuration
, gnome-desktop-service-type
, gdm-service-type
, etc). But it kind of makes sense now, and I'm kind of used to it.
If I had to be forgiving, I would ignore the syntactical sugar and the other goodies that Nix provides in their Nix options - in my personal opinion, the language design would make it easier to add them, just that there's a need for more contributors. Guile was actually way easier to grasp (I still can't write a single line of Guile, by the way), and I was able to configure my system really fast.
The language is pretty good. I did not like the JSON-like weird syntax provided by Nix, it never felt functional. But I hate the bracket stacking in Scheme, I would say - maybe I could bring them to the next line, but it would break the formatting convention that other Schemers prefer - I guess I'm more of a OCaml person, so that could be the reason.
What I also like about Guix is the reason I detest Nix - contamination of script files. In Nix, to generate automated expression files in bulk, you have to feed a text file, and then run the script to update that file, which is a pretty unfashionable way to automate the boring part. It also steers away from the uniformity of code-base language, and adds more complexity for maintainers - Guix does not suffer from that, as Guix can be a config language, as well as scripting language.
Guix is also really performant - Nix would struggle on the same device I'm on right now. The download speed is terrible for Guix, but most probably it could be because I'm on a 4GB RAM + 8GB swap laptop with a Core i3 6006U mobile processor, and a old, crappy WiFi adapter. Honestly, I would appreciate if there was an Asian substitute server.
Honestly, I am still not that satisfied with Guix and Nix, as I feel that they're not close to the ideal system I have in my mind. What I mean is that I don't accept some of the choices with respect to what I think constitutes as a functional system. I also think that Guile misses out on fancy stuff that modern languages can provide.