summaryrefslogtreecommitdiff
path: root/multimedia/sunshine
diff options
context:
space:
mode:
Diffstat (limited to 'multimedia/sunshine')
-rw-r--r--multimedia/sunshine/Makefile128
-rw-r--r--multimedia/sunshine/distinfo29
-rw-r--r--multimedia/sunshine/files/patch-cmake_targets_common.cmake16
-rw-r--r--multimedia/sunshine/files/patch-src_platform_linux_wlgrab.cpp11
-rw-r--r--multimedia/sunshine/files/patch-src_video.cpp10
-rw-r--r--multimedia/sunshine/pkg-descr10
-rw-r--r--multimedia/sunshine/pkg-install12
-rw-r--r--multimedia/sunshine/pkg-message25
-rw-r--r--multimedia/sunshine/pkg-plist98
9 files changed, 339 insertions, 0 deletions
diff --git a/multimedia/sunshine/Makefile b/multimedia/sunshine/Makefile
new file mode 100644
index 0000000..0eea409
--- /dev/null
+++ b/multimedia/sunshine/Makefile
@@ -0,0 +1,128 @@
+PORTNAME= sunshine
+DISTVERSIONPREFIX= v
+DISTVERSION= 2026.516.143833
+CATEGORIES= multimedia
+
+MAINTAINER= cashmere@autistici.org
+COMMENT= Self-hosted game stream host for Moonlight
+WWW= https://app.lizardbyte.dev/Sunshine
+
+LICENSE= GPLv3
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+# Prebuilt FFmpeg static libraries published by LizardByte/build-deps
+# (the same archive upstream's own FreeBSD package is linked against).
+# Sunshine's cmake requires libcbs.a, which no FreeBSD port provides,
+# so building against multimedia/ffmpeg is not an option.
+FFMPEG_BDEP_TAG= v2026.516.30821
+
+FETCH_DEPENDS= npm:www/npm
+BUILD_DEPENDS= npm:www/npm \
+ boost-libs>=0:devel/boost-libs \
+ glslc:graphics/shaderc \
+ wayland-scanner:graphics/wayland \
+ ${PYTHON_PKGNAMEPREFIX}Jinja2>=0:devel/py-Jinja2 \
+ ${PYTHON_PKGNAMEPREFIX}setuptools>=0:devel/py-setuptools \
+ ${LOCALBASE}/include/linux/input.h:devel/evdev-proto \
+ ${LOCALBASE}/include/vulkan/vulkan.h:graphics/vulkan-headers \
+ ${LOCALBASE}/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake:devel/nlohmann-json \
+ ${LOCALBASE}/share/pkgconfig/wayland-protocols.pc:graphics/wayland-protocols
+LIB_DEPENDS= libatk-1.0.so:accessibility/at-spi2-core \
+ libayatana-appindicator3.so:devel/libayatana-appindicator \
+ libayatana-ido3-0.4.so:devel/ayatana-ido \
+ libayatana-indicator3.so:devel/libayatana-indicator \
+ libcurl.so:ftp/curl \
+ libdbusmenu-glib.so:devel/libdbusmenu \
+ libdrm.so:graphics/libdrm \
+ libevdev.so:devel/libevdev \
+ libgbm.so:graphics/mesa-libs \
+ libharfbuzz.so:print/harfbuzz \
+ libicui18n.so:devel/icu \
+ libminiupnpc.so:net/miniupnpc \
+ libnotify.so:devel/libnotify \
+ libopus.so:audio/opus \
+ libpipewire-0.3.so:multimedia/pipewire \
+ libpulse.so:audio/pulseaudio \
+ libva.so:multimedia/libva \
+ libva-drm.so:multimedia/libva \
+ libva-x11.so:multimedia/libva \
+ libvulkan.so:graphics/vulkan-loader \
+ libwayland-client.so:graphics/wayland
+
+USES= cmake gnome pkgconfig python:build ssl xorg
+USE_GNOME= cairo gdkpixbuf glib20 gtk30 pango
+USE_XORG= ice sm x11 xcb xext xfixes xrandr xtst
+
+USE_GITHUB= yes
+GH_ACCOUNT= LizardByte
+GH_PROJECT= Sunshine
+GH_TUPLE= LizardByte-infrastructure:Simple-Web-Server:546895a93a29062bb178367b46c7afb72da9881e:sws/third-party/Simple-Web-Server \
+ moonlight-stream:moonlight-common-c:2600beaf13f18bfa43453609cf5e3b84a4227760:mlc/third-party/moonlight-common-c \
+ cgutman:enet:c7353c059373f8d3fc83d451f8f1a477be3dc94e:enet/third-party/moonlight-common-c/enet \
+ LizardByte:libdisplaydevice:fe7e6a81f65deae91594702e1a185f47229745b9:ldd/third-party/libdisplaydevice \
+ Dav1dde:glad:73db193f853e2ee079bf3ca8a64aa2eaf6459043:glad/third-party/glad \
+ games-on-whales:inputtino:f4ce2b0df536ef309e9ff318f75b460f7097d7c1:inputtino/third-party/inputtino \
+ sleepybishop:nanors:19f07b513e924e471cadd141943c1ec4adc8d0e0:nanors/third-party/nanors \
+ LizardByte:tray:563dee475f8878d252ab2b9938d3a014e776ed08:tray/third-party/tray \
+ LizardByte-infrastructure:wlr-protocols:bf4fc79abc359eea5a0edec0ac6d4a2b2955f82a:wlr/third-party/wlr-protocols \
+ KDE:plasma-wayland-protocols:4c015e90ae6c88f2ffa766e899387ef431eade49:pwp/third-party/plasma-wayland-protocols \
+ FFmpeg:nv-codec-headers:33a9ede8d9914299d9262539c576a15bd0a19621:nvch/third-party/nv-codec-headers
+
+MASTER_SITES+= https://github.com/LizardByte/build-deps/releases/download/${FFMPEG_BDEP_TAG}/:ffmpeg_bin
+DISTFILES+= FreeBSD-amd64-ffmpeg.tar.gz:ffmpeg_bin \
+ ${WEB_DEPS_TARBALL}
+
+INSTALLS_ICONS= yes
+
+# Node modules for the web UI, vendored in pre-fetch (the only phase with
+# network access under poudriere). files/patch-cmake_targets_common.cmake
+# drops the "npm ci" step from the build so the vendored copy is used as-is.
+WEB_DEPS_TARBALL= ${PORTNAME}-web-deps-${DISTVERSION}${EXTRACT_SUFX}
+WEB_UI_URL= https://raw.githubusercontent.com/${GH_ACCOUNT}/${GH_PROJECT}/${DISTVERSIONPREFIX}${DISTVERSION}
+
+CMAKE_ARGS= -DBUILD_DOCS=OFF \
+ -DBUILD_TESTS=OFF \
+ -DBUILD_WERROR=OFF \
+ -DFFMPEG_PREPARED_BINARIES=${WRKDIR}/ffmpeg \
+ -DGLAD_SKIP_PIP_INSTALL=ON \
+ -DOPUS_USE_STATIC=OFF \
+ -DPython_EXECUTABLE=${PYTHON_CMD} \
+ -DSUNSHINE_ASSETS_DIR=share/assets \
+ -DSUNSHINE_ENABLE_CUDA=OFF \
+ -DSUNSHINE_ENABLE_DRM=OFF \
+ -DSUNSHINE_ENABLE_KWIN=ON \
+ -DSUNSHINE_ENABLE_PORTAL=ON \
+ -DSUNSHINE_ENABLE_VAAPI=ON \
+ -DSUNSHINE_ENABLE_VULKAN=ON \
+ -DSUNSHINE_ENABLE_WAYLAND=ON \
+ -DSUNSHINE_ENABLE_X11=ON \
+ -DSUNSHINE_EXECUTABLE_PATH=${PREFIX}/bin/sunshine \
+ -DSUNSHINE_PUBLISHER_NAME=FreeBSD \
+ -DSUNSHINE_PUBLISHER_WEBSITE=https://app.lizardbyte.dev \
+ -DSUNSHINE_PUBLISHER_ISSUE_URL=https://app.lizardbyte.dev/support \
+ -DSUNSHINE_SYSTEM_VULKAN_HEADERS=ON \
+ -DSUNSHINE_SYSTEM_WAYLAND_PROTOCOLS=ON
+
+# Version is normally derived from git; the distfile is not a checkout.
+CONFIGURE_ENV= BRANCH=master \
+ BUILD_VERSION=${DISTVERSIONPREFIX}${DISTVERSION}
+
+pre-fetch:
+ @if ! [ -f ${DISTDIR}/${WEB_DEPS_TARBALL} ]; then ( \
+ ${RM} -rf ${WRKDIR}/web-deps && \
+ ${MKDIR} ${WRKDIR}/web-deps && \
+ cd ${WRKDIR}/web-deps && \
+ ${FETCH_CMD} -o package.json ${WEB_UI_URL}/package.json && \
+ ${FETCH_CMD} -o package-lock.json ${WEB_UI_URL}/package-lock.json && \
+ ${SETENV} HOME=${WRKDIR}/web-deps npm ci --ignore-scripts && \
+ ${FIND} node_modules -exec ${TOUCH} -h -d 1970-01-01T00:00:00Z {} \; && \
+ ${FIND} node_modules -print0 | ${SORT} -z | \
+ ${TAR} czf ${DISTDIR}/${WEB_DEPS_TARBALL} --format=bsdtar --gid 0 --uid 0 \
+ --options gzip:!timestamp --no-recursion --null -T - && \
+ ${RM} -rf ${WRKDIR}/web-deps \
+ ); fi
+
+post-extract:
+ @${MV} ${WRKDIR}/node_modules ${WRKSRC}/node_modules
+
+.include <bsd.port.mk>
diff --git a/multimedia/sunshine/distinfo b/multimedia/sunshine/distinfo
new file mode 100644
index 0000000..a811694
--- /dev/null
+++ b/multimedia/sunshine/distinfo
@@ -0,0 +1,29 @@
+TIMESTAMP = 1784755912
+SHA256 (FreeBSD-amd64-ffmpeg.tar.gz) = 2f1f1510ec121ac8e5aa5ee998bdefecfd09430536c1d5669e29fa2e878621a5
+SIZE (FreeBSD-amd64-ffmpeg.tar.gz) = 15033043
+SHA256 (sunshine-web-deps-2026.516.143833.tar.gz) = 87a3fc5ce8d55d0d965fd2948e1c22b7da4cbe6278d788f972fab4f19f223c0f
+SIZE (sunshine-web-deps-2026.516.143833.tar.gz) = 28793714
+SHA256 (LizardByte-Sunshine-v2026.516.143833_GH0.tar.gz) = d435babfd68ec0b1bcba74d861b11839c9226051c65bcde96e4aa133406c9ccb
+SIZE (LizardByte-Sunshine-v2026.516.143833_GH0.tar.gz) = 30150477
+SHA256 (LizardByte-infrastructure-Simple-Web-Server-546895a93a29062bb178367b46c7afb72da9881e_GH0.tar.gz) = de46eeceb87f6d8ff30a494ed9d3b915844a179b32067f8347ee854a07fd3c8c
+SIZE (LizardByte-infrastructure-Simple-Web-Server-546895a93a29062bb178367b46c7afb72da9881e_GH0.tar.gz) = 74751
+SHA256 (moonlight-stream-moonlight-common-c-2600beaf13f18bfa43453609cf5e3b84a4227760_GH0.tar.gz) = deb2b783af0c3bdb9fbc5e4b1f9804afe6a18752199b0f78193b479518060fc8
+SIZE (moonlight-stream-moonlight-common-c-2600beaf13f18bfa43453609cf5e3b84a4227760_GH0.tar.gz) = 267470
+SHA256 (cgutman-enet-c7353c059373f8d3fc83d451f8f1a477be3dc94e_GH0.tar.gz) = 8ca4d6f63f1f2969f49e2f141d9b52b29117f9ece06ea0d38972e00c4d714a94
+SIZE (cgutman-enet-c7353c059373f8d3fc83d451f8f1a477be3dc94e_GH0.tar.gz) = 87127
+SHA256 (LizardByte-libdisplaydevice-fe7e6a81f65deae91594702e1a185f47229745b9_GH0.tar.gz) = bef3f1f79d09b0e50af75c4b4ec6b83d0fe07f48f5b79c8336b3cec238eb6813
+SIZE (LizardByte-libdisplaydevice-fe7e6a81f65deae91594702e1a185f47229745b9_GH0.tar.gz) = 116379
+SHA256 (Dav1dde-glad-73db193f853e2ee079bf3ca8a64aa2eaf6459043_GH0.tar.gz) = 33dbeae44d8315ece57e14eba4b1b4a02ac5406d1c4f49cd20048c91522a6b9a
+SIZE (Dav1dde-glad-73db193f853e2ee079bf3ca8a64aa2eaf6459043_GH0.tar.gz) = 645779
+SHA256 (games-on-whales-inputtino-f4ce2b0df536ef309e9ff318f75b460f7097d7c1_GH0.tar.gz) = 05edf6a089f137ccbf069af482df0dca55507f60518d90612b606a1f2531c564
+SIZE (games-on-whales-inputtino-f4ce2b0df536ef309e9ff318f75b460f7097d7c1_GH0.tar.gz) = 105409
+SHA256 (sleepybishop-nanors-19f07b513e924e471cadd141943c1ec4adc8d0e0_GH0.tar.gz) = 2ece5782cd6ff87f74ebd0ffaf28b9256b498b6b3f5344aeb75b873c15eeb2dc
+SIZE (sleepybishop-nanors-19f07b513e924e471cadd141943c1ec4adc8d0e0_GH0.tar.gz) = 194695
+SHA256 (LizardByte-tray-563dee475f8878d252ab2b9938d3a014e776ed08_GH0.tar.gz) = 9e3cf37863861666b17c268165db952b8eede27f6e0fe07c784086bc235cdefb
+SIZE (LizardByte-tray-563dee475f8878d252ab2b9938d3a014e776ed08_GH0.tar.gz) = 1090338
+SHA256 (LizardByte-infrastructure-wlr-protocols-bf4fc79abc359eea5a0edec0ac6d4a2b2955f82a_GH0.tar.gz) = 9e0fd2be5ba7c84b81acdd086f84c2da2c2b5e4946a17bda3e9850c62e14057f
+SIZE (LizardByte-infrastructure-wlr-protocols-bf4fc79abc359eea5a0edec0ac6d4a2b2955f82a_GH0.tar.gz) = 23571
+SHA256 (KDE-plasma-wayland-protocols-4c015e90ae6c88f2ffa766e899387ef431eade49_GH0.tar.gz) = 7edee38bd9b538f9eaade4684a0ef2356aec5a473c9acdd10fcb97d2789d00e8
+SIZE (KDE-plasma-wayland-protocols-4c015e90ae6c88f2ffa766e899387ef431eade49_GH0.tar.gz) = 67394
+SHA256 (FFmpeg-nv-codec-headers-33a9ede8d9914299d9262539c576a15bd0a19621_GH0.tar.gz) = edea75e86115072797224a28d29b114009857b10e11e630f54ecb1909fe92a35
+SIZE (FFmpeg-nv-codec-headers-33a9ede8d9914299d9262539c576a15bd0a19621_GH0.tar.gz) = 83821
diff --git a/multimedia/sunshine/files/patch-cmake_targets_common.cmake b/multimedia/sunshine/files/patch-cmake_targets_common.cmake
new file mode 100644
index 0000000..d739eb4
--- /dev/null
+++ b/multimedia/sunshine/files/patch-cmake_targets_common.cmake
@@ -0,0 +1,16 @@
+The port vendors node_modules at fetch time (pre-fetch), so the "npm ci"
+step would fail without network access. Only run the actual web UI build.
+
+--- cmake/targets/common.cmake.orig
++++ cmake/targets/common.cmake
+@@ -54,8 +54,7 @@
+
+ add_custom_target(web-ui ALL
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+- COMMENT "Installing NPM Dependencies and Building the Web UI"
+- COMMAND "$<$<BOOL:${WIN32}>:cmd;/C>" "${NPM}" ci ${NPM_INSTALL_FLAGS}
+- COMMAND "${CMAKE_COMMAND}" -E env "SUNSHINE_BUILD_HOMEBREW=${NPM_BUILD_HOMEBREW}" "SUNSHINE_SOURCE_ASSETS_DIR=${NPM_SOURCE_ASSETS_DIR}" "SUNSHINE_ASSETS_DIR=${NPM_ASSETS_DIR}" "$<$<BOOL:${WIN32}>:cmd;/C>" "${NPM}" run build # cmake-lint: disable=C0301
++ COMMENT "Building the Web UI (npm dependencies are vendored by the port)"
++ COMMAND "${CMAKE_COMMAND}" -E env "SUNSHINE_BUILD_HOMEBREW=${NPM_BUILD_HOMEBREW}" "SUNSHINE_SOURCE_ASSETS_DIR=${NPM_SOURCE_ASSETS_DIR}" "SUNSHINE_ASSETS_DIR=${NPM_ASSETS_DIR}" "$<$<BOOL:${WIN32}>:cmd;/C>" "${NPM}" run build # cmake-lint: disable=C0301
+ COMMAND_EXPAND_LISTS
+ VERBATIM)
diff --git a/multimedia/sunshine/files/patch-src_platform_linux_wlgrab.cpp b/multimedia/sunshine/files/patch-src_platform_linux_wlgrab.cpp
new file mode 100644
index 0000000..a7349db
--- /dev/null
+++ b/multimedia/sunshine/files/patch-src_platform_linux_wlgrab.cpp
@@ -0,0 +1,11 @@
+--- src/platform/linux/wlgrab.cpp.orig
++++ src/platform/linux/wlgrab.cpp
+@@ -418,7 +418,7 @@
+ return nullptr;
+ }
+
+- if (hwdevice_type == platf::mem_type_e::vaapi || hwdevice_type == platf::mem_type_e::cuda) {
++ if (hwdevice_type == platf::mem_type_e::vaapi) {
+ auto wlr = std::make_shared<wl::wlr_vram_t>();
+ if (wlr->init(hwdevice_type, display_name, config)) {
+ return nullptr;
diff --git a/multimedia/sunshine/files/patch-src_video.cpp b/multimedia/sunshine/files/patch-src_video.cpp
new file mode 100644
index 0000000..e79e664
--- /dev/null
+++ b/multimedia/sunshine/files/patch-src_video.cpp
@@ -0,0 +1,10 @@
+--- src/video.cpp.orig
++++ src/video.cpp
+@@ -134,6 +134,7 @@
+ // Setup the input frame using the caller's img_t
+ sws_input_frame->data[0] = img.data;
+ sws_input_frame->linesize[0] = img.row_pitch;
++ if (!img.data) { return 0; }
+
+ // Perform color conversion and scaling to the final size
+ auto status = sws_scale_frame(sws.get(), requires_padding ? sws_output_frame.get() : sw_frame.get(), sws_input_frame.get());
diff --git a/multimedia/sunshine/pkg-descr b/multimedia/sunshine/pkg-descr
new file mode 100644
index 0000000..3f28cb5
--- /dev/null
+++ b/multimedia/sunshine/pkg-descr
@@ -0,0 +1,10 @@
+Sunshine is a self-hosted game stream host for Moonlight. It offers low
+latency game streaming with support for AMD, Intel, and NVIDIA GPUs for
+hardware encoding; software encoding is also available. You can connect
+to Sunshine from any Moonlight client on a variety of devices. A web UI
+is provided to allow configuration and client pairing from your favorite
+web browser.
+
+On FreeBSD, Sunshine supports X11 and Wayland (wlr-screencopy, KWin, and
+XDG portal/PipeWire) capture, VA-API and Vulkan video encoding, and
+virtual input via /dev/uinput.
diff --git a/multimedia/sunshine/pkg-install b/multimedia/sunshine/pkg-install
new file mode 100644
index 0000000..ae573d3
--- /dev/null
+++ b/multimedia/sunshine/pkg-install
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# The 'input' group is not registered in the ports tree's GIDs, so the
+# GROUPS framework cannot create it. Mirror what upstream's own FreeBSD
+# package does in its +POST_INSTALL script.
+
+if [ "$2" = "POST-INSTALL" ]; then
+ if ! /usr/sbin/pw groupshow input >/dev/null 2>&1; then
+ echo "Creating 'input' group for virtual input devices..."
+ /usr/sbin/pw groupadd input
+ fi
+fi
diff --git a/multimedia/sunshine/pkg-message b/multimedia/sunshine/pkg-message
new file mode 100644
index 0000000..b9b023e
--- /dev/null
+++ b/multimedia/sunshine/pkg-message
@@ -0,0 +1,25 @@
+[
+{ type: install
+ message: <<EOM
+
+Virtual input (keyboard, mouse, gamepads) requires your user to be in
+the 'input' group:
+
+ pw groupmod input -m <user>
+
+Log out and back in for the change to take effect. You may also want a
+devfs rule so /dev/uinput is accessible to the group, e.g. in
+/etc/devfs.rules:
+
+ [sunshine=47989]
+ add path 'uinput' mode 0660 group input
+
+Sunshine must run as the logged-in user inside the graphical session
+(Wayland or X11) -- start it from your compositor's autostart, not from
+rc.d.
+
+On first run, browse to https://<host>:47990 to create admin
+credentials, then pair each Moonlight client with the PIN flow.
+EOM
+}
+]
diff --git a/multimedia/sunshine/pkg-plist b/multimedia/sunshine/pkg-plist
new file mode 100644
index 0000000..2b2f7f5
--- /dev/null
+++ b/multimedia/sunshine/pkg-plist
@@ -0,0 +1,98 @@
+bin/sunshine
+share/applications/dev.lizardbyte.app.Sunshine.desktop
+share/applications/dev.lizardbyte.app.Sunshine.kwin.desktop
+share/applications/dev.lizardbyte.app.Sunshine.terminal.desktop
+share/assets/apps.json
+share/assets/box.png
+share/assets/desktop-alt.png
+share/assets/desktop.png
+share/assets/shaders/opengl/ConvertUV.frag
+share/assets/shaders/opengl/ConvertUV.vert
+share/assets/shaders/opengl/ConvertY.frag
+share/assets/shaders/opengl/Scene.frag
+share/assets/shaders/opengl/Scene.vert
+share/assets/shaders/vulkan/rgb2yuv.comp
+share/assets/steam.png
+share/assets/web/apps.html
+share/assets/web/assets/Checkbox-_zq52Lmd.js
+share/assets/web/assets/Navbar-e42_J4ze.js
+share/assets/web/assets/Navbar-vHSgVmbh.css
+share/assets/web/assets/Notification-CVXXWQML.css
+share/assets/web/assets/Notification-E6BjStlk.js
+share/assets/web/assets/ResourceCard-BdWfmJX4.js
+share/assets/web/assets/SimpleIcon-BGMhT-IK.js
+share/assets/web/assets/apps-By4QjfNI.js
+share/assets/web/assets/config-B_QFm8FU.css
+share/assets/web/assets/config-Ceh7-s-9.js
+share/assets/web/assets/createLucideIcon-BL5QWnkG.css
+share/assets/web/assets/createLucideIcon-mjjtyxlm.js
+share/assets/web/assets/css/sunshine.css
+share/assets/web/assets/download-30STmUeh.js
+share/assets/web/assets/featured-CUyJLtGo.js
+share/assets/web/assets/fetch_utils-9iXjNOiI.js
+share/assets/web/assets/file-text-DLPhJfqV.js
+share/assets/web/assets/gamepad-2-DxOHyImA.js
+share/assets/web/assets/index-k68q3BDp.js
+share/assets/web/assets/locale/bg.json
+share/assets/web/assets/locale/cs.json
+share/assets/web/assets/locale/de.json
+share/assets/web/assets/locale/en.json
+share/assets/web/assets/locale/en_GB.json
+share/assets/web/assets/locale/en_US.json
+share/assets/web/assets/locale/es.json
+share/assets/web/assets/locale/fr.json
+share/assets/web/assets/locale/hu.json
+share/assets/web/assets/locale/it.json
+share/assets/web/assets/locale/ja.json
+share/assets/web/assets/locale/ko.json
+share/assets/web/assets/locale/pl.json
+share/assets/web/assets/locale/pt.json
+share/assets/web/assets/locale/pt_BR.json
+share/assets/web/assets/locale/ru.json
+share/assets/web/assets/locale/sv.json
+share/assets/web/assets/locale/tr.json
+share/assets/web/assets/locale/uk.json
+share/assets/web/assets/locale/vi.json
+share/assets/web/assets/locale/zh.json
+share/assets/web/assets/locale/zh_TW.json
+share/assets/web/assets/logout-DiLZqZLO.js
+share/assets/web/assets/monitor-DGvs6yC0.js
+share/assets/web/assets/password-CHVIwd7n.js
+share/assets/web/assets/pin-DugfOfma.js
+share/assets/web/assets/rotate-ccw-DTIrC0O4.js
+share/assets/web/assets/save-DWz7vErV.js
+share/assets/web/assets/trash-2-YONst-Qs.js
+share/assets/web/assets/troubleshooting-D5oZ-p-S.js
+share/assets/web/assets/welcome-BuhUsvon.js
+share/assets/web/config.html
+share/assets/web/featured.html
+share/assets/web/images/logo-sunshine-16.png
+share/assets/web/images/logo-sunshine-45.png
+share/assets/web/images/sunshine-locked-16.png
+share/assets/web/images/sunshine-locked-45.png
+share/assets/web/images/sunshine-locked.ico
+share/assets/web/images/sunshine-locked.png
+share/assets/web/images/sunshine-locked.svg
+share/assets/web/images/sunshine-pausing-16.png
+share/assets/web/images/sunshine-pausing-45.png
+share/assets/web/images/sunshine-pausing.ico
+share/assets/web/images/sunshine-pausing.png
+share/assets/web/images/sunshine-pausing.svg
+share/assets/web/images/sunshine-playing-16.png
+share/assets/web/images/sunshine-playing-45.png
+share/assets/web/images/sunshine-playing.ico
+share/assets/web/images/sunshine-playing.png
+share/assets/web/images/sunshine-playing.svg
+share/assets/web/images/sunshine.ico
+share/assets/web/index.html
+share/assets/web/logout.html
+share/assets/web/password.html
+share/assets/web/pin.html
+share/assets/web/troubleshooting.html
+share/assets/web/welcome.html
+share/icons/hicolor/scalable/apps/dev.lizardbyte.app.Sunshine.svg
+share/icons/hicolor/scalable/status/dev.lizardbyte.app.Sunshine-locked.svg
+share/icons/hicolor/scalable/status/dev.lizardbyte.app.Sunshine-pausing.svg
+share/icons/hicolor/scalable/status/dev.lizardbyte.app.Sunshine-playing.svg
+share/icons/hicolor/scalable/status/dev.lizardbyte.app.Sunshine-tray.svg
+share/metainfo/dev.lizardbyte.app.Sunshine.metainfo.xml