Enable optimized builds for steam deck.

This commit is contained in:
Tom Alexander 2025-03-24 19:54:09 -04:00
parent 44a49d7ac7
commit 3ecb2fc790
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
8 changed files with 211 additions and 98 deletions
nix/steam_deck/configuration
home.nix
hosts/deck
roles
2ship2harkinian
global_options
pcsx2
rpcs3
shipwright
sm64ex

@ -8,6 +8,7 @@
{ {
imports = [ imports = [
./roles/2ship2harkinian ./roles/2ship2harkinian
./roles/global_options
./roles/graphics ./roles/graphics
./roles/pcsx2 ./roles/pcsx2
./roles/rpcs3 ./roles/rpcs3

@ -10,6 +10,7 @@
config = { config = {
me.graphical = true; me.graphical = true;
me.optimizations.enable = true;
me.pcsx2.enable = true; me.pcsx2.enable = true;
me.rpcs3.enable = true; me.rpcs3.enable = true;
me.ship2harkinian.enable = true; me.ship2harkinian.enable = true;

@ -54,11 +54,28 @@ in
}; };
nixpkgs.overlays = [ nixpkgs.overlays = [
(final: prev: { (
final: prev:
let
optimizeWithFlags =
pkg: flags:
pkg.overrideAttrs (old: {
NIX_CFLAGS_COMPILE = [ (old.NIX_CFLAGS_COMPILE or "") ] ++ flags;
});
original_package =
if config.me.optimizations.enable then
(optimizeWithFlags prev._2ship2harkinian [
"-march=znver2"
"-mtune=znver2"
])
else
prev._2ship2harkinian;
in
{
_2ship2harkinian = pkgs.buildEnv { _2ship2harkinian = pkgs.buildEnv {
name = prev._2ship2harkinian.name; name = prev._2ship2harkinian.name;
paths = [ paths = [
(config.lib.nixGL.wrap prev._2ship2harkinian) (config.lib.nixGL.wrap original_package)
]; ];
extraOutputsToInstall = [ extraOutputsToInstall = [
"man" "man"
@ -70,7 +87,8 @@ in
chmod 0555 $out/share/applications/2s2h.desktop chmod 0555 $out/share/applications/2s2h.desktop
''; '';
}; };
}) }
)
]; ];
}) })
] ]

@ -0,0 +1,19 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [ ];
options.me = {
optimizations.enable = lib.mkOption {
type = lib.types.bool;
default = false;
example = true;
description = "Whether we want to enable CPU optimizations (will trigger a rebuild from source).";
};
};
}

@ -70,11 +70,28 @@ in
}; };
nixpkgs.overlays = [ nixpkgs.overlays = [
(final: prev: { (
final: prev:
let
optimizeWithFlags =
pkg: flags:
pkg.overrideAttrs (old: {
NIX_CFLAGS_COMPILE = [ (old.NIX_CFLAGS_COMPILE or "") ] ++ flags;
});
original_package =
if config.me.optimizations.enable then
(optimizeWithFlags prev.pcsx2 [
"-march=znver2"
"-mtune=znver2"
])
else
prev.pcsx2;
in
{
pcsx2 = pkgs.buildEnv { pcsx2 = pkgs.buildEnv {
name = prev.pcsx2.name; name = prev.pcsx2.name;
paths = [ paths = [
(config.lib.nixGL.wrap prev.pcsx2) (config.lib.nixGL.wrap original_package)
]; ];
extraOutputsToInstall = [ extraOutputsToInstall = [
"man" "man"
@ -86,7 +103,8 @@ in
chmod 0555 $out/share/applications/PCSX2.desktop chmod 0555 $out/share/applications/PCSX2.desktop
''; '';
}; };
}) }
)
]; ];
}) })
] ]

