{ config, lib, pkgs, ... }: let cfg = config.ptw.programs.plasma; in { options.ptw.programs.plasma = { enable = lib.mkEnableOption "Enable KDE Plasma"; mobile = { enable = lib.mkEnableOption "Enable Plasma Mobile"; }; wayland = { enable = lib.mkOption { default = true; description = "Ignore NixOS 'recommendations' and use the Wayland session by default"; }; }; sddm = { backgroundImage = lib.mkOption { default = "${pkgs.sddm-sugar-dark}/usr/share/sddm/themes/sugar-dark/Background.jpg"; description = "The background image to use with sddm-sugar-dark"; }; screenWidth = lib.mkOption { default = 1920; description = "Width of the screen"; }; screenHeight = lib.mkOption { default = 1080; description = "Width of the screen"; }; }; }; config = lib.mkIf cfg.enable { security.pam.services = { login.enableKwallet = true; greetd.enableKwallet = true; }; services.xserver = { desktopManager.plasma5 = { enable = true; runUsingSystemd = true; supportDDC = true; mobile.enable = cfg.mobile.enable; kdeglobals = lib.mkIf cfg.mobile.enable { KDE = { StartDragDist = "10"; LookAndFeelPackage = "org.kde.plasma.phone"; }; Icons = { Theme = "breeze"; }; General = { ColorScheme = "breeze"; Name = "breeze"; XftHintStyle = "none"; XftSubPixel = "none"; shadeSortColumn = "true"; }; }; kwinrc = lib.mkIf cfg.mobile.enable { Plugins = { "org.kde.phone.multitaskingEnabled" = "false"; "kwin4_effect_eyeonscreenEnabled" = "false"; "kwin4_effect_windowapertureEnabled" = "false"; blurEnabled = "false"; contrastEnabled = "false"; }; Windows = { Placement = "Maximizing"; }; TabBox = { TouchBorderActive = "9"; TouchBorderAlternativeActive = "9"; BorderActivate = "9"; }; "Effect-PresentWindows" = { BorderActivateAll = "9"; }; "org.kde.kdecoration2" = { NoPlugin = "true"; }; TouchEdges = { Left = "None"; Right = "None"; }; Wayland = { InputMethod = "${pkgs.maliit-keyboard}/usr/share/applications/com.github.maliit.keyboard.desktop"; }; }; }; # See https://github.com/NixOS/nixpkgs/commit/a506f9c79700255c215dddb53455d5e2bed6c1af displayManager = { defaultSession = lib.mkIf cfg.wayland.enable "plasmawayland"; #sessionPackages = lib.mkIf cfg.mobile.enable [ pkgs.libsForQt5.plasma5.plasma-mobile ]; }; }; users.users.greeter = { home = "/var/lib/greeter"; createHome = true; isSystemUser = true; }; services.greetd = { enable = true; settings = let swayGreeterConfig = pkgs.writeText "sway-config" '' exec "${pkgs.qtgreet}/bin/qtgreet -d ${config.users.users.greeter.home}/data; ${pkgs.sway}/bin/swaymsg exit" bindsym Mod4+shift+e exec ${pkgs.sway}/bin/swaynag \ -t warning \ -m 'What do you want to do?' \ -b 'Poweroff' 'systemctl poweroff' \ -b 'Reboot' 'systemctl reboot' input * { xkb_layout de } ''; in { default_session = { command = "${pkgs.sway}/bin/sway --config ${swayGreeterConfig}"; }; }; }; xdg.portal = { enable = true; extraPortals = [ pkgs.xdg-desktop-portal-kde ]; }; environment = { systemPackages = let plasmaMobilePackages = with pkgs.libsForQt5; with plasma5; with kdeApplications; with kdeFrameworks; [ plasma-mobile plasma-nano pkgs.maliit-framework pkgs.maliit-keyboard ]; kdePackages = with pkgs.libsForQt5; [ okular kdeconnect-kde breeze-gtk #bismuth gwenview yakuake kdeplasma-addons plasma-nm ] ++ lib.optionals cfg.mobile.enable plasmaMobilePackages; packages = with pkgs; [ kde-rounded-corners index-fm rsibreak kalendar kate okular ark kcalc # Some Gnome software gnome.totem ]; in kdePackages ++ packages; sessionVariables = let askPass = "${pkgs.libsForQt5.ksshaskpass}/bin/ksshaskpass"; in { SSH_ASKPASS = askPass; SSH_ASKPASS_REQUIRE = "prefer"; GIT_ASKPASS = askPass; }; }; }; }