Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
deba4c6
Add Vulkan implicit layer path environment for DXVK-NVAPI
Zebra2711 Feb 15, 2025
5e16e99
apply nvidia-libs (SveSop) via dxvk-nvapi option
Zebra2711 Feb 28, 2025
f58bd9e
add nvngx_dlssg.dll
Zebra2711 Mar 1, 2025
8a2d426
Add support for hyprland, wayland display management
Zebra2711 Mar 2, 2025
a496d6c
Provide a mechanism to redact sensitive query string parameters in URLs.
danieljohnson2 Mar 3, 2025
5d6c555
fix Frenh locale utf to utf8 to avoid error message
eikeno Mar 1, 2025
4399dc7
Make 'Uncategorized' a dynamic cateogry. Because it is, and we can't …
danieljohnson2 Mar 5, 2025
b74617c
Update Flathub API url
QuoteNat Mar 6, 2025
a488bb0
Add missing environment variables
Zebra2711 Mar 8, 2025
d0d4bd0
fix vulnerabilities xml
Zebra2711 Mar 10, 2025
ee5f3d4
dialogs log: Ctrl+mouse wheel zooming
Zebra2711 Mar 10, 2025
5aecf9f
add Chinese (Traditional) locale
Zebra2711 Mar 10, 2025
f1d09a5
Replace 0.5.19 with 0.5.20 in the changelog
strycore Mar 11, 2025
291c645
Remove more traces of 0.5.19
strycore Mar 11, 2025
8e05fe1
Do not crash if the checksum is missing in libretro; that's clearly m…
danieljohnson2 Mar 11, 2025
75ee2b3
Changelog note for Flathub fix (#5976)
danieljohnson2 Mar 11, 2025
e598b06
F5 to refresh has been removed; we should now update on changes more …
danieljohnson2 Mar 11, 2025
454e23a
A couple more changelog entries. There's just not much new since 0.5.19.
danieljohnson2 Mar 11, 2025
43ab1bf
Update girepository dev for CI
Zebra2711 Mar 12, 2025
077783e
Do not allow random objects into 'tooltip_default' that should be a s…
danieljohnson2 Mar 12, 2025
62a0768
add more detail ruff check
Zebra2711 Mar 13, 2025
7904b1e
Smarter sort conversions.
danieljohnson2 Mar 13, 2025
34a277e
Try again! Re-arrange order of conversion calls and make sure to actu…
danieljohnson2 Mar 14, 2025
9488171
Replace join with just formatting a list- it's just a warning, there'…
danieljohnson2 Mar 14, 2025
41dce41
webconnect_dialog: set fallback locale
Zebra2711 Mar 15, 2025
4b05ffe
Improved error message if you install a game that needs ac omponentbu…
danieljohnson2 Mar 17, 2025
91a999a
Hide the scary error details for this new exception- it tells the use…
danieljohnson2 Mar 17, 2025
1a8e525
Arrange for Lutris to exit if you run an installation with ``-i`` and…
danieljohnson2 Mar 17, 2025
431d415
Support desktop itegration for the Downloads folder.
danieljohnson2 Mar 18, 2025
24f3114
Apply desktop integration rules after prefix creation so as to overri…
danieljohnson2 Mar 18, 2025
9cbe1c9
i18n: allow override system locale with global options locale
eikeno Mar 18, 2025
968f707
proton: re-enable dxvk, nvapi, vkd3d
Zebra2711 Mar 19, 2025
dcf8ec4
gui: add explorer in wine actions
Zebra2711 Mar 19, 2025
a8dd771
retroarch: fix bios detection and remove hardcoded RetroArch paths
eikeno Mar 20, 2025
124ca93
modify refs from ~/.config/lutris to ~/.local/share/lutris
eikeno Mar 22, 2025
a057b01
use icoextract intead of extract-icon, which is outdated
Zebra2711 Apr 4, 2025
8afd7fb
gamemode: avoid executing gamemoderun when gamemode is not installed
Zebra2711 Apr 1, 2025
d595ffa
don't save env have empty key
Zebra2711 Apr 4, 2025
1d1b465
Add a guard just in case the system_config has no "env'
danieljohnson2 Apr 5, 2025
13b0f23
Run the 'env' cleanup code even when an empty config is being merged.
danieljohnson2 Apr 5, 2025
378227f
Include explicitly set env-vars from the runner or global config when…
danieljohnson2 Apr 8, 2025
23d5273
prefix: add more check to reduce hang
Zebra2711 Apr 2, 2025
267d84f
add commit hash and message in log info
Zebra2711 Apr 8, 2025
382140f
We need the runner all the time now; construct it if it's not given, …
danieljohnson2 Apr 8, 2025
9bc868c
Add a spinner page if you try to start the installer window when Lutr…
danieljohnson2 Apr 11, 2025
834d2d0
Add more explanatory text for the wait-for-components spinner.
danieljohnson2 Apr 12, 2025
57790f3
Escape script-provided messages and errors.
danieljohnson2 Apr 12, 2025
68b6097
Also use centering and small text for the 'extras' page prompt.
danieljohnson2 Apr 12, 2025
4518fb0
Update melonDS to the latest version
Noxellar Feb 13, 2025
964bd19
Update melonds download config to use AppImage
Noxellar Mar 8, 2025
c08bbd2
Add logging ability to the MAME runner
telanus Feb 23, 2025
ddd27d9
Set MAME logging options to advanced
strycore Apr 14, 2025
235d0a5
Group logging options
strycore Apr 14, 2025
0d9e64f
feat: add steam family shared games as a source
rosxz Mar 2, 2025
0d58435
Check for the '(' which is used to find the section name here; we'll …
danieljohnson2 Apr 12, 2025
75cdc53
Add a migration to move banners and cover-art from .cache to .local/s…
danieljohnson2 Jan 28, 2025
8b7a465
Changed ROM import from adding single file, to adding a folder to bul…
Zybyte85 Mar 15, 2025
9de122b
Formatted files
Zybyte85 Mar 15, 2025
99e05de
Change wording
strycore Apr 14, 2025
ae54f49
ruffage - sort imports
danieljohnson2 Apr 14, 2025
4db3b10
Add PackageManager subcategory
razzeee Jan 22, 2025
bbd3cc8
modify find_windows_game_executable() to be also compatible with newe…
eikeno Apr 16, 2025
b008049
When multiple versions of Proton are found with the same 'name', we'l…
danieljohnson2 Apr 16, 2025
c927b04
Do not allow duplicate wine versions to appear in the version list.
danieljohnson2 Apr 16, 2025
447ba94
Adjust list_lutris_wine_versions() to avoid accepted Proton versions;…
danieljohnson2 Apr 16, 2025
55081a5
Correct incorrect return of 'None' that leads to a crash.
danieljohnson2 Apr 19, 2025
fe65afb
wine-nvml not work when use symlink in prefix
Zebra2711 Apr 20, 2025
bc56c22
add winekill
Zebra2711 Apr 21, 2025
9f9f754
feat: Rename game config files when slug changes
Zebra2711 Apr 23, 2025
dc22f0c
add nb.po and edit LINGUAS
Apr 21, 2025
d856411
Fix spelling mistakes
danieljohnson2 Apr 23, 2025
9b44824
Support multiple redirect URIs for login; everybody needs a list of t…
danieljohnson2 Apr 23, 2025
6cbc7bc
Allow for the 'dashboard' URL redirect from Itch.IO.
danieljohnson2 Apr 23, 2025
3d4b0cd
add export .yml script
Zebra2711 Apr 25, 2025
3e8c45e
gui: set X11 WM_CLASS to match Wayland
Zebra2711 Apr 29, 2025
84b0faf
Update StartupWMClass in the desktop file
fiftydinar Apr 29, 2025
d2aa047
wine: warning when executable file path is invalid
Zebra2711 May 2, 2025
8b332c3
Fix Ubisoft cover art url
RoGreat Apr 29, 2025
50f28f6
fix: add missing assets when creating Steam shortcut
lfont May 2, 2025
95d6be9
Some ruffage: remove unused imports
danieljohnson2 May 5, 2025
31a02e9
Make interpreter.revert() asynchronous.
danieljohnson2 May 8, 2025
6d06c9d
Update datapath.py
blackPantherOS May 14, 2025
43faca0
Extent that safety check to cover /usr/local/share/lutris as well.
danieljohnson2 May 14, 2025
1aed835
fixed two minor scummvm issues related with argument handling
neuromancer May 18, 2025
5c0e5d6
Formatting
strycore May 19, 2025
e4eb1fc
Enable library sync by default
strycore May 19, 2025
0475a52
Make library sync runon a thread when invoked from the uninstall dialog.
danieljohnson2 May 20, 2025
a7e8d42
Add AsyncCall() for syncing the media after library sync; this happen…
danieljohnson2 May 20, 2025
38c088a
Add windows 11
Zebra2711 May 24, 2025
9202fb7
Fix create prefix with firejail
Zebra2711 May 27, 2025
2b92978
winekill: Force-kill processes if waiting too long
Zebra2711 May 28, 2025
3f795cd
dxvk: select GPU base on deviceUUID
Zebra2711 May 31, 2025
cb0b07b
Clean up ItchIO runner + platform handling.
danieljohnson2 Jun 1, 2025
5193704
Try to 'fix' itch.io games that forget to list *any* platforms by ass…
danieljohnson2 Jun 1, 2025
ac46126
icoextract: refactor
Zebra2711 Jun 4, 2025
2f5b16b
Replace usage of screen saver with suspend / sleep
strycore Jun 2, 2025
e61678f
update Flatpak ID for Ryujinx (Closes #6166)
strycore Jun 2, 2025
8bb0da4
Minor nb.po update
Jun 1, 2025
257678e
Set ge-proton as default wine version
strycore Jun 2, 2025
47158f1
Fix lint warnings
strycore Jun 2, 2025
86213d6
Remove warning about wine not being installed
strycore Jun 2, 2025
01d25ba
make ruff happy
Zebra2711 Jun 4, 2025
cb7bf77
debug: don't print UMU debug info when disable debug
Zebra2711 Jun 28, 2025
be36bc1
Add ptyxis terminal for Nobara support.
danieljohnson2 Jun 13, 2025
f42761c
Improved error handling if you have no terminals that Lutris recognizes.
danieljohnson2 Jun 13, 2025
c23077c
If the user tries to log in again after abandoning a previous login, …
danieljohnson2 Jun 14, 2025
db26a66
Fix Steam installation error presentation.
danieljohnson2 Jun 16, 2025
281691d
translation: updated pt-BR
victorsouzaleal Apr 15, 2025
2676444
translation: pt-BR update
victorsouzaleal Jun 19, 2025
ee9018a
Update installers.rst
QmwJlHuSg9pa Jun 24, 2025
f173e9c
Remove lsi steam option
strycore Jun 28, 2025
5b2e9ca
Remove check for wine on startup
strycore Jun 28, 2025
58c1b9a
Fix logs appearing twice
strycore Jun 28, 2025
6418532
Merge 0a0d0a090e9d12d0d87a73943fdf3861ccf91227^..96779137fe8ac684c89f…
strycore Jun 28, 2025
068c602
Fix GAMEID not being set for umu
strycore Aug 16, 2025
66adf48
Fix ruff suppression
danieljohnson2 Aug 30, 2025
fa6205e
Add the 'section' to the SETTINGS_CHANGED notification
danieljohnson2 Aug 30, 2025
d8733b0
Provide an image fallback mechanism so we show a banner when there's …
danieljohnson2 Sep 1, 2025
5a2d716
Prefer to fallback to larger media, ie, cover-art over icons.
danieljohnson2 Sep 1, 2025
9206597
Improved fallback image search- we can stop after we find a media tha…
danieljohnson2 Sep 1, 2025
f6214e6
Rework the fallback logic to include the underlying service's media w…
danieljohnson2 Sep 8, 2025
9a495e6
Use callbacks to avoid loading the service game from the PGA until we…
danieljohnson2 Sep 8, 2025
e439fc8
add suport for dxvk-sarek as default legacy dxvk
Zebra2711 Sep 16, 2025
af7c9a8
ignore version generate file
Zebra2711 Sep 16, 2025
92e7cdb
fix mypy, ruff
Zebra2711 Sep 16, 2025
fad0363
Merge branch 'master' of https://github.com/lutris/lutris
Zebra2711 Jan 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/static.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: Install Ubuntu dependencies
run: |
sudo apt update
sudo apt-get install libdbus-1-dev pkg-config libgirepository1.0-dev python3-gi-cairo libcairo2-dev
sudo apt-get install libdbus-1-dev pkg-config libgirepository-2.0-dev python3-gi-cairo libcairo2-dev
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
Expand Down Expand Up @@ -44,4 +44,4 @@ jobs:
run: ruff --version
ruff check .
- name: Check format
run: ruff format . --check
run: ruff format . --check --diff
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ tests/coverage/*
/flake.nix
/flake.lock

# version generate file
lutris/version.py

# meson builddirs
builddir

Expand Down
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ req-python:
types-PyYAML evdev PyGObject pypresence protobuf moddb

dev:
pip3 install ruff==0.3.5 mypy==1.8.0 mypy-baseline nose2
pip3 install ruff==0.12.1 mypy==1.16.1 mypy-baseline nose2
pip3 install pygobject-stubs --no-cache-dir --config-settings=config=Gtk3,Gdk3,Soup2

# ============
# Style checks
Expand Down
13 changes: 4 additions & 9 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ This token is stored in ``~/.cache/lutris/auth-token``.
Configuration files
===================

* ``~/.config/lutris``: The client, runners, and game configuration files
* ``~/.local/share/lutris``: The client, runners, and game configuration files

There is no need to manually edit these files as everything should be done from the client.

Expand All @@ -63,14 +63,6 @@ Configuration files

* ``games/*.yml``: Game-specific configurations

Game-specific configurations overwrite runner-specific configurations, which in
turn overwrite the system configuration.

Runners and the game database
=============================

``~/.local/share/lutris``: All data necessary to manage Lutris' library and games, including:

* ``pga.db``: An SQLite database tracking the game library, game installation status, various file locations, and some additional metadata

* ``runners/*``: Runners downloaded from `lutris.net <https://lutris.net>`_
Expand All @@ -79,6 +71,9 @@ Runners and the game database

``~/.local/share/icons/hicolor/128x128/apps/lutris_*.png``: Game icons

Game-specific configurations overwrite runner-specific configurations, which in
turn overwrite the system configuration.

Command line options
====================

Expand Down
16 changes: 11 additions & 5 deletions bin/lutris
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,18 @@
# with this program. If not, see <http://www.gnu.org/licenses/>.

"""Main entry point for Lutris"""

import gettext
import locale
import multiprocessing
import os
import sys
from os.path import dirname, normpath, realpath

# Python 3.14 changes the default to 'forkserver' which is very different;
# let's not put up with _that_!
multiprocessing.set_start_method("fork")

LAUNCH_PATH = dirname(realpath(__file__))

# Prevent loading Python modules from home folder
Expand All @@ -28,7 +34,7 @@ if os.environ.get("LUTRIS_ALLOW_LOCAL_PYTHON_PACKAGES") != "1":

if os.path.isdir(os.path.join(LAUNCH_PATH, "../lutris")):
sys.dont_write_bytecode = True
SOURCE_PATH = normpath(os.path.join(LAUNCH_PATH, '..'))
SOURCE_PATH = normpath(os.path.join(LAUNCH_PATH, ".."))
sys.path.insert(0, SOURCE_PATH)
else:
sys.path.insert(0, os.path.normpath(os.path.join(LAUNCH_PATH, "../lib/lutris")))
Expand All @@ -40,7 +46,7 @@ except locale.Error as ex:

try:
# optional_settings does not exist if you don't use the meson build system
from lutris import optional_settings
from lutris import optional_settings # type: ignore

try:
locale.bindtextdomain("lutris", optional_settings.LOCALE_DIR)
Expand All @@ -50,7 +56,7 @@ try:
except Exception as ex:
sys.stderr.write(
"Couldn't bind gettext domain, translations won't work.\n"
"LOCALE_DIR: %s\nError: %s\n" % (optional_settings.LOCALE_DIR,ex)
"LOCALE_DIR: %s\nError: %s\n" % (optional_settings.LOCALE_DIR, ex)
)
except ImportError:
pass
Expand All @@ -59,10 +65,10 @@ if "WEBKIT_DISABLE_DMABUF_RENDERER" not in os.environ:
os.environ["WEBKIT_DISABLE_DMABUF_RENDERER"] = "1"

try:
from lutris.gui.application import Application # pylint: disable=no-name-in-module
from lutris.gui.application import LutrisApplication
except ImportError as ex:
sys.stderr.write("Error importing Lutris application module: %s\n" % ex)
sys.exit(1)

app = Application() # pylint: disable=invalid-name
app = LutrisApplication()
sys.exit(app.run(sys.argv))
11 changes: 7 additions & 4 deletions debian/changelog
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
lutris (0.5.19) jammy; urgency=medium
lutris (0.5.20) jammy; urgency=medium

* Fix Proton integration bugs so Proton-fixes are applied
* Do not offer DXVK, VKD3D, D3D Extras or DDXVK-NVAPI on Proton versions; Proton will handle these.
* The "Enable Esync" and "Enable Fsync" settings are now passed on to Proton
* Do not offer VKD3D, D3D Extras or DXVK-NVAPI on Proton versions; Proton will handle these.
* The "Enable Esync" and "Enable Fsync" and "DXVK" settings are now passed on to Proton
* DXVK's integrated D8VK will be enabled in Proton
* Fix for updated Flathub API
* Emulator BIOS file location (used by libretro) may be set in Preferences
* Obtain the release year from GOG and Itch.io.
* MAME Machine setting uses a searchable entry for its enourmous list
* Support for importing Commodore 64 ROMs
* F5 will refresh the main Lutris window
* Redundant "Add Games" menu item removed; use the plus button in the corner
* "Manual Script" for the context menu will now see the game's environment variables
* Support for Steam Families in the form of a "Steam Family" source

-- Mathieu Comandon <mathieucomandon@gmail.com> Sun, 23 Feb 2025 10:55:10 -0800

Expand Down
4 changes: 2 additions & 2 deletions docs/installers.rst
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ installer has finished.
The configuration for a game is constructed from its installer. The `files` and
`installer` sections are removed from the script, some variables such as
$GAMEDIR are substituted and the results is saved in:
~/.config/lutris/games/<game>-<timestamp>.yml.
~/.local/share/lutris/games/<game>-<timestamp>.yml.

Published installers can be accessed from a command line by using the ``lutris:``
URL prefix followed by the installer slug.
Expand Down Expand Up @@ -728,7 +728,7 @@ Currently, the following tasks are implemented:
- task:
name: dosexec
executable: file_id
config: $GAMEDIR/game_install.conf
config_file: $GAMEDIR/game_install.conf
args: -scaler normal3x -conf more_conf.conf

Displaying a drop-down menu with options
Expand Down
10 changes: 1 addition & 9 deletions lutris/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

from lutris import settings
from lutris.gui.widgets import NotificationSource
from lutris.util import cache_single, http, system
from lutris.util import http, system
from lutris.util.graphics.gpu import get_gpus_info
from lutris.util.http import HTTPError, Request
from lutris.util.linux import LINUX_SYSTEM
Expand Down Expand Up @@ -75,7 +75,6 @@ def download_runtime_versions() -> Dict[str, Any]:
return {}
with open(settings.RUNTIME_VERSIONS_PATH, mode="w", encoding="utf-8") as runtime_file:
json.dump(response.json, runtime_file, indent=2)
get_default_wine_runner_version_info.cache_clear()
return response.json


Expand Down Expand Up @@ -308,13 +307,6 @@ def get_default_runner_version_info(runner_name: str, version: Optional[str] = N
return get_runner_version_from_cache(runner_name, version) or get_runner_version_from_api(runner_name, version)


@cache_single
def get_default_wine_runner_version_info() -> Optional[Dict[str, str]]:
"""Just returns the runner info for the default Wine, but with
caching. This is just a little optimization."""
return get_default_runner_version_info("wine")


def get_http_post_response(url, payload):
response = http.Request(url, headers={"Content-Type": "application/json"})
try:
Expand Down
Loading