September on Linux, Part 1: Installing CachyOS on my gaming PC
I decided to spend September using Linux on my gaming PC. I’ve been using macOS for around 21 years, and although I never stopped running Linux on servers, the last time it was my main desktop operating system was back in high school.
Back then I didn’t have money for Apple hardware, so I spent a lot of time distro-hopping (as time was not exactly a rare resource for high-schoolers). Gentoo kept me occupied the longest – I remember leaving my 2.4 GHz Pentium 4 compiling OpenOffice.org overnight, because surely compiling everything from scratch would make it measurably faster – a fact I have curiously never measured 😬
Eventually I moved to macOS for pretty much everything. More recently, after building a Windows PC almost three years ago, Mac remained delegated for work, while Windows became the heart of my gaming machine. Linux continued running my servers, where I could mostly ignore whatever was happening on the desktop. Which means I missed the PulseAudio arguments, Wayland arguments, the SystemD arguments, and quite a lot of the things I now need to understand to configure my own computer.
I wanted to try that again – everywhere you look at the Internet nowadays, people (hello Linus! 👋) are trying to convince you that 2026 is actually the year of Linux on desktop, and that even gaming is not a show-stopper anymore. And I’m apparently an easily influenced individual, so the idea crystallised that my work would stay on the Mac (for now, at least), and Windows would remain installed while I found out whether my rather particular gaming setup could work on Linux. These articles that I’ll surely not abandon halfway through are my notes from doing that, with enough of the configuration included that I should be able to repeat it when I inevitably forget how it worked.
What I wanted to bring across
The PC has a Ryzen 7 5800X, 32 GB of RAM, an RX 6800 XT and an ASRock B550 Pro4 motherboard. My main display is a 34-inch Alienware OLED at 3440×1440, with a cheapo LG display to its left. Windows is installed on a Samsung 980 PRO.
Most of my requirements were things I already had elsewhere – the goal is to bend Linux to my needs, not vice versa. I wanted my Apple-style Czech QWERTY layout, including the Option-layer punctuation, and Japanese input that behaved like the Mac’s, with the Shift key dropping me down to direct カタカナ input. I wanted to mount my NAS at a normal filesystem path, use my self-hosted services with their private CA, and keep using the buttons on my Logitech G600. I already used AeroSpace on macOS as a tiling window and workspace manager, so lettered workspaces and familiar shortcuts were on the list too (just with the Cmd key now being freed from Apple’s dominion, so let’s use that to manage windows and workspaces – surely I can get at least used to that change).
The longest part of the list belonged to Final Fantasy XIV. My Windows installation had Dalamud plugins (don’t tell Yoshida! 🤫), ReShade and GPosingway, overlays, text-to-speech callouts, automatic backups and a custom login script because I’m entirely too lazy to provide the two-factor TOTP code anytime I want to play. Getting vanilla XIV running on Linux is mostly a solved problem, I was led to believe; but could my overly convoluted setup survive the migration?
I preferred native packages where possible. Shared files, game plugins and scripts were already going to give me enough paths to keep track of; I wanted to avoid adding packaging boundaries to that work without a reason. This preference led to some AUR builds later, so it didn’t mean that every application would be one quick pacman command.
Choosing CachyOS and Hyprland
Since gaming would be the primary purpose of the system, I was choosing between Bazzite, Nobara and CachyOS. I settled on CachyOS, an Arch-based distribution with its own optimised packages and kernel work, plus an installer that could set up a big chunk of the desktop I wanted. Having access to the Arch package ecosystem appealed to me, and I could choose Hyprland with Noctalia during installation.
Hyprland manages the windows and displays. Noctalia provides the top panel (macOS-style! Or in my case, like the wonderful simple-bar that I’ve been using for months now), application launcher (like Raycast), notifications and other desktop controls. CachyOS supplies that combination, so I could start using it without learning how to assemble it myself. Whenever I needed a desktop application, I’d reach for a KDE/Qt app because KDE’s design philosophy always appealed to me more than dumbing things down GNOME-style.
There was also some catching up to do with the configuration format. My installed CachyOS setup uses Lua files under ~/.config/hypr/, with calls such as hl.config(...). Older Hyprland examples on the web can use a different format. The CachyOS Hyprland guide describes the distribution’s layout; that is the setup the snippets in this series refer to.
Finding somewhere to put another SSD
I bought a Samsung 990 PRO for Linux so I wouldn’t have to repartition the Windows SSD (ignoring the fact that I don’t even realistically have any significant free space left on my NTFS partition 🫣). The fast onboard M.2 slot was already occupied, and the spare storage M.2 slot on the B550 Pro4 only offered PCIe 3.0 ×2. The second full-length PCIe slot, labelled PCIE3, offered PCIe 3.0 ×4. An M.2 adapter there would therefore give the new drive more bandwidth than the spare onboard slot, so I also bought this adapter.
Physical clearance was a separate problem. Because at the time of planning this entire ordeal, I was vacationing in the Czech Republic, halfway across the world from my PC, I ended up using a stock photograph of the motherboard and moving pieces of it around in an image editor to work out whether the card would fit alongside the GPU. The plan was to use the adapter for the experiment, then consider moving the Linux drive to the fast onboard slot if I decided to keep using it. I hadn’t committed to that swap yet because unplugging and re-plugging my GPU is not something I’m particularly looking forward to 😖
The next day after coming back to Japan, on September 1, I fitted the drive and adapter, cleaned some dust out of the PC with the help of my older son ❤️, and got a black screen with red CPU and DRAM diagnostic lights mocking me when I tried to boot the computer again. Removing the adapter didn’t help; panicking internally somehow didn’t either. Booting with one RAM stick did; after reseating the other stick, the machine had all 32 GB again, and Windows started normally.
I don’t know exactly what disturbed the RAM connection. Reseating it fixed the failure, and Windows and Samsung Magician could then see the 990 PRO. Magician also reported the firmware as current. This took care of the first installation problem before I had actually installed Linux.
Checking Windows before installing
One thing I was also worried about was tripping BitLocker by disabling Secure Boot and thus getting locked out of my Windows drive forever, so before doing anything, I checked encryption and Secure Boot from an elevated PowerShell session:
manage-bde -status
Confirm-SecureBootUEFI
On this PC, the Windows volume reported fully decrypted, 0% encrypted, with BitLocker protection off and no key protectors. The Secure Boot command returned False. I therefore didn’t have a BitLocker recovery problem to solve, and Secure Boot was already off – phew! 😌 Now the only thing that could ruin my day would be selecting the wrong drive to erase in CachyOS’ installer… (spoiler warning? (No! Not even I am that stupid 🤣))
The installation choices I used were the 990 PRO as the Linux disk, Hyprland for the desktop and Limine for the bootloader – not a bootloader I used before, but the idea of smooth integration of Btrfs’ snapshots into the bootloader seemed enticing enough. CachyOS was installed by the end of September 1, and Limine could boot both CachyOS and the existing Windows installation.
One thing I’m not sure about is why the PC actually boots directly to Limine now, when I don’t remember changing the boot order in UEFI and Limine should have no way of fitting on Windows’ boot EFI partition. I suspect something or someone must have changed the boot order in UEFI, but I’m entirely too lazy to confirm that.
First useful changes
The installed session hadn’t retained the intended monitor arrangement that I configured in the installer. On September 3, I put the LG to the left of the Alienware in Hyprland’s configuration. Saving the file immediately rearranged the desktop, which I enjoyed considerably more than I expected to enjoy moving a monitor in a configuration file.
For checking display names and modes, Hyprland supplies the hyprland monitors command, which is useful to confirm monitor names (such as DP-1 or DP-3) and supported resolutions and refresh rates. Configuring the placement afterwards is as simple as (but please don’t ask me what’s up with the funky refresh rate numbers):
hl.monitor({
output = "DP-1",
mode = "[email protected]",
position = "0x0",
scale = 1,
vrr = 2,
supports_hdr = 1,
})
hl.monitor({
output = "DP-3",
mode = "[email protected]",
position = "-1920x-10",
scale = 1,
vrr = 0,
supports_hdr = -1,
})
I installed Neovim with LazyVim, which somehow picked up the Catppuccin appearance I had selected in Noctalia. I also started changing Hyprland’s keyboard shortcuts. The defaults assigned application-launching actions to letters I already used as workspace names in AeroSpace, and I wanted those keys to take me to existing windows instead – I’ll share my entire Hyprland configuration in the next article.
The keyboard was more urgent. Choosing an available Czech Macintosh layout hadn’t given me the typing behaviour I expected (it was basically a Czech QWERTY layout with like one key difference – definitely not a layout you’d find on any Apple computer nowadays), and the file I needed for my replacement layout was on the NAS. So before I could finish setting up Czech punctuation, I needed an SMB mount. That’s where the next article starts.