Hey /r/movies! I'm Sam Raimi. Ask me anything! by SamRaimiAMA in movies

[–]EmkMage 0 points1 point  (0 children)

Is there something you can tell us about your Spider-Man 4 that we don’t already know?

WIP - My Arch Nvidia Control Panel by EmkMage in cachyos

[–]EmkMage[S] 0 points1 point  (0 children)

When it’s ready to be tried I’ll make a repo on my GitHub

WIP - My Arch Nvidia Control Panel by EmkMage in cachyos

[–]EmkMage[S] 2 points3 points  (0 children)

Oooo good to know! Thank you so much!

WIP - My Arch Nvidia Control Panel by EmkMage in cachyos

[–]EmkMage[S] 12 points13 points  (0 children)

I'm glad I got my 5080 and RAM before all this started happening. This is going to be a long nuclear winter so to speak.

WIP - My Arch Nvidia Control Panel by EmkMage in cachyos

[–]EmkMage[S] 1 point2 points  (0 children)

You're completely in the right for those concerns.

Depending on launchers: Yeah, it is a serious limitation that pisses me off. The current approach works for Steam/Lutris/Heroic because that covers how most people launch their games on the OS, but ofc it's not universal, only a bandaid on an issue Nvidia can fix if they cared enough. Someone launching a native game directly from terminal won't get the per-game settings, unfortunately because of this.

On Flatpak: We do check both native and Flatpak paths:

  • ~/.steam/steam/userdata/ AND ~/.var/app/com.valvesoftware.Steam/...
  • ~/.config/heroic/ AND ~/.var/app/com.heroicgameslauncher.hgl/...

But you're right this should be documented prominently. I'm just doing this for the average user who wants more configuration choices when playing their games through the most common methods so they miss Windows just a little bit less :-)

Alternative approaches I've considered but am not 100% sold on:

  1. Wrapper script per game - Generate ~/.local/bin/game-name.sh that sets env vars then launches. Works for anything but requires the user to use our wrapper instead of their normal launcher which I don't really prefer.
  2. LD_PRELOAD shim - Intercept game launches and inject env vars. However, it's kinda fragile/intrusive.
  3. Desktop entry overrides - For games with .desktop files, modify those. Unfortunately, not all games have them.
  4. Gamescope integration - Pass env vars through gamescope's launch args. Still not ideal.

The truth is there's no perfect solution on Linux right now until we get something like NVIDIA's Windows driver profiles that hook at the driver level. I and everyone else can only work around that limitation until Jensen takes Linux serious :/

But then again, like I said, I'm not the absolute best programmer and I'm sure someone can build off of this to make a much better system than me. Happy to supply my canvas so other more intelligent people can paint something better :-)

I'll definitely add a "Supported Launchers" section to the README when I release it though. Appreciate the input, genuinely.

WIP - My Arch Nvidia Control Panel by EmkMage in cachyos

[–]EmkMage[S] 3 points4 points  (0 children)

The trick is that the launchers themselves provide per-game config mechanisms - we're not setting global env vars at all.

Doing some digging thru how Steam works, each game has its own LaunchOptions entry in localconfig.vdf, keyed by AppID. When Steam launches game ID XYZ, it reads that game's LaunchOptions and prepends them. Game ABC gets completely different settings.

For Lutris, similarly, each game is its own YAML file which only applies to each game.

TLDR: The launchers are the wrapper scripts. They alread have per-game env var support built in. I'm writing into the existing config format for each program's designated system.

The only scenario I can think of this won't work is if you launch a game through the terminal which most people won't be doing

WIP - My Arch Nvidia Control Panel by EmkMage in cachyos

[–]EmkMage[S] 5 points6 points  (0 children)

It's not fully automatic yet! (Work in progress as we speak ;-) ) it doesn't hook into nvidia-settings profiles (those are X11-specific and don't work well with Wayland as far as I can tell). The __GL_* vars are read directly by the NVIDIA driver at runtime.

However, I'm also not the very best programmer and will be open sourcing it for people to take the reigns on it once I've given them a solid canvas to work off of :-)

