I recently took into my possession a blast from the past: a four year old machine. And by that I mean a Alienware Alpha. With some intention of replacing our living room entertainment computer (an old laptop), I had some ideas with this device. This post will describe the adventure of ripping out SteamOS and doing something fresh.

Part 1: Darkness

The Alienware Alpha comes with some decent-looking specifications at first, and they aren't terribly bad for a device that came out somewhere around 2015. It has a low TDP usage making it cost effective and a power-saver, but let's look at the specs exactly:

  • Intel i5-4590T
  • Nvidia GeForce GTX 860M
  • 8GB DDR3 RAM
  • 500GB 5400RPM HDD

The hard drive is slow, and since it has low TDP usage (it uses a laptop grade processor) it means it isn't the most powerful beast in the world, but it is efficient at four physical cores and four logical threads. I'm obviously not a big fan of Intel for many reasons, but we'll have to deal with that.

So the first blind test is to at least try plugging it in, and once we do that we get to see....

...nothing. It doesn't boot or show a video signal. Oops.

Let's dive into how we can actually fix this.

Part 2: Repairs

So upon trying to turn the device on, we are greeted with a blinking yellow flashing LED on the power button. We can obviously infer that something is wrong and requires attending to, yellow blinking cannot possibly mean "good". So let's look at some online documentation and Google searches and hope we can find an answer.

Upon doing so, uhh, maybe this device wasn't that popular at first. Steam inevitably gave up on Steam Machines after a while but kept going with development of SteamOS (kind of). I get varying answers on why the machine might not be working but I don't have a definite answer from Dell anywhere, nor could I really find any kind of manual? A lot of people called Dell at the time and all Dell said was to send it back, so that doesn't help me now as the Alpha is EOL in 2020.

I get a very vague answer, but it gives me some hope. If you take apart the box, you can find the CMOS battery and a blue little pin connector near it. There's an off-chance that the CMOS battery needs replacing, or maybe it needs to be discharged. Hard to tell, but taking it apart was the only way to get started, so I started ripping it apart.

After taking it apart, the CMOS battery is indeed on the underside of the motherboard, and on the topside underneath the fans is a pinswitch-thingy that can be removed I'm guessing to reset the BIOS completely. I discharged the CMOS battery by unplugging it, but nothing actually changed from doing that, so I went the route of removing the BIOS pin. It was advised to put it back in, but looking back from the future of re-writing this post, this doesn't even seem remotely necessary.

I put it all back together after testing it's boot sequence, and we are able to get a video signal now to at least one HDMI output (it has two). Now I'm left with a very old version of the original SteamOS that came with it. Updating SteamOS is a pain in the ass, so the whole purpose of this post is to try something new; a la NixOS.

Part 3: Installing NixOS

I'm a familar user of NixOS, and I like it quite a bit. I can't say I'm someone who completely understands it and fully takes advantage of all of it's features, but for basic system management and package installation, it's really easy. I like the concept of a pure one-file/one-system description, but I can't say I like the idea of being this invested into systemd, but that's something for another time.

NixOS has done me well, so I want to install it on the Alpha. This process will go through a few phases:

  1. Test an installation
  2. Test installing various software
  3. Test various games after being installed

Step 1 turns out to be an easy and painless process. I've installed NixOS a few times, and while it is fairly command-line heavy, it's not exactly hard. I use a basic, non-LUKS encrypted system and generate my user password from the root shell once it's been installed. I have been using xfce4 as my desktop for a few weeks now after hopping away from i3-wm and it works well as a desktop.

However, I realized shortly after, I had this spare 240GB SSD sitting around not being used, and I was definitely not about to use it for dual-booting into a Windows partition, so I decided to put that in the Alpha (after taking it apart again, and installing NixOS again).

Anyways, step 2, we install all our needed software for basic purposes. Firefox, VLC, Chromium (for Netflix mostly or for people who absolutely need Chrome(ium)), Steam obviously for Steam games and Steam Big Picture (the main focus of SteamOS), and also openssh so we can jump remotely into our Steam machine from another room if need be (like from my actual desktop or even from my Termux phone).

