Change:
When a new version of wine is packaged, the version pointed to by the config () (a store link) becomes invalid. At best, this will use an old wine version, and at worst will cause the app to fail to launch. Steps to reproduce the behavior: old wine initial config () wine The app should not crash. N/A Unsure how Nix should handle this one. The best solution is to update the config file (which conforms to xdg), however that may be out of scope. A warning / doc would also help.
upstream should stop embedding a full path or if there's some valid reason for why they do it then maybe the could grab a new path from $PATH if the current one doesn't exist
It stores it under the key , implying that will be used as a fallback(?) Could open an issue on the grapejuice repo and see what they have to say. Worth noting that regenerating the config file with will resolve the new path and work fine.
ah looks like its our fault which was in i didn't do the update myself so i don't know why the substitution was and if its necessary anymore
you tagged the wrong helium btw
I figured haha. Couldn't determine who it was supposed to be lol. As for the substitution, I'm not sure why it wouldn't update for newer wine builds? Seems kinda weird..
seems grapejuice copies the file to $HOME on first setup so the path won't be changed on wine hash changes
Sure. I think the issue mainly lies with the fact Nix does not edit the resulting config file, but the source itself. Unless Nix prods into XDG config home, there's not much we can do about it.

Discussion:
<del> { lib , buildGoModule , fetchFromGitHub , makeBinaryWrapper , pkg-config , libGL , libxkbcommon , xorg , wayland , vulkan-headers , wine64Packages , fetchpatch , fetchFromGitLab , fetchurl , }: let stagingPatch = fetchFromGitLab { sha256 = "sha256-VQ4j4PuXRoXbCUZ16snVO+jRvuKD4Rjn14R7bhwdAco="; domain = "gitlab.winehq.org"; owner = "wine"; repo = "wine-staging"; rev = "v9.2"; }; wine = wine64Packages.staging.overrideDerivation (oldAttrs: { prePatch = '' patchShebangs tools cp -r ${stagingPatch}/patches ${stagingPatch}/staging . chmod +w patches patchShebangs ./patches/gitapply.sh python3 ./staging/patchinstall.py --destdir="$PWD" --all ''; patches = (oldAttrs.patches or [ ]) ++ [ (fetchurl { name = "childwindow.patch"; hash = "sha256-u3mDvlbhQnfh2tUKb8jNJA0tTcLIaKVLfY8ktJmeRns="; url = "https://raw.githubusercontent.com/flathub/org.vinegarhq.Vinegar/9f43ce33a691afb50562d95adfc6719a3b58ddb7/patches/wine/childwindow.patch"; }) (fetchpatch { name = "mouselock.patch"; hash = "sha256-0AGA4AQbxTL5BGVbm072moav7xVA3zpotYqM8pcEDa4="; url = "https://raw.githubusercontent.com/flathub/org.vinegarhq.Vinegar/9f43ce33a691afb50562d95adfc6719a3b58ddb7/patches/wine/mouselock.patch"; }) (fetchpatch { name = "segregrevert.patch"; hash = "sha256-+3Nld81nG3GufI4jAF6yrWfkJmsSCOku39rx0Hov29c="; url = "https://raw.githubusercontent.com/flathub/org.vinegarhq.Vinegar/9f43ce33a691afb50562d95adfc6719a3b58ddb7/patches/wine/segregrevert.patch"; }) ]; src = fetchFromGitLab rec { sha256 = "sha256-GlPH34dr9aHx7xvlcbtDMn/wrY//DP58ilXjhQXgihQ="; domain = "gitlab.winehq.org"; owner = "wine"; repo = "wine"; rev = "wine-9.2"; }; }); in buildGoModule rec { pname = "vinegar"; version = "1.7.5"; src = fetchFromGitHub { owner = "vinegarhq"; repo = "vinegar"; rev = "v${version}"; hash = "sha256-eU6xlmgz8X7q51GSkQlz/kEQgTzzXYw5P6Yr47f7hbs="; }; vendorHash = "sha256-O2AQFcJmYY3FtLXB3BPdzsplFbthYEyasfctpPOQVhs="; nativeBuildInputs = [ pkg-config makeBinaryWrapper ]; buildInputs = [ libGL libxkbcommon xorg.libX11 xorg.libXcursor xorg.libXfixes wayland vulkan-headers wine ]; buildPhase = '' runHook preBuild make PREFIX=$out runHook postBuild ''; installPhase = '' runHook preInstall make PREFIX=$out install runHook postInstall ''; postInstall = '' wrapProgram $out/bin/vinegar  --prefix PATH : ${lib.makeBinPath [wine]} ''; meta = with lib; { description = "Open-source, minimal, configurable, fast bootstrapper for running Roblox on Linux"; homepage = "https://github.com/vinegarhq/vinegar"; changelog = "https://github.com/vinegarhq/vinegar/releases/tag/v${version}"; mainProgram = "vinegar"; license = licenses.gpl3Only; platforms = [ "x86_64-linux" ]; maintainers = with maintainers; [ nyanbinary ]; }; } </del>

