refactor: change to litterate config

Configuration is now held by the `.org` files. All `.nix` files are
tangled from the org-mode files.
This commit is contained in:
2026-10-08 15:18:56 +02:00
parent 5f4a7a4a42
commit 216065c4f2
80 changed files with 3099 additions and 581 deletions
+100
View File
@@ -0,0 +1,100 @@
#+title: Steam
#+setupfile: ../headers
* Steam
This module sets up Steam and gamescope for gaming on my desktop,
along with a few tweaks for Proton and controller support. Here’s the
skeleton of the =nixos.steam= module.
#+begin_src nix :tangle yes
{
flake.modules.nixos.steam = {pkgs, ...}: {
<<steam-enable>>
<<remote-play>>
<<gamescope-session>>
<<proton-ge>>
<<steam-package>>
<<gamescope>>
<<controller-support>>
};
}
#+end_src
** Enabling Steam
=protontricks= lets me run winetricks-style tweaks against a specific
game’s own Proton prefix, which some finicky titles still need.
#+name: steam-enable
#+begin_src nix
programs.steam.enable = true;
programs.steam.protontricks.enable = true;
#+end_src
** Remote Play and Local Transfers
These punch the firewall holes Steam needs: one for streaming games
over Remote Play, the other for transferring an install to another
machine on the LAN instead of re-downloading it.
#+name: remote-play
#+begin_src nix
programs.steam.remotePlay.openFirewall = true;
programs.steam.localNetworkGameTransfers.openFirewall = true;
#+end_src
** Proton-GE
[[https://github.com/GloriousEggroll/proton-ge-custom][Proton-GE]] is a community Proton build with extra compatibility
patches, and it often supports a game before official Proton catches
up.
#+name: proton-ge
#+begin_src nix
programs.steam.extraCompatPackages = [pkgs.proton-ge-bin];
#+end_src
** The Steam Package Itself
=OBS_VKCAPTURE= lets OBS Studio capture Vulkan games directly through
game capture instead of a slower screen/window capture. =RADV_TEX_ANISO=
forces anisotropic filtering on Mesa’s RADV driver for games that
don’t expose the setting themselves. =atk= fixes some GTK-based Steam
dialogs that otherwise complain about a missing accessibility toolkit,
and the extra Qt5 and =libpulseaudio= packages patch up older games and
launchers that load those libraries dynamically at runtime.
#+name: steam-package
#+begin_src nix
programs.steam.package = pkgs.steam.override {
extraEnv = {
OBS_VKCAPTURE = true;
RADV_TEX_ANISO = 16;
};
extraLibraries = p: with p; [atk];
extraPkgs = pkgs:
with pkgs; [
qt5.qtmultimedia
qt5.qtbase
libpulseaudio
];
};
#+end_src
** Gamescope
[[https://github.com/ValveSoftware/gamescope][gamescope]] is Valve’s micro-compositor, the same one powering the
session above. =capSysNice= lets it set realtime scheduling priority
(=--rt=) without running as root, and =--expose-wayland= lets
Wayland-native games run inside it directly instead of being forced
through XWayland.
#+name: gamescope
#+begin_src nix
programs.gamescope = {
enable = true;
capSysNice = true;
args = [
"--rt"
"--expose-wayland"
];
};
#+end_src
** Controller Support
This installs the udev rules for the Steam Controller, Steam Deck
controls, and other Valve input hardware, so they work without root.
In my case, that’s my original Steam controller and Valve Index.
#+name: controller-support
#+begin_src nix
hardware.steam-hardware.enable = true;
#+end_src