diff --git a/nixos/modules/config/xdg/portal.nix b/nixos/modules/config/xdg/portal.nix
index 4e85bf794da..89ddf80b575 100644
--- a/nixos/modules/config/xdg/portal.nix
+++ b/nixos/modules/config/xdg/portal.nix
@@ -1,10 +1,12 @@
{ config, pkgs ,lib ,... }:
+
with lib;
+
{
options.xdg.portal = {
enable =
mkEnableOption "xdg desktop integration"//{
- default = config.services.xserver.enable;
+ default = false;
};
extraPortals = mkOption {
@@ -19,6 +21,17 @@ with lib;
environments you probably want to add them yourself.
'';
};
+
+ gtkUsePortal = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Sets environment variable GTK_USE_PORTAL to 1.
+ This is needed for packages ran outside Flatpak to respect and use XDG Desktop Portals.
+ For example, you'd need to set this for non-flatpak Firefox to use native filechoosers.
+ Defaults to false to respect its opt-in nature.
+ '';
+ };
};
config =
@@ -28,10 +41,17 @@ with lib;
in mkIf cfg.enable {
+ assertions = [
+ { assertion = (cfg.gtkUsePortal -> cfg.extraPortals != []);
+ message = "Setting xdg.portal.gtkUsePortal to true requires a portal implementation in xdg.portal.extraPortals such as xdg-desktop-portal-gtk or xdg-desktop-portal-kde.";
+ }
+ ];
+
services.dbus.packages = packages;
systemd.packages = packages;
+
environment.variables = {
- GTK_USE_PORTAL = "1";
+ GTK_USE_PORTAL = optional cfg.gtkUsePortal "1";
XDG_DESKTOP_PORTAL_PATH = map (p: "${p}/share/xdg-desktop-portal/portals") cfg.extraPortals;
};
};
diff --git a/nixos/modules/services/desktops/flatpak.nix b/nixos/modules/services/desktops/flatpak.nix
index 82463406118..1492d855aa0 100644
--- a/nixos/modules/services/desktops/flatpak.nix
+++ b/nixos/modules/services/desktops/flatpak.nix
@@ -22,6 +22,12 @@ in {
###### implementation
config = mkIf cfg.enable {
+ assertions = [
+ { assertion = (config.xdg.portal.enable == true);
+ message = "To use Flatpak you must enable XDG Desktop Portals with xdg.portal.enable.";
+ }
+ ];
+
environment.systemPackages = [ pkgs.flatpak ];
services.dbus.packages = [ pkgs.flatpak ];
diff --git a/nixos/modules/services/x11/desktop-managers/gnome3.nix b/nixos/modules/services/x11/desktop-managers/gnome3.nix
index c4c742ed9d7..cd750242125 100644
--- a/nixos/modules/services/x11/desktop-managers/gnome3.nix
+++ b/nixos/modules/services/x11/desktop-managers/gnome3.nix
@@ -154,6 +154,7 @@ in {
services.hardware.bolt.enable = mkDefault true;
services.xserver.libinput.enable = mkDefault true; # for controlling touchpad settings via gnome control center
systemd.packages = [ pkgs.gnome3.vino ];
+ xdg.portal.enable = true;
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
# If gnome3 is installed, build vim for gtk3 too.
diff --git a/nixos/modules/services/x11/desktop-managers/plasma5.nix b/nixos/modules/services/x11/desktop-managers/plasma5.nix
index 98c9ae86cee..6d148fba895 100644
--- a/nixos/modules/services/x11/desktop-managers/plasma5.nix
+++ b/nixos/modules/services/x11/desktop-managers/plasma5.nix
@@ -170,7 +170,7 @@ in
xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/
]
-
+
# Phonon audio backend
++ lib.optional (cfg.phononBackend == "gstreamer") libsForQt5.phonon-backend-gstreamer
++ lib.optional (cfg.phononBackend == "gstreamer" && cfg.enableQt4Support) pkgs.phonon-backend-gstreamer
@@ -233,6 +233,7 @@ in
security.pam.services.sddm.enableKwallet = true;
security.pam.services.slim.enableKwallet = true;
+ xdg.portal.enable = true;
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-kde ];
# Update the start menu for each user that is currently logged in