I’ve been trying to run native linux games with lutris but can’t get it to work. As far as ik, i can either use steam-app in my termianl, which works, or I can use nix-ld which i did setup and also works when running the game’s executable from the terminal

I’ve setup nix-ld like so:

  programs.nix-ld = {
      enable = true;

      libraries = [(pkgs.runCommand "steamrun-lib" {}
  "mkdir $out; ln -s ${pkgs.steam-run.fhsenv}/usr/lib64 $out/lib")];
};

But for some reasons, when running the game’s executable in lutris, it just fails instantly, and I’m kinda out of ideas, if anyone knows what to do that’d be real helpful please

Edit: Ok well apparently it just solved itself ??? I realized i could install lutis using programs.lutris.enable = true; instead of just putting it in home.packages, and apparently it fixed the issue. Idk why or how but ig if u use home manager, insall lutris like so

  • claymorwan@lemmy.blahaj.zoneOP
    link
    fedilink
    English
    arrow-up
    2
    ·
    27 days ago

    I did notice lutris having its own FHS when upgrading, but aw man this looks pretty dam complicated, I’m like a week old to NixOS I have no idea how imma do this lmao, i did attempt the following

    failed attemps
    home.packages = with pkgs; [
     lutris.overrideAttrs (finalAttrs: previousAttrs: {
          multiPkgs = self ++ [(pkgs.runCommand "steamrun-lib" {}
      "mkdir $out; ln -s ${pkgs.steam-run.fhsenv}/usr/lib64 $out/lib")];
        })
    ];
    

    and

    home.packages = with pkgs; [
     lutris.override {
          buildFHSEnv = self.buildFHSEnv.override {
            multiPkgs = self ++ [(pkgs.runCommand "steamrun-lib" {}
      "mkdir $out; ln -s ${pkgs.steam-run.fhsenv}/usr/lib64 $out/lib")];
          };
        }
    ];
    

    which obviously didn’t work, so yea im kinda lost

    I’m also really surprised that lutris’ FHS just does not have anything to run native linux game by default

    • Oinks@lemmy.blahaj.zone
      link
      fedilink
      English
      arrow-up
      3
      arrow-down
      1
      ·
      edit-2
      27 days ago

      Untested but I think you want this expression:

      home.packages = with pkgs; [
        (lutris.overrideAttrs (_: prevAttrs: {
          multiPkgs = prevAttrs.multiPkgs ++ [
            (pkgs.runCommand "steamrun-lib" { } ''
              mkdir "$out"
              ln -s "${pkgs.steam-run.fhsenv}"/usr/lib64 "$out"/lib
            '')
          ];
        }))
      ];
      

      Note the extra parenthesis and use of prevAttrs to get the original multiPkgs to append to.

      • claymorwan@lemmy.blahaj.zoneOP
        link
        fedilink
        English
        arrow-up
        2
        ·
        25 days ago

        returns this error

        error: attribute 'multiPkgs' missing
                at /nix/store/j9lcrp816krraglnjk6r8iacl6jvww87-source/nixos/modules/home/packages.nix:24:19:
                    23|     (lutris.overrideAttrs (_: prevAttrs: {
                    24|       multiPkgs = prevAttrs.multiPkgs ++ [
                      |                   ^
                    25|         (pkgs.runCommand "steamrun-lib" { } ''
        

        if i were to guess maybe cuz multiPkgs is defined in fhsenv.nix in not in default.nix, could be wring tho im pretty new to nix packaging

        • Oinks@lemmy.blahaj.zone
          link
          fedilink
          English
          arrow-up
          1
          ·
          edit-2
          25 days ago

          No, you are getting the correct Lutris derivation, but it seems like you can’t override buildFHSEnv in this way (unlike a regular derivation) which is unfortunate. Looking at it again the package takes an extraLibraries parameter (but it’s a function taking a pkgs argument and producing a list, not a bare list). In principle this should work:

          home.packages = with pkgs; [
            (lutris.override {
              extraLibraries = pkgs: [ # shadows the other pkgs!
                (pkgs.runCommand "steamrun-lib" { } ''
                  mkdir "$out"
                  ln -s "${pkgs.steam-run.fhsenv}"/usr/lib64 "$out"/lib
                '')
              ];
            })
          ];
          

          But it actually fails because both steam-run and lutris provide /usr/lib64/ld-linux.so.2 leading to a name collision. So unfortunately it seems the idea of just adding the steam-run env to Lutris doesn’t quite work…

          You could instead try something like this:

          home.packages = with pkgs; [
            (lutris.override {
              extraLibraries = pkgs: with pkgs; [
                glibc
                libxcrypt
                libGL
                # ... other libs in steam-run.fhs but not in the lutris FHS env
              ];
            })
          ];
          

          Which library the problem game actually needs is anyone’s guess. That information might show up somewhere in the logs, or maybe ldd could tell you… but the signal to noise ratio probably won’t be very good.

    • priapus@piefed.social
      link
      fedilink
      English
      arrow-up
      2
      ·
      27 days ago

      The Lutris FHS env does have many libraries used by Linux games. If you look at the package definition you’ll see it has many more than the steam-run env. Trying to use steam-run inside Lutris is unlikely to resolve these issues. Do you have the Lutris runtime enabled?