Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
72 changes: 72 additions & 0 deletions .github/ISSUE_TEMPLATE/plugin_listing.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Plugin marketplace listing
description: Request a Sunshine plugin marketplace listing or listing update.
title: "[Plugin Listing]: "
labels:
- plugin-marketplace
- listing-request
body:
- type: markdown
attributes:
value: |
Use this form to request a marketplace listing, update, deprecation, or delisting.
Security-sensitive reports should use the project's private security advisory flow instead of a public issue.
- type: input
id: plugin_id
attributes:
label: Plugin ID
description: Reverse-DNS id from plugin.json.
placeholder: com.example.sunshine-plugin
validations:
required: true
- type: input
id: repository
attributes:
label: Plugin repository
description: GitHub repository that owns the plugin source and releases.
placeholder: https://github.com/example/sunshine-plugin
validations:
required: true
- type: dropdown
id: request_type
attributes:
label: Request type
options:
- New listing
- Listing update
- Deprecation
- Delisting
- Blocklist review
validations:
required: true
- type: textarea
id: summary
attributes:
label: Summary
description: What does this plugin do, and why should it be listed?
validations:
required: true
- type: textarea
id: capabilities
attributes:
label: Capabilities
description: List every capability the plugin requires.
placeholder: |
- filesystem.plugin-state.write
- driver.nvidia.profile.write
validations:
required: true
- type: input
id: release
attributes:
label: Release URL
description: GitHub Release URL containing the plugin package.
placeholder: https://github.com/example/sunshine-plugin/releases/tag/v1.0.0
validations:
required: false
- type: textarea
id: notes
attributes:
label: Maintainer notes
description: Compatibility notes, review context, or migration guidance.
validations:
required: false
56 changes: 56 additions & 0 deletions .github/workflows/plugin-registry.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Plugin Registry

on:
pull_request:
paths:
- "plugin-registry/**"
- "scripts/plugin-registry/**"
- ".github/workflows/plugin-registry.yml"
push:
branches:
- master
- main
paths:
- "plugin-registry/**"
- "scripts/plugin-registry/**"
- ".github/workflows/plugin-registry.yml"
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

jobs:
validate:
name: Validate registry
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- name: Validate generated index
run: node scripts/plugin-registry/build-index.js --check

deploy-pages:
name: Publish registry
needs: validate
if: github.event_name != 'pull_request' && github.repository == 'AlkaidLab/sunshine-plugin-registry'
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- name: Generate index
run: node scripts/plugin-registry/build-index.js
- uses: actions/configure-pages@v5
- uses: actions/upload-pages-artifact@v3
with:
path: plugin-registry
- id: deployment
uses: actions/deploy-pages@v4
4 changes: 4 additions & 0 deletions cmake/compile_definitions/common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ set(SUNSHINE_TARGET_FILES
"${CMAKE_SOURCE_DIR}/src/globals.h"
"${CMAKE_SOURCE_DIR}/src/logging.cpp"
"${CMAKE_SOURCE_DIR}/src/logging.h"
"${CMAKE_SOURCE_DIR}/src/plugin.cpp"
"${CMAKE_SOURCE_DIR}/src/plugin.h"
"${CMAKE_SOURCE_DIR}/src/plugin_http.cpp"
"${CMAKE_SOURCE_DIR}/src/plugin_http.h"
"${CMAKE_SOURCE_DIR}/src/main.cpp"
"${CMAKE_SOURCE_DIR}/src/main.h"
"${CMAKE_SOURCE_DIR}/src/crypto.cpp"
Expand Down
3 changes: 3 additions & 0 deletions cmake/packaging/windows.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
include(${CMAKE_MODULE_PATH}/packaging/FetchDriverDeps.cmake)

install(TARGETS sunshine RUNTIME DESTINATION "." COMPONENT application)
install(TARGETS sunshine-plugin-nvprefs
RUNTIME DESTINATION "${SUNSHINE_ASSETS_DIR}/plugins/com.alkaidlab.nvidia-control-panel-optimizer"
COMPONENT assets)

# Hardening: include zlib1.dll (loaded via LoadLibrary() in openssl's libcrypto.a)
install(FILES "${ZLIB}" DESTINATION "." COMPONENT application)
Expand Down
25 changes: 25 additions & 0 deletions cmake/targets/windows.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,31 @@ list(APPEND SUNSHINE_EXTERNAL_LIBRARIES
Windowsapp.lib
Wtsapi32.lib)

set(NVPREFS_PLUGIN_ID "com.alkaidlab.nvidia-control-panel-optimizer")

add_executable(sunshine-plugin-nvprefs
"${CMAKE_SOURCE_DIR}/src/plugins/nvprefs/nvprefs_plugin.cpp"
${NVPREFS_FILES})
target_link_libraries(sunshine-plugin-nvprefs PRIVATE
advapi32
nlohmann_json::nlohmann_json
libstdc++.a
libwinpthread.a)
target_compile_definitions(sunshine-plugin-nvprefs PRIVATE
${SUNSHINE_DEFINITIONS}
SUNSHINE_NVPREFS_STANDALONE)
target_compile_options(sunshine-plugin-nvprefs PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${SUNSHINE_COMPILE_OPTIONS}>)
set_target_properties(sunshine-plugin-nvprefs PROPERTIES
CXX_STANDARD 23
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR})
add_custom_command(TARGET sunshine-plugin-nvprefs POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:sunshine>/assets/plugins/${NVPREFS_PLUGIN_ID}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "$<TARGET_FILE:sunshine-plugin-nvprefs>" "$<TARGET_FILE_DIR:sunshine>/assets/plugins/${NVPREFS_PLUGIN_ID}/$<TARGET_FILE_NAME:sunshine-plugin-nvprefs>"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/src_assets/windows/assets/plugins/${NVPREFS_PLUGIN_ID}/plugin.json" "$<TARGET_FILE_DIR:sunshine>/assets/plugins/${NVPREFS_PLUGIN_ID}/plugin.json"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/src_assets/windows/assets/plugins/${NVPREFS_PLUGIN_ID}/config.schema.json" "$<TARGET_FILE_DIR:sunshine>/assets/plugins/${NVPREFS_PLUGIN_ID}/config.schema.json"
VERBATIM)

# GUI build (optional — CI uses pre-built binary from GUI repo releases)
# For local development: ninja -C build sunshine-control-panel
find_program(NPM npm)
Expand Down
Loading
Loading