Linux comes in many different flavors and distributions. Each distro kind of does its own thing, but most are derivatives of a parent distribution. NixOS is different.

It’s a Linux distribution that targets reproducibility using an extensive configuration that remains (mostly) universal across all builds. Which should be a tinkerer’s dream, all things considered.

Being drawn to NixOS, I booted up a fresh installation medium and got ready to install on a very unlikely candidate — my Lenovo Legion Go (Gen 1) handheld. While the installation went off without a hitch, configuring the other aspects, such as the game mode switcher, was an entirely different story altogether.

PC gaming handhelds on a stand.
I own 3 PC gaming handhelds, and this is the one I barely use

Until Linux gets serious about multiplayer gaming, my Steam Deck will collect dust while I play on my Windows gaming handhelds instead.

12

Installing NixOS

Dead simple using the official ISO

Installing NixOS on the Lenovo Legion Go was surprisingly straightforward. All I had to do was boot from a USB Drive (with NixOS flashed to it using BalenaEtcher) and select it as the primary boot device.

With the live installer booted, I could now make a few selections and begin the installation. For ease of use, I picked the KDE desktop environment since that is what I am used to. I also enabled a swap file since this device has only 16GB of RAM.

The installation went off without a hitch, and I rebooted to enter the default NixOS KDE desktop.

There was still a lot of work left to be done, so I began by switching to the unstable channel to get more up-to-date packages. A full system update and one reboot later, I was ready to get down to the actual meat and potatoes of the whole thing. I also made sure to run the Nix garbage collector to clean things up.

sudo nix-channel –add https://nixos.org/channels/nixos-unstable nixos
sudo nixos-rebuild switch –upgrade
sudo nix-collect-garbage -d

Applying the right set of tweaks

Game mode switcher and performance optimizations

A vanilla SteamOS user interface

Of course, what good is a handheld if you can’t really use the “game mode” user interface? In the case of Linux, the most popular choice has always been the Steam Deck UI, which has since been ported over to additional distros.

The same has been done with NixOS using a project known as Jovian-NixOS. In a nutshell, adding a specific blurb to your configuration files will fetch and build the Steam Deck user interface, complete with the desktop mode switcher.

There are extensive tutorials on this on the official NixOS and GitHub pages. There are some restrictive prerequisites, though:

  • You must use the NixOS unstable branch.
  • An AMD CPU and GPU are your best pick for compatibility reasons.
  • This works best on a fresh NixOS installation.

Of course, getting Jovian-NixOS working is only half of the puzzle’s solution. There are also a few more important packages that are specific to AMD hardware. Ryzenadj is perhaps the most important pick here, since it allows for finer control. There’s also the updated vulkan-radeon drivers, along with mesa and lib32-mesa.

Jovian also offers some amount of customization, and its options are well explained on its GitHub page.

A simpler solution is to use another distro

Bazzite or CachyOS are your best picks

The default KDE Desktop

This kind of setup is, ideally speaking, not really practical. Yes, I was able to get most things working, but there are a few caveats I haven't mentioned yet, such as Decky Loader compatibility.

This is one of the most popular Homebrew plugin launchers for the Steam Deck interface, but it does not seem to work out of the box on NixOS. My suspicion is that the installer script gets confused about the paths in Nix, which could cause it to fail to install properly.

Jovian packages Decky Loader as well — you'll just have to enable it in the config file. However, CEF debugging can cause issues.

If you’re looking for something that just works and requires minimal setup, check out Bazzite. It offers almost all the functionality you’d get from Steam’s Big Picture mode with none of the hassle involved in a manual setup.

Even if you’d like to tinker, CachyOS is a far saner and well-supported choice. More so when you consider the fact that it comes with a dedicated handheld version that supports major devices out of the box.

As it stands, this is more of a hobby project. I really wouldn’t recommend sticking to this as your daily driver, at least for a handheld device.

NixOS isn’t difficult, but it takes some time to get used to

System info page for NixOS

I won’t pretend that NixOS is an accessible option for everyone. It has its fair share of quirks and can be incredibly difficult to wrap your head around at first. It’s almost like rewiring your brain, and it will take time to get used to.

That being said, it’s not rocket science. Nix’s configuration files are incredibly easy to understand, and once you get the hang of its workings, it can be a very capable distribution if you choose to invest some effort into it.

It's just that handhelds have very specific hardware quirks, and not all of them translate well. I'm sure NixOS could work well enough on the Legion Go, but at that point, I'd rather use something like Bazzite instead, which seems more suitable for a handheld.

Lenovo Legion Go
6/10
Brand
Lenovo
Weight
1.88lbs
Chipset
AMD Ryzen Z1 Extreme
RAM
16GB LPDDR5X

The Lenovo Legion Go is a portable gaming PC that checks off some of the important boxes but fails to deliver a performance that stacks up to the demands of modern-day titles. If your goal is cloud gaming or casual indie enjoyment, the Legion Go is a solution, but not the best handheld possible.

Storage
Up to 1TB
Display
144Hz 8.8-inch QHD+