From 058630f542d29c88ad9305461f76dd1a8b94df6a Mon Sep 17 00:00:00 2001 From: enricobuehler Date: Fri, 3 Jul 2026 17:16:40 +0000 Subject: [PATCH] feat(decky): visible branded Steam shortcut, one-tap client updates, fullscreen-page polish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The "Punktfunk" shortcut is no longer hidden: it now ships committed artwork (grid/wide/hero/logo/icon, generated by scripts/gen-steam-art.py — a pure-stdlib SDF renderer drawing the lens mark + a monoline "punktfunk" wordmark) applied via SetCustomArtworkForApp / SetShortcutIcon. Existing installs are unhidden and re-arted once per ART_VERSION; relaunching the library entry streams to the last host. - Updates cover the flatpak CLIENT too: check_update compares the user-scope installed commit against its remote, applyUpdate runs `flatpak update --user` first (awaited) and the plugin reinstall — which reloads the panel — last; docs spell out the sudo-less --user update ("sudo flatpak update" silently skips per-user installs). - Fullscreen page: DialogButton stretches to 100% width in the gamepad UI, so the Stream/Pair/Refresh/… actions filled whole rows — sized to content + right-aligned now; the header drops its Update button (About tab + QAM banner keep the flow) and the back button gets a real 40px hit target. - Settings: the disable-Steam-Input note also shows for Automatic — on a Deck that now forwards the built-in controller as a Steam Deck pad (paddles/trackpads/gyro), which needs Steam Input off for the shortcut. Co-Authored-By: Claude Fable 5 --- clients/decky/README.md | 2 +- clients/decky/assets/grid.png | Bin 0 -> 45984 bytes clients/decky/assets/gridwide.png | Bin 0 -> 41023 bytes clients/decky/assets/hero.png | Bin 0 -> 63998 bytes clients/decky/assets/icon.png | Bin 0 -> 14052 bytes clients/decky/assets/logo.png | Bin 0 -> 11919 bytes clients/decky/main.py | 155 +++++++++++- clients/decky/scripts/gen-steam-art.py | 297 +++++++++++++++++++++++ clients/decky/scripts/package.sh | 4 +- clients/decky/src/backend.ts | 28 ++- clients/decky/src/hooks.ts | 97 +++++--- clients/decky/src/index.tsx | 14 +- clients/decky/src/page.tsx | 65 +++-- clients/decky/src/settings.tsx | 4 +- clients/decky/src/steam.ts | 75 ++++-- docs-site/content/docs/install-client.md | 5 +- docs-site/content/docs/steam-deck.md | 38 +-- 17 files changed, 682 insertions(+), 102 deletions(-) create mode 100644 clients/decky/assets/grid.png create mode 100644 clients/decky/assets/gridwide.png create mode 100644 clients/decky/assets/hero.png create mode 100644 clients/decky/assets/icon.png create mode 100644 clients/decky/assets/logo.png create mode 100644 clients/decky/scripts/gen-steam-art.py diff --git a/clients/decky/README.md b/clients/decky/README.md index 3967d26..76454a9 100644 --- a/clients/decky/README.md +++ b/clients/decky/README.md @@ -17,7 +17,7 @@ the panel looks and feels native to Gaming Mode. fingerprint to cross-check against the host's log). 2. **Pair** — for a host that requires it, a gamepad-navigable PIN keypad runs the SPAKE2 pairing ceremony headlessly, then remembers the host so future streams connect silently. -3. **Stream** — launches fullscreen via a hidden Steam shortcut so gamescope focuses it. +3. **Stream** — launches fullscreen via a branded "Punktfunk" Steam shortcut so gamescope focuses it. 4. **Settings** — resolution / refresh / bitrate / gamepad type / host compositor / mic, written to the client's config. 5. **About** — plugin version, an explicit "Check for updates" button, the setup-guide link, and diff --git a/clients/decky/assets/grid.png b/clients/decky/assets/grid.png new file mode 100644 index 0000000000000000000000000000000000000000..d9a5b6b128293a2f3cff1fbee4a856b0b4b06ee0 GIT binary patch literal 45984 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 z%0A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

MN&St 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 TBycBAMz?D78riid~7 literal 0 HcmV?d00001 diff --git a/clients/decky/assets/gridwide.png b/clients/decky/assets/gridwide.png new file mode 100644 index 0000000000000000000000000000000000000000..de8e3537ae9b66abdf91105356c2f5e7add36a17 GIT binary patch literal 41023 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

