{ config, lib, pkgs, ... }: let cfg = config.features.swayDesktop; in { options = { features.swayDesktop.enable = lib.mkEnableOption "Enable Sway Desktop"; }; config = lib.mkIf cfg.enable { programs.sway = { enable = true; wrapperFeatures.gtk = true; extraSessionCommands = '' # QT export QT_QPA_PLATFORM="wayland;xcb" export QT_QPA_PLATFORMTHEME=qt5ct # SDL export SDL_VIDEODRIVER=wayland # Java export _JAVA_AWT_WM_NONREPARENTING=1 # Misc export CLUTTER_BACKEND=wayland export WINIT_UNIX_BACKEND=wayland export MOZ_ENABLE_WAYLAND=1 ''; # Core Wayland utilities. The lock screen, idle daemon, status bar and # notification daemon are configured per-user in home/sway.nix. extraPackages = with pkgs; [ brightnessctl foot grim sway-launcher-desktop pavucontrol ]; }; fonts.packages = with pkgs; [ noto-fonts noto-fonts-color-emoji font-awesome ]; # Desktop portals: enables screen sharing (wlroots) and native file pickers # for Wayland apps such as Element and Firefox. xdg.portal = { enable = true; wlr.enable = true; extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; config.common.default = "*"; }; }; }