Now once we reach step 3, this is where things become really difficult for no reason. Turns out having an Nvidia card is just a pain in the ass and requires special Nix configurations just to make some games bearable. There's an open-source developed driver, then there's the closed-source driver that Nvidia releases which might be good, but it could also be just pure dogshit and not be developed any further randomly without warning.

Obviously I went with the open-source option because Nvidia is terrible, so I had to do some extra configurations.

  # enable non-free packages for Steam to work
  # and other such things
  nixpkgs.config.allowUnfree = true;
  hardware.opengl.driSupport32Bit = true;
  hardware.opengl.extraPackages32 = with pkgs.pkgsi686Linux; [ libva ];
  hardware.pulseaudio.support32Bit = true;
  # nvidia/intel only
  services.xserver.videoDrivers = [ "intel" "nvidia" ];
  hardware.bumblebee.connectDisplay = true;
  hardware.bumblebee.driver = "nvidia";

There are some overrides you could add to the Steam package to play around, but I didn't find any of it actually worked or had any impact until I messed with the Intel/Nvidia drivers.

Nix also allows you to set udev rules to configure which devices you want to accept serial data from, as if it were a firewall. To my knowledge, this is the only working way to get Steam controllers to work (there is a Nix package to do this for you, but I chose to do this myself for explicitness).

  services.udev.extraRules = ''
    SUBSYSTEM=="usb", ATTRS{idVendor}=="28de", MODE="0666"
    KERNEL=="hidraw*", ATTRS{idVendor}=="28de", MODE="0666"
    KERNEL=="hidraw*", KERNELS=="*28DE:*", MODE="0666"
    KERNEL=="uinput", MODE="0660", GROUP="users", OPTIONS+="static_node=uinput"
    KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05c4", MODE="0660"
    KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ba0", MODE="0666"
    KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="09cc", MODE="0666",
    KERNEL=="hidraw*", KERNELS=="*054C:05C4*", MODE="0666"
    KERNEL=="hidraw*", KERNELS=="*054C:09CC*", MODE="0666"
  '';

Those rules correspond to the Steam controller USB IDs as well as other PS3/Dualshock3 specific things. I will have to mess around with other controllers like Xbox 360 ones to see if they will work at all.

To mimic true SteamOS behavior, I want the system to log in and boot into Steam Big Picture right away. It's easy to tell our system to log in using a Nix definition.

  # Enable the xfce4 environment with sddm autologin 
  services.xserver.desktopManager.xfce.enable = true;
  services.xserver.displayManager.sddm = {
    enable = true;
    autoLogin = {
      enable = true;
      user = "steve";
    };
  };

However, for me to start Steam in Big Picture, we have to define an autostart in xfce4 settings specifically. Instead of saying run steam, add the Big Picture flag to make it steam -bigpicture.

There are some other things I would like to do that I still haven't quite gotten to yet, like VNC or setting up something like microphones for karaoke, but I'm still working on it. It's a work in progress based on feedback from my roommate and friends who visit us, so I'm learning a lot more about NixOS in the process and what I can do to better the experience of NixOS on the living room TV.

Conclusion

Overall, had a lot of fun fixing up an old Steam Machine and putting NixOS on it. My gripe with SteamOS is that it is not updated very frequently, and because it runs off Debian stable, it quite literally feels like an eternity before updates are ever obtained. I was happy to do away with it and just put Steam through Nix on it, since that is what I do normally on my desktop anyway.

If you also have an Alienware Alpha and are interested in trying out NixOS, you can check out my Nixfiles on my GitHub repository to see what my configuration looks like. I will do my best to keep it relatively up-to-date with all my current NixOS devices as I believe it is helpful to many new NixOS users to have simple and easy-to-read configurations available.

I hope this dive into Steam Machines with NixOS was as fun for you to read about as it was fun for me to do.