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.
This commit is contained in:
Pierre Kisters committed 2026-10-01 18:16:37 +02:00
1 parent 3acacc6388
commit 59afc2f616
16 files changed
+122 -452

No files matched your search

+2 -2
View File
@@ -218,9 +218,9 @@ these two files ([`template/`](template), with more comments):
firefox.disableAv1 = true; firefox.disableAv1 = true;
firefox.defaultBrowser = true; firefox.defaultBrowser = true;
jellyfin.hardwareDecoding.enable = true; # install the Flatpak yourself 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; }; 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 docker.enable = true; # rootless
}; };
+16 -18
View File
@@ -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 `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 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. the login made in the desktop (stored in the wallet) is gone.
- **Flatpak permissions:** many Flatpaks may not talk to the wallet at all - **Flatpak permissions:** many Flatpaks may not talk to the wallet at all,
(Element), or only to `org.kde.kwalletd6` while their KF6 wallet client or only to `org.kde.kwalletd6` while their KF6 wallet client reads through
reads through the Secret Service `org.freedesktop.secrets` (KRDC: "Password the Secret Service `org.freedesktop.secrets` (the app finds no password).
not found"). - **Login callbacks:** logins come back through a URL scheme (e.g.
- **Login callbacks:** SSO logins come back through a URL scheme `signalcaptcha://`) opened by the portal. Unless the app
(`io.element.desktop://`, `signalcaptcha://`) opened by the portal. Unless the app
is the default and a recommended handler, the portal opens an app chooser, is the default and a recommended handler, the portal opens an app chooser,
which isn't shown in VR. 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 app ID unless `source.package` or `source.file` is set. Installing the app
is up to you. is up to you.
A Flatpak whose logins live in the wallet (Element, an Electron app), with A Flatpak whose logins live in the wallet (Signal, an Electron app), with
its SSO callback schemes: its link callback schemes, and a non-Electron app:
```nix ```nix
steamFrame.launchers."im.riot.Riot" = { steamFrame.launchers."org.signal.Signal" = {
keyring = { enable = true; electron = true; }; 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 A program from a Nix package (installed by you, e.g. in `home.packages`),
(`share/applications/<desktop ID>.desktop`, rewritten at build time): from the package's own entry (`share/applications/<desktop ID>.desktop`,
rewritten at build time):
```nix ```nix
{ pkgs, ... }: { { pkgs, ... }: {
home.packages = [ pkgs.signal-desktop ];
steamFrame.launchers.signal = { steamFrame.launchers.signal = {
source.package = pkgs.signal-desktop; source.package = pkgs.signal-desktop;
keyring = { enable = true; electron = true; }; 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 `@@u %U @@`, `%c`, action arguments) stays. `DBusActivatable=true` becomes
`false` (otherwise the desktop would start the app over D-Bus, skipping `false` (otherwise the desktop would start the app over D-Bus, skipping
Exec), `defaultFor` and `mimeTypes` are added to `MimeType=`, and 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; }`: `keyring = { enable = true; electron = true; }`:
```sh ```sh
env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \ 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 \ --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 `flatpak run` connects the sandbox's D-Bus proxy (and portals) to the bus in
+2 -2
View File
@@ -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 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 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 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 sandbox: a Flatpak app's file selector shows only its sandbox, not your
your home dir. home dir.
**What you get:** a working OpenURI portal in the Steam session and, with **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 `fileChooser`, KDE's file dialog there (a normal window in VR) with access
+2 -2
View File
@@ -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 mkdir -p $root/run/steam-frame-nix $root/run/systemd/user/steamvr.service.d
echo old > $root/run/steam-frame-nix/steamvr-debugger-restore echo old > $root/run/steam-frame-nix/steamvr-debugger-restore
mkdir -p $root/run/steam-frame-nix/applications # steamFrame.launchers mkdir -p $root/run/steam-frame-nix/applications # steamFrame.launchers
echo '[Desktop Entry]' > $root/run/steam-frame-nix/applications/im.riot.Riot.desktop echo '[Desktop Entry]' > $root/run/steam-frame-nix/applications/org.example.App.desktop
echo x > $root/run/steam-frame-nix/applications/.im.riot.Riot.desktop.sum echo x > $root/run/steam-frame-nix/applications/.org.example.App.desktop.sum
: > $root/run/steam-frame-nix/applications/.lock : > $root/run/steam-frame-nix/applications/.lock
ln -s $HOME/.local/share/Steam/userdata/1/760/remote/250820/screenshots \ ln -s $HOME/.local/share/Steam/userdata/1/760/remote/250820/screenshots \
$root/run/steam-frame-nix/screenshots # steamFrame.screenshots $root/run/steam-frame-nix/screenshots # steamFrame.screenshots
+5 -14
View File
@@ -37,15 +37,11 @@ let
removed = what: lib.mkRemovedOptionModule [ "steamFrame" "keyring" what ] '' removed = what: lib.mkRemovedOptionModule [ "steamFrame" "keyring" what ] ''
Keyring launchers are now steamFrame.launchers.<desktop ID>, made from the Keyring launchers are now steamFrame.launchers.<desktop ID>, made from the
app's own desktop entry (name, icon, actions come from it), e.g. app's own desktop entry (name, icon, actions come from it), e.g.
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" ];
};
steamFrame.launchers.signal = {
source.package = pkgs.signal-desktop;
keyring = { enable = true; electron = true; }; keyring = { enable = true; electron = true; };
defaultFor = [ "x-scheme-handler/sgnl" ]; defaultFor = [ "x-scheme-handler/sgnl" ];
}; };
steamFrame.launchers.signal.source.package = pkgs.signal-desktop; # a package's entry
(schemeHandlers = [ "x" ] -> defaultFor = [ "x-scheme-handler/x" ]; (schemeHandlers = [ "x" ] -> defaultFor = [ "x-scheme-handler/x" ];
flatpakArgs, args, mimeTypes, settings keep their meaning; name, icon, flatpakArgs, args, mimeTypes, settings keep their meaning; name, icon,
categories, actions, executable, fieldCode, ... are gone.) categories, actions, executable, fieldCode, ... are gone.)
@@ -58,16 +54,11 @@ in {
default = { }; default = { };
example = lib.literalExpression '' example = lib.literalExpression ''
{ {
"im.riot.Riot" = { "org.signal.Signal" = {
keyring = { enable = true; electron = true; }; 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" ];
};
"org.kde.krdc".keyring.enable = true;
signal = {
source.package = pkgs.signal-desktop;
keyring = { enable = true; electron = true; };
defaultFor = [ "x-scheme-handler/sgnl" ];
}; };
"org.example.App".keyring.enable = true;
} }
''; '';
description = '' description = ''
+23 -22
View File
@@ -1,8 +1,9 @@
# Checks of steamFrame.launchers (lib.nix, rewrite.awk, generate.sh) on # Checks of steamFrame.launchers (lib.nix, rewrite.awk, generate.sh) on
# copies of real entries (fixtures/sources: Element, KRDC, Firefox, gedit # copies of real entries (fixtures/sources: Firefox, gedit (DBusActivatable)
# (DBusActivatable) from /var/lib/flatpak, Jellyfin from the user # from /var/lib/flatpak, Jellyfin from the user installation) and made-up
# installation) and three made-up ones (quoting, an Exec without anchor, an # ones: two Flatpaks (an Electron chat app with an action and an SSO scheme,
# Electron app from a fake package): # 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 # - the rewritten entries equal fixtures/expected (X-SteamFrameNix-Source
# compared separately) and pass desktop-file-validate; # compared separately) and pass desktop-file-validate;
# - the generator: unchanged sources change nothing (mtimes kept, no touch of # - 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"; })); (L.launcherModule { bus = "unix:path=/run/user/1000/bus"; }));
}; };
config.launchers = { config.launchers = {
"im.riot.Riot" = { "org.example.Chat" = {
keyring = { enable = true; electron = true; }; 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" = { "org.mozilla.firefox" = {
wrappers = [ "/nix/store/00000000000000000000000000000000-firefox-wrapper" ]; wrappers = [ "/nix/store/00000000000000000000000000000000-firefox-wrapper" ];
defaultFor = [ "x-scheme-handler/http" "x-scheme-handler/https" "text/html" ]; 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 export STEAM_FRAME_NIX_FLATPAK_EXPORTS=$root/user:$root/system
out_dir=$root/run/steam-frame-nix/applications out_dir=$root/run/steam-frame-nix/applications
mkdir -p $root/user $root/system $root/apps 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/ cp ${src}/$id.desktop $root/system/
done done
cp ${src}/org.jellyfin.JellyfinDesktop.desktop $root/user/ cp ${src}/org.jellyfin.JellyfinDesktop.desktop $root/user/
@@ -130,7 +131,7 @@ pkgs.runCommand "launchers-check" {
cp ${app} $out/actual/org.example.App.desktop 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 \ grep -qx "X-SteamFrameNix-Source=$root/user/org.jellyfin.JellyfinDesktop.desktop" $out/actual/org.jellyfin.JellyfinDesktop.desktop \
|| fail "Jellyfin not from the user installation" || 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=${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" 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 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 for f in $out_dir/*.desktop; do [ "$(mt $f)" = 1000000000 ] || fail "unchanged run rewrote $f"; done
# changed source: rewritten, dir touched # changed source: rewritten, dir touched
echo '# changed' >> $root/system/org.kde.krdc.desktop echo '# changed' >> $root/system/org.example.Remote.desktop
run run
logged "org.kde.krdc: entry written" logged "org.example.Remote: entry written"
[ "$(mt $out_dir/org.kde.krdc.desktop)" != 1000000000 ] || fail "changed source not rewritten" [ "$(mt $out_dir/org.example.Remote.desktop)" != 1000000000 ] || fail "changed source not rewritten"
[ "$(mt $out_dir/im.riot.Riot.desktop)" = 1000000000 ] || fail "other entry 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" [ "$(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 # launcher no longer configured, source gone: removed
echo stale > $out_dir/org.example.Old.desktop; echo x > $out_dir/.org.example.Old.desktop.sum 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" [ "$(mt $root/apps)" != 1000000000 ] || fail "removal didn't touch the applications dir"
# edited entry (e.g. KDE's editor writing through the link): overwritten # edited entry (e.g. KDE's editor writing through the link): overwritten
cp $out_dir/im.riot.Riot.desktop $root/riot cp $out_dir/org.example.Chat.desktop $root/chat
echo 'Name[de]=Edited' >> $out_dir/im.riot.Riot.desktop echo 'Name[de]=Edited' >> $out_dir/org.example.Chat.desktop
run run
logged "im.riot.Riot.desktop was edited" logged "org.example.Chat.desktop was edited"
cmp -s $root/riot $out_dir/im.riot.Riot.desktop || fail "edit not overwritten" cmp -s $root/chat $out_dir/org.example.Chat.desktop || fail "edit not overwritten"
# replaced link: reported; our own link: not # replaced link: reported; our own link: not
ln -s $out_dir/im.riot.Riot.desktop $root/apps/im.riot.Riot.desktop ln -s $out_dir/org.example.Chat.desktop $root/apps/org.example.Chat.desktop
echo '[Desktop Entry]' > $root/apps/org.kde.krdc.desktop echo '[Desktop Entry]' > $root/apps/org.example.Remote.desktop
run run
logged "org.kde.krdc.desktop no longer leads to" logged "org.example.Remote.desktop no longer leads to"
! grep -q "im.riot.Riot.desktop no longer" $root/log || fail "own link reported" ! 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 # no launchers left (the activation runs it anyway): all entries removed
old $root/apps old $root/apps
@@ -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@
@@ -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
@@ -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@
@@ -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@
@@ -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
@@ -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
@@ -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
@@ -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
+2 -2
View File
@@ -111,7 +111,7 @@ in rec {
defaultFor = lib.mkOption { defaultFor = lib.mkOption {
type = lib.types.listOf lib.types.str; type = lib.types.listOf lib.types.str;
default = [ ]; default = [ ];
example = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ]; example = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ];
description = '' description = ''
MIME types / `x-scheme-handler/<scheme>` the app becomes the default MIME types / `x-scheme-handler/<scheme>` the app becomes the default
and a recommended handler for (`xdg.mimeApps`, Added Associations: and a recommended handler for (`xdg.mimeApps`, Added Associations:
@@ -122,7 +122,7 @@ in rec {
settings = lib.mkOption { settings = lib.mkOption {
type = lib.types.attrsOf (lib.types.nullOr lib.types.str); type = lib.types.attrsOf (lib.types.nullOr lib.types.str);
default = { }; default = { };
example = { Name = "Element (wallet)"; Keywords = null; }; example = { Name = "Signal (wallet)"; Keywords = null; };
description = '' description = ''
`[Desktop Entry]` keys to set or override (value in key-file syntax, `[Desktop Entry]` keys to set or override (value in key-file syntax,
as given); `null` removes a key. Either way the key's localized as given); `null` removes a key. Either way the key's localized
+4 -4
View File
@@ -65,11 +65,11 @@
# # org.jellyfin.JellyfinDesktop yourself); gives it devices=all: # # org.jellyfin.JellyfinDesktop yourself); gives it devices=all:
# jellyfin.hardwareDecoding.enable = true; # jellyfin.hardwareDecoding.enable = true;
# # Apps that keep logins in the KDE wallet: one wallet for both # # Apps that keep logins in the KDE wallet: one wallet for both
# # sessions (Element: install im.riot.Riot yourself): # # sessions (install the Signal Flatpak org.signal.Signal yourself):
# launchers."im.riot.Riot" = { # launchers."org.signal.Signal" = {
# keyring = { enable = true; electron = true; }; # keyring = { enable = true; electron = true; };
# # SSO callback: # # link callbacks:
# defaultFor = [ "x-scheme-handler/element" "x-scheme-handler/io.element.desktop" ]; # defaultFor = [ "x-scheme-handler/sgnl" "x-scheme-handler/signalcaptcha" ];
# }; # };
# docker.enable = true; # rootless Docker, user service # docker.enable = true; # rootless Docker, user service
# }; # };