@ieure what makes the package hosting easier? is it just that the packages themselves are easier to create or is there something about the hosting/repo too?
Why do I keep pushing this particular boulder up this particular hill? It comes down to a few things:
- I think packaging stuff for Guix is easier than other distros. At least, there's a huge package-to-contributor ratio I've never seen in other distros, and it has a ton of software for a relatively new (and very niche) distro. - All the packaging and system config is in Scheme, and I like Lisps. - The way you can create profiles of installed software obviates the need for language-specific version & environment manager tools. When the distro natively supports installing/running multiple versions of things side-by-side, you don't have to care about crap like rbenv, nvm, or pyenv. - It's very easy to host your own package repo. It's very difficult to host a Debian package repo.
There's a special thing for handling fonts, you basically need ~20 lines of boilerplate to fetch an archive with the .ttf files in, and this code does the rest.
Input Mono is gratis for personal use, but if you publish anything that uses it, you need to pay for a license. It's not freely redistributable.
Not freely redistributable shouldn't be a problem! Guix will download the fonts when someone requests an install, which isn't redistribution.
Except.
The hash of the .zip of the fonts is different every time you download it. I don't know why, but the actual .ttf files are ~6 bytes different in every download. Doesn't seem like enough data for it to be a fingerprint, but, maybe?
Guix has a strong focus on reproduceability, you have to provide the hash of any source material. Which you cannot do if the source material is different every download.
I asked for help, it seems like it's literally impossible to handle this, unless I download a copy and host it elsewhere, then point Guix at that and give it the hash.
Which is redistribution, which is against the license.
So I can either placate Guix by violating the license, or switch my preferred font.
Alright, so, I'm trying to get Guix into a comfortable, daily-driveable state. This is going to involve packaging some large things that aren't currently in Guix, like Librewolf, my preferred web browser.
I suspect that's going to be a lot.
I decided to start with something simple: my preferred text editor font, Input Mono.
Okay, I got some help from #nonguix on Libera, turns out, the System Crafters install image I was using pinned the nonguix channel to a specific commit, and that commit was either broken or had an implicit dependency on the stock guix channel which caused breakage.
Removed the pin and I was able to reconfigure the system. This took several hours, since it downloaded hundreds of megs of... something... and compiled the whole Linux kernel.
But, I have a caps lock key that works like control, which means I can type on this laptop without immediately becoming enraged.
I am not sure it should be so difficult to change one keyboard layout setting.
But, so, yeah. I can't change how one key on my keyboard works because some third-party software package is broken, even though that has literally nothing to do with the change I want to make.
The error I get when I run `guix pull` doesn't tell me anything helpful about what's wrong:
building /gnu/store/zlsavr3sd9wl8i9l9ps0hpk1j0wjkak6-nonguix.drv... |builder for `/gnu/store/zlsavr3sd9wl8i9l9ps0hpk1j0wjkak6-nonguix.drv' failed to produce output path `/gnu/store/sailxjc3lnd9rylm2x9795x0j0cgcgxl-nonguix' build of /gnu/store/zlsavr3sd9wl8i9l9ps0hpk1j0wjkak6-nonguix.drv failed View build log at '/var/log/guix/drvs/zl/savr3sd9wl8i9l9ps0hpk1j0wjkak6-nonguix.drv.gz'. cannot build derivation `/gnu/store/imiaxn32kiv9fdifqgajmm7ggpf8b100-profile.drv': 1 dependencies couldn't be built guix pull: error: build of `/gnu/store/imiaxn32kiv9fdifqgajmm7ggpf8b100-profile.drv' failed
Okay, so. I was able to log into the Guix install on this laptop, because I reset my password after logging into a virtual terminal as root, which I was allowed to do with no password whatsoever, despite the installer asking me for a root password.
First thing driving me up the wall: The caps lock key is acting as the caps lock key (wrong, bad) instead of the control key (pure, good), so I can't type anything without scrabbling at the keyboard like a helpless squirrel.
Changing this one setting requires reconfiguring the entire system. In case I changed something else completely different at the same time, I guess.
Reconfiguring the system requires running `guix pull`, so it knows about the nonguix channel that has the kernel that supports WiFi.
I can't pull because something in nonguix is broken. I have no idea what, or whether I could fix it if I did.
So I keep waiting a day or so and retrying `guix pull` in the hopes that someone has noticed that this is broken, and fixes it, and then I can configure my keyboard.
Oh, I see. The instructions for actually using the installer[1] -- which aren't mentioned in the repo containing the installer images[2], much less linked from it -- tells me that, during the last step of the install process, I have to switch to another virtual terminal and hand-edit the configuration. And if you don't do that, you get a probably-unusable install.
...it had WiFi during the install, but the installer installed Linux-Libre, so it has no WiFi after the install. Fixing that requires an internet connection.
I kinda get the appeal of having a fully isolated package manager for those weird applications where you can't pull it in from apt (I mean it very rarely happens to me but I get why people might want it) but I don't get why you'd replace your whole OS when you can get 95% of those benefits on debian anyway
@technomancy That's a great question. This is what I answer any time someone asks me a something I don't have a good answer for.
I think that something like the Guix/Nix model has a lot of interesting possibilities. Like: my current setup *works*, but is kind of a mess -- a customized Debian installer, thousands of lines of Ansible junk, a 100+mb dotfiles repo. Things are sort of reproduceable (I can set up another machine like my current one), but involve a *lot* of manual work to do. I like the idea of all that complexity being managed natively by one tool built into the OS.
I like the idea of having a strong system-level package manager (that is, more sophisticated than a Slackware-like "unzip this tarball in /" model) which can also cope with the various weirdware I use that don't justify a package anywhere else.
I like the idea of using Scheme for all my configuration.
I like the idea of interacting with the OS abstractions through Emacs (which you can do with emacs-guix).
It's genuinely nice to, when you need some software right now that you'll probably never use again, to run `guix shell name-of-package` and use it and close the shell and not think about it ever again / not have it hanging around the system.
I like the idea of never having to deal with nvm/rbenv/pyenv/virtualenvs ever again, because I can create a profile with the correct versions of everything I need. And if a different thing needs different versions, I can make a profile for that, too.
I like the idea of never having to resort to Flatpak/Snap/AppImage trash, because anything can be reasonably made into a native package.
Most other distros don't do *any* of these, much less all. NixOS is the only one that comes close (because Guix is based on it).
@ieure yeah, I get that, but I thought it was possible to use guix to install applications without making it your whole OS; does that not actually work?
@technomancy Right, so, you can definitely nitpick the individual things (and lots more, obviously), but it's not one of the things, it's really all of them together.
On the package side, I don't think there's really anything that compares. Example, I sometimes (but rarely) need to use Chrome or a Chrome-derived browser, for things like "somebody sent me a Google Meet invite and I don't have ten minutes brainspace to convince them it should work in my weird browser again today." I *never* want to open anything else in it, ever, and even having it installed risks something thinking it ought to open something with it.
Being able to install and run it, then bail from that shell and have it be gone is awesome as hell, and there's not an analogue of that in Debian -- you have to set up the package source and repo signing key, `apt update && apt -y install google-chrome-stable` and then remember to uninstall it afterwards. Just a whole bunch of ugh right there.
@ieure from reading your posts it seems like the good parts of guix are when you use it to install applications and the bad parts of guix are when you use it to manage system level stuff like wifi and keyboard layouts
doesn't `sudo apt install guix` get you the best of both worlds?
@technomancy I've thought about doing this, since it seems like a less steep hill to climb, and would help get acclimated to The Guix Way™ without having to shave so many yaks.
So I installed the official Debian package for Guix the other day, and ran `guix pull`, and it blew up, telling me I'd found a bug. This is literally the very first thing you'd want to do with a fresh guix.
It's rather moot, since I have the system bits of a Guix System install working acceptably now, and it's the rest of the stuff I need to deal with.
I still prefer the notion of having a unified approach to all software and dependencies, which I'm not going to get with a foreign distro approach. Still need that custom Debian installer and Ansible stuff to manage it. The Guix system configuration is actually quite nice now that it's set up -- much, much simpler than dealing with Ansible.
I looked into packaging a Matrix client, since that's another thing I use daily. It looks like it's going to be exceptionally difficult, since both the popular ones are webapps wrapped in Electron and almost none of the inevitable 10000 JS libs are in Guix already.
FluffyChat uses a proprietary binary-only framework and build tool, so that's never going to make into Guix proper.
Element uses yarn, which is open-source, but not packaged and seems challenging. Yarn docs recommend installing it via npm, which like, just.... sigh. Installing a package manager to install a package manager to install a library that does like "if (x > 0) { return true; }" is peak JavaScript brain.
I haven't been complaining about Guix lately, because I've mostly figured out how stuff works, or can figure it out when stuff comes up.
I submitted patches to add LibreWolf packages, which have been completely ignored, like most of the patches I've sent in. That's not great.
But I can just... drop that code into my own channel and use it. Or fork the official Guix repo and add it and run my whole system off that instead. So I am, and that's honestly pretty nice.
Broke my Guix config in a way that prevented X11 from starting. SSH'd into the box, ran `sudo guix system roll-back' and it gave me back the exact previous working setup.
I keep vacillating between "Guix rules, actually" and "what the fuck is this nonsense."
I'm in the latter place today, as I found that an important part of the Scheme code doesn't work unless the path to the process it's running in ends in "bin/guix". This means that when you use Emacs and Geiser to run Guile to hack on Guix packages, it can't use any packages from any channel other than the default one.
I have created a package for LibreWolf[1] which appears to more or less work. That's extremely cool.
For this to be daily-driveable, I still need:
A Matrix client. I looked at Fluffychat, but it depends on "Flutter," which is a proprietary/binary-only build tool/toolkit. This is probably a non-starter, not necessarily because I have objection to it being proprietery, but because it seems like pain-in-my-ass weirdware. So probably going to tackle Element instead -- it's what I normally use anyway.
A working autofs setup. A good chunk of my NAS gets exported as NFS, which I use autofs to manage. There's an autofs package, but no way to configure it, so I'll be tackling some kind of service to do that.
Some of my Emacs packages. These are stuck in code review. I might dump these into a personal channel in the meantime.
[1]: LibreWolf is a fork of Firefox with all the ill-advised Mozilla Corporation junk removed; it will never, ever show an ad for Mozilla VPN. https://librewolf.net/
I have 90% of my Emacs config ported to Guix Home and working well enough that I'm only setting my hair on fire a couple times an hour, instead of every 30 seconds.
Packaged the rest of my weirdware.
Packaged the Jellyfin MPV Shim, which is working well. Legit really nice experience here, had to package three deps as well, it all took less than an hour.
Haven't set up the channel properly yet, but, soon.
I have been told that I can solve my problem with these fonts by using something called a "computed origin," which is completely undocumented and (based on multiple responses saying "it's impossible to do this") not well-known.
This despite it being used for icecat, the least ridiculous browser Guix has packaged.
Okay, still Guixing over here. I'm making packages for my Emacs Weirdware, and it's honestly really delightful that five of the 19 things already have official Guix packages.
@ieure gotcha, makes sense; I guess I was confused between ement and matrix-client.el
it's a shame the e2ee stuff is so weird; last I looked into it there was only one working implementation other than the reference one, and it was super janky to install
(I've never used the e2ee features in matrix but I get the appeal)
@technomancy I have tried ement, I couldn't get it working reliably enough. There's also a newer matrix-client.el by the same author, which seems promising, but is alpha.
There's no elisp implementation of the overly complicated encryption stuff, so neither support end-to-end encrypted messages, which I need. You can get around it by standing up Pantalaimon, which is a native proxy that deals with the crypto stuff and exposes it as unencrypted messages to the clients that connect to it. I have never gotten this setup working, it's all very finicky.
@technomancy Yeah; I stood up Matrix more or less as an iMessage replacement when I dumped every Apple device. It's 99% for texting with my family and whatever friends are bent enough to agree to this. E2EE is table stakes for that IMO.