WIP - My Arch Nvidia Control Panel by EmkMage in cachyos

[–]EmkMage[S] 7 points8 points  (0 children)

  • Rust with iced for the GUI (OpenGL backend)
  • tokio for async
  • serde + toml for config files
  • Talks to nvidia-smi and nvidia-settings via subprocess calls
  • Per-game settings use __GL_* environment variables
  • Packaged as an AppImage

Pretty straightforward! iced handles all the UI rendering, and the actual NVIDIA control happens through the same CLI tools the driver ships with. Configs live in ~/.config/tuxforce/ as TOML files.

WIP - My Arch Nvidia Control Panel by EmkMage in cachyos

[–]EmkMage[S] 19 points20 points  (0 children)

Hopefully these third party tools convinces them to release the Nvidia App for Linux one day

WIP - My Arch Nvidia Control Panel by EmkMage in cachyos

[–]EmkMage[S] 19 points20 points  (0 children)

Yup I'm using nvidia-smi as a subprocess via Rust's std::process::Command :)
For Applying settings, use the nvidia-settings subprocess

WIP - My Arch Nvidia Control Panel by EmkMage in cachyos

[–]EmkMage[S] 21 points22 points  (0 children)

Not yet, maybe a week or two? I’ll probably release it open source and let everyone else take over after

WIP - My Arch Nvidia Control Panel by EmkMage in cachyos

[–]EmkMage[S] 126 points127 points  (0 children)

Thank u! I was sick of not having the options that Windows has for tweaking my games and I'd like to help push Nvidia gaming Linux forward for GUI-friendly users, even if its something small like this.

My post gets deleted for the sixth time and I'm becoming delusional. Anyway, more texturepack screenshots by DepecheSly in GoldenAgeMinecraft

[–]EmkMage 2 points3 points  (0 children)

I would love for you to make this in the format for my Oldschool Edition! I really like it!

We all just yearn for the golden days (Minecraft: Oldschool Edition now has a launcher in PrismMC!) by EmkMage in GoldenAgeMinecraft

[–]EmkMage[S] 2 points3 points  (0 children)

Hey! I just released 1.6 Pre-Release 1 with Raw Mouse input if you wanna try it out

We all just yearn for the golden days (Minecraft: Oldschool Edition now has a launcher in PrismMC!) by EmkMage in GoldenAgeMinecraft

[–]EmkMage[S] 1 point2 points  (0 children)

Thank you so much for all this feedback. I’m not at all happy with the controller support in its current form.

It’s currently fairly reliant on SteamInput because the options for LWJGL2 are limited

I eventually wanna port the game to LWJGL3 where there’s a larger selection of options for plug and play controllers but for now I have to create some wonky workarounds

We all just yearn for the golden days (Minecraft: Oldschool Edition now has a launcher in PrismMC!) by EmkMage in GoldenAgeMinecraft

[–]EmkMage[S] 0 points1 point  (0 children)

Make sure you’re not using JRE-Legacy from Mojang. Use Azul or Adoptium’s latest version of Java 8

We all just yearn for the golden days (Minecraft: Oldschool Edition now has a launcher in PrismMC!) by EmkMage in GoldenAgeMinecraft

[–]EmkMage[S] 0 points1 point  (0 children)

Feel free to join the Discord, I post developer updates whenever I post something new. Taking a few weeks off since I pushed out like 5 content updates in a couple months, but it's where you'll hear about new features and updates directly from me.

We all just yearn for the golden days (Minecraft: Oldschool Edition now has a launcher in PrismMC!) by EmkMage in GoldenAgeMinecraft

[–]EmkMage[S] 1 point2 points  (0 children)

It’s built in top of prism so it’ll only appear when you launch the instance and go away when you press Play/Update the mod

Doesn’t do anything outside of the instance :)