this post was submitted on 26 Nov 2024
47 points (100.0% liked)

Nix / NixOS

1819 readers
1 users here now

Main links

Videos

founded 2 years ago
MODERATORS
 

I just upgraded my NixOS machine after switching to nixos-unstable-small because I think unstable will take some time to update as getting 24.11 out has the highest priority.

Anyhow, two of my packages stopped me from applying a new configuration, as some packages have been changed when reorganizing into pkgs/by-name. I fixed it and wanted to share as this will hit others running unstable with these packages as soon as hydra catches up.

nerdfonts (now nerd-fonts)

Package was renamed, which it will state on evaluation; individual fonts are now part of the nerd-fonts attribute. I had Source Code Pro in there, there was some kind of mapping, which looked kind of like in https://wiki.nixos.org/wiki/Fonts#Installing_specific_fonts_from_nerdfonts – the new way is now to just use nerd-fonts.sauce-code-pro directly, you can probably do something like ++ with nerd-fonts; [ sauce-code-pro other-fonts ] to add multiple nerd-fonts to your fonts list, but I haven't tested this.

RetroArch

Until now, cores were specified as in https://wiki.nixos.org/wiki/RetroArch, however override doesn't seem to work anymore. There's now the withCores attribute / function that expects a function that returns a list. The easiest way I found to just specify a fixed list of cores was (retroarch.withCores (_: with libretro; [ snes9x mupen64plus fbneo flycast ])). Maybe other options are easier / cleaner.

Word of warning on compiling nixos-unstable-small

There are currently a lot of packages to be built if you change into that channel (I'm using flakes, but you get my point). Due to the default value of auto for nix.settings.max-jobs, this meant nix tried to build 24 derivations at the same time. This is fine if these are just downloaded from hydra, but if you try to build 24 big derivations at the same time, each trying to use 24 threads because nix.settings.cores is also 0 by default, which means all threads, build processes quickly ate all of my 32GB of RAM so that the OOM killer had to intervene, however often too late with my system dying. I recommend to set nix.settings.max-jobs to something more reasonable before attempting this (I used 1).

top 11 comments
sorted by: hot top controversial new old
[–] [email protected] 11 points 3 weeks ago (1 children)

First of all, thank you for the informative post. I have been using nixos unstable for some time now but I have never heard of unstable-small, could you give a brief explanation?

p.s: The new changes to the nerdfonts packages are really useful for me I'm glad to known beforehand.

[–] [email protected] 11 points 3 weeks ago* (last edited 3 weeks ago) (1 children)

nixos-unstable{,-small} are both rolling NixOS channels. The difference between them are the requirements for updates. Both need a specific set of packages to build successful and pass the tests on hydra, the central build server. The jobset for nixos-unstable is https://hydra.nixos.org/jobset/nixos/trunk-combined if I'm not mistaken; nixos-unstable-small is https://hydra.nixos.org/jobset/nixos/unstable-small. Small, as the name implies, has a smaller jobset.

That's also the reason I had to rebuild so many packages: while unstable provides most (I think all redistributable ones), nixos-unstable-small only builds a subset of packages like the kernel, coreutils etc (I don't actually know what constitutes it exactly); and the packages it didn't build, you can't download, which means if you have others installed, you need to build them yourself. It happen automatically, NixOS is a source-based distribution after all and binary packages are just substitutions, but this was a bit of a pitfall.

Edit: By the way, to get the new names of the fonts I did something like this:

$ nix repl
nix-repl> :l <nixpkgs>
nix-repl> nerd-fonts.

Don't hit enter after the dot, but rather press TAB to make the REPL show you the available packages inside that set. The nix-repl> doesn't need to be entered, just signifies that this is no longer in your normal shell, but inside the REPL.

[–] [email protected] 3 points 3 weeks ago (1 children)

Oh wow, thank you for the detailed explanation. For me using the usual nixos-unstable makes much more sense as I don't need the most up to date packages as soon as they are released, and I am more than willing to wait for the hydra central server to compile the packages and for me to just download the cached binaries(my computer is not very fast, honestly). I did not think about using nix repl to get the new nerd-fonts package names, but the ones I was using apparently had no changes naming-wise, so I had no problems.

[–] [email protected] 3 points 3 weeks ago

You will only see the changes after your <nixpkgs> has been updated (which for you is still the nixpkgs state of a week ago), so not right now. Or maybe this option was always there? I don't know and I'm tired. Anyhow, when unstable gets updated and your evaluation complains not finding the package, you know where to look ;)

[–] [email protected] 3 points 3 weeks ago* (last edited 3 weeks ago) (2 children)

I'm surprised that they renamed a package without adding an alias. Unless it was already an alias that had been around for a while, or maybe you have aliases disabled?

[–] [email protected] 2 points 3 weeks ago

No, it doesn't have an alias. From https://github.com/NixOS/nixpkgs/blob/nixos-unstable-small/pkgs/top-level/aliases.nix#L855

nerdfonts = throw "nerdfonts has been separated into individual font packages under the namespace nerd-fonts"; # Added 2024-11-09

It would also only make limited sense because the package definition has changed so that aliasing nerdfonts to nerd-fonts would still break if you chose individual fonts.

[–] [email protected] 1 points 3 weeks ago (1 children)

Aliasing seems to already be out of hand, maybe it's for the best we feel the pain.

[–] [email protected] 1 points 3 weeks ago (1 children)

If I understand correctly there's not much pain, just adding one character

Better than the alias causing an issue or getting g removed later down the line

[–] [email protected] 2 points 3 weeks ago* (last edited 2 weeks ago) (1 children)

It's not only adding one character, which is also probably why this doesn't have a proper alias. Before, it was a single package providing multiple fonts; now, it's an attribute set providing multiple packages, providing one font each, with the name changed from before (in my case "SourceCodePro" became "sauce-code-pro")

[–] [email protected] 1 points 2 weeks ago

Ah right I see I thought it was just a rename

[–] [email protected] 2 points 3 weeks ago

Thank you for explaining the Retroarch change. I searched the nixpkgs repo this morning and saw the changes, but didn't have enough time to figure out how to change my config. This saves me a bunch of time 🙏