40 lines
1.8 KiB
Nix
40 lines
1.8 KiB
Nix
{ pkgs, inputs, ... }:
|
||
|
||
{
|
||
# Важно: портал должен быть собран под тот же Hyprland, что и сам Hyprland
|
||
# (есть отдельная опция именно для этого).
|
||
programs.hyprland = {
|
||
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
||
portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
||
};
|
||
|
||
xdg.portal = {
|
||
enable = true;
|
||
|
||
# Делает так, что xdg-open идёт через портал (часто полезно для sandbox/FHS/wrappers).
|
||
# Опция есть в NixOS как xdg.portal.xdgOpenUsePortal :contentReference[oaicite:2]{index=2}
|
||
xdgOpenUsePortal = true;
|
||
|
||
# Два бэкенда: Hyprland (композитор-специфичное) + GTK (интеграция/диалоги/OpenURI)
|
||
extraPortals = [
|
||
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland
|
||
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" ];
|
||
};
|
||
};
|
||
} |