Skip to content

Commit a825406

Browse files
authored
lomiri.lomiri: Replace NIXOS_XKB_LAYOUTS envvar with file (#345288)
2 parents 2977943 + 85e63d0 commit a825406

File tree

5 files changed

+137
-34
lines changed

5 files changed

+137
-34
lines changed

nixos/modules/services/desktop-managers/lomiri.nix

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,9 @@ in {
4444
telephony-service
4545
teleports
4646
]);
47-
variables = {
48-
# To override the keyboard layouts in Lomiri
49-
NIXOS_XKB_LAYOUTS = config.services.xserver.xkb.layout;
50-
};
47+
48+
# To override the default keyboard layout in Lomiri
49+
etc.${pkgs.lomiri.lomiri.passthru.etcLayoutsFile}.text = lib.strings.replaceStrings [","] ["\n"] config.services.xserver.xkb.layout;
5150
};
5251

5352
hardware = {

nixos/tests/lomiri.nix

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -700,4 +700,92 @@ in
700700
}
701701
);
702702

703+
keymap =
704+
let
705+
pwInput = "qwerty";
706+
pwOutput = "qwertz";
707+
in
708+
makeTest (
709+
{ pkgs, lib, ... }:
710+
{
711+
name = "lomiri-keymap";
712+
713+
meta = {
714+
maintainers = lib.teams.lomiri.members;
715+
};
716+
717+
nodes.machine =
718+
{ config, ... }:
719+
{
720+
imports = [ ./common/user-account.nix ];
721+
722+
virtualisation.memorySize = 2047;
723+
724+
users.users.${user} = {
725+
inherit description;
726+
password = lib.mkForce pwOutput;
727+
};
728+
729+
services.desktopManager.lomiri.enable = lib.mkForce true;
730+
services.displayManager.defaultSession = lib.mkForce "lomiri";
731+
732+
# Help with OCR
733+
fonts.packages = [ pkgs.inconsolata ];
734+
735+
# Non-QWERTY keymap to test keymap patch
736+
services.xserver.xkb.layout = "de";
737+
};
738+
739+
enableOCR = true;
740+
741+
testScript =
742+
{ nodes, ... }:
743+
''
744+
def wait_for_text(text):
745+
"""
746+
Wait for on-screen text, and try to optimise retry count for slow hardware.
747+
"""
748+
machine.sleep(10)
749+
machine.wait_for_text(text)
750+
751+
start_all()
752+
machine.wait_for_unit("multi-user.target")
753+
754+
# Lomiri in greeter mode should use the correct keymap
755+
with subtest("lomiri greeter keymap works"):
756+
machine.wait_for_unit("display-manager.service")
757+
machine.wait_until_succeeds("pgrep -u lightdm -f 'lomiri --mode=greeter'")
758+
759+
# Start page shows current time
760+
wait_for_text(r"(AM|PM)")
761+
machine.screenshot("lomiri_greeter_launched")
762+
763+
# Advance to login part
764+
machine.send_key("ret")
765+
wait_for_text("${description}")
766+
machine.screenshot("lomiri_greeter_login")
767+
768+
# Login
769+
machine.send_chars("${pwInput}\n")
770+
machine.wait_until_succeeds("pgrep -u ${user} -f 'lomiri --mode=full-shell'")
771+
772+
# Output rendering from Lomiri has started when it starts printing performance diagnostics
773+
machine.wait_for_console_text("Last frame took")
774+
# Look for datetime's clock, one of the last elements to load
775+
wait_for_text(r"(AM|PM)")
776+
machine.screenshot("lomiri_launched")
777+
778+
# Lomiri in desktop mode should use the correct keymap
779+
with subtest("lomiri session keymap works"):
780+
machine.send_key("ctrl-alt-t")
781+
wait_for_text(r"(${user}|machine)")
782+
machine.screenshot("terminal_opens")
783+
784+
machine.send_chars("touch ${pwInput}\n")
785+
machine.wait_for_file("/home/alice/${pwOutput}", 10)
786+
787+
machine.send_key("alt-f4")
788+
'';
789+
}
790+
);
703791
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
From 9e843a203f68ca75d430f1032a92d3c87f9ed2c2 Mon Sep 17 00:00:00 2001
2+
From: OPNA2608 <[email protected]>
3+
Date: Sun, 29 Sep 2024 12:05:07 +0200
4+
Subject: [PATCH] plugins/AccountsService/AccountsService.cpp: If keymap unset,
5+
read fallbacks from NixOS-specific file
6+
7+
---
8+
plugins/AccountsService/AccountsService.cpp | 15 +++++++++++++++
9+
1 file changed, 15 insertions(+)
10+
11+
diff --git a/plugins/AccountsService/AccountsService.cpp b/plugins/AccountsService/AccountsService.cpp
12+
index bfc4bf3ce..9308220a9 100644
13+
--- a/plugins/AccountsService/AccountsService.cpp
14+
+++ b/plugins/AccountsService/AccountsService.cpp
15+
@@ -311,6 +311,21 @@ QStringList AccountsService::keymaps() const
16+
return simplifiedMaps;
17+
}
18+
19+
+ QFile fallbackNixosLayouts ("@nixosLayoutFile@");
20+
+ if (fallbackNixosLayouts.open(QIODevice::ReadOnly | QIODevice::Text)) {
21+
+ while (!fallbackNixosLayouts.atEnd()) {
22+
+ QString line = QString(fallbackNixosLayouts.readLine()).simplified();
23+
+ if (!line.isEmpty()) {
24+
+ simplifiedMaps.append(line);
25+
+ }
26+
+ }
27+
+ fallbackNixosLayouts.close();
28+
+ }
29+
+
30+
+ if (!simplifiedMaps.isEmpty()) {
31+
+ return simplifiedMaps;
32+
+ }
33+
+
34+
return {QStringLiteral("us")};
35+
}
36+
37+
--
38+
2.44.1
39+

pkgs/desktops/lomiri/applications/lomiri/9902-lomiri-Check-NIXOS_XKB_LAYOUTS.patch

Lines changed: 0 additions & 29 deletions
This file was deleted.

pkgs/desktops/lomiri/applications/lomiri/default.nix

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
fetchpatch2,
77
gitUpdater,
88
linkFarm,
9+
substituteAll,
910
nixosTests,
1011
ayatana-indicator-datetime,
1112
bash,
@@ -116,7 +117,10 @@ stdenv.mkDerivation (finalAttrs: {
116117
})
117118

118119
./9901-lomiri-Disable-Wizard.patch
119-
./9902-lomiri-Check-NIXOS_XKB_LAYOUTS.patch
120+
(substituteAll {
121+
src = ./9902-Layout-fallback-file.patch;
122+
nixosLayoutFile = "/etc/" + finalAttrs.finalPackage.passthru.etcLayoutsFile;
123+
})
120124
];
121125

122126
postPatch =
@@ -269,12 +273,14 @@ stdenv.mkDerivation (finalAttrs: {
269273
'';
270274

271275
passthru = {
276+
etcLayoutsFile = "lomiri/keymaps";
272277
tests = {
273278
inherit (nixosTests.lomiri)
274279
greeter
275280
desktop-basics
276281
desktop-appinteractions
277282
desktop-ayatana-indicators
283+
keymap
278284
;
279285
};
280286
updateScript = gitUpdater { };

0 commit comments

Comments
 (0)