<del> { lib , fetchFromGitLab , gobject-introspection , pciutils , python3Packages , gtk3 , wrapGAppsHook3 , glib , cairo , desktop-file-utils , xdg-utils , xdg-user-dirs , gettext , winetricks , wine , glxinfo , xrandr , bash }: python3Packages.buildPythonApplication rec  { pname = "grapejuice"; version = "7.20.11"; src = fetchFromGitLab { owner = "BrinkerVII"; repo = "grapejuice"; rev = "v${version}"; hash = "sha256-sDw67Xseeak1v5x0daznfdeNQahDTj21AVvXmuZlsgg="; }; nativeBuildInputs = [ gobject-introspection desktop-file-utils glib wrapGAppsHook3 python3Packages.pip ]; buildInputs = [ cairo gettext gtk3 bash ]; propagatedBuildInputs = with python3Packages; [ psutil dbus-python pygobject3 packaging wheel setuptools requests unidecode click pydantic ]; dontWrapGApps = true; makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath [ xdg-user-dirs wine winetricks pciutils glxinfo xrandr ]}" # make xdg-open overrideable at runtime "--suffix PATH : ${lib.makeBinPath [ xdg-utils ]}" ]; postPatch = '' substituteInPlace src/grapejuice_common/assets/desktop/grapejuice.desktop  --replace $GRAPEJUICE_EXECUTABLE "$out/bin/grapejuice"  --replace $GRAPEJUICE_GUI_EXECUTABLE "$out/bin/grapejuice-gui"  --replace $GRAPEJUICE_ICON grapejuice substituteInPlace src/grapejuice_common/assets/desktop/roblox-player.desktop  --replace $GRAPEJUICE_EXECUTABLE "$out/bin/grapejuice"  --replace $PLAYER_ICON "grapejuice-roblox-player" substituteInPlace src/grapejuice_common/assets/desktop/roblox-app.desktop  --replace $GRAPEJUICE_EXECUTABLE "$out/bin/grapejuice"  --replace $PLAYER_ICON "grapejuice-roblox-player" substituteInPlace src/grapejuice_common/assets/desktop/roblox-studio.desktop src/grapejuice_common/assets/desktop/roblox-studio-auth.desktop  --replace $GRAPEJUICE_EXECUTABLE "$out/bin/grapejuice"  --replace $STUDIO_ICON "grapejuice-roblox-studio" substituteInPlace src/grapejuice_common/paths.py  --replace 'return local_share() / "locale"' 'return Path("${placeholder "out"}/share/locale")' substituteInPlace src/grapejuice_common/models/settings_model.py  --replace 'default_wine_home: Optional[str] = ""' 'default_wine_home: Optional[str] = "${wine}"' substituteInPlace src/grapejuice_packaging/builders/linux_package_builder.py  --replace '"--no-dependencies",' '"--no-dependencies", "--no-build-isolation",' substituteInPlace src/grapejuice_packaging/packaging_resources/bin/grapejuice src/grapejuice_packaging/packaging_resources/bin/grapejuice-gui  --replace "/usr/bin/env python3" "${python3Packages.python.interpreter}" ''; installPhase = '' runHook preInstall PYTHONPATH=$(pwd)/src:$PYTHONPATH python3 -m grapejuice_packaging linux_package mkdir -p "$out" "$out/${python3Packages.python.sitePackages}" tar -xvf ./dist/linux_package/grapejuice-''${version}.tar.gz --strip-components=1 -C "$out" mv "$out/lib/python3/dist-packages/"* "$out/${python3Packages.python.sitePackages}" rmdir --ignore-fail-on-non-empty -p "$out/lib/python3/dist-packages" runHook postInstall ''; postFixup = '' patchShebangs "$out/bin/grapejuice{,-gui}" buildPythonPath "$out $pythonPath" for bin in grapejuice grapejuice-gui; do wrapProgram "$out/bin/$bin"  --prefix PYTHONPATH : "$PYTHONPATH:$(toPythonPath $out)"  ''${makeWrapperArgs[@]}  ''${gappsWrapperArgs[@]} done ''; # No tests doCheck = false; pythonImportsCheck = [ "grapejuice" ]; meta = with lib; { homepage = "https://gitlab.com/brinkervii/grapejuice"; description = "Simple Wine+Roblox management tool"; license = licenses.gpl3Plus; platforms = platforms.linux; maintainers = with maintainers; [ artturin helium ]; }; } </del>

gradle_5 = throw "gradle_5 has been removed because it's no longer being updated"; # Added 2023-01-17 grafana_reporter = grafana-reporter; # Added 2024-06-09 gr-ais = throw "'gr-ais' has been renamed to/replaced by 'gnuradio3_7.pkgs.ais'"; # Converted to throw 2023-09-10 <ins> grapefruit = throw "'grapefruit' was removed due to being blocked by Roblox, rendering the package useless"; # Added 2024-08-23 </ins> graylog = throw "graylog is now available in versions 3.3 up to 5.0. Please mind the upgrade path and choose the appropriate version. Direct upgrading from 3.3 to 4.3 or above is not supported"; # Added 2023-04-24 graylog-3_3 = throw "graylog 3.x is EOL. Please consider downgrading nixpkgs if you need an upgrade from 3.x to latest series."; # Added 2023-10-09 graylog-4_0 = throw "graylog 4.x is EOL. Please consider downgrading nixpkgs if you need an upgrade from 4.x to latest series."; # Added 2023-10-09

vikunja-frontend = throw "'vikunja-frontend' has been replaced by 'vikunja'"; # Added 2024-02-19 vimHugeX = vim-full; # Added 2022-12-04 vim_configurable = vim-full; # Added 2022-12-04 <ins> vinegar = throw "'vinegar' was removed due to being blocked by Roblox, rendering the package useless"; # Added 2024-08-23 </ins> virtmanager = throw "'virtmanager' has been renamed to/replaced by 'virt-manager'"; # Converted to throw 2023-09-10 virtmanager-qt = throw "'virtmanager-qt' has been renamed to/replaced by 'virt-manager-qt'"; # Converted to throw 2023-09-10 vivaldi-widevine = throw "'vivaldi-widevine' has been renamed to/replaced by 'widevine-cdm'"; # Added 2023-02-25

qtads = qt5.callPackage ../games/qtads { }; <del> grapejuice = callPackage ../games/grapejuice { wine = wineWowPackages.unstable; }; </del> graphwar = callPackage ../games/graphwar { }; gtypist = callPackage ../games/gtypist { };