2XZRv>Nplh4c& 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 literal 0 HcmV?d00001 diff --git a/clients/decky/assets/icon.png b/clients/decky/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f7650b38f5f63ffab4780810116a4fb4659ac072 GIT binary patch literal 14052 zcmW+-bwE?^_r42Y^k_u7O94?**Z>vj4kZTahmum1W*d#5l$1&;0!k{o4NCw3oxg$r80~rE__)js z0948iZs=GCPw(Ur3%GjQPDT+f)>*E$ZYWok9M`ztc5ZPOc;j5TKsq{fs!%RF&e=yn zoILPJ-iF4D>AV&k*}?B5o5W8fRhya&^5wIoRLzVZe*;3=DoR_-j?^dSY$j~xCT7%+ zy2G5stD$Zqho@ExyCih^eXd%b-tZCwS6x@jrJ62_*!v7t3@BM(k9R-QkdNp_JI*vd zYDTP(4euX*Xx`FSx_Ax4si8=p=YgNmM^Ms4V|VuH^6-RiX2)=u)`rMbT^-~-hUU)# z%^bghsbYWeLe}qg#P^3E_-S=exYv4b-m(Lw(%W%sCZUN6u_r3(z7G_|V7ETm{&>Zr1x$x8o8xSEc{ow~) z)XiBsYuCPhpC11?%NTl`cF<~&Pcuu8A@3K3*R}P&wF8L!&-l~J?VMWIU9qfDoQ#o= z8bIcyikZ{p?HSr_-NNt7BV{&fRse$d7M@NF-FzK!`@Q161`Ny?X_iad@xX9!FQiGx z`MaC|`>spEvX737h~nTyK)mj_HSU}HMZ)EvTepJ2iymH;BnvoV_H7btoCmE= zjNYQO3NVBZ{kClhP=2iQ4YOW%kgD+MhuHHoE(Q%(cJI~Z-nO3!SbF-PxqT>RvBCZI z4DG@KmZC*y zEgujo#Nt);aQ-iz=cW~g|CV(_3!ncZNt&UO-EBh6~%EMs*vuz(0xF(yF;2 z)0fPx0Nzx+EFX+2*jG&nhel4~`Zt z`;&V+w!`%*Q1Vs;vtQmGRNki9Ip7qccbQE~YEcrtT^==N4OwE1l+glS>t4bXmbXtX zC&446U2Z`2WN9Nm@xeS{S9=Wu!X!Dd!Jz`KgwEKfjK=|=r9sD?Z1)`$@^vI*u5S$U z#9--S*1qnCXO%2K{sh^$VNW#RUn=7r$KNL(bbZgKzXnKJ*-_B_csdd7hJB()q%u5; zISO46E&NkN@dIs#s|;fAqr$DwDw}+RzFzGm70%#t2%Qf6qnGd(5r2Dn?Cv`TB-2Pc zTX%#(eljXAZV+|l*m=w%Tlh@(zffA_PRT_EnT)+xOBa9>!_gl*@x(k0o|$jg=&K*D z-VM53C5>uH`FJkWr>jA>5(#Vza+~p@`cA(?$1GbI53kM9+|nojublZs)phShGrvR7 zzUjw+>MO{X)PjzLIz!4+WXP&h&08mnxm-A~`=wJEwSd+8HC~IC6sOOw^LqSd)%fGY z$|u_(i`lD*R&-$oN;=dPad{<9j zkMUHTwn&wMl;)|l8xPy*uG*UH)9FZmj5Lq!$lwD|hQ!_~QoTcjZn0|OolP;Hr*={A zokqQMLnSmB*Q-bnd-Z*vv04|QGMPIojeNIP;DjsOJzGLw$j+6dc>|%`ZH=9yN$f%U zq?Xgt+*@1Wvu`J|t~JyDU4y@e`>*@SYpuH9IqDW~w_1vi{bBxzOMWw)&->27n=wPP zdlQR6U&fZ1!S4T4d|}(y@5r5OTC*8Nja%HSuPU}CrB%DHv8iDt)QeO+dMr3bm!X;U zOc&YY(GGJqE=P-+X)gu)|EwYClDOwtKjO2;=;Dnh_3wbIO9_Q^2^Zfd`~UgG4me?j zD3~%P3A_Hk$M?QUD^03>noGJlmwYA(!Or_84U9Uq*Cs8fV-(Z^2Bl;~+F$+q#SclE zVU28x9nR?s85T&|S$!R+Eu5^z@p|DuDx`ylczXTiLK{K;$3NH}y4SB7r}AH~s`95l zW-et%X~7V7JJ=zS58O_Je1?xr@x9EnP*|P^`DOY+o7pI&Z&soa#&{fvE&u0tJ9>>9 z+s>@|6`DkNVKb9qNxgkH!SBzx2GDA~Xh_>5noOE`f)zB63xyJtC1&@D{QoQ|>71#k z7{YGxdS-acv$T=Yam#RJcP303bctBR9Lb)dC!D2?KM51Y867y$BbF2Dn;&+Rd@3*? zn#lWNm{82c!LS~(+*!9Q4z>KR`fxWE#a=2r@?&?sc$@Q=!kKZ)B?c21!Cwyk5}%Zg z`sy{R5N_$u&iKa>P?0|?%E(P?{}VPY3B9)zzOjxY>m-g!wYBX_YccxLtrr~F$*4#T zpE~RH#YHoK_JkN@L1XkA`&u@}-b$-m!4pomHT4U#|KJ+SR0K2H zJCcj{ZD2;L(c0M!(1NJu&&5G5H);nOPK%A>0U0>GZLd#^4KEIeQx@c+dx8d7*tpmRC z_yX7w1n)bg6t0%?Pi;mLu6JErt)Ai}grhYIwXK7bgxgOlP^(09kS?&fK+N!gY~7Q071 zo%b%MkF>C2k*j<3X=M3j))}J|HX*6&iPIILH<=zM?Vn8VWWS$f6^25g*f$dkNon`K zevoP(G85dC7}~oLZo0W557F~UF{Ib~E`O-ELlUt8y?6YtJsR$Rho&cZEeJ;n3bQ6z zt&RrBou8ne!)^;3=2c`eQS~-acS42ST<8$#D^!j(bqB#mPSNXfxWDPB1j4)HWuCrQ zc8`(+`Rh3q91m3&coNq^=hqkG_n0qhrCFz6mmS_$%ko14gz-hFU<+1mdU+`SJVQ^H zEh*jv9X>evY3pBNN}98K*-jznr5TE0cpPqjdfVNcmZHvb4Ce>u+8`^=&!&4HGhnf~T0BfU z-ey*1${INj&2k5YXq<7^RN`u%(q8jtrGBwpAdCMAqe5w9H$1N!nRKW)OSh*faSUIx zCO$Npj0~_FE~QxT^IdUn*l)g7b##we6A>JttnqMNH4Io)qX$fhJ`mvwyh71HN+M!N z5}h`p#=C>oVc_b$+?h$$Z;A5&EtQ>z^og6IxeSU(`OXPGN zL97JqoNQ4mfiNz(+>jTYTB610nO6m}pPzES?tA7FMiZ)NqWkB&%U`vcPf{JB7hN_$ z9nZpF~ zLx-&20EF`-#@6!4O_ZTgNeZuRxIi7wk%2R!zVZw+eWb$(9K#oxu-@^Y#iK3Mve!|N z0_GJDo@Z)!RFpFNmdgd*%PnKZpfrXr^x-mRH|K&Ut!|n5&`A#B2JRC>h9k-e8e(~< z%;n;rZxS%QYyia;^l86}LVl0S#ygyne;cA(Y=pQlzTXXBT$01c^%~TP^=wr${>KGp z^gcRiK4iU%rduw5qB<`bYoKGx+GZp~qAz2pp~t3HQhI(A92E&|V$IU@&`-{qoIUz>M^wxD;orx=$O0`$@Df!oMFoL~;LD{w2U= z^09}Zf>*71!v`a{Eu<$IIc~8S=O*0sec_p;@K?5lyAXKEfj%3q>&ilk;Dm|iq0Egp z;kLrU<(LE6HE;+rG5yCn9r~6ZUWZ@iN6o*)ev5Z2%_qNr0d4`nceQ~Lt8EC#>w-IE zaY_KU7zq2993Vzjvqf8n=hbx!-L|kiQz?9q*YW?tF#`)fFGr-1^{Q5@KM$lh9Q8jd zZ#OmB43)XfH#YOc4rv2O0IhOVnhHu!2r&O+!I|(qVQTutHq+g2&MiwB*1}UFgjuU#13n0oh zt@dYWD+qRgYrdyjo@s)n!3ZnHtIk=|i^G!Nr zUu2~Nc96~G$A%w`?{r;9QC;cyux_sJ~GhqktvR{zG2iMA~Q)e)qM=X)C zFEiK{Sh}twRL9IKW#Xu2w=u| zHq0!*uLCOPbw`U%N&vVBro{r?2T1EcumpxjEW`jFHs=$q2QZ+SYy=&~O^afl9^CbD zb4*Or&eftARRPj&48RCn5sKurqdK-sU^)ViRENwQ&S(Zv-kG>tt`i+Imd~&1wf*Wc zr|BWsQB{`85e|Tw(;1yoIl^qyEC;U)1ty_2Uv@rNrL_pN|>m} z=S!y;0qXtZ09uv@n7~tv=3cwtpBf+~6J+fX3-Te1_k^0=d4@5r#)$YXEKF~|v_CUS z2aVYV)p3e4TU^8?8g#vBpukJFCDtD`#i|0^a*#0MBhc7QCg5KHU`=7KB{!XM62Aj* zF-#^S@!{29k@F)3D})L#QPj6ysM%lF@vx|WOhWNX+_op2}TpTr}y#Arw>2Z=|nQ(P= zb^>$N8$|o`B0R~Mm=ZzIcQ~WFe)lZI5YtSqd;ho7ey{wzTZC)EI3S(q3j`nTk4|ju zEq*{)lC1VljmChQq3SF1CncPsmxynQ*rdzm00L77%c+Ztrd0>|m+KSjDK+jpy4QK3 zCvGnPhLPXxuy3S*ZwhBOGyulu4ZxpQRQ0$t6gd|$y{lRMSZu>NSjJw(pHVF!95K~Q z@$^6VmEHLt4?nG)6JDj!Z9Qx;wx0@ar}RA9Cl{?OzKTzY?w2a<&}*PVX4}?<7W;;f8`niV4eFHwqMtuJcFN}OpeB!5elr)ge63$ zre8i(K`Vrxzwsf%Yc@;f?UAC=aGnRN)?1euG=16MK;Q$GxKh;HTy|G)wz zIz=ODQ%zXk2bZx|SW}}%z`_AQ(;sy}4U$?q3J9N3Yh3|x5>?-oiu2qr?U?$9s|l2| zS5={}nm@UZ@Gh00~h%NG;8J=uEYChX>&^(Kw@W9 zzP{sy#PGul9lYMu7Yo$#a&p#@8CKJm@a+E5x7Ndqe*ltrc!r6}&cqqDJ#F-8<2B@w20phYzL1t0$$7gy&yiiUY&A|K9O`@jqM z2ttvplE7>xHL0bVHfRA~Yd%noKmIEPW(4xwGacA|JFW^n{m)&U30n`R#ipK8P3cak zXIVgv997}^dec}!^*>T=CmnW(&Myxd;>h?njp#1h(aR5%o8)jfb9S^RqMm-1Q_+ z8%XzZ>HBQb4j)ykyWTxuWM7=UqLEXr6TrRKL5rn{-*3Yt9uNMGr8%=~piuGU+AY0k(Y&y2Q(1o}dM(EJ1_t zA)sPC-3kSkYdHBYtk&7jBU}84Cj-OP|DsP!Z%IObe$bUs(cJlW{JIbA`H!+eLCb~s z2|Y@a4COEX%Lc>xdI7WkNBS~ih`%C5uJ>@Wq7TAZI|}NY$~l>_-2EW)8|so@Nz?xK zf$i(miH!7xQHbu1$1@Y3?+maUF`NI1MpTG&Z~&J!1pxO-wD8etJb%c_jbiZP%DGj^ zNj;cRd_m0Qkl_VhML~q$Tmon{6in_A&(x&G7+G+^x{0PPa|8V)D>x`EvSb*@sSN-0 z!x$9uIpGQIUC#-{Z3c0TH`5%v`7vH|7LUf}0OqIRmPH>upx6D^tF1Hu>vqiQgH_$d z!83f3@bMDrOt8D|h4a5MMtVeQDTPSypR7YIOsT!*v3u7k#Sz$UCVb1tMy>rdyH(9# zp4P2*OXbB`OQ1l!8o&+6ncQHKpn2+BNb~9fR>b8so3!E{Oq}#qNs3mk0ay`JeIHBa zi%*U=YrohgyLjeT0Oj#ZU6zuh^7+L^P;c)c9)IIm45g%fMifl1v!3bY7B?jYXk7s* zHay|vZ>8FkpvahVtowtP@Xw^6App(>XpUkeDpynRwE!2<_AM?tIYhPiA@BvpjHMhK z{jfy)=r104*n<4p9_wloC%F|YKx4}mzyoPa&Dafb#5;BRN4|v;I<00+*H{8gflZ9* zb$%UG_D>q$Hp=)HW}s4G@rWahDe|nL#4md>N`0p8q3Z9GlJx68Q9);=mk zidQoT;8}0h2i2I{0~NgOGL>s7UO|OJ`v3dFDzpA7T(utYCT&O8ArtoW_{@?P+f_b# zLm4XACe;=S`8kO$-^g&)UBj{k^_fvDo`0u!HuSc-`0kJ;X)T`NF-l>uAzhh9cw zC#2)ucQxeCF`j*|tz(+QYYTMlw$0L@v5^Y^-JNcEq1e?9(3Er8W}S*4YFc{FOBTTd#6wT(zT=qH z!pI06lR*ui8%{i^y;HM8vX~jgpq4_DrH*;hj@sLi8pS`{6}g-)Zg%gflQ|#{X9u`w zAeJ8StrYL8fwa!S^3x3<2U`mF&+LLq0TX>DtULnjqVo}oyaK&N7ijcqE(Qsmmp?qv z{NBc_=HBavjOgW-#(g?e%_ZHRK9QnB8ree%JKq2`AHbJe_OHo2=4-Y4-yJf+<=rR- z+x+?4{*JXT82jJRi73Da11VY&Az8P;Lx?!tTp1~uA3)BQxPr>gg zLCl80^1Xc8L5J3L7I0yj67aeLl&ZsmEqVRa(mApfzI>_653QwPqO)~M9>T{Jk-q>N zJ+#Qkkj4JXz!iVcSPw7of(%M65APhmEv}HJ(zl}{_l<8*2s-!6!yvUfoVPq{UbOe9 z@Q(EJJwEbMJoR}DSuAfD&U}MuPEMR`({n6VH^R?a0IQ*JAZU(kB~uaK%KllVt45Hg9zEz@*uH#S8gY&h-3K_Y z&>-Jj1KdJ*fTlyH!}z`q<5bMD-Bjb+MGq!`lXd!+t2XN%m8Z*COYgr0pG5QG}*jkK;$S#$N*pQL65SiOJTr< zEO0{`)=FsQDSi&Z#hd5JlD8ok$YOKS87tN%dJo&DKBMEgE1a>w4~Pz9vQDXsfs&{XjgSUg_0aAf>pmgVhL z7~F|p!w7jF#qPBKjtN|-F#TF%*0S~lwUVGf;zsEvDg0Q}6I_bT7uo%7U>a~e2T;tD zsPWrNDaMLi_g-!5o~P|xHJSIN@pU+LKhL0v=Ae{{ZX=*;c8V3`Gro->GX`MR01@Ym z5eMX}59=AR&&_E8E$9@uql&?U_GIBePR7YzJ($1sV3yv@msPN7{LL%uQ!xafWfBxU z6s2UI)xbN1$T*L_zm?-80O@Y+JAIE(^%DixfbCT&8mux=j|12|p580N=bnS(FL+F` zW(zzVK#G|uy};B3Z!OrLOh20cYU4$c(twUiN>Yv;#$pYlePmq#fQ9vmy6)O+!`*RA zdAB$iugV8NYL~AQ2T<=_*k*58FIeo4ycr2&$VYn&^?FmPJAhL+HwL+A@3=S>s+S3w<|@%(rGx__Ek%6dddCXqA44~SK}{RJte-sr;b9sFku zQEbkJ2`;1UN-`6q^V7!Yh6NU~kP|e-turHbmRUQ}N8EMXyDJN;!WpFtv_95YvpN4~ zkbC_mrPVb-6tjEpX7Ek)&ND>#R>3sbp3d^Yn-u*&+#MJ|3%`}|?mYaux z2^y>8aZJP<+K4OMk^^GQ#4=OyxX>psh*m;?I^R|OP4qcX^grog1;LhYts^j<8Qe@; zmC@6F`#;7HvU5L5@w62|djsMrU|ac6BZtBMP!x?(bH3FOL9ei3(|ODmqvcW74Eri` z7b1)A7am47F=XIo#W7ca#jWZ=#EmqZ(2ySkRz3?*95#aiH_$6FDCJUeG2nms+~7l9 zScwV)6S{!zj*!RII=GY{eZKltiC6=@K;JNkHCL6jJxJDup-*J^nk+;5a{roL&nSvv zEq=NDKb&a91=;q{(Uio3jl)`%Qy0y%gcsTZ1XJ9dzFR_ig9V*qOYvXvjExoe%%9R zEZFOIpmP!dpkBlX#M^Wfong{-i$!>H&srhGBY?N4f)brIftxzmS{Q61H7Hh4OrmTt z3*e5K87$o%<;D3T>g!*nyw|EbhDI$(tXDE9rnc0;6%Gu_7UMUBaRn`IsUVj|-k?Qe zZ|jZlV>)8VV)n#?_f*jt8JzAps;38hWvVBiNCN!Ups*@Z{`rg-F1GeMqi6LH$v+lO zCkjrMP{Bi(5nz8;W$_22bK3d-B7CwLGYWP-U>?;cOe~DXW9Bodihx%p;-``>YrLa? zmz+{)36ks>Sv#pEf4(rcwV&;(nPK(2X9Yq$2x13o{mGw8^~Wdc_wI%()t)u3v?VI8 zw8iGso;@!;wNLq{lD~DIf4689Kl5T&^s)|aTf+UQ>DN0T$5qv6%q2&X|6;Q#Lz>&U z;VmfQ^$z}J=d21Xy+mZ|QM_}>jX+1%C@Fj~ALM zE4?SJS5^yU<|DDr|7yHrnC3PcF+95B6mh!=m6h`3Sb{`y^+QbQ*C2L}Ey0au}djel{)yq-P3|FS3z;c|@7?Gp>~2;U<=6WWf7bES9- zanbMteyTSz=eS=4>~;uQoMJERX9Ij3$sMaa7NpuL3Zu6zm6pU?y+0vD+wtTYP|{0< zmnNr$G7PCE>gGv%-+sW1keJr99>_uHxk^WWY1S0NDM{S|g^tP@}4MXV}02Plt*lbp4e*=wijkqcZW0<_3VpI8@W z;1q7&5LYbxVYGL>Jp*1KPc8H(GJ4`2z#Z23@w;K}KjweTV3`3)qI)5Jk}+L~2k0ut zhU(j3uM1w+vY*EF%W8{ap1m(XWsvhOud;?7Rr9oy!gzt=86Xr^aVM~xQ=B=+>Pv3r zDvv0l>d^0`;V`I)6lO!Y2yuBG-vD}UgLLXG;}q}x9k52HQm*Zrt^gxC$e(ACNN*aA zs4jNYyV2wr09Ma1)o>DTnZfC{Go{617r}<7GbhCdA5DUVt%&LGm7PknqBR&wd>D#d z2Zq9#n*?&UW-#TA3>Q@A&6mHNT`#D- zQvR*+TWM-(k?+B#cmwHi-5KU8+8_!GANxSIi>zp z(Bj?Xc%k*Gv3_1J6F-ODlcJ8(0_a-0aTFJjJN&sF1k)MlB>`L^Awa_vL=KbwUQlZ`U&wW%dq`0{ed#@j{qW=dVZU%r1xreUid9iqvd93tn zsF>VbqiI{*jHb#-Br0Y*?>Bqi;PG4>OuR2RdF?9x!QF+SH{O4A^n+dqL=5_BPcv$K zXLCMW%avSW_UkNZ#admQxfZlPF{8RCY&u2kUKc&&c{IJ8;*2Ta(g4FZc zc12_?Gt4NJzdf|#7i`0yI3o=4qxUm#$-=k>Q0kxnAW{a#E5GR!dx=TCax?YcD1|SY zfUY1NyfDu2 z)Cf>7#B^t!^1o@1n(-r~WyqhC5YDikxOuggDI9a3F)3*R66%fj1?M}r*EmeqzbWml z-QPW^^$a7HgoTrWeP8^?sj8kn{ORos`0PgR`E_j{D2&G*bvvqI+Bh#2I|lUzResaR z;F@<1?^-may+fHD8$|upMWeul3{W9(xJ}3FwFZMF-M-G#l*s0x%;!J;C63l^y;<{n zB165dgf~+i79wv|H}6>i2{^8)kj`PtR`a&ab%x8EcY4pcU3UyAih~O6hd~0scSg`r zrorhkT5^pMba8UK^tRvb=sM@Z_m6&;iSNm3L=zA^&H>a8FROI?n2}GtB*BzwRNuCG zug;wf@f9C-FjhUSN`$}wx>1O?AVZ)^f!Ix^t)hjhlZ3AE_b1Nb;e!hJ$by&g=%u^o z7`ruC%*OhPMakyZr5%lsIkA1k(5W-(RRVQj42G-$MLu9#%C&|4qN zzUnTO2|oW?C-LvlOH76N)^J=^<~>qRo+_2|tBjyd^TFM;IDTbDdf`jW%1>V_ZkT9l zgpMaCe+rRu=>FNE93e>iE?d7mjn3o zfdjy-k!#(PMmk!5s@_nUt+SIYV@iz_Ov7`@|1PXnn}LYyu(Sep;5&2V_o9czWrCmf z;)J5rC5+T!)-&fn5Y&k421K9L6Jel>4IHh7e}(lpc0Lo4&TAXE75IZwaK>v?PW$v@ ziX2hwGVTPlXvcL<*!ZIALrb@+BdXg-eyi#T^TSQgBq@YWqEe z;j(S0;KBN%1haIUWaZjA3@8;b=lTe@H*dH#&pxI2X_KC1aIlNxy}R>HNUyu&k-7cE?Z-*{&wMlIej6&-hNnqjey*N~18U{i)Oe)T z+y$4ti9I7?9bE+7vwO9}z70cRV(mFL2n~FayTQCY~Wd(87#S%KNMsOTVWVh4s zJ)E?Raf8nl?brX%WH0cU7+u!zQ*a@gotUC80dBG=!iVB}gg8_E505+e9cmop$G=*0 z48FFgZhJv^7Eev*US0^F!(rQ#lXU7uYtv}M+@_QkvgB|2%1-UHta3X`X5E#G@oBw7 z|4}BVO6cpgzQ;ZqEq~bD;n{A}U3;IUK=2zdmuRdQ^e5w6;ZiPdjTO-TR5Zr)&H-K6 z<^NK1GKpW+vd=ZAj`Lt{a5PklB!^o8r0GTqsl8c`SDxe<#@9q(r`Wyuh8!<`)Y+}L zRTD_`S!|D>rd@fDHv3C->|#&pb`!rG*rwHEseNbUzC?lZ{aDLi9BcJhN4cDbgJ}bf zNHb%~)bRG#m8q{*nFzI#D8sl5$pSP|PR|B+d(>|=YO@z=gJdl&h4pmy`CrW4&{X8&}ad$XzWB-`JkbuuXqozwctGbte6 zi575&<#M~g8e!lgUD@G1+H+V5>f8FKd(05yK`rP=_Ce7_`0#{EYgBK`ca7hDl=rMa z#ylLghWLg!kAMh2hJo9eaHKoi5M$_jKqW_NrvsM_&j5?xHwLuo-Xvlvq>I7px9sQO`<$K59s7UOw}(awbXBD1En)sM!|1<9jvg|o;SWR|A!6*$5 z=YjGuDcqKD4T&XvX-+VgyA@j9YvxC^NtOkf2ik)Yx+y{>@(H*uiNs@9%DAAfsY<*uTB=5G<8%?8NoKY*pm!M0wyis%Syz@u(% zKM&{1KDPOd6CW(Xc%fikX) z_Db(EO(ry7HlBR58Jautd;#rg>fk6v({USEDEtQ}B-)9XOD=Y;R7i(=JZ8A@SDjS1RDPs5W6-qi5z!GiIE! z?`eDuD{^7{X=GC%VU=;3ROV~EzV?F?4pco9Kq;m z6GSBca{|YzdpyyJ9lbZ+2ow(|03B(fuYJ zFeDi(_CWw@K_6{hqBhZs06XD(tP~)~(%Y^rU9Pboq+_s5(ND6q&55Ojax+Dm`J_#K zAji`($2=znv0-69UxpxLUxA6sT&862-$l??pLLJL(r?67Yf~^&<+lnt>mKBuSFZsE MH%)I;>AFPyAI|j9nE(I) literal 0 HcmV?d00001 diff --git a/clients/decky/assets/logo.png b/clients/decky/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..92c53483cc842fe98152a5e55a6f71c83873f829 GIT binary patch literal 11919 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 dict: return env +async def _flatpak_capture(args: list[str], timeout: float = 20.0) -> tuple[int, str]: + """Run ``flatpak `` with the user-session env, merging stderr into stdout. Returns + ``(returncode, output)``; ``(-1, "")`` if the binary is missing or the call errors/times out. + Best-effort by design — every caller here treats a failure as "no update / can't tell".""" + flatpak = _flatpak() + if not flatpak: + return -1, "" + proc = None + try: + proc = await asyncio.create_subprocess_exec( + flatpak, *args, + stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.STDOUT, + env=_flatpak_env(), + ) + out, _ = await asyncio.wait_for(proc.communicate(), timeout=timeout) + rc = proc.returncode if proc.returncode is not None else -1 + return rc, (out or b"").decode("utf-8", "replace") + except asyncio.TimeoutError: + decky.logger.warning("flatpak %s timed out", " ".join(args)) + if proc: + try: + proc.kill() + except ProcessLookupError: + pass + return -1, "" + except Exception: # noqa: BLE001 + decky.logger.exception("flatpak %s failed", " ".join(args)) + return -1, "" + + +def _field_from(text: str, name: str) -> str: + """Pull ``: value`` out of ``flatpak info`` / ``remote-info`` output (e.g. ``Commit``, + ``Origin``).""" + prefix = f"{name}:" + for line in text.splitlines(): + s = line.strip() + if s.startswith(prefix): + return s.split(":", 1)[1].strip() + return "" + + +async def _client_update_state() -> dict: + """Is a newer commit of the flatpak client available in the remote it tracks? The client is a + **per-user** install (so ``sudo flatpak update``, which is system-scope, never touches it), and + it versions independently of this plugin — so we compare the installed commit against the + remote's here and let the QAM offer a user-scope update. Best-effort; all-``False`` on any error + (not installed, no flatpak, offline).""" + state = {"available": False, "installed": "", "remote": ""} + rc, info = await _flatpak_capture(["info", "--user", APP_ID], timeout=10.0) + if rc != 0: + return state # client not installed as a user app / no flatpak + state["installed"] = _field_from(info, "Commit") + origin = _field_from(info, "Origin") + if not origin: + return state + rc, rinfo = await _flatpak_capture(["remote-info", "--user", origin, APP_ID], timeout=25.0) + if rc != 0: + return state # remote unreachable — treat as "up to date", retry next check + state["remote"] = _field_from(rinfo, "Commit") + state["available"] = bool( + state["installed"] and state["remote"] and state["installed"] != state["remote"] + ) + return state + + def _split_txt(txt: str) -> list[str]: """Split an avahi TXT column into tokens, honouring the ``"key=value"`` quoting.""" tokens: list[str] = [] @@ -371,6 +437,27 @@ class Plugin: reason = (err.strip().splitlines() or out.strip().splitlines() or ["pairing failed"])[-1] return {"ok": False, "error": reason} + async def shortcut_art(self) -> dict: + """The Steam-shortcut artwork shipped with the plugin (``assets/``, generated by + ``scripts/gen-steam-art.py``): base64 PNGs for SetCustomArtworkForApp plus the + icon's absolute path for SetShortcutIcon (which wants a file, not bytes). Missing + files are simply omitted — artwork is cosmetic and must never block a launch.""" + art: dict = {} + base = Path(decky.DECKY_PLUGIN_DIR) / "assets" + for key, fname in ( + ("grid", "grid.png"), + ("gridwide", "gridwide.png"), + ("hero", "hero.png"), + ("logo", "logo.png"), + ): + try: + art[key] = base64.b64encode((base / fname).read_bytes()).decode() + except OSError: + pass + icon = base / "icon.png" + art["icon_path"] = str(icon) if icon.exists() else "" + return art + async def runner_info(self) -> dict: """The wrapper-script path + flatpak app id the frontend needs to create the Steam shortcut. The shortcut invokes the script through ``/bin/sh`` (see steam.ts), so no @@ -419,11 +506,37 @@ class Plugin: return {"ok": False} return {"ok": True} + async def update_client(self) -> dict: + """Update the flatpak **client** (io.unom.Punktfunk) in the USER installation — the scope a + Steam Deck install lives in, which ``sudo flatpak update`` (system-scope) never reaches. + Returns whether a new commit was actually pulled. Best-effort; non-fatal.""" + flatpak = _flatpak() + if not flatpak: + return {"ok": False, "updated": False, "error": "flatpak-not-found"} + _, before = await _flatpak_capture(["info", "--user", APP_ID], timeout=10.0) + before_commit = _field_from(before, "Commit") + rc, out = await _flatpak_capture(["update", "--user", "-y", APP_ID], timeout=300.0) + if rc != 0: + decky.logger.warning("flatpak client update failed (rc=%s): %s", rc, out[-400:]) + return {"ok": False, "updated": False, "error": "update-failed"} + _, after = await _flatpak_capture(["info", "--user", APP_ID], timeout=10.0) + after_commit = _field_from(after, "Commit") + updated = bool(before_commit and after_commit and before_commit != after_commit) + decky.logger.info( + "flatpak client update: %s -> %s (updated=%s)", + before_commit[:10], after_commit[:10], updated, + ) + _update_cache["data"] = None # invalidate the cached "update available" snapshot + return {"ok": True, "updated": updated} + async def check_update(self, force: bool = False) -> dict: - """Is a newer build available in our registry? Compares the installed version - (``package.json``) against the per-channel ``manifest.json`` the CI publishes, and - returns everything the frontend needs to drive Decky's install RPC. Non-fatal: any - failure (no channel baked in, network down) returns ``update_available: False``. + """Report pending updates for BOTH the plugin and the flatpak client. + + The plugin updates via Decky's install RPC (the per-channel ``manifest.json`` the CI + publishes); the **client** updates via ``flatpak update --user`` (a per-user install, so + ``sudo flatpak update`` — system-scope — never touches it) and versions independently, so + it's checked here too and applied through :meth:`update_client`. Non-fatal: any failure + leaves the respective ``*_update_available`` ``False``. """ current = _installed_version() cfg = _update_config() @@ -434,23 +547,37 @@ class Plugin: "hash": "", "channel": str(cfg.get("channel", "")), "update_available": False, + "client_update_available": False, + "client_current": "", + "client_latest": "", } - manifest_url = cfg.get("manifest") - if not manifest_url: - result["error"] = "update-channel-unknown" # dev / sideloaded build - return result - now = time.monotonic() cached = _update_cache["data"] if not force and cached and (now - _update_cache["at"]) < _UPDATE_TTL_S: return cached + # Client (flatpak) update — checked ALWAYS, even on a dev/sideloaded plugin build. + try: + cu = await _client_update_state() + result["client_update_available"] = bool(cu["available"]) + result["client_current"] = (cu["installed"] or "")[:10] + result["client_latest"] = (cu["remote"] or "")[:10] + except Exception: # noqa: BLE001 + decky.logger.warning("client update check failed", exc_info=True) + + manifest_url = cfg.get("manifest") + if not manifest_url: + result["error"] = "update-channel-unknown" # dev / sideloaded plugin build + _update_cache["at"] = now + _update_cache["data"] = result # the client info is still valid to cache + return result + try: loop = asyncio.get_running_loop() manifest = await loop.run_in_executor(None, _fetch_json, manifest_url) except Exception as exc: # noqa: BLE001 - decky.logger.warning("update check failed: %s", exc) + decky.logger.warning("plugin update check failed: %s", exc) result["error"] = "fetch-failed" return result # transient — don't cache, retry next open @@ -461,8 +588,12 @@ class Plugin: result["update_available"] = bool(result["artifact"]) and ( _semver_tuple(latest) > _semver_tuple(current) ) - if result["update_available"]: - decky.logger.info("update available: %s -> %s (%s)", current, latest, result["channel"]) + if result["update_available"] or result["client_update_available"]: + decky.logger.info( + "updates: plugin %s->%s (avail=%s), client->%s (avail=%s)", + current, latest, result["update_available"], + result["client_latest"], result["client_update_available"], + ) _update_cache["at"] = now _update_cache["data"] = result return result diff --git a/clients/decky/scripts/gen-steam-art.py b/clients/decky/scripts/gen-steam-art.py new file mode 100644 index 0000000..9719536 --- /dev/null +++ b/clients/decky/scripts/gen-steam-art.py @@ -0,0 +1,297 @@ +#!/usr/bin/env python3 +"""Generate the Steam-shortcut artwork for the Decky plugin (committed, like the tray icons). + +The plugin registers a non-Steam shortcut ("Punktfunk") whose grid/hero/logo/icon Steam +would otherwise render as a gray placeholder tile. These assets brand it: the lens mark +(same geometry as scripts/gen-tray-icons.py / web's brand-mark.tsx) over the brand-navy +gradient, plus a monoline "punktfunk" wordmark built from stroke segments ("punktfunk" +needs only p·u·n·k·t·f). The frontend applies them via +SteamClient.Apps.SetCustomArtworkForApp / SetShortcutIcon (src/steam.ts). + +Outputs (checked in; re-run only when the brand changes): + clients/decky/assets/grid.png 600 x 900 library capsule (portrait) + clients/decky/assets/gridwide.png 920 x 430 wide capsule (recent games / search) + clients/decky/assets/hero.png 1920 x 620 game-page banner + clients/decky/assets/logo.png transparent overlaid on the hero by Steam + clients/decky/assets/icon.png 256 x 256 list icon (SetShortcutIcon) + +Pure stdlib. Unlike the tiny tray icons this rasterizes big surfaces, so edges are +antialiased analytically from signed distances (one sample per pixel) instead of 4x4 +supersampling. +""" + +import math +import struct +import zlib +from pathlib import Path + +HERE = Path(__file__).resolve().parent.parent # clients/decky +OUT = HERE / "assets" + +# Brand-mark geometry in its 1000-unit viewbox (identical to gen-tray-icons.py). +R = 194.41 +C1 = (403.037, 597.262) # light circle, behind +C2 = (597.8075, 402.8525) # deep circle, in front +BB_MIN = (C1[0] - R, C2[1] - R) +BB_MAX = (C2[0] + R, C1[1] + R) +MARK_CENTER = ((BB_MIN[0] + BB_MAX[0]) / 2, (BB_MIN[1] + BB_MAX[1]) / 2) +MARK_SPAN = BB_MAX[0] - BB_MIN[0] + +COL_LIGHT = (0xA7, 0x9F, 0xF8) +COL_DEEP = (0x6C, 0x5B, 0xF3) +COL_HI = (0xD2, 0xC9, 0xFB) +WORD = (0xEF, 0xEC, 0xFD) # wordmark: near-white lavender +BG_TOP = (0x28, 0x1E, 0x46) +BG_BOT = (0x12, 0x0D, 0x22) + + +# ------------------------------------------------------------------------------------------ +# Wordmark: monoline glyphs as polylines in a unit box (y down; x-height top y=0, baseline +# y=1, ascender to -0.5, descender to +1.5). Arcs are sampled into the polylines, so the +# rasterizer only ever measures distance-to-segment; round caps/joins fall out of that. +# ------------------------------------------------------------------------------------------ +def _arc(cx, cy, r, a0, a1, n=24): + """Polyline along a circle arc; degrees, 0 = +x, angles grow clockwise on screen.""" + pts = [] + for i in range(n + 1): + a = math.radians(a0 + (a1 - a0) * i / n) + pts.append((cx + r * math.cos(a), cy + r * math.sin(a))) + return pts + + +GLYPHS = { + # letter: (advance, [polyline, ...]) + "p": (1.05, [[(0, 0), (0, 1.5)], _arc(0.5, 0.5, 0.5, 0, 360)]), + "u": (1.05, [[(0, 0), (0, 0.5)], _arc(0.5, 0.5, 0.5, 0, 180), [(1, 0), (1, 0.5)]]), + "n": (1.05, [[(0, 0), (0, 1)], _arc(0.5, 0.5, 0.5, 180, 360), [(1, 0.5), (1, 1)]]), + "k": (1.0, [[(0, -0.5), (0, 1)], [(0, 0.62), (0.78, 0)], [(0.30, 0.38), (0.85, 1)]]), + "t": (0.85, [[(0.42, -0.42), (0.42, 1)], [(0, 0), (0.84, 0)]]), + "f": ( + 0.85, + [[(0.42, 1), (0.42, -0.15)] + _arc(0.75, -0.15, 0.33, 180, 270, 12), [(0, 0), (0.78, 0)]], + ), +} +GAP = 0.34 # inter-letter gap, in glyph units +STROKE = 0.26 # stroke thickness, in glyph units +ASCENT, DESCENT = -0.5, 1.5 # glyph-space vertical extent + + +def word_segments(text): + """The word's stroke segments [(x1,y1,x2,y2)] in glyph units, plus its unit width.""" + segs = [] + x = 0.0 + for ch in text: + adv, lines = GLYPHS[ch] + for line in lines: + for (x1, y1), (x2, y2) in zip(line, line[1:]): + segs.append((x + x1, y1, x + x2, y2)) + x += adv + GAP + return segs, x - GAP + + +def render_word_alpha(text, unit_px): + """Coverage (0..255) buffer of the word at `unit_px` pixels per glyph unit.""" + segs, width_u = word_segments(text) + half = STROKE / 2 * unit_px + pad = half + 1.5 + w = math.ceil(width_u * unit_px + 2 * pad) + h = math.ceil((DESCENT - ASCENT) * unit_px + 2 * pad) + ox, oy = pad, pad - ASCENT * unit_px + px_segs = [(ox + a * unit_px, oy + b * unit_px, ox + c * unit_px, oy + d * unit_px) for a, b, c, d in segs] + # Bucket segments per pixel column range so each pixel tests only nearby strokes. + buf = bytearray(w * h) + for x1, y1, x2, y2 in px_segs: + lo_x = max(0, math.floor(min(x1, x2) - pad)) + hi_x = min(w, math.ceil(max(x1, x2) + pad)) + lo_y = max(0, math.floor(min(y1, y2) - pad)) + hi_y = min(h, math.ceil(max(y1, y2) + pad)) + dx, dy = x2 - x1, y2 - y1 + len2 = dx * dx + dy * dy + for py in range(lo_y, hi_y): + row = py * w + fy = py + 0.5 + for px in range(lo_x, hi_x): + fx = px + 0.5 + if len2 > 0: + t = max(0.0, min(1.0, ((fx - x1) * dx + (fy - y1) * dy) / len2)) + else: + t = 0.0 + d = math.hypot(fx - (x1 + t * dx), fy - (y1 + t * dy)) + cov = 0.5 + (half - d) + if cov > 0: + v = min(255, round(min(1.0, cov) * 255)) + if v > buf[row + px]: + buf[row + px] = v + return buf, w, h + + +# ------------------------------------------------------------------------------------------ +# Canvas: RGBA bytearray, straight alpha, painted back to front. +# ------------------------------------------------------------------------------------------ +class Canvas: + def __init__(self, w, h): + self.w, self.h = w, h + self.buf = bytearray(w * h * 4) + + def fill_gradient(self, top, bottom): + for y in range(self.h): + t = y / max(1, self.h - 1) + c = bytes( + ( + round(top[0] + (bottom[0] - top[0]) * t), + round(top[1] + (bottom[1] - top[1]) * t), + round(top[2] + (bottom[2] - top[2]) * t), + 255, + ) + ) + self.buf[y * self.w * 4 : (y + 1) * self.w * 4] = c * self.w + + def _blend(self, i, rgb, a): + """`rgb` over the pixel at byte offset i with coverage a (0..1).""" + if a <= 0: + return + b = self.buf + ia = 1.0 - a + da = b[i + 3] / 255.0 + oa = a + da * ia + if oa <= 0: + return + for k in range(3): + b[i + k] = round((rgb[k] * a + b[i + k] * da * ia) / oa) + b[i + 3] = round(oa * 255) + + def glow(self, cx, cy, radius, rgb, strength): + """Soft gaussian-ish radial glow (for the mark's halo on the big surfaces).""" + lo_x = max(0, math.floor(cx - 2.2 * radius)) + hi_x = min(self.w, math.ceil(cx + 2.2 * radius)) + lo_y = max(0, math.floor(cy - 2.2 * radius)) + hi_y = min(self.h, math.ceil(cy + 2.2 * radius)) + for y in range(lo_y, hi_y): + for x in range(lo_x, hi_x): + d2 = ((x + 0.5 - cx) ** 2 + (y + 0.5 - cy) ** 2) / (radius * radius) + a = strength * math.exp(-2.5 * d2) + if a > 1 / 255: + self._blend((y * self.w + x) * 4, rgb, a) + + def mark(self, cx, cy, span): + """The lens mark centered at (cx, cy) with the given pixel span.""" + scale = span / MARK_SPAN + c1 = (cx + (C1[0] - MARK_CENTER[0]) * scale, cy + (C1[1] - MARK_CENTER[1]) * scale) + c2 = (cx + (C2[0] - MARK_CENTER[0]) * scale, cy + (C2[1] - MARK_CENTER[1]) * scale) + r = R * scale + lo_x = max(0, math.floor(min(c1[0], c2[0]) - r - 2)) + hi_x = min(self.w, math.ceil(max(c1[0], c2[0]) + r + 2)) + lo_y = max(0, math.floor(min(c1[1], c2[1]) - r - 2)) + hi_y = min(self.h, math.ceil(max(c1[1], c2[1]) + r + 2)) + for y in range(lo_y, hi_y): + for x in range(lo_x, hi_x): + fx, fy = x + 0.5, y + 0.5 + cov1 = min(1.0, max(0.0, 0.5 + r - math.hypot(fx - c1[0], fy - c1[1]))) + cov2 = min(1.0, max(0.0, 0.5 + r - math.hypot(fx - c2[0], fy - c2[1]))) + if cov1 <= 0 and cov2 <= 0: + continue + i = (y * self.w + x) * 4 + self._blend(i, COL_LIGHT, cov1) + self._blend(i, COL_DEEP, cov2) + self._blend(i, COL_HI, min(cov1, cov2)) + + def word(self, text, unit_px, cx, cy): + """The wordmark centered at (cx, cy); `unit_px` = pixels per glyph unit.""" + alpha, w, h = render_word_alpha(text, unit_px) + ox = round(cx - w / 2) + # Optical vertical centering on the x-height band (0..1 in glyph units), not the + # ascender/descender box — the word reads centered that way. + pad = STROKE / 2 * unit_px + 1.5 + band_mid = pad - ASCENT * unit_px + 0.5 * unit_px + oy = round(cy - band_mid) + for y in range(h): + ty = y + oy + if not 0 <= ty < self.h: + continue + for x in range(w): + a = alpha[y * w + x] + if a: + tx = x + ox + if 0 <= tx < self.w: + self._blend((ty * self.w + tx) * 4, WORD, a / 255.0) + + def round_corners(self, radius): + """Multiply alpha with a rounded-rect mask (icon).""" + for y in range(self.h): + for x in range(self.w): + dx = max(0.0, max(radius - (x + 0.5), (x + 0.5) - (self.w - radius))) + dy = max(0.0, max(radius - (y + 0.5), (y + 0.5) - (self.h - radius))) + if dx > 0 and dy > 0: + cov = min(1.0, max(0.0, 0.5 + radius - math.hypot(dx, dy))) + i = (y * self.w + x) * 4 + self.buf[i + 3] = round(self.buf[i + 3] * cov) + + def png(self): + def chunk(tag, data): + return ( + struct.pack(">I", len(data)) + + tag + + data + + struct.pack(">I", zlib.crc32(tag + data) & 0xFFFFFFFF) + ) + + ihdr = struct.pack(">IIBBBBB", self.w, self.h, 8, 6, 0, 0, 0) + raw = b"".join( + b"\x00" + bytes(self.buf[y * self.w * 4 : (y + 1) * self.w * 4]) for y in range(self.h) + ) + return ( + b"\x89PNG\r\n\x1a\n" + + chunk(b"IHDR", ihdr) + + chunk(b"IDAT", zlib.compress(raw, 9)) + + chunk(b"IEND", b"") + ) + + +def save(name, canvas): + OUT.mkdir(parents=True, exist_ok=True) + out = OUT / name + out.write_bytes(canvas.png()) + print(f"wrote {out.relative_to(HERE.parent.parent)} ({canvas.w}x{canvas.h})") + + +def main(): + # Portrait capsule: mark in the upper half, wordmark beneath. + c = Canvas(600, 900) + c.fill_gradient(BG_TOP, BG_BOT) + c.glow(300, 340, 260, COL_DEEP, 0.35) + c.mark(300, 340, 320) + c.word("punktfunk", 44, 300, 640) + save("grid.png", c) + + # Wide capsule: mark left, wordmark right of it. + c = Canvas(920, 430) + c.fill_gradient(BG_TOP, BG_BOT) + c.glow(230, 215, 200, COL_DEEP, 0.35) + c.mark(230, 215, 240) + c.word("punktfunk", 40, 620, 220) + save("gridwide.png", c) + + # Hero: ambient banner — the mark rides the right third; Steam overlays logo.png itself. + c = Canvas(1920, 620) + c.fill_gradient(BG_TOP, BG_BOT) + c.glow(1500, 310, 330, COL_DEEP, 0.4) + c.mark(1500, 310, 400) + save("hero.png", c) + + # Logo (transparent): mark + wordmark side by side, overlaid on the hero by Steam. + c = Canvas(1120, 300) + c.mark(150, 150, 240) + c.word("punktfunk", 62, 660, 155) + save("logo.png", c) + + # Icon: brand tile, rounded corners, mark only. + c = Canvas(256, 256) + c.fill_gradient(BG_TOP, BG_BOT) + c.glow(128, 128, 110, COL_DEEP, 0.3) + c.mark(128, 128, 190) + c.round_corners(36) + save("icon.png", c) + + +if __name__ == "__main__": + main() diff --git a/clients/decky/scripts/package.sh b/clients/decky/scripts/package.sh index c5d0d83..da4e1ec 100755 --- a/clients/decky/scripts/package.sh +++ b/clients/decky/scripts/package.sh @@ -20,12 +20,14 @@ VER="$(python3 -c 'import json;print(json.load(open("package.json"))["version"]) STAGE="$(mktemp -d)" DEST="$STAGE/$NAME" -mkdir -p "$DEST/dist" "$DEST/bin" +mkdir -p "$DEST/dist" "$DEST/bin" "$DEST/assets" cp dist/index.js "$DEST/dist/index.js" # ship the bundle only, not the sourcemap cp main.py plugin.json package.json LICENSE "$DEST/" # The stream-launch wrapper (target of the Steam shortcut) — must stay executable. cp bin/punktfunkrun.sh "$DEST/bin/punktfunkrun.sh" chmod 0755 "$DEST/bin/punktfunkrun.sh" +# Steam-shortcut artwork (grid/hero/logo/icon — scripts/gen-steam-art.py, committed). +cp assets/*.png "$DEST/assets/" [ -f decky.pyi ] && cp decky.pyi "$DEST/" [ -f README.md ] && cp README.md "$DEST/" diff --git a/clients/decky/src/backend.ts b/clients/decky/src/backend.ts index 3e21645..88c71c9 100644 --- a/clients/decky/src/backend.ts +++ b/clients/decky/src/backend.ts @@ -38,24 +38,46 @@ export interface StreamSettings { } export interface UpdateInfo { - current: string; // installed version (package.json) - latest: string; // newest version in our registry for this channel + current: string; // installed PLUGIN version (package.json) + latest: string; // newest plugin version in our registry for this channel artifact: string; // immutable zip URL Decky should install hash: string; // sha256 of that zip (Decky verifies it) channel: string; // "latest" (stable) | "canary" - update_available: boolean; + update_available: boolean; // a newer PLUGIN build is available + // The flatpak CLIENT (io.unom.Punktfunk) versions independently and is a per-user install, so + // `sudo flatpak update` never touches it — the plugin offers a user-scope update instead. + client_update_available: boolean; + client_current: string; // installed client commit (short) — informational + client_latest: string; // remote client commit (short) — informational error?: string; // "update-channel-unknown" (dev build) | "fetch-failed" } +// Steam-shortcut artwork (assets/ in the plugin dir): base64 PNGs keyed grid / gridwide / +// hero / logo, plus the icon's absolute path (SetShortcutIcon wants a file). Keys for +// missing files are absent. +export interface ShortcutArt { + grid?: string; + gridwide?: string; + hero?: string; + logo?: string; + icon_path: string; +} + export const discover = callable<[], Host[]>("discover"); export const pair = callable< [host: string, port: number, pin: string, name: string], PairResult >("pair"); export const runnerInfo = callable<[], RunnerInfo>("runner_info"); +export const shortcutArt = callable<[], ShortcutArt>("shortcut_art"); export const getSettings = callable<[], StreamSettings>("get_settings"); export const setSettings = callable<[settings: StreamSettings], { ok: boolean }>( "set_settings", ); export const killStream = callable<[], { ok: boolean }>("kill_stream"); export const checkUpdate = callable<[force: boolean], UpdateInfo>("check_update"); +// Update the flatpak client in the user installation (`flatpak update --user -y io.unom.Punktfunk`). +export const updateClient = callable< + [], + { ok: boolean; updated: boolean; error?: string } +>("update_client"); diff --git a/clients/decky/src/hooks.ts b/clients/decky/src/hooks.ts index eb089d0..04f5eb2 100644 --- a/clients/decky/src/hooks.ts +++ b/clients/decky/src/hooks.ts @@ -2,7 +2,7 @@ import { toaster } from "@decky/api"; import { Navigation } from "@decky/ui"; import { useCallback, useEffect, useState } from "react"; -import { checkUpdate, discover, Host, UpdateInfo } from "./backend"; +import { checkUpdate, discover, Host, updateClient, UpdateInfo } from "./backend"; import { launchStream } from "./steam"; export const DOCS_URL = "https://docs.punktfunk.unom.io/docs/steam-deck"; @@ -77,6 +77,11 @@ export function useUpdate() { return { info, checking, check }; } +/** True when EITHER the plugin or the flatpak client has a pending update. */ +export function hasUpdate(info: UpdateInfo | null | undefined): boolean { + return !!info && (info.update_available || info.client_update_available); +} + /** The explicit "Check for updates" action — always ends in a toast so the tap has feedback. */ export async function checkForUpdatesNow( check: (force: boolean) => Promise, @@ -85,44 +90,80 @@ export async function checkForUpdatesNow( let body: string; if (!res || res.error === "fetch-failed") { body = "Couldn’t reach the update server — are you online?"; + } else if (hasUpdate(res)) { + const parts: string[] = []; + if (res.update_available) parts.push(`plugin v${res.current} → v${res.latest}`); + if (res.client_update_available) parts.push("client"); + body = `Update available: ${parts.join(" + ")}.`; } else if (res.error === "update-channel-unknown") { - body = "Development build — update checks are disabled."; - } else if (res.update_available) { - body = `Update available: v${res.current} → v${res.latest}.`; + body = "Development build — plugin updates are disabled; the client is up to date."; } else { - body = `You’re up to date (v${res.current}).`; + body = `You’re up to date (plugin v${res.current}).`; } toaster.toast({ title: "Punktfunk", body }); } -export async function applyUpdate(info: UpdateInfo): Promise { - try { - const backend = window.DeckyBackend; - if (backend?.callable) { - // Fire-and-forget: the loader reinstalls + reloads THIS plugin, tearing the panel down - // before any result could arrive — so never await it. Decky shows its own confirm prompt. - void backend.callable("utilities/install_plugin")( - info.artifact, - "punktfunk", - info.latest, - info.hash, - INSTALL_TYPE_UPDATE, - ); +/** + * Apply whichever updates are pending. The flatpak CLIENT is updated first (a user-scope + * `flatpak update`, awaited); then, if the PLUGIN itself has an update, Decky's install RPC + * reinstalls it — which reloads the plugin and tears this panel down, so it goes last and is + * fire-and-forget. `check` (when passed) refreshes the panel state after a client-only update so + * the "Update available" button clears. + */ +export async function applyUpdate( + info: UpdateInfo, + check?: (force: boolean) => Promise, +): Promise { + if (info.client_update_available) { + toaster.toast({ title: "Punktfunk", body: "Updating the client…" }); + try { + const r = await updateClient(); toaster.toast({ title: "Punktfunk", - // Decky's installer also phones the plugin store first, which can hang on some - // networks before the actual install proceeds — set expectations. - body: `Updating to v${info.latest} — confirm Decky’s prompt. This can take a couple of minutes.`, + body: !r.ok + ? `Client update failed${r.error ? ` (${r.error})` : ""}.` + : r.updated + ? "Client updated to the latest version." + : "Client is already up to date.", }); - return; + } catch { + toaster.toast({ title: "Punktfunk", body: "Client update failed." }); } - } catch { - // fall through to the manual path } - toaster.toast({ - title: "Punktfunk", - body: "Update from Decky → Developer → Install Plugin from URL.", - }); + + if (info.update_available) { + try { + const backend = window.DeckyBackend; + if (backend?.callable) { + // Fire-and-forget: the loader reinstalls + reloads THIS plugin, tearing the panel down + // before any result could arrive — so never await it. Decky shows its own confirm prompt. + void backend.callable("utilities/install_plugin")( + info.artifact, + "punktfunk", + info.latest, + info.hash, + INSTALL_TYPE_UPDATE, + ); + toaster.toast({ + title: "Punktfunk", + // Decky's installer also phones the plugin store first, which can hang on some + // networks before the actual install proceeds — set expectations. + body: `Updating the plugin to v${info.latest} — confirm Decky’s prompt. This can take a couple of minutes.`, + }); + return; + } + } catch { + // fall through to the manual path + } + toaster.toast({ + title: "Punktfunk", + body: "Update the plugin from Decky → Developer → Install Plugin from URL.", + }); + return; + } + + // Client-only update (no plugin reinstall): refresh so the button clears. + if (check) void check(true); } // ---------------------------------------------------------------------------------------- diff --git a/clients/decky/src/index.tsx b/clients/decky/src/index.tsx index 0272e3b..f9cafdd 100644 --- a/clients/decky/src/index.tsx +++ b/clients/decky/src/index.tsx @@ -14,7 +14,7 @@ import { definePlugin, routerHook } from "@decky/api"; import { FC } from "react"; import { FaDownload, FaLock, FaLockOpen, FaSyncAlt, FaTv } from "react-icons/fa"; import { PluginErrorBoundary } from "./boundary"; -import { applyUpdate, checkForUpdatesNow, startStream, useHosts, useUpdate } from "./hooks"; +import { applyUpdate, checkForUpdatesNow, hasUpdate, startStream, useHosts, useUpdate } from "./hooks"; import { PunktfunkRoute, ROUTE } from "./page"; import { PairModal } from "./pair"; @@ -27,13 +27,19 @@ const QamPanel: FC = () => { return ( <> - {update?.update_available && ( + {hasUpdate(update) && ( applyUpdate(update)} - label={`v${update.current} → v${update.latest}`} + onClick={() => applyUpdate(update!, check)} + label={ + update!.update_available + ? `Plugin v${update!.current} → v${update!.latest}${ + update!.client_update_available ? " + client" : "" + }` + : "New client version" + } description="Installing can take a couple of minutes" > diff --git a/clients/decky/src/page.tsx b/clients/decky/src/page.tsx index 074fd26..8af3c99 100644 --- a/clients/decky/src/page.tsx +++ b/clients/decky/src/page.tsx @@ -28,6 +28,7 @@ import { DOCS_URL, applyUpdate, checkForUpdatesNow, + hasUpdate, startStream, useHosts, useUpdate, @@ -52,6 +53,27 @@ const tabScroll: CSSProperties = { boxSizing: "border-box", }; +// DialogButton stretches to 100% width in the gamepad UI — on a fullscreen row that means a +// screen-wide button. Size action buttons to their content instead (right-aligned by the +// Field's children container). +const actionButton: CSSProperties = { + width: "fit-content", + minWidth: "6em", + flexShrink: 0, +}; +// Square icon-only button (details ⓘ, header back arrow) — needs an explicit height too, or +// the zero padding collapses it to the icon's line height. +const iconButton: CSSProperties = { + width: "40px", + minWidth: "40px", + height: "40px", + padding: 0, + flexShrink: 0, + display: "flex", + alignItems: "center", + justifyContent: "center", +}; + // ---------------------------------------------------------------------------------------- // Host details — everything the mDNS advert told us, incl. the fingerprint to cross-check // against the host's own log / web console before trusting it. @@ -113,22 +135,22 @@ const HostRow: FC<{ host: Host; onPaired: () => void }> = ({ host, onPaired }) = }`} childrenContainerWidth="max" > - + showModal()} > {needsPair && ( showModal()} > Pair )} - startStream(host)}> + startStream(host)}> Stream @@ -153,7 +175,7 @@ const HostsTab: FC<{ childrenContainerWidth="max" bottomSeparator={hosts.length ? "standard" : "none"} > - + {scanning ? ( ) : ( @@ -212,20 +234,29 @@ const AboutTab: FC<{ childrenContainerWidth="max" > void checkForUpdatesNow(check)} > {checking ? : "Check for updates"} - {update?.update_available && ( + {hasUpdate(update) && ( - applyUpdate(update)}> + applyUpdate(update!, check)} + > Update @@ -237,7 +268,7 @@ const AboutTab: FC<{ childrenContainerWidth="max" > Navigation.NavigateToExternalWeb(DOCS_URL)} > @@ -254,7 +285,7 @@ const AboutTab: FC<{ description="Force-stop the stream client if a session wedges" childrenContainerWidth="max" > - void forceStopStream()}> + void forceStopStream()}> Force-stop @@ -275,6 +306,7 @@ const PunktfunkPage: FC = () => { flexDirection: "column", }} > + {/* Header is title + back only — updates live on the About tab (and the QAM banner). */} { flexShrink: 0, }} > - Navigation.NavigateBack()} - > + Navigation.NavigateBack()}>

