The former, column, is a utility from the bsdextrautils package, whereas the latter is a shell written in Rust. There is something they have in common: they both provide nicely formatted output. I’ve found one of them to be more frustrating than expected, and I don’t need to tell you which one.

4.3BSD-Reno can help you even today

Out of the blue, YT suggested I should watch Veronica Kahl Cary explaining the use of column:

In 30 years of Linux, I don’t remember to have used column even once! (If I used it when I first discovered FreeBSD and NetBSD, I don’t recall the moment.) This said, JSON, but not XML? Too bad. But I like that Veronica seems to use Iosevka Fixed or Iosevka Term.

OK, noted. Since bsdextrautils is preinstalled in all Ubuntu flavors (in Fedora, column is in util-linux, which is also preinstalled), I’ll remember to use column when it might help.

Oh, its man page says that column first appeared in 4.3BSD-Reno.

The nushell madness

Right after I watched the above video, YT showed me a short vertical crap which was so poorly written that it was useless (several comments criticized the excess of animations); but it was about nushell, and it made me curious.

Let me show you some comments to that YT short:

  • “using easy to read syntax”, proceed to show 4 nanoseconds of gibberish.
  • Try to use static images when showing demos. It was so difficult to see the examples, so that didn’t make me interested in the product at all!
  • too many fancy clipart graphics and not enough messing around with the actual shell.
  • “You can type this:” flash of light
  • All I hear is bloop, bleep, click, plop, and a million other annoying, totally unnecessary sound effects. Dear everyone on YouTube: Please stop it. If I hear that stupid camera shutter sound effect everyone shoves into their videos for no reason at all again, I’m going to lose my mind.

Yes, most content creators on YT are completely retarded, especially those who create vertical shorts. But nushell’s official page is persuasive enough. Also, some people really like it!

But how to install it?

Their first suggestion: Install using Homebrew or Nix profile. Why should I use nix if I don’t care about NixOS? I just fucking want to install a new shell! OK, I get it: Homebrew and nix allow for installing binaries in user space (i.e., not system-wide). nix profile is meant to install software only for the current user.

Or, via the documentation: Installing Nu. There are several options here:

Pre-built binaries from GitHub: I suppose nu-0.101.0-x86_64-unknown-linux-gnu.tar.gz would do. But then I should manually track for new releases.

“Nu is available via several package managers,” they say. But this only applies to: Arch, Fedora (outdated even in Rawhide), EPEL (outdated), Manjaro, openSUSE Tumbleweed. The rest are not mainstream!

“Docker images”: why on Earth would anyone use a Docker container to run a shell?! Is this world completely nuts?!

Building from source. Nah. Rust and crap.

What they don’t mention is that someone bothered to create a snap for it!

It just works and it saved me. Ubuntu’s App Center is present in Ubuntu MATE, too, and I installed it from there.

Interlude: GitHub Actions

The thing is, they also offer this choice: GitHub Action: Setup Nu.

I suppose this would allow for automated updates? I can’t tell. YAML is crap, and then I’d have to learn the syntax, events, and features provided and supported by the GitHub Actions framework. Over my dead body.

GitHub Actions is nonsense. Even people who are really knowledgeable about it admit that it’s the most abysmal type system, worse than Ansible with Jinja2 (Jenkins and Travis CI are mentioned too). It’s a complete mess, and the fact that it works is a miracle. It’s also difficult to debug. Nowadays, everything related to CI/CD (continuous integration and continuous delivery) is so complex and unintuitive that it’s really impossible for me to understand how large projects still work. (Although in practice we’re experiencing more like a continuous delivery of bugs and a continuous integration of the end-user in the chain of testing.)

You should watch a video by Atmos, a Rust developer whose pronouns are they/them, because these days most software developers are cuckoo (I forgot to mention that the aforementioned Veronica lives with her wife and daughter, as well as an old cat and a young dog). Good professionals, great content creators, mentally insane people.

Here’s the video: GitHub Actions Feels Bad. It’s quite technical, but you need to watch it at least from this segment onwards: 10:17 Part 5: A Completely Unsolicited (And Frankly Quite Rude) Review Of The GitHub Actions Code.

