From d6537416aa7533e3138dae0e712f0ca4190116f8 Mon Sep 17 00:00:00 2001 From: K900 Date: Tue, 3 Oct 2023 12:48:48 +0300 Subject: [PATCH 1/2] sddm: backport a bunch of Wayland fixes --- .../display-managers/sddm/default.nix | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/display-managers/sddm/default.nix b/pkgs/applications/display-managers/sddm/default.nix index 04826274bb69..94550f69d941 100644 --- a/pkgs/applications/display-managers/sddm/default.nix +++ b/pkgs/applications/display-managers/sddm/default.nix @@ -1,4 +1,4 @@ -{ mkDerivation, lib, fetchFromGitHub +{ mkDerivation, lib, fetchFromGitHub, fetchpatch , cmake, extra-cmake-modules, pkg-config, qttools , libxcb, libXau, pam, qtbase, qtdeclarative, qtquickcontrols2, systemd, xkeyboardconfig }: @@ -16,6 +16,25 @@ mkDerivation rec { patches = [ ./sddm-ignore-config-mtime.patch ./sddm-default-session.patch + + # FIXME: all of the following are Wayland related backports, drop in next release + # Don't use Qt virtual keyboard on Wayland + (fetchpatch { + url = "https://github.com/sddm/sddm/commit/07631f2ef00a52d883d0fd47ff7d1e1a6bc6358f.patch"; + hash = "sha256-HTSw3YeT4z9ldr4sLmsnrPQ+LA8/a6XxrF+KUFqXUlM="; + }) + + # Fix running sddm-greeter manually in Wayland sessions + (fetchpatch { + url = "https://github.com/sddm/sddm/commit/e27b70957505dc7b986ab2fa68219af546c63344.patch"; + hash = "sha256-6hzrFeS2epL9vzLOA29ZA/dD3Jd4rPMBHhNp+FBq1bA="; + }) + + # Prefer GreeterEnvironment over PAM environment + (fetchpatch { + url = "https://github.com/sddm/sddm/commit/9e7791d5fb375933d20f590daba9947195515b26.patch"; + hash = "sha256-JNsVTJNZV6T+SPqPkaFf3wg8NDqXGx8NZ4qQfZWOli4="; + }) ]; postPatch = '' From 76917ca3ae8fa50e49f774176e8d9b112aa00680 Mon Sep 17 00:00:00 2001 From: K900 Date: Sat, 8 Jul 2023 12:00:23 +0300 Subject: [PATCH 2/2] nixos/sddm: add option to enable Wayland support via Weston --- .../services/x11/display-managers/sddm.nix | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/nixos/modules/services/x11/display-managers/sddm.nix b/nixos/modules/services/x11/display-managers/sddm.nix index 47e60236eaeb..25470e2d3c2f 100644 --- a/nixos/modules/services/x11/display-managers/sddm.nix +++ b/nixos/modules/services/x11/display-managers/sddm.nix @@ -33,6 +33,8 @@ let # Implementation is done via pkgs/applications/display-managers/sddm/sddm-default-session.patch DefaultSession = optionalString (dmcfg.defaultSession != null) "${dmcfg.defaultSession}.desktop"; + + DisplayServer = if cfg.wayland.enable then "wayland" else "x11"; }; Theme = { @@ -62,6 +64,7 @@ let Wayland = { EnableHiDPI = cfg.enableHidpi; SessionDir = "${dmcfg.sessionData.desktops}/share/wayland-sessions"; + CompositorCommand = lib.optionalString cfg.wayland.enable cfg.wayland.compositorCommand; }; } // lib.optionalAttrs dmcfg.autoLogin.enable { Autologin = { @@ -184,6 +187,32 @@ in ''; }; }; + + # Experimental Wayland support + wayland = { + enable = mkEnableOption "experimental Wayland support"; + + compositorCommand = mkOption { + type = types.str; + internal = true; + + # This is basically the upstream default, but with Weston referenced by full path + # and the configuration generated from NixOS options. + default = let westonIni = (pkgs.formats.ini {}).generate "weston.ini" { + libinput = { + enable-tap = xcfg.libinput.mouse.tapping; + left-handed = xcfg.libinput.mouse.leftHanded; + }; + keyboard = { + keymap_model = xcfg.xkbModel; + keymap_layout = xcfg.layout; + keymap_variant = xcfg.xkbVariant; + keymap_options = xcfg.xkbOptions; + }; + }; in "${pkgs.weston}/bin/weston --shell=fullscreen-shell.so -c ${westonIni}"; + description = lib.mdDoc "Command used to start the selected compositor"; + }; + }; }; };