diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 0e2104a20e2d..071a8175b4d3 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -204,6 +204,7 @@ in k3s = handleTest ./k3s.nix {}; kafka = handleTest ./kafka.nix {}; kbd-setfont-decompress = handleTest ./kbd-setfont-decompress.nix {}; + kbd-update-search-paths-patch = handleTest ./kbd-update-search-paths-patch.nix {}; kea = handleTest ./kea.nix {}; keepalived = handleTest ./keepalived.nix {}; keepassxc = handleTest ./keepassxc.nix {}; diff --git a/nixos/tests/kbd-update-search-paths-patch.nix b/nixos/tests/kbd-update-search-paths-patch.nix new file mode 100644 index 000000000000..2967ee489037 --- /dev/null +++ b/nixos/tests/kbd-update-search-paths-patch.nix @@ -0,0 +1,18 @@ +import ./make-test-python.nix ({ pkgs, ... }: { + name = "kbd-update-search-paths-patch"; + + machine = { pkgs, options, ... }: { + console = { + packages = options.console.packages.default ++ [ pkgs.terminus_font ]; + }; + }; + + testScript = '' + command = "${pkgs.kbd}/bin/setfont ter-112n 2>&1" + (status, out) = machine.execute(command) + pattern = re.compile(r".*Unable to find file:.*") + match = pattern.match(out) + if match: + raise Exception("command `{}` failed".format(command)) + ''; +}) diff --git a/pkgs/os-specific/linux/kbd/default.nix b/pkgs/os-specific/linux/kbd/default.nix index c7a59e59cab6..23a523b15d72 100644 --- a/pkgs/os-specific/linux/kbd/default.nix +++ b/pkgs/os-specific/linux/kbd/default.nix @@ -29,6 +29,10 @@ stdenv.mkDerivation rec { "--disable-nls" ]; + patches = [ + ./search-paths.patch + ]; + postPatch = '' # Renaming keymaps with name clashes, because loadkeys just picks @@ -62,7 +66,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ autoreconfHook pkg-config flex ]; passthru.tests = { - inherit (nixosTests) keymap kbd-setfont-decompress; + inherit (nixosTests) keymap kbd-setfont-decompress kbd-update-search-paths-patch; }; meta = with lib; { diff --git a/pkgs/os-specific/linux/kbd/search-paths.patch b/pkgs/os-specific/linux/kbd/search-paths.patch new file mode 100644 index 000000000000..3b337ca7cc2b --- /dev/null +++ b/pkgs/os-specific/linux/kbd/search-paths.patch @@ -0,0 +1,85 @@ +Add /etc/kbd to the list of directories to search for the console +fonts, screen mappings, Unicode maps, keytable files, etc. + +Without this patch, kbd will only look inside +/nix/store/-kbd-x.x.x/share. + +--- a/src/libkeymap/analyze.l ++++ b/src/libkeymap/analyze.l +@@ -109,6 +109,9 @@ static const char *const include_dirpath1[] = { + NULL + }; + static const char *const include_dirpath3[] = { ++ "/etc/kbd/" KEYMAPDIR "/include/", ++ "/etc/kbd/" KEYMAPDIR "/i386/include/", ++ "/etc/kbd/" KEYMAPDIR "/mac/include/", + DATADIR "/" KEYMAPDIR "/include/", + DATADIR "/" KEYMAPDIR "/i386/include/", + DATADIR "/" KEYMAPDIR "/mac/include/", +--- a/src/libkfont/context.c ++++ b/src/libkfont/context.c +@@ -13,6 +13,7 @@ + /* search for the map file in these directories (with trailing /) */ + static const char *const mapdirpath[] = { + "", ++ "/etc/kbd/" TRANSDIR "/", + DATADIR "/" TRANSDIR "/", + NULL + }; +@@ -28,6 +29,7 @@ static const char *const mapsuffixes[] = { + /* search for the font in these directories (with trailing /) */ + static const char *const fontdirpath[] = { + "", ++ "/etc/kbd/" FONTDIR "/", + DATADIR "/" FONTDIR "/", + NULL + }; +@@ -42,6 +44,7 @@ static char const *const fontsuffixes[] = { + + static const char *const unidirpath[] = { + "", ++ "/etc/kbd/" UNIMAPDIR "/", + DATADIR "/" UNIMAPDIR "/", + NULL + }; +@@ -55,6 +58,7 @@ static const char *const unisuffixes[] = { + /* hide partial fonts a bit - loading a single one is a bad idea */ + const char *const partfontdirpath[] = { + "", ++ "/etc/kbd/" FONTDIR "/" PARTIALDIR "/", + DATADIR "/" FONTDIR "/" PARTIALDIR "/", + NULL + }; +--- a/src/loadkeys.c ++++ b/src/loadkeys.c +@@ -27,6 +27,7 @@ + + static const char *const dirpath1[] = { + "", ++ "/etc/kbd/" KEYMAPDIR "/**", + DATADIR "/" KEYMAPDIR "/**", + KERNDIR "/", + NULL +--- a/src/resizecons.c ++++ b/src/resizecons.c +@@ -104,6 +104,7 @@ static void vga_set_verticaldisplayend_lowbyte(int); + + const char *const dirpath[] = { + "", ++ "/etc/kbd/" VIDEOMODEDIR "/", + DATADIR "/" VIDEOMODEDIR "/", + NULL + }; +--- a/src/setfont.c ++++ b/src/setfont.c +@@ -48,8 +48,8 @@ usage(void) + " -v Be verbose.\n" + " -C Indicate console device to be used.\n" + " -V Print version and exit.\n" +- "Files are loaded from the current directory or %s/*/.\n"), +- DATADIR); ++ "Files are loaded from the current directory or %s/*/ or %s/*/.\n"), ++ DATADIR, "/etc/kbd"); + exit(EX_USAGE); + } +