SteamOS NixOS Edition ❄️

I was able to successfully make a clean boot experience like on the Steam Deck for a desktop PC. This is my simplified version. Im waiting on my new AMD pc tommorow to test it on, but surprisingly it worked well on a 6700K chip with just the integrated graphics.

I’m looking to lower the boot time as much as possible.

Im working on a script to import games from other stores as shortcuts.

[GitHub - leonewton253/SteamOS-NixOS-Edition: Nix Flake for creating a SteamOS like experience on NixOS.

22 Likes

Have you taken a look at Jovian Nixos?

8 Likes

Looks too complicated. My setup is just a single file and uses stock packages. This repo is geared towards using nix on a steam deck.

I suppose you mean using NixOS on a steam deck, right?

And if so, yes, but not exclusively.

This is currently used successfully on different systems.

What Jovian NixOS does is actually integrate the Steam OS experience with NixOS. Not just superficially so by… whatever the heck this is supposed to do:

{
  programs.bash.loginShellInit = "steam-gamescope > /dev/null 2>&1";
}

This will not support switch to desktop, and is absolutely not a proper way to handle anything remotely close to ressembling a graphical session. This will be missing a lot of what session handling actually has to handle.

This will also be missing a few of the services expected by the Steam OS experience from steam, so things like the power button working as expected will not be working as expected.

You’re stating “Looks too complicated”, but then, you have stuff that is uh… Stuff that is looking like it is simpler, but in the end are having complicated consequences when considering how a Linux distribution operates.

Some observations follow, just from looking quickly.


This makes it impossible to just include the config, you end-up having to vendor it.

Everyone’s on the US west coast, right?

Why the long string with as\s*steamos?

BTRFS(?) expectations without making it mandatory, or even documenting it:

This looks too complicated. That’s a heavy-handed approach at “defaults”.

Also, somewhat scary defaults, considering autologin is setup:

Other scary default :scream:

This shouldn’t be in a configuration you could import:

Vendoring-in some “Steam Shortcut Manager” like you did is somewhat questionable, though not necessarily a problem. It just seems odd that it also includes a shortcut.vdf in the repo, with some of your personal (test?) data. And having the __pycache__ folder being included, is odd too.


Comparatively, what Jovian NixOS does is try to follow the normal NixOS semantics, so that there are no surprises from including the configuration in your system configurations, even if you don’t intend to activate it.

Activating features is done via a tiered set of options, which allows either going for the trivial “everything”, or opting-in into more discrete features… or even opting-out, via the same tiered options.

While this visibly adds complexity, this ensures you’re not forced into every choices the authors are making.

Additionally, making the switch to desktop option work as expected is considered a basic feature. It is, imo, a major feature of Steam OS, and shouldn’t be ignored.

And we’re doing it in a way that works better than on SteamOS: you can pick your desktop, and your username. After all, it is for your computer, even if it behaves like a video game console.

It generally should slot into the configuration you’d be using on your other systems, with the main caveat that the display manager has to be configured differently. Otherwise everything else follows the semantics from NixOS.


As an additional note, there is no “integration” for updating non-steam content within Jovian NixOS. It’s because this is a really hard problem, as it involves diving into the internals of Steam, without any method to tell Steam to update its view of the files, and additionally, without having a proper “lifecycle” where we can include the data even without the user having been logged into steam at least once.

But if you want to imperatively edit your non-steam content, there’s also this that I made:

20 Likes

That line I recently changed. I now use the gamescope command with parameters. I needed to run gamescope at 1080P.

As a seasoned Linux user I do not want a desktop. I do everything over SSH. This is more for power users.

I also reverted the repo to using a flake with ChaotixNix’s Mesa and CatchyOS kernel, as these have boosted the FPS over 20% versus stock.

I’ve made some progess with this code allowing non DRM games to run.

#!/usr/bin/env bash

PROTON=$(find $HOME/.steam/steam/steamapps/common/ -maxdepth 1 -name Proton* | sort | sed -e ‘$!d’)

export STEAM_GAME_PATH=“/home/steamos/Games/Eiyuden/”
export STEAM_COMPAT_DATA_PATH=“$STEAM_GAME_PATH” # Or point to where your pfx folder is
export STEAM_COMPAT_CLIENT_INSTALL_PATH=“$STEAM_GAME_PATH”
/home/steamos/.steam/steam/steamapps/common/Proton\ -\ Experimental/proton run /home/steamos/Games/Eiyuden/EiyudenChronicle.exe

I just need to make a CLI tool to scan a directory and let you choose the EXE for each game shortcut, then edit the VDF with the added games. I could even get it to find the steam IDs and pull in the game banners for the icons.

This looks really cool.

Thank you for the feedback. How would I fix this?

Updated Repo name. Going to make a github pages site and iso release.

1 Like

Hello @leonewton253

Please continue working on this! Jovian is great, but it only works with nixpkgs-unstable, so having an alternative would be amazing! I am happy to see you already got a lot of feedback!

1 Like

@sigboe Thanks! I’m in the process of creating a autoinstaller Distro based on this. Even considering turning it into a OS for a SteamOS console.

I’m running it now with just $140 AMD 8500G with a 740M GPU and it can handle Diablo IV at medium 720p.

I just need to hide the “switch to desktop” item in the shutdown menu and get Mangohud to show up when using steam’s toggle.

The Distro would autoinstall to the largest drive, then apply some configuration files for EmulationStation and retroarch. The latest ProtonGE would download via protonup. A VDF file would be created that launches Emulation Station.

Also, getting the WiFi and bluetooth selection menu to work in steam. I’m going to look at Holoiso and chimeraOS to see if I can find code for that.

I would be eager to test this. Right now I have an Atari VCS, had Chimera and HoloIso on it in the past. At some point both system would selfdestruct. Now on Bazzite and I have an extrenal drive hooked up which boots into Batocera. Would be awesome to have a Steamexperience with an easy way to Emulation Station ROMS…

1 Like

Just added an autoinstaller iso! Only use it on a PC with a drive you don’t mind getting formatted. It took out a USB drive I forgot to unplug but luckily testdisk recovered the partition.

https://github.com/SteamNix/SteamNix/releases/download/beta/nixos-minimal-25.05.20250417.b024ced-x86_64-linux.iso

I recently tried basing it from stable but gamescope would crash. I’m using the latest now and things are smooth. I’ve added a auto install iso. It should automaticlly update and pull in new features from the github configuration.nix. I’ve added a cutsom.nix import for users that want to overide the git configuration.