Epistemic Status: seedling Sprouting — This just happened so I had to stop and talk about it


I was just updating one of my NixOS systems, and while trying to apply the new configuration I was greeted with a “scary” message.

building the system configuration...
error:
       … while calling the 'head' builtin
 
         at /nix/store/zb2695k9v4hmjdki97p0yhd4mys270fs-source/lib/attrsets.nix:820:11:
 
          819|         || pred here (elemAt values 1) (head values) then
          820|           head values
             |           ^
          821|         else
 
       … while evaluating the attribute 'value'
 
         at /nix/store/zb2695k9v4hmjdki97p0yhd4mys270fs-source/lib/modules.nix:800:9:
 
          799|     in warnDeprecation opt //
          800|       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
             |         ^
          801|         inherit (res.defsFinal') highestPrio;
 
       (stack trace truncated; use '--show-trace' to show the full trace)
 
       error: 'exa' has been removed because it is unmaintained upstream. Consider using 'eza', a maintained fork
building the system configuration...
error:
       … while calling the 'head' builtin
 
         at /nix/store/zb2695k9v4hmjdki97p0yhd4mys270fs-source/lib/attrsets.nix:820:11:
 
          819|         || pred here (elemAt values 1) (head values) then
          820|           head values
             |           ^
          821|         else
 
       … while evaluating the attribute 'value'
 
         at /nix/store/zb2695k9v4hmjdki97p0yhd4mys270fs-source/lib/modules.nix:800:9:
 
          799|     in warnDeprecation opt //
          800|       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
             |         ^
          801|         inherit (res.defsFinal') highestPrio;
 
       (stack trace truncated; use '--show-trace' to show the full trace)
 
       error: 'exa' has been removed because it is unmaintained upstream. Consider using 'eza', a maintained fork

That does look scary, but there’s a nice message on the last line (which I’ve highlighted). I love this sooo much smiling face with hearts

And to whoever took the time to write it, thank you, thank you, thank you .

Do you know what other distributions would probably do1? They’d just yank the package and add the new one. I’d try to do apt-get install exa and get some useless message about the package not existing, but no explanation of why. I’d have to go track down what happened.

With this, I just have to update my configuration, changing exa to eza assuming I want to continue using it, update a few shell aliases, and try again. So much time saved because of one person’s kindness and thoughtfulness.

Messages like this have alerted me to security issues with programs I’ve used in the past. The ways in which NixOS modules have alerted me to misconfigurations have been invaluable.

I wish we did more of this, in all the software we write.

Footnotes

  1. I went and looked up the PR where this change was made, and it looks like the plan is to eventually just symlink exa -> eza, which I don’t know how I feel about that, but it seems like a special case because of the situation with this project. It looks like distributions like Arch are symlinking the package, so my gripe doesn’t apply specifically to this case. In general though, I’d prefer changes to provide nice messages like this, and that’s been the case in the past with NixOS.