From 59afc2f616a4498954b8765bac9ef74d6c9b5922 Mon Sep 17 00:00:00 2001 From: Pierre Kisters <1524059+lhns@users.noreply.github.com> Date: Thu, 1 Oct 2026 18:16:37 +0200 Subject: [PATCH] Launchers: neutral examples and made-up fixtures Examples showed specific apps as if the repository installed or configured them. - Docs, README, template and option examples: the Signal Flatpak (org.signal.Signal, sgnl:// and signalcaptcha://) and a made-up org.example.App instead of the previous chat and remote-desktop apps; no install lines (the app is installed by the user, as noted). - Portal fix: the file-dialog symptom phrased generically. - Launcher check: made-up Flatpak entries org.example.Chat (Electron, --file-forwarding @@u %U @@, an action, an SSO scheme) and org.example.Remote (Qt, -qwindowtitle %c @@u %u @@, localized keys) replace the copied ones; Firefox, gedit and Jellyfin stay. --- README.md | 4 +- docs/launchers.md | 34 ++-- docs/session.md | 4 +- modules/cleanup/check.nix | 4 +- modules/launchers.nix | 19 +- modules/launchers/check.nix | 45 ++--- .../fixtures/expected/im.riot.Riot.desktop | 12 -- .../expected/org.example.Chat.desktop | 17 ++ .../expected/org.example.Remote.desktop | 17 ++ .../fixtures/expected/org.kde.krdc.desktop | 182 ------------------ .../fixtures/sources/im.riot.Riot.desktop | 11 -- .../fixtures/sources/org.example.Chat.desktop | 16 ++ .../sources/org.example.Remote.desktop | 16 ++ .../fixtures/sources/org.kde.krdc.desktop | 181 ----------------- modules/launchers/lib.nix | 4 +- template/home.nix | 8 +- 16 files changed, 122 insertions(+), 452 deletions(-) delete mode 100644 modules/launchers/fixtures/expected/im.riot.Riot.desktop create mode 100644 modules/launchers/fixtures/expected/org.example.Chat.desktop create mode 100644 modules/launchers/fixtures/expected/org.example.Remote.desktop delete mode 100644 modules/launchers/fixtures/expected/org.kde.krdc.desktop delete mode 100644 modules/launchers/fixtures/sources/im.riot.Riot.desktop create mode 100644 modules/launchers/fixtures/sources/org.example.Chat.desktop create mode 100644 modules/launchers/fixtures/sources/org.example.Remote.desktop delete mode 100644 modules/launchers/fixtures/sources/org.kde.krdc.desktop diff --git a/README.md b/README.md index 87dadee..215b3f9 100644 --- a/README.md +++ b/README.md @@ -218,9 +218,9 @@ these two files ([`template/`](template), with more comments): firefox.disableAv1 = true; firefox.defaultBrowser = true; jellyfin.hardwareDecoding.enable = true; # install the Flatpak yourself - launchers."im.riot.Riot" = { # Element: logins in both sessions + launchers."org.signal.Signal" = { # logins in both sessions; install the Flatpak yourself keyring = { enable = true; electron = true; }; - defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ]; + defaultFor = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ]; }; docker.enable = true; # rootless }; diff --git a/docs/launchers.md b/docs/launchers.md index 85a8d9c..6792553 100644 --- a/docs/launchers.md +++ b/docs/launchers.md @@ -22,12 +22,11 @@ the Frame's [two sessions](../README.md#two-sessions): `XDG_CURRENT_DESKTOP`. In the Steam session that is `gamescope`, which it doesn't know, so it falls back to `basic` (a local, unencrypted store) and the login made in the desktop (stored in the wallet) is gone. -- **Flatpak permissions:** many Flatpaks may not talk to the wallet at all - (Element), or only to `org.kde.kwalletd6` while their KF6 wallet client - reads through the Secret Service `org.freedesktop.secrets` (KRDC: "Password - not found"). -- **Login callbacks:** SSO logins come back through a URL scheme - (`io.element.desktop://`, `signalcaptcha://`) opened by the portal. Unless the app +- **Flatpak permissions:** many Flatpaks may not talk to the wallet at all, + or only to `org.kde.kwalletd6` while their KF6 wallet client reads through + the Secret Service `org.freedesktop.secrets` (the app finds no password). +- **Login callbacks:** logins come back through a URL scheme (e.g. + `signalcaptcha://`) opened by the portal. Unless the app is the default and a recommended handler, the portal opens an app chooser, which isn't shown in VR. @@ -64,27 +63,26 @@ The desktop ID is the attribute name; the source is the Flatpak with that app ID unless `source.package` or `source.file` is set. Installing the app is up to you. -A Flatpak whose logins live in the wallet (Element, an Electron app), with -its SSO callback schemes: +A Flatpak whose logins live in the wallet (Signal, an Electron app), with +its link callback schemes, and a non-Electron app: ```nix -steamFrame.launchers."im.riot.Riot" = { +steamFrame.launchers."org.signal.Signal" = { keyring = { enable = true; electron = true; }; - defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ]; + defaultFor = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ]; }; -steamFrame.launchers."org.kde.krdc".keyring.enable = true; +steamFrame.launchers."org.example.App".keyring.enable = true; ``` -A program from a Nix package, from the package's own entry -(`share/applications/.desktop`, rewritten at build time): +A program from a Nix package (installed by you, e.g. in `home.packages`), +from the package's own entry (`share/applications/.desktop`, +rewritten at build time): ```nix { pkgs, ... }: { - home.packages = [ pkgs.signal-desktop ]; steamFrame.launchers.signal = { source.package = pkgs.signal-desktop; keyring = { enable = true; electron = true; }; - defaultFor = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ]; }; } ``` @@ -164,14 +162,14 @@ after an optional leading `env A=B …`. The rest (`--file-forwarding`, `@@u %U @@`, `%c`, action arguments) stays. `DBusActivatable=true` becomes `false` (otherwise the desktop would start the app over D-Bus, skipping Exec), `defaultFor` and `mimeTypes` are added to `MimeType=`, and -`X-SteamFrameNix-Source=` names the source. Element's entry with +`X-SteamFrameNix-Source=` names the source. A Flatpak's entry with `keyring = { enable = true; electron = true; }`: ```sh env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \ - /usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/element \ + /usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-chat \ --file-forwarding --talk-name=org.kde.kwalletd6 --talk-name=org.freedesktop.secrets \ - im.riot.Riot --password-store=kwallet6 @@u %U @@ + org.example.Chat --password-store=kwallet6 @@u %U @@ ``` `flatpak run` connects the sandbox's D-Bus proxy (and portals) to the bus in diff --git a/docs/session.md b/docs/session.md index a873ebb..fa1845f 100644 --- a/docs/session.md +++ b/docs/session.md @@ -51,8 +51,8 @@ session's `xdg-desktop-portal` at `/usr/share/xdg-desktop-portal/gamescope-porta which lacks `gamescope-portals.conf`: no backend, no OpenURI, so no app in the Steam session can open links. Its two backends (gamescope, holo) also have no FileChooser, so Flatpak apps fall back to a dialog inside their -sandbox: e.g. Element's Attachments shows an empty file selector without -your home dir. +sandbox: a Flatpak app's file selector shows only its sandbox, not your +home dir. **What you get:** a working OpenURI portal in the Steam session and, with `fileChooser`, KDE's file dialog there (a normal window in VR) with access diff --git a/modules/cleanup/check.nix b/modules/cleanup/check.nix index 73f1a26..440070b 100644 --- a/modules/cleanup/check.nix +++ b/modules/cleanup/check.nix @@ -63,8 +63,8 @@ pkgs.runCommand "cleanup-check" { nativeBuildInputs = [ cleanup pkgs.jq pkgs.git mkdir -p $root/run/steam-frame-nix $root/run/systemd/user/steamvr.service.d echo old > $root/run/steam-frame-nix/steamvr-debugger-restore mkdir -p $root/run/steam-frame-nix/applications # steamFrame.launchers - echo '[Desktop Entry]' > $root/run/steam-frame-nix/applications/im.riot.Riot.desktop - echo x > $root/run/steam-frame-nix/applications/.im.riot.Riot.desktop.sum + echo '[Desktop Entry]' > $root/run/steam-frame-nix/applications/org.example.App.desktop + echo x > $root/run/steam-frame-nix/applications/.org.example.App.desktop.sum : > $root/run/steam-frame-nix/applications/.lock ln -s $HOME/.local/share/Steam/userdata/1/760/remote/250820/screenshots \ $root/run/steam-frame-nix/screenshots # steamFrame.screenshots diff --git a/modules/launchers.nix b/modules/launchers.nix index 1bef6e8..62e4a4d 100644 --- a/modules/launchers.nix +++ b/modules/launchers.nix @@ -37,15 +37,11 @@ let removed = what: lib.mkRemovedOptionModule [ "steamFrame" "keyring" what ] '' Keyring launchers are now steamFrame.launchers., made from the app's own desktop entry (name, icon, actions come from it), e.g. - steamFrame.launchers."im.riot.Riot" = { - keyring = { enable = true; electron = true; }; - defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ]; - }; - steamFrame.launchers.signal = { - source.package = pkgs.signal-desktop; + steamFrame.launchers."org.signal.Signal" = { keyring = { enable = true; electron = true; }; defaultFor = [ "x-scheme-handler/sgnl" ]; }; + steamFrame.launchers.signal.source.package = pkgs.signal-desktop; # a package's entry (schemeHandlers = [ "x" ] -> defaultFor = [ "x-scheme-handler/x" ]; flatpakArgs, args, mimeTypes, settings keep their meaning; name, icon, categories, actions, executable, fieldCode, ... are gone.) @@ -58,16 +54,11 @@ in { default = { }; example = lib.literalExpression '' { - "im.riot.Riot" = { + "org.signal.Signal" = { keyring = { enable = true; electron = true; }; - defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ]; - }; - "org.kde.krdc".keyring.enable = true; - signal = { - source.package = pkgs.signal-desktop; - keyring = { enable = true; electron = true; }; - defaultFor = [ "x-scheme-handler/sgnl" ]; + defaultFor = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ]; }; + "org.example.App".keyring.enable = true; } ''; description = '' diff --git a/modules/launchers/check.nix b/modules/launchers/check.nix index a1387ce..f292f50 100644 --- a/modules/launchers/check.nix +++ b/modules/launchers/check.nix @@ -1,8 +1,9 @@ # Checks of steamFrame.launchers (lib.nix, rewrite.awk, generate.sh) on -# copies of real entries (fixtures/sources: Element, KRDC, Firefox, gedit -# (DBusActivatable) from /var/lib/flatpak, Jellyfin from the user -# installation) and three made-up ones (quoting, an Exec without anchor, an -# Electron app from a fake package): +# copies of real entries (fixtures/sources: Firefox, gedit (DBusActivatable) +# from /var/lib/flatpak, Jellyfin from the user installation) and made-up +# ones: two Flatpaks (an Electron chat app with an action and an SSO scheme, +# a Qt app with `-qwindowtitle %c`), quoting, an Exec without anchor, an +# Electron app from a fake package: # - the rewritten entries equal fixtures/expected (X-SteamFrameNix-Source # compared separately) and pass desktop-file-validate; # - the generator: unchanged sources change nothing (mtimes kept, no touch of @@ -32,11 +33,11 @@ let (L.launcherModule { bus = "unix:path=/run/user/1000/bus"; })); }; config.launchers = { - "im.riot.Riot" = { + "org.example.Chat" = { keyring = { enable = true; electron = true; }; - defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ]; + defaultFor = [ "x-scheme-handler/example-chat" ]; }; - "org.kde.krdc".keyring.enable = true; + "org.example.Remote".keyring.enable = true; "org.mozilla.firefox" = { wrappers = [ "/nix/store/00000000000000000000000000000000-firefox-wrapper" ]; defaultFor = [ "x-scheme-handler/http" "x-scheme-handler/https" "text/html" ]; @@ -98,7 +99,7 @@ pkgs.runCommand "launchers-check" { export STEAM_FRAME_NIX_FLATPAK_EXPORTS=$root/user:$root/system out_dir=$root/run/steam-frame-nix/applications mkdir -p $root/user $root/system $root/apps - for id in im.riot.Riot org.kde.krdc org.mozilla.firefox org.gnome.gedit org.example.NoAnchor; do + for id in org.example.Chat org.example.Remote org.mozilla.firefox org.gnome.gedit org.example.NoAnchor; do cp ${src}/$id.desktop $root/system/ done cp ${src}/org.jellyfin.JellyfinDesktop.desktop $root/user/ @@ -130,7 +131,7 @@ pkgs.runCommand "launchers-check" { cp ${app} $out/actual/org.example.App.desktop grep -qx "X-SteamFrameNix-Source=$root/user/org.jellyfin.JellyfinDesktop.desktop" $out/actual/org.jellyfin.JellyfinDesktop.desktop \ || fail "Jellyfin not from the user installation" - grep -qx "X-SteamFrameNix-Source=$root/system/org.kde.krdc.desktop" $out/actual/org.kde.krdc.desktop || fail "KRDC source" + grep -qx "X-SteamFrameNix-Source=$root/system/org.example.Remote.desktop" $out/actual/org.example.Remote.desktop || fail "system source" grep -qx "X-SteamFrameNix-Source=${src}/org.example.Quoting.desktop" $out/actual/org.example.Quoting.desktop || fail "file source" grep -qx "X-SteamFrameNix-Source=${fakeApp}/share/applications/org.example.App.desktop" $out/actual/org.example.App.desktop || fail "package source" sed -i 's|^X-SteamFrameNix-Source=.*|X-SteamFrameNix-Source=@SOURCE@|' $out/actual/*.desktop @@ -147,13 +148,13 @@ pkgs.runCommand "launchers-check" { for f in $out_dir/*.desktop; do [ "$(mt $f)" = 1000000000 ] || fail "unchanged run rewrote $f"; done # changed source: rewritten, dir touched - echo '# changed' >> $root/system/org.kde.krdc.desktop + echo '# changed' >> $root/system/org.example.Remote.desktop run - logged "org.kde.krdc: entry written" - [ "$(mt $out_dir/org.kde.krdc.desktop)" != 1000000000 ] || fail "changed source not rewritten" - [ "$(mt $out_dir/im.riot.Riot.desktop)" = 1000000000 ] || fail "other entry rewritten" + logged "org.example.Remote: entry written" + [ "$(mt $out_dir/org.example.Remote.desktop)" != 1000000000 ] || fail "changed source not rewritten" + [ "$(mt $out_dir/org.example.Chat.desktop)" = 1000000000 ] || fail "other entry rewritten" [ "$(mt $root/apps)" != 1000000000 ] || fail "changed run didn't touch the applications dir" - grep -qx '# changed' $out_dir/org.kde.krdc.desktop || fail "comment not kept" + grep -qx '# changed' $out_dir/org.example.Remote.desktop || fail "comment not kept" # launcher no longer configured, source gone: removed echo stale > $out_dir/org.example.Old.desktop; echo x > $out_dir/.org.example.Old.desktop.sum @@ -166,17 +167,17 @@ pkgs.runCommand "launchers-check" { [ "$(mt $root/apps)" != 1000000000 ] || fail "removal didn't touch the applications dir" # edited entry (e.g. KDE's editor writing through the link): overwritten - cp $out_dir/im.riot.Riot.desktop $root/riot - echo 'Name[de]=Edited' >> $out_dir/im.riot.Riot.desktop + cp $out_dir/org.example.Chat.desktop $root/chat + echo 'Name[de]=Edited' >> $out_dir/org.example.Chat.desktop run - logged "im.riot.Riot.desktop was edited" - cmp -s $root/riot $out_dir/im.riot.Riot.desktop || fail "edit not overwritten" + logged "org.example.Chat.desktop was edited" + cmp -s $root/chat $out_dir/org.example.Chat.desktop || fail "edit not overwritten" # replaced link: reported; our own link: not - ln -s $out_dir/im.riot.Riot.desktop $root/apps/im.riot.Riot.desktop - echo '[Desktop Entry]' > $root/apps/org.kde.krdc.desktop + ln -s $out_dir/org.example.Chat.desktop $root/apps/org.example.Chat.desktop + echo '[Desktop Entry]' > $root/apps/org.example.Remote.desktop run - logged "org.kde.krdc.desktop no longer leads to" - ! grep -q "im.riot.Riot.desktop no longer" $root/log || fail "own link reported" + logged "org.example.Remote.desktop no longer leads to" + ! grep -q "org.example.Chat.desktop no longer" $root/log || fail "own link reported" # no launchers left (the activation runs it anyway): all entries removed old $root/apps diff --git a/modules/launchers/fixtures/expected/im.riot.Riot.desktop b/modules/launchers/fixtures/expected/im.riot.Riot.desktop deleted file mode 100644 index 26e5c95..0000000 --- a/modules/launchers/fixtures/expected/im.riot.Riot.desktop +++ /dev/null @@ -1,12 +0,0 @@ -[Desktop Entry] -Type=Application -Name=Element -Comment=A Matrix-based instant messaging client -Icon=im.riot.Riot -Exec=env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/element --file-forwarding --talk-name=org.kde.kwalletd6 --talk-name=org.freedesktop.secrets im.riot.Riot --password-store=kwallet6 @@u %U @@ -Categories=Network;InstantMessaging;Chat;VideoConference; -MimeType=x-scheme-handler/element;x-scheme-handler/io.element.desktop; -StartupWMClass=element -Keywords=Matrix;matrix.org;chat;irc;communications;talk;riot;vector; -X-Flatpak=im.riot.Riot -X-SteamFrameNix-Source=@SOURCE@ diff --git a/modules/launchers/fixtures/expected/org.example.Chat.desktop b/modules/launchers/fixtures/expected/org.example.Chat.desktop new file mode 100644 index 0000000..5e6ddbb --- /dev/null +++ b/modules/launchers/fixtures/expected/org.example.Chat.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Type=Application +Name=Example Chat +Comment=A made-up Electron chat app (Flatpak) with an SSO callback scheme +Icon=org.example.Chat +Exec=env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-chat --file-forwarding --talk-name=org.kde.kwalletd6 --talk-name=org.freedesktop.secrets org.example.Chat --password-store=kwallet6 @@u %U @@ +Categories=Network;InstantMessaging;Chat; +MimeType=x-scheme-handler/example-chat; +StartupWMClass=example-chat +Keywords=chat;messaging; +Actions=new-window; +X-Flatpak=org.example.Chat +X-SteamFrameNix-Source=@SOURCE@ + +[Desktop Action new-window] +Name=New Window +Exec=env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-chat --talk-name=org.kde.kwalletd6 --talk-name=org.freedesktop.secrets org.example.Chat --password-store=kwallet6 --new-window diff --git a/modules/launchers/fixtures/expected/org.example.Remote.desktop b/modules/launchers/fixtures/expected/org.example.Remote.desktop new file mode 100644 index 0000000..5eddce9 --- /dev/null +++ b/modules/launchers/fixtures/expected/org.example.Remote.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Type=Application +Exec=env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-remote --file-forwarding --talk-name=org.kde.kwalletd6 --talk-name=org.freedesktop.secrets org.example.Remote -qwindowtitle %c @@u %u @@ +Icon=org.example.Remote +Terminal=false +Name=Example Remote +Name[de]=Beispiel-Fernzugriff +Name[zh_TW]=範例遠端 +GenericName=Remote Desktop Client +GenericName[de]=Fernzugriff +Comment=A made-up Qt app (Flatpak) that reads its passwords through the Secret Service +StartupWMClass=example-remote +MimeType=x-scheme-handler/vnc;x-scheme-handler/rdp;application/x-example-remote; +Categories=Qt;KDE;Network;RemoteAccess; +X-KDE-Wayland-Interfaces=org_kde_kwin_keystate +X-Flatpak=org.example.Remote +X-SteamFrameNix-Source=@SOURCE@ diff --git a/modules/launchers/fixtures/expected/org.kde.krdc.desktop b/modules/launchers/fixtures/expected/org.kde.krdc.desktop deleted file mode 100644 index b5ac1cc..0000000 --- a/modules/launchers/fixtures/expected/org.kde.krdc.desktop +++ /dev/null @@ -1,182 +0,0 @@ -[Desktop Entry] -Type=Application -Exec=env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/krdc --file-forwarding --talk-name=org.kde.kwalletd6 --talk-name=org.freedesktop.secrets org.kde.krdc -qwindowtitle %c @@u %u @@ -Icon=org.kde.krdc -Terminal=false -Name=KRDC -Name[ar]=كردس -Name[az]=KRDC -Name[bg]=KRDC -Name[bs]=KRDC -Name[ca]=KRDC -Name[ca@valencia]=KRDC -Name[cs]=KRDC -Name[da]=KRDC -Name[de]=KRDC -Name[el]=KRDC -Name[en_GB]=KRDC -Name[eo]=KRDC -Name[es]=KRDC -Name[et]=KRDC -Name[eu]=KRDC -Name[fi]=KRDC -Name[fr]=KRDC -Name[ga]=KRDC -Name[gl]=KRDC -Name[he]=KRDC -Name[hne]=केआरडीसी -Name[hr]=KRDC -Name[hu]=KRDC -Name[ia]=KRDC -Name[is]=KRDC -Name[it]=KRDC -Name[ja]=KRDC -Name[ka]=KRDC -Name[kk]=KRDC -Name[km]=KRDC -Name[ko]=KRDC -Name[lt]=KRDC -Name[lv]=KRDC -Name[ml]=കെആര്‍ഡിസി -Name[mr]=के-आर-डी-सी -Name[nb]=KRDC -Name[nds]=KRDC -Name[nl]=KRDC -Name[nn]=KRDC -Name[pa]=KRDC -Name[pl]=KRDC -Name[pt]=KRDC -Name[pt_BR]=KRDC -Name[ro]=KRDC -Name[ru]=KRDC -Name[sa]=केआरडीसी -Name[si]=KRDC -Name[sk]=KRDC -Name[sl]=KRDC -Name[sq]=KRDC -Name[sr]=КРДЦ -Name[sr@ijekavian]=КРДЦ -Name[sr@ijekavianlatin]=KRDC -Name[sr@latin]=KRDC -Name[sv]=KRDC -Name[tr]=KRDC -Name[ug]=KRDC -Name[uk]=KRDC -Name[wa]=KRDC -Name[zh_CN]=KRDC -Name[zh_TW]=遠端桌面_KRDC -GenericName=Remote Desktop Client -GenericName[ar]=عميل سطح المكتب البعيد -GenericName[az]=İş masasının uzaqdan idarə olunması -GenericName[bg]=Отдалечен работен плот -GenericName[bs]=Klijent udaljene radne površine -GenericName[ca]=Client d'escriptori remot -GenericName[ca@valencia]=Client d'escriptori remot -GenericName[cs]=Klient vzdálené pracovní plochy -GenericName[da]=Klient til fjernskrivebord -GenericName[de]=Verbindung zu entferntem Rechner -GenericName[el]=Πελάτης απομακρυσμένης επιφάνειας εργασίας -GenericName[en_GB]=Remote Desktop Client -GenericName[eo]=Kliento por fora labortablo -GenericName[es]=Cliente de escritorio remoto -GenericName[et]=Kaugtöölaua klient -GenericName[eu]=Urruneko mahaigainaren bezeroa -GenericName[fi]=Etätyöpöytäasiakas -GenericName[fr]=Connexion à un bureau distant -GenericName[ga]=Cliant Deisce Cianda -GenericName[gl]=Cliente de escritorio remoto -GenericName[he]=לקוח שולחן עבודה מרוחק -GenericName[hne]=रिमोट डेस्कटाप क्लाएंट -GenericName[hr]=Klijent za udaljeno povezivanje -GenericName[hu]=Távoli asztal kliens -GenericName[ia]=Cliente de scriptorio remote -GenericName[is]=Tengingar við fjarlæg skjáborð -GenericName[it]=Client per connessione a desktop remoto -GenericName[ja]=リモートデスクトップクライアント -GenericName[ka]=დისტანციური სამუშაო მაგიდის კლიენტი -GenericName[kk]=Қашықтан үстелге қосылу клиенті -GenericName[km]=កម្មវិធី​មើល​ផ្ទៃតុ​ពី​ចម្ងាយ -GenericName[ko]=원격 데스크톱 클라이언트 -GenericName[lt]=Nuotolinio darbalaukio kliento programa -GenericName[lv]=Attālās darbvirsmas klients -GenericName[ml]=വിദൂര പണിയിട ക്ലയന്റ് -GenericName[mr]=दूरस्थ डेस्कटॉप ग्राहक -GenericName[nb]=Tilkobling til annet skrivebord -GenericName[nds]=Schriefdisch-Feernverbinnen -GenericName[nl]=Client voor verbinding met extern bureaublad -GenericName[nn]=Tilkopling til eksternt skrivebord -GenericName[pa]=ਰਿਮੋਟ ਡੈਸਕਟਾਪ ਕਲਾਈਟ -GenericName[pl]=Klient zdalnego dostępu do pulpitu -GenericName[pt]=Cliente de Ecrãs Remotos -GenericName[pt_BR]=Cliente de área de trabalho remota -GenericName[ro]=Client pentru birou la distanță -GenericName[ru]=Удалённый доступ к рабочему столу -GenericName[sa]=दूरस्थ डेस्कटॉप क्लायन्ट -GenericName[si]=දුරස්ථ වැඩතල යෙදුම -GenericName[sk]=Klient vzdialenej pracovnej plochy -GenericName[sl]=Odjemalec za oddaljena namizja -GenericName[sr]=Клијент удаљене површи -GenericName[sr@ijekavian]=Клијент удаљене површи -GenericName[sr@ijekavianlatin]=Klijent udaljene površi -GenericName[sr@latin]=Klijent udaljene površi -GenericName[sv]=Fjärranslutning till skrivbord -GenericName[th]=ไคลเอนต์เชื่อมต่อพื้นที่ทำงานทางไกล -GenericName[tr]=Uzak Masaüstü İstemcisi -GenericName[ug]=يىراقتىكى ئۈستەلئۈستى خېرىدارى -GenericName[uk]=Клієнт з'єднання з віддаленою стільницею -GenericName[zh_CN]=远程桌面客户端 -GenericName[zh_TW]=遠端桌面用戶端 -Comment=Connect with RDP or VNC to another computer -Comment[ar]=اتصل حاسوب آخر بواسطة RDP أو VNC -Comment[az]=RDP və ya VNC ilə başqa kompüterə qoşulun -Comment[bg]=Свързване чрез RDP or VNC с друг компютър -Comment[ca]=Connecta amb RDP o VNC a un altre ordinador -Comment[ca@valencia]=Connecta amb RDP o VNC a un altre ordinador -Comment[cs]=Připojte se k jinému počítači pomocí RDP nebo VNC -Comment[da]=Opret forbindelse til en anden computer med RDP eller VNC -Comment[de]=Verbindung mit RDP oder VNC zu einem anderen Rechner -Comment[el]=Σύνδεση με RDP ή VNC σε άλλον υπολογιστή -Comment[en_GB]=Connect with RDP or VNC to another computer -Comment[eo]=Konektiĝi per RDP aŭ VNC al alia komputilo -Comment[es]=Conectar con RDP o VNC a otro equipo -Comment[et]=Ühendumine RDP või VNC vahendusel teise arvutiga -Comment[eu]=Konektatu RDP edo VNC bidez beste ordenagailu batera -Comment[fi]=Yhdistä RDP:llä tai VNC:llä toiseen tietokoneeseen -Comment[fr]=Se connecter à un autre ordinateur avec RDP ou VNC -Comment[gl]=Conectarse por RDP ou VNC a outro computador. -Comment[he]=התחברות ל־RDP או ל־VNC במחשב אחר -Comment[hu]=Csatlakozás másik számítógéphez RDP-vel vagy VNC-vel -Comment[ia]=Connecte con RDP o VNC a un altere computator -Comment[is]=Tengstu með RDP eða VNC við aðrar tölvur -Comment[it]=Connessione via RDP o VNC ad un altro computer -Comment[ka]=მიუერთდით მოშორებულ კომპიუტერზე RDP ან VNC პროტოკოლით -Comment[ko]=다른 컴퓨터에 RDP나 VNC로 연결 -Comment[lt]=Prisijungti prie kito kompiuterio naudojant RDP ar VNC -Comment[lv]=Izmantojiet RDP vai VNC, lai pievienotos citam datoram -Comment[nl]=Met RDP of VNC naar een andere computer verbinden -Comment[nn]=Kopla til ei anna datamaskin via RDP eller VNC -Comment[pl]=Połącz się przy użyciu RDP lub VNC do innego komputera -Comment[pt]=Ligar-se com RDP ou VNC a outro computador -Comment[pt_BR]=Conecte com RDP ou VNC em outro computador -Comment[ro]=Conectare la alt calculator prin RDP sau VNC -Comment[ru]=Подключение к другому компьютеру по RDP или VNC -Comment[sa]=RDP अथवा VNC इत्यनेन सह अन्यसङ्गणकेन सह सम्बद्धं कुर्वन्तु -Comment[sk]=Pripojiť pomocou RDP alebo VNC k inému počítaču -Comment[sl]=Povežite se preko RDP-ja ali VNC-ja z drugim računalnikom -Comment[sq]=Lidhu me një kompjuter tjetër përmes RDP ose VNC -Comment[sr]=Повежите се РДП‑ом или ВНЦ‑ом са другим рачунаром -Comment[sr@ijekavian]=Повежите се РДП‑ом или ВНЦ‑ом са другим рачунаром -Comment[sr@ijekavianlatin]=Povežite se RDP‑om ili VNC‑om sa drugim računarom -Comment[sr@latin]=Povežite se RDP‑om ili VNC‑om sa drugim računarom -Comment[sv]=Anslut till en annan dator med RDP eller VNC -Comment[tr]=Başka bir bilgisayara RDP veya VNC ile bağlan -Comment[uk]=З'єднання з іншим комп'ютером за допомогою RDP або VNC -Comment[zh_CN]=通过 RDP 或 VNC 连接到另一台计算机 -Comment[zh_TW]=以 RDP 或 VNC 連線到其他電腦 -X-DocPath=krdc/index.html -StartupWMClass=krdc -MimeType=x-scheme-handler/vnc;x-scheme-handler/rdp;application/x-krdc; -Categories=Qt;KDE;Network;RemoteAccess; -X-KDE-Wayland-Interfaces=org_kde_kwin_keystate -X-Flatpak=org.kde.krdc -X-SteamFrameNix-Source=@SOURCE@ diff --git a/modules/launchers/fixtures/sources/im.riot.Riot.desktop b/modules/launchers/fixtures/sources/im.riot.Riot.desktop deleted file mode 100644 index 0f8a33e..0000000 --- a/modules/launchers/fixtures/sources/im.riot.Riot.desktop +++ /dev/null @@ -1,11 +0,0 @@ -[Desktop Entry] -Type=Application -Name=Element -Comment=A Matrix-based instant messaging client -Icon=im.riot.Riot -Exec=/usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/element --file-forwarding im.riot.Riot @@u %U @@ -Categories=Network;InstantMessaging;Chat;VideoConference; -MimeType=x-scheme-handler/element;x-scheme-handler/io.element.desktop; -StartupWMClass=element -Keywords=Matrix;matrix.org;chat;irc;communications;talk;riot;vector; -X-Flatpak=im.riot.Riot diff --git a/modules/launchers/fixtures/sources/org.example.Chat.desktop b/modules/launchers/fixtures/sources/org.example.Chat.desktop new file mode 100644 index 0000000..dd3c93a --- /dev/null +++ b/modules/launchers/fixtures/sources/org.example.Chat.desktop @@ -0,0 +1,16 @@ +[Desktop Entry] +Type=Application +Name=Example Chat +Comment=A made-up Electron chat app (Flatpak) with an SSO callback scheme +Icon=org.example.Chat +Exec=/usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-chat --file-forwarding org.example.Chat @@u %U @@ +Categories=Network;InstantMessaging;Chat; +MimeType=x-scheme-handler/example-chat; +StartupWMClass=example-chat +Keywords=chat;messaging; +Actions=new-window; +X-Flatpak=org.example.Chat + +[Desktop Action new-window] +Name=New Window +Exec=/usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-chat org.example.Chat --new-window diff --git a/modules/launchers/fixtures/sources/org.example.Remote.desktop b/modules/launchers/fixtures/sources/org.example.Remote.desktop new file mode 100644 index 0000000..302d755 --- /dev/null +++ b/modules/launchers/fixtures/sources/org.example.Remote.desktop @@ -0,0 +1,16 @@ +[Desktop Entry] +Type=Application +Exec=/usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/example-remote --file-forwarding org.example.Remote -qwindowtitle %c @@u %u @@ +Icon=org.example.Remote +Terminal=false +Name=Example Remote +Name[de]=Beispiel-Fernzugriff +Name[zh_TW]=範例遠端 +GenericName=Remote Desktop Client +GenericName[de]=Fernzugriff +Comment=A made-up Qt app (Flatpak) that reads its passwords through the Secret Service +StartupWMClass=example-remote +MimeType=x-scheme-handler/vnc;x-scheme-handler/rdp;application/x-example-remote; +Categories=Qt;KDE;Network;RemoteAccess; +X-KDE-Wayland-Interfaces=org_kde_kwin_keystate +X-Flatpak=org.example.Remote diff --git a/modules/launchers/fixtures/sources/org.kde.krdc.desktop b/modules/launchers/fixtures/sources/org.kde.krdc.desktop deleted file mode 100644 index 38a01bc..0000000 --- a/modules/launchers/fixtures/sources/org.kde.krdc.desktop +++ /dev/null @@ -1,181 +0,0 @@ -[Desktop Entry] -Type=Application -Exec=/usr/bin/flatpak run --branch=stable --arch=aarch64 --command=/app/bin/krdc --file-forwarding org.kde.krdc -qwindowtitle %c @@u %u @@ -Icon=org.kde.krdc -Terminal=false -Name=KRDC -Name[ar]=كردس -Name[az]=KRDC -Name[bg]=KRDC -Name[bs]=KRDC -Name[ca]=KRDC -Name[ca@valencia]=KRDC -Name[cs]=KRDC -Name[da]=KRDC -Name[de]=KRDC -Name[el]=KRDC -Name[en_GB]=KRDC -Name[eo]=KRDC -Name[es]=KRDC -Name[et]=KRDC -Name[eu]=KRDC -Name[fi]=KRDC -Name[fr]=KRDC -Name[ga]=KRDC -Name[gl]=KRDC -Name[he]=KRDC -Name[hne]=केआरडीसी -Name[hr]=KRDC -Name[hu]=KRDC -Name[ia]=KRDC -Name[is]=KRDC -Name[it]=KRDC -Name[ja]=KRDC -Name[ka]=KRDC -Name[kk]=KRDC -Name[km]=KRDC -Name[ko]=KRDC -Name[lt]=KRDC -Name[lv]=KRDC -Name[ml]=കെആര്‍ഡിസി -Name[mr]=के-आर-डी-सी -Name[nb]=KRDC -Name[nds]=KRDC -Name[nl]=KRDC -Name[nn]=KRDC -Name[pa]=KRDC -Name[pl]=KRDC -Name[pt]=KRDC -Name[pt_BR]=KRDC -Name[ro]=KRDC -Name[ru]=KRDC -Name[sa]=केआरडीसी -Name[si]=KRDC -Name[sk]=KRDC -Name[sl]=KRDC -Name[sq]=KRDC -Name[sr]=КРДЦ -Name[sr@ijekavian]=КРДЦ -Name[sr@ijekavianlatin]=KRDC -Name[sr@latin]=KRDC -Name[sv]=KRDC -Name[tr]=KRDC -Name[ug]=KRDC -Name[uk]=KRDC -Name[wa]=KRDC -Name[zh_CN]=KRDC -Name[zh_TW]=遠端桌面_KRDC -GenericName=Remote Desktop Client -GenericName[ar]=عميل سطح المكتب البعيد -GenericName[az]=İş masasının uzaqdan idarə olunması -GenericName[bg]=Отдалечен работен плот -GenericName[bs]=Klijent udaljene radne površine -GenericName[ca]=Client d'escriptori remot -GenericName[ca@valencia]=Client d'escriptori remot -GenericName[cs]=Klient vzdálené pracovní plochy -GenericName[da]=Klient til fjernskrivebord -GenericName[de]=Verbindung zu entferntem Rechner -GenericName[el]=Πελάτης απομακρυσμένης επιφάνειας εργασίας -GenericName[en_GB]=Remote Desktop Client -GenericName[eo]=Kliento por fora labortablo -GenericName[es]=Cliente de escritorio remoto -GenericName[et]=Kaugtöölaua klient -GenericName[eu]=Urruneko mahaigainaren bezeroa -GenericName[fi]=Etätyöpöytäasiakas -GenericName[fr]=Connexion à un bureau distant -GenericName[ga]=Cliant Deisce Cianda -GenericName[gl]=Cliente de escritorio remoto -GenericName[he]=לקוח שולחן עבודה מרוחק -GenericName[hne]=रिमोट डेस्कटाप क्लाएंट -GenericName[hr]=Klijent za udaljeno povezivanje -GenericName[hu]=Távoli asztal kliens -GenericName[ia]=Cliente de scriptorio remote -GenericName[is]=Tengingar við fjarlæg skjáborð -GenericName[it]=Client per connessione a desktop remoto -GenericName[ja]=リモートデスクトップクライアント -GenericName[ka]=დისტანციური სამუშაო მაგიდის კლიენტი -GenericName[kk]=Қашықтан үстелге қосылу клиенті -GenericName[km]=កម្មវិធី​មើល​ផ្ទៃតុ​ពី​ចម្ងាយ -GenericName[ko]=원격 데스크톱 클라이언트 -GenericName[lt]=Nuotolinio darbalaukio kliento programa -GenericName[lv]=Attālās darbvirsmas klients -GenericName[ml]=വിദൂര പണിയിട ക്ലയന്റ് -GenericName[mr]=दूरस्थ डेस्कटॉप ग्राहक -GenericName[nb]=Tilkobling til annet skrivebord -GenericName[nds]=Schriefdisch-Feernverbinnen -GenericName[nl]=Client voor verbinding met extern bureaublad -GenericName[nn]=Tilkopling til eksternt skrivebord -GenericName[pa]=ਰਿਮੋਟ ਡੈਸਕਟਾਪ ਕਲਾਈਟ -GenericName[pl]=Klient zdalnego dostępu do pulpitu -GenericName[pt]=Cliente de Ecrãs Remotos -GenericName[pt_BR]=Cliente de área de trabalho remota -GenericName[ro]=Client pentru birou la distanță -GenericName[ru]=Удалённый доступ к рабочему столу -GenericName[sa]=दूरस्थ डेस्कटॉप क्लायन्ट -GenericName[si]=දුරස්ථ වැඩතල යෙදුම -GenericName[sk]=Klient vzdialenej pracovnej plochy -GenericName[sl]=Odjemalec za oddaljena namizja -GenericName[sr]=Клијент удаљене површи -GenericName[sr@ijekavian]=Клијент удаљене површи -GenericName[sr@ijekavianlatin]=Klijent udaljene površi -GenericName[sr@latin]=Klijent udaljene površi -GenericName[sv]=Fjärranslutning till skrivbord -GenericName[th]=ไคลเอนต์เชื่อมต่อพื้นที่ทำงานทางไกล -GenericName[tr]=Uzak Masaüstü İstemcisi -GenericName[ug]=يىراقتىكى ئۈستەلئۈستى خېرىدارى -GenericName[uk]=Клієнт з'єднання з віддаленою стільницею -GenericName[zh_CN]=远程桌面客户端 -GenericName[zh_TW]=遠端桌面用戶端 -Comment=Connect with RDP or VNC to another computer -Comment[ar]=اتصل حاسوب آخر بواسطة RDP أو VNC -Comment[az]=RDP və ya VNC ilə başqa kompüterə qoşulun -Comment[bg]=Свързване чрез RDP or VNC с друг компютър -Comment[ca]=Connecta amb RDP o VNC a un altre ordinador -Comment[ca@valencia]=Connecta amb RDP o VNC a un altre ordinador -Comment[cs]=Připojte se k jinému počítači pomocí RDP nebo VNC -Comment[da]=Opret forbindelse til en anden computer med RDP eller VNC -Comment[de]=Verbindung mit RDP oder VNC zu einem anderen Rechner -Comment[el]=Σύνδεση με RDP ή VNC σε άλλον υπολογιστή -Comment[en_GB]=Connect with RDP or VNC to another computer -Comment[eo]=Konektiĝi per RDP aŭ VNC al alia komputilo -Comment[es]=Conectar con RDP o VNC a otro equipo -Comment[et]=Ühendumine RDP või VNC vahendusel teise arvutiga -Comment[eu]=Konektatu RDP edo VNC bidez beste ordenagailu batera -Comment[fi]=Yhdistä RDP:llä tai VNC:llä toiseen tietokoneeseen -Comment[fr]=Se connecter à un autre ordinateur avec RDP ou VNC -Comment[gl]=Conectarse por RDP ou VNC a outro computador. -Comment[he]=התחברות ל־RDP או ל־VNC במחשב אחר -Comment[hu]=Csatlakozás másik számítógéphez RDP-vel vagy VNC-vel -Comment[ia]=Connecte con RDP o VNC a un altere computator -Comment[is]=Tengstu með RDP eða VNC við aðrar tölvur -Comment[it]=Connessione via RDP o VNC ad un altro computer -Comment[ka]=მიუერთდით მოშორებულ კომპიუტერზე RDP ან VNC პროტოკოლით -Comment[ko]=다른 컴퓨터에 RDP나 VNC로 연결 -Comment[lt]=Prisijungti prie kito kompiuterio naudojant RDP ar VNC -Comment[lv]=Izmantojiet RDP vai VNC, lai pievienotos citam datoram -Comment[nl]=Met RDP of VNC naar een andere computer verbinden -Comment[nn]=Kopla til ei anna datamaskin via RDP eller VNC -Comment[pl]=Połącz się przy użyciu RDP lub VNC do innego komputera -Comment[pt]=Ligar-se com RDP ou VNC a outro computador -Comment[pt_BR]=Conecte com RDP ou VNC em outro computador -Comment[ro]=Conectare la alt calculator prin RDP sau VNC -Comment[ru]=Подключение к другому компьютеру по RDP или VNC -Comment[sa]=RDP अथवा VNC इत्यनेन सह अन्यसङ्गणकेन सह सम्बद्धं कुर्वन्तु -Comment[sk]=Pripojiť pomocou RDP alebo VNC k inému počítaču -Comment[sl]=Povežite se preko RDP-ja ali VNC-ja z drugim računalnikom -Comment[sq]=Lidhu me një kompjuter tjetër përmes RDP ose VNC -Comment[sr]=Повежите се РДП‑ом или ВНЦ‑ом са другим рачунаром -Comment[sr@ijekavian]=Повежите се РДП‑ом или ВНЦ‑ом са другим рачунаром -Comment[sr@ijekavianlatin]=Povežite se RDP‑om ili VNC‑om sa drugim računarom -Comment[sr@latin]=Povežite se RDP‑om ili VNC‑om sa drugim računarom -Comment[sv]=Anslut till en annan dator med RDP eller VNC -Comment[tr]=Başka bir bilgisayara RDP veya VNC ile bağlan -Comment[uk]=З'єднання з іншим комп'ютером за допомогою RDP або VNC -Comment[zh_CN]=通过 RDP 或 VNC 连接到另一台计算机 -Comment[zh_TW]=以 RDP 或 VNC 連線到其他電腦 -X-DocPath=krdc/index.html -StartupWMClass=krdc -MimeType=x-scheme-handler/vnc;x-scheme-handler/rdp;application/x-krdc; -Categories=Qt;KDE;Network;RemoteAccess; -X-KDE-Wayland-Interfaces=org_kde_kwin_keystate -X-Flatpak=org.kde.krdc diff --git a/modules/launchers/lib.nix b/modules/launchers/lib.nix index 6735f9a..899ec65 100644 --- a/modules/launchers/lib.nix +++ b/modules/launchers/lib.nix @@ -111,7 +111,7 @@ in rec { defaultFor = lib.mkOption { type = lib.types.listOf lib.types.str; default = [ ]; - example = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ]; + example = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ]; description = '' MIME types / `x-scheme-handler/` the app becomes the default and a recommended handler for (`xdg.mimeApps`, Added Associations: @@ -122,7 +122,7 @@ in rec { settings = lib.mkOption { type = lib.types.attrsOf (lib.types.nullOr lib.types.str); default = { }; - example = { Name = "Element (wallet)"; Keywords = null; }; + example = { Name = "Signal (wallet)"; Keywords = null; }; description = '' `[Desktop Entry]` keys to set or override (value in key-file syntax, as given); `null` removes a key. Either way the key's localized diff --git a/template/home.nix b/template/home.nix index ad068d2..a7fbcf4 100644 --- a/template/home.nix +++ b/template/home.nix @@ -65,11 +65,11 @@ # # org.jellyfin.JellyfinDesktop yourself); gives it devices=all: # jellyfin.hardwareDecoding.enable = true; # # Apps that keep logins in the KDE wallet: one wallet for both - # # sessions (Element: install im.riot.Riot yourself): - # launchers."im.riot.Riot" = { + # # sessions (install the Signal Flatpak org.signal.Signal yourself): + # launchers."org.signal.Signal" = { # keyring = { enable = true; electron = true; }; - # # SSO callback: - # defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ]; + # # link callbacks: + # defaultFor = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ]; # }; # docker.enable = true; # rootless Docker, user service # };