2026-03-06 06:06:10 +03:00
|
|
|
|
{ pkgs, inputs, ... }:
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
# Важно: портал должен быть собран под тот же Hyprland, что и сам Hyprland
|
|
|
|
|
|
# (есть отдельная опция именно для этого).
|
|
|
|
|
|
programs.hyprland = {
|
2026-04-29 00:16:31 +03:00
|
|
|
|
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
|
|
|
|
|
portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
2026-03-06 06:06:10 +03:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
xdg.portal = {
|
|
|
|
|
|
enable = true;
|
|
|
|
|
|
|
|
|
|
|
|
# Делает так, что xdg-open идёт через портал (часто полезно для sandbox/FHS/wrappers).
|
|
|
|
|
|
# Опция есть в NixOS как xdg.portal.xdgOpenUsePortal :contentReference[oaicite:2]{index=2}
|
|
|
|
|
|
xdgOpenUsePortal = true;
|
|
|
|
|
|
|
|
|
|
|
|
# Два бэкенда: Hyprland (композитор-специфичное) + GTK (интеграция/диалоги/OpenURI)
|
|
|
|
|
|
extraPortals = [
|
2026-04-29 00:16:31 +03:00
|
|
|
|
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland
|
2026-03-06 06:06:10 +03:00
|
|
|
|
pkgs.xdg-desktop-portal-gtk
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
# Роутинг интерфейсов по portals.conf(5):
|
|
|
|
|
|
# xdg-desktop-portal выбирает конфиг по XDG_CURRENT_DESKTOP (с lower-case) :contentReference[oaicite:3]{index=3}
|
|
|
|
|
|
config = {
|
|
|
|
|
|
common = {
|
|
|
|
|
|
default = [ "gtk" ];
|
|
|
|
|
|
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
|
|
|
|
|
|
"org.freedesktop.impl.portal.ScreenCast" = [ "hyprland" ];
|
|
|
|
|
|
"org.freedesktop.impl.portal.Screenshot" = [ "hyprland" ];
|
|
|
|
|
|
"org.freedesktop.impl.portal.GlobalShortcuts" = [ "hyprland" ];
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
# Если XDG_CURRENT_DESKTOP=Hyprland присутствует — предпочитаем Hyprland,
|
|
|
|
|
|
# но оставляем gtk как fallback для интерфейсов, которых нет у hyprland-портала.
|
|
|
|
|
|
hyprland.default = [ "hyprland" "gtk" ];
|
|
|
|
|
|
};
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|