Skip to content

Commit

Permalink
Linux: Use NSIS installer (vrcx-team#991)
Browse files Browse the repository at this point in the history
* feat: Implement SKIP_SHORTCUT for installer

* feat: Update Linux install script to use NSIS-based installer instead

* feat: Wine detection for installer shortcut suppression

* fix: Revert WINEPREFIX back to XDG Home

Oops.

* fix(linux): Forgot to use the variable here

* fix(linux): Don't error if INSTALL_LOCATION exists but is empty

* fix(linux): "Program Files" has a space
  • Loading branch information
regalialong authored and Natsumi-sama committed Nov 26, 2024
1 parent d0268a9 commit 3e2afde
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 15 deletions.
1 change: 1 addition & 0 deletions Dotnet/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ private static void Run()
Application.SetCompatibleTextRenderingDefault(false);

logger.Info("{0} Starting...", Version);
logger.Debug("Wine support detection: {0}", Wine.GetIfWine());

ProcessMonitor.Instance.Init();
SQLiteLegacy.Instance.Init();
Expand Down
5 changes: 4 additions & 1 deletion Dotnet/Update.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ public static void Check()

private static void Install()
{
var setupArguments = "/S";
if (Wine.GetIfWine()) setupArguments += " /DISABLE_SHORTCUT=true";

try
{
File.Move(Update_Executable, VRCX_Setup_Executable);
Expand All @@ -43,7 +46,7 @@ private static void Install()
StartInfo = new ProcessStartInfo
{
FileName = VRCX_Setup_Executable,
Arguments = "/S",
Arguments = setupArguments,
UseShellExecute = true,
WorkingDirectory = Program.AppDataDirectory
}
Expand Down
23 changes: 23 additions & 0 deletions Dotnet/Wine.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System;
using System.Runtime.InteropServices;

namespace VRCX;

public static class Wine
{
[DllImport("ntdll.dll")]
private static extern IntPtr wine_get_version();

public static bool GetIfWine()
{
// wine_get_version should be guaranteed to exist exclusively in Wine envs,
// unlike some other suggestions like checking Wine registry keys
try
{
wine_get_version();
return true;
}
catch { return false; }
}
}

3 changes: 3 additions & 0 deletions Installer/installer.nsi
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,9 @@ Section "Install" SecInstall
IntFmt $0 "0x%08X" $0
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VRCX" "EstimatedSize" "$0"

${GetParameters} $R2
${GetOptions} $R2 /SKIP_SHORTCUT= $3
StrCmp $3 "true" +3
CreateShortCut "$SMPROGRAMS\VRCX.lnk" "$INSTDIR\VRCX.exe"
ApplicationID::Set "$SMPROGRAMS\VRCX.lnk" "VRCX"

Expand Down
25 changes: 11 additions & 14 deletions Linux/install-vrcx.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#!/usr/bin/env bash

steamapps=$HOME/.local/share/Steam/steamapps/compatdata
stable="https://api0.vrcx.app/releases/stable/latest/download?type=zip"
nightly="https://api0.vrcx.app/releases/nightly/latest/download?type=zip"
stable="https://api0.vrcx.app/releases/stable/latest/download"
nightly="https://api0.vrcx.app/releases/nightly/latest/download"
download_url=$stable
XDG_DATA_HOME=${XDG_DATA_HOME:=$HOME/.local/share}

Expand Down Expand Up @@ -61,22 +61,19 @@ fi
winetricks --force -q corefonts # Workaround for https://bugs.winehq.org/show_bug.cgi?id=32342

echo "Download VRCX"
INSTALL_LOCATION="$WINEPREFIX/drive_c/Program Files/VRCX"

if [[ ! -d $WINEPREFIX/drive_c/vrcx ]]; then
mkdir -p $WINEPREFIX/drive_c/vrcx
if [[ ! -d $INSTALL_LOCATION ]]; then
mkdir -p "$INSTALL_LOCATION"
else
rm -r $WINEPREFIX/drive_c/vrcx/*
rm -rf "${INSTALL_LOCATION:?}/"*
fi

cd $WINEPREFIX/drive_c/vrcx
curl -L $download_url -o vrcx.zip
unzip -uq vrcx.zip
rm vrcx.zip
cd "$INSTALL_LOCATION"
curl -L $download_url -o vrcx_setup.exe
WINEPREFIX=$WINEPREFIX wine vrcx_setup.exe /S /SKIP_SHORTCUT=true
rm vrcx_setup.exe

echo "#!/usr/bin/env bash
export WINEPREFIX=$WINEPREFIX
wine $WINEPREFIX/drive_c/vrcx/VRCX.exe" > $WINEPREFIX/drive_c/vrcx/vrcx
chmod +x $WINEPREFIX/drive_c/vrcx/vrcx

echo "Install VRCX.png to $XDG_DATA_HOME/icons"
curl -L https://raw.githubusercontent.com/vrcx-team/VRCX/master/VRCX.png -o "$XDG_DATA_HOME/icons/VRCX.png"
Expand All @@ -86,7 +83,7 @@ echo "[Desktop Entry]
Type=Application
Name=VRCX
Categories=Utility;
Exec=$WINEPREFIX/drive_c/vrcx/vrcx
Exec=WINEPREFIX=$WINEPREFIX wine '$INSTALL_LOCATION/VRCX.exe'
Icon=VRCX
" > $XDG_DATA_HOME/applications/vrcx.exe.desktop

Expand Down

0 comments on commit 3e2afde

Please sign in to comment.