Punktfunk
- {update?.update_available && ( - applyUpdate(update)}> - - Update v{update.latest} - - )}
diff --git a/clients/decky/src/settings.tsx b/clients/decky/src/settings.tsx index 4060846..80a3b1b 100644 --- a/clients/decky/src/settings.tsx +++ b/clients/decky/src/settings.tsx @@ -99,10 +99,10 @@ export const SettingsSection: FC = () => { onChange={(o) => patch({ gamepad: o.data as string })} /> - {s.gamepad === "steamdeck" && ( + {(s.gamepad === "steamdeck" || s.gamepad === "auto") && ( )} ` as a reaper descendant. -import { runnerInfo } from "./backend"; +import { runnerInfo, shortcutArt } from "./backend"; // SteamClient is a Steam-internal global injected into the CEF context; it is not fully typed // by @decky/ui, so declare the surface we use. Signatures verified against MoonDeck + the @@ -24,24 +24,35 @@ declare const SteamClient: { SetShortcutName(appId: number, name: string): void; SetShortcutExe(appId: number, exe: string): void; SetShortcutStartDir(appId: number, dir: string): void; + SetShortcutIcon(appId: number, iconPath: string): void; SetAppLaunchOptions(appId: number, options: string): void; + // assetType: 0 = grid (portrait capsule), 1 = hero, 2 = logo, 3 = wide grid. + SetCustomArtworkForApp( + appId: number, + base64Image: string, + imageType: string, + assetType: number, + ): Promise; RunGame(gameId: string, _unused: string, _i: number, _j: number): void; TerminateApp(gameId: string, _b: boolean): void; }; }; -// Steam removed `SteamClient.Apps.SetAppHidden`. Hiding a non-Steam shortcut now goes through -// `collectionStore.SetAppsAsHidden([appId], true)` — but that looks the app up in appStore, which -// only registers a freshly-created shortcut a moment later (calling it immediately throws on a -// null overview). So hiding is BEST-EFFORT + DEFERRED and must NEVER block the launch. +// Steam removed `SteamClient.Apps.SetAppHidden`; visibility goes through +// `collectionStore.SetAppsAsHidden` — but that looks the app up in appStore, which only +// registers a freshly-created shortcut a moment later (calling it immediately throws on a +// null overview). So visibility changes are BEST-EFFORT + DEFERRED, never launch-blocking. declare const collectionStore: | { SetAppsAsHidden?: (appIds: number[], hidden: boolean) => void } | undefined; -function hideShortcut(appId: number): void { +// The shortcut used to be hidden ("implementation detail"); it is user-visible now — it +// carries proper artwork and living in the library is how users relaunch their last host. +// Existing installs still have theirs hidden, so unhide is applied every ensure (idempotent). +function unhideShortcut(appId: number): void { const attempt = () => { try { - collectionStore?.SetAppsAsHidden?.([appId], true); + collectionStore?.SetAppsAsHidden?.([appId], false); } catch { /* overview not registered yet, or the API changed — cosmetic, ignore */ } @@ -50,6 +61,40 @@ function hideShortcut(appId: number): void { setTimeout(attempt, 2500); // fresh shortcut: retry once its app overview lands } +// Bump when the shipped artwork changes so existing shortcuts re-apply it once. +const ART_VERSION = 1; +const ART_KEY = "punktfunk:shortcutArt"; + +/** + * Apply the plugin's grid/hero/logo/icon to the shortcut (idempotent, once per ART_VERSION). + * Cosmetic and fully best-effort: any failure is swallowed and retried on the next launch. + */ +async function applyArtwork(appId: number): Promise { + try { + if (localStorage.getItem(ART_KEY) === `${appId}:${ART_VERSION}`) { + return; + } + const art = await shortcutArt(); + const assets: [string | undefined, number][] = [ + [art.grid, 0], + [art.hero, 1], + [art.logo, 2], + [art.gridwide, 3], + ]; + for (const [data, assetType] of assets) { + if (data) { + await SteamClient.Apps.SetCustomArtworkForApp(appId, data, "png", assetType); + } + } + if (art.icon_path) { + SteamClient.Apps.SetShortcutIcon(appId, art.icon_path); + } + localStorage.setItem(ART_KEY, `${appId}:${ART_VERSION}`); + } catch (e) { + console.warn("punktfunk: shortcut artwork not applied", e); + } +} + // The shortcut name is user-visible (Steam overlay + library while streaming) — brand-case it. const SHORTCUT_NAME = "Punktfunk"; @@ -87,10 +132,11 @@ function recallAppId(): number | null { } /** - * Ensure exactly one hidden "Punktfunk" shortcut exists (exe = /bin/sh; the wrapper script is - * appended per-launch via the launch options), and return its appId + the current runner path. - * Reuses the remembered shortcut, re-pointing it each time — the plugin dir can change across - * reinstalls, and pre-0.4 shortcuts pointed at the script directly and relied on its exec bit. + * Ensure exactly one "Punktfunk" shortcut exists (exe = /bin/sh; the wrapper script is + * appended per-launch via the launch options), branded and visible in the library, and + * return its appId + the current runner path. Reuses the remembered shortcut, re-pointing + * it each time — the plugin dir can change across reinstalls, pre-0.4 shortcuts pointed at + * the script directly, and pre-0.7 shortcuts were hidden and artless. */ async function ensureShortcut(): Promise<{ appId: number; runner: string }> { const info = await runnerInfo(); @@ -105,14 +151,15 @@ async function ensureShortcut(): Promise<{ appId: number; runner: string }> { SteamClient.Apps.SetShortcutExe(remembered, SHELL); SteamClient.Apps.SetShortcutStartDir(remembered, startDir); SteamClient.Apps.SetShortcutName(remembered, SHORTCUT_NAME); + unhideShortcut(remembered); // pre-0.7 installs hid it + void applyArtwork(remembered); // fire-and-forget — cosmetic, never blocks the launch return { appId: remembered, runner: info.runner }; } const appId = await SteamClient.Apps.AddShortcut(SHORTCUT_NAME, SHELL, startDir, ""); SteamClient.Apps.SetShortcutName(appId, SHORTCUT_NAME); - // Hide it from the library — it's an implementation detail, launched programmatically. - // Best-effort + deferred (see hideShortcut); never let it block the launch. - hideShortcut(appId); + unhideShortcut(appId); + void applyArtwork(appId); // fire-and-forget — cosmetic, never blocks the launch rememberAppId(appId); return { appId, runner: info.runner }; } diff --git a/docs-site/content/docs/install-client.md b/docs-site/content/docs/install-client.md index 5b74080..b0709ae 100644 --- a/docs-site/content/docs/install-client.md +++ b/docs-site/content/docs/install-client.md @@ -34,10 +34,11 @@ flatpak install --user https://flatpak.unom.io/io.unom.Punktfunk.flatpakref flatpak run io.unom.Punktfunk ``` -Updates, from then on: +Updates, from then on — **without `sudo`** (this is a `--user` install; `sudo flatpak update` only +touches the *system* scope and silently skips it): ```sh -flatpak update # or: flatpak update io.unom.Punktfunk +flatpak update # or: flatpak update --user io.unom.Punktfunk ``` Prefer your native package manager? The client also ships as real packages (add the repo once — diff --git a/docs-site/content/docs/steam-deck.md b/docs-site/content/docs/steam-deck.md index ceafcfa..fcdb0ed 100644 --- a/docs-site/content/docs/steam-deck.md +++ b/docs-site/content/docs/steam-deck.md @@ -62,28 +62,38 @@ page (host list + stream settings). - **Pair** — for a locked host, [arm pairing on the host](/docs/pairing) (its console or web console shows a 4-digit PIN), then enter that PIN on the Deck's keypad. Pairing persists, so the next connection is silent. -- **Stream** — pick a host and the stream launches fullscreen in Gaming Mode (as a hidden Steam - shortcut, so gamescope focuses it). +- **Stream** — pick a host and the stream launches fullscreen in Gaming Mode (as a "Punktfunk" + Steam shortcut, so gamescope focuses it — it shows up in your library with its own artwork, and + relaunching it from there streams to the last host). - **Settings** — resolution, refresh, bitrate, gamepad type, and mic, written to the client the - plugin launches. Leave **Resolution** / **Refresh** on *Native* to get the Deck's own mode. + plugin launches. Leave **Resolution** / **Refresh** on *Native* to get the Deck's own mode. With + **Gamepad type** on *Automatic* the Deck's built-in controller is forwarded as a **Steam Deck** + pad (paddles, both trackpads, gyro) — that needs Steam Input set to **Off** for Punktfunk (game + page → ⚙ → Controller Settings), else Steam keeps those controls and only sticks + buttons reach + the host. -To **leave a stream**: the in-client controller chord **L1 + R1 + Start + Select**, or close the -"game" from the Steam overlay. Exiting the client ends the Steam game and drops you back to Gaming -Mode. +To **leave a stream**: **hold L1 + R1 + Start + Select** for about two seconds, or close the +"game" from the Steam overlay. Either ends the session and drops you straight back to Gaming Mode. ## Updating -The plugin **checks for updates itself** — no Decky store needed. When a newer build is available it -shows an **Update to vX** button (in the Quick Access Menu panel and on the full page). Tap it, -confirm Decky's prompt, and the plugin downloads, verifies, replaces itself, and reloads — without -leaving Gaming Mode. +The plugin **checks for updates itself** — no Decky store needed. It covers **both** the plugin *and* +the streaming client (they version independently), so when either has a newer build the panel shows an +**Update** button (in the Quick Access Menu and on the full page). Tap it: the client updates in +place, and if the plugin itself changed it downloads, verifies, replaces itself, and reloads — all +without leaving Gaming Mode. -The check follows the [channel](/docs/channels) you installed from: a plugin installed from the +The plugin check follows the [channel](/docs/channels) you installed from: a plugin installed from the **stable** link tracks stable releases; one installed from the **canary** link tracks `main` builds. -> If the **Update** button never appears (an older Decky Loader, or no network), update manually: -> Decky → **Developer** → **Install Plugin from URL**, and paste the same channel link again. Decky -> replaces the installed copy in place. +> **Updating the client from the terminal?** The client is a **per-user** Flatpak, so run +> `flatpak update --user io.unom.Punktfunk` — **without `sudo`**. `sudo flatpak update` only touches +> the *system* installation and silently skips the client. (Un-sudo'd `flatpak update` updates both +> scopes, so it's the safe default.) + +> If the plugin **Update** button never appears (an older Decky Loader, or no network), update the +> plugin manually: Decky → **Developer** → **Install Plugin from URL**, and paste the same channel +> link again. Decky replaces the installed copy in place. ## Troubleshooting