Add Docky plugin - #1102
Add Docky plugin#1102datbird wants to merge 8 commits into
Conversation
Issues FoundNo issues with your PR description were found. Next Steps
Thank you for your contribution! If you need any help, please reach out on our Discord server. ❤️ |
|
Completed the community testing requirements, now three plugins. All were built from source at each PR's pinned commit and tested on a Steam Deck OLED running SteamOS 3.8.16 Stable. The first two on Decky Loader v3.2.6, the third on v3.2.8. Testing reports:
All three work as advertised. I've reported what I found in each, including a few backend issues worth a look, and left all three installed so I can re-test if the authors push changes. Still looking for a third party to test Docky on SteamOS Stable or Beta. Happy to help however is useful in the meantime. |
|
This pull request is stale as no updates or testing reports have been posted within the last 7 days. Please ensure you are actively recruiting testers or resolving the issues discussed. If you do not remove the stale label or comment, this will be closed in 7 days. Please close this pull request if you need more time to resolve issues so we can keep our repo healthy. |
|
Continued efforts to try and get plugin tested and approved have been fruitless on the Decky plugin Discord. I am continuing to stay engaged on the Discord and recruit testers. Please keep the PR open until I get someone to review. |
On this plugin's authorship historyI would rather state this up front than have a reviewer find it on their own. In mid July I posted Docky in the Decky Discord looking for testers. AAGaming That is what I did. The git history shows it plainly rather than hiding it. Everything up to commit Every commit after that point is mine, with no trailer. That is 17 commits from "I refactored it" is easy to say and hard to verify, so here is what actually
I am not claiming the plugin is flawless. I am claiming I understand it well If the history still disqualifies it, I would rather hear that directly than keep |
|
This pull request is stale as no updates or testing reports have been posted within the last 7 days. Please ensure you are actively recruiting testers or resolving the issues discussed. If you do not remove the stale label or comment, this will be closed in 7 days. Please close this pull request if you need more time to resolve issues so we can keep our repo healthy. |
|
This is not stale and I remain actively attempting to recruit testers for this plugin. |
|
This pull request is stale as no updates or testing reports have been posted within the last 7 days. Please ensure you are actively recruiting testers or resolving the issues discussed. If you do not remove the stale label or comment, this will be closed in 7 days. Please close this pull request if you need more time to resolve issues so we can keep our repo healthy. |
|
This is not stale and I remain actively attempting to recruit testers for this plugin. |
|
This is actually a really cool plugin. I don't have a steam dock, unfortunately, but I really liked the fan controls that were implemented. The TDP cap that stays enforced per profile is also something I can't believe hasn't been implemented yet. I would use it all of the time! The only issue that I saw was privilege escalation where the code chowns its config to the "user" so it looks like anything running as deck could edit the config and get a command run as root on the next dock. Also, is it running the legacy plugin API? |
|
Thanks for the review, and glad you liked the fan control and the enforced TDP profiles! You are right about the config. The backend runs as root and a task can run any command, so a config the deck user can write is a free path to root. Fixed for 1.4.9: Yes, it is the legacy I will re-pin the submodule once 1.4.9 is tagged. |
|
v1.4.11 is up and the submodule is re-pinned to it. Both fixes from the review above are in, and I tested both on my own Deck (OLED, SteamOS 3.8.16 Stable, Decky 3.2.8). The config move: While I was in there I fixed a second problem the same review made me look at. The plugin was being SIGKILLed on every unload, so its fan hand-back never ran. The cause is that an await inside Sunshine and its bwrap child are still left running on purpose, so a loader restart never interrupts a live stream. This is ready for someone else to test. Since the build here needs maintainer approval before the testing store can serve it, the easiest route is Decky's developer mode, Install Plugin from URL: https://github.com/datbird/docky/releases/latest/download/Docky.zip Happy to answer anything or fix what a tester finds. |
There was a problem hiding this comment.
code is fine but i think this plugin encroaches on the functionality of a lot of other plugins and those functionalities should instead integrate with those plugins or be contributions to them?
not going to fully block for that but please think about it. maybe we can chat about this in #plugin-dev
i'll let it into testing at least
Thanks for the approval, and for the honest note. You are right that there is duplication on the surface. The heart of Docky is a trigger engine with one UI in front of it. Detect something in the environment, then run what the user configured. Dock and undock, AC power, controller connect, resume from sleep, startup. Most of the duplication sits on the action side, and the reason is that a plugin cannot call another plugin's backend. I cannot ask Fantastic to apply a fan curve when I dock, so Docky has to own the fan. Same story for TDP and PowerTools. If there is an inter-plugin path I missed, I would rather delegate than duplicate, and I will build the integration. Sunshine is a slightly different case. decky-sunshine covers the common path well, but the install and config hooks I needed were hard to reach from outside it. I kept my own option and left the choice to the user, and I am happy to keep both. I did look before I built. Of the 110 plugins in the live store feed, none is a general trigger engine. Bash Shortcuts comes closest with its Hooks, but those fire on Steam software events (log in, game start, sleep, shutdown), not on hardware state, and its upstream repo is archived. AutoSuspend, PowerTools and Steamback each do one fixed rule. Happy to talk it through in #plugin-dev. If I did overlook one, point me at it and I will integrate instead. |
|
Already had a chance to test it earlier but wanted to test once more to try it out but works great! The built-in actions are something I wish Steam would've originally put in. |
Add Docky to Plugin Store
Docky is a Steam Deck automation plugin on a Task → Action → Mode model, run manually or by triggers (dock/undock, AC power, controller connect, resume, startup). It ships built-in dock fixes (docked-audio sink switch, controller order, gamescope composition/stretch, TDP cap), a temp→RPM fan-control engine with named profiles, and full Sunshine game-streaming control.
How it differs from decky-sunshine: decky-sunshine only starts/stops Sunshine. Docky is a broader automation framework whose Sunshine support is one integrated Action — it can drive Sunshine directly or defer to decky-sunshine — and adds self-healing mDNS discovery, capture-health recovery, and Sunshine⇄Desktop GPU coexistence not offered elsewhere.
Root disclosure: Docky declares
flags:["root"]. For Sunshine KMS capture, it creates a setuid-root copy of the system's ownbwrapunder/var/lib/docky(root-owned chain;/tmpand/runarenosuidon SteamOS). Rationale and the security hardening (TOCTOU guards, clean_env, subprocess timeouts) are indocs/design-notes.mdanddocs/decky-integration.md. It bundles no third-party binaries — the backend is pure Python, the frontend builds from source.Repo: https://github.com/datbird/docky (v1.4.8)
Task Checklist
Developer
Plugin
Backend
Community
Testing