BTW, GitHub Actions are a fork of Azure Pipelines. This explains a lot. But here’s a fun fact from the video:

This isn’t the worst part about GitHub Actions. You really need to watch the video.

But is nu really worthwhile?

Nushell is launched as nu, which is practical. But you shouldn’t use it before thoroughly exploring the documentation! Here’s why.

At first, it seems nice and fancy:

And it displays the columns nicely boxed:

But then, one discovers strange things. Such as ps not accepting any known flag! As I later found from Running System (External) Commands, ps has been overridden by nu, so to run the external one, it has to be prefixed with ^:

Let’s explore what the internal ps does:

What are those dots? Maybe we should enlarge the terminal to 105 columns (and take into account that I’m using a narrow typeface!):

OK, there are 275 processes in the list. Note the “Web Content” crap, which is actually Firefox.

Now, the external ps, with added line numbers:

Not counting the header, then ps and nl, that gives 278 processes, not 275. Let me tell you that nu’s ps never lists the same number of processes as ps ax (or ps aux, which requires a wider terminal for comfortable reading). It’s unclear why this happens.

Let’s try something else. Remember I mentioned the “Web Content” thing? And they’re “Sleeping”… which is nuts! Let’s see how many Firefox processes are there.

There are 16 firefox processes. But nu thinks differently:

Now, this is strange. But let’s try the only flag accepted by nu’s ps:

Dots again! Let’s make the terminal larger. Oh, on occasions it can crash, but it’ll work a second time:

WTF is that crap?! It’s not one process anymore, but one process with several child processes that have co-processes, but displayed in a completely retarded way?

Let’s maximize terminal’s window:

So it lists 16 firefox processes; but they should have been 17. Whatever.

If you think that the general unreliability implied by such crazy behavior is the only bad thing about Nushell, there’s more: the documentation!

I knew I had to dig into the documentation once I noticed that nu doesn’t have a type built-in command, and the suggested command isn’t doing the same thing:

From the homepage of their website, the top Documentation menu has 5 items, of which the first 4 are useful. And there are no internal hyperlinks between these 4 sections of the documentation, which is confusing those who meet Nushell for the first time!

The Nushell Book. A few selected pages from the book:

  • The aforementioned Running System (External) Commands, which I discovered by accident.
  • Coming from Bash, Command Equivalents is a bit misleading. It mixes external commands (cp, ls, mkdir, rm are external commands, part of coreutils; sed is a separate package) with internal commands (such as cd) without clearly stating which one has been overridden and behaves differently, which one has been overridden but behaves the same bar the beautified output, and which one is still invoked as is. And the selection seems arbitrary. Unprofessional.
  • Nu map from other shells and domain specific languages. Even more absurd: what has a shell to do with SQL and LINQ? OK, PowerShell and Bash do make sense.

Command Reference. In a single page, you’ll find the 558 available commands, from alias to zip. It’s better to navigate by using the 34 categories listed in the left frame if you don’t know what you’re looking for. You’d be interested in Filesystem (cd, cp, ls, mv, mkdir, touch, and others). Inconsistency is at home in Nushell: System is a superset of Filesystem, so it shows Filesystem’s commands, plus some others, including their version of ps.

Cookbook. To be explored.

Language Reference Guide. I suppose this should be examined before the command reference, as it shows the philosophy behind Nushell, I guess.

In lieu of a bottom line

Nushell is nice. Its behavior is mysterious, unless you spend some serious time studying the confusingly structured documentation. I lack the willingness to spend significant time to learn a new shell, and this is the reason I never used fish (which isn’t POSIX-compliant, and this is a serious drawback, but it has some good parts, too.)

But I can’t trust it, because it overrides even ps, and I can’t trust its output. If I can’t trust ps, how could I trust the other external commands that have been replaced with built-ins? The external commands should have been invoked as is, then beautified by nu. Why overriding them?

A great idea, failed by stupid design decisions and bugs. Too bad for the effort, because to me, it looks like unreliable crap.

Should I give it a second chance, or should I uninstall it?