Installing Arch on my Legion Go - A High Level Guide and my learnings

Hi All!

So, as I alluded to before in my last post where I installed Nobara Linux on my Legion Go, I usually prefer more hard-to-install distros. So this week, during my vacation I did just that!

So, let's go back to basics, why do I want to go from Nobara to Arch?

  1. I'm picky, and Arch let's me be picky.
  2. I like building my OS from scratch, it allows me to understand the intricacies of my device better.
  3. I can tune my OS to be as lean or as bloated as I want.

As you can see, none of these reasons involve ease of use, compatibility, or reliability. It's all about control for me.

What did I learn from my Nobara experience:

  1. Gaming distros are flawed in their own ways - some of the defaults don't make sense - especially on the partitioning side.
  2. BTRFS is great, but after a while, the snapshots were taking up more and more space - disk space on a handheld is a precious commodity.
  3. NTFS for my SD card was great initially when I used it more as a go-between for my Windows and Linux partitions - but ultimately windows fell to extreme disuse and the quirks are too painful to tolerate now on the linux side.
  4. rEFInd is essential to learn and understand as it is the only touch-capable boot loader around.
  5. And quite a few other things that I'm forgetting to recall.

So, onto my high level guide of my install process:

I was initially surprised that the display was in landscape, not portrait as in my Nobara install experience. This was a huge relief since I realized I wouldn't need to hunch over my device and squint to see what I'm doing. Yay linux kernel 6.8+!

For the most part, I used the `archinstall` installer to streamline my process, but found the partitioning strange so I ultimately opted to do that by hand. Here's my rough configuration:

nvme0n1p1 - fat32 - /efi - EFI partition (the OEM install gave it a measly 256MB)
nvme0n1p2-4 - Unused - WIndows partitions
nvme0n1p5 - fat32 - /boot - XBOOTLDR partition (a sort of extension to the EFI partition - 1GB in size).
nvme0n1p6 - ext4 - / - going with good-ol-ext4 since we're space sensitive. (However many bytes left ever from shrinking windows - in my case 470GB)
nvme0n1p7 - swap - swap - good ol' traditional swap partition. (16GB)

Once I partitioned, formatted, and mounted those in a way that arch-chroot would understand, I started `archinstall`.

Here I configured each field as necessary - turning off the "swap" support since it seems to be referring to zram - not a swap partition. I made sure to install the desktop / KDE configuration as that's what mimicks the steam-deck. I also made sure to throw in the extra package for my web browser (firefox) so I could browse the web when I'm done. I couldn't select the rEFInd bootloader here, so we'll just start with systemd-boot for now. Oh! And definitely don't forget to tell it to use NetworkManager for the install, otherwise you'll boot only to find the entire network stack is disabled and you need to re-enable all the OG CLI utilities so you can install/configure NetworkManager. There are some smaller steps I glossed over here, but again - this is a "high level" guide. I didn't set out to be super detailed (yet).

Anyways, I continued with the install, and afterwards I was prompted if I'd like to check the install before rebooting into it. I of course said yes and checked my fstab entries and systemd-boot configuration which I had issues with the first few attempts. Once verified I held my breath and.. Rebooted.

Conveniently, the install made systemd-boot my default bootloader so I loaded right in. I logged in with the user I configured during the install, and was presented with a vanilla KDE environment with Firefox - all good! Now, the real work begins.

From here I need to configure Arch to fully support the Legion Go so I:

  1. edited my pacman.conf to enable the multilib repo (required for steam)
  2. edited my makepkg.conf to set my compile threads to 8.
  3. grab the `yay` package manager PKGBUILD from their github and build it.
  4. Use yay to fetch all the packages that Antheas (the developer of HHD) authors. (hhd, hhd-ui, adjustor)
  5. install the `acpi-call` package so that HHD can set fan curves.
  6. Manually fetch Antheas' other PKGBUILDs that are only available on his github (linux-handheld, mesa-handheld, gamescope-handheld)
    1. This involved cloning each repo, running the builds, and installing the resulting packages.
  7. install rEFInd and configure it with the same boot settings as what's configured for systemd-boot. (my old theme from nobara is still here, and I retain it in my case)
    1. On a new install, I'd need to configure the theme to be touch-friendly.
  8. At this point I usually reboot, confirm that rEFInd works, and that hhd features work through hhd-ui. If not make sure any associated systemd services are started (usually the issue) before trying again. I recall troubleshooting a few more things at this juncture, but cannot recall it all at the moment.
  9. Continuing from here was getting all the other things installed. Which included:
    1. gamescope-session-steam-git (adds the necessary files to create the GameMode entry in the login screen)
    2. steam (both runtime and native)
    3. protonup-qt (to manage proton/wine versions)
    4. wine
    5. lutris (used mostly for battle.net games for me)
    6. heroic-launcher (GOG, Epic, and Amazon)
    7. emudeck
    8. decky-loader
    9. hhd-decky
    10. css-loader
      1. and the relevant themes to conver the controller glyphs.
  10. This got me to a point where everything worked, but it was hard to go from Desktop Mode to Game Mode and back without needing a password. I wanted to make things as keyboard-free as possible.
  11. At this point, I looked far and wide for a solution within the AUR, but couldn't find any. Seemed that I'd have to port the Nobara functionality myself.
    1. This involved fetching the Nobara packages responsible for gamescope sessions until I could finally locate the `os-session-select` script that seemed to be missing from the Arch packages.
    2. I then took the `os-session-select script`, installed it into the same place that it lives in nobara, but then also symlinked it to the expected location for the gamescope-session-steam-git files. There was also a special `steamos-desktop-return` script that was crucial for getting the desktop link working with it all. I also needed to adjust a few other things - mostly retrofitting more sane exit loops from Nobara to the various other helper scripts involved.
      1. HERE BE DRAGONS - what I've just done is likely to be nuked once there is an update to one of the gamescope-session packages, so if I want to do this long term, I'll need to author my own AUR package that does this.
  12. This got me to a point where gaming mode works, desktop mode works, and I could switch between them with ease! Sweet!
  13. Now to fetch the contents of my SD card (which was formatted ntfs at the time) and play the games off of them.
    1. At first nothing would launch but I could read and write just fine. Found that I could eventually launch games from it IF I made sure to mount it with ntfs-3g and the appropriate fmasks/umasks set, but then it would randomly fail and disappear from the system. No bueno...
    2. So I ultimately backed up the contents (yay for read permissions working fine!) reformatted it to `F2FS` for the microsd card lifespan enhancing qualities, and moved my files back.
  14. Some games needed to be re-validated and parts re-downloaded (likely from the sd-cards downtime) but it otherwise seemed to work great! Even my emulator saves pick up right where they left off.

And there we have it! Arch Linux on the Legion Go with all the convenience of the out-of-the-box gaming distros for only 4X the time investment. For me it was time very well spent and I now better understand my device.

In conclusion - unless you're a masochist like me, probably opt for the better out-of-the-box experience of Bazzite or Chimera, or even Nobara - it'll save you a lot of time, effort, and grief. Arch is "hard" on purpose and I wouldn't have it any other way!

6
14 replies