Skip to content

Instantly share code, notes, and snippets.

@luskan
Created September 21, 2025 12:13
Show Gist options
  • Select an option

  • Save luskan/53776bbb1b2a00180c919252794904c2 to your computer and use it in GitHub Desktop.

Select an option

Save luskan/53776bbb1b2a00180c919252794904c2 to your computer and use it in GitHub Desktop.

Revisions

  1. luskan created this gist Sep 21, 2025.
    76 changes: 76 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,76 @@
    #!/usr/bin/env bash
    set -euo pipefail

    # Moonlight-Qt build & install on Ubuntu (Qt6)

    # Uninstall existing installs (usr/local, Snap, Flatpak)
    sudo rm -f /usr/local/bin/moonlight
    sudo rm -f /usr/local/share/applications/com.moonlight_stream.Moonlight.desktop
    sudo rm -f /usr/local/share/icons/hicolor/scalable/apps/moonlight.svg
    if command -v snap >/dev/null 2>&1 && snap list 2>/dev/null | grep -q '^moonlight\b'; then
    sudo snap remove moonlight || true
    fi
    if command -v flatpak >/dev/null 2>&1 && flatpak list --app 2>/dev/null | grep -q 'com.moonlight_stream.Moonlight'; then
    flatpak uninstall -y com.moonlight_stream.Moonlight || true
    fi

    # Deps
    sudo apt update
    sudo apt install -y \
    build-essential git pkg-config \
    libegl1-mesa-dev libgl1-mesa-dev libopus-dev libsdl2-dev libsdl2-ttf-dev libssl-dev \
    libavcodec-dev libavformat-dev libswscale-dev libva-dev libvdpau-dev libxkbcommon-dev \
    wayland-protocols libdrm-dev \
    qt6-base-dev qt6-declarative-dev libqt6svg6-dev \
    qml6-module-qtquick-controls qml6-module-qtquick-templates qml6-module-qtquick-layouts \
    qml6-module-qtqml-workerscript qml6-module-qtquick-window qml6-module-qtquick \
    libplacebo-dev || true

    command -v qmake6 >/dev/null

    # Fresh clone
    WORKDIR="${HOME}/src"
    REPO_DIR="${WORKDIR}/moonlight-qt"
    mkdir -p "${WORKDIR}"
    rm -rf "${REPO_DIR}"
    git clone --depth=1 --recursive https://github.com/moonlight-stream/moonlight-qt "${REPO_DIR}"

    # Build (Release)
    cd "${REPO_DIR}"
    git submodule update --init --recursive
    BUILD_DIR="${REPO_DIR}/build-release"
    mkdir -p "${BUILD_DIR}"
    cd "${BUILD_DIR}"
    qmake6 ../moonlight-qt.pro
    make -j"$(getconf _NPROCESSORS_ONLN)"

    # Install
    BIN_PATH="${BUILD_DIR}/app/moonlight"
    if [ ! -x "${BIN_PATH}" ]; then
    BIN_PATH="$(find "${BUILD_DIR}/app" -maxdepth 2 -type f -executable -print0 2>/dev/null \
    | xargs -0 file 2>/dev/null \
    | awk -F: '/ELF.*executable/ {print $1; exit}')"
    fi
    [ -n "${BIN_PATH}" ] && [ -x "${BIN_PATH}" ]
    sudo install -Dm755 "${BIN_PATH}" /usr/local/bin/moonlight

    # Desktop entry
    sudo install -d /usr/local/share/applications
    sudo tee /usr/local/share/applications/com.moonlight_stream.Moonlight.desktop >/dev/null <<'EOF'
    [Desktop Entry]
    Type=Application
    Name=Moonlight
    Comment=GameStream client
    Exec=moonlight
    Icon=moonlight
    Categories=Game;Utility;
    Terminal=false
    EOF

    # Icon (if available)
    ICON_SRC="$(find "${REPO_DIR}" -iname 'moonlight.svg' -o -iname 'icon*.svg' | head -n1 || true)"
    if [ -n "${ICON_SRC}" ]; then
    sudo install -Dm644 "${ICON_SRC}" /usr/local/share/icons/hicolor/scalable/apps/moonlight.svg || true
    fi

    echo "Installed to /usr/local/bin/moonlight"