2025-04-15 20:01:00 -04:00
{
config ,
lib ,
pkgs ,
. . .
} :
let
steam_duckstation = pkgs . writeScriptBin " s t e a m _ d u c k s t a t i o n " ''
export LD_LIBRARY_PATH = " $ L D _ L I B R A R Y _ P A T H : ${ pkgs . libglvnd } / l i b "
exec $ { pkgs . duckstation } /bin/duckstation-qt " ' ' ${ @ } "
'' ;
in
{
imports = [ ] ;
options . me = {
duckstation . enable = lib . mkOption {
type = lib . types . bool ;
default = false ;
example = true ;
description = " W h e t h e r w e w a n t t o i n s t a l l d u c k s t a t i o n . " ;
} ;
} ;
config = lib . mkIf config . me . duckstation . enable (
lib . mkMerge [
( lib . mkIf config . me . graphical {
home . packages = with pkgs ; [
duckstation
steam_duckstation
] ;
home . file . " . l o c a l / s h a r e / d u c k s t a t i o n / s e t t i n g s . i n i " = {
source = ./files/settings.ini ;
} ;
me . persist . directories = [
" . l o c a l / s h a r e / d u c k s t a t i o n / m e m c a r d s "
" . l o c a l / s h a r e / d u c k s t a t i o n / s a v e s t a t e s "
] ;
me . state . directories = [
" . l o c a l / s h a r e / d u c k s t a t i o n / c a c h e "
" . l o c a l / s h a r e / d u c k s t a t i o n / s h a d e r s "
" . l o c a l / s h a r e / d u c k s t a t i o n / s c r e e n s h o t s "
" . l o c a l / s h a r e / d u c k s t a t i o n / v i d e o s "
" . l o c a l / s h a r e / d u c k s t a t i o n / c o v e r s "
] ;
nixpkgs . overlays = [
(
final : prev :
let
2025-09-13 12:09:59 -04:00
modified_package = ( pkgs . callPackage ./package/package.nix { } ) ;
2025-04-15 20:01:00 -04:00
optimizeWithFlags =
pkg : flags :
pkg . overrideAttrs ( old : {
env . CXXFLAGS = ( old . env . CXXFLAGS or " " ) + ( lib . strings . concatStringsSep " " flags ) ;
} ) ;
original_package =
if config . me . optimizations . enable then
2025-09-13 12:09:59 -04:00
( optimizeWithFlags modified_package [
2025-04-15 20:01:00 -04:00
" - m a r c h = z n v e r 2 "
" - m t u n e = z n v e r 2 "
] )
else
2025-09-13 12:09:59 -04:00
modified_package ;
2025-04-15 20:01:00 -04:00
in
{
duckstation = pkgs . buildEnv {
2025-09-13 12:09:59 -04:00
name = original_package . name ;
2025-04-15 20:01:00 -04:00
paths = [
( config . lib . nixGL . wrap original_package )
] ;
extraOutputsToInstall = [
" m a n "
" d o c "
" i n f o "
] ;
# 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 = ''
chmod 0555 $ out/share/applications/org.duckstation.DuckStation.desktop
'' ;
} ;
}
)
] ;
} )
]
) ;
}