@ -70,11 +70,28 @@ in
}; };
nixpkgs.overlays = [ nixpkgs.overlays = [
(final: prev: { (
final: prev:
let
optimizeWithFlags =
pkg: flags:
pkg.overrideAttrs (old: {
NIX_CFLAGS_COMPILE = [ (old.NIX_CFLAGS_COMPILE or "") ] ++ flags;
});
original_package =
if config.me.optimizations.enable then
(optimizeWithFlags prev.rpcs3 [
"-march=znver2"
"-mtune=znver2"
])
else
prev.rpcs3;
in
{
rpcs3 = pkgs.buildEnv { rpcs3 = pkgs.buildEnv {
name = prev.rpcs3.name; name = prev.rpcs3.name;
paths = [ paths = [
(config.lib.nixGL.wrap prev.rpcs3) (config.lib.nixGL.wrap original_package)
]; ];
extraOutputsToInstall = [ extraOutputsToInstall = [
"man" "man"
@ -82,11 +99,12 @@ in
"info" "info"
]; ];
# We have to use 555 instead of the normal 444 here because the .desktop file ends up inside $HOME on steam deck and desktop files must be either not in $HOME or must be executable, otherwise KDE Plasma refuses to execute them. # We have to use 555 instead of the normal 444 here because the .desktop file ends up inside $HOME on steam deck and desktop files must be either not in $HOME or must be executable, otherwise KDE Plasma refuses to execute them.
# postBuild = '' postBuild = ''
# chmod 0555 $out/share/applications/PCSX2.desktop chmod 0555 $out/share/applications/rpcs3.desktop
# ''; '';
}; };
}) }
)
]; ];
}) })
] ]

@ -54,11 +54,30 @@ in
}; };
nixpkgs.overlays = [ nixpkgs.overlays = [
(final: prev: { (
final: prev:
let
optimizeWithFlags =
pkg: flags:
pkg.overrideAttrs (old: {
NIX_CFLAGS_COMPILE = [ (old.NIX_CFLAGS_COMPILE or "") ] ++ flags;
});
original_package = prev.shipwright;
# Optimization is broken for shipwright, fails to build "The following attributes are overlapping"
# original_package =
# if !config.me.optimizations.enable then
# (optimizeWithFlags prev.shipwright [
# "-march=znver2"
# "-mtune=znver2"
# ])
# else
# prev.shipwright;
in
{
shipwright = pkgs.buildEnv { shipwright = pkgs.buildEnv {
name = prev.shipwright.name; name = prev.shipwright.name;
paths = [ paths = [
(config.lib.nixGL.wrap prev.shipwright) (config.lib.nixGL.wrap original_package)
]; ];
extraOutputsToInstall = [ extraOutputsToInstall = [
"man" "man"
@ -70,7 +89,8 @@ in
chmod 0555 $out/share/applications/soh.desktop chmod 0555 $out/share/applications/soh.desktop
''; '';
}; };
}) }
)
]; ];
}) })
] ]

@ -52,7 +52,24 @@ in
}; };
nixpkgs.overlays = [ nixpkgs.overlays = [
(final: prev: { (
final: prev:
let
optimizeWithFlags =
pkg: flags:
pkg.overrideAttrs (old: {
NIX_CFLAGS_COMPILE = [ (old.NIX_CFLAGS_COMPILE or "") ] ++ flags;
});
original_package =
if config.me.optimizations.enable then
(optimizeWithFlags prev.sm64ex [
"-march=znver2"
"-mtune=znver2"
])
else
prev.sm64ex;
in
{
sm64ex = sm64ex =
let let
desktop_item = pkgs.makeDesktopItem { desktop_item = pkgs.makeDesktopItem {
@ -70,7 +87,7 @@ in
pkgs.buildEnv { pkgs.buildEnv {
name = prev.sm64ex.name; name = prev.sm64ex.name;
paths = [ paths = [
(config.lib.nixGL.wrap prev.sm64ex) (config.lib.nixGL.wrap original_package)
]; ];
extraOutputsToInstall = [ extraOutputsToInstall = [
"man" "man"
@ -83,7 +100,8 @@ in
install -m 444 -D "${./files/icon.png}" $out/share/pixmaps/sm64ex.png install -m 444 -D "${./files/icon.png}" $out/share/pixmaps/sm64ex.png
''; '';
}; };
}) }
)
]; ];
